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实现Windows定时关机功能
Mar 21 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
python3.5 email实现发送邮件功能
May 22 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
python设置环境变量的作用和实例
Jul 09 Python
Flask框架单例模式实现方法详解
Jul 31 Python
python获取Pandas列名的几种方法
Aug 07 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 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读取csv文件并输出的方法
2015/03/14 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
Python多进程同步简单实现代码
2016/04/27 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
Python 文件操作的详解及实例
2017/09/18 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
python实现大学人员管理系统
2019/10/25 Python
python2和python3哪个使用率高
2020/06/23 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
青年文明号复核材料
2014/02/11 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
公司考勤管理制度
2015/08/04 职场文书
合作协议书格式范本
2016/03/21 职场文书
小学四年级作文之写景
2019/08/23 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP