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中pass语句用法实例分析
Apr 30 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
简单了解python关系(比较)运算符
Jul 08 Python
python将数组n等分的实例
Dec 02 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Django查询优化及ajax编码格式原理解析
Mar 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
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
php实例化一个类的具体方法
2019/09/19 PHP
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
python递归计算N!的方法
2015/05/05 Python
简单实现python爬虫功能
2015/12/31 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
python实现五子棋游戏
2019/06/18 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Python imread、newaxis用法详解
2019/11/04 Python
用python实现学生管理系统
2020/07/24 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
材料会计岗位职责
2014/03/06 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书