[Checkins] SVN: megrok.jinja/trunk/src/megrok/jinja/extensions.py It use zope.cachedescriptors.method.cachedIn to avoid the getUtility method call for each translation in a given template.
Santiago Videla
santiago.videla at gmail.com
Mon Apr 6 22:22:24 EDT 2009
Log message for revision 98959:
It use zope.cachedescriptors.method.cachedIn to avoid the getUtility method call for each translation in a given template.
Changed:
U megrok.jinja/trunk/src/megrok/jinja/extensions.py
-=-
Modified: megrok.jinja/trunk/src/megrok/jinja/extensions.py
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/extensions.py 2009-04-07 01:33:07 UTC (rev 98958)
+++ megrok.jinja/trunk/src/megrok/jinja/extensions.py 2009-04-07 02:22:24 UTC (rev 98959)
@@ -17,6 +17,7 @@
from jinja2.utils import contextfunction
from zope.component import getUtility
from zope.i18n.interfaces import ITranslationDomain, IUserPreferredLanguages
+from zope.cachedescriptors import method
class DomainNotDefined(Exception):
def __str__(self):
@@ -25,19 +26,6 @@
Use {% set i18n_domain='your-domain' %} in the top of your template."""
@contextfunction
-def translator(context, msg):
- request = context.resolve('view').request
- domain = context.resolve('i18n_domain')
- if not domain:
- raise DomainNotDefined
-
- langs = IUserPreferredLanguages(request).getPreferredLanguages()
-
- translation_domain = getUtility(ITranslationDomain, domain)
-
- return translation_domain.translate(msg, target_language=langs[0])
-
- at contextfunction
def _translator_alias(context, string):
return context.resolve('gettext')(context, string)
@@ -65,8 +53,28 @@
We override this method to use a different translator
allowing dynamic domains using zope.i18n machinery.
"""
- self.environment.globals.update(gettext=translator)
+ self.environment.globals.update(gettext=self.translator)
+ @method.cachedIn('_cache')
+ def trans_domain(self, domain):
+ """
+ Domains names are cached in order to avoid
+ the getUtility call for each translation in the template.
+ """
+ return getUtility(ITranslationDomain, domain)
+
+ @contextfunction
+ def translator(self, context, msg):
+ request = context.resolve('view').request
+ domain = context.resolve('i18n_domain')
+ if not domain:
+ raise DomainNotDefined
+
+ langs = IUserPreferredLanguages(request).getPreferredLanguages()
+
+ return self.trans_domain(domain).translate(msg,
+ target_language=langs[0])
+
def _make_node(self, singular, plural, variables, plural_expr):
"""
This method it's called from the `parser` defined in
More information about the Checkins
mailing list