summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Poster <gary@zope.com>2005-04-15 16:20:02 +0000
committerGary Poster <gary@zope.com>2005-04-15 16:20:02 +0000
commitb644002825387148f537ded845635823f6265644 (patch)
tree88a16bdc33dcb12c0f58a46c807d5eac666ac0b5
parent7ae0a071d5fcd559cb2959660fec557b74e30270 (diff)
downloadzope-tal-b644002825387148f537ded845635823f6265644.tar.gz
Teach tal about the new i18nmessageid.Message class.
-rw-r--r--dummyengine.py8
-rw-r--r--talinterpreter.py6
-rw-r--r--tests/test_talinterpreter.py16
3 files changed, 20 insertions, 10 deletions
diff --git a/dummyengine.py b/dummyengine.py
index 59d3eff..f75ebe6 100644
--- a/dummyengine.py
+++ b/dummyengine.py
@@ -21,7 +21,7 @@ from zope.interface import implements
from zope.tal.taldefs import NAME_RE, TALExpressionError, ErrorInfo
from zope.tal.interfaces import ITALExpressionCompiler, ITALExpressionEngine
from zope.i18n.interfaces import ITranslationDomain
-from zope.i18nmessageid import MessageID
+from zope.i18nmessageid import MessageID, Message
Default = object()
@@ -137,7 +137,7 @@ class DummyEngine(object):
def evaluateText(self, expr):
text = self.evaluate(expr)
- if isinstance(text, (str, unicode, MessageID)):
+ if isinstance(text, (str, unicode, MessageID, Message)):
return text
if text is not None and text is not Default:
text = str(text)
@@ -280,10 +280,12 @@ class DummyTranslationDomain(object):
# by calling that method.
# MessageID attributes override arguments
- if isinstance(msgid, MessageID):
+ if isinstance(msgid, (MessageID, Message)):
domain = msgid.domain
mapping = msgid.mapping
default = msgid.default
+ if default is None: # Message doesn't substitute itself for
+ default = msgid # missing default
# simulate an unknown msgid by returning None
if msgid == "don't translate me":
diff --git a/talinterpreter.py b/talinterpreter.py
index 3aec924..a88a6b0 100644
--- a/talinterpreter.py
+++ b/talinterpreter.py
@@ -21,7 +21,7 @@ import sys
# Do not use cStringIO here! It's not unicode aware. :(
from StringIO import StringIO
-from zope.i18nmessageid import MessageID
+from zope.i18nmessageid import MessageID, Message
from zope.tal.taldefs import quote, TAL_VERSION, METALError
from zope.tal.taldefs import isCurrentVersion
from zope.tal.taldefs import getProgramVersion, getProgramMode
@@ -579,7 +579,7 @@ class TALInterpreter(object):
if text is self.Default:
self.interpret(stuff[1])
return
- if isinstance(text, MessageID):
+ if isinstance(text, (MessageID, Message)):
# Translate this now.
text = self.engine.translate(text)
# '&' must be done first!
@@ -618,7 +618,7 @@ class TALInterpreter(object):
value = self.engine.evaluate(expression)
# evaluate() does not do any I18n, so we do it here.
- if isinstance(value, MessageID):
+ if isinstance(value, (MessageID, Message)):
# Translate this now.
value = self.engine.translate(value)
diff --git a/tests/test_talinterpreter.py b/tests/test_talinterpreter.py
index 5400c7e..d71378c 100644
--- a/tests/test_talinterpreter.py
+++ b/tests/test_talinterpreter.py
@@ -27,7 +27,7 @@ from zope.tal.htmltalparser import HTMLTALParser
from zope.tal.talinterpreter import TALInterpreter
from zope.tal.dummyengine import DummyEngine, DummyTranslationDomain
from zope.tal.tests import utils
-from zope.i18nmessageid import MessageID
+from zope.i18nmessageid import MessageID, Message
class TestCaseBase(unittest.TestCase):
@@ -145,11 +145,13 @@ class MacroExtendTestCase(TestCaseBase):
self.assertEqual(actual, expected)
-class I18NCornerTestCase(TestCaseBase):
+class I18NCornerTestCaseBase(TestCaseBase):
+
+ factory = None # set in subclass to Message and MessageID
def setUp(self):
self.engine = DummyEngine()
- self.engine.setLocal('foo', MessageID('FoOvAlUe', 'default'))
+ self.engine.setLocal('foo', self.factory('FoOvAlUe', 'default'))
self.engine.setLocal('bar', 'BaRvAlUe')
def _check(self, program, expected):
@@ -295,6 +297,11 @@ class I18NCornerTestCase(TestCaseBase):
"Foo <span tal:replace='bar' i18n:name='bar' /></div>")
self._check(program, u"<div>FOO \u00C0</div>\n")
+class I18NCornerTestCaseMessageID(I18NCornerTestCaseBase):
+ factory = MessageID
+
+class I18NCornerTestCaseMessage(I18NCornerTestCaseBase):
+ factory = Message
class ScriptTestCase(TestCaseBase):
@@ -515,7 +522,8 @@ def test_suite():
suite.addTest(unittest.makeSuite(MacroExtendTestCase))
suite.addTest(unittest.makeSuite(OutputPresentationTestCase))
suite.addTest(unittest.makeSuite(ScriptTestCase))
- suite.addTest(unittest.makeSuite(I18NCornerTestCase))
+ suite.addTest(unittest.makeSuite(I18NCornerTestCaseMessageID))
+ suite.addTest(unittest.makeSuite(I18NCornerTestCaseMessage))
suite.addTest(unittest.makeSuite(TestSourceAnnotations))
# TODO: Deactivated test, since we have not found a solution for this and