qApp->installTranslator() 和 tr 没有翻译?

qApp->installTranslator() and tr didn't translate?

本文关键字:tr 翻译 gt installTranslator qApp-      更新时间:2023-10-16

我正在尝试动态更改我的应用程序语言:

void MainWindow::ChangeEvent(QEvent *event, QString *language)
{
    if (event->type() == QEvent::LanguageChange) {
        RetranslateInterface(language);
        //ui.retranslateUi(this);
    }
    QWidget::changeEvent(event);
}
void MainWindow::RetranslateInterface(QString *language) {
    QString lang = language->remove(2, language->length());
    lang = lang.toLower();
    qDebug()<<"lang"<<lang;
    lang = "qt_" + lang + ".qm";
    qDebug()<<"lang"<<lang;
    if ( Translator )
        qApp->removeTranslator( Translator );
    qDebug()<<"Translator->load( lang)"<< Translator->load( QApplication::applicationDirPath()+"/"+ lang);
    qApp->installTranslator( Translator );
    //qDebug()<<"tr >>>>"<<qApp->translate("MainWindow","my english text");
    setWindowTitle(tr("my english text"));

}
void MainWindow::Slot_ChLangue(QAction* Trigaction)
{
    QString Selectedlanguage = Trigaction->text();
    qDebug()<<"selected language"<<Selectedlanguage;
    if (!Selectedlanguage.isEmpty()) {
        QEvent *translate = new QEvent(QEvent::LanguageChange);
        ChangeEvent(translate, &Selectedlanguage);
    }
}

"qt_*.qm"已加载,但setWindowTitle(tr("my english text"));未设置适当的文本

我在主函数中尝试了这个,它也不起作用:

QTranslator translator;
       if(QFile::exists(QApplication::applicationDirPath()+"/qt_fr.qm"))
       qDebug()<<"loaded"<<translator.load(QApplication::applicationDirPath()+"/qt_fr.qm");
       app.installTranslator(&translator);
       qDebug()<<"out en français"<<app.tr("my english text");

我总是得到英文的"我的英文文本"。

任何帮助将不胜感激。

关于您的最新评论:

没有预定义的字典,您需要自己翻译字符串(或让其他人翻译它们)。

为此,您需要执行以下步骤:

  • 在代码中调用 tr()
  • 将类似TRANSLATIONS += qt_fr.ts的内容添加到您的 .pro 文件中
  • 调用lupdate -verbose <yourprofile>.pro以创建一个XML结构的.ts文件,其中包含应翻译的文本
  • 调用linguist qt_fr.ts以启动Qt Linguist并轻松翻译字符串
  • 从Qt Linguist或使用lupdate生成.qm文件
  • 运行应用程序

这里有一个关于使用翻译的教程。