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
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)
brew install gettext brew link gettext --force
生成需要翻译的文件
python manage.py makemessages -l zh_Hans
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 文件
python manage.py compilemessages
实践效果图
其他用途
- 把三方库某些显示的文案翻译成本地语言,而不用修改源代码。
django 国际化的更多相关文章
- Django国际化注意事项
涉及两部分内容: py/html文件国际化.外部js文件国际化 步骤 1. settings.py 激活相应的配置 2. 针对py文件,需要注意被翻译代码的编写方式 3. 针对html文件,需要注意被 ...
- Django 国际化和本地化
所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...
- Django国际化和本地化
把django的这篇文档看了一遍,基本弄懂了,讲的也挺详细的 https://docs.djangoproject.com/en/1.6/topics/i18n/ 首先是国际化和本地化概念: 1,国际 ...
- django国际化的简单设置
设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文, English Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...
- django国际化总结
转:http://blog.csdn.net/ybdesire/article/details/46806739
- Django分析之国际化处理
最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线 ...
- Django:之安全、国际化和session
Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev ...
- django框架项目 国际化和本地化的实现方法
转自 https://blog.csdn.net/scissors0707/article/details/79042458 Django国际化 所谓的国际化,是指使用不同语言的用户在访问同一个网站页 ...
- Django rest_framework 实用技巧
前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...
- 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...
随机推荐
- docker部署zabbix 6.0高可用集群实验
0 实验环境 虚拟机,postgresql本地部署,zabbix server及nginx容器部署 1 postgresql 参看前作 <postgresql + timescaledb离线安装 ...
- shell: xscp
#!/bin/bash ips=( 1.1.1.1 1.1.1.2 ) user= passwd= for i in ${ips[@]} do echo "== $i ==" ss ...
- 关于 Task 简单梳理(C#)【并发编程系列】
〇.前言 Task 是微软在 .Net 4.0 时代推出来的,也是微软极力推荐的一种多线程的处理方式. 在 Task 之前有一个高效多线程操作类 ThreadPool,虽然线程池相对于 Thread, ...
- [Go笔记] 基础-01: Golang发展简史、著名项目及基本使用
引言 Golang,又称Go语言,是一门开源的静态类型编译型编程语言.自从2007年由谷歌的罗伯特·格里泽默(Robert Griesemer).罗布·派克(Rob Pike)和肯·汤普森(Ken T ...
- JavaScript中单例模式这样用
如果希望自己的代码更优雅.可维护性更高以及更简洁,往往离不开设计模式这一解决方案. 在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分稳定). 单例模式 那么来说 ...
- quarkus依赖注入之十二:禁用类级别拦截器
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...
- .NET爬取美图官网首页数据实战
前言: 在当今信息化社会,网络数据分析越来越受到重视.而作为开发人员,掌握一门能够抓取网页内容的语言显得尤为重要.在此篇文章中,将分享如何使用 .NET构建网络抓取工具.详细了解如何执行 HTTP 请 ...
- ENVI+ERDAS实现Hyperion叶绿素含量反演:经验比值法、一阶微分法
本文介绍基于ENVI与ERDAS软件,依据Hyperion高光谱遥感影像,采用经验比值法.一阶微分法等,对叶绿素含量等地表参数加以反演的具体操作. 目录 1 前期准备与本文理论部分 1.1 几句闲谈 ...
- 通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号
第一部分,观察通过snmp OID能获取的信息,对信息进行关联. 1.通过 snmp获取到接口IP地址和掩码信息,发现IP地址作为索引值: 2.每个IP地址的索引,都可以关联到接口的索引 3.每个接口 ...
- 【Qt6】列表模型——便捷类型
前一篇水文中,老周演示了 QAbstractItemModel 抽象类的继承方法.其实,在 Qt 的库里面,QAbstractItemModel 类也派生了两个基类,能让开发者继承起来[稍稍]轻松一些 ...