多语言扩展核心包

plone.multilingual的Python项目详细描述


不在开发中。这个包正在plone.app.multilingual上合并。图片::https://travis ci.org/plone/plone.multilingual.png
:目标:http://travis ci.org/plone/plone.multilingual

====


此包包含下一代多语言引擎的核心功能。

工件及其用途:

canonical:
*canonical组织有关"翻译组"的信息
*它使用一个字典,语言代码作为键,uuid
(由plone.uuid提供)作为值


存储:
*persi支架存储,它将规范存储在iobtree中
*oobtree的键是内容的uuid,相应的值是规范的


管理器:
*itranslatable的适配器
*提供翻译api

*适配器:
*itranslationlocator-在何处放置翻译
*itranslationidchooser-为翻译生成有效的id
*itranslationcloner-将独立于语言的内容复制到翻译
*itranslationfactory-创建翻译

e测试我们有一个名为demo的类型,它有一个名为demo language的适配器,该适配器允许从plone.multilingual.interfaces导入itranslationmanager,从plone.multilingual.interfaces导入ilanguage>>>>来自plone.app.测试导入setroles,登录,测试用户ID,测试用户名称
>>>来自zope.lifecycleevent import modified

>>>portal=layer['portal']
>>setroles(portal,测试用户ID,['manager'])
>;登录(portal,test_用户名)
>;>portal.invokefactory('folder','ob1',title=u"基于原型的文件夹")
'ob1'

>;>ilanguage(portal['ob1'])。设置语言('ca')
>;>portal['ob1']。reindexobject()
>;>modified(portal['ob1'])

确保新对象从plone.uuid获取其uuid::

>;>>>>itranslationmanager(portal['ob1'])。添加翻译('en')


我们尝试在'ca'中创建一个已存在的新翻译::

>>>itranslationmanager(portal['ob1'])。添加翻译('ca')
回溯(上一个最近的调用):

键错误:'翻译已经存在'

"en"翻译:

>;>itranslationmanager(portal['ob1']).get_translation('en')
<;at folder at/plone/ob1 en>;
>;>ilanguage(itranslationmanager(portal['ob1']).get_translation('en')。get_language()='en'
true

n关系:

>;>itranslationmanager(portal['ob1']).get_translations()
{'ca':<;atfolder at/plone/ob1>;,'en':<;atfolder at/plone/ob1 en>;}

让我们只获取语言::

>;>itranslationmanager(portal['ob1'])。获取已翻译的局域网_guages()
['ca','en']


有翻译:

>;>itranslationmanager(portal['ob1'])。有翻译('en')
true

>;>itranslationmanager(portal['ob1'])。有翻译('it')
false

通用电气:< BR>/>>>gt;itranslationmanager(portal['ob1'])。删除"翻译('en')
>>itranslationmanager(portal['ob1'])。注册"翻译"(none,portal['ob1-en'])
回溯(最近一次调用):

keyrerror:"没有目标语言"

register包含以下内容的翻译:

>;>itranslationmanager(portal['ob1'])。注册itranslationmanager(portal['ob1'])
>;>itranslationmanager(portal['ob1'])。获取atu translations()
{'ca':<;atfolder at/plone/ob1>;,'en':<;atfolder at/plone/ob1 en>;}

更改内容语言(应扮演订阅者):

>;>i语言(门户网站['ob1-en'])。从zope设置语言('it')
>;>gt;事件导入通知
>;>;>;>itranslationmanager(portal['ob1'])。获取"翻译"(
{'ca':<;atfolder at/plone/ob1>;,'it':<;atfolder at/plone/ob1 en>;}

测试更多翻译::

>;>;obj-it=itranslationmanager(portal['ob1'])。获取翻译('it')
>;>itranslationmanager(obj嫒it)。添加翻译('fr')
>;>itranslationmanager(obj嫒it)。添加翻译('pt')
>;>itranslationmanager(portal['ob1'])。获取翻译的语言(
['ca','it','fr','pt']
>;>;>itranslationmanager(obj_it).get_translated_languages()
['ca','it','fr','pt']


>测试规范对象是否相同::

>;>obj_ca=itranslationmanager(obj_it).get_translation('ca')
>;canonical_it=itranslationmanager(obj_it).query_canonical()
>;>canonical_ca=itranslationmanager(obj_ca).query_canonical()
>;>canonical_it==canonical_ca
true

r/>>;>>来自zope.lifecycleevent import modified
>;>portal.invokefactory('folder','ob2',title=u"基于原型的文档")
'ob2'
>;>ilanguage(portal['ob2'])。设置语言('it')
>;>modified(portal['ob2'])
>;i语言(portal['ob2']).get_language()
'it'
>;>itranslationmanager(portal['ob2']).add_translation('en')
>;>ob2_en=itranslationmanager(portal['ob2']).get_translation('en')

>;>portal.invokeFactory('folder','ob3',title=u"一个原型"基于类型的文档")
‘ob3’
>;>i语言(门户网站[‘ob3’)。设置语言(‘it’)
>;>gt;修改(门户网站[‘ob3’)
>;>i语言(门户网站[‘ob3’)。获取语言()
‘it’
>;>itranslationmanager(门户网站[‘ob3’)。添加翻译(‘es’)
>>>ob3_es=itranslationmanager(portal['ob3'])。从ofs获取翻译('es')

>>>>>>gt;;事件导入objectwillberemovedevent
>;>通知(objectwillberemovedevent(portal['ob2'])
>;>portal.manage_delobjects('ob2')

>;>t;notify(objectwillberemovedevent(ob3-es))
>;>portal.管理对象(ob3-es.id)

>;>c_old=itranslationmanager(portal['ob3'])。query_canonical()
>;>c_new=itranslationmanager(ob2-en)。query_canonical()
>;>c_old==c_new
false

>;>isinstance(c_old,str)
true
>;true

>;>itranslationmanager(ob2_en)。注册翻译('it',portal['ob3'])

>;>c1=itranslationmanager(portal['ob3'])。queryy庠canonical()
>;>c2=itranslationmanager(ob2庠en).query庠canonical()
>;>c1==c2
true


>其他用例,a('it'+'en')'和b('it'+'es'),我们需要a('en')->;b('es'):

>
>>gt;portal.invokefactory('folder','mess1',title=u"基于原型的文档"
'mess1'
>>>>gt>true>true
>gt>true;其他用例,a('it'+'en');b('it'+'en');b('it'+'en'+'en')));b('en')->;b('en')->;portal.invokefactactory('fo
>>>i语言(portal['mess1']).get_language()
'it'
>>>itranslationmanager(portal['mess1']).add_translation('en')
>>gt;mess1 en=itranslationmanager(portal['mess1']).get_translation('en')

>>portal.invokeFactory('folder','mess2',title=u"基于原型的文档")
'信息2'
>>gt>gt;illanguage(门户网站['mess2']])。设置语言('it’)
>>gt>gt;itranslationmanager(门户网站['mess2']])。添加翻译('es’)
>>gt>gt;mess2=itranslationmanager(门户网站['mess2']])。获取翻译('es’)

>>gt>gt>gt>itranslationmanager(mess1']>>>>gt;itranslationmanager(mess1'en)。注册翻译('es','es',2'es)>;>;>;itranslationmanager(portal['mess2']).get_translation('es')
>;>;itranslationmanager(portal['mess1']).get_translation('es')
<;atfolder at/plone/mess2 es>;


默认适配器
----
id chooser::

>;>;从plone.multilingual.interfaces导入itranslationidchooser
>>gt>>>选择者=itranslationidchooser(portal['ob1-en']])
>>>>选择者(portal'es')
'ob1 es'



>定位器:


>>>gt;itranslationimanager(portal['ob1']])。添加翻译('es')
>>gt;child\id=portal.ob1.invokefactory('folder文件夹''ob1'u child',language="ca")

>
>
>
'es'
'ob1'ob1 es'>'ob1'ob1'ob1'ob1'>;>;>;从plone.multilingual.interfaces导入itranslationlocator
>;>;locator=itranslationlocator(portal['ob1-en'])
>;>;locator('es')==portal
true

>;>;子locator=itranslationlocator(portal.ob1.ob1-u child)
>;>;子locator('es')==portal['ob1-es']
true

>;>;itranslationmanager(portal['ob1'])。删除u translation('es')


convert intid to uuids upgrade step
---------------------------


如果有一个具有实验性
0.1 plone的现有站点,则可以使用升级步骤。多语言版本::

>;,来自plone.multilingual.upgrades.to02导入升级

…注意:
您必须重新安装plone.multilingual软件包,以便在升级前安装所需的新
实用程序。如果您使用的是低于2.0的灵巧性版本,则必须安装包plone.app.referenceable behavior,并在尝试升级站点之前为所有灵巧性内容类型启用*referenceable*
(plone.app.referenceablebehavior.referenceable.irereferenceable)行为。

在站点的根目录中查看pgrade,或按照
门户网站设置>;升级中的升级步骤进行操作。如果看不到升级步骤,请按*显示旧升级*并选择*将基于翻译的IntID转换为Uuid(0.1→02)*

>;>从plone.multilingual.interfaces导入多语言存储
>;>gsm=portal.getsitemanager()
>;>gsm.queryutility(多语言存储)为none
true


changelog
==

<1.2.1 2013-10-16
----

mon]

1.2 2013-09-24
----


-不推荐的``objectmodifiedvent``方法
[ramon]

-不要触发``objectmodifiedvent``只需重新索引目录中所需的索引即可。
[saily]

-如果语言没有更改,则不触发重新索引。
[saily]


1.1.1 2013-07-03
----


-在iobjectremovedevent上,订阅者运行并重新索引要删除的对象。解决了错误
[ramon]

>1.1 2013-06-19
----


-更改集合递归语言,以便由itranslationmanager更新每个对象,而不是通知iobjectmodified事件。
这防止了不同事件之间的某种递归
[gborelli]

-translationmanager和add method的完整接口
``get_restricted_translations``
[jensens]

-uniquify translated languages[kiorky]


1.0 2013-04-16
----


-将"readme.rst"和"src/plone/multilingual/readme.rst"合并到
one单个文件。
[saily]

-修复所有集成和doctests
[saily]

-修复demolanguage适配器中的错误访问器。
[saily]


-支持测试中的会话。
[saily]

-更新createdevent以使用创建、复制或移动对象的aq_父级而不是"event.newparent",它在
``objectcreatedevent``上不可用。
[saily]

-一些pep8清理和与plone编码约定的对齐。
[saily]

-为plone 4.0、4.1、4.2和4.3添加构建
[saily]

-add travis integration
[saly]

1.0rc1 2013-01-26
----


-将外部工具移动到目录并添加内容属性[ramon]

-从b3升级到rc1[ramon]

-修复订阅服务器上的错误[sneridagh]

-根据存在的问题导入升级步骤"to 02"Plone.Dexterity[PySeall]

-添加get_restricted_translations[Ramon]


1.0b3 2012-10-04
----


-添加测试订阅者以测试订阅者的IObjectAddEvent、
IObjectCopiedEvent和IObjectMovedEvent[gborelli]

-不要提高评分注册或添加语言时出错
独立翻译。
[maurits]


-考虑用户可以对翻译组及其成员执行和执行更改的用例。确保它不会在存储中留下任何孤立对象的痕迹。
[ramon,sneridagh]


-添加了复制/粘贴订阅服务器[ramon]

-移动了通用addcontent订阅服务器以检查语言完整性[ramon]

-解决了itranslationlocator[ramon]上的错误
-更新语言,检查翻译完整性[ramon]



1.0b2-2012-07-09
---------

-将语言独立标识符更改为"[ramon]

-修复了卸载配置文件。[毛里塔尼亚]



1.0b1-2012-04-03
----

-无更改。




0.2b3-2012-04-03
----

-从API中删除get_字段名。[jcbrand]

-添加IDEFaultLanguageIndependentFieldsManager和适配器。[jcbrand]

-创建后重新索引对象。【Ramon】



0.1a2-2011-10-20
—————————————————————————————————————————————————————————————————————————[sneridagh]

-从裸intid迁移到plone.uuid设施。[sneridagh]

-由于之前从这个版本到上面的更改,它只与plone 4.1和更高版本兼容。[sneridagh]

-添加了升级步骤和升级浏览器视图,以将基于0.1a1
intids的实用程序转换为基于0.1a2 uuids的实用程序。[Sneridagh]



0.1a1-2011-10-03
----


-初始版本[Ramon,Awello,Sneridagh]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java生成随机浮点,包括两个边界   java三层体系结构风格是如何工作的?一些简单的例子   多线程可以使用线程。在Java中,在循环中使用sleep(),以便定期执行某些操作?   读取循环上的java HibernateMysql异常   java使用带有Apache Ivy的自定义存储库,未找到解析程序   filenotfoundexception在读取时出现问题。Java中的txt文件   嵌入式tomcat 8.0.21中的java Spring websocket   java为什么我需要创建一个类的引用,然后创建一个B类的对象   java Splashscreen动画在Mac OS中更新时闪烁   JavaSpring3。名为“zoneManagerDelegate”的x Bean必须是[com.ms.adsp.delegate.sapi.zoneManagerDelegate]类型,但实际上是[$Proxy20]类型   java SQLite:没有这样的专栏;不明错误   java将JTable定位到JFrame中JPanel中的(x,y)位置   java在导入组织方面面临挑战。知道。xchart*   xml读取Java中的SVG元素并跳过某些包含文本的元素   java Spring Redis问题:Redis缓存中的GetAllCacheNames不能与RedisCacheManager一起使用   java Vertex Hazelcast:集群问题   java如何编辑osgi托管服务实现使用的属性文件?   java Android活动并行启动?   java AWS Lambda用于将excel转储到数据库中