/[opental]/opental/PlacelessTranslationService/PlacelessTranslationService.py
ViewVC logotype

Diff of /opental/PlacelessTranslationService/PlacelessTranslationService.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12 by lalo, Thu Feb 27 19:04:50 2003 UTC revision 1.13 by lalo, Fri Feb 28 01:37:43 2003 UTC
# Line 20  Line 20 
20  $Id$  $Id$
21  """  """
22    
23  import re, zLOG  import re, zLOG, Globals
24    from OFS.Folder import Folder
25  from types import DictType, StringType, UnicodeType  from types import DictType, StringType, UnicodeType
26  from Negotiator import negotiator  from Negotiator import negotiator
27  from Domain import Domain  from Domain import Domain
# Line 55  _get_var_regex = re.compile(r'%(n)s' %({ Line 56  _get_var_regex = re.compile(r'%(n)s' %({
56  LANGUAGE_FALLBACKS = list(os.environ.get('LANGUAGE_FALLBACKS', 'en').split(' '))  LANGUAGE_FALLBACKS = list(os.environ.get('LANGUAGE_FALLBACKS', 'en').split(' '))
57    
58    
59  class PlacelessTranslationService:  class PlacelessTranslationService(Folder):
60        meta_type = title = 'Placeless Translation Service'
61        icon = 'misc_/PlacelessTranslationService/PlacelessTranslationService.png'
62        # major, minor, patchlevel, internal
63        # internal is always 0 on releases; if you hack this internally, increment it
64        _class_version = (0, 4, 0, 4)
65        all_meta_types = ()
66    
67      def __init__(self, default_domain='global', fallbacks=None):      def __init__(self, default_domain='global', fallbacks=None):
68            self._instance_version = self._class_version
69          # XXX We haven't specified that ITranslationServices have a default          # XXX We haven't specified that ITranslationServices have a default
70          # domain.  So far, we've required the domain argument to .translate()          # domain.  So far, we've required the domain argument to .translate()
71          self._domain = default_domain          self._domain = default_domain
72          # _catalogs maps (language, domain) to IMessageCatalog instances          # _catalogs maps (language, domain) to identifiers
73          self._catalogs = {}          self._catalogs = {}
         # _data maps IMessageCatalog.getIdentifier() to IMessageCatalog  
         self._data = {}  
74          # What languages to fallback to, if there is no catalog for the          # What languages to fallback to, if there is no catalog for the
75          # requested language (no fallback on individual messages)          # requested language (no fallback on individual messages)
76          if fallbacks is None:          if fallbacks is None:
77              fallbacks = LANGUAGE_FALLBACKS              fallbacks = LANGUAGE_FALLBACKS
78          self._fallbacks = fallbacks          self._fallbacks = fallbacks
79    
80        # Disable some inappropriate operations
81        manage_addObject=None
82        manage_delObjects=None
83        manage_addProperty=None
84        manage_editProperties=None
85        manage_delProperties=None
86    
87      def _registerMessageCatalog(self, language, domain, catalog_name):      def _registerMessageCatalog(self, language, domain, catalog_name):
88          http_language = language.lower().replace('_', '-')          http_language = language.lower().replace('_', '-')
89          key = (http_language, domain)          key = (http_language, domain)
90          mc = self._catalogs.setdefault(key, [])          mc = self._catalogs.setdefault(key, [])
91          mc.append(catalog_name)          mc.append(catalog_name)
         log('adding catalog for domain %s, language %s' % (domain, language))  
92    
93      def addCatalog(self, catalog):      def addCatalog(self, catalog):
94          self._data[catalog.getIdentifier()] = catalog          try:
95                self._delObject(catalog.id)
96            except:
97                pass
98            self._setObject(catalog.id, catalog, set_owner=False)
99            log('adding %s: %s' % (catalog.id, catalog.title))
100          self._registerMessageCatalog(catalog.getLanguage(),          self._registerMessageCatalog(catalog.getLanguage(),
101                                       catalog.getDomain(),                                       catalog.getDomain(),
102                                       catalog.getIdentifier())                                       catalog.getIdentifier())
# Line 94  class PlacelessTranslationService: Line 111  class PlacelessTranslationService:
111          for (ccode, cdomain), cnames in self._catalogs.items():          for (ccode, cdomain), cnames in self._catalogs.items():
112              if ccode == code:              if ccode == code:
113                  for cname in cnames:                  for cname in cnames:
114                      cat = self._data[cname]                      cat = self._getOb(cname)
115                      if cat.name:                      if cat.name:
116                          return cat.name                          return cat.name
117    
# Line 149  class PlacelessTranslationService: Line 166  class PlacelessTranslationService:
166                      break                      break
167                    
168          for name in catalog_names:          for name in catalog_names:
169              catalog = self._data[name]              catalog = self._getOb(name)
170              try:              try:
171                  text = catalog.getMessage(msgid, default)                  text = catalog.getMessage(msgid, default)
172              except KeyError:              except KeyError:

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26