13.1 国际化基础配置
Django 6国际化基础配置教程 - 语言、中间件与翻译文件详解
学习Django 6中的国际化基础配置:详细讲解LANGUAGE_CODE和LANGUAGES的语言设置,配置国际化中间件与上下文处理器,以及如何生成、编译和存放翻译文件,适合新手入门。
Django 6国际化基础配置教程
国际化(Internationalization,简称i18n)是让Web应用支持多种语言和区域设置的过程,这对于全球用户访问至关重要。Django内置了强大的国际化支持,使配置变得简单。本教程将详细讲解基础配置,从语言设置到翻译文件管理。
语言配置(LANGUAGE_CODE 和 LANGUAGES)
在Django中,语言配置通过设置文件的参数来控制。首先,打开您的项目设置文件(通常是settings.py)。
设置 LANGUAGE_CODE
LANGUAGE_CODE 定义了项目的默认语言。它应该是一个符合ISO语言代码的字符串。
示例代码:
# 在 settings.py 中
LANGUAGE_CODE = 'zh-hans' # 使用简体中文作为默认语言
'zh-hans'代表简体中文。其他常见代码包括'en'为英语,'es'为西班牙语等。- 这个设置影响翻译文件的默认加载和日期/数字格式化。
定义 LANGUAGES
LANGUAGES 是一个列表,指定项目支持的所有语言。它使用Django的gettext_lazy函数来提供语言名称的可翻译字符串。
示例代码:
# 在 settings.py 中
from django.utils.translation import gettext_lazy as _
LANGUAGES = [
('zh-hans', _('简体中文')), # 代码和显示名称
('en', _('English')),
('es', _('Español')),
]
- 每个元组包含语言代码(如
'zh-hans')和其可翻译的名称(使用_()函数)。 - 这允许在用户界面中动态切换语言。
国际化中间件与上下文处理器配置
为了实现语言切换和模板中的国际化,需要配置中间件和上下文处理器。
配置国际化中间件
中间件处理请求中的语言偏好设置。在settings.py的MIDDLEWARE列表中添加LocaleMiddleware。
示例代码:
# 在 settings.py 中
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # 添加国际化中间件
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LocaleMiddleware应该放在SessionMiddleware之后和CommonMiddleware之前,以便正确处理会话和语言设置。- 它根据请求中的
Accept-Language头部或用户设置来选择语言。
配置上下文处理器
上下文处理器向模板提供额外的上下文变量,用于国际化。在TEMPLATES设置中添加i18n上下文处理器。
示例代码:
# 在 settings.py 中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.i18n', # 添加国际化上下文处理器
],
},
},
]
- 添加
'django.template.context_processors.i18n'后,模板中可以使用LANGUAGES等变量,方便语言切换。
翻译文件生成与存放路径
翻译文件用于存储不同语言的翻译字符串,通过Django的makemessages和compilemessages命令管理。
生成翻译文件
-
运行
makemessages命令:在项目根目录(包含manage.py的目录)运行此命令,为指定语言提取模板和代码中的翻译字符串。示例命令:
# 为简体中文生成翻译文件 python manage.py makemessages -l zh-hans-l zh-hans指定语言代码;您可以替换为en、es等。- 这会在项目中扫描所有包含翻译字符串的文件,并生成
.po文件。
-
编辑翻译文件:生成的
.po文件是文本文件,包含待翻译的字符串。编辑它以添加翻译。示例位置: 文件通常位于
locale/zh-hans/LC_MESSAGES/django.po。使用文本编辑器打开,查找类似msgid "Hello"的行,并在msgstr后添加翻译,如msgstr "你好"。 -
编译翻译文件:翻译完成后,运行
compilemessages命令将.po文件编译为更高效的.mo文件。示例命令:
python manage.py compilemessages- 这会将所有语言的
.po文件编译为.mo文件,Django运行时使用这些文件。
- 这会将所有语言的
存放路径
翻译文件通常存放在项目的 locale 目录中,按语言代码组织。
默认路径结构:
项目根目录/
├── manage.py
├── locale/
│ ├── zh-hans/
│ │ └── LC_MESSAGES/
│ │ ├── django.po # 待编辑的翻译文件
│ │ └── django.mo # 编译后的翻译文件
│ └── en/
│ └── LC_MESSAGES/
│ ├── django.po
│ └── django.mo
locale/目录应该在项目根目录下。- 每个语言子目录(如
zh-hans)包含LC_MESSAGES子目录,其中存放django.po和django.mo文件。
自定义路径: 如果您的 locale 目录不在默认位置,可以在 settings.py 中设置 LOCALE_PATHS 来指定。
示例代码:
# 在 settings.py 中
import os
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'), # 指定 locale 目录路径
]
BASE_DIR是Django项目的基本目录路径,通常从settings.py中定义。- 确保路径存在,Django才能找到翻译文件。
总结
通过本教程,您学会了Django 6国际化的基础配置:设置 LANGUAGE_CODE 和 LANGUAGES 来定义语言;添加 LocaleMiddleware 和 i18n 上下文处理器以支持语言切换;以及使用 makemessages 和 compilemessages 命令生成和编译翻译文件,并存放在 locale 目录中。这些步骤为多语言网站奠定了基础,后续可以进一步探索高级功能如动态语言切换和自定义翻译。开始尝试配置,让您的网站面向全球用户吧!