Python gettext 无法加载翻译文件

标签 python gettext

问题:

在 python 中加载已编译的翻译文件时 gettext它抛出异常

 Traceback (most recent call last):
  File "xxxx.py", line 6, in <module>
    lang_en = gettext.translation(__appname__,LanguageDirectory,languages=['en'])
  File "C:\Python33\lib\gettext.py", line 410, in translation
    t = _translations.setdefault(key, class_(fp))
  File "C:\Python33\lib\gettext.py", line 160, in __init__
    self._parse(fp)
  File "C:\Python33\lib\gettext.py", line 265, in _parse
    item = b_item.decode().strip()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position xxx: invalid continuation byte

最佳答案

解决方案

gettext.py库当前不解析翻译文件 header 中的 iso-8859 字符。

存在该问题的示例 header (编译前):

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-12-06 11:22\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE+Mitteleuropäische Zeit\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
"Generated-By: pygettext.py 1.5\n"

在此示例中,Mitteleuropäische Zeit 将导致问题。

如何修复
目前避免这种情况的最简单方法是不在 header 中使用 iso-8859 字符。
为了防止 pygettext.py 将当前语言的时区添加到标题中,您可以更改

第 447 行 - pygettext.py

timestamp = time.strftime('%Y-%m-%d %H:%M-%Z')

timestamp = time.strftime('%Y-%m-%d %H:%M', time.gmtime())

通过此修改,pygettext 不会将时区添加到标题中。相反,它将使用当前的 Greenwich Mean Time

关于Python gettext 无法加载翻译文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20423186/

相关文章:

php - 更改 Woocommerce 购物车页面中的特定文本

python - 网络抓取 - 从网站获取 key

python - 使用 setup.py 创建不同的分布类型

python - 如何使用 GPT-2 求出一个句子的概率?

javascript - Django makemessages javascript(xgettext)

php - WordPress插件国际化: variables not translated?

python - 获取python中每列的计数和唯一计数

Python:尝试识别 csv 中的特定行/列并将其存储为变量,然后在句子中打印到 txt 文件。

translation - Poedit 有哪些好的替代品?

python - .po 文件中的 Django 生成的波兰语复数形式不起作用