在我的应用程序的源代码中,我用俄语包装了gettext字符串,所以这是我的默认语言和基于它的* .po文件。 现在我需要做回退链 - 即不西班牙目录翻译应搜索在英语目录,比如果它不翻译将俄罗斯返回自己的字符串。Gettext回退不适用于未翻译的字符串
我试图用add_fallback的方法来做到这一点,但在self._catalog未翻译的字符串的 GNUTranslations(NullTranslations)已经用自身替换和ugettext方法不会做回退。
我做错了什么?
例子:
当前区域设置为西班牙语,我们在西班牙的目录得到了字符串“Титулдолженбытьуникальным”没有翻译,因此“标题应该是唯一的”,从英文目录应返回。
西班牙* .po文件
msgid "Титул должен быть уникальным"
msgstr "" # <— We've got no translation for this string
英语* .po文件
msgid "Титул должен быть уникальным"
msgstr "Title should be unique"
俄罗斯* .po文件不包含翻译,因为这种语言作为源代码键(默认语言)
msgid "Титул должен быть уникальным"
msgstr ""
我有西班牙语翻译(GNUTranslations的对象),我加了英语h traslator(GNUTranslations的对象)作为它使用add_fallback方法的后备。 所以,我的es_translator._fallback是en_translator对象。
在ugettext功能,我们试图通过消息为重点,从self._catalog获得价值,并且仅当它丢失了我们做self._fallback电话。 但self._catalog.get(消息)为未翻译的字符串返回字符串本身。 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"
我无法理解你的问题。您能否提供一个最简单的例子? – hildred 2015-04-01 03:47:17
谢谢你的关注,我试图解释我的痛苦:) – elatonsev 2015-04-01 07:57:57