django的国际化



Django应用进行国际化的三个步骤:

1. 第一步:在你的Python代码和模板中嵌入待翻译的字符串。

2. 第二步:把那些字符串翻译成你要支持的语言。

3. 第三步:在你的Django settings文件中激活本地中间件

1.标准翻译:

使用函数 ugettext() 来指定一个翻译字符串。 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间.不但可以翻译正常的字符串包括变量以及计算出来的均可以翻译

from django.utils.translation import ugettext as _

def my_view(request):

output = _("Welcome to my site.")// output = ugettext("Welcome to my site.")

return HttpResponse(output)

你传递给 _() 或 gettext() 的字符串可以接受占位符,由Python标准命名字符串插入句法指定的

特定语言的译文可以对这段文本进行重新排序,所以无论何时当你有多于一个单一参数时,你应当使用命名字符串插入(例如: %(day)s )来替代位置插入(例如: %s or %d )。如果你使用位置插入的话,翻译动作将不能重新排序占位符文本。

output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}

2.标记字符串为不操作

使用 django.utils.translation.gettext_noop() 函数来标记一个不需要立即翻译的字符串。

3,惰性翻译

使用 django.utils.translation.gettext_lazy() 函数,使得其中的值只有在访问时才会被翻译,而不是在

gettext_lazy() 被调用时翻译

4.复数的处理

使用django.utils.translation.ungettext()来指定以复数形式表示的消息

ngettext 函数包括三个参数:单数形式的翻译字符串,复数形式的翻译字符串,和对象的个数(将以 count 变量传递给需要翻译的语言)。

5.模板代码

为了使得模板访问到标签,需要将{% load i18n %} 放在模板最前面

A.这个{% trans %}模板标记翻译一个常量字符串 (括以单或双引号) 或可变内容

 

B.如果有noop 选项,变量查询还是有效但翻译会跳过。当空缺内容要求将来再翻译时,这很有用

 

C.在一个带 {% trans %} 的字符串中,混进一个模板变量是不可能的。如果你的译文要求字符串带有变量(占位符placeholders),请使用 {% blocktrans %}

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

D.使用模板过滤器来翻译一个模板表达式,需要在翻译的这段文本中将表达式绑定到一个本地变量中:

{% blocktrans with value|filter as myvar %}

This will have {{ myvar }} inside.

{% endblocktrans %}

如果需要在 blocktrans 标签内绑定多个表达式,可以用 and 来分隔

E.为了表示单复数相关的内容,需要在 {% blocktrans %} 和 {% endblocktrans %} 之间使用 {% plural %} 标签来指定单复数形式

{% blocktrans count list|length as counter %}

There is only one {{ name }} object.

{% plural %}

There are {{ counter }} {{ name }} objects.

{% endblocktrans %}

其内在机制是,所有的块和内嵌翻译调用相应

6. 每一个RequestContext可以访问三个指定翻译变量,他们分别是

{{ LANGUAGES }} 是一系列元组组成的列表,每个元组的第一个元素是语言代码,第二个元素是用该语言

表示的语言名称。

作为一二字符串,LANGUAGE_CODE是当前用户的优先语言。例如: en‐us。(请参见下面的Django如何发

现语言偏好)

LANGUAGE_BIDI就是当前地域的说明。如果为真(True),它就是从右向左书写的语言,例如: 希伯来

语,阿拉伯语。 如果为假(False),它就是从左到右书写的语言,如:英语,法语,德语等。

如果不使用requestcontaxt扩展,也可以用下面的方法获取到这几个值

{% get_current_language as LANGUAGE_CODE %}

{% get_available_languages as LANGUAGES %}

{% get_current_language_bidi as LANGUAGE_BIDI %}

7. 与惰性翻译对象一道工作

拼接字符串: string_concat()

标准Python字符串拼接(''.join([...]) ) 将不会工作在包括惰性翻译对象的列表上。 作为替代,你可以使

用django.utils.translation.string_concat(),这个函数创建了一个惰性对象,其连接起它的内容 并且 仅

当结果被包括在一个字符串中时转换它们为字符串



转载地址: http://blog.sina.com.cn/s/blog_6b655f9d0102v93w.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值