我正试图为应用程序添加动态本地化支持,但在MainWindow
上调用retranslateUi()
时,没有任何转换。
我在首选项对话框中使用下面的代码来设置要使用的本地化:
if(translator.load(QDir::toNativeSeparators("localisation/") + m_localisations.at(ui->languageOptionsBox->currentIndex()).name() + "_v1"))
qDebug() << "Loaded translation";
else
qDebug() << "Translation not loaded";
qApp->installTranslator(&translator);
然后在我的MainWindow
类中处理更改事件:
void MainWindow::changeEvent(QEvent *event)
{
qDebug() << "Change event";
if(event->type() == QEvent::LanguageChange)
{
qDebug() << "Language Change event";
ui->retranslateUi(this);
}
QMainWindow::changeEvent(event);
}
retranslateUi()
函数是从ui_mainwindow.h
调用的,但UI没有用正确的语言更新,本地化肯定是根据调试语句加载的。翻译确实有效,因为我将所选值存储为QSettings
值,并在应用程序加载时对其进行检查,并且重新启动应用程序确实正确地翻译了它,所以我认为我遗漏了一些东西。
我遇到了同样的问题。
事实证明,问题不是来自retranslateUi()
方法,也不是来自MainWindow::changeEvent()
方法,而是来自处理QTranslator
的方式:
您需要致电:
application->removeTranslator(previousTranslator);
之前:
application->installTranslator(translator);