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运行报错UnicodeDecodeError的解决方法
Jun 07 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
python进程间通信Queue工作过程详解
Nov 01 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Python基于字典实现switch case函数调用
Jul 22 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 什么是PEAR?
2009/03/19 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python中模块string.py详解
2017/03/12 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
Python虚拟环境venv用法详解
2020/05/25 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
初中英语教师个人工作总结
2015/02/09 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
Python标准库pathlib操作目录和文件
2021/11/20 Python
vue封装数字翻牌器
2022/04/20 Vue.js
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL