summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Richter <stephan.richter@gmail.com>2005-11-02 22:11:10 +0000
committerStephan Richter <stephan.richter@gmail.com>2005-11-02 22:11:10 +0000
commit5c8164388da1e64f8789f90a390b9b090b0bc069 (patch)
tree94a2558cc178ba47b3dc83750a663a047da102b0
parent7c9343bc0f7287f61b66f461eba3e0bcdc1192cf (diff)
downloadzope-tal-5c8164388da1e64f8789f90a390b9b090b0bc069.tar.gz
The TALInterpreter methods called the engine's translate function
directly; this is a big no-no; the interpreter's methods should use the interpreter's translate() method. This fixes a bug in i18nextract, where the file positions were suddenly not available anymore.
-rw-r--r--talgettext.py6
-rw-r--r--talinterpreter.py21
2 files changed, 18 insertions, 9 deletions
diff --git a/talgettext.py b/talgettext.py
index c6023bc..2a0d794 100644
--- a/talgettext.py
+++ b/talgettext.py
@@ -71,7 +71,9 @@ def usage(code, msg=''):
class POTALInterpreter(TALInterpreter):
- def translate(self, msgid, default, i18ndict=None, obj=None):
+ def translate(self, msgid, default=None, i18ndict=None, obj=None):
+ if default is None:
+ default = getattr(msgid, 'default', unicode(msgid))
# If no i18n dict exists yet, create one.
if i18ndict is None:
i18ndict = {}
@@ -83,7 +85,7 @@ class POTALInterpreter(TALInterpreter):
return None
# TODO: We need to pass in one of context or target_language
return self.engine.translate(msgid, self.i18nContext.domain, i18ndict,
- position=self.position, default=default)
+ default=default, position=self.position)
class POEngine(DummyEngine):
diff --git a/talinterpreter.py b/talinterpreter.py
index 80b7430..0a79f71 100644
--- a/talinterpreter.py
+++ b/talinterpreter.py
@@ -498,7 +498,7 @@ class TALInterpreter(object):
if ok:
if xlat:
- translated = self.translate(msgid or value, value, {})
+ translated = self.translate(msgid or value, value)
if translated is not None:
value = translated
if value is None:
@@ -631,7 +631,7 @@ class TALInterpreter(object):
# Translate this now.
# BBB: Deprecated. Will be removed in 3.3
self._i18n_deprecate()
- text = self.engine.translate(text)
+ text = self.translate(text)
self._writeText(text)
def _i18n_deprecate(self):
@@ -656,9 +656,9 @@ class TALInterpreter(object):
self.interpret(stuff[1])
return
if isinstance(text, I18nMessageTypes):
- text = self.engine.translate(text)
+ text = self.translate(text)
elif isinstance(text, (StringType, UnicodeType)):
- text = self.engine.translate(text, domain=self.i18nContext.domain)
+ text = self.translate(text)
self._writeText(text)
def do_i18nVariable(self, stuff):
@@ -696,7 +696,7 @@ class TALInterpreter(object):
# Translate this now.
# BBB: Deprecated. Will be removed in 3.3
self._i18n_deprecate()
- value = self.engine.translate(value)
+ value = self.translate(value)
if not structure:
value = cgi.escape(unicode(value))
@@ -788,7 +788,7 @@ class TALInterpreter(object):
self.interpret(block)
return
if isinstance(structure, I18nMessageTypes):
- text = self.engine.translate(structure)
+ text = self.translate(structure)
else:
text = unicode(structure)
if not (repldict or self.strictinsert):
@@ -845,7 +845,14 @@ class TALInterpreter(object):
self.interpret(block)
bytecode_handlers["loop"] = do_loop
- def translate(self, msgid, default, i18ndict, obj=None):
+ def translate(self, msgid, default=None, i18ndict=None,
+ obj=None, domain=None):
+ if default is None:
+ default = getattr(msgid, 'default', unicode(msgid))
+ if i18ndict is None:
+ i18ndict = {}
+ if domain is None:
+ domain = getattr(msgid, 'domain', self.i18nContext.domain)
if obj:
i18ndict.update(obj)
if not self.i18nInterpolate: