Django中的“惰性翻译”方法的相关使用


Posted in Python onJuly 27, 2015

使用 django.utils.translation.gettext_lazy() 函数,使得其中的值只有在访问时才会被翻译,而不是在 gettext_lazy() 被调用时翻译。

例如:要翻译一个模型的 help_text,按以下进行:

from django.utils.translation import ugettext_lazy

class MyThing(models.Model):
  name = models.CharField(help_text=ugettext_lazy('This is the help text'))

在这个例子中, ugettext_lazy() 将字符串作为惰性参照存储,而不是实际翻译。 翻译工作将在字符串在字符串上下文中被用到时进行,比如在Django管理页面提交模板时。

在Python中,无论何处你要使用一个unicode 字符串(一个unicode 类型的对象),您都可以使用一个 ugettext_lazy() 调用的结果。 一个ugettext_lazy()对象并不知道如何把它自己转换成一个字节串。如果你尝试在一个需要字节串的地方使用它,事情将不会如你期待的那样。 同样,你也不能在一个字节串中使用一个 unicode 字符串。所以,这同常规的Python行为是一致的。 例如:

# This is fine: putting a unicode proxy into a unicode string.
u"Hello %s" % ugettext_lazy("people")

# This will not work, since you cannot insert a unicode object
# into a bytestring (nor can you insert our unicode proxy there)
"Hello %s" % ugettext_lazy("people")

如果你曾经见到到像"hello"这样的输出,你就可能在一个字节串中插入了ugettext_lazy()的结果。 在您的代码中,那是一个漏洞。

如果觉得 gettext_lazy 太过冗长,可以用 _ (下划线)作为别名,就像这样:

from django.utils.translation import ugettext_lazy as _

class MyThing(models.Model):
  name = models.CharField(help_text=_('This is the help text'))

在Django模型中总是无一例外的使用惰性翻译。 为了翻译,字段名和表名应该被标记。(否则的话,在管理界面中它们将不会被翻译) 这意味着在Meta类中显式地编写verbose_nane和verbose_name_plural选项,而不是依赖于Django默认的verbose_name和verbose_name_plural(通过检查model的类名得到)。

from django.utils.translation import ugettext_lazy as _

class MyThing(models.Model):
  name = models.CharField(_('name'), help_text=_('This is the help text'))
  class Meta:
    verbose_name = _('my thing')
    verbose_name_plural = _('mythings')
Python 相关文章推荐
详解python的数字类型变量与其方法
Nov 20 Python
python生成词云的实现方法(推荐)
Jun 13 Python
使用python实现接口的方法
Jul 07 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python基于当前时间批量创建文件
May 07 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
在Python中的Django框架中进行字符串翻译
Jul 27 #Python
Python中特殊函数集锦
Jul 27 #Python
Python实现截屏的函数
Jul 26 #Python
Python计算已经过去多少个周末的方法
Jul 25 #Python
Python基于动态规划算法计算单词距离
Jul 25 #Python
Python中Django框架利用url来控制登录的方法
Jul 25 #Python
Python实现模拟登录及表单提交的方法
Jul 25 #Python
You might like
深入array multisort排序原理的详解
2013/06/18 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
vue组件发布到npm简单步骤
2017/11/30 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
深入讲解Python编程中的字符串
2015/10/14 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
使用python实现简单五子棋游戏
2019/06/18 Python
QML使用Python的函数过程解析
2019/09/26 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
Html5页面二次分享的实现
2018/07/30 HTML / CSS
澳大利亚相机之家:Camera House
2017/11/30 全球购物
室内设计自我鉴定
2013/10/15 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
企业业务员岗位职责
2014/03/14 职场文书
班主任对学生的评语
2014/04/26 职场文书
小学语文教研活动总结
2014/07/01 职场文书
社区娱乐活动方案
2014/08/21 职场文书