跳转到主要内容

使用Postgresql的jsonb字段在后台的一个内容翻译框架

项目描述

https://img.shields.io/pypi/v/django-nece.svg https://img.shields.io/pypi/pyversions/django-nece.svg

重要通知

这是一个不再维护的https://github.com/tatterdemalion/django-nece的分支。

包名已从nece更改为django-nece

nece?

简介

nece

使用Postgresql的jsonb字段实现的一个“内容翻译框架”。它简单地在名为translations的jsonb字段中设置和获取翻译。

为什么?

您可能会问为什么应该使用django-nece,因为还有其他更成熟的内容翻译框架,如django-hvaddjango-modeltranslation。它们在某些方面做得很好,在其他方面则做得不好。

例如,对于django-hvad用户来说,如果对象没有相应的翻译,很难获取默认语言。而且它将翻译值存储在不同的表中,因此每次翻译查询都会导致数据库的另一次访问。

另一方面,django-modeltranslation为多种语言添加了多个额外字段。所需支持的语言数量越多,字段的数量就越多。如果您需要添加超过20种语言,最终它将成为对象的一大块。

nece基本上与后者类似,但有一个重要区别。它使用Postgresql的新JSONB字段来存储翻译信息,并在查询时覆盖原始值。

依赖关系

postgresql >= 9.4.5
Django >= 2.2
psycopg2 >= 2.5.4

安装

通过pypi

pip install django-nece

用法

假设我们有一个名为Fruit的模型

from nece.models import TranslationModel

class Fruit(TranslationModel):
    name = CharField(max_length=255)

    def __str__(self):
        return self.name

    class Meta:
        translatable_fields = ('name',)

TranslationModel将一个jsonb字段添加到这个表中,并设置类似于以下格式的翻译

{u'de_de': {u'name': u'Apfel'},
 u'tr_tr': {u'name': u'elma'}}

当我们需要德语翻译时,我们可以简单地选择语言,并像往常一样获取属性

>> f = Fruit.objects.get(name='apple')
>> print(f.name)
apple
>> f.language('de_de')
>> print(f.name)
Apfel

您还可以过滤出包含任何语言翻译的项

>> Fruit.objects.all()
[<Fruit: apple>, <Fruit: pear>, <Fruit: banana>]
>> Fruit.objects.language('tr_tr')
[<Fruit: elma>, <Fruit: armut>]  # there is no translation for banana
>> Fruit.objects.language_or_default('tr_tr')
[<Fruit: elma>, <Fruit: armut>, <Fruit: banana>]
>> Fruit.objects.language('tr_tr').filter(name='elma')
[<Fruit: elma>]
>> Fruit.objects.language('tr_tr').get(name='elma')
<Fruit: elma>

更新翻译

>> fruit._language_code
tr_tr
>> fruit.name
elma
>> fruit.translate(name='armut').save()
>> fruit.name
armut
>> fruit.language('en')
>> fruit.translate('it_it', name='pera')
>> fruit.language('it_it')
>> fruit.name
pera

设置

TRANSLATIONS_DEFAULT

默认语言代码。默认值:`en_us`

TRANSLATIONS_MAP

`languagecode_countrycode`记法的小工具。

示例

TRANSLATIONS_MAP = {
    "en": "en_us",
    "tr": "tr_tr",
    "ar": "ar_sy",
    "bg": "bg_bg",
    "cs": "cs_cz",
    "da": "da_dk",
    ...
}

默认

{'en': 'en_us'}

TRANSLATIONS_FALLBACK

如果缺少翻译,将使用后备语言。

示例

TRANSLATIONS_FALLBACK = {
    'fr_ca': ['fr_fr'],
    'en_us': ['en_gb'],
}

管理面板

使用TranslatableModelAdmin以漂亮的JSON编辑器(由django-admin-json-editor提供)。

nece

示例

# settings.py
INSTALLED_APPS = [
    ...
    'django_admin_json_editor',
    ...
]

# admin.py
from nece.admin import TranslatableModelAdmin

class PlaceAdmin(TranslatableModelAdmin):
    list_display = ('...')

贡献者及感谢

变更日志

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

django-nece-0.11.tar.gz (7.6 kB 查看哈希)

上传时间

构建分布

django_nece-0.11-py3-none-any.whl (8.7 kB 查看哈希)

上传时间 Python 3

由以下支持