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 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
Python写入CSV文件的方法
Jul 08 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
Python简单获取自身外网IP的方法
Sep 18 Python
python 中的int()函数怎么用
Oct 17 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
Django REST framework 限流功能的使用
Jun 24 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
AngularJS封装指令方法详解
2016/12/12 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Python open()文件处理使用介绍
2014/11/30 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
后备干部考察材料
2014/02/12 职场文书
机械专业技术员求职信
2014/06/14 职场文书
给上级领导的感谢信
2015/01/22 职场文书
五四青年节活动总结
2015/02/10 职场文书
护士求职简历自我评价
2015/03/10 职场文书
妈妈别哭观后感
2015/06/08 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL
React自定义hook的方法
2022/06/25 Javascript