升级项目Python 2.7 -> 3.3.1 and 姜戈1.4 -> 1.6.2.
更新代码后我们的应用程序再次运行(in py3).
翻译正在从.mo files.
唯一的问题是我们的旧.po文件不能与
django-admin.py makemessages -a
它展现出一种可爱的
UnicodeDecodeError: 'ascii' codec can't decode byte...
我们可以跑makemessages
第一次并获取骨架文件。一旦我们将任何非 ASCII 的翻译(ǹ、è 等)添加到msgstr
价值观,makemessages
无法完成。
(如果我们使用更高详细程度的模板运行 makemessages,则任何非 ASCII 字符都会被跳过。)
我发现了类似问题的错误报告,但它们又回到了 1.3.x 版本,但上面的版本没有任何内容。
更新,更多信息:
这是发生异常的地方:
../python.3/subprocess.py 第 847 行
def _translate_newlines(self, data, encoding):
data = data.decode(encoding)
return data.replace("\r\n", "\n").replace("\r", "\n")
The encoding
值为ANSI_X3.4-1968
。我已将模板文件与 .po 文件一起保存为 UTF-8。
这是 .po 标头(只是从 makemessages 自动创建的骨架):
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-28 22:42+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected] /cdn-cgi/l/email-protection>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
这之前在 Python 2.7 和 Django 1.5 下有效(相同的文件)
更新#2
- 项目清单
- 创建了一个新的裸项目(django-admin.py startproject 等等)
- 启用 i18n 等
- 创建了一个翻译(仅在settings.py中)
- 运行 `makemessages -l de
- Py2.7 (#python manage.py makemessages -a) 按预期工作
- Py3.3 (#python3 manage.py makemessages -a) 失败
可能会提交错误,将更新。