MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # LocaleMiddleware 中间件需要放在 sessions 中间件之后和 common 中间件之前
'django.middleware.common.CommonMiddleware',
]
TEMPLATES = [
{
# BACKEND 要使用的模板后端。还有一个 'django.template.backends.jinja2.Jinja2'
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# DIRS 包含搜索顺序的序列,搜索引擎会按照这个顺序查找 template 资源文件
'DIRS': [
os.path.join(BASE_DIR, 'templates').replace('\\', '/'), # 设置项目根目录模板路径
]
,
'APP_DIRS': True, # Templates 引擎是否应该在已安装的 app 中查找 Template 源文件
'OPTIONS': {
'context_processors': [
"django.template.context_processors.i18n", # 模板国际化
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.media',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# UTC 世界统一时间
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True # 启用国际化
USE_L10N = True
# 国际化语言种类
from django.utils.translation import gettext_lazy as _
LANGUAGES = [
('en', _('English')),
('zh-Hans', _('中文简体')),
]
# 国际化翻译文件目录
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'), # 翻译文件所在目录,请手动创建目录
]
Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext, 所以要想在 Django 中使用 I18N 还需要先安装配置 gettext。
windows gettext 下载地址:
exe 包安装时会默认加入到环境变量(提醒:已打开的 cmd 或 控制台,后加入的环境变量不会生效,需要重启咯),如图:
Mac 安装 gettext 使用 brew 安装:(CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 意思是提示需要安装 gettext)
brew install gettext
brew link gettext --force
python manage.py makemessages -l zh_Hans
(joyoo) E:\yinzhuoqun\djangos\joyoo>python manage.py makemessages -l zh_Hans
processing locale zh_Hans
运行成功后会生成一个 django.po 文件( LOCALE_PATHS 对应语言目录下 - 具体看下图,这个里面就是我们手动写翻译的地方)
django.po 文件:
如果执行命令:python manage.py makemessages -l zh_Hans(第二个 H 大写)
提示:CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
那么可能是:gettext 版本不对 或者 安装后没有加入到环境变量
找到 settings 里面配置的 LOCALE_PATHS 下的 django.po 文件,开始你的编辑之路。
msgid: 需要翻译的文案
msgstr: 翻译后的文案
在代码中看到:_("这种就是国际化的标志,我们只需要翻译下就 OK")
例子:
编译成功后会在 django.po 的对应目录生成 django.mo 文件
python manage.py compilemessages
(joyoo) E:\yinzhuoqun\djangos\joyoo>python manage.py compilemessages
processing file django.po in E:\yinzhuoqun\djangos\joyoo\locale\zh_Hans\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\bg\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\ru\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\zh_CN\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\es\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\sv\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\it\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\de\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\uk\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\ja\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\en\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\pt_BR\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\cs\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\nl\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\fr\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\zh_Hans\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\pl\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\tr\LC_MESSAGES
processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\sk\LC_MESSAGES