使用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发腾讯微博代码分享
Jan 10 Python
Python中使用 Selenium 实现网页截图实例
Jul 18 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
浅谈Python中的bs4基础
Oct 21 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
Python函数的默认参数设计示例详解
Dec 01 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 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
基于文本的留言簿
2006/10/09 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php支付宝接口用法分析
2015/01/04 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
JQuery动画和停止动画实例代码
2013/03/01 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
高中生自我评价个人范文
2013/11/09 职场文书
复核员上岗演讲稿
2014/01/05 职场文书
市场部管理制度
2014/02/02 职场文书
节电标语大全
2014/06/23 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
深入理解python多线程编程
2021/04/18 Python
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
基于Python编写一个监控CPU的应用系统
2022/06/25 Python