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.utils.translation import ugettext_lazy, ugettext as _
from django.utils.safestring import mark_safe
from django.utils.encoding import smart_unicode
class PluralTextarea(forms.Textarea):
'''
@ -10,7 +11,6 @@ class PluralTextarea(forms.Textarea):
if type(value) != list:
return super(PluralTextarea, self).render(name, value, attrs)
ret = []
print value
for idx, val in enumerate(value):
if idx > 0:
fieldname = '%s_%d' % (name, idx)
@ -19,10 +19,25 @@ class PluralTextarea(forms.Textarea):
ret.append(super(PluralTextarea, self).render(fieldname, val, attrs))
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):
def __init__(self, max_length=None, min_length=None, *args, **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):
checksum = forms.CharField(widget = forms.HiddenInput)
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.forms import TranslationForm
from util import is_plural, split_plural, join_plural
import logging
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)
if 'suggest' in request.POST:
Suggestion.objects.create(
target = form.cleaned_data['target'],
target = join_plural(form.cleaned_data['target']),
checksum = unit.checksum,
language = unit.translation.language,
project = unit.translation.subproject.project,
@ -74,7 +75,7 @@ def translate(request, project, subproject, lang):
elif not request.user.is_authenticated():
messages.add_message(request, messages.ERROR, _('You need to login to be able to save translations!'))
else:
unit.target = form.cleaned_data['target']
unit.target = join_plural(form.cleaned_data['target'])
unit.fuzzy = form.cleaned_data['fuzzy']
unit.save_backend(request)