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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
Python使用django获取用户IP地址的方法
May 11 Python
Python字符串逐字符或逐词反转方法
May 21 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python 动态加载的实现方法
Dec 22 Python
Python实现的字典值比较功能示例
Jan 08 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python ubplot使用方法解析
Jan 10 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 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
2020最新CPU的性能排名
2020/04/02 数码科技
PHP令牌 Token改进版
2008/07/18 PHP
yii操作cookie实例简介
2014/07/09 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP多进程简单实例小结
2019/11/09 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
让您的菜单不离网站
2006/10/03 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
python多线程下信号处理程序示例
2019/05/31 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
J2EE面试题
2016/03/14 面试题
信息部岗位职责
2013/11/12 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
好的旅游活动方案
2014/08/19 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android