django 本地化

简介

简单的说,就是三步走。
1.在 Python 代码和模板中插入待翻译的字符串。
2.建立并修改语言文件
3.激活

在这里,使用 autocomplete_light 来进行案例讲解,拿我们上次遇见的问题来讲解。

如何指定待翻译字符串

在 Python 代码中:

代码详见 autocomplete_light/autocomplete/base.py 107行

1
html = self.empty_html_format % _('no matches found').capitalize()

在这里的 _ 就表示这国际化的意思
见 该文件第3行

1
from django.utils.translation import ugettext_lazy as _)

使用函数 ugettext() 来指定一个翻译字符串。
作为惯例,使用短别名 _ 来引入这个函数以节省键入时间.
使用 django.utils.translation.gettext_lazy() 函数,
使得其中的值只有在访问时才会被翻译,而不是在 gettext_lazy() 被调用时翻译。

在模板中:

Django 模板使用两种模板标签,且语法格式与 Python 代码有些许不同。
为了使得模板访问到标签,需要将下列代码放在模板最前面。

1
{% load i18n %}

然后使用下列代码

1
2
<title>{% trans "This is the title." %}</title>
<title>{% trans myvar %}</title>

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

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

如何创建语言文件

你需要建立一个 locale 文件夹来放置语言文件.
如果没有这个文件夹,使用创建命令就会报错
locale 可以放在子 app 的文件里(如 autocomplete), 也可以放在总的文件夹(project)下面,
两者有着不同意义,就是查询的先后顺序,优先查询 app 里的 locale 文件夹

1
django-admin.py makemessages -l zh\_CN

这个命令就是建立语言文件,有一个条件,就是当前目录有 locale 文件夹

在这里看下这个文件 autocomplete_light/locale/zh_CN/LC_MESSAGES/django.po

激活

1
django-admin.py compilemessages

当你编辑完语言文件后,要使用这条命令,让语言文件生效