使用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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
利用python实现数据分析
Jan 11 Python
python3操作微信itchat实现发送图片
Feb 24 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
python绘制彩虹图
Dec 16 Python
关于Python中定制类的比较运算实例
Dec 19 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
基于Pygame实现简单的贪吃蛇游戏
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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
img的onload的另类用法
2008/01/10 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
vue-router单页面路由
2017/06/17 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
js实现点击生成随机div
2020/01/16 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python之pandas用法大全
2018/03/13 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
护理专业毕业生自荐信范文
2014/01/05 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
计生专干事迹
2014/05/28 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
个人收入证明范本
2015/06/12 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
angular4实现带搜索的下拉框
2022/03/25 Javascript