2015-03-31 1 views
0

Я пытаюсь перевести свое приложение с финского на английский. Я проверил Riverbank's short doc и получил в основном работу. Прежде чем я побежал приложение я называю:Проблема интернационализации PyQt5 с переменными

translator = QTranslator() 
translator.load("gui/translations/mainwindow.qm") 
app = QApplication(sys.argv) 
app.installTranslator(translator) 

И приложение переводит большинство текстов правильно ли я это по коде: QCoreApplication.translate("setapikeyheading", "Aseta tunnisteavain")

Теперь мое приложение имеет несколько ситуаций, в которых может возникнуть такое же сообщение об ошибке в другом контексте. Мне нравится DRY, поэтому я создал несколько «констант», как так как статические переменные:

_UNKNOWN_ERROR = QCoreApplication.translate("unknown_error", "Tuntematon virhe: ") 

Тогда я побежал pylupdate5 и перевел строки в Лингвист. Однако во время выполнения эти сообщения не будут переведены, но вместо этого будут отображаться исходные тексты Финляндии.

Почему и как его исправить? У меня есть подозрение, что это имеет какое-то отношение к контексту, но мне еще не удалось это выяснить, так как я не смог найти углубленной документации по переводу PyQt (Riverbank довольно неопределен).

Кроме того, как я должен переводить Designer, созданный пользовательский интерфейс с PyQt, учитывая, что Riverbank рекомендует использовать translate() вместо tr()?

ответ

0

Похоже, я нашел хак для контекстной проблемы. Файлы .ts, используемые Qt Linguist для определения переводов, и контексты имеют строку <location filename="messages.py" line="9"/>, которая привела меня к выводу, что фактическое расположение строк в исходных файлах важно.

В то время как переменные, как в моем вопросе не работал, функции работали, как они, казалось, держать контекст же в соответствии с Лингвист/QTranslate:

def unknown_error(self): 
    return QCoreApplication.translate("unknown_error", "Tuntematon virhe: ") 

Чтобы отобразить текст, я просто позвонить print(messages.unknown_error()). Для меня это похоже на взлом, но он работает.