使用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集合用法实例分析
May 30 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python3中列表list合并的四种方法
Apr 19 Python
简单分析python的类变量、实例变量
Aug 23 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
python可视化实现KNN算法
Oct 16 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
Python实现转换图片背景颜色代码
Apr 30 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
golang/python实现归并排序实例代码
Aug 30 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
json 定义
2008/06/10 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
爽歪歪广告词
2014/03/20 职场文书
挂靠协议书范本
2014/04/22 职场文书
大学生社会实践方案
2014/05/11 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
家长学校教学计划
2015/01/19 职场文书
工程催款通知书
2015/04/17 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
MySQL 数据类型详情
2021/11/11 MySQL
python创建字典及相关管理操作
2022/04/13 Python