У меня есть проект с QT на vc ++, и мне нужно найти строку в пользовательском интерфейсе на разных языках. Я создал пользовательский интерфейс через QTdesigner в надстройке Visual Studio Visual Studio 2012, а также установил плагин QT для использования функций Qt.
Я создал файл .pro и добавил:
SOURCES += main.cpp
TRANSLATIONS += languagefileqt_es.ts
После того, как я сгенерировал файл лингвиста SOURCES emminensmultiportqt_es.ts, он правильно обнаружил все строки в моем IU. После этого я генерирую файл .qm, используя функцию выпуска Qtlinguist.
Мой файл ресурсов:
<RCC>
<qresource prefix="MyAppQT">
<file>languagefileqt_es.qm</file>
</qresource>
</RCC>
Затем я добавил это в мой main.cpp:
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
И загруженный возвращает true во всех случаях. Моя проблема в том, что пользовательский интерфейс не переводится при запуске приложения. Это странно, потому что это не имеет никакого эффекта.
Любая подсказка о том, что мне не хватает или что я могу проверить?
большое спасибо
Вы уверены, что «languagefileqt_es» — это правильное имя вашего языкового файла? Я бы ожидал «languagefileqt_es.qm» вместо этого.
Вы уверены, что загружаете из правильного каталога? Если вы не загружаете из внутреннего скомпилированного ресурса (: /languagefileqt_es.qm), вы должны ссылаться на абсолютный путь, чтобы убедиться, что вы загружаете правильную вещь.
Я обнаружил, в чем была проблема. спасибо @Jens за попытку помочь.
Я думаю, что совершил ошибку, не зная, как работал механизм перевода. В моем main.cpp у меня было:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindowQT w;
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
w.show();
return a.exec();
}
Но я понял, что если я выполню
qDebug() << QApplication::translate("MainWindowQTClass", "...BOARDING", 0);
после процесса загрузки он вернет переведенную строку правильно. Поэтому я изменил определение своего пользовательского интерфейса после интернационализации, и это сработало. По-видимому, перевод выполняется в функции под названием retranslateUi () который вызывается в конструкторе.
Правильный main.cpp должен быть:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
MainWindowQT w;
w.show();
return a.exec();
}