[Checkins] SVN: z3c.i18n/ initial import of the z3c.i18n package

Bernd Dorn bernd.dorn at fhv.at
Mon Jul 10 05:20:07 EDT 2006


Log message for revision 69064:
  initial import of the z3c.i18n package
  

Changed:
  A   z3c.i18n/
  A   z3c.i18n/trunk/
  A   z3c.i18n/trunk/src/
  A   z3c.i18n/trunk/src/z3c/
  A   z3c.i18n/trunk/src/z3c/__init__.py
  A   z3c.i18n/trunk/src/z3c/i18n/
  A   z3c.i18n/trunk/src/z3c/i18n/README.txt
  A   z3c.i18n/trunk/src/z3c/i18n/__init__.py
  A   z3c.i18n/trunk/src/z3c/i18n/configure.zcml
  A   z3c.i18n/trunk/src/z3c/i18n/iso.py
  A   z3c.i18n/trunk/src/z3c/i18n/tests.py
  A   z3c.i18n/trunk/src/z3c/i18n/z3c.i18n-configure.zcml

-=-
Added: z3c.i18n/trunk/src/z3c/__init__.py
===================================================================
--- z3c.i18n/trunk/src/z3c/__init__.py	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/__init__.py	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,6 @@
+try:
+    # Declare this a namespace package if pkg_resources is available.
+    import pkg_resources
+    pkg_resources.declare_namespace('z3c')
+except ImportError:
+    pass


Property changes on: z3c.i18n/trunk/src/z3c/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/README.txt
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/README.txt	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/README.txt	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,29 @@
+================
+Z3C I18N Package
+================
+
+This package contains various i18n related convinience modules.
+
+Translationdomains
+==================
+
+The following translation domains are registered based on the
+``zope.i18n.locales´´ package:
+
+z3c.i18n.iso.languages: Translates all available languages
+
+z3c.i18n.iso.territories: Translates all available terrritories
+
+Vocabularies
+============
+
+Based on the translation domains mentioned above, there are two
+vocabularies registered. The terms of these vocabularies have a
+``Message´´as title with the according translation domain.
+
+z3c.i18n.iso.languages: Contains all languages defined.
+
+z3c.i18n.iso.territories: Contains all territories defined.
+
+
+


Property changes on: z3c.i18n/trunk/src/z3c/i18n/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/__init__.py
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/__init__.py	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/__init__.py	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,20 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""I18n utils for zope3
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+


Property changes on: z3c.i18n/trunk/src/z3c/i18n/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/configure.zcml
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/configure.zcml	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/configure.zcml	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,30 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:i18n="http://namespaces.zope.org/i18n"
+           xmlns:alchemy="http://namespaces.zalchemy.org/alchemy"
+           i18n_domain="zope">
+
+ <utility
+  component=".iso.territoryTranslationDomain"
+  provides="zope.i18n.ITranslationDomain"
+  name="z3c.i18n.iso.territories"/>
+
+ <utility
+  component=".iso.languageTranslationDomain"
+  provides="zope.i18n.ITranslationDomain"
+  name="z3c.i18n.iso.languages"/>
+
+ 
+ <utility
+  provides="zope.schema.interfaces.IVocabularyFactory"
+  component=".iso.territoryVocabularyFactory"
+  name="z3c.i18n.iso.territories"
+  />
+
+ <utility
+  provides="zope.schema.interfaces.IVocabularyFactory"
+  component=".iso.languageVocabularyFactory"
+  name="z3c.i18n.iso.languages"
+  />
+
+ 
+</configure>


