我检查了很多与Qt Linguist有关的问题,但我没有找到解决我特定问题的方法。
我有一个(中文)翻译文件,其中正确填写了许多字段。
我的问题是,在我的应用程序中,只有基于.ui的上下文/小部件的翻译才能正常工作。其他上下文(例如VideoWidget)未被翻译。
翻译本身似乎存在
QString test1 = QApplication::translate("MainWindow", "Report");
QString test2 = QApplication::translate("VideoWidget", "Left");
test1 ="报告"
test2 ="报告"
VideoWidget派生自QGroupBox,如上所述,不是从.ui文件生成的。
我需要做些什么才能使非基于.ui的小部件/上下文的翻译工作?据我所知,翻译器全局存储在QApplication中,因此我无法为每个小部件加载翻译器。
答案 0 :(得分:0)
它可以帮助您设置翻译:
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
a.installTranslator(&qtTranslator);
通过这种方式,它也可以翻译默认小部件和所有Qt文本。
答案 1 :(得分:0)
显然,需要手动/明确地处理非基于.ui的小部件的翻译,方法是编写自己的retranslateUi() - 这些小部件的方法。这些需要在LanguageChange事件上触发。
这也是基于Designer的小部件的(自动生成的)retranslateUi()函数中发生的情况。
void MainWindow::changeEvent(QEvent* event)
{
if(event->type() == QEvent::LanguageChange)
m_videoWidget->retranslateUi();
else
QMainWindow::changeEvent(event);
}
void VideoWidget::retranslateUI()
{
m_button1->setText(tr("Left"));
m_button1->setToolTip(tr("Select Left Camera."));
m_button2->setText(tr("Posterior"));
m_button2->setToolTip(tr("Select Posterior Camera."));
m_button3->setText(tr("Right"));
m_button3->setToolTip(tr("Select Right Camera."));
m_dockButton->setText(tr("Toggle docking"));
m_dockButton->setToolTip(tr("Dock or undock the video view."));
}