Qt Linguist:只翻译基于.ui的小部件,而不翻译其他上下文/小部件

时间:2015-01-16 11:06:44

标签: c++ qt translation

我检查了很多与Qt Linguist有关的问题,但我没有找到解决我特定问题的方法。

我有一个(中文)翻译文件,其中正确填写了许多字段。

Chinese translation

我的问题是,在我的应用程序中,只有基于.ui的上下文/小部件的翻译才能正常工作。其他上下文(例如VideoWidget)未被翻译。

翻译本身似乎存在

QString test1 = QApplication::translate("MainWindow", "Report");
QString test2 = QApplication::translate("VideoWidget", "Left");

test1 ="报告"

test2 ="报告"

VideoWidget派生自QGroupBox,如上所述,不是从.ui文件生成的。

我需要做些什么才能使非基于.ui的小部件/上下文的翻译工作?据我所知,翻译器全局存储在QApplication中,因此我无法为每个小部件加载翻译器。

2 个答案:

答案 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."));
}