opental-checkins
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OpenTAL-checkins] opental/PlacelessTranslationService GettextMess...


From: Fernando Lalo Martins
Subject: [OpenTAL-checkins] opental/PlacelessTranslationService GettextMess...
Date: Tue, 05 Aug 2003 13:03:13 -0400

CVSROOT:        /cvsroot/opental
Module name:    opental
Branch:         
Changes by:     Fernando Lalo Martins <address@hidden>  03/08/05 13:03:13

Modified files:
        PlacelessTranslationService: GettextMessageCatalog.py 
                                     PlacelessTranslationService.py 
                                     __init__.py 

Log message:
        allowing a catalog to declare it is usable for other language codes - 
for example, a "no" potfile could declare it can be served when user requests 
"no-nb" or "no-nn", or a "de-de" could declare it is usable as "de-at" in the 
lack of a "de-at" specific one.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/PlacelessTranslationService/GettextMessageCatalog.py.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/PlacelessTranslationService/PlacelessTranslationService.py.diff?tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/PlacelessTranslationService/__init__.py.diff?tr1=1.13&tr2=1.14&r1=text&r2=text

Patches:
Index: opental/PlacelessTranslationService/GettextMessageCatalog.py
diff -u opental/PlacelessTranslationService/GettextMessageCatalog.py:1.13 
opental/PlacelessTranslationService/GettextMessageCatalog.py:1.14
--- opental/PlacelessTranslationService/GettextMessageCatalog.py:1.13   Tue Jul 
29 17:31:35 2003
+++ opental/PlacelessTranslationService/GettextMessageCatalog.py        Tue Aug 
 5 13:03:13 2003
@@ -17,7 +17,7 @@
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
 """A simple implementation of a Message Catalog. 
 
-$Id: GettextMessageCatalog.py,v 1.13 2003/07/29 21:31:35 lalo Exp $
+$Id: GettextMessageCatalog.py,v 1.14 2003/08/05 17:03:13 lalo Exp $
 """
 
 from gettext import GNUTranslations
@@ -90,6 +90,7 @@
             if self._language is None or self._domain is None:
                 raise ValueError, 'potfile has no metadata'
             self._language = self._language.lower().replace('_', '-')
+            self._other_languages = tro._info.get('x-is-fallback-for', 
'').split()
             self.preferred_encodings = tro._info.get('preferred-encodings', 
'').split()
             self.name = unicode(tro._info.get('language-name', ''), 
tro._charset)
             self.default_zope_data_encoding = tro._charset
@@ -158,6 +159,11 @@
         """
         """
         return self.name or self._language
+        
+    def getOtherLanguages(self):
+        """
+        """
+        return self._other_languages
         
     def getDomain(self):
         """
Index: opental/PlacelessTranslationService/PlacelessTranslationService.py
diff -u opental/PlacelessTranslationService/PlacelessTranslationService.py:1.25 
opental/PlacelessTranslationService/PlacelessTranslationService.py:1.26
--- opental/PlacelessTranslationService/PlacelessTranslationService.py:1.25     
Tue Aug  5 12:22:38 2003
+++ opental/PlacelessTranslationService/PlacelessTranslationService.py  Tue Aug 
 5 13:03:13 2003
@@ -17,7 +17,7 @@
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
 """Placeless Translation Service for providing I18n to file-based code.
 
-$Id: PlacelessTranslationService.py,v 1.25 2003/08/05 16:22:38 lalo Exp $
+$Id: PlacelessTranslationService.py,v 1.26 2003/08/05 17:03:13 lalo Exp $
 """
 
 import sys, re, zLOG, Globals, fnmatch
@@ -73,7 +73,7 @@
     icon = 'misc_/PlacelessTranslationService/PlacelessTranslationService.png'
     # major, minor, patchlevel, internal
     # internal is always 0 on releases; if you hack this internally, increment 
it
-    _class_version = (0, 5, 0, 0)
+    _class_version = (0, 5, 0, 1)
     all_meta_types = ()
 
     security = ClassSecurityInfo()
@@ -89,6 +89,7 @@
         self._domain = default_domain
         # _catalogs maps (language, domain) to identifiers
         self._catalogs = {}
+        self._fb_catalogs = {}
         # What languages to fallback to, if there is no catalog for the
         # requested language (no fallback on individual messages)
         if fallbacks is None:
@@ -96,18 +97,24 @@
         self._fallbacks = fallbacks
 
     def _registerMessageCatalog(self, catalog):
-        key = (catalog.getLanguage(), catalog.getDomain())
-        self._catalogs.setdefault(key, []).append(catalog.getIdentifier())
+        domain = catalog.getDomain()
+        self._catalogs.setdefault((catalog.getLanguage(), domain), 
[]).append(catalog.getIdentifier())
+        for lang in catalog.getOtherLanguages():
+            self._fb_catalogs.setdefault((lang, domain), 
[]).append(catalog.getIdentifier())
         self._p_changed = 1
 
-    def _unregisterMessageCatalog(self, catalog):
-        for key, combo in self._catalogs.items():
+    def _unregister_inner(self, catalog, clist):
+        for key, combo in clist.items():
             try:
                 combo.remove(catalog.getIdentifier())
             except ValueError:
                 continue
             if not combo: # removed the last catalog for a language/domain 
combination
-                del self._catalogs[key]
+                del clist[key]
+
+    def _unregisterMessageCatalog(self, catalog):
+        self._unregister_inner(catalog, self._catalogs)
+        self._unregister_inner(catalog, self._fb_catalogs)
         self._p_changed = 1
 
     def _load_dir(self, basepath):
@@ -213,7 +220,8 @@
             target_language = self.negotiate_language(context, domain)
 
         # Get the translation. Use the specified fallbacks if this fails
-        catalog_names = self._catalogs.get((target_language, domain), ())
+        catalog_names = self._catalogs.get((target_language, domain), ()) or \
+                        self._fb_catalogs.get((target_language, domain), ())
         if not catalog_names:
             for language in self._fallbacks:
                 catalog_names = self._catalogs.get((language, domain),  ())
@@ -252,7 +260,8 @@
         if context is None:
             raise TypeError, 'No destination language'
         else:
-            langs = [m[0] for m in self._catalogs.keys() if m[1] == domain]
+            langs = [m[0] for m in self._catalogs.keys() if m[1] == domain] + \
+                    [m[0] for m in self._fb_catalogs.keys() if m[1] == domain]
             for fallback in self._fallbacks:
                 if fallback not in langs:
                     langs.append(fallback)
Index: opental/PlacelessTranslationService/__init__.py
diff -u opental/PlacelessTranslationService/__init__.py:1.13 
opental/PlacelessTranslationService/__init__.py:1.14
--- opental/PlacelessTranslationService/__init__.py:1.13        Tue Aug  5 
11:53:15 2003
+++ opental/PlacelessTranslationService/__init__.py     Tue Aug  5 13:03:13 2003
@@ -16,7 +16,7 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
 __version__ = '''
-$Id: __init__.py,v 1.13 2003/08/05 15:53:15 lalo Exp $
+$Id: __init__.py,v 1.14 2003/08/05 17:03:13 lalo Exp $
 '''.strip()
 
 from OFS.Application import get_products
@@ -73,7 +73,9 @@
         make_translation_service(cp)
     pkg.translation_service = getattr(cp, cp_id)
 
-    instance_version = getattr(translation_service, '_instance_version', (0, 
5, 0, 0))
+                                                                       # don't 
touch - this is the last version
+                                                                       # that 
didn't have the attribute (0.4)
+    instance_version = getattr(translation_service, '_instance_version', (0, 
4, 0, 0))
     if instance_version < PlacelessTranslationService._class_version:
         log('outdated translation service found, recreating',
             detail = '(found %s.%s.%s.%s)\n' % instance_version)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]