Property changes on: z3c.i18n/trunk/src/z3c/i18n/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/iso.py
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/iso.py	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/iso.py	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,178 @@
+# -*- coding: utf-8 -*-
+from zope.schema.vocabulary import SimpleVocabulary,SimpleTerm
+from zope.i18n.locales import locales,LOCALEDIR
+from zope.i18nmessageid.message import MessageFactory
+from zope.i18n.interfaces import ITranslationDomain,INegotiator
+from zope.interface import implements
+from zope.i18n import interpolate
+from zope.component import getUtility
+from types import StringType
+import glob
+import os
+
+# get the locales list
+# XXX maybe we should load variants too?
+LANGS = []
+for name in glob.glob(os.path.join(LOCALEDIR,'??.xml')):
+    LANGS.append(os.path.basename(name)[:2])
+
+
+
+class DisplayNameTranslationDomain(object):
+
+    """base class for displayname based translation domains"""
+    
+    implements(ITranslationDomain)
+    
+    def translate(self, msgid, mapping=None, context=None,
+                  target_language=None, default=None):
+        '''See interface ITranslationDomain'''
+        # Find out what the target language should be
+        if target_language is None and context is not None:
+            # Let's negotiate the language to translate to. :)
+            negotiator = getUtility(INegotiator)
+            target_language = negotiator.getLanguage(LANGS, context)
+        # Find a translation; if nothing is found, use the default
+        # value
+        if default is None:
+            default = msgid
+        displayNames = locales.getLocale(target_language).displayNames
+        text = getattr(displayNames,
+                       self.displayNameAttr).get(msgid,None)
+        if text is None:
+            text = default
+        return interpolate(text, mapping)
+
+class TerritoryTranslationDomain(DisplayNameTranslationDomain):
+
+    """a translation domain which translates territory codes
+
+    >>> d = TerritoryTranslationDomain()
+    >>> d.translate('DE',target_language='de')
+    u'Deutschland'
+    >>> d.translate('DE',target_language='en')
+    u'Germany'
+    """
+    domain='z3c.i18n.iso.territories'
+    displayNameAttr = 'territories'
+
+class LanguageTranslationDomain(DisplayNameTranslationDomain):
+
+    """a translation domain which translates language codes
+
+    >>> d = LanguageTranslationDomain()
+    >>> d.translate('de',target_language='de')
+    u'Deutsch'
+    >>> d.translate('de',target_language='en')
+    u'German'
+    """
+    domain='z3c.i18n.iso.languages'
+    displayNameAttr = 'languages'
+
+territoryTranslationDomain = TerritoryTranslationDomain()
+languageTranslationDomain = LanguageTranslationDomain()
+
+_territories = MessageFactory(TerritoryTranslationDomain.domain)
+_languages = MessageFactory(LanguageTranslationDomain.domain)
+
+
+class LanguageVocabularyFactory(object):
+
+    """a language vocabulary factory
+
+    The factory has a class attribute with messages from the
+    iso.languages domain as titles
+
+    >>> fac = LanguageVocabularyFactory()
+    >>> voc = fac(None) 
+    >>> voc
+    <zope.schema.vocabulary.SimpleVocabulary object at ...>
+
+    >>> 'de' in voc
+    True
+    >>> term = voc.getTerm('de')
+    >>> term.title.default
+    u'German'
+
+    >>> term = voc.getTerm('fr')
+    >>> term.title.default
+    u'French'
+
+    Let's check if we can translate the title, which is actally a
+    Message.
+
+    >>> term.title.domain
+    'z3c.i18n.iso.languages'
+
+    >>> from zope import component
+    >>> component.provideUtility(languageTranslationDomain,
+    ...     name='z3c.i18n.iso.languages')
+    >>> from zope.i18n import translate
+    >>> translate(term.title,target_language='fr')==u'fran\xe7ais'
+    True
+    >>> translate(term.title,target_language='de')==u'Franz\xf6sisch'
+    True
+    """
+
+    def __init__(self):
+        self.terms = []
+        # excluding fallback etc
+        for key,value in [(key,value) for key,value in
+            locales.getLocale('en').displayNames.languages.items()
+                          if key.lower()==key and len(key)==2]:
+            term = SimpleTerm(key,title=_languages(key,value))
+            self.terms.append(term)
+        self.vocab = SimpleVocabulary(self.terms)
+    
+
+    def __call__(self,context):
+        return self.vocab
+
+languageVocabularyFactory = LanguageVocabularyFactory()
+
+class TerritoryVocabularyFactory(object):
+
+    """a territory vocabulary factory
+
+    The factory has a class attribute with messages from the
+    iso.territory domain as titles
+
+    >>> fac = TerritoryVocabularyFactory()
+    >>> voc = fac(None) 
+    >>> voc
+    <zope.schema.vocabulary.SimpleVocabulary object at ...>
+
+    >>> 'DE' in voc
+    True
+    >>> term = voc.getTerm('DE')
+    >>> term.title.default
+    u'Germany'
+
+    >>> u'Fallback' in voc
+    False
+
+    >>> from zope import component
+    >>> component.provideUtility(territoryTranslationDomain,
+    ...     name='z3c.i18n.iso.territories')
+    >>> from zope.i18n import translate
+    >>> translate(term.title,target_language='fr')
+    u'Allemagne'
+    >>> translate(term.title,target_language='de')
+    u'Deutschland'
+    """
+
+    def __init__(self):
+        self.terms = []
+        # excluding fallback etc
+        for key,value in [(key,value) for key,value in
+            locales.getLocale('en').displayNames.territories.items()
+                          if key.upper()==key and len(key)==2]:
+            term = SimpleTerm(key,title=_territories(key,value))
+            self.terms.append(term)
+        self.vocab = SimpleVocabulary(self.terms)
+    
+
+    def __call__(self,context):
+        return self.vocab
+        
+territoryVocabularyFactory = TerritoryVocabularyFactory()


Property changes on: z3c.i18n/trunk/src/z3c/i18n/iso.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/tests.py
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/tests.py	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/tests.py	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1,23 @@
+import doctest
+import unittest
+from zope.testing.doctestunit import DocFileSuite, DocTestSuite
+from zope.app.testing import setup
+
+def setUp(test):
+    setup.placefulSetUp()
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+def test_suite():
+    
+    return unittest.TestSuite(
+        (
+        DocTestSuite('z3c.i18n.iso',
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.i18n/trunk/src/z3c/i18n/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.i18n/trunk/src/z3c/i18n/z3c.i18n-configure.zcml
===================================================================
--- z3c.i18n/trunk/src/z3c/i18n/z3c.i18n-configure.zcml	2006-07-10 08:13:21 UTC (rev 69063)
+++ z3c.i18n/trunk/src/z3c/i18n/z3c.i18n-configure.zcml	2006-07-10 09:20:06 UTC (rev 69064)
@@ -0,0 +1 @@
+<include package="z3c.i18n"/>
\ No newline at end of file


Property changes on: z3c.i18n/trunk/src/z3c/i18n/z3c.i18n-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list