django的国际化
来源:互联网 发布:淘宝搜什么晒图有福利 编辑:程序博客网 时间:2024/05/24 00:10
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
- django的国际化
- Django国际化的实现
- Django的国际化
- Django的国际化
- django js的国际化步骤
- 7-24 django的国际化
- Django国际化
- 【Django】 国际化
- Django国际化
- Django国际化
- django 国际化
- 实践 Django 的 i18n(国际化)
- Django 1.5 + Python 2.7.3 关于Django的国际化(i18n)
- django国际化环境配置
- Django实现国际化
- Django配合Javascript国际化
- Django 国际化简明手册。
- Django i18n国际化
- kernel初识
- Dll入门VS环境配置的一点小问题
- 柳木枝的2017
- 一种正确调用自定义控件的方法
- MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); 是什么意思
- django的国际化
- sqlserver2005导入mdf,ldf文件
- iOS开发 Xcode8不支持iOS10.2系统设备的解决方案
- Android API Guide for Media Apps(五)——构建媒体浏览客户端(Building a Media Browser Client)
- C++11 override and final
- QT QXmlStreamReader流处理解析XML
- DOCTYPE声明作用及用法详解
- Android scroll应用--仿高铁管家订单下拉与上拉
- 【Java每日一题】20170206