Log message for revision 96953: Switched Products.PageTemplates to directly use zope.i18n.translate and removed the now obsolete GlobalTranslationService hook.
Changed: U Zope/trunk/doc/CHANGES.rst U Zope/trunk/src/Products/Five/doc/i18n.txt D Zope/trunk/src/Products/Five/i18n.py U Zope/trunk/src/Products/Five/tests/test_i18n.py U Zope/trunk/src/Products/PageTemplates/Expressions.py D Zope/trunk/src/Products/PageTemplates/GlobalTranslationService.py D Zope/trunk/src/Products/PageTemplates/tests/input/CheckI18nTranslateHooked.html D Zope/trunk/src/Products/PageTemplates/tests/output/CheckI18nTranslateHooked.html U Zope/trunk/src/Products/PageTemplates/tests/testHTMLTests.py -=- Modified: Zope/trunk/doc/CHANGES.rst =================================================================== --- Zope/trunk/doc/CHANGES.rst 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/doc/CHANGES.rst 2009-02-21 15:49:00 UTC (rev 96953) @@ -23,6 +23,9 @@ Restructuring +++++++++++++ +- Switched Products.PageTemplates to directly use zope.i18n.translate and + removed the GlobalTranslationService hook. + - Removed bridging code from Product.Five for PlacelessTranslationService and Localizer. Neither of the two is actually using this anymore. Modified: Zope/trunk/src/Products/Five/doc/i18n.txt =================================================================== --- Zope/trunk/src/Products/Five/doc/i18n.txt 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/Five/doc/i18n.txt 2009-02-21 15:49:00 UTC (rev 96953) @@ -4,14 +4,6 @@ Translation ----------- -Five registers its own translation service mockup with the Page -Templates machinery and prevents any other product from also doing so. -That means, Five always assumes control over ZPT i18n. When a certain -domain has not been registered the Zope 3 way, Five's translation -service will see that the utility lookup fails and use the next -available fallback translation service. In case of no other -translation service installed, that is just a dummy fallback. - To register Zope 3 style translation domains, use the following ZCML statement:: Deleted: Zope/trunk/src/Products/Five/i18n.py =================================================================== --- Zope/trunk/src/Products/Five/i18n.py 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/Five/i18n.py 2009-02-21 15:49:00 UTC (rev 96953) @@ -1,70 +0,0 @@ -############################################################################## -# -# Copyright (c) 2005 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Mimick Zope3 i18n machinery for Zope 2 - -$Id$ -""" -from Acquisition import aq_get -from zope.i18n.interfaces import IFallbackTranslationDomainFactory -from zope.i18n.interfaces import ITranslationDomain -from zope.component import queryUtility -from zope.i18nmessageid import Message -from zope.publisher.interfaces.browser import IBrowserRequest - - -class FiveTranslationService: - """Translation service that delegates to ``zope.i18n`` machinery. - """ - # this is mostly a copy of zope.i18n.translate, with modifications - # regarding fallback and Zope 2 compatability - def translate(self, domain, msgid, mapping=None, - context=None, target_language=None, default=None): - if isinstance(msgid, Message): - domain = msgid.domain - default = msgid.default - mapping = msgid.mapping - - if default is None: - default = unicode(msgid) - - if domain: - util = queryUtility(ITranslationDomain, domain) - if util is None: - util = queryUtility(IFallbackTranslationDomainFactory) - if util is not None: - util = util(domain) - else: - util = queryUtility(IFallbackTranslationDomainFactory) - if util is not None: - util = util() - - if util is None: - # fallback to translation service that was registered, - # DummyTranslationService the worst - ts = _fallback_translation_service - return ts.translate(domain, msgid, mapping=mapping, context=context, - target_language=target_language, default=default) - - # in Zope3, context is adapted to IUserPreferredLanguages, - # which means context should be the request in this case. - # Do not attempt to acquire REQUEST from the context, when we already - # got a request as the context - if context is not None: - if not IBrowserRequest.providedBy(context): - context = aq_get(context, 'REQUEST', None) - return util.translate(msgid, mapping=mapping, context=context, - target_language=target_language, default=default) - -# Hook that will be used by Products.PageTemplates.GlobalTranslationService -_fallback_translation_service = None Modified: Zope/trunk/src/Products/Five/tests/test_i18n.py =================================================================== --- Zope/trunk/src/Products/Five/tests/test_i18n.py 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/Five/tests/test_i18n.py 2009-02-21 15:49:00 UTC (rev 96953) @@ -53,38 +53,7 @@ u'Dies ist eine explizite Nachricht' """ -def test_FiveTranslationService(): - """ - Test FiveTranslationService. First we need the GlobalTranslationService: - >>> from Products.PageTemplates import GlobalTranslationService - >>> GTS = GlobalTranslationService.getGlobalTranslationService() - - Now, take an arbitrary message id from an arbitrary domain: - - >>> from zope.i18nmessageid import MessageFactory - >>> from zope.i18n import translate - >>> _ = MessageFactory('random') - >>> msg = _(u'explicit-msg', u'This is an explicit message') - - By default, the i18n message is translated by the DummyTranslationService: - - >>> GTS.translate('default', msg, target_language='test') - u'This is an explicit message' - - Now, register the TestMessageFallbackDomain: - - >>> from zope.component import provideUtility - >>> from zope.i18n.testmessagecatalog import TestMessageFallbackDomain - >>> provideUtility(TestMessageFallbackDomain) - - The i18n message is now translated by the TestMessageFallbackDomain: - - >>> GTS.translate('default', msg, target_language='test') - u'[[random][explicit-msg (This is an explicit message)]]' - """ - - def test_suite(): from zope.testing.doctest import DocTestSuite return DocTestSuite(setUp=setUp, tearDown=tearDown) Modified: Zope/trunk/src/Products/PageTemplates/Expressions.py =================================================================== --- Zope/trunk/src/Products/PageTemplates/Expressions.py 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/PageTemplates/Expressions.py 2009-02-21 15:49:00 UTC (rev 96953) @@ -21,6 +21,7 @@ import logging from zope.component import queryUtility +from zope.i18n import translate from zope.interface import implements from zope.tales.tales import Context from zope.tales.tales import ErrorInfo as BaseErrorInfo @@ -41,7 +42,6 @@ from zope.contentprovider.tales import TALESProviderExpression from Products.PageTemplates import ZRPythonExpr from Products.PageTemplates.DeferExpr import LazyExpr -from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService from Products.PageTemplates.interfaces import IUnicodeEncodingConflictResolver SecureModuleImporter = ZRPythonExpr._SecureModuleImporter() @@ -169,9 +169,9 @@ self._vars_stack = [vars] def translate(self, msgid, domain=None, mapping=None, default=None): - context = self.contexts.get('context') - return getGlobalTranslationService().translate( - domain, msgid, mapping=mapping, + context = self.contexts.get('request') + return translate( + msgid, domain=domain, mapping=mapping, context=context, default=default) def evaluateBoolean(self, expr): Deleted: Zope/trunk/src/Products/PageTemplates/GlobalTranslationService.py =================================================================== --- Zope/trunk/src/Products/PageTemplates/GlobalTranslationService.py 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/PageTemplates/GlobalTranslationService.py 2009-02-21 15:49:00 UTC (rev 96953) @@ -1,51 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Global Translation Service for providing I18n to Page Templates. - -$Id$ -""" -import re -import Products.Five.i18n - -from DocumentTemplate.DT_Util import ustr -from zope.tal.taldefs import NAME_RE - -class DummyTranslationService: - """Translation service that doesn't know anything about translation.""" - def translate(self, domain, msgid, mapping=None, - context=None, target_language=None, default=None): - def repl(m, mapping=mapping): - return ustr(mapping[m.group(m.lastindex)]) - cre = re.compile(r'\$(?:(%s)|\{(%s)\})' % (NAME_RE, NAME_RE)) - return cre.sub(repl, default or msgid) - -# -# As of Five 1.1, we're by default using Zope 3 Message Catalogs for -# translation, but we allow fallback translation services such as PTS -# and Localizer -# -# TODO We should really deprecate Zope2-style translation service and -# only support Zope3-style i18n in the future. -# - -Products.Five.i18n._fallback_translation_service = DummyTranslationService() -fiveTranslationService = Products.Five.i18n.FiveTranslationService() - -def getGlobalTranslationService(): - return fiveTranslationService - -def setGlobalTranslationService(newservice): - oldservice, Products.Five.i18n._fallback_translation_service = \ - Products.Five.i18n._fallback_translation_service, newservice - return oldservice Deleted: Zope/trunk/src/Products/PageTemplates/tests/input/CheckI18nTranslateHooked.html =================================================================== --- Zope/trunk/src/Products/PageTemplates/tests/input/CheckI18nTranslateHooked.html 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/PageTemplates/tests/input/CheckI18nTranslateHooked.html 2009-02-21 15:49:00 UTC (rev 96953) @@ -1,15 +0,0 @@ -<html> -<body> -<head> - <p i18n:domain="foo" i18n:translate="bar">baz</p> - <a href="foo" alt="alttext" i18n:attributes="alt">link</a> - <p i18n:domain="dom" i18n:translate=""> - <span tal:replace="string:Lomax" i18n:name="name" /> was born in - <span tal:replace="string:Antarctica" i18n:name="country" />. - </p> - <p i18n:translate="hmm"> - I'm <span tal:replace="python:25" i18n:name="age">Age</span> - </p> -</head> -</body> -</html> Deleted: Zope/trunk/src/Products/PageTemplates/tests/output/CheckI18nTranslateHooked.html =================================================================== --- Zope/trunk/src/Products/PageTemplates/tests/output/CheckI18nTranslateHooked.html 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/PageTemplates/tests/output/CheckI18nTranslateHooked.html 2009-02-21 15:49:00 UTC (rev 96953) @@ -1,10 +0,0 @@ -<html> -<body> -<head> - <p>[foo](bar/{})</p> - <a href="foo" alt="[default](alttext/{})">link</a> - <p>[dom](${name} was born in ${country}./{'country':u'Antarctica','name':u'Lomax'})</p> - <p>[default](hmm/{'age':u'25'})</p> -</head> -</body> -</html> Modified: Zope/trunk/src/Products/PageTemplates/tests/testHTMLTests.py =================================================================== --- Zope/trunk/src/Products/PageTemplates/tests/testHTMLTests.py 2009-02-21 15:30:14 UTC (rev 96952) +++ Zope/trunk/src/Products/PageTemplates/tests/testHTMLTests.py 2009-02-21 15:49:00 UTC (rev 96953) @@ -18,8 +18,6 @@ from zope.traversing.adapters import DefaultTraversable from Products.PageTemplates.tests import util from Products.PageTemplates.PageTemplate import PageTemplate -from Products.PageTemplates.GlobalTranslationService import \ - setGlobalTranslationService from Products.PageTemplates.interfaces import IUnicodeEncodingConflictResolver from Products.PageTemplates.unicodeconflictresolver import DefaultUnicodeEncodingConflictResolver from AccessControl import SecurityManager @@ -32,17 +30,7 @@ class Folder(util.Base): pass -class TestTranslationService: - def translate(self, domain, msgid, mapping=None, *args, **kw): - maps = [] - if mapping is not None: - # Get a deterministic, sorted representation of dicts. - for k, v in mapping.items(): - maps.append('%s:%s' % (`k`, `v`)) - maps.sort() - return "[%s](%s/{%s})" % (domain, msgid, ','.join(maps)) - class UnitTestSecurityPolicy: """ Stub out the existing security policy for unit testing purposes. @@ -162,11 +150,6 @@ def checkI18nTranslate(self): self.assert_expected(self.folder.t, 'CheckI18nTranslate.html') - def checkI18nTranslateHooked(self): - old_ts = setGlobalTranslationService(TestTranslationService()) - self.assert_expected(self.folder.t, 'CheckI18nTranslateHooked.html') - setGlobalTranslationService(old_ts) - def checkImportOldStyleClass(self): self.assert_expected(self.folder.t, 'CheckImportOldStyleClass.html') @@ -181,7 +164,3 @@ def test_suite(): return unittest.makeSuite(HTMLTests, 'check') - -if __name__=='__main__': - main() - _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins