django国际化处理
django的国际化是个比较大的坑,百度出来的好多都是形式正确,而实际并不work![我使用的是django2.2LTS版本]
设置文件 settings.py 配置
setting.py有3个注意点
- MIDDLEWARE
- TEMPLATES
- 其他(主要是LANGUAGE 和 i18N,L10N)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32IDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.i18n',
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
LANGUAGE_CODE = 'zh-hans'
USE_I18N = True
USE_L10N = True需要多语言对应的文件,一般为model和view
需要引入相关的包,本人在Bodhi上不需要安装gettext,据说在windows下面需要自己安装1
2
3
4
5from django.shortcuts import render
from django.utils.translation import gettext_lazy as _
def index(request):
context = {'display_welcome': _("Welcome!")}
return render(request, 'index.html', context)命令行操作及翻译
坑就在这里了,必须是zh_Hans(H必须为大写)
1
django-admin makemessages -l zh_Hans
到对应的目录下面去寻找django.po文件,应该为/locale/zh_Hans/LC_MESSAGES
把文件里msgid对应的msgstr翻译好。再执行编译命令
1
django-admin compilemessages