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);?
總結
以上是生活随笔為你收集整理的QT翻译的使用及避坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑开机速度慢?新手试试以下这几个小技巧
- 下一篇: 传送,条件加速 Learn Unreal