[Zope3-checkins] CVS: Zope3/src/zope/i18n - globaltranslationservice.py:1.7 simpletranslationservice.py:1.7 interfaces.py:1.12
Marius Gedminas
mgedmin@codeworks.lt
Fri, 11 Apr 2003 09:20:43 -0400
Update of /cvs-repository/Zope3/src/zope/i18n
In directory cvs.zope.org:/tmp/cvs-serv29011/src/zope/i18n
Modified Files:
globaltranslationservice.py simpletranslationservice.py
interfaces.py
Log Message:
Changed ITranslationService to not require context when target_language is not
specified. Rationale: if language negotiation fails, target_language will
still be None, and we have to cope with that anyway.
Added a unit test and updated the three ITranslationService implementations.
=== Zope3/src/zope/i18n/globaltranslationservice.py 1.6 => 1.7 ===
--- Zope3/src/zope/i18n/globaltranslationservice.py:1.6 Thu Apr 3 15:18:11 2003
+++ Zope3/src/zope/i18n/globaltranslationservice.py Fri Apr 11 09:20:13 2003
@@ -68,17 +68,15 @@
def translate(self, domain, msgid, mapping=None, context=None,
target_language=None, default=None):
'''See interface ITranslationService'''
- if target_language is None:
- if context is None:
- raise TypeError, 'No destination language'
- else:
- langs = [m[0] for m in self._catalogs.keys()]
- target_language = negotiator.getLanguage(langs, context)
+ if target_language is None and context is not None:
+ # Try to determine target language from context
+ langs = [m[0] for m in self._catalogs.keys()]
+ target_language = negotiator.getLanguage(langs, context)
# Try to get domain from msgid.
if isinstance(msgid, MessageID):
domain = msgid.domain
-
+
# Get the translation. Use the specified fallbacks if this fails
catalog_names = self._catalogs.get((target_language, domain))
if catalog_names is None:
@@ -86,7 +84,7 @@
catalog_names = self._catalogs.get((language, domain))
if catalog_names is not None:
break
-
+
# Did the fallback fail? Sigh, return None
text = default
if catalog_names:
=== Zope3/src/zope/i18n/simpletranslationservice.py 1.6 => 1.7 ===
--- Zope3/src/zope/i18n/simpletranslationservice.py:1.6 Fri Apr 4 10:47:11 2003
+++ Zope3/src/zope/i18n/simpletranslationservice.py Fri Apr 11 09:20:13 2003
@@ -60,14 +60,11 @@
target_language=None, default=None):
'''See interface ITranslationService'''
# Find out what the target language should be
- if target_language is None:
- if context is None:
- raise TypeError, 'No destination language'
- else:
- langs = [m[1] for m in self.messages.keys()]
- # Let's negotiate the language to translate to. :)
- negotiator = getService(self, 'LanguageNegotiation')
- target_language = negotiator.getLanguage(langs, context)
+ if target_language is None and context is not None:
+ langs = [m[1] for m in self.messages.keys()]
+ # Let's negotiate the language to translate to. :)
+ negotiator = getService(self, 'LanguageNegotiation')
+ target_language = negotiator.getLanguage(langs, context)
# Make a raw translation without interpolation
text = self.messages.get((domain, target_language, msgid))
=== Zope3/src/zope/i18n/interfaces.py 1.11 => 1.12 ===
--- Zope3/src/zope/i18n/interfaces.py:1.11 Fri Apr 11 08:47:42 2003
+++ Zope3/src/zope/i18n/interfaces.py Fri Apr 11 09:20:13 2003
@@ -116,9 +116,8 @@
context -- An object that provides contextual information for
determining client language preferences. It must implement
or have an adapter that implements IUserPreferredLanguages.
-
- Note that one of target_language or context must be passed. Otherwise
- a TypeError will be raised.
+ It will be to determine the language to translate to if
+ target_language is not specified explicitly.
Also note that language tags are defined by RFC 1766.
"""