在我的應用程序的源代碼中,我用俄語包裝了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