vc ++ + QT перевод интерфейса не работает

У меня есть проект с 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 во всех случаях. Моя проблема в том, что пользовательский интерфейс не переводится при запуске приложения. Это странно, потому что это не имеет никакого эффекта.

Любая подсказка о том, что мне не хватает или что я могу проверить?

большое спасибо

0

Решение

Вы уверены, что «languagefileqt_es» — это правильное имя вашего языкового файла? Я бы ожидал «languagefileqt_es.qm» вместо этого.

Вы уверены, что загружаете из правильного каталога? Если вы не загружаете из внутреннего скомпилированного ресурса (: /languagefileqt_es.qm), вы должны ссылаться на абсолютный путь, чтобы убедиться, что вы загружаете правильную вещь.

0

Другие решения

Я обнаружил, в чем была проблема. спасибо @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();
}
0

По вопросам рекламы [email protected]