1.下载GNUGettext,gettext 0.21 and iconv 1.16 - Binaries for Windows | mlocati - Michele Locati
2.解压,根据文件路径设置环境变量E:\gettext0.21-iconv1.16-static-64\bin
3.在项目目录中设置urls.py,导入i18n_patterns,并设置urlpatterns 中使用函数i18n_patterns。
#MyDjango的urls.py
from django.urls import path,include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns(
path('',include(('index.urls','index'),namespace='index'),
)
#app的urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('',index,name='index'),
]
4.设置app中的views.py,导入gettext
# app的views.py
from django.shortcuts import render,redirect
from django.utils.translation import gettext
def index(request):
if request.LANGUAGE_CODE == 'zh':
language = gettext('Chinese')
else:
language = gettext('English')
return render(request,'index.html',locals())
5.设置templates的index.html,导入i18n,内置标签的使用方法如下:
- 使用内置标签trans(不可以字符串和上下文组合使用)或者blocktrans(可以字符串和上下文组合使用)使标签内的字符串或上下文可支持语言转换。
- get_available_languages:获取LANGUAGE的值。
- language:在模板中生成语言选择的功能。
<!DOCTYPE html>
<html>
<head>
{% load i18n %}
<meta charset="UTF-8">
<title>{% trans "Choice language" %}</title>
</head>
<body>
<div>
{% get_available_languages as languages %}
{% trans "Choice language" %}
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<a href="{% url 'index:index' %}">
{{ lang_name }}
</a>
{% endlanguage %}
{% endfor %}
</div>
<div>
{% blocktrans %}
The language is {{ language }}
{% endblocktrans %}
</div>
</body>
</html>
6.设置本地化,以管理员的身份打开cmd,cd 项目目录,进入项目使用的虚拟环境,执行命令:
python manage.py makemessages -l zh
生成文件夹language以及文件django.po,该文件为urls,views,templates,models,form的国际化设置提供翻译内容。打开文件django.po,在msgstr""中设置翻译内容。
#: .\index\views.py:28
msgid "Chinese"
msgstr "简体中文"
#: .\index\views.py:30
msgid "English"
msgstr "English"
7.最后以管理员的身份打开cmd,cd 项目目录,进入项目使用的虚拟环境,执行命令:
python manage.py compilemessages