django的settings中设置中文支持的实现


Posted in Python onApril 28, 2019

今天创建了个django工程,用的是目前django 1.9.6,创建工程后,settings.py中设置中文显示支持(最简单的,例如把admin界面的默认英文改成中文),定义

TIME_ZONE = 'Asia/Shanghai'
LANGUAGE_CODE = 'zh-cn'

当然TIME_ZONE只是指定时区,和中文显示没有关系,这里一并修改了默认值。结果运行项目时报错了,如下:

django IOError: No translation files found for default language zh-cn

即找不到zh-cn对应的本地化文件。一般而言,zh-cn编码对应的本地化文件夹为zh_CN,我去django的安装目录查找zh_CN,结果确实没有找到,在django安装目录的contrib子目录下的一系列子目录的locale文件夹中,没有zh_CN,而有zh_Hans。不知道为什么django的这个版本没有zh_CN文件夹,可能是一个bug吧。网上有人说将zh_Hans目录全部复制一份并命名为zh_CN,就可以解决这个问题,我试了下,再次运行确实可行了,在admin界面显示了中文。至于这种比较山寨的方法有没有隐患,现在还不知道,以后遇到再说吧。

不过话说回来,其实还有正统的方式去生成国际化文件,如下命令:

django-admin.py makemessages -l zh_CN

不过这个需要gettext组件,如果你是在windows上开发,那么你需要自己安装这个组件,

在http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/下载gettext-runtime-X.zip以及gettext-tools-X.zip的最新版(注:X为版本号)并解压后,将两个bin目录可以合并后放入系统环境变量中。不过该方法我没有验证,感兴趣的可以试试。

后来我又想,django之前的老版本是有zh_CN的,要说这个一个bug,估计也比较低级,按理不应该的。于是又查,发现貌似zh_Hans可能已经替代zh_CN了。Han表示汉字,s表示Simplified简体,反正我设置为LANGUAGE_CODE = 'zh-hans'也是正常显示中文。

zh-cn will expired in Django1.9, the new format is zh-hans, but drf3.1.0 does not support this type of language.

上面的意思是在django1.9中,zh-cn过期了,可以用zh-hans替代,不过可能有些django的第三方模块还没有跟上这个变化。

总之,仁者见仁智者见智了,其实大可不必如此研究,只是突然对这个比较感兴趣所以多研究了一会。

ps:网上很多地方对于LANGUAGE_CODE = 'zh-cn'有各种不同写法,包括zh_CN,zh-CN等,有的人还说只能用某某写法等,反正我是没看出来区别,我也都试了,都没发现问题。

另外说个题外话,之前一直都不知道settings.py中的USE_I18N和USE_L10N是什么意思,直到看到了下面的一段话:

当 Web 服务搭建好以后,可以接收来自全球不同国家用户访问。这样就要求开发人员调整软件,使之能适用于不同的语言,即国际化和本地化。国际化

-- Internationalization,i 和 n 之间有 18 个字母,简称 I18N,。本地化 -- localization, l 和 n 之间有 10 个字母,简称 L10N。国际化意味着 Web

产品有适用于任何地方的潜力,针对程序开发人员;本地化则是指使一个国际化的程序为了在某个特定地区使用而进行实际翻译的过程,针对翻译人员而言。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的一些用法分享
Oct 07 Python
Python实用日期时间处理方法汇总
May 09 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
python 获取当天每个准点时间戳的实例
May 22 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Python paramiko使用方法代码汇总
Nov 20 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
Django数据库类库MySQLdb使用详解
Apr 28 #Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 #Python
​如何愉快地迁移到 Python 3
Apr 28 #Python
python学习开发mock接口
Apr 28 #Python
Python简单基础小程序的实例代码
Apr 28 #Python
python实现Excel文件转换为TXT文件
Apr 28 #Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 #Python
You might like
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
python 循环遍历字典元素的简单方法
2016/09/11 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
python随机数分布random测试
2018/08/27 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
介绍一下write命令
2014/08/10 面试题
2014年公司植树节活动方案
2014/03/04 职场文书
活动总结模板
2014/05/09 职场文书
中秋节祝酒词
2015/08/12 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers