c++ - 如何翻译 qmessagebox 中的按钮?

标签 c++ qt messagebox language-translation

我有一个像这样的 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/

相关文章:

c++ - 使用 std::cin.getline() 输入一个 char 数组,无法读取整数

c++ - 以编程方式按下Qt中的键盘按钮

c++ - 使用模板在 C++ 中实现堆栈

c++ - 如何让#include <>在标准系统目录的子文件夹中查找?

c++ - 在 Qt Widgets 应用程序中,无法在重载的 `QSpinBox` 中的 `setValue` 之后更改 `paintEvent` 的值?

c++ - 如何访问 qt 上的父窗口小部件?

c++ - 如何在 C++ 中创建带有用户定义按钮的消息框?

java - 如何将焦点设置在 SWT MessageDialog 或 MessageBox 中的文本而不是按钮上?

c++ - 如何在 Mac 上用 C++ 显示模态消息框?

c++ - 类内的C++链接