一、简介
使用翻译的好处
1、qt 在使用msvc编译器时,中文显示乱码,使用翻译可以有效解决
2、界面上的文字提示经常需要改变,只需要重新发布一个翻译文件即可,无需改动源码
二、翻译流程
1、配置:项目pro加入TRANSLATIONS
TRANSLATIONS += xxx_zh.ts \
xxx_en.ts
2、需要翻译的文字需要用tr()包括起来
ui->ribbonTabWidget->addTab(tr("Project"));
ui->ribbonTabWidget->addTab(tr("Setting"));
ui->ribbonTabWidget->addTab(tr("Basic tools"));
ui->ribbonTabWidget->addTab(tr("Advanced tools"));
3、更新: 打开cmd运行lupdate xxx.pro,从源代码中提取要翻译的文本
注意:必须使用qt下的cmd
4、翻译:使用翻译工具Qt Linguist,打开ts文件,并完成翻译工作
5、发布:Qt Linguist 文件=》发布,生成xxx.qm
6、main.cpp中加载翻译文件
QTranslator appTranslator;
appTranslator.load(app_path + "/translations/czvision_zh.qm");
app.installTranslator(&appTranslator);
三、常见问题
1、QDialogButtonBox翻译不生效问题
这是qt的一个bug,https://bugreports.qt.io/browse/QTBUG-39180
解决方案如下:编辑src/qttranslations/translations/qt_zh_CN.ts,把QDialogButtonBox 替换为 QPlatformTheme, 重新发布即可
2、多个pro工程,多翻译问题,定义一个翻译器不生效
解决办法:必须定义多个翻译器,不能共用一个
QTranslator qtTranslator;
QTranslator appTranslator;
QTranslator coreTranslator;
qtTranslator.load(app_path + "/translations/qt_zh_CN.qm");
appTranslator.load(app_path + "/translations/czvision_zh.qm");
coreTranslator.load(app_path + "/translations/CZCore_zh.qm");
app.installTranslator(&qtTranslator);
app.installTranslator(&appTranslator);
app.installTranslator(&coreTranslator);
3、只有继承QObject的类才能使用tr()函数,如何翻译非 Qt 类?
解决办法:使用QCoreApplication::tr(),
splash.showProgressMessage(1, QCoreApplication::tr("Load config file"));