Django模型翻译为完美主义者与最后期限。

django-translations-thread的Python项目详细描述


Django翻译

注意:这个包裹是 https://github.com/bbmokhtari/django-translations。它包含功能和 在原始包中尚未提供修复程序,但将不会由维护 公共用途请以原包装为准。

buildpythonpypidjangoflake8

Django模型翻译为完美主义者与最后期限。

目标

有两种类型的内容,每种内容都有自己的翻译挑战:

  • 静态内容:这是代码中定义的内容。 例如,“请输入有效的电子邮件地址。”

    Django已经提供了 solution 用于翻译静态内容。

  • 动态内容:这是存储在数据库中的内容。 (我们不能事先知道!)

    django翻译提供了一个解决方案 用于翻译动态内容

要求

  • Python(>;=3.5)
  • Django(>;=2.0)

安装

  1. 使用pip安装Django翻译:

    $ pip install django-translations
    
  2. translations添加到 项目:

    INSTALLED_APPS+=['translations',]
  3. 运行migrate

    $ python manage.py migrate
    
  4. 配置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,]

这为模型提供了专门的转换内联线。

image

查询集

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

顺便说一下

如果你喜欢这个图书馆,请考虑给它一颗星星!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Grid loadmask(true)在gxt中不起作用   java将字符串索引转换为整数   为什么Java泛型适用于基元数组,但不适用于基元数组?   java如何让Azure应用程序服务Tomcat将所有80/443流量转发到运行在同一应用程序服务上的JBoss   具有多个值的java转换映射到树?   java如何设置SQL server连接URL?   java设置了多个相互独立的JFrame   安全性在JAVA中如何使用RSAPrivateKey的密码短语?   java不能使用比Apache Velocity中更大的条件   如何在Java中打印字符串的所有排列   停止Android Studio自动导入java。sql。日期   对象简单计算器程序java   java如何在安卓中使用“&”符号作为字符串?   java Connect,为我的安卓应用程序从REST API发布和获取数据