简单的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第三方库


热门话题
如何在需要sudo权限的目录中使用java创建目录?   java如何在公共方法中提供对象,以使用PowerMock访问其中的另一个方法?   组合框选择中的java填充文本字段   java Cassandra+spring数据   java如何将h参数传递给maven编译器插件以创建JNI头文件   测试中的java捕获日志   eclipse中的java testNG安装问题   java根据每个字符串的子字符串对字符串ArrayList的一半进行排序   java web。不响应请求的jersey Servlet的xml   java按字母顺序排序   java如何在调试模式下访问子活动代码   ExpandableListView适配器过滤函数的java实现   java为什么JTabbedPane的ChangeListener在主JFrame启动时加载?   在Java中为公式生成图像   带AWS kinesis的maven Apache flink使用java获取数据。lang.NoClassDefFoundError:org/apache/flink/streaming/connectors/kinesis/flinkkinesConsumer   java修复XSS漏洞   java从HttpServiceClient读取一个巨大的结果集,并以块的形式显示它们   安卓从java程序执行终端命令   java在JPQL中使用内部联接为3个表选择所有行   java如何在JavaFX上调整画布大小以适应大小