简单Django模型翻译,无需复杂的技巧,具有良好的管理集成。
项目描述
django-parler
简单Django模型翻译,无需复杂的技巧。
特性
良好的管理集成。
像常规属性一样访问翻译后的属性。
自动回退到默认语言。
为翻译字段提供单独的表格,与 django-hvad 兼容。
与其他组件兼容良好,支持 django-polymorphic,django-mptt 等组件。
没有ORM查询技巧。
易于与自定义Manager或QuerySet类结合使用。
在需要时,可以轻松手动构建翻译模型。
有关更多详细信息,请参阅文档。
简要概述
安装 django-parler
可以使用以下方式安装此包
pip install django-parler
添加以下设置
INSTALLED_APPS += (
'parler',
)
可选地,还可以配置管理界面选项卡
PARLER_LANGUAGES = {
None: (
{'code': 'en',},
{'code': 'en-us',},
{'code': 'it',},
{'code': 'nl',},
),
'default': {
'fallback': 'en', # defaults to PARLER_DEFAULT_LANGUAGE_CODE
'hide_untranslated': False, # the default; let .active_translations() return fallbacks too.
}
}
在运行使用站点框架的多站点项目时,将 None 替换为 SITE_ID。每个 SITE_ID 都可以添加到字典中的额外条目。
确保您的项目已配置为多语言。限制 LANGUAGES 设置可能很有用。例如
from django.utils.translation import gettext_lazy as _
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', _("English")),
('en-us', _("US English")),
('it', _('Italian')),
('nl', _('Dutch')),
('fr', _('French')),
('es', _('Spanish')),
)
默认情况下,回退语言与 LANGUAGE_CODE 相同。可以在设置中更改回退语言
PARLER_DEFAULT_LANGUAGE_CODE = 'en'
创建模型
使用 TranslatedFields 包装器,可以将模型字段标记为可翻译
from django.db import models
from parler.models import TranslatableModel, TranslatedFields
class MyModel(TranslatableModel):
translations = TranslatedFields(
title = models.CharField(_("Title"), max_length=200)
)
def __unicode__(self):
return self.title
访问字段
可翻译字段可以像常规字段一样使用
>>> object = MyModel.objects.all()[0]
>>> object.get_current_language()
'en'
>>> object.title
u'cheese omelet'
>>> object.set_current_language('fr') # Only switches
>>> object.title = "omelette du fromage" # Translation is created on demand.
>>> object.save()
内部,django-parler 将翻译字段存储在单独的模型中,每个语言一行。
过滤翻译
要查询翻译字段,请使用 .translated() 方法
MyObject.objects.translated(title='cheese omelet')
要访问当前和可能回退语言的对象,请使用
MyObject.objects.active_translations(title='cheese omelet')
这返回被认为是“活动”的语言中的对象,这些是
当前语言
当在 PARLER_LANGUAGES 设置中设置 hide_untranslated=False 时,回退语言。
更改语言
可以指示查询集返回特定语言的对象
>>> objects = MyModel.objects.language('fr').all()
>>> objects[0].title
u'omelette du fromage'
这仅设置对象的语言。默认情况下,使用当前的Django语言。
使用 object.get_current_language() 和 object.set_current_language() 来更改单个对象的语言。有一个上下文管理器来完成此操作
from parler.utils.context import switch_language
with switch_language(model, 'fr'):
print model.title
还有一个用于查询特定字段的函数
model.safe_translation_getter('title', language_code='fr')
高级功能
此包还包括
手动创建 TranslatedFieldsModel!
用于内联支持的表单类。
用于切换语言、创建/更新可翻译对象的视图类。
用于语言切换按钮的模板标签。
用于处理翻译字段的ORM方法。
支持管理内联。
有关更多详细信息,请参阅文档。
特别说明
使用 ModelAdmin.prepopulated_fields 不起作用,但可以使用 get_prepopulated_fields() 作为解决方案。
由于 ORM限制,翻译字段的查询应在单个 .translated(..) 或 .active_translations(..) 调用中执行。
通常需要 .active_translations(..) 方法调用 .distinct() 以避免相同对象的重复结果。
待办事项
当前列表代码针对每个对象执行一个查询。这需要减少。
最好,如果与ORM一起使用,则模型上的 TranslatedField 代理应表现得像 RelatedField。
请为此改进或这些领域做出贡献!
贡献
本模块旨在通用。如果对其中任何内容不满意或认为不够灵活,请告诉我们。我们很高兴改进它!
如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们会考虑它。我们也欢迎拉取请求。:-)
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。