简单Django模型翻译,无需复杂的技巧,具有良好的管理集成功能。
项目描述
django-parler-encore
django-parler的温柔分支
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 ugettext_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')
这返回被认为“活跃”的语言中的对象,这些是
当前语言
当hide_untranslated=False时,在PARLER_LANGUAGES设置中的后备语言。
更改语言
可以指示查询集返回特定语言的对象
>>> 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()调用以避免相同对象的重复结果。
待办事项
当前列表代码对每个对象执行一个查询。这需要减少。
最好,模型上的TranslatedField代理应表现得像RelatedField,如果ORM也很合适。
请为这些区域提供改进或工作!
贡献
此模块旨在通用。如果您对其有任何不喜欢的地方,或者认为它不够灵活,请告诉我们。我们很高兴改进它!
如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们将对其进行调查。也欢迎拉取请求。:-)
项目详细信息
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分布
构建分布
django-parler-encore-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 79cb0dbd85a966053ec0cb4a89a3a7a62bc8cb7aa4bb0b873ca58fb2726744fb |
|
MD5 | 1e69714af95048740d07c9d0758bc3eb |
|
BLAKE2b-256 | 0dd8c2e2f00eb0fb2e0281a6b3ccc285b29a78897bcfd574489b4bba5026a39b |
django_parler_encore-1.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b1ce4ffef92107d188d3f076ac731d03780873d57ec2a8b2d54c2f9f0b59efb3 |
|
MD5 | 7c68237b0c0d9b83dd2c5f22fa352376 |
|
BLAKE2b-256 | 2a0db5f5a0f20a8788c761eaaf4f930bd9ce5c38608426c47c8ca916dbdc3315 |