Django国际化时 makemessages失败
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