從升級項目的Python 2.7 - >3.3.1和的Django 1.4 - >1.6.2。Unicode的問題與makemessages --all Django的1.6.2的Python 3.3
更新代碼之後,我們的應用程序運行時再次(在PY3)。
翻譯正在從的.mo文件提取。
唯一的問題是,我們的老的.po文件無法與
django-admin.py makemessages -a
使用它顯示一個可愛的
UnicodeDecodeError: 'ascii' codec can't decode byte...
我們可以在第一次運行makemessages
並獲取框架文件。一旦我們將任何非ASCII(ǹ,è等)的翻譯添加到msgstr
值中,則makemessages
未能完成。
(如果我們運行與任何非ASCII字符的高冗長模板makemessages被跳過。)
我發現了一個類似的問題bug報告,但他們早在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 <[email protected]>, 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 protected]>\n"
"Language-Team: LANGUAGE <[email protected]>\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命令等等)
- 啓用國際化等
- 創建一個單一的翻譯(只是設置。PY)
- 冉`makemessages -l德
- Py2.7(#python manage.py makemessages -a)按預期工作
- Py3.3(#python3 manage.py makemessages -a)失敗
可能提交一個錯誤,將更新。
字符集標題包含.po文件中的正確值嗎? –
「Content-Type:text/plain; charset = UTF-8 \ n」是.po標題中的內容。我已經爲subprocess.py(stacktrace的一部分)添加了一些打印語句,它獲得了ANSI_X3.4-1968的編碼 – Justin
使用單個翻譯創建新項目給我帶來了同樣的悲傷。適用於Py 2.7,不適用於3.3 – Justin