使用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中二维阵列的变换实例
Oct 09 Python
Python构造函数及解构函数介绍
Feb 26 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python的UTC时间转换讲解
Feb 26 Python
python3 线性回归验证方法
Jul 09 Python
Python简单处理坐标排序问题示例
Jul 11 Python
python cv2截取不规则区域图片实例
Dec 21 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
keras打印loss对权重的导数方式
Jun 10 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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语法(1)
2006/10/09 PHP
我的论坛源代码(七)
2006/10/09 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php htmlspecialchars加强版
2010/02/16 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php计算整个目录大小的方法
2015/06/01 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python简易版停车管理系统
2019/08/12 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
银行贷款委托书范本
2014/10/11 职场文书
财务审计整改报告
2014/11/06 职场文书
2015年三万活动总结
2015/03/25 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
请假条应该怎么写?
2019/06/24 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android