【问题标题】:qApp->installTranslator() and tr didn't translate?qApp->installTranslator() 和 tr 没有翻译?
【发布时间】:2012-11-23 14:04:33
【问题描述】:

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

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")); 未设置适当的文本

我在 main 函数中试过了,它也不起作用:

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");

我总是得到英文的“我的英文文本”。

任何帮助将不胜感激。

【问题讨论】:

  • 你能显示你的 .qm 文件的内容吗?至少包含“我的英文文本”翻译的行以及周围的行
  • 其实.ts文件会更有帮助
  • 我认为我错过了理解方法:我认为 .qm 文件就像字典一样为我完成所有工作:(,.qm 文件应该包含我所有的翻译字符串,对吗?

标签: c++ qt translation


【解决方案1】:

关于您的最新评论:

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

为此,您需要以下步骤:

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

有使用翻译的教程here

【讨论】:

  • 感谢您的回复,我在 Windows 下并且正在使用 QtCreator,那么我该如何执行第 3、4 和 5 步?对不起,我是新手。
  • 如果你的 Qt 的二进制文件夹(或 %QTDIR%\bin)被添加到你的 PATH-Variable 中,你可以在指定的位置打开命令行(例如,在 Qt 中右键单击 sources 文件夹项目中的创建者并选择“在此处打开命令窗口”或类似的内容)并输入命令
  • 我成功地从 .ts 生成了我的 qt_fr.qm 并运行了我的应用程序:只有 qApp-&gt;translate 有效,tr 无效
  • @TimMeyer:我敢肯定,在最后第二步中,您的意思是使用 lrelease 从 QT Linguist 生成 .qm 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2023-03-04
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多