[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