Django-Django 国际化
开发人员和翻译人员需要完成一下 3 个步骤:
- 第一步:在 Python 代码和模板中嵌入待翻译的字符串,
- 第二步:把那些字符串翻译成需要支持的语言,并进行相应的编译
- 第三步:在 Django settings 文件中激活本地中间件
安装配置gettext
Django框架具有很好的I18N和L10N的支持,其实现是基于GNU的gettext,所以要想在Django中使用I18N还需要先安装配置gettext。
Windows下的gettext
从http://sourceforge.net/projects/gettext
下载以下zip文件 下载完之后直接点击运行就好
gettext-runtime-0.17.zip: http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17.zip
gettext-tools-0.17.zip: http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-tools-0.17.zip
上边两个连接不可用的话 可以用以下下载
https://www.gnu.org/software/gettext/gettext.html
解压文件
- 在同一文件夹下(如: C:\Downloads\gettext)展开这2个压缩文件中的bin\。(注意目录合并了)
- 更新系统路径:控制面板>系统>高级>环境变量,在系统变量列表中,把;D:\Downloads\Programming\gettext\bin加到变量值字段的末尾。
- 在CMD中验证下我们的配置是否正确xgettext --version或者gettext --version。
![](https://img2020.cnblogs.com/blog/2119640/202009/2119640-20200903170011634-1888964901.png)
修改settings.py配置
settings.py
MIDDLEWARE_CLASSES = ( ... 'django.middleware.locale.LocaleMiddleware', ) LANGUAGE_CODE = 'en' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True LANGUAGES = ( ('en', ('English')), ('zh-Hans', ('中文简体')), ('zh-Hant', ('中文繁體')), ) LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), #翻译文件所在目录,请自行创建 ) TEMPLATE_CONTEXT_PROCESSORS = ( ... "django.core.context_processors.i18n", )
示例模板:
在模板中使用, 需要先{% load i18n %}
, 然后你可使用:trans和blocktrans模板标记。
更多的使用方法可以参考: http://python.usyiyi.cn/documents/django_182/topics/i18n/translation.html#std:templatetag-blocktrans
示例模板文件base.html
{% load i18n %} <!DOCTYPE html> <html lang="en"> <head> <title>{% trans "Home" %}</title> </head> <body> </body> </html>
在Django中如何使用?
from django.utils.translation import gettext as trans color_name_list = [trans('Emerald'), trans('Dark Blue'), trans('Deep Purple'), trans('Classic Black'), trans('Turquoise'), trans('Canary'), trans('Rose Clouds'), trans('Sunrise')] return JsonResponse(data=color_name_list )
生成需要翻译的文件
manage.py makemessages -l zh_Hans
manage.py makemessages -l zh_Hant
此时, 将会在项目根目录下生成两个文件夹, 如zh_hans(简体汉字):
![](https://img2020.cnblogs.com/blog/2119640/202009/2119640-20200903170414823-1361139503.png)
手工翻译locale中的对应语言的django.po文件.
![](https://img2020.cnblogs.com/blog/2119640/202009/2119640-20200903170553666-1895296160.png)
编译一下,这样翻译才会生效
python manage.py compilemessages
注意:
如果翻译不生效,请检查你的语言包的文件夹是不是有 中划线,请用下划线代替它。
比如 zh-hans 改成 zh_hans (但是要注意 setttings.py 中要用 中划线,不要也改了)