简单的django模型翻译没有讨厌的黑客,具有良好的管理集成。

django-parler的Python项目详细描述


https://img.shields.io/travis/django-parler/django-parler/master.svg?branch=masterhttps://readthedocs.org/projects/django-parler/badge/?version=stablehttps://img.shields.io/pypi/v/django-parler.svghttps://img.shields.io/pypi/l/django-parler.svghttps://img.shields.io/codecov/c/github/django-parler/django-parler/master.svg

django parler

简单的django模型翻译没有讨厌的黑客。

功能:

  • 很好的管理集成。
  • 访问转换的属性,如常规属性。
  • 自动回退到默认语言。
  • django-hvad兼容的翻译字段的单独表。
  • 与他人相处融洽,兼容django-polymorphicdjango-mptt等:
    • 没有orm查询黑客。
    • 易于与自定义管理器或QuerySet类结合。
    • 在需要的时候,很容易手工构建翻译模型。

有关详细信息,请参见documentation

简要概述

安装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设置可能很有用。例如:

fromdjango.utils.translationimportugettext_lazyas_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包装器,可以将模型字段标记为可翻译:

fromdjango.dbimportmodelsfromparler.modelsimportTranslatableModel,TranslatedFieldsclassMyModel(TranslatableModel):translations=TranslatedFields(title=models.CharField(_("Title"),max_length=200))def__unicode__(self):returnself.title

访问字段

可翻译字段可以像常规字段一样使用:

>>>object=MyModel.objects.all()[0]>>>object.get_current_language()'en'>>>object.titleu'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时的回退语言。

更改语言

可以指示queryset以特定语言返回对象:

>>>objects=MyModel.objects.language('fr').all()>>>objects[0].titleu'omelette du fromage'

这只设置对象的语言。 默认情况下,使用当前的django语言。

使用object.get_current_language()object.set_current_language() 更改单个对象上的语言。 有一个上下文管理器可以临时执行此操作:

fromparler.utils.contextimportswitch_languagewithswitch_language(model,'fr'):printmodel.title

以及一个只查询特定字段的函数:

model.safe_translation_getter('title',language_code='fr')

高级功能

此套餐还包括:

  • 手动创建TranslatedFieldsModel
  • 用于内联支持的窗体类。
  • 用于切换语言、创建/更新可翻译对象的视图类。
  • 语言切换按钮的模板标记。
  • 处理转换字段的ORM方法。
  • 管理内联支持。

有关详细信息,请参见documentation

特殊注释

  • 使用ModelAdmin.prepopulated_fields不起作用,但是可以使用get_prepopulated_fields()作为解决方法。
  • 由于ORM restrictions 对已翻译字段的查询应在单个.translated(..).active_translations(..)调用中执行。
  • .active_translations(..)方法通常需要.distinct()调用,以避免同一对象的重复结果。

待办事项

  • 列表代码当前对每个对象执行一个查询。这需要减少。
  • 最好,模型上的TranslatedField代理的行为应该类似于RelatedField, 如果这也能很好地配合orm的话。

请贡献你的改进或在这些领域的工作!

贡献

本模块设计为通用模块。万一你有什么不喜欢的, 或者认为它不够灵活,请让我们知道。我们很乐意改进它!

如果你有其他有价值的贡献、建议或想法, 请也让我们知道,因为我们会调查的。 也欢迎拉取请求。:-)

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

推荐PyPI第三方库


热门话题
java IntelliJ找不到依赖项选项卡   java向字符串数组string[]添加元素并在Junit中测试结果   如何在eclipse中获取活动java项目的名称   如何使用java在mysql中插入时间   java ArrayList更新了插入一行,但Jtable仍然没有刷新   如何在JavaSwing中命名坐标(点)   java Matcher/模式不打印   java错误地设置了arraylist   使用UsernamePasswordCredential提供程序的java列表Azure AD   java在HTTP请求中设置UTC时间   未加载事件:jquery完整日历Java集成   java Maven插件依赖项无法从内部repo解析依赖项   Maven更新重置Java版本   java如何向中添加图片。带有Apache POI XWPF的docx,但不指定其大小   Java最大函数递归