【Django | 开发】 (国际化项目 & 支持多语言)
🤵♂️ 个人主页: @计算机魔术师👨💻 作者简介:CSDN 内容合伙人,全栈领域优质创作者。
🌐 推荐一款找工作神器网站: 牛客网🎉🎉|笔试题库|面试经验|实习招聘内推 还没账户的小伙伴 速速点击链接跳转牛客网登录注册 开始刷爆题库,速速通关面试吧🙋♂️
该文章收录专栏✨---【Django | 项目开发】从入门到上线 专栏---✨
@[toc]
一、国际化项目介绍
这个翻译不是浏览器翻译的,Django 也不会帮你翻译。这个需要你自己事先手动翻译好,存放在专门翻译文件中,Django 只是事后调用而已。
二、实现步骤
2.1 为翻译字符串添加钩子
1) py 文件
将需要翻译的字符串统一使用gettext_lazy
或gettext
包裹
2)HTML 文件
导入i18n
,为需要翻译的代码添加代码{% translate %}
或者{% blocktranslate %}
(用于存在变量翻译)
如果在翻译中存在二级变量或者三级变量在渲染时需要提前保存
2.2 生成本地化翻译资源文件
在 settings 加入如下
在项目根目录下生成
locale
目录,用于保存翻译消息文件(.po 和.mo 格式的)在终端输入
( 大坑插入:由于在
gettext
版本低于0.15
, 报错:Make sure you have GNU gettext tools 0.15 or newer installed.
,我花了一整天时间处理😑,由于支持 window 系统以及配置网上的方法都比较旧,最后还是stackoverflow
香😎,直接在网址https://mlocati.github.io/articles/gettext-iconv-windows.html
下载static 64
文件,将其bin
文件配置到系统环境变量即可!!
生成对应文件
我们需要在对应的文件中,给这些需要翻译的键添加值 (
msgid (message id)
是键,msstr(message str)
是值。
en
文件
( 这里的
en
是之前所设置的名字,需要与 setting 中语言配置元组中第一个数据一样,此时我们需要都将中文翻译成英文,注意!!不进行翻译会默认使用其他语言!,例如在中文对广州市翻译中翻译成了英文!)
zh_Hans 文件则翻译为中文
编译为二进制文件
三、配置 settings 文件
添加路径映射
在
settings
添加国家化的配置
效果
可以看到中文都翻译成了自己翻译的英文
配置本地化中间件
LocaleMiddleware
这个中间件。它的位置也很重要,应于SessionMiddleware
之后,CommonMiddleware
之前。(通用中间件前,改中间件主要用于一些简单处理)
四、让用户自己选择语言
1) 通过表单修改语言版本
添加下拉框选择语言,在
base.html
根模板下修改如下
我还想美化他的样式和
django文档
一样
实现代码如下(使用的样式是
tailwind
)
效果
2)通过对应链接修改
其实
django官方文档
的国家化项目中也是这么干的
这里需要添加路由url
i18n_patterns
这样在不同路径下,就会切换语言,但是目前是需要全部项目的路由都要修改,不知道如何配置才不需要😂(参考文章: 大江狗 | 刘江的博客)
小结
Django 如何识别用什么语言呢?
django 查询语言是先从
url
找,然后再从cookie
里面找,再从浏览器header
里面找,如果都没有的话则使用系统默认语言LANGUAGE_CODE
Django 如何切换语言?
在切换语言 from 表单中,我们所提交的表单路径
set_language
是我们所导入i18n url
路径所提供的,提交的language.code
能够对应到我们所设置的语言就能切换语言。
评论