在Django的模型和公用函数中使用惰性翻译对象


Posted in Python onJuly 27, 2015

在模型和公用函数中,使用ugettext_lazy()和ungettext_lazy()来标记字符串是很普遍的操作。 当你在你的代码中其它地方使用这些对象时,你应当确定你不会意外地转换它们成一个字符串,因为它们应被尽量晚地转换(以便正确的地域生效) 这需要使用几个帮助函数。
拼接字符串: string_concat()

标准Python字符串拼接(''.join([...]) ) 将不会工作在包括惰性翻译对象的列表上。 作为替代,你可以使用django.utils.translation.string_concat(), 这个函数创建了一个惰性对象,其连接起它的内容 并且 仅当结果被包括在一个字符串中时转换它们为字符串 。 例如:

from django.utils.translation import string_concat
# ...
name = ugettext_lazy(u'John Lennon')
instrument = ugettext_lazy(u'guitar')
result = string_concat([name, ': ', instrument])

System Message: ERROR/3 (<string>, line 519)

Error in “cnid” directive: no content permitted.

.. cnid:: 109

  在这种情况下,当

System Message: WARNING/2 (<string>, line 523)

Explicit markup ends without a blank line; unexpected unindent.

result 自己被用与一个字符串时, result 中的惰性翻译将仅被转换为字符串(通常在模板渲染时间)。
allow_lazy() 修饰符

Django提供很多功能函数(如:取一个字符串作为他们的第一个参数并且对那个字符串做些什么)。(尤其在 django.utils 中) 这些函数被模板过滤器像在其他代码中一样直接使用。

如果你写你自己的类似函数并且与翻译打交道,当第一个参数是惰性翻译对象时,你会面临“做什么”的难题。 因为你可能在视图之外使用这个函数(并且因此当前线程的本地设置将会不正确),所以你不想立即转换其为一个字符串。

象这种情况,请使用 django.utils.functional.allow_lazy() 修饰符。 它修改这个函数以便 假如第一个参数是一个惰性翻译, 这个函数的赋值会被延后直到它需要被转化为一个字符串为止。

例如:

from django.utils.functional import allow_lazy

def fancy_utility_function(s, ...):
  # Do some conversion on string 's'
  # ...
fancy_utility_function = allow_lazy(fancy_utility_function, unicode)

allow_lazy() 装饰符 采用了另外的函数来装饰,以及一定量的,原始函数可以返回的特定类型的额外参数 (*args ) 。 通常,在这里包括 unicode 就足够了并且确定你的函数将仅返回Unicode字符串。

使用这个修饰符意味着你能写你的函数并且假设输入是合适的字符串,然后在末尾添加对惰性翻译对象的支持。

Python 相关文章推荐
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
python万年历实现代码 含运行结果
May 20 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python 正则表达式参数替换实例详解
Jan 17 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python os和os.path模块详情
Apr 02 Python
使用Django的模版来配合字符串翻译工作
Jul 27 #Python
Django中的“惰性翻译”方法的相关使用
Jul 27 #Python
在Python中的Django框架中进行字符串翻译
Jul 27 #Python
Python中特殊函数集锦
Jul 27 #Python
Python实现截屏的函数
Jul 26 #Python
Python计算已经过去多少个周末的方法
Jul 25 #Python
Python基于动态规划算法计算单词距离
Jul 25 #Python
You might like
PHP 读取文件的正确方法
2009/04/29 PHP
php 高效率写法 推荐
2010/02/21 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
python实现电子词典
2020/04/23 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python如何实现机器人聊天
2020/09/10 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
python中xlutils库用法浅析
2020/12/29 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
即兴演讲稿
2014/01/04 职场文书
就业意向书范文
2014/04/01 职场文书
英语分层教学实施方案
2014/06/15 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
现役军人家属慰问信
2015/03/24 职场文书
宾馆客房管理制度
2015/08/06 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers