使用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 03 Python
如何高效使用Python字典的方法详解
Aug 31 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
Python的Lambda函数用法详解
Sep 03 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python logging模块handlers用法详解
Aug 14 Python
理解深度学习之深度学习简介
Apr 14 Python
pandas中DataFrame检测重复值的实现
May 26 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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工厂模式
2014/11/25 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
python发送邮件功能实现代码
2016/07/15 Python
python daemon守护进程实现
2016/08/27 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
Windows下安装Scrapy
2018/10/17 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
python关于倒排列的知识点总结
2020/10/13 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
陈欧广告词
2014/03/14 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
双方协议书
2014/04/22 职场文书
工作作风承诺书
2014/08/30 职场文书
创优争先心得体会
2014/09/11 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
spring 项目实现限流方法示例
2022/07/15 Java/Android