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局域网ip扫描示例分享
Apr 03 Python
Python Tkinter简单布局实例教程
Sep 03 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python中实现switch功能实例解析
Jan 11 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
python实现简单淘宝秒杀功能
May 03 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
pytorch实现查看当前学习率
Jun 24 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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 Squid中可缓存的动态网页设计
2008/09/17 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php内存缓存实现方法
2015/01/24 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
普通PHP程序员笔试题
2016/01/01 面试题
数控专业大学生的自我鉴定
2013/11/13 职场文书
接受捐赠答谢词
2014/01/27 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
学雷锋的心得体会
2014/09/04 职场文书
公务员年度考核评语
2014/12/31 职场文书
股份转让协议书范本
2015/01/27 职场文书
毕业赠语大全
2015/06/23 职场文书
党员心得体会范文2016
2016/01/23 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL