使用Django的模版来配合字符串翻译工作

 更新时间:2015年07月27日 15:54:16   投稿:goldensun  
这篇文章主要介绍了使用Django的模版来配合字符串翻译工作,Django是最具人气的Python开发框架,需要的朋友可以参考下

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" (保持逗号原封不动)。

相关文章

  • 如何在windows下安装Pycham2020软件(方法步骤详解)

    如何在windows下安装Pycham2020软件(方法步骤详解)

    这篇文章主要介绍了在windows下安装Pycham2020软件方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python3将jpg转为pdf文件的方法示例

    Python3将jpg转为pdf文件的方法示例

    这篇文章主要介绍了Python3将jpg转为pdf文件的方法,结合完整实例形式分析了Python3针对jpg转pdf格式的文件读写、编码装换等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • python计算无向图节点度的实例代码

    python计算无向图节点度的实例代码

    今天小编就为大家分享一篇python计算无向图节点度的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • OpenCV根据面积筛选连通域学习示例

    OpenCV根据面积筛选连通域学习示例

    这篇文章主要为大家介绍了OpenCV根据面积筛选连通域学习示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • django时区问题的解决

    django时区问题的解决

    我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,我们希望存储在数据库中的时间就是本地时间(东八区的时间),那么应该怎么设置,就一起来了解一下
    2021-05-05
  • 详解python中的生成器、迭代器、闭包、装饰器

    详解python中的生成器、迭代器、闭包、装饰器

    这篇文章主要介绍了python中的生成器、迭代器、闭包、装饰器的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python网络编程之多线程同时接受和发送

    python网络编程之多线程同时接受和发送

    这篇文章主要为大家详细介绍了python网络编程之多线程同时接受和发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • python基础之函数和面向对象详解

    python基础之函数和面向对象详解

    这篇文章主要为大家详细介绍了python的函数和面向对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • python实现倒计时的示例

    python实现倒计时的示例

    这篇文章主要介绍了python实现的倒计时的示例,需要的朋友可以参考下
    2014-02-02
  • 分享一个可以生成各种进制格式IP的小工具实例代码

    分享一个可以生成各种进制格式IP的小工具实例代码

    这篇文章主要给大家分享了一个可以生成各种进制格式IP的小工具,利用的语言是python实现的一个小工具,这个小工具对大家的日常使用与开发具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07

最新评论