У меня есть приложение QT, и мне нужно изменить язык во время выполнения. Я использую файлы QTranslator и .qm. Язык загружается правильно, но мои виджеты не отображают текст.
Y имеет «MyClass..cpp» (наследует QMainWindow):
MyClass::MyClass()
{
...
selectLanguage("en");
m_pLabel = new QLabel(tr("User"));
m_pLabel->show();
...
}
void MyClass::selectLanguage(QString language) {
QString sTranslationFile = QString("texts_%1").arg(language);
QTranslator translator;
//translator.load(":/translations/" + sTranslationFile);
translator.load(sTranslationFile, ":/translations/");
if (qApp->installTranslator(&translator))
qDebug() << "Ok";
}
void MyClass::changeEvent(QEvent *pEvent)
{
if(pEvent)
{
switch(pEvent->type())
{
case QEvent::LanguageChange:
retranslate();
break;
}
}
QMainWindow::changeEvent(pEvent);
}
void MyClass::retranslate()
{
qDebug() << "retranslate";
if (m_pLabel)
m_pLabel->setText(tr("User"));
}
В 'myProject.pro':
...
QMAKE_POST_LINK = lrelease.exe myProject.pro
...
RESOURCES += \
resources/resources.qrc
TRANSLATIONS += resources/translations/texts_en.ts \
resources/translations/texts_es.ts
...
DISTFILES += \
...
resources/translations/texts_en.qm \
resources/translations/texts_es.qm
В 'resources.qrc':
...
translations/texts_en.qm
translations/texts_es.qm
В 'texts_en.ts':
<!DOCTYPE TS><TS>
<context>
<name>MyClass</name>
<message>
<source>User</source>
<translation>UserEn</translation>
</message>
<message>
<source>Group</source>
<translation>GroupEn</translation>
</message>
</context>
</TS>
Язык загружается (появляется "ОК") и вызывается "retranslate", но в метке отображается НЕ "UserEn", а "User"...
Я вызываю 'selectLanguage("es")' через некоторое время, но то же самое...
tr()
затем переведет его. - person Karsten Koop   schedule 25.05.2016