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实现根据窗口标题调用窗口的方法
Mar 13 Python
详解Python多线程
Nov 14 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
python实现静态服务器
Sep 05 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python pyecharts绘制条形图详解
Apr 02 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 strtotime函数详解
2009/12/18 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
jquery tab标签页的制作
2010/05/10 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Python中的单继承与多继承实例分析
2018/05/10 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
详解Django配置优化方法
2019/11/18 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Python extract及contains方法代码实例
2020/09/11 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
如何写股份合作协议书
2014/09/11 职场文书
2015年教务工作总结
2015/05/23 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
python开发人人对战的五子棋小游戏
2022/05/02 Python