[Zope-Checkins] SVN: Products.Five/branches/1.5/ - backported changes from Zope 3.3's zope.i18n

Yvo Schubbe y.2006_ at wcm-solutions.de
Mon Nov 6 09:46:59 EST 2006


Log message for revision 71088:
  - backported changes from Zope 3.3's zope.i18n

Changed:
  U   Products.Five/branches/1.5/CHANGES.txt
  U   Products.Five/branches/1.5/i18n.py
  U   Products.Five/branches/1.5/tests/test_i18n.py

-=-
Modified: Products.Five/branches/1.5/CHANGES.txt
===================================================================
--- Products.Five/branches/1.5/CHANGES.txt	2006-11-06 11:01:25 UTC (rev 71087)
+++ Products.Five/branches/1.5/CHANGES.txt	2006-11-06 14:46:59 UTC (rev 71088)
@@ -2,6 +2,12 @@
 Five Changes
 ============
 
+Five 1.5.2 (unreleased)
+=======================
+
+* i18n: Synced FiveTranslationService implementation with Zope 3.3. This makes
+  sure that the TestMessageFallbackDomain is used if registered.
+
 Five 1.5.1 (2006-11-04)
 =======================
 

Modified: Products.Five/branches/1.5/i18n.py
===================================================================
--- Products.Five/branches/1.5/i18n.py	2006-11-06 11:01:25 UTC (rev 71087)
+++ Products.Five/branches/1.5/i18n.py	2006-11-06 14:46:59 UTC (rev 71088)
@@ -17,13 +17,14 @@
 """
 from Acquisition import aq_acquire
 from zope.interface import implements
-from zope.i18n import interpolate
-from zope.i18n.interfaces import ITranslationDomain, IUserPreferredLanguages
+from zope.i18n.interfaces import IFallbackTranslationDomainFactory
+from zope.i18n.interfaces import ITranslationDomain
+from zope.i18n.interfaces import IUserPreferredLanguages
 from zope.i18n.negotiator import normalize_lang
 from zope.component import queryUtility
-from zope.publisher.browser import BrowserLanguages
 from zope.i18nmessageid import Message
 
+
 class FiveTranslationService:
     """Translation service that delegates to ``zope.i18n`` machinery.
     """
@@ -36,8 +37,20 @@
             default = msgid.default
             mapping = msgid.mapping
 
-        util = queryUtility(ITranslationDomain, domain)
+        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

Modified: Products.Five/branches/1.5/tests/test_i18n.py
===================================================================
--- Products.Five/branches/1.5/tests/test_i18n.py	2006-11-06 11:01:25 UTC (rev 71087)
+++ Products.Five/branches/1.5/tests/test_i18n.py	2006-11-06 14:46:59 UTC (rev 71088)
@@ -56,6 +56,38 @@
       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)



More information about the Zope-Checkins mailing list