Django--i18n国际化

i18n的工作分为两部分。

第一部分,是针对django的模板中的字符串。这部分的官方文档是比较细致的。基本的步骤如下:

1、在模板的前面加上{%load i18n%},然后在模板中给需要翻译的字符串套上标签{%trans 'xxxx' %}

2、创建翻译文件。命令是python django-admin.py makemessages ‐l [locale name]。命令执行后会在locale文件夹下生成对应locale的django.po文件。

这里有一个坑,就是locale name和language code的区别。在这个命令里需要的是locale name,而在下文提到的settings.py的配置里,则需要使用language code。对于很多语言,这个区别是不存在的,比如德语的locale name和language code都是de。但是根据官方文档,这是两个不同的概念,比如说简体中文在django中的locale name是zh_Hans,language code是zh-hans。命令

3、在生成的.po文件中加入对应locale的翻译字符串。

4、编译翻译文件。命令是python django-admin.py compilemessages。如果成功的话会生成对应的. mo文件

5、在settings.py文件中对本地化进行配置:

1.在MIDDLEWARE_CLASSES部分中加入中间件django.middleware.locale.LocaleMiddleware
2.在TEMPLATE的processor部分加入django.template.context_processors.i18n
3.在语言部分加入,如(注意!这里用到的是language code,是有短横的纯小写字符串)
LANGUAGES = (
      ('zh-hans', _('Simplified Chinese')),
      ('en', _('English')),
    )

6、重启uwsgi和web server。发送accept-language为指定语言的GET请求,查看设置是否成功。

第二部分,是对JavaScript中的字符串的翻译。基本的步骤如下:

1、在JavaScript脚本中给需要翻译的字符串套上函数gettext('xxxx')。gettext函数为稍后会配置的django内建的JavaScript Catalog定义的全局函数。

2、创建翻译文件。命令是django-admin makemessages -d djangojs ‐l [locale name]。命令执行后会在locale文件夹下生成对应locale的djangojs.po文件。(在执行命令视需要执行build的脚本,比如本项目中在此处需要先运行webpack)

3、在生成的.po文件中加入对应locale的翻译字符串。

4、编译翻译文件。命令同上。

5、在模块的urls.py文件中加入

from django.views.i18n import JavaScriptCatalog

urlpatterns += [
    url(r'^jsi18n/$', JavaScriptCatalog.as_view(packages=['app']), name='javascript-catalog'),
]

其中的app是settings.py中定义的INSTALLED_APP里当前web应用的名称

6、在模板中加入脚本tag:<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>

7、重启uwsgi和web server,测试。

posted @ 2020-04-06 17:52  深蓝i  阅读(622)  评论(0编辑  收藏  举报