QT翻译的使用及避坑指南 |
您所在的位置:网站首页 › 失败如何翻译 › QT翻译的使用及避坑指南 |
一、简介
使用翻译的好处 1、qt 在使用msvc编译器时,中文显示乱码,使用翻译可以有效解决 2、界面上的文字提示经常需要改变,只需要重新发布一个翻译文件即可,无需改动源码 二、翻译流程1、配置:项目pro加入TRANSLATIONS TRANSLATIONS += xxx_zh.ts \ xxx_en.ts2、需要翻译的文字需要用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"));4、如何翻译复数? 如:The camera 1 is not connected The camera 2 is not connected 方案1:改为 %n QMessageBox::warning(this, tr("Camera"), tr("The camera %n is not connected", "", m_cameraID), QMessageBox::Ok);上述代码的 tr() 函数,第一个参数是实际展示的文本,变量用 %n表示,就好比 %1、%2等之类的。book 的复数形式用括号括起来,翻译之后就会根据数来显示不同的形式;第二个参数是注释用的,这里面写不写看你自己,反正是给翻译人员看的;第三个就是这个变量 n。
方案2:改为%1 %2 %3 方案1对1个复数有效,多个就没办法了,如1-1,1-2,2-1 QMessageBox::warning(this, tr("Camera"), tr("The camera %1-%2 is not connected").arg(111).arg(222), QMessageBox::Ok);
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |