[Checkins] SVN: zope.i18n/trunk/ Fix translation domains translating a message for a different domain. In the

Brian Sutherland jinty at web.de
Tue Apr 14 08:10:03 EDT 2009


Log message for revision 99162:
  Fix translation domains translating a message for a different domain. In the
  process, fix testMessageIDTranslateForDifferentDomain which seemed to work by
  mistake as the "other" and "default" domains used the same catalog. This is
  basically a reversion of 39991.
  

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

-=-
Modified: zope.i18n/trunk/CHANGES.txt
===================================================================
--- zope.i18n/trunk/CHANGES.txt	2009-04-13 21:44:50 UTC (rev 99161)
+++ zope.i18n/trunk/CHANGES.txt	2009-04-14 12:10:02 UTC (rev 99162)
@@ -5,7 +5,10 @@
 3.7.1 (unreleased)
 ------------------
 
-- ...
+- Fix translation domains translating a message for a different domain. In the
+  process, fix testMessageIDTranslateForDifferentDomain which seemed to work by
+  mistake as the "other" and "default" domains used the same catalog. This is
+  basically a reversion of 39991.
 
 
 3.7.0 (2009-03-18)

Modified: zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py
===================================================================
--- zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py	2009-04-13 21:44:50 UTC (rev 99161)
+++ zope.i18n/trunk/src/zope/i18n/tests/test_translationdomain.py	2009-04-14 12:10:02 UTC (rev 99162)
@@ -126,21 +126,19 @@
                          translate(u'Color: ${color1}/${color2}', mapping=mapping,
                                    target_language='en'))
 
-
-
     def testMessageIDTranslateForDifferentDomain(self):
-        domain = TranslationDomain('other')
+        domain = TranslationDomain('alt')
         path = testdir()
-        en_catalog = GettextMessageCatalog('en', 'other',
-                                           os.path.join(path, 'en-default.mo'))
+        en_catalog = GettextMessageCatalog('en', 'alt',
+                                           os.path.join(path, 'en-alt.mo'))
         domain.addCatalog(en_catalog)
 
-        zope.component.provideUtility(domain, ITranslationDomain, 'other')
+        zope.component.provideUtility(domain, ITranslationDomain, 'alt')
 
-        factory = MessageFactory('other')
-        msgid = factory(u'short_greeting', 'default')
+        factory = MessageFactory('alt')
+        msgid = factory(u'special', 'default')
         self.assertEqual(
-            self._domain.translate(msgid, target_language='en'), u'Hello!')
+            self._domain.translate(msgid, target_language='en'), u'Wow')
 
     def testSimpleFallbackTranslation(self):
         translate = self._domain.translate

Modified: zope.i18n/trunk/src/zope/i18n/translationdomain.py
===================================================================
--- zope.i18n/trunk/src/zope/i18n/translationdomain.py	2009-04-13 21:44:50 UTC (rev 99161)
+++ zope.i18n/trunk/src/zope/i18n/translationdomain.py	2009-04-14 12:10:02 UTC (rev 99162)
@@ -77,16 +77,18 @@
             target_language = negotiator.getLanguage(langs, context)
 
         return self._recursive_translate(
-            msgid, mapping, target_language, default)
+            msgid, mapping, target_language, default, context)
 
     def _recursive_translate(self, msgid, mapping, target_language, default,
-                             seen=None):
+                             context, seen=None):
         """Recursively translate msg."""
         # 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)
             default = msgid.default
             mapping = msgid.mapping
 
@@ -107,7 +109,7 @@
                             value)
                     mapping[key] = self._recursive_translate(
                         value, mapping, target_language,
-                        default, seen)
+                        default, context, seen)
 
         if default is None:
             default = unicode(msgid)



More information about the Checkins mailing list