django 国际化
参考文档:
- https://docs.djangoproject.com/zh-hans/2.2/topics/i18n/translation/
- https://blog.csdn.net/qq_36963372/article/details/88788463
- https://www.jianshu.com/p/b7fd0658989d
配置 settings
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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' ), # 翻译文件所在目录,请手动创建目录 ] |
安装 gettext
Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext, 所以要想在 Django 中使用 I18N 还需要先安装配置 gettext。
windows gettext 下载地址:
https://mlocati.github.io/articles/gettext-iconv-windows.html
exe 包安装时会默认加入到环境变量(提醒:已打开的 cmd 或 控制台,后加入的环境变量不会生效,需要重启咯),如图:
Mac 安装 gettext 使用 brew 安装:(CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 意思是提示需要安装 gettext)(注:Mac 解决 Homebrew 一直卡在 update)
1 2 3 | brew install gettext brew link gettext --force |
生成需要翻译的文件
1 | python manage.py makemessages -l zh_Hans |
1 2 3 | 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 大写)
msgid: 需要翻译的文案
msgstr: 翻译后的文案
在代码中看到:_("这种就是国际化的标志,我们只需要翻译下就 OK")
最后一步就是 编译
编译成功后会在 django.po 的对应目录生成 django.mo 文件
1 | python manage.py compilemessages |
实践效果图
其他用途
- 把三方库某些显示的文案翻译成本地语言,而不用修改源代码。
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了