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 | <title>{% trans "This is the title." %}</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 |
当你编辑完语言文件后,要使用这条命令,让语言文件生效