Nic*_* Yu 15 c++ qt messagebox language-translation
我QMessageBox喜欢这样的:
QMessageBox::question(this, tr("Sure want to quit?"),
tr("Sure to quit?"), QMessageBox::Yes | QMessageBox::No);
Run Code Online (Sandbox Code Playgroud)
我怎么能翻译是/否单词?既然没有地方可以放置tr()?
Tar*_*rod 14
对不起,我迟到了,但有一种解决问题的最佳方法.
正确的方法不是手动翻译这些字符串.Qt已经包含该translation文件夹中的翻译.
想法是加载qmQt中包含的翻译(文件).
我想向您展示一个代码,以根据您的语言环境翻译邮件:
#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();
}
Run Code Online (Sandbox Code Playgroud)
笔记:
void QLocale::setDefault(const QLocale & locale).例子.qt_*.qm,qtbase_*.qm因为从Qt 5.3开始,翻译被分割成不同的文件.事实上,对于QMessageBox翻译的字符串是在qtbase_*.qm.加载两者都是一种很好的做法.更多信息.有更多的qm文件,如qtquickcontrols_*.qm或qtmultimedia_*qm.根据您的要求加载所需的.dem*_*lus 10
这是这样做的方法:
QMessageBox messageBox(QMessageBox::Question,
tr("Sure want to quit?"),
tr("Sure to quit?"),
QMessageBox::Yes | QMessageBox::No,
this);
messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
messageBox.setButtonText(QMessageBox::No, tr("No"));
Run Code Online (Sandbox Code Playgroud)
并显示消息:
messageBox.exec();
Run Code Online (Sandbox Code Playgroud)
更新:我发现在D:\Qt\Qt5.7.0\5.7\Src\qttranslations\translations\qtbase_**.ts已经有 QPlatformTheme 的翻译源文件(可惜没有qtbase_zh_CN.ts),你也可以复制一个qtbase_**.ts 并立即修改它。如果你和我一样是中国人,感谢wisaly(github),他已经把qtbase翻译成中文了,这里是我在github上的fork。
阅读Qt源代码后,我解决了这个问题。(我的Qt版本是Qt 5.7.0,安装在C:\Qt\Qt5.7.0 with Src)
打开C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\gui\gui.pro,插入如下一行,生成中文翻译文件:
TRANSLATIONS += gui_zh.ts
Run Code Online (Sandbox Code Playgroud)
打开gui.pro与Qt Creator的项目并使用lupdate生成一个新的可爱的命名翻译源文件gui_zh.ts。
使用 Linguist打开qui_zh.ts并翻译QPlatformTheme项。这里仅以翻译“&Yes”为例:

翻译后,使用lrelease生成二进制翻译文件(gui_zh.qm)。
最后,将翻译文件(gui_zh.qm)加载到您的 QApplication 中,QMessageBox 的按钮文本就可以了。
我的结果是?
QMessageBox::information(this,
QString("??"),
QString("????"),
QMessageBox::Yes | QMessageBox::No
);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您还可以使用此方法通过将翻译添加到C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\widgets\widgets.pro来解决某些 QWidget 的正确上下文菜单的转换问题,例如 QTextEdit 。
| 归档时间: |
|
| 查看次数: |
8764 次 |
| 最近记录: |