Это немного взломанный, но он работает? Я устанавливаю резерв для класса трансляции на пользовательский, который уведомляет нас, когда перевод не был найден. Не знаете, что такое ваша установка, но какой-то вариант этого должен работать, не так ли?
# translate.py
import gettext
import os.path
missed_translations = set()
class MyFallback(gettext.NullTranslations):
def gettext(self, msg):
# do whatever you want to do when no translation found
# like log a message, or email someone, or raise an exception
missed_translations.add(msg)
return msg
class MyTranslations(gettext.GNUTranslations, object):
def __init__(self, *args, **kwargs):
super(MyTranslations, self).__init__(*args, **kwargs)
self.add_fallback(MyFallback())
lang1 = gettext.translation(
"translate",
localedir=os.path.expanduser("~/Projects/translate/locale"),
languages=["es"],
class_=MyTranslations
)
lang1.install()
print(_("Hello World"))
print(_("Hello world"))
print(_("nope"))
print("Missing translations for: " + ", ".join(missed_translations))
Моя структура каталогов в случае, если вы хотите воспроизвести:
├── __init__.py
├── locale
│ ├── es
│ │ └── LC_MESSAGES
│ │ └── translate.mo
│ └── messages-es_ES.po
└── translate.py
Забегая выглядит следующим образом:
$> python translate.py
Hola Mundo
Hello world
nope
Missing translations for: nope, Hello world