From 5ba29680bdaf7579c2ff74942546af3583a9bb68 Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Mon, 30 Jan 2006 18:35:44 +0000
Subject: [PATCH] Rewrite the monkey patch. It was not working.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5447 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/patches/Localizer.py | 74 +++++++++------------------
 1 file changed, 24 insertions(+), 50 deletions(-)

diff --git a/product/ERP5Type/patches/Localizer.py b/product/ERP5Type/patches/Localizer.py
index 6f8c20f48c..fb4c977f39 100755
--- a/product/ERP5Type/patches/Localizer.py
+++ b/product/ERP5Type/patches/Localizer.py
@@ -35,11 +35,7 @@ except ImportError:
   pass
 
 
-
-class LocalizerTranslationService:
-  def translate( self, domain, msgid
-               , mapping=None, context=None, target_language=None, default=None
-               , *args, **kw):
+def Localizer_translate(self, domain, msgid, mapping=None, *args, **kw):
     """
       This translate() method use Localizer and support catalog aliases.
     """
@@ -51,63 +47,41 @@ class LocalizerTranslationService:
                               , "content": "erp5_content"
                               }
 
-    # Be carefull to not import Localizer anywhere in that Localizer patch:
-    #   it can break everything !
-    # To update this file in the right way, keep in mind that translate() method
-    #   must be able to work outside its LocalizerTranslationService class.
-    from Products.Localizer.Localizer import Localizer
-
-    # Get Localizer tool object installed in the ERP5 instance
-    if isinstance(self, Localizer):
-      # In this case we call the translate method from a script (Base_translateString generally).
-      # Exemple of call from a ZODB python script:
-      #   context.Localizer.translate('ui', 'Print button')
-      # This branch of "if" statement is needed to make the "New Localizer Feature" coded
-      #   at the end of the file work.
-      localizer = self
-    else:
-      # This is the normal case
-      #   = the one when translation is done via <i18n:translate> tag in Page Template
-      localizer = getToolByName(context, 'Localizer', None)
-    if localizer == None:
-      raise LocalizerPatchError, "Localizer tool not found."
-
     # Get the Localizer catalog id
     catalog_id = message_catalog_aliases.get(domain, domain)
-    if catalog_id not in localizer.objectIds():
+    if catalog_id not in self.objectIds():
       # No catalog found: use the default one
       catalog_id = 'default'
-    catalog_obj = localizer[catalog_id]
-
-    # Adapt Translation Service default value to the Localizer one
-    from Products.Localizer.MessageCatalog import _marker
-    if default == None: default =_marker
+    catalog_obj = self[catalog_id]
 
     # Call the Message Catalog gettext method
-    translated_str = catalog_obj.gettext( message = msgid
-                                        , lang    = target_language
-                                        , default = default
-                                        )
+    params = {}
+    for key in ('lang', 'add', 'default'):
+      if key in kw:
+        params[key] = kw[key]
+    if 'target_language' in kw:
+      params['lang'] = kw['target_language']
+    translated_str = catalog_obj.gettext(msgid, **params)
 
     # Map the translated string with given parameters
     if type(mapping) is type({}):
       return Template(translated_str).substitute(mapping)
     return translated_str
 
+def GlobalTranslationService_translate(self, domain, msgid, *args, **kw):
+  context = kw.get('context')
+  if context is None:
+    # Placeless!
+    return msgid
 
+  return context.Localizer.translate(domain, msgid, *args, **kw)
 
 # Apply the monkey patch.
-# Because we don't know when getGlobalTranslationService will be called,
-#   we override the setter to force the use of our patched translate() method.
-from Products.PageTemplates import GlobalTranslationService
-def setGlobalTranslationService(service):
-  GlobalTranslationService.translationService = LocalizerTranslationService()
-GlobalTranslationService.setGlobalTranslationService = setGlobalTranslationService
-
-
-
-### New Localizer Feature ###
-# Allow call of translate() in python scripts directly from Localizer object
-from Products.Localizer.Localizer import Localizer
-Localizer.translate = LocalizerTranslationService.translate
-Localizer.tranlate__roles__ = None # public
+try:
+  from Products.Localizer import GlobalTranslationService
+  from Products.Localizer.Localizer import Localizer
+  GlobalTranslationService.translate = GlobalTranslationService_translate
+  Localizer.translate = Localizer_translate
+  Localizer.translate__roles__ = None # public
+except ImportError:
+  pass
-- 
2.30.9