Django国际化时 makemessages失败

来自个人维基
2017年9月7日 (四) 18:21Hovercool讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
D:\W\MP\t\PyWordsTaste> django-admin makemessages -l zh_hans
processing locale zh_hans

如上,提示是成功了,但实际上未生成任何 .po文件。

通过加断点,进入 makemessages 源码分析,是中间文件 pot文件未生成

然后将命令复制出来,通过 cmd直接运行:

xgettext -d django --language=Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 --keyword=pgettext_lazy:1c,2 --keyword=npgettext_lazy:1c,2,3 --output=- --files-from c:\\users\\admini~1\\appdata\\local\\temp\\3r9taw --from-code=UTF-8 --add-comments=Translators

弹框提示缺少 intl.dll

这个 dll是包含在 gettext-runtime-X.zip中。

所以,Windows安装 gettext时,要下两个文件 gettext-runtime-X.zip 和 gettext-tools-X.zip,然后解压到同一目录中:

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/

然后将 django.po更改中文后执行 django-admin.py compilemessages时,出错且提示为中文乱码:

CommandError: Execution of msgfmt failed: ....

还是直接在 cmd执行 msgfmt

> msgfmt django.po -o django.mo
django.po:21:10: 无效的多字节序列
django.po:21:11: 在行尾发现不完整的多字节序列
django.po:22: 字符串内遇到行尾
msgfmt: 发现 3 处致命错误

最终……发现是使用 pycharm打开 po文件是当作 txt来打开的,保存的格式为 unicode,而非 utf-8,改用 notepad++ 编辑 OK