我正在尝试创建一个“语言文件”,用于向我的Django应用程序添加本地化。
问题是,当翻译文本有一些非英文字符时,它们会被“。”取代。角色和Django抱怨这给出了错误。
例如:
English German
Change Password Passwort ändern
所以ä
取代.
我不明白为什么我无法在文本文件中粘贴此文本。当我通过vi
我在嵌入式设备上使用linux 2.6.32
。
准备语言文件时在Django中获取的错误消息是:
locale/de/LC_MESSAGES/django.po:472:70: invalid multibyte sequence
我不知道为什么会这样发生。有人可以提出一些解决方案吗?
提前致谢。
答案 0 :(得分: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
然后用新生成的文件替换旧的django.po文件,“makemessages”和“compilemessages”就像魅力一样。
谢谢大家以上的回答。
希望这有助于将来的某个人!
答案 1 :(得分:0)
您的编码似乎有些不匹配。如今,Linux通常使用utf-8,但您可能仍然在某处设置了传统的iso-8859- n ,这会导致问题。另外django需要知道解释文件的编码。
encoding
(指定内部使用的编码和其他两个的默认编码),fileencoding
(指定读取和写入特定文件的编码( per-buffer))和termencoding
(指定用于在终端上显示的编码;它不在图形版本中使用)。它允许通过向fileencoding
命令添加++enc=
标志来指定要打开的文件:edit
。所以你打开文件,例如比如:e ++enc=utf-8 file.txt
。尝试各种组合,直到角色正确显示,vim不会抱怨某些东西无法转换。比你知道你正在使用什么编码。str
)和unicode(unicode
)字符串之间进行转换。如果要打开不同编码的文件并对字符串进行排序,则必须使用codecs
包的显式编码打开它。如果它在django的某个地方打开,你必须找出如何告诉它编码。