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

django-translations的Python项目详细描述


Django翻译

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重写父类中的特定行   java Apache Commons CLI订购帮助选项?   java如何将数据添加到网格视图   java如何在Apache Camel批处理后移动文件?   java如何为日期范围的between子句编写hql查询?   雅加达ee开始Java编程,我应该从哪里开始?   排序Java8+流:检查我的objectinstances的两个字段的列表顺序是否正确   java如何将json转换为Map<String,Object>确保整数为整数   java不能在Spring数据JPA批处理过程中创建TransactionException   java损坏的PDF文件从FTP下载到使用Apache Common Net的设备   java无法使用Spring批处理和Wso2为XML架构命名空间找到Spring NamespaceHandler   java Android ImageView未显示在SherlockFragment中   Maven在构建时出错=无法识别Java路径   java如何使用批处理文件调用关闭处理程序?   java admob广告横幅重叠我的游戏屏幕安卓