Django 6中文教程

13.1 国际化基础配置

Django 6国际化基础配置教程 - 语言、中间件与翻译文件详解

Django 6中文教程

学习Django 6中的国际化基础配置:详细讲解LANGUAGE_CODE和LANGUAGES的语言设置,配置国际化中间件与上下文处理器,以及如何生成、编译和存放翻译文件,适合新手入门。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

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.pyMIDDLEWARE列表中添加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的makemessagescompilemessages命令管理。

生成翻译文件

  1. 运行 makemessages 命令:在项目根目录(包含manage.py的目录)运行此命令,为指定语言提取模板和代码中的翻译字符串。

    示例命令:

    # 为简体中文生成翻译文件
    python manage.py makemessages -l zh-hans
    
    • -l zh-hans 指定语言代码;您可以替换为 enes 等。
    • 这会在项目中扫描所有包含翻译字符串的文件,并生成 .po 文件。
  2. 编辑翻译文件:生成的 .po 文件是文本文件,包含待翻译的字符串。编辑它以添加翻译。

    示例位置: 文件通常位于 locale/zh-hans/LC_MESSAGES/django.po。使用文本编辑器打开,查找类似 msgid "Hello" 的行,并在 msgstr 后添加翻译,如 msgstr "你好"

  3. 编译翻译文件:翻译完成后,运行 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.podjango.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_CODELANGUAGES 来定义语言;添加 LocaleMiddlewarei18n 上下文处理器以支持语言切换;以及使用 makemessagescompilemessages 命令生成和编译翻译文件,并存放在 locale 目录中。这些步骤为多语言网站奠定了基础,后续可以进一步探索高级功能如动态语言切换和自定义翻译。开始尝试配置,让您的网站面向全球用户吧!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包