Я занимаюсь разработкой приложения Qt, которое работает на Linux и Windows. Я на немецком языке.
При сборке в Linux я получаю правильные переводы для стандартных кнопок, отображаемых e. г. 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?
Попробуйте заменить свой код на это и протестировать.
static QTranslator qtTr;
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&qtTr);
Других решений пока нет …