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 401在API URL上带有声明性Http客户端,并带有@Secured(SecurityRule.IS_ANONYMOUS)注释   java如何在Android中创建计时器?   Java8WebStart安全弹出窗口   java会通过以下两种方式导致堆空间耗尽吗?   java项目调度GA:染色体的高效数据结构   java Apache POI:如何在Excel文件中插入列   java在JRE系统库中每个jar扮演什么角色   java如何在抽象类中执行@mock(不是注入mock)   java如何使用opensearch和Lucene发送搜索查询?   java在ApachePOI中处理空列   java广播接收器未接收到目标   java错误ELF类:ELF类64(可能原因:体系结构字宽不匹配)   java调用Web服务(SSL)时出错   用于iot集线器设备固件更新的java Rest API   通过xslt将xml转换为文本文件时引发java异常   Java linux打印问题   Java XML转换器重复行   java从另一个类的方法将数组导入mainActivity类   多线程选择与Java交互的线程   我想在java程序中打印以下格式的文件: