从Python 2.7升级项目- > 3.3.1和Django 1.4 - > 1.6.2.
更新代码后,我们的应用程序再次运行(在py3中).
翻译是从.mo文件中提取的.
唯一的问题是我们的旧.po文件无法使用
django-admin.py makemessages -a
它显示了一个可爱的
UnicodeDecodeError: 'ascii' codec can't decode byte...
我们可以makemessages
第一次运行并获取骨架文件.一旦我们将任何非ASCII(ǹ,è等)的翻译添加到msgstr
值中,就makemessages
无法完成.
(如果我们运行带有更高详细程度模板的makemessages,则会跳过任何非ASCII字符.)
我发现了类似问题的错误报告,但它们又回到了1.3.x版本,但没有真正适用于上述版本.
更新,更多信息:
这是异常发生的地方:
../ python3.3 /subprocess.py第847行
def _translate_newlines(self, data, encoding): data = data.decode(encoding) return data.replace("\r\n", "\n").replace("\r", "\n")
该encoding
值ANSI_X3.4-1968
.我已经将模板文件保存为UTF-8以及.po文件.
这是.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, 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 \n" "Language-Team: LANGUAGE \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 blah)
启用i18n等
创建了一个翻译(仅在settings.py中)
跑`makemessages -l de
Py2.7(#python manage.py makemessages -a)按预期工作
Py3.3(#python3 manage.py makemessages -a)失败
可能提交错误,将更新.