QT翻译的使用及避坑指南

一、简介

使用翻译的好处

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"));

猜你喜欢

转载自blog.csdn.net/qq_40602000/article/details/123881731