From 69b02bda4929f4255c3898b71e4f460689e2a68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Thu, 1 Mar 2012 13:49:36 +0100 Subject: [PATCH] Properly propagate plural values --- trans/forms.py | 17 ++++++++++++++++- trans/views.py | 5 +++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/trans/forms.py b/trans/forms.py index abd9fe5c5..f379806e4 100644 --- a/trans/forms.py +++ b/trans/forms.py @@ -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('
'.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) diff --git a/trans/views.py b/trans/views.py index 5c695b848..837522984 100644 --- a/trans/views.py +++ b/trans/views.py @@ -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)