使用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的Flask框架中@app.route的用法教程
Mar 31 Python
详解Python的Django框架中的templates设置
May 11 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
python实现kMeans算法
Dec 21 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
Python unittest模块用法实例分析
May 25 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
django之自定义软删除Model的方法
Aug 14 Python
在pycharm中显示python画的图方法
Aug 31 Python
python requests.get带header
May 05 Python
python模块如何查看
Jun 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代码
2006/12/06 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
javascript继承机制实例详解
2014/11/20 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Python之变量类型和if判断方式
2020/05/05 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
森林防火标语
2014/06/23 职场文书
社区娱乐活动方案
2014/08/21 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2016年校长新年寄语
2015/08/17 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
Oracle中日期的使用方法实例
2022/07/07 Oracle