[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.
     """