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在校内发人人网状态(人人网看状态)
Feb 19 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
Python zip()函数用法实例分析
Mar 17 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Python中shapefile转换geojson的示例
Jan 03 Python
Python玩转加密的技巧【推荐】
May 13 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
python基于opencv检测程序运行效率
Dec 28 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
利用Python函数实现一个万历表完整示例
Jan 23 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
Terran兵种对照表
2020/03/14 星际争霸
php 中文处理函数集合
2008/08/27 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
python创建线程示例
2014/05/06 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
司机岗位职责说明书
2014/07/29 职场文书
办理信用卡工作证明
2014/09/30 职场文书
交通事故协议书范本
2014/11/18 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
大学生村官个人总结
2015/02/15 职场文书
销售督导岗位职责
2015/04/10 职场文书
服装店员工管理制度
2015/08/07 职场文书
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers