如何翻译快捷键

how to translate key shortcut

我不能强迫 QKeySequence::toString() 到 return 翻译的快捷方式表示,尽管它的文档表明它应该工作。文档说:“字符串、“Ctrl”、“Shift”等在“QShortcut”上下文中使用 QObject::tr() 进行翻译。但我不完全确定快捷上下文是什么意思。我可能做错了什么...

这是我的例子。为了让它工作,我需要将 qtbase_es.qm 从 Qt 安装目录复制到我的项目构建目录。正确加载翻译后,菜单中的操作会正确显示“Action Control+Intro”,这是“Action Ctrl+Enter”快捷方式的西班牙语翻译。但是主要 window 上的工具提示仍然是“操作 (Ctrl+Enter)”。我希望它是“Action (Control+Intro)”,就像在菜单中一样。我做错了什么?

#include <QAction>
#include <QApplication>
#include <QDebug>
#include <QMainWindow>
#include <QMenuBar>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QTranslator spanish;
    qDebug() << spanish.load("qtbase_es.qm"); // should return true if correctly loaded
    QApplication a(argc, argv);
    QApplication::installTranslator(&spanish);
    QMainWindow w;
    auto menu = new QMenu("Menu");
    auto action = menu->addAction("Action");
    action->setShortcutContext(Qt::ApplicationShortcut);
    action->setShortcut(Qt::CTRL | Qt::Key_Enter);
    w.menuBar()->addMenu(menu);
    w.show();
    QApplication::processEvents(); // I also tried this line but it is useless...
    w.setToolTip(QString("%1 (%2)").arg(action->text(), action->shortcut().toString()));
    qDebug() << action->shortcut().toString(); // WRONG: returns Ctrl+Enter but I expect Control+Intro
    return a.exec();
}

QShortcut::toString有一个SequenceFormat参数,默认为ProtableText。该格式的文档指出,可移植格式适用于例如写入文件。

本机格式用于向用户显示,只有此格式执行翻译。

尝试:

qDebug() << action->shortcut().toString(QKeySequence::NativeText);