我有一个像这样的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版本以检查翻译是否存在于最新版本中,或者自行编码更改.一些有用的链接:here和here.