跳转至主要内容
Django i18n

Django i18n:Python Web 应用的内置翻译功能

Django 内置了一套基于 GNU gettext 的完整国际化框架。使用 gettext 函数和模板标签在视图、模型和模板中标记待翻译字符串。Django 将 .po 文件编译为 .mo 二进制文件以实现快速查找,其中间件会根据 URL 前缀、Cookie 或浏览器请求头自动激活正确的语言环境。

Django 国际化功能

GNU gettext 与 _() 和 gettext_lazy() 翻译函数的集成
使用 makemessages 和 compilemessages 命令处理 .po/.mo 文件的工作流程
用于模板内翻译的模板标签 {% trans %} 和 {% blocktrans %}
使用 ngettext 和 {% blocktrans count %} 实现复数形式支持
使用 gettext_lazy() 对模型字段和表单标签进行延迟翻译
用于根据 URL、Cookie 和请求头自动检测语言的 LocaleMiddleware
用于带语言前缀的 URL 路由的 i18n_patterns(例如:/en/about、/fr/about)
日期、数字和货币的表单及字段本地化
通过 USE_TZ 和 pytz 集成实现支持时区的日期时间处理

Django 国际化实践

在 Views 中使用 gettext 函数,并使用 ngettext 处理复数形式,然后在 settings.py 中配置 LANGUAGES 来定义支持的语言环境。

# views.py
from django.utils.translation import gettext as _
from django.utils.translation import ngettext

def welcome(request):
    output = _("Welcome to our site")
    count = 5
    output += ngettext(
        "%(count)d item",
        "%(count)d items",
        count
    ) % {"count": count}
    return HttpResponse(output)

# settings.py
LANGUAGE_CODE = 'en'
USE_I18N = True
LANGUAGES = [
    ('en', 'English'),
    ('fr', 'French'),
    ('de', 'German'),
]

立即开始 Django 本地化

借助人工智能驱动的工作流、命令行同步以及低于 50 毫秒的 CDN 交付,管理您的 Django .po 文件翻译。