Django 多语言支持配置与实现
基础设置配置
在 Django 项目中启用多语言功能,需对 settings 配置进行如下调整:
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # 必须置于 Session 中间件之后、通用中间件之前
'django.middleware.common.CommonMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates').replace('\\', '/'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.i18n', # 启用模板层国际化
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.media',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
LANGUAGE_CODE = 'zh-hans' # 默认语言设为简体中文
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True # 开启国际化支持
USE_L10N = True
# 可用语言列表
from django.utils.translation import gettext_lazy as _
LANGUAGES = [
('en', _('English')),
('zh-Hans', _('中文简体')),
]
# 翻译文件根目录
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
环境依赖:安装 gettext 工具
Django 的国际化基于 GNU gettext 引擎,因此需要确保系统已安装对应工具。
- Windows 用户:前往 https://mlocati.github.io/articles/gettext-iconv-windows.html 下载并安装 exe 包。安装后需重启终端使环境变量生效。
- Mac 用户:使用 Homebrew 安装:
brew install gettext
brew link gettext --force
提取待翻译内容
通过命令行生成用于翻译的 .po 文件:
python manage.py makemessages -l zh_Hans
执行成功后,在 `locale/zh_Hans/LC_MESSAGES/` 目录下生成 `django.po` 文件。该文件包含所有标记为可翻译的字符串(如使用 `_()` 包裹的内容)。
编辑翻译内容
打开 `django.po` 文件,修改 `msgstr` 字段以提供目标语言的翻译:
msgid "Welcome to our site"
msgstr "欢迎访问我们的网站"
注意:代码中凡是以 _() 包裹的字符串都会被识别为待翻译项。
编译翻译文件
将 .po 文件编译为二进制格式 .mo,提升运行效率:
python manage.py compilemessages
执行后会在相应语言目录下生成 `django.mo` 文件,Django 运行时会优先加载此文件。
运行效果展示
当用户请求切换至不同语言时,页面内容自动更新为对应语言版本,无需修改代码。
扩展应用
可用于第三方库中的提示文本本地化,避免直接修改源码即可实现自定义翻译。