Properly propagate plural values

This commit is contained in:
Michal Čihař 2012-03-01 13:49:36 +01:00
parent 6a778da5c2
commit 69b02bda49
2 changed files with 19 additions and 3 deletions

View File

@ -1,6 +1,7 @@
from django import forms from django import forms
from django.utils.translation import ugettext_lazy, ugettext as _ from django.utils.translation import ugettext_lazy, ugettext as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.encoding import smart_unicode
class PluralTextarea(forms.Textarea): class PluralTextarea(forms.Textarea):
''' '''
@ -10,7 +11,6 @@ class PluralTextarea(forms.Textarea):
if type(value) != list: if type(value) != list:
return super(PluralTextarea, self).render(name, value, attrs) return super(PluralTextarea, self).render(name, value, attrs)
ret = [] ret = []
print value
for idx, val in enumerate(value): for idx, val in enumerate(value):
if idx > 0: if idx > 0:
fieldname = '%s_%d' % (name, idx) fieldname = '%s_%d' % (name, idx)
@ -19,10 +19,25 @@ class PluralTextarea(forms.Textarea):
ret.append(super(PluralTextarea, self).render(fieldname, val, attrs)) ret.append(super(PluralTextarea, self).render(fieldname, val, attrs))
return mark_safe('<br />'.join(ret)) return mark_safe('<br />'.join(ret))
def value_from_datadict(self, data, files, name):
ret = [smart_unicode(data.get(name, None))]
for idx in range(1, 10):
fieldname = '%s_%d' % (name, idx)
if not fieldname in data:
break
ret.append(smart_unicode(data.get(fieldname, None)))
if len(ret) == 0:
return ret[0]
return ret
class PluralField(forms.CharField): class PluralField(forms.CharField):
def __init__(self, max_length=None, min_length=None, *args, **kwargs): def __init__(self, max_length=None, min_length=None, *args, **kwargs):
super(PluralField, self).__init__(*args, widget = PluralTextarea, **kwargs) super(PluralField, self).__init__(*args, widget = PluralTextarea, **kwargs)
def to_python(self, value):
# We can get list from PluralTextarea
return value
class TranslationForm(forms.Form): class TranslationForm(forms.Form):
checksum = forms.CharField(widget = forms.HiddenInput) checksum = forms.CharField(widget = forms.HiddenInput)
target = PluralField(required = False) target = PluralField(required = False)

View File

@ -7,6 +7,7 @@ from django.contrib import messages
from trans.models import Project, SubProject, Translation, Unit, Suggestion from trans.models import Project, SubProject, Translation, Unit, Suggestion
from trans.forms import TranslationForm from trans.forms import TranslationForm
from util import is_plural, split_plural, join_plural
import logging import logging
logger = logging.getLogger('weblate') logger = logging.getLogger('weblate')
@ -66,7 +67,7 @@ def translate(request, project, subproject, lang):
unit = Unit.objects.get(checksum = form.cleaned_data['checksum'], translation = obj) unit = Unit.objects.get(checksum = form.cleaned_data['checksum'], translation = obj)
if 'suggest' in request.POST: if 'suggest' in request.POST:
Suggestion.objects.create( Suggestion.objects.create(
target = form.cleaned_data['target'], target = join_plural(form.cleaned_data['target']),
checksum = unit.checksum, checksum = unit.checksum,
language = unit.translation.language, language = unit.translation.language,
project = unit.translation.subproject.project, project = unit.translation.subproject.project,
@ -74,7 +75,7 @@ def translate(request, project, subproject, lang):
elif not request.user.is_authenticated(): elif not request.user.is_authenticated():
messages.add_message(request, messages.ERROR, _('You need to login to be able to save translations!')) messages.add_message(request, messages.ERROR, _('You need to login to be able to save translations!'))
else: else:
unit.target = form.cleaned_data['target'] unit.target = join_plural(form.cleaned_data['target'])
unit.fuzzy = form.cleaned_data['fuzzy'] unit.fuzzy = form.cleaned_data['fuzzy']
unit.save_backend(request) unit.save_backend(request)