2016-02-04 10 views
1

Я хотел бы знать, можно ли проверять во время выполнения, если строка для перевода существует в gettext.Как узнать, существует ли строка перевода с gettext?

Это предназначение только для отладки.

Иногда строки для перевода немного обновляются, и никто не думает обновлять файл po. Ошибка остается до тех пор, пока кто-то не найдет ее или не решит обновить файл po по другой причине.

Если есть лучший способ управлять этим случаем, я также заинтересован.

ответ

0

Это немного взломанный, но он работает? Я устанавливаю резерв для класса трансляции на пользовательский, который уведомляет нас, когда перевод не был найден. Не знаете, что такое ваша установка, но какой-то вариант этого должен работать, не так ли?

# 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