[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