使用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 |