使用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 相关文章推荐
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
python获取代码运行时间的实例代码
Jun 11 Python
django进阶之cookie和session的使用示例
Aug 17 Python
面向初学者的Python编辑器Mu
Oct 08 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Python气泡提示与标签的实现
Apr 01 Python
parser.add_argument中的action使用
Apr 20 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
python与js主要区别点总结
Sep 13 Python
Python-split()函数实例用法讲解
Dec 18 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中的命名空间详细介绍
2015/07/02 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
JsChart组件使用详解
2018/03/04 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
python 从文件夹抽取图片另存的方法
2018/12/04 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
奥巴马演讲稿
2014/01/08 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
2015年实习单位评语
2015/03/25 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android