[Erp5-report] r33060 leonardo - /erp5/trunk/products/ERP5Type/patches/Localizer.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Feb 23 23:40:57 CET 2010
Author: leonardo
Date: Tue Feb 23 23:40:57 2010
New Revision: 33060
URL: http://svn.erp5.org?rev=33060&view=rev
Log:
Support for MessageCatalog translation domain aliases in Zope 2.12
Modified:
erp5/trunk/products/ERP5Type/patches/Localizer.py
Modified: erp5/trunk/products/ERP5Type/patches/Localizer.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/Localizer.py?rev=33060&r1=33059&r2=33060&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/Localizer.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/Localizer.py [utf8] Tue Feb 23 23:40:57 2010
@@ -35,18 +35,24 @@
except ImportError:
pass
-
+# This dict define the alias between old Translation Service catalog id
+# and new Localizer Message Catalog.
+message_catalog_aliases = { "Default": "default"
+ , "ui" : "erp5_ui"
+ , "content": "erp5_content"
+ }
+
+# "invert" message_catalog_aliases
+message_catalog_alias_sources = {}
+for name, value in message_catalog_aliases.items():
+ message_catalog_alias_sources.setdefault(value, []).append(name)
+
+# BACK: This method is not used in Zope 2.12. Drop when we drop support for
+# Zope 2.8
def Localizer_translate(self, domain, msgid, lang=None, mapping=None, *args, **kw):
"""
This translate() method use Localizer and support catalog aliases.
"""
- # This dict define the alias between old Translation Service catalog id
- # and new Localizer Message Catalog.
- message_catalog_aliases = { "Default": "default"
- , "ui" : "erp5_ui"
- , "content": "erp5_content"
- }
-
# Get the Localizer catalog id
catalog_id = message_catalog_aliases.get(domain, domain)
catalog_obj = self._getOb(catalog_id, None)
@@ -86,6 +92,8 @@
translated_str = Template(translated_str).substitute(unicode_mapping)
return translated_str
+# BACK: This method is not used in Zope 2.12. Drop when we drop support for
+# Zope 2.8
def GlobalTranslationService_translate(self, domain, msgid, *args, **kw):
context = kw.get('context')
if context is None:
@@ -252,3 +260,41 @@
Localizer.Localizer.user_defined_languages = user_defined_languages
Localizer.Localizer.get_languages_map = get_languages_map
Localizer.InitializeClass(Localizer.Localizer)
+
+# BACK: Can't write a configure.zcml that works on both Zope 2.8 and Zope 2.12
+# So we monkeypatch the subscriber instead. When we drop support for Zope 2.8
+# write a proper subscriber for MessageCatalog and IObjectMovedEvent
+try:
+ from Products.Localizer.MessageCatalog import (MessageCatalog_moved as
+ MessageCatalog_moved_orig)
+except ImportError:
+ pass # Zope 2.8
+else:
+ from zope.component import getSiteManager
+ from zope.i18n.interfaces import ITranslationDomain
+ import Products.Localizer.MessageCatalog
+ def MessageCatalog_moved(object, event):
+ """
+ Install ITranslationDomain aliases alongside the original
+ MessageCatalog names
+ """
+ MessageCatalog_moved_orig(object, event)
+ if event.oldParent is not None:
+ # unregister old aliases
+ oldAliases = message_catalog_alias_sources.get(event.oldName, ())
+ sm = getSiteManager(event.oldParent)
+ for alias in oldAliases:
+ sm.unregisterUtility(object, ITranslationDomain, alias)
+
+ if event.newParent is not None:
+ # register new aliases
+ newAliases = message_catalog_alias_sources.get(event.newName, ())
+ sm = getSiteManager(event.newParent)
+ # FIXME: install aliases only if inside an ERP5Site
+ # but how to do that without causing circular dependencies? ERP5Site
+ # needs to implement an IERP5Site interface, declared inside
+ # Products.ERP5Type.interfaces
+ for alias in newAliases:
+ sm.registerUtility(object, ITranslationDomain, alias)
+
+ Products.Localizer.MessageCatalog.MessageCatalog_moved = MessageCatalog_moved
More information about the Erp5-report
mailing list