Зачем мне нужен 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);
Другие вопросы по тегам