跳到主要内容

Django 本地化

Django 本地化(Localization)是指将应用程序的内容翻译成多种语言,并根据用户的语言偏好动态显示相应的内容。通过本地化,您可以让您的应用程序支持多语言,从而为全球用户提供更好的体验。Django 提供了强大的本地化工具,使得实现多语言支持变得非常简单。

什么是本地化?

本地化不仅仅是翻译文本,还包括日期、时间、数字和货币格式的调整,以适应不同地区的习惯。Django 的本地化功能可以帮助您轻松实现这些需求。

启用本地化

要启用 Django 的本地化功能,首先需要在 settings.py 文件中进行配置:

python
# settings.py

# 启用国际化
USE_I18N = True

# 启用本地化
USE_L10N = True

# 设置支持的语言
LANGUAGES = [
('en', 'English'),
('zh-hans', 'Simplified Chinese'),
('es', 'Spanish'),
]

中间件配置

Django 使用中间件来根据用户的语言偏好自动选择语言。确保 LocaleMiddleware 已经添加到 MIDDLEWARE 中:

python
# settings.py

MIDDLEWARE = [
...
'django.middleware.locale.LocaleMiddleware',
...
]

翻译文本

Django 使用 gettext 工具来管理翻译文本。您可以在代码中使用 gettext_ 快捷方式来标记需要翻译的字符串。

示例:翻译视图中的文本

python
from django.shortcuts import render
from django.utils.translation import gettext as _

def home(request):
message = _("Welcome to our website!")
return render(request, 'home.html', {'message': message})

提取翻译字符串

使用 Django 提供的 makemessages 命令提取所有需要翻译的字符串:

bash
django-admin makemessages -l zh_Hans

这将在 locale/zh_Hans/LC_MESSAGES/ 目录下生成一个 .po 文件,您可以在其中添加翻译。

编译翻译文件

完成翻译后,使用 compilemessages 命令编译 .po 文件为 .mo 文件:

bash
django-admin compilemessages

模板中的本地化

在 Django 模板中,您可以使用 {% trans %} 标签来翻译静态文本:

html
{% load i18n %}

<h1>{% trans "Welcome to our website!" %}</h1>

翻译动态内容

对于动态内容,您可以使用 blocktrans 标签:

html
{% blocktrans with username=user.username %}
Hello, {{ username }}!
{% endblocktrans %}

本地化日期和时间

Django 提供了 datetime 过滤器,可以根据用户的语言偏好格式化日期和时间:

html
{{ value|date:"SHORT_DATE_FORMAT" }}
{{ value|time:"TIME_FORMAT" }}

实际案例

假设您正在开发一个多语言的电子商务网站。您希望根据用户的语言偏好显示产品名称、描述和价格。通过使用 Django 的本地化功能,您可以轻松实现这一需求。

示例:多语言产品页面

python
# views.py

from django.shortcuts import render
from django.utils.translation import gettext as _

def product_detail(request, product_id):
product = get_object_or_404(Product, id=product_id)
context = {
'name': _(product.name),
'description': _(product.description),
'price': product.price,
}
return render(request, 'product_detail.html', context)

在模板中:

html
{% load i18n %}

<h1>{{ name }}</h1>
<p>{{ description }}</p>
<p>{% trans "Price" %}: {{ price }}</p>

总结

Django 的本地化功能使得为应用程序添加多语言支持变得非常简单。通过使用 gettexttrans 标签和 LocaleMiddleware,您可以轻松地翻译文本、格式化日期和时间,并根据用户的语言偏好动态显示内容。

附加资源

练习

  1. 在您的 Django 项目中启用本地化,并添加至少两种语言支持。
  2. 使用 makemessagescompilemessages 命令提取并编译翻译文件。
  3. 在模板中使用 transblocktrans 标签翻译静态和动态文本。