Qt Linguist:仅翻译了 .ui-based 个小部件,其他 contexts/widgets 个未翻译
Qt Linguist: Only .ui-based widgets are translated, other contexts/widgets not
我已经检查了很多与 Qt Linguist 相关的问题,但我还没有找到针对我的特定问题的解决方案。
我有一个(中文)翻译文件,其中很多字段都正确填写了。
我的问题是在我的应用程序中只有 .ui-based contexts/widgets 的翻译工作正常。其他上下文(例如 VideoWidget)未被翻译。
翻译本身似乎存在
QString test1 = QApplication::translate("MainWindow", "Report");
QString test2 = QApplication::translate("VideoWidget", "Left");
test1 = "报告"
test2 = "报告"
VideoWidget 派生自 QGroupBox,如前所述,它不是从 .ui 文件生成的。
我需要做什么才能使非.ui-based widgets/contexts 的翻译正常工作?据我所知,翻译器全局存储在 QApplication 中,所以我无法想象需要为每个小部件加载翻译器..
它将帮助您设置一个翻译器:
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
a.installTranslator(&qtTranslator);
通过这种方式,它也会翻译默认的小部件和所有 Qt 文本。
显然,需要 manually/explicitly 通过为这些小部件编写您自己的 retranslateUi() 类方法来处理非基于 ui 的小部件的翻译。这些需要在 LanguageChange 事件上触发。
这也是基于设计器的小部件的(自动生成的)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."));
}
我已经检查了很多与 Qt Linguist 相关的问题,但我还没有找到针对我的特定问题的解决方案。
我有一个(中文)翻译文件,其中很多字段都正确填写了。
我的问题是在我的应用程序中只有 .ui-based contexts/widgets 的翻译工作正常。其他上下文(例如 VideoWidget)未被翻译。
翻译本身似乎存在
QString test1 = QApplication::translate("MainWindow", "Report");
QString test2 = QApplication::translate("VideoWidget", "Left");
test1 = "报告"
test2 = "报告"
VideoWidget 派生自 QGroupBox,如前所述,它不是从 .ui 文件生成的。
我需要做什么才能使非.ui-based widgets/contexts 的翻译正常工作?据我所知,翻译器全局存储在 QApplication 中,所以我无法想象需要为每个小部件加载翻译器..
它将帮助您设置一个翻译器:
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
a.installTranslator(&qtTranslator);
通过这种方式,它也会翻译默认的小部件和所有 Qt 文本。
显然,需要 manually/explicitly 通过为这些小部件编写您自己的 retranslateUi() 类方法来处理非基于 ui 的小部件的翻译。这些需要在 LanguageChange 事件上触发。
这也是基于设计器的小部件的(自动生成的)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."));
}