Commit 69b02bda authored by Michal Čihař's avatar Michal Čihař

Properly propagate plural values

parent 6a778da5
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): ...@@ -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): ...@@ -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)
......
...@@ -7,6 +7,7 @@ from django.contrib import messages ...@@ -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): ...@@ -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): ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment