0001-i18n-add-translate-template-filter-71590.patch
tests/test_i18n.py | ||
---|---|---|
4 | 4 | |
5 | 5 |
from wcs import sql |
6 | 6 |
from wcs.i18n import TranslatableMessage |
7 |
from wcs.qommon.template import Template |
|
7 | 8 | |
8 | 9 |
from .test_sql import column_exists_in_table |
9 | 10 |
from .utilities import clean_temporary_pub, create_temporary_pub, get_app |
... | ... | |
74 | 75 | |
75 | 76 |
catalog = TranslatableMessage.load_as_catalog('fr') |
76 | 77 |
assert catalog == {(None, 'string 1'): 'chaine 1', (None, 'string 2'): 'chaine 2'} |
78 | ||
79 | ||
80 |
def test_translate_template_tag(pub): |
|
81 |
pub.cfg['language'] = {'language': 'en', 'multilinguism': True, 'languages': ['fr', 'en']} |
|
82 |
pub.write_cfg() |
|
83 |
TranslatableMessage.do_table() |
|
84 |
TranslatableMessage.wipe() |
|
85 | ||
86 |
msg = TranslatableMessage() |
|
87 |
msg.string = 'string 1' |
|
88 |
msg.string_fr = 'chaine 1' |
|
89 |
msg.store() |
|
90 | ||
91 |
tmpl1 = Template('{{ "string 1"|translate }}') |
|
92 |
tmpl2 = Template('{{ "string 2"|translate }}') |
|
93 |
assert tmpl1.render() == 'string 1' |
|
94 |
assert tmpl2.render() == 'string 2' |
|
95 |
assert TranslatableMessage.count() == 1 |
|
96 |
with pub.with_language('fr'): |
|
97 |
assert tmpl1.render() == 'chaine 1' |
|
98 |
assert tmpl2.render() == 'string 2' |
|
99 |
assert TranslatableMessage.count() == 2 # string 2 has been added to catalog |
|
100 | ||
101 |
# check it's not added a second time |
|
102 |
del pub._i18n_catalog['fr'] |
|
103 |
assert tmpl2.render() == 'string 2' |
|
104 |
assert TranslatableMessage.count() == 2 |
|
105 | ||
106 |
# test context |
|
107 |
tmpl3 = Template('{{ "string 1"|translate:"plop" }}') |
|
108 |
assert tmpl3.render() == 'string 1' |
|
109 |
with pub.with_language('fr'): |
|
110 |
assert tmpl3.render() == 'string 1' |
|
111 |
assert TranslatableMessage.count() == 3 # added to catalog |
|
112 | ||
113 |
msg = TranslatableMessage.select([sql.Equal('string', 'string 1'), sql.Equal('context', 'plop')])[0] |
|
114 |
msg.string_fr = 'alt chaine 1' |
|
115 |
msg.store() |
|
116 |
del pub._i18n_catalog['fr'] |
|
117 |
assert tmpl3.render() == 'alt chaine 1' |
wcs/qommon/publisher.py | ||
---|---|---|
383 | 383 |
yield |
384 | 384 |
self.activate_language(current_language, request=self.get_request()) |
385 | 385 | |
386 |
def translate(self, string, context=None): |
|
386 |
def is_using_default_language(self): |
|
387 |
if not (self.has_i18n_enabled() and self.current_language): |
|
388 |
return True |
|
389 |
return bool(self.cfg.get('language', {}).get('language') == self.current_language) |
|
390 | ||
391 |
def translate(self, string, context=None, register=False): |
|
387 | 392 |
if type(string).__name__ == '__proxy__': # lazy gettext |
388 | 393 |
return str(string) |
389 | 394 |
if not self.has_i18n_enabled(): |
390 | 395 |
return string |
391 | 396 |
string = str(string) # unlazy |
392 |
if self.current_language and self.cfg.get('language', {}).get('language') != self.current_language: |
|
393 |
return self._i18n_catalog[self.current_language].get((context, string.strip())) or string |
|
397 |
if not self.is_using_default_language(): |
|
398 |
from wcs.i18n import TranslatableMessage |
|
399 | ||
400 |
string = string.strip() |
|
401 |
if self.current_language not in self._i18n_catalog: |
|
402 |
self._i18n_catalog[self.current_language] = TranslatableMessage.load_as_catalog( |
|
403 |
self.current_language |
|
404 |
) |
|
405 |
catalog_string = self._i18n_catalog[self.current_language].get((context, string)) |
|
406 |
if register and not catalog_string: |
|
407 |
from wcs.sql import Equal, Null |
|
408 | ||
409 |
criteria = [Equal('string', string)] |
|
410 |
if context: |
|
411 |
criteria.append(Equal('context', context)) |
|
412 |
else: |
|
413 |
criteria.append(Null('context')) |
|
414 |
msgs = TranslatableMessage.exists(criteria) |
|
415 |
if not msgs: |
|
416 |
msg = TranslatableMessage() |
|
417 |
msg.context = context |
|
418 |
msg.string = string |
|
419 |
msg.locations = [] |
|
420 |
msg.store() |
|
421 |
return catalog_string or string |
|
394 | 422 |
return string |
395 | 423 | |
396 | 424 |
def load_site_options(self): |
wcs/qommon/templatetags/qommon.py | ||
---|---|---|
1048 | 1048 |
allowed_tags = [t.strip() for t in allowed_tags] |
1049 | 1049 |
allowed_tags = [t for t in allowed_tags if t] |
1050 | 1050 |
return strip_some_tags(unlazy(value), allowed_tags) |
1051 | ||
1052 | ||
1053 |
@register.filter(is_safe=True) |
|
1054 |
def translate(string, context=None): |
|
1055 |
return get_publisher().translate(string, context=context, register=True) |
|
1051 |
- |