django的国际化

    xiaoxiao2021-03-26  41

    

    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

    转载请注明原文地址: https://ju.6miu.com/read-662940.html

    最新回复(0)