0003-cards-create-use-translated-digests-71590.patch
tests/test_i18n.py | ||
---|---|---|
2 | 2 | |
3 | 3 |
import pytest |
4 | 4 | |
5 |
from wcs import sql |
|
5 |
from wcs import fields, sql |
|
6 |
from wcs.carddef import CardDef |
|
6 | 7 |
from wcs.i18n import TranslatableMessage |
7 | 8 |
from wcs.qommon.template import Template |
8 | 9 | |
... | ... | |
115 | 116 |
msg.store() |
116 | 117 |
del pub._i18n_catalog['fr'] |
117 | 118 |
assert tmpl3.render() == 'alt chaine 1' |
119 | ||
120 | ||
121 |
def test_translated_digest(pub): |
|
122 |
pub.cfg['language'] = {'language': 'en', 'multilinguism': True, 'languages': ['fr', 'en']} |
|
123 |
pub.write_cfg() |
|
124 |
TranslatableMessage.do_table() |
|
125 |
TranslatableMessage.wipe() |
|
126 | ||
127 |
CardDef.wipe() |
|
128 |
carddef = CardDef() |
|
129 |
carddef.name = 'foo' |
|
130 |
carddef.fields = [ |
|
131 |
fields.StringField(id='1', label='Test', type='string', varname='foo'), |
|
132 |
] |
|
133 |
carddef.digest_templates = {'default': '{{ form_var_foo|translate }}'} |
|
134 |
carddef.store() |
|
135 |
carddef.data_class().wipe() |
|
136 | ||
137 |
carddata = carddef.data_class()() |
|
138 |
carddata.data = {'1': 'hello world'} |
|
139 |
carddata.just_created() |
|
140 |
carddata.store() |
|
141 |
assert carddata.digests == { |
|
142 |
'default': 'hello world', |
|
143 |
'default:fr': 'hello world', |
|
144 |
'default:en': 'hello world', |
|
145 |
} |
|
146 | ||
147 |
msg = TranslatableMessage.select([sql.Equal('string', 'hello world')])[0] |
|
148 |
msg.string_fr = 'bonjour monde' |
|
149 |
msg.store() |
|
150 |
del pub._i18n_catalog['fr'] |
|
151 | ||
152 |
carddata.store() |
|
153 |
assert carddata.digests == { |
|
154 |
'default': 'hello world', |
|
155 |
'default:fr': 'bonjour monde', |
|
156 |
'default:en': 'hello world', |
|
157 |
} |
wcs/carddef.py | ||
---|---|---|
227 | 227 |
if view_digest_key in (carddef.digest_templates or {}): |
228 | 228 |
digest_key = view_digest_key |
229 | 229 | |
230 |
if get_publisher() and not get_publisher().is_using_default_language(): |
|
231 |
digest_template = carddef.digest_templates.get(digest_key) |
|
232 |
if '|translate' in digest_template: |
|
233 |
digest_key += ':%s' % get_publisher().current_language |
|
234 | ||
230 | 235 |
if query: |
231 | 236 |
criterias.append(ElementILike('digests', digest_key, query)) |
232 | 237 |
if get_by_id: |
wcs/formdata.py | ||
---|---|---|
561 | 561 |
context = self.get_substitution_variables() |
562 | 562 |
context['formdef_id'] = self.formdef.id |
563 | 563 |
digests = self.digests or {} |
564 |
i18n_enabled = bool(get_publisher() and get_publisher().has_i18n_enabled()) |
|
564 | 565 |
for attribute, template in fields.items(): |
565 | 566 |
if template is None: |
566 | 567 |
new_value = None |
... | ... | |
585 | 586 |
key = attribute[9:] |
586 | 587 |
if new_value != (self.digests or {}).get(key): |
587 | 588 |
digests[key] = new_value |
589 | ||
590 |
if i18n_enabled and '|translate' in template and new_value != 'ERROR': |
|
591 |
# generate additional digests if there are translatable parts |
|
592 |
for language in get_publisher().get_enabled_languages(): |
|
593 |
key = attribute[9:] + ':%s' % language |
|
594 |
with get_publisher().with_language(language): |
|
595 |
try: |
|
596 |
new_value = Template(template, autoescape=False).render(context) |
|
597 |
except Exception: |
|
598 |
continue |
|
599 |
if new_value != (self.digests or {}).get(key): |
|
600 |
digests[key] = new_value |
|
601 | ||
588 | 602 |
else: |
589 | 603 |
if new_value != getattr(self, attribute, None): |
590 | 604 |
setattr(self, attribute, new_value) |
wcs/publisher.py | ||
---|---|---|
187 | 187 |
self.session_manager_class = sessions.StorageSessionManager |
188 | 188 |
self.set_session_manager(self.session_manager_class(session_class=self.session_class)) |
189 | 189 | |
190 |
def get_enabled_languages(self): |
|
191 |
return self.cfg.get('language', {}).get('languages') or [] |
|
192 | ||
190 | 193 |
def import_zip(self, fd): |
191 | 194 |
results = { |
192 | 195 |
'formdefs': 0, |
193 |
- |