Django模型翻译为完美主义者与最后期限。
django-translations-thread的Python项目详细描述
Django翻译
注意:这个包裹是 https://github.com/bbmokhtari/django-translations。它包含功能和 在原始包中尚未提供修复程序,但将不会由维护 公共用途请以原包装为准。
Django模型翻译为完美主义者与最后期限。
目标
有两种类型的内容,每种内容都有自己的翻译挑战:
静态内容:这是代码中定义的内容。 例如,“请输入有效的电子邮件地址。”
Django已经提供了 solution 用于翻译静态内容。
动态内容:这是存储在数据库中的内容。 (我们不能事先知道!)
django翻译提供了一个解决方案 用于翻译动态内容
要求
- Python(>;=3.5)
- Django(>;=2.0)
安装
使用pip安装Django翻译:
$ pip install django-translations
将
translations
添加到 项目:INSTALLED_APPS+=['translations',]
运行
migrate
:$ python manage.py migrate
配置Django国际化和本地化设置:
USE_I18N=True# use internationalizationUSE_L10N=True# use localizationMIDDLEWARE+=[# locale middleware'django.middleware.locale.LocaleMiddleware',]LANGUAGE_CODE='en-us'# default (fallback) languageLANGUAGES=(# supported languages('en','English'),('en-gb','English (Great Britain)'),('de','German'),('tr','Turkish'),)
请注意,这些设置是为django本身设置的。
基本用法
型号
在任何需要翻译的模型中继承Translatable
:
fromtranslations.modelsimportTranslatableclassContinent(Translatable):code=models.Charfield(...)name=models.Charfield(...)denonym=models.Charfield(...)classTranslatableMeta:fields=['name','denonym']
之后不需要迁移
管理
使用管理扩展名:
fromtranslations.adminimportTranslatableAdmin,TranslationInlineclassContinentAdmin(TranslatableAdmin):inlines=[TranslationInline,]
这为模型提供了专门的转换内联线。
查询集
使用queryset扩展:
>>>fromsample.modelsimportContinent>>>continents=Continent.objects.all(...).distinct(# familiar distinct...).probe(['en','de']# probe (filter, exclude, etc.) in English and German...).filter(# familiar filtering...countries__cities__name__startswith='Köln'...).translate('de'# translate the results in German...).translate_related(# translate these relations as well...'countries','countries__cities',...)>>>print(continents)<TranslatableQuerySet[<Continent:Europa>,]>>>>print(continents[0].countries.all())<TranslatableQuerySet[<Country:Deutschland>,]>>>>print(continents[0].countries.all()[0].cities.all())<TranslatableQuerySet[<City:Köln>,]>
这提供了一个强大而熟悉的接口来处理queryset。
上下文
使用翻译上下文:
>>>fromtranslations.contextimportContext>>>fromsample.modelsimportContinent>>>continents=Continent.objects.all()>>>relations=('countries','countries__cities',)>>>withContext(continents,*relations)ascontext:...context.read('de')# read the translations onto the context...print(':')# use the objects like before...print(continents)...print(continents[0].countries.all())...print(continents[0].countries.all()[0].cities.all())......continents[0].countries.all()[0].name='Change the name'...context.update('de')# update the translations from the context......context.delete('de')# delete the translations of the context......context.reset()# reset the translations of the context...print(':')# use the objects like before...print(continents)...print(continents[0].countries.all())...print(continents[0].countries.all()[0].cities.all()):<TranslatableQuerySet[<Continent:Asien>,<Continent:Europa>,]><TranslatableQuerySet[<Country:Deutschland>,]><TranslatableQuerySet[<City:Köln>,]>:<TranslatableQuerySet[<Continent:Asia>,<Continent:Europe>,]><TranslatableQuerySet[<Country:Germany>,]><TranslatableQuerySet[<City:Cologne>,]>
这会损坏任何对象(实例、查询集、列表)及其关系的翻译。
文件
有关更有趣的功能,请浏览 documentation。
顺便说一下
如果你喜欢这个图书馆,请考虑给它一颗星星!