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'),
]