跳转到主要内容

简单Django模型翻译,无需复杂的技巧,具有良好的管理集成功能。

项目描述

https://img.shields.io/travis/polyconseil/django-parler-encore/master.svg?branch=master https://img.shields.io/pypi/v/django-parler.svg https://img.shields.io/pypi/l/django-parler.svg https://img.shields.io/codecov/c/github/polyconseil/django-parler-encore/master.svg

django-parler-encore

django-parler的温柔分支

django-parler

简单Django模型翻译,无需复杂的技巧。

功能

  • 良好的管理集成。

  • 像常规属性一样访问翻译属性。

  • 自动回退到默认语言。

  • 翻译字段具有独立的表,与django-hvad兼容。

  • 与其他组件兼容,与django-polymorphicdjango-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 (64.5 kB 查看哈希值)

上传时间 源代码

构建分布

django_parler_encore-1.0.0-py2.py3-none-any.whl (81.3 kB 查看哈希值)

上传时间 Python 2 Python 3