[Checkins] SVN: zope.i18n/trunk/src/zope/i18n/t Fix recursive translations where the translation domain of a sub-message is

Brian Sutherland jinty at web.de
Tue Apr 14 08:20:56 EDT 2009


Log message for revision 99163:
  Fix recursive translations where the translation domain of a sub-message is
  different from the parent message. Use the zope.i18n.translate function to get
  the right fallback behaviour.
  

Changed:
  U   zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py
  U   zope.i18n/trunk/src/zope/i18n/translationdomain.py

-=-
Modified: zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py
===================================================================
--- zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py	2009-04-14 12:10:02 UTC (rev 99162)
+++ zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py	2009-04-14 12:20:56 UTC (rev 99163)
@@ -126,6 +126,33 @@
                          translate(u'Color: ${color1}/${color2}', mapping=mapping,
                                    target_language='en'))
 
+        # If we have mapping with a message id from a different domain, make sure
+        # we use that domain, not ours. If the message domain is not registered yet,
+        # we should return a defualt translation.
+        alt_factory = MessageFactory('alt')
+        msgid_sub = alt_factory(u'special', default=u'oohhh')
+        mapping = {'message': msgid_sub}
+        msgid = factory(u'46-not-there', 'Message: ${message}',
+                                  mapping=mapping)
+        # test we get a default with no domain registerd
+        self.assertEqual(
+            translate(msgid, target_language='en', default="default"),
+            "Message: oohhh")
+        # provide the domain
+        domain = TranslationDomain('alt')
+        path = testdir()
+        en_catalog = GettextMessageCatalog('en', 'alt',
+                                           os.path.join(path, 'en-alt.mo'))
+        domain.addCatalog(en_catalog)
+        # test that we get the right translation
+        zope.component.provideUtility(domain, ITranslationDomain, 'alt')
+        self.assertEqual(
+            translate(msgid, target_language='en', default="default"),
+            "Message: Wow")
+
+
+
+
     def testMessageIDTranslateForDifferentDomain(self):
         domain = TranslationDomain('alt')
         path = testdir()

Modified: zope.i18n/trunk/src/zope/i18n/translationdomain.py
===================================================================
--- zope.i18n/trunk/src/zope/i18n/translationdomain.py	2009-04-14 12:10:02 UTC (rev 99162)
+++ zope.i18n/trunk/src/zope/i18n/translationdomain.py	2009-04-14 12:20:56 UTC (rev 99163)
@@ -17,7 +17,7 @@
 """
 import zope.component
 from zope.i18nmessageid import Message
-from zope.i18n import interpolate
+from zope.i18n import translate, interpolate
 from zope.i18n.simpletranslationdomain import SimpleTranslationDomain
 from zope.i18n.interfaces import ITranslationDomain, INegotiator
 
@@ -85,10 +85,8 @@
         # MessageID attributes override arguments
         if isinstance(msgid, Message):
             if msgid.domain != self.domain:
-                util = zope.component.getUtility(
-                    ITranslationDomain, msgid.domain)
-                return util.translate(msgid, mapping, context,
-                                      target_language, default)
+                return translate(msgid, msgid.domain, mapping, context,
+                                 target_language, default)
             default = msgid.default
             mapping = msgid.mapping
 



More information about the Checkins mailing list