c – 如何翻译qmessagebox中的按钮?

我有一个像这样的QMessageBox:

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

我怎么能翻译是/否单词?既然没有地方放置tr()?

解决方法:

对不起,我迟到了,但有一种解决问题的最佳方法.

正确的方法不是手动翻译这些字符串. Qt已在翻译文件夹中包含翻译.

想法是加载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 _ * .qm和qtbase _ * .qm,因为自Qt 5.3以来,翻译被拆分在不同的文件中.实际上,对于QMessageBox,翻译的字符串在qtbase _ * .qm中.加载两者都是一种很好的做法. More info.还有更多的qm文件,如qtquickcontrols _ * .qm或qtmultimedia_ * qm.根据您的要求加载所需的.
>也许你可以找到你试图翻译的文本尚未被Qt翻译.在这种情况下,我建议您升级Qt版本以检查翻译是否存在于最新版本中,或者自行编码更改.一些有用的链接:herehere.

上一篇:c – 在QmessageBox中显示图像


下一篇:java – GWT中的MessageBox