Django2.1多语言i18n国际化与本地化支持
概述
- 百度百科对i18n的解释
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。 在全球化的时代,国际化尤为重要,因为产品的潜在用户可能来自世界的各个角落。通常与i18n相关的还有L10n(“本地化”的简称)。 - Django怎么使用i18n
Django框架是内置有i18n国际化支持模块的,只需要我们根据官方文档的要求使用就行。
启用Django i18n功能
- 为了使用Django内置的i18n,需要在settings中完成一系列的配置。
打开i18n
USE_I18N = True
添加locale中间件
按照官方文档的说法,需要先注册LocaleMiddleware中间件,而且这个中间件的位置是有要求的。
LocaleMiddleware中间件需要放在sessions中间件之后和common中间件之前。
因为LocaleMiddleware需要使用session的数据,而common需要有一个激活的语言来解析URL。
- 按官方文档提示,添加好中间件。
添加i18n上下文处理器
- 依然是按照官方教程,添加上下文处理器,官方文档说的很明白,接下来我们要添加LANGUAGES
添加LANGUAGES
按照官方文档的教程,接下来我们需要设置支持的语言类型。
官方解释了LocaleMiddleware需要设置语言首选项作为我们的显示语言。
- 官方给出了标准的示例
- 这是我的示例
# 支持的语言类型
from django.utils.translation import gettext_lazy as _
LANGUAGES = (
('zh-hans', _('中文简体')),
('en-us', _('English')),
)
- 接下来需要设置本地翻译文件的保存路径
设置本地翻译文件路径
# 本地翻译文件路径
LOCALE_PATHS=(
os.path.join(BASE_DIR, 'locale'),
)
- 重要:接下来需要在项目根目录下新建locale文件夹
安装gettext
sudo apt-get install gettext
- 至此 i18n的环境已经搭建完成
使用i18n
使用方法在官方文档上也有详细的教程。
在模板标签添加标签
- 单句翻译
- 整块翻译
统计翻译字符
python manage.py makemessages -l zh_Hans
注意:这里的 zh_Hans, H需要大写,这是个坑
- 接下来你会在locale文件夹中看到统计文件,点击打开,添加翻译字符串即可。
编译
翻译完成后需要编译才能使用
python manage.py compilemessages
展示
- 首先需要在settings中更改系统语言
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
切换两种语言就能够看到翻译的效果了。