2011-05-05 39 views
0

我想創建一個「語言文件」來添加本地化到我的Django應用程序。非英文字符變爲「。」在linux中的字符

問題是,當翻譯文本有一些非英文字符時,它們被替換爲「。」。性格和Django抱怨這給了一個錯誤。

對於如:

English      German 
Change Password    Passwort ändern 

所以在這裏ä得到由.

代替我不明白爲什麼我不能我的文本文件,這裏面的文本粘貼。我能夠將其粘貼到終端上,但不能在文件中打開時通過vi

我在嵌入式設備上使用linux 2.6.32

同時準備語言文件在Django獲得的錯誤信息是:

locale/de/LC_MESSAGES/django.po:472:70: invalid multibyte sequence 

我不知道爲什麼它的發生是這樣的。有人可以提出一些解決方案嗎?

在此先感謝。

+1

Django給你什麼錯誤?機會是它不知道什麼編碼的翻譯 – 2011-05-05 11:53:06

+0

@Thomas:用Django獲得的錯誤信息更新了問題 – 2011-05-06 05:19:37

+0

@Thomas:執行「cat django.po」正確顯示內容,即不用「ä」替換「」 – 2011-05-06 05:49:12

回答

3

好的,我解決了我的問題。我得到錯誤無效的多字節序列,因爲問題是.po編碼不正確。

我可以通過執行以下命令確認這一點:

file -i django.po 

它給輸出該文件的編碼類型是ISO-8859-1

所以,我轉換的文件,以「UTF-8」使用下面的命令:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 django.po > django_utf8.po 

然後替換爲新生成一個與「makemessages」和「compilemessages」工作就像一個老django.po文件魅力。

謝謝大家以上的回答。

希望這有助於未來的人!

+0

很高興你解決它。挑剔:ISO-8859-1是一種字符編碼,而不是一種MIME類型。 – 2011-05-06 11:49:11

0

看來你在編碼方面有一些不匹配。現在,Linux通常使用utf-8,但您仍然可能會在某處設置傳統iso-8859-n,這會導致問題。另外django需要知道哪個編碼來解釋文件。

  • Vim有選擇encoding(指定編碼它的內部和默認使用對於其他兩個),fileencoding(指定的編碼來讀取和(每個緩衝液)在寫特別文件)和termencoding(指定編碼用於在終端上顯示;它不用於圖形版本)。它允許通過將++enc=標誌添加到:edit命令來指定fileencoding用於打開文件。所以你打開文件例如像:e ++enc=utf-8 file.txt。嘗試各種組合,直到角色正確顯示,而vim不會抱怨某些東西無法轉換。你會知道你使用的是什麼編碼。
  • 在python默認情況下,只有ascii字符在字符串(str)和unicode(unicode)之間轉換。如果你想以不同的編碼打開一個文件並且解釋這些字符串,你必須用明確的編碼codecs包打開它。

如果它在django的某個地方打開,你必須找出如何告訴它的編碼。

+0

我通過膩子連接到我的設備。現在,當我將翻譯後的文本「Passwortändern」粘貼到終端中時,它顯示的應該完全如此......但是當我打開「vi」並粘貼內容時,「Passwortändern」中的「ä」字符被替換按「。」 (點字符)..我試圖改變膩子設置爲UTF-8 ..但仍然沒有爲vi工作..它的終端的顯示器沒有改變膩子的設置...任何想法我應該改變設置... – 2011-05-06 05:24:19

+0

一個更新;當我執行「貓django.po」,它顯示正確的文本顯示,即「Passwortändern」,而不是「Passwort .ndern」..我不明白這是什麼意思..這是一個Django的問題..我用錯誤信息更新了問題。 – 2011-05-06 05:35:33