一、开启多语言支持
1. 配置中间件
在我使用的 Django 1.11.6 中,默认没有加入 i18n 中间件,所以需要我们手动加入相关中间件。
你需要将 django.middleware.locale.LocaleMiddleware 加入 MIDDLEWARE_CLASSES 中。由于 locale 依赖 session,应将它放在 SessionMiddleware 之后;同时,CommonMiddleware 需要在语言激活后处理对应的 URL,因此 LocaleMiddleware 应放在 CommonMiddleware 之前。
LocaleMiddleware 会根据请求中的语言信息激活当前语言。它必须放在
SessionMiddleware 之后、CommonMiddleware 之前:前者用于读取会话中的语言偏好,
后者需要在语言已经激活后处理国际化 URL。
| |
2. 确认 I18N 相关配置为 True
在 settings.py 的底部,你可以看到下面这些配置,请确保相关开关的值为 True。
其中,USE_I18N 开启 Django 的翻译机制,USE_L10N 开启本地化格式,
USE_TZ 启用时区支持。LANGUAGE_CODE 和 TIME_ZONE 是默认语言与默认时区,
可以根据项目实际部署地区进行调整。
| |
3. 设置 locale 路径
在 settings.py 中加入如下代码:
| |
这表示翻译文件统一放在项目或应用的 locale 目录中。目录不存在时可以手动创建,
后续执行 makemessages 会在其中生成对应语言的 LC_MESSAGES 文件。
二、在 views 中引入 ugettext
在 views.py 中加入如下代码
| |
将所有需要翻译的文字传入 _() 函数。
例如:
| |
带变量的文字也可以使用命名占位符进行处理。
例如:
| |
三、在模板中引入 i18n
如果希望在模板中使用多语言,可以按如下方式操作。
首先,在需要启用多语言的模板顶部加入:
然后在对应位置使用 trans 标签获取翻译文本,例如:
| |
四、生成多语言模板文件
在命令行中进入应用目录,执行如下命令:
| |
执行命令后,Django 会扫描 Python、模板等文件中的待翻译字符串,
并在 locale/zh-CN/LC_MESSAGES/ 下生成 django.po。.po 是可读的翻译源文件,
其中的 msgid 是原文,msgstr 用于填写译文。
打开 django.po,即可看到需要翻译的内容。
中文(简体)的 language code 为 zh-hans。
五、使用 Poedit 编辑多语言文件
也可以使用 Poedit 打开 .po 文件进行编辑。
点击要翻译的条目,在下方的编辑框中进行输入。 在编辑框的右侧,还有机器翻译的内容,可以供我们参考。
Poedit 保存完成后通常会自动生成 .mo 编译文件;如果没有生成,可以在命令行中执行:
| |
这样即可生成对应的编译文件。