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

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

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

2 ответа

Решение

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

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

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

Другие вопросы по тегам