You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何QApplication::tr未翻译"Open"?与translate函数差异解析

为什么QApplication::tr("Open")未被翻译?

先看你提供的代码:

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QTranslator translator;
    const QString dir = "/usr/share/qt6/translations";

    if (translator.load("qt_ru", dir)) {
        QApplication::installTranslator(&translator);
        qDebug() << QApplication::translate("QShortcut", "Open");
        qDebug() << QApplication::tr("Open");
    }

    ...
}

输出结果:

"Открыть"
"Open"

原因很明确:Qt的翻译系统靠上下文(Context)+ 源字符串的组合匹配翻译条目,二者必须完全对应才能生效。

  • QApplication::translate("QShortcut", "Open")明确指定了上下文为"QShortcut",而你加载的qt_ru.qm翻译文件里,正好存在QShortcut上下文对应的"Open"俄语翻译条目,因此能正确输出翻译结果。
  • QApplication::tr("Open")未指定上下文,会使用默认上下文(在main这类全局函数中,默认上下文通常是当前函数名或全局上下文),但qt_ru.qm里没有这个默认上下文对应的"Open"翻译条目,所以直接返回原字符串。

如果想用tr函数实现同样的翻译效果,需要显式指定上下文,比如写成QApplication::tr("Open", "QShortcut"),或者调用QShortcut::tr("Open")(QShortcut作为QObject子类,它的tr函数默认上下文就是QShortcut)。

内容的提问来源于stack exchange,提问作者AvidCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 23:47:30