包装模型翻译包,增加了不错的功能。
django-modeltranslation-wrapper的Python项目详细描述
注意!
modeltranslation-0.5已整合此应用程序的所有功能 (此外,智能管理器已经得到改进),因此请更新而不是使用此应用程序 您的modeltranslation版本。但是,此应用程序仍然提供给那些 (出于某种阴暗的原因)希望继续使用较旧的mt版本。
这个包是一堆^{tt3}的补丁$ (http://code.google.com/p/django-modeltranslation/, http://pypi.python.org/pypi/django-modeltranslation/, 这可以提高这个不错的应用程序的使用率,并针对一些恼人的方面。
添加了两个功能:
自动发现应用程序中的translation.py文件
^{tt5}$ already has this feature (ported from this app :P), so it is no more needed here and is only left for use with older versions of ^{tt2}$. Thus, the autodiscover is deactivated if the 0.4 version of ^{tt2}$ is detected.
智能管理器:过滤、排序、创建等将当前语言 考虑因素
(This feature was mainly ported from ^{tt8}$ (https://github.com/zmathew/django-linguo, http://pypi.python.org/pypi/django-linguo), another good app. However, ^{tt2}$ idea of translation fields registration is better than ^{tt10}$ model code edition - especially with 3rd-party apps)
稍后,modeltranslation将被称为mt,而django-modeltranslation-wrapper将被称为 包装器。
功能
自动发现
这个应用程序改变了寻找翻译文件的方式。在mt中,您有 每个项目只有一个文件。包装器使其更像admin:中的每个应用程序 INSTALLED_APPS被检查,其translation.py被导入(如果存在)。
此外,如果您仍然希望包含一些非应用程序翻译(例如,第三方应用程序的翻译), 引入了新设置:MODELTRANSLATION_TRANSLATION_FILES。它应该包含 要导入的其他模块(包含翻译)。
因此,当使用包装器时,MODELTRANSLATION_TRANSLATION_REGISTRY设置是不必要的。
为了向后兼容mt,当存在MODELTRANSLATION_TRANSLATION_REGISTRY时, 它被视为在MODELTRANSLATION_TRANSLATION_FILES中列出。所以没有变化 在现有项目中使用的需要。
智能管理器
包装器更改可翻译模型中的管理器,以便管理器知道其中的活动语言 操作。这意味着,未后缀的属性参数将被重写为后缀版本。
假设当前活动语言是pl:
X.objects.filter(foo='bar') X.objects.filter(foo_pl='bar') activate('de') X.objects.filter(foo_pl='bar') # Still the same result
如果可翻译模型有自己的自定义管理器,智能管理器将被温和地添加, 保留旧功能。
然而,X.objects.create()是特殊情况。对于向后兼容性,其工作方式与 违约。但是您可以传递参数_populate=True来填充后缀字段 来自非固定值的值。
举例说明:
x = X.objects.create(foo='bar', _populate=True)
相当于:
x = X.objects.create(foo_en='bar', foo_pl='bar', ... , foo_zu='bar')
或:
x = X.objects.create(foo='bar') x.foo_en = 'bar' x.foo_pl = 'bar' ... x.foo_zu = 'bar' x.save()
此外,某些字段可以显式地分配不同的值:
x = X.objects.create(foo='-- no translation yet --', foo_pl='nic', _populate=True)
它将生成foo_pl == 'nic'和其他foo_?? == '-- no translation yet --'。
有比一直传递_populate更方便的方法: MODELTRANSLATION_AUTO_POPULATE设置。如果缺少_populate参数,create()将 查看设置以确定是否应使用填充。
为了与mt测试向后兼容,默认情况下禁用此有用功能。 但是,如果代码在很大程度上不依赖于create()在后缀字段上不设置任何值这一事实, 建议设置MODELTRANSLATION_AUTO_POPULATE = True。
新设置
- 模型转换文件
默认值:()
要导入的其他翻译模块的列表。
- 模型转换自动填充
默认值:False
此设置控制是否X.objects.create()函数应填充语言字段 价值观。
安装
安装应用程序:
$ pip install django-modeltranslation-wrapper
或者手动下载并放入python路径。
将modeltranslation_wrapper添加到INSTALLED_APPS之前普通modeltranslation:
INSTALLED_APPS = ( ... 'modeltranslation_wrapper', 'modeltranslation', ... )
(可选)在设置中指定MODELTRANSLATION_TRANSLATION_FILES:
MODELTRANSLATION_TRANSLATION_FILES = ( 'myproject.flatpages_translation', 'myproject.foo_translation', )
除了自动发现的模块外,还将导入这些模块。
如果您在0.4或更高版本中使用mt,不幸的是您还必须添加 'modeltranslation_wrapper.patch'作为^{tt16}中的最后一个条目$ 使聪明经理:
MODELTRANSLATION_TRANSLATION_FILES = ( 'myproject.flatpages_translation', 'myproject.foo_translation', 'modeltranslation_wrapper.patch', )
这是由于mt0.4加载翻译的方式发生了变化。
(可选)指定MODELTRANSLATION_AUTO_POPULATE(见上文):
MODELTRANSLATION_AUTO_POPULATE = True
更改日志
- 1.2.2(2012年3月4日)
- 重新打包分发以删除以前意外添加的过时的modeltranslations包。
- 1.2.1(2012年9月23日)
- 重构代码以使用ModelTranslation-0.4
- 更新多语言管理器以重写q和f查询
- 1.1(2012年9月4日)
- 添加了testrunner
- 1.0(2012年6月24日)
- 初始代码
Authors: | Jacek Tomaszewski Zach Mathew (of ^{tt8}$) For details see AUTHORS file. |
---|