我有一個QT應用程序,我需要在運行時更改語言。我正在使用QTranslator和.qm文件。語言加載正常,但我的小部件不顯示文本。帶有Dinamic語言的QT應用程序(QTranslator)不起作用
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
在「資源.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>
語言裝載( 「OK」 出現)和 「重譯」 之稱,但標籤不顯示 「UserEn」但「用戶」 ......
我稱之爲「selectLanguage(‘ES’),」過了一段時間,但同樣的...
由於標籤是動態創建的,而不是從文件的.ui,它不會自動翻譯。您可以捕獲QEvent :: LanguageChange事件並再次設置標籤文本,其中'tr()'然後將其轉換。 –