[Erp5-report] r30015 - /erp5/trunk/products/ERP5Type/Message.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Oct 26 18:35:37 CET 2009
Author: leonardo
Date: Mon Oct 26 18:35:34 2009
New Revision: 30015
URL: http://svn.erp5.org?rev=30015&view=rev
Log:
Implement a getGlobalTranslationService replacement for Zope 2.12, but use the one Zope 2.8 if available (approved by jm).
Modified:
erp5/trunk/products/ERP5Type/Message.py
Modified: erp5/trunk/products/ERP5Type/Message.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Message.py?rev=30015&r1=30014&r2=30015&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Message.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Message.py [utf8] Mon Oct 26 18:35:34 2009
@@ -30,20 +30,56 @@
from AccessControl import ClassSecurityInfo
from Products.PythonScripts.Utility import allow_class
try:
- from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService
+ from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService
+ # on Zope 2.8
except ImportError:
- import zLOG, sys
- zLOG.LOG('Products.ERP5Type.Messages',
- zLOG.ERROR,
- 'Products.PageTemplates.GlobalTranslationService has been removed. '
- 'Translation services for Message will be disabled',
- error=sys.exc_info())
- def getGlobalTranslationService():
- zLOG.LOG('Products.ERP5Type.Messages',
- zLOG.WARNING,
- 'not returning a translation service!')
- return None
+ # on Zope 2.12
+ import zLOG, sys
+ zLOG.LOG('Products.ERP5Type.Messages',
+ zLOG.ERROR,
+ 'Products.PageTemplates.GlobalTranslationService has been removed. '
+ 'Using alternative implementation',)
+ import zope.i18n
+ from zope.i18n.interfaces import ITranslationDomain
+ from Acquisition import aq_get
+
+ class GlobalTranslationService(object):
+ """ GlobalTranslationService replacement """
+ # inspired by the old Localizer GlobalTranslationService
+
+ def getTranslateMethod(self, context, domain):
+ """Returns either the translate() method of an appropriate Localizer
+ MessageCatalog or zope.i18n.translate
+ """
+ if context is None:
+ return zope.i18n.translate
+ # Try to get a catalog from a Localizer Object using acquisition
+ # FIXME: This should be fixed to use queryUtility instead, but only
+ # after ERP5Site starts implementing ISite so that MessageCatalogs can
+ # registerm themselves as local utilities.
+ # translation_domain = zope.component.getUtility(ITranslationDomain,
+ # domain,
+ # context=context)
+ translation_domain = context.unrestrictedTraverse(("Localizer", domain),
+ None)
+ # FIXME: Remove this check once we're using getUtility
+ if ITranslationDomain.providedBy(translation_domain):
+ return translation_domain.translate
+ return zope.i18n.translate
+
+ def translate(self, domain, msgid, context=None, **kw):
+ translate = self.getTranslateMethod(context, domain)
+ # For zope.i18n, the 'context' of a translation request is actually the
+ # an IBrowserRequest, for languate negotiation (see, for instance,
+ # Products.CMFPlone.TranslationServiceTool). The new localizer
+ # MessageCatalog abides by the zope.i18n.interface definitions.
+ # (Actually, it ignores the context).
+ request = aq_get(context, 'REQUEST', None)
+ return translate(msgid=msgid, domain=domain, context=request, **kw)
+
+ getGlobalTranslationService = GlobalTranslationService
+
from Products.ERP5Type.Globals import get_request
from cPickle import dumps, loads
More information about the Erp5-report
mailing list