src/pyams_i18n/expr.py
changeset 9 017ad36cc2ba
parent 7 0e4957081cd1
child 30 e82b56583f65
equal deleted inserted replaced
8:44a92dc178ce 9:017ad36cc2ba
    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