使用Postgresql的jsonb字段在后台的一个内容翻译框架
项目描述
重要通知
这是一个不再维护的https://github.com/tatterdemalion/django-nece的分支。
包名已从nece更改为django-nece。
nece?
简介
使用Postgresql的jsonb字段实现的一个“内容翻译框架”。它简单地在名为translations的jsonb字段中设置和获取翻译。
为什么?
您可能会问为什么应该使用django-nece,因为还有其他更成熟的内容翻译框架,如django-hvad和django-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提供)。
示例
# 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的哈希
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4dda90fcad0c63b2f51c6c58dd94f0b9799adb5b52f6e6ab4c822ab74b1c6bf3 | |
| MD5 | 5b323a04717316f519b358bcc02b83e0 | |
| BLAKE2b-256 | 8e837df210b808fb03bc7b646d9cef9299e722516cdf7b11de23ce948bc0e7d0 |