我有这样的QMessageBox:

QMessageBox::question(this, tr("Sure want to quit?"),
    tr("Sure to quit?"), QMessageBox::Yes | QMessageBox::No);

如何翻译是/否字?由于没有地方放置tr()

最佳答案

抱歉,我来晚了,但是有解决您问题的最佳方法。

正确的方法是不要手动转换这些字符串。 Qt已经在translation文件夹中包含翻译。

这个想法是加载Qt中包含的翻译(qm文件)。

我想向您展示代码,以根据您的语言环境翻译消息:

#include <QDebug>
#include <QtWidgets/QApplication>
#include <QMessageBox>
#include <QTranslator>
#include <QLibraryInfo>

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

    QApplication app(argc, argv);

    QTranslator qtTranslator;
    if (qtTranslator.load(QLocale::system(),
                "qt", "_",
                QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
    {
        qDebug() << "qtTranslator ok";
        app.installTranslator(&qtTranslator);
    }

    QTranslator qtBaseTranslator;
    if (qtBaseTranslator.load("qtbase_" + QLocale::system().name(),
                QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
    {
        qDebug() << "qtBaseTranslator ok";
        app.installTranslator(&qtBaseTranslator);
    }

    QMessageBox::question(0, QObject::tr("Sure want to quit?"), QObject::tr("Sure to quit?"), QMessageBox::Yes | QMessageBox::No);

    return app.exec();
}

笔记:
  • 您可以加载其他位置,以创建新的QLocale对象并使用void QLocale::setDefault(const QLocale & locale)进行设置。 Example
  • 我正在加载qt_*.qmqtbase_*.qm,因为自Qt 5.3起,翻译被拆分为不同的文件。实际上,对于QMessageBox,翻译后的字符串在qtbase_*.qm中。加载两者都是一个好习惯。 More info。还有更多的qm文件,例如qtquickcontrols_*.qmqtmultimedia_*qm。根据您的要求加载所需的。
  • 也许您可以找到您要翻译的文本,但Qt尚未翻译该文本。在这种情况下,建议您升级Qt版本,以检查翻译是否存在于最新版本中,或者自己编写更改。一些有用的链接:herehere
  • 关于c++ - 如何翻译qmessagebox中的按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31533019/

    10-13 07:04