日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT翻译的使用及避坑指南

發布時間:2023/12/10 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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"));

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翻译的使用及避坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。