分类: Python/Ruby
2015-07-10 16:22:15
Django 国际化使用的翻译模块是使用 Python 自带的 gettext 标准模块。通过一个到 GNU gettext 消息目录库的接口,这个模块为 Python 程序提供了国际化 (I18N) 和本地化 (L10N)。
3 个步骤完成国际化:
第一步:在 Python 代码和模板中嵌入待翻译的字符串,
第二步:把那些字符串翻译成需要支持的语言,并进行相应的编译
第三步:在 Django settings 文件中激活本地中间件,
对 Django 中 Python 代码进行国际化主要用到 ugettext(),gettext_noop(),gettext_lazy() 和 ungettext() 等函数。
指定待翻译的字符串
针对 Python 代码的国际化和本地化
首先,代码中,使用函数 ugettext() 指定一个待翻译的字符串。另外,为了节约输入时间,代码中使用“from django.utils.translation import ugettext as _”即用短别名 _ 来引入这个函数。代码清单:
from django.utils.translation import ugettext as _
SUCCESS = _('success')
FAIL = _('failed')
针对 template 代码的国际化
模版文件代码清单:
{% load i18n %}
<li class="dropdown sign-in">
<a class=" btn btn-primary " href="{% url 'portal:index'%}">
{% trans "console" %}
</a>
</li>
在代码中已经加入了国际化模版相关代码,下面几点需要注意:
1 . {% load i18n %}
使模版能够访问到访问到标签。
2 . {% trans str %}
标记翻译一个常量字符串或 可变内容
创建语言文件
接下来,先在 test1 App 目录下创建 locale 目录,并运行“django-admin.py makemessages -l zh_CN”产生 locale/zh_CN/LC_MESSAGES/django.po 文件 ,
[root@localhost test1]# mkdir locale
[root@localhost test1]# python /usr/local/lib/python2.7/dist-packages/django/bin/django-admin.py makemessages -l zh_CN
如果没有安装gettext 就在线安装下:apt-get install gettext
打开 locale/zh_CN/LC_MESSAGES/django.po 文件
#: education_portal/views.py:31
msgid "success"
msgstr "成功"
#: education_portal/views.py:32
msgid "failed"
msgstr "失败"
这个文件是一个纯文本文件,包含用于翻译的原始字符串和目标语言字符串。
# 为前缀的行起注释作用。msgid 是在源文件中出现的翻译字符串。msgstr 是相应语言的翻译结果。注意语句前后都有引号。 刚创建时 msgstr 是空字符串,需要翻译人员翻译。这个文件,用户可以手动按格式添加一些内容。
编译信息文件
创建信息文件之后,每次对其做了修改,都需要用 django-admin.py compilemessages 编译成“.mo”文件供 gettext 使用,
[root@localhost test1]# python /usr/local/lib/python2.7/dist-packages/django/bin/django-admin.py compilemessages
在openstack中需要修改的话,先在openstack_dashboars的locale目录中修改zh_CN目录下的.po文件。。可参考原有的内容修改。
随后通过find / -name django-admin.py找到这个文件夹的目录,并在openstack_dashboards中运行
上述语句