Я весь день искал для решения проблемы и менял свой код, но не повезло.Перевод не работает в Qt
В принципе, я добавил перевод в свое приложение. Он работает нормально, кроме как здесь:
QString MainWindow::getMessage(Messages msg) {
static const char* const messages[] = {
QT_TR_NOOP("Setting power on"),
QT_TR_NOOP("Reading ID..."),
QT_TR_NOOP("Programming..."),
QT_TR_NOOP("Setting write-protect"),
QT_TR_NOOP("Finished ok"),
QT_TR_NOOP("PROGRAMMED OK"),
QT_TR_NOOP("ERROR!"),
QT_TR_NOOP("OK"),
QT_TR_NOOP("The programmer is not connected.\nPlease check the connection."),
QT_TR_NOOP("Disconnect the board, it is in short!!"),
QT_TR_NOOP("ERROR: Supply voltage too low (1 Volt is required, Measured: 0.0 Volt)."),
QT_TR_NOOP("Board is already programmed and write protected."),
QT_TR_NOOP("Check device connection or there is short."),
QT_TR_NOOP("Unknown error.")
};
return tr(messages[msg]);
}
Однако я не получаю перевод. Файлы для перевода, похоже, в порядке, переводы пользовательского интерфейса применяются отлично. Я также попытался это:
static const char* const messages[] = {
QT_TRANSLATE_NOOP("test", "Setting power on"),
QT_TRANSLATE_NOOP("test", "Reading ID..."),
QT_TRANSLATE_NOOP("test", "Programming..."),
QT_TRANSLATE_NOOP("test", "Setting write-protect"),
QT_TRANSLATE_NOOP("test", "Finished ok"),
QT_TRANSLATE_NOOP("test", "PROGRAMMED OK"),
QT_TRANSLATE_NOOP("test", "ERROR!"),
QT_TRANSLATE_NOOP("test", "OK"),
QT_TRANSLATE_NOOP("test", "The programmer is not connected.\nPlease check the connection."),
QT_TRANSLATE_NOOP("test", "Disconnect the board, it is in short!!"),
QT_TRANSLATE_NOOP("test", "ERROR: Supply voltage too low (1 Volt is required, Measured: 0.0 Volt)."),
QT_TRANSLATE_NOOP("test", "Board is already programmed and write protected."),
QT_TRANSLATE_NOOP("test", "Check device connection or there is short."),
QT_TRANSLATE_NOOP("test", "Unknown error.")
};
Тогда у меня есть метод, чтобы получить сообщение:
QString MainWindow::getMessage(Messages msg) {
return qApp->translate("test", messages[msg]);
}
Но это не работает.
Любые советы или предложения?
Вы делаете свой перевод дважды. Зачем? Предложение: используйте только строки времени компиляции внутри макроса 'tr'. –
@Saz 'QT_TR_NOOP' ничего не переводит. Макрос ничего не делает, но дает инструмент lupdate' подсказку, где можно найти переводный текст. См. Http://qt-project.org/doc/qt-4.8/linguist-programmers.html#using-qt-tr-noop-and-qt-translate-noop –
Вы скомпилировали свой файл '.ts' в '.qm' файл? Не могли бы вы добавить код в свой 'main.cpp', где вы установили' QTranslator'? –