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中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python从MP3文件获取id3的方法
Jun 15 Python
使用python实现接口的方法
Jul 07 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
浅谈python新式类和旧式类区别
Apr 26 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
Python实现时间序列可视化的方法
Aug 06 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
简单了解python列表和元组的区别
May 14 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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
详解php比较操作符的安全问题
2015/12/03 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
javascript代码加载优化方法
2011/01/30 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
AngularJS入门之动画
2016/07/27 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python实现周期性抓取网页内容的方法
2015/11/04 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
运动会闭幕式解说词
2014/02/21 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
人事部岗位职责范本
2014/03/05 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
小班教师个人总结
2015/02/05 职场文书
大学生创业计划书
2019/06/24 职场文书
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL