使用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同时向控制台和文件输出日志logging的方法
May 26 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
详解Python3 基本数据类型
Apr 19 Python
谈一谈基于python的面向对象编程基础
May 21 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
pycharm的python_stubs问题
Apr 08 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
TensorFlow的自动求导原理分析
May 26 Python
Python中的程序流程控制语句
Feb 24 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实现Mysql读写分离
2013/06/28 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python使用Supervisor来管理进程的方法
2015/05/28 Python
Python算术运算符实例详解
2017/05/31 Python
python实现最长公共子序列
2018/05/22 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
用python实现名片管理系统
2020/06/18 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
大学生村官典型材料
2014/01/12 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技