使用Django的模版来配合字符串翻译工作


Posted in Python onJuly 27, 2015

Django模板使用两种模板标签,且语法格式与Python代码有些许不同。 为了使得模板访问到标签,需要将 {% load i18n %} 放在模板最前面。

这个{% trans %}模板标记翻译一个常量字符串 (括以单或双引号) 或 可变内容:

<title>{% trans "This is the title." %}</title>
<title>{% trans myvar %}</title>

如果有noop 选项,变量查询还是有效但翻译会跳过。 当空缺内容要求将来再翻译时,这很有用。

<title>{% trans "myvar" noop %}</title>

在一个带 {% trans %} 的字符串中,混进一个模板变量是不可能的。如果你的译文要求字符串带有变量(占位符placeholders),请使用 {% blocktrans %} :

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

使用模板过滤器来翻译一个模板表达式,需要在翻译的这段文本中将表达式绑定到一个本地变量中:

{% blocktrans with value|filter as myvar %}
This will have {{ myvar }} inside.
{% endblocktrans %}

如果需要在 blocktrans 标签内绑定多个表达式,可以用 and 来分隔:

{% blocktrans with book|title as book_t and author|title as author_t %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}

为了表示单复数相关的内容,需要在 {% blocktrans %} 和 {% endblocktrans %} 之间使用 {% plural %} 标签来指定单复数形式,例如:

{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}

其内在机制是,所有的块和内嵌翻译调用相应的 gettext 或 ngettext 。

每一个RequestContext可以访问三个指定翻译变量:

  1.     {{ LANGUAGES }} 是一系列元组组成的列表,每个元组的第一个元素是语言代码,第二个元素是用该语言表示的语言名称。
  2.     作为一二字符串,LANGUAGE_CODE是当前用户的优先语言。 例如: en-us。(请参见下面的Django如何发现语言偏好)
  3.     LANGUAGE_BIDI就是当前地域的说明。 如果为真(True),它就是从右向左书写的语言,例如: 希伯来语,阿拉伯语。 如果为假(False),它就是从左到右书写的语言,如: 英语,法语,德语等。

如果你不用这个RequestContext扩展,你可以用3个标记到那些值:

{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}

这些标记亦要求一个 {% load i18n %} 。

翻译的hook在任何接受常量字符串的模板块标签内也是可以使用的。 此时,使用 _() 表达式来指定翻译字符串,例如:

{% some_special_tag _("Page not found") value|yesno:_("yes,no") %}

在这种情况下,标记和过滤器两个都会看到已经翻译的字符串,所有它们并不需要提防翻译操作。

备注:

在这个例子中,翻译结构将放过字符串"yes,no",而不是单独的字符串"yes"和"no"。翻译的字符串将需要包括逗号以便过滤器解析代码明白如何分割参数。 例如, 一个德语翻译器可能会翻译字符串 "yes,no" 为 "ja,nein" (保持逗号原封不动)。

Python 相关文章推荐
Python实现的简单发送邮件脚本分享
Nov 07 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
python中学习K-Means和图片压缩
Nov 20 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
python3实现域名查询和whois查询功能
Jun 21 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
使用Python发现隐藏的wifi
Mar 04 Python
Python 多进程、多线程效率对比
Nov 19 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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
Python中Django框架利用url来控制登录的方法
Jul 25 #Python
You might like
十天学会php(3)
2006/10/09 PHP
PHP的FTP学习(四)
2006/10/09 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
python实现线程池的方法
2015/06/30 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python常用数据重复项处理方法
2019/11/22 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
2014年教师节寄语
2014/08/11 职场文书
综治工作心得体会
2014/09/11 职场文书
2014会计年终工作总结
2014/12/20 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
理解python中装饰器的作用
2021/07/21 Python