使用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中实现迭代器(iterator)的方法示例
Jan 19 Python
Python分析学校四六级过关情况
Nov 22 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
Django restful framework生成API文档过程详解
Nov 12 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
Python离线安装openpyxl模块的步骤
Mar 30 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 empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP 第一节 php简介
2012/04/28 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
2013年研究生毕业感言
2014/02/06 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
医院见习报告范文
2014/11/03 职场文书
民事上诉状范文
2015/05/22 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书