使用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备份目录及目录下的全部内容的实现方法
Jun 12 Python
Python实现基本线性数据结构
Aug 22 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
基于tensorflow加载部分层的方法
Jul 26 Python
django迁移数据库错误问题解决
Jul 29 Python
使用python实现画AR模型时序图
Nov 20 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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应用JSON技巧讲解
2013/02/03 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
[原创]图片分页查看
2006/08/28 Javascript
javascript 常用关键字列表集合
2007/12/04 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python异常学习笔记
2015/02/03 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python调用自定义函数的实例操作
2019/06/26 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
总结高并发下Nginx性能如何优化
2021/11/01 Servers