Django 1.9.6 配置中文支持报错及解决方案
本文记录在Django 1.9.6中配置中文支持时遇到的zh-cn本地化文件缺失问题。通过对比zh_CN与zh_Hans目录,发现Django 1.9起zh-cn已过期,推荐使用zh-hans。同时介绍了通过makemessages生成翻译文件的正规流程及Windows下gettext组件的安装注意事项。
今日新建了一个基于Django 1.9.6的工程。在创建工程后,为了将Admin后台的默认英文界面改为中文显示,需要对settings.py文件进行相关配置,具体定义如下。
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_Hans而非zh_CN。不清楚为何该版本的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.
上述内容表明,在Django 1.9中,zh-cn格式已过期,可使用zh-hans替代。不过,部分Django第三方模块可能尚未适配这一变更。
总之,对此问题的看法因人而异。其实无需过度深究,只是因个人兴趣多花了一些时间研究。
附注:网络上关于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
产品具备适用于任何地区的潜力,面向程序开发人员;本地化则是指使一个国际化的程序为了在特定地区使用而进行实际翻译的过程,面向翻译人员。
以上为本文全部内容,希望对读者有所帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









