我有这样的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();
}
笔记:
void QLocale::setDefault(const QLocale & locale)
进行设置。 Example。 qt_*.qm
和qtbase_*.qm
,因为自Qt 5.3起,翻译被拆分为不同的文件。实际上,对于QMessageBox
,翻译后的字符串在qtbase_*.qm
中。加载两者都是一个好习惯。 More info。还有更多的qm
文件,例如qtquickcontrols_*.qm
或qtmultimedia_*qm
。根据您的要求加载所需的。 关于c++ - 如何翻译qmessagebox中的按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31533019/