实现Django多语言教程(i18n)的步骤如下:
- 确认Django安装语言包
首先,我们需要确认Django安装了我们需要使用的语言包。在Django中,i18n语言包是作为django.middleware.locale.LocaleMiddleware中间件的一部分提供的。
查看本机安装了哪些语言包可以通过Django的源代码或者使用下面的命令:
python -c "import django; print(django.conf.locale.LANG_INFO)"
如果需要添加新的语言包,只需在settings.py文件中将其加入LANGUAGES列表中,并且在LOCALE_PATHS列表中添加语言目录。例如:
# settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
# 可选语言列表
LANGUAGES = [
('en', 'English'),
('zh-hans', '简体中文'),
('fr', 'Français'),
]
# 语言文件路径
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
- 创建Django多语言应用程序
默认情况下,Django不会自动创建用于多语言支持的目录和文件,我们需要手动添加它们。最佳做法是将这些文件存储在您的Django应用程序的根目录中。
第一步是在应用程序目录中创建locale目录。从本质上讲,此目录将包含应用程序的所有翻译。在locale目录中,您将创建一个子目录以存放每种语言。
举个例子,假设您希望支持英语和西班牙语。您的目录结构将如下所示:
myapp/
locale/
en/
LC_MESSAGES/
es/
LC_MESSAGES/
...
请注意,Django需要在每个语言目录(即'en/'和'es/')中启用LC_MESSAGES目录(即'en/LC_MESSAGES/'和'es/LC_MESSAGES/')。此目录将存储Messages文件。
- 在Django应用程序中添加文案翻译
为了使应用程序在多种语言中运行,我们需要将所有诸如按钮标签、导航标题、输入占位符等等的英文值进行翻译。在Django中,翻译是通过 gettext 来实现的。
我们在需要翻译的文案前使用 gettext() 函数或 gettext_lazy() 函数来标记这些文案。例如,在模版文件中我们可以这样引用:
{% load i18n %}
<h1>{% trans "Hello World" %}</h1>
在python文件中我们也可以按照如下方式翻译:
from django.utils.translation import gettext as _
...
message = _("Hello World")
我们需要在每个语言目录(即'en/LC_MESSAGES/'和'es/LC_MESSAGES/')中创建一个Messages文件。Messages文件是使用 gettext 工具来创建的,在这里我们不做详细讲解。在简单的例子中,只需要在应用程序的根目录下打开终端或命令提示符窗口,并键入以下命令:
python manage.py makemessages -l en
这将从项目中提取所有gettext引用的短语,并生成一个名为django.po的文件。然后,我们可以在该文件中将每个短语手动翻译成指定语言的值。当我们完成翻译之后,需要使用以下命令来将这些翻译应用到项目:
python manage.py compilemessages
这将把.po文件编译成django.mo文件,并且像之前所述的文件分别放置在每个语言的相关目录下。我们现在实现了一个完全支持多语言的Django应用程序。
- 在Django应用程序中使用中间件启用多语言支持
默认情况下,Web请求处理流程会忽略用户设置的支持的语言。我们需要通过中间件来更新请求过程中返回的context信息。在settings.py中,需要加入以下两个配置:
MIDDLEWARES = [
...
'django.middleware.locale.LocaleMiddleware',
...
]
LANGUAGE_CODE = 'en-us'
# 可选语言列表
LANGUAGES = [
('en', 'English'),
('zh-hans', '简体中文'),
('fr', 'Français'),
]
# 语言文件路径
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
在该配置的MIDDLEWARES列表中插入django.middleware.locale.LocaleMiddleware中间件,以便Django会自动指定诊断的语言。然后,将该文件末尾的‘ALLOWED_HOSTS’配置替换为‘LANGUAGE_CODE’、‘LANGUAGES’和‘LOCALE_PATHS’。
- 示例一:在 Django 模板文件中使用多语言支持
在定制现有网站或编写新网站时,通常需要使用模板文件(例如,一个HTML文件或者一个Email模板)。下面的示例说明如何通过模板文件来使用多语言支持:
{% load i18n %}
<h1>{% trans "Hello World" %}</h1>
这里我们使用{% trans %}标签将要翻译的文案进行标记,并在标记中传入默认的翻译值。在模版中使用trans标签以便Django在渲染过程中搜索Messages文件。
- 示例二:在 Python 代码中使用多语言支持
下面的示例说明如何在Python中提供一个多语言值。
from django.utils.translation import gettext as _
msg = _("This is a message")
在Python代码中,我们使用gettex()函数标记文本,在标记中传入默认的翻译值,即为翻译文本提供一个多语言翻译。
以上就是Django多语言教程(i18n)的完整攻略,包含了实现步骤以及两个实例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 多语言教程的实现(i18n) - Python技术站