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爬虫常用的模块分析
Aug 29 Python
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
Python Pillow Image Invert
Jan 22 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
Django给admin添加Action的步骤详解
May 01 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
详解python的内存分配机制
May 10 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
联欢晚会主持词
2014/03/25 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
建筑节能汇报材料
2014/08/22 职场文书
大学生赌博检讨书
2014/09/22 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