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 制作糗事百科爬虫实例
Sep 22 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
Python 解析简单的XML数据
Jul 24 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
python文件路径操作方法总结
Dec 21 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python算术运算符实例详解
2017/05/31 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python assert语句的简单使用示例
2019/07/28 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
求职信怎么写范文
2014/05/26 职场文书
庆国庆活动总结
2014/08/28 职场文书
股份转让协议书范本
2015/01/27 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python