
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2437 fd906abe-77d9-0310-91a1-e0d9ade77398
158 lines
5.1 KiB
Text
158 lines
5.1 KiB
Text
===============================================================
|
|
loops - Linked Objects for Organization and Processing Services
|
|
===============================================================
|
|
|
|
($Id$)
|
|
|
|
Let's do some basic set up
|
|
|
|
>>> from zope.app.testing.setup import placefulSetUp, placefulTearDown
|
|
>>> site = placefulSetUp(True)
|
|
|
|
>>> from zope import component, interface
|
|
|
|
and setup a simple loops site with a concept manager and some concepts
|
|
(with all the type machinery, what in real life is done via standard
|
|
ZCML setup):
|
|
|
|
>>> from loops.interfaces import ILoops, IConcept
|
|
>>> from loops.concept import Concept
|
|
>>> from loops.setup import ISetupManager
|
|
>>> from loops.knowledge.setup import SetupManager
|
|
>>> component.provideAdapter(SetupManager, (ILoops,), ISetupManager,
|
|
... name='knowledge')
|
|
|
|
>>> from loops.tests.setup import TestSite
|
|
>>> t = TestSite(site)
|
|
>>> concepts, resources, views = t.setup()
|
|
>>> loopsRoot = site['loops']
|
|
|
|
>>> from loops.knowledge.knowledge import Topic
|
|
>>> component.provideAdapter(Topic)
|
|
|
|
For testing and demonstration purposes let's create a topic.
|
|
|
|
>>> topic = concepts['topic']
|
|
>>> topic01 = concepts['topic01'] = Concept(u'loops for Zope 3')
|
|
>>> topic01.conceptType = topic
|
|
|
|
|
|
Content Internationalization
|
|
============================
|
|
|
|
Let's look at a certain concept that should contain i18n-alized data.
|
|
|
|
>>> topic01.title
|
|
u'loops for Zope 3'
|
|
|
|
We can query the available languages, the current language setting and
|
|
the default language using a LanguageInfo object that is similar to a view.
|
|
|
|
>>> from zope.publisher.browser import TestRequest
|
|
>>> from loops.i18n.browser import LanguageInfo
|
|
>>> langInfo = LanguageInfo(topic01, TestRequest())
|
|
>>> langInfo.availableLanguages
|
|
[]
|
|
>>> langInfo.language is None
|
|
True
|
|
>>> langInfo.defaultLanguage is None
|
|
True
|
|
|
|
In order to use content i18n we have to define the available languages
|
|
as an option on the loops root object.
|
|
|
|
>>> loopsRoot.options = ['languages:en,de,it']
|
|
>>> langInfo = LanguageInfo(topic01, TestRequest())
|
|
>>> langInfo.availableLanguages
|
|
['en', 'de', 'it']
|
|
>>> langInfo.defaultLanguage
|
|
'en'
|
|
>>> langInfo.language
|
|
'en'
|
|
|
|
By setting an appropriate value in the URI we can select a certaing
|
|
language for processing of the current request.
|
|
|
|
>>> input = {'loops.language': 'it'}
|
|
>>> langInfo = LanguageInfo(topic01, TestRequest(form=input))
|
|
>>> langInfo.availableLanguages
|
|
['en', 'de', 'it']
|
|
>>> langInfo.defaultLanguage
|
|
'en'
|
|
>>> langInfo.language
|
|
'it'
|
|
|
|
Let's now use a form to edit an i18n-sensible attribute. For this we have
|
|
to set up some components needed by the zope.formlib machinery.
|
|
|
|
>>> from zope.publisher.interfaces.browser import IBrowserRequest
|
|
>>> from zope.app.form.browser import TextWidget, ChoiceInputWidget, DropdownWidget
|
|
>>> from zope.schema.interfaces import ITextLine, IText, IChoice
|
|
>>> from zope.app.form.interfaces import IInputWidget
|
|
>>> component.provideAdapter(TextWidget, (IText, IBrowserRequest),
|
|
... IInputWidget)
|
|
>>> from loops.concept import ConceptTypeSourceList
|
|
>>> from zope.schema.vocabulary import getVocabularyRegistry
|
|
>>> getVocabularyRegistry().register('loops.conceptTypeSource', ConceptTypeSourceList)
|
|
>>> component.provideAdapter(ChoiceInputWidget,
|
|
... (IChoice, IBrowserRequest), IInputWidget)
|
|
>>> component.provideAdapter(DropdownWidget,
|
|
... (IChoice, ConceptTypeSourceList, IBrowserRequest), IInputWidget)
|
|
|
|
We also have to mark the attributes that should be stored in multiple
|
|
languages on the type object.
|
|
|
|
>>> from loops.common import adapted
|
|
>>> tTopic = adapted(topic)
|
|
>>> tTopic.options = ['i18nattributes:title,description']
|
|
|
|
Now we are ready to enter a language-specific title.
|
|
|
|
>>> from loops.browser.concept import ConceptEditForm, ConceptView
|
|
>>> input = {'form.title': 'loops per Zope 3', 'loops.language': 'it',
|
|
... 'form.actions.apply': 'Change'}
|
|
>>> form = ConceptEditForm(topic01, TestRequest(form=input))
|
|
>>> form.update()
|
|
|
|
>>> topic01.title
|
|
I18NValue({'en': u'loops for Zope 3', 'it': u'loops per Zope 3'})
|
|
|
|
If we access an i18n attribute via a view that is i18n-aware we get the
|
|
value corresponding to the language preferences that appear in the request.
|
|
|
|
>>> input = {'loops.language': 'it'}
|
|
>>> view = ConceptView(topic01, TestRequest(form=input))
|
|
>>> view.title
|
|
u'loops per Zope 3'
|
|
|
|
If there is no entry for the language given we get back the entry for
|
|
the default language.
|
|
|
|
>>> input = {'loops.language': 'de'}
|
|
>>> view = ConceptView(topic01, TestRequest(form=input))
|
|
>>> view.title
|
|
u'loops for Zope 3'
|
|
|
|
There are also fallbacks - mainly for being able to access the title
|
|
attribute in not i18n-aware contexts - that retrieve the value corresponding
|
|
to the default language at the time of the attribute creation.
|
|
|
|
>>> topic01.title.getDefault()
|
|
u'loops for Zope 3'
|
|
>>> str(topic01.title)
|
|
'loops for Zope 3'
|
|
>>> topic01.title.lower()
|
|
u'loops for zope 3'
|
|
|
|
Viewing translations
|
|
--------------------
|
|
|
|
>>> view.adapted.translations()
|
|
{'en': u'loops for Zope 3', 'it': u'loops per Zope 3'}
|
|
|
|
|
|
Fin de partie
|
|
=============
|
|
|
|
>>> placefulTearDown()
|
|
|