From 5f01c94db9525edbe48c136ba7376a0d62549503 Mon Sep 17 00:00:00 2001 From: Damien Baty Date: Fri, 30 Mar 2012 14:31:38 +0200 Subject: [PATCH] Do not recreate a TranslationString if we already have one, in 'SequenceWidget.serialize()'. This makes it possible to provide a TranslationString with a custom domain (not 'deform') for 'SequenceWidget.add_subitem_text_template'. --- deform/tests/test_widget.py | 30 ++++++++++++++++++++++++++++++ deform/widget.py | 10 ++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/deform/tests/test_widget.py b/deform/tests/test_widget.py index 287039a8..9a545916 100644 --- a/deform/tests/test_widget.py +++ b/deform/tests/test_widget.py @@ -1222,6 +1222,36 @@ def test_serialize_add_subitem_translates_title(self): self.assertEqual(renderer.kw['add_subitem_text'].interpolate(), 'Yo titel') + def test_serialize_add_subitem_translates_title_with_default_domain(self): + from colander import null + # By default, we get a TranslationString whose domain is 'deform' + renderer = DummyRenderer('abc') + schema = DummySchema() + field = DummyField(schema, renderer, {'title': 'titel'}) + inner = DummyField() + field.children=[inner] + widget = self._makeOne() + widget.add_subitem_text_template = 'Yo ${subitem_title}' + widget.serialize(field, null) + self.assertEqual(renderer.kw['add_subitem_text'].domain, 'deform') + + def test_serialize_add_subitem_translates_title_with_another_domain(self): + from colander import null + from translationstring import TranslationStringFactory + renderer = DummyRenderer('abc') + schema = DummySchema() + field = DummyField(schema, renderer, {'title': 'titel'}) + inner = DummyField() + field.children=[inner] + widget = self._makeOne() + # Here we provide our own TranslationString with a custom domain + custom_domain = 'not_deform' + _ = TranslationStringFactory(custom_domain) + widget.add_subitem_text_template = _('Yo ${subitem_title}') + widget.serialize(field, null) + self.assertEqual(renderer.kw['add_subitem_text'].domain, + custom_domain) + def test_serialize_add_subitem_translates_description(self): from colander import null renderer = DummyRenderer('abc') diff --git a/deform/widget.py b/deform/widget.py index 473c9f69..48690a3c 100644 --- a/deform/widget.py +++ b/deform/widget.py @@ -5,6 +5,8 @@ from colander import Invalid from colander import null +from translationstring import TranslationString + from deform.i18n import _ from deform.compat import ( @@ -1033,8 +1035,12 @@ def serialize(self, field, cstruct, readonly=False): subitem_title=translate(item_field.title), subitem_description=translate(item_field.description), subitem_name=item_field.name) - add_subitem_text = _(self.add_subitem_text_template, - mapping=add_template_mapping) + if isinstance(self.add_subitem_text_template, TranslationString): + add_subitem_text = self.add_subitem_text_template % \ + add_template_mapping + else: + add_subitem_text = _(self.add_subitem_text_template, + mapping=add_template_mapping) return field.renderer(template, field=field, cstruct=cstruct,