Django的国际化

来源:互联网 发布:微博怎么设置个性域名 编辑:程序博客网 时间:2024/05/19 02:18

如果对国际化概念不清楚的话,先看这篇 python的国际化gettext模块。

下面直接演示在Django中是怎么个国际化流程。

views.py相关代码

from django.http import HttpResponsefrom django.utils.translation import gettextdef index(request):    return HttpResponse(gettext("hello world"))  # 标记待翻译字符串

settings.py相关设置

LANGUAGE_CODE = 'zh-hans'USE_I18N = TrueLOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]# 并把中间件'django.middleware.locale.LocaleMiddleware'加进去,有先后顺序,要在SessionMiddleware后面,CommonMiddleware前面。

从源码中抽取待翻译字符串生成po文件

python3 manage.py  makemessages -l zh_hans  # 注意这里是zh_hans,而不是zh-hans# 会在项目根目录下自动创建目录和文件locale/zh_hans/LC_MESSAGES/django.po。

编辑po文件, 在msgstr输入对应的中文

msgid "hello world"msgstr "你好世界"

编译成mo文件
python3 manage.py compilemessages

运行server,并浏览器访问这个接口,会看到
你好世界

至此,整个流程就通了。

还可以由客户端自己指定语言,设置http头的Accept-Language就行了,会优先读这个,没有的话才读的settings.py里面全局的LANGUAGE_CODE. 优先读取哪个语言的逻辑在LocaleMiddleware里面。
如果是浏览器的话,一般浏览器设置什么语言,发请求的时候,Accept-Language会自动设置成什么语言。所以如果看到settings.py设置LANGUAGE_CODE=’en-us’,而浏览器访问的时候却显示中文,不要惊讶,是因为Accept-Language优先级高。

下面用Paw演示一下。
这里写图片描述

这里写图片描述

更多细节请看文档

原创粉丝点击