使用gettext转换django模型数据

django-vinaigrette的Python项目详细描述


https://travis-ci.com/ecometrica/django-vinaigrette.svg?branch=masterhttps://coveralls.io/repos/github/ecometrica/django-vinaigrette/badge.svg?branch=master

django香醋

vinaigrette使用gnu gettext转换django模型数据(存储在数据库中) 以及django的标准国际化特征。

安装

在您的设置中将vinaigrette添加到INSTALLED_APPS

然后,告诉vinaigrette你想翻译哪些字段。因为调味汁需要记录信号, 模型加载完成后,您应该在适当的apps.py文件中注册模型翻译。 (或者在您保留AppConfig子类的任何地方):

importvinaigretteclassSaladAppConfig(AppConfig):defready(self):# Import the model requiring translationfrom.modelsimportIngredient# or...Ingredient=self.get_model("Ingredient")# Register fields to translatevinaigrette.register(Ingredient,['name','description'])

这告诉vinaigrette翻译成分对象上的namedescription字段。

使用

安装vinaigrette之后,由manage.py makemessages生成的po文件将包括 已注册字段中的字符串。如果转换了特定字符串,则模型值将 将字符串翻译成适当的语言:

>>>fromdjango.utils.translationimportactivate>>>i=Ingredient(name=u'Lettuce')>>>i.nameu'Lettuce'>>>activate('fr')>>>i.nameu'Laitue'

有两个选项可以限制将收集哪些对象转换字符串 从。请参阅vinaigrette.register的docstring。

vinaigrette将--keep-obsolete选项添加到manage.py makemessages,这将阻止gettext 停用代码或已注册数据库字段中不再存在的已翻译邮件。

vinaigrette是为数据库内容设计的,即:

  • 始终用默认语言编辑
  • 由站点管理员而不是用户编辑

仅转换模型实例。通过django querysetvalues方法访问的数据将 不被翻译。

一般来说,当一个字段被访问时,如果存在一个字段,它将总是返回翻译的版本。 但是,如果设置了值,则应保存输入的确切值(而不是翻译版本) 到数据库。例如:

>>>fromdjango.utils.translationimportactivate>>>i=Ingredient(name=u'Lettuce')>>>activate('fr')>>>i.nameu'Laitue'>>>i.name='Cabbage'>>>i.nameu'Chou'>>>i.save()>>>Ingredient.objects.get(name='Cabbage').nameu'Chou'

救命!每当我保存更改时,管理员就会把所有的vinaigrette字段弄乱!

vinaigrette.middleware.VinaigretteAdminLanguageMiddleware添加到 settings.MIDDLEWARE强制管理员始终使用主语言,并且 不要在你的改变观点上搞得一团糟。

贡献

测试
  • 为项目创建一个virtualenv
  • 安装tox。当运行tox时,它将为 支持django和python版本,然后对它们运行测试

发行说明

1.2.1

  • 修复python 2对makemessages的支持
    • 为makeMessages添加测试

1.2.0

  • 为register函数添加了可选的contexts参数 为模型字段提供翻译上下文。
  • 将中间件更新为1.10+样式
    • 保持向后兼容1.9及以下
      • 将在MIDDLEWARE_CLASSESMIDDLEWARE
      • 中工作
    • 不赞成VinaigrettteAdminLanguageMiddleware对于VinaigretteAdminLanguageMiddleware
      • 用户应更改为vinaigrette.middleware.VinaigretteAdminLanguageMiddleware
      • vinaigrette.VinaigrettteAdminLanguageMiddleware将继续工作,直到下一个主要版本
  • 为开发和测试添加tox和pytest

1.1.1

  • 更新联系信息

1.1.0

  • django 2.0支持

1.0.1

  • 记住要正确更新版本

1.0.0

  • 添加--keep-vinaigrette-temp选项,该选项保留包含生成的翻译列表的临时文件
  • 增加了对django 1.9的支持
  • 删除对django版本的支持<;1.8

0.5.0

  • 无法在.register()函数中指定要使用的属性,而不是数据库字段名。

0.4.0

  • 支持Django 1.7

0.3.0

  • 支持Python3.3。

0.2.0

  • 经营单位g修复–all选项,它现在再次工作。
  • 新的VinaigrettAdminLanguageIDdleware中间件。

0.1.3

  • 支持Django 1.6。

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

推荐PyPI第三方库


热门话题
java将多个线程中的函数放入单个队列   数组在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?   java控制器属于表示层?   java Apache Ivy和本地Maven repo如何处理使用Maven 3构建的快照   Java可与泛型类型进行比较   java这个表达式在泛型中是什么意思   JavaEclipse和TeamCity插件   java检测构造函数中的final是否为空   java如何在StanfordCoreNLP管道中同时使用词汇化和依赖性解析器?   java在AntUnit控制台日志中显示完整异常堆栈跟踪   lambda如何与Java 8供应商建立连锁关系   如何让GRPC的重试机制在Kubernetes集群中使用grpcjava工作?   如何使用openjdk:7 Docker映像和Gradle包装器避免“EC参数错误”?   java将集合映射扩展为一维映射新的“无法推断函数接口类型”