【发布时间】:2015-06-04 17:16:13
【问题描述】:
在我的应用程序的源代码中,我用俄语的 gettext 字符串包装,所以这是我的默认语言和基于它的 *.po 文件。 现在我需要创建后备链 - 应该在 english 目录中搜索未在 spanish 目录中翻译的字符串,如果未翻译,则将返回自身俄语。
我尝试使用 add_fallback 方法执行此操作,但 GNUTranslations(NullTranslations) 的 self._catalog 中的未翻译字符串已替换为自身,并且ugettext 方法从不做后备。
我做错了什么?
例子:
当前语言环境是西班牙语,我们没有翻译西班牙语目录中的字符串“Титул должен быть уникальным”,因此应该返回英语目录中的“标题应该是唯一的”。
西班牙语 *.po 文件
msgid "Титул должен быть уникальным"
msgstr "" # <— We've got no translation for this string
英文 *.po 文件
msgid "Титул должен быть уникальным"
msgstr "Title should be unique"
俄语 *.po 文件不包含翻译,因为该语言在源代码中用作键(默认语言)
msgid "Титул должен быть уникальным"
msgstr ""
我有西班牙语翻译器(GNUTranslations 的对象),我使用 add_fallback 方法添加英语翻译器(GNUTranslations 的对象)作为后备。 所以,我的 es_translator._fallback 是 en_translator 对象。
在 ugettext 函数中,我们尝试通过消息作为键从 self._catalog 中获取值,并且只有当它丢失时,我们才执行 self._fallback强>调用。
但是 self._catalog.get(message) 用于未翻译的字符串返回字符串本身。
self._catalog["Титул должен быть уникальным"] -> "Титул должен быть уникальным" 我们从不搜索英文目录。
def add_fallback(self, fallback):
if self._fallback:
self._fallback.add_fallback(fallback)
else:
self._fallback = fallback
def ugettext(self, message):
missing = object()
tmsg = self._catalog.get(message, missing)
if tmsg is missing:
if self._fallback:
return self._fallback.ugettext(message)
return unicode(message)
return tmsg
但是,如果消息标记为模糊,则它不包含在 self._catalog 和回退中效果很好。
#, fuzzy
msgid "Отсутствуют файлы фотографий"
msgstr "Archivos de fotos ausentes"
【问题讨论】:
-
我无法理解您的问题。你能提供一个最小的例子吗?
-
感谢您的关注,我试图解释我的痛苦:)