equal
deleted
inserted
replaced
14 |
14 |
15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_i18n.interfaces import INegotiator |
19 from pyams_i18n.interfaces import II18n |
20 |
20 |
21 # import packages |
21 # import packages |
22 from chameleon.astutil import Symbol |
22 from chameleon.astutil import Symbol |
23 from chameleon.tales import StringExpr |
23 from chameleon.tales import StringExpr |
24 from pyams_utils.registry import query_utility |
|
25 from pyams_utils.tales import ContextExprMixin |
24 from pyams_utils.tales import ContextExprMixin |
26 |
25 |
27 |
26 |
28 def render_i18n_expression(econtext, name): |
27 def render_i18n_expression(econtext, name): |
29 """Render an I18n expression""" |
28 """Render an I18n expression""" |
33 context_name, attr = name.split('.') |
32 context_name, attr = name.split('.') |
34 else: |
33 else: |
35 context_name = 'context', |
34 context_name = 'context', |
36 attr = name |
35 attr = name |
37 context = econtext.get(context_name) |
36 context = econtext.get(context_name) |
38 result = getattr(context, attr) |
|
39 if not isinstance(result, dict): |
|
40 return result |
|
41 request = econtext.get('request') |
37 request = econtext.get('request') |
42 lang = request.locale_name |
38 return II18n(context).query_attribute(attr, request=request) |
43 value = result.get(lang) |
|
44 if not value: |
|
45 negotiator = query_utility(INegotiator) |
|
46 if (negotiator is not None) and (negotiator.server_language != lang): |
|
47 return result.get(negotiator.server_language) |
|
48 return value |
|
49 |
39 |
50 |
40 |
51 class I18nExpr(ContextExprMixin, StringExpr): |
41 class I18nExpr(ContextExprMixin, StringExpr): |
52 """i18n:context.attribute TALES expression""" |
42 """i18n:context.attribute TALES expression""" |
53 |
43 |