Зачем мне нужен QTranslator для локализованных текстов кнопок в QMessageBox в Windows?
Я занимаюсь разработкой приложения Qt, которое работает на Linux и Windows. Я на немецком языке.
При сборке в Linux я получаю правильные переводы для стандартных кнопок, отображаемых, например, QMessageBox::question
с QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel
набор кнопок ("Ja", "Nein" и "Abbrechen" в моем случае).
Однако, если я создаю код в Windows, я получаю только тексты на английском языке (C) для этих кнопок ("Да", "Нет" и "Отмена").
После некоторых поисков я нашел глобально работающее решение, добавив
#include <QTranslator>
#include <QLibraryInfo>
а также
QTranslator qtTranslator;
if (qtTranslator.load(QLocale::system(), QString::fromUtf8("qt"), QString::fromUtf8("_"),
QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
app.installTranslator(&qtTranslator);
}
к моему main.cpp
,
Используя это, я также получаю переведенные строки в Windows. В Linux же qtTranslator.load
вызов завершается неудачно, и, таким образом, ничего не происходит с состоянием, которое у меня было раньше, поэтому я положил этот код #ifdef Q_OS_WIN
блок.
Это работает, но мне кажется немного хакерским. Кроме того, я не понимаю, почему я получаю переведенные строки в Linux по умолчанию, а не в Windows.
Является ли способ сделать это правильное решение? И если да, то зачем мне этот дополнительный код в Windows?
1 ответ
Попробуйте заменить свой код на это и протестировать.
static QTranslator qtTr;
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&qtTr);