Django的国际化

Django国际化流程

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

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

views.py相关代码

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

settings.py相关设置

LANGUAGE_CODE = 'zh-hans'
USE_I18N = True
LOCALE_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演示一下。
这里写图片描述

这里写图片描述

更多细节请看文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值