Qt国际化翻译(中英切换)步骤:可子界面翻译
效果顯示:
1、英文翻譯:
2、中文翻譯:
步驟
1、用一個函數用來設置控件的文本信息,因為每次切換語言,就要重新設置控件的文本信息,所以我這里用了一個FunSetText()函數封裝(FunSetText()在代碼部分有顯示,這里只是演示如何用tr("")包裹文本),并且文本信息用tr(“”);如QPushButton p要設置文本
p->setText(tr("Info")); //用tr("")設置,這是重點,不這樣設置到時候翻譯的時候識別不出來2、pro文件中添加 ,添加如下語句。這條語句是為了生成兩個.ts文件。
TRANSLATIONS = English.ts Chinese.ts3、點擊Qt工程中的更新翻譯,如下圖所示,更新翻譯之后,在你的當前路徑下會有兩個.ts文件,如果沒有生成可以是pro文件中沒有添加TRANSLATIONS = English.ts Chinese.ts或者是在其他路徑:
生成兩個.ts文件:
4、打開QT語言家(如果你的電腦沒有裝語言家則沒有),找到自己編譯相對應的語言家版本,以管理員的方式打開,這樣更穩定。
5、英–中翻譯:如果你要翻譯的文本沒有用tr("")這樣是無法識別的。下圖是打開語言家后的界面。
5.1、選擇你剛剛生成的.ts文件進行翻譯。這里先選擇Chinese.ts(也可以一次性同時選擇兩個ts文件打開,這樣我們的翻譯的速度就快很多)
5.2、按照步驟設置翻譯的內容(這里提及一下,相同的翻譯內容設置一次就可以了,當你保存之后再次載入他就能識別)
5.3、當你設置完所有的翻譯之后,發布生成qm文件-點擊文件下的發布,發布之后會在.ts文件的路徑下生成.qm文件
6、英-英翻譯;其實相同的語言翻譯就把翻譯內容和要翻譯的問題內容一致即可。因為英-中的步驟我已經寫了,英-英的和中-中的翻譯一樣的步驟就可以,這里就不多加演示了。
7、最后我們就生成了兩個.qm文件了
代碼:
1、聲明一個QTranslator類的變量
QTranslator mTranslator;2、FunSetText用來給控件設置文本信息,因為每次翻譯都需要更新控件文本的內容,所有用一個函數封裝起來更方便。
void MainWindow::FunSetText() { //注意:ui更新要在前面,不然內容會被清空,具體的可以去ui的.h文件中看看retranslateUi()//更新ui中控件的文本信息ui->retranslateUi(this); //更新代碼中的文本信息mpSystemMenu->setTitle(tr("System"));mpLanguage->setTitle(tr("Language"));mpSysEnableAction->setText(tr("System Enable"));mpSysCheckAction->setText(tr("System Check"));mpSysExitAction->setText(tr("Exit"));mpLanguageEnglish->setText(tr("English"));mpLanguageChinese->setText(tr("Chinese"));ui->pushButton->setText(tr("ChangeWidget")); }3、語言改變事件
protected:void changeEvent(QEvent *event); void MainWindow::changeEvent(QEvent *event) {switch (event->type()){case QEvent::LanguageChange:FunSetText(); break;default:QWidget::changeEvent(event);} }4、點擊了中英文翻譯
//點擊切換成英文connect(mpLanguageEnglish, &QAction::triggered,this,[=](){mTranslator.load(":/English.qm");//下面這條語句會觸發語言改變事件,調用FunSetText()函數qApp->installTranslator(&mTranslator); //再加載完翻譯文件之后更新文本信息});//點擊切換成中文connect(mpLanguageChinese, &QAction::triggered,this,[=](){mTranslator.load(":/Chinese.qm");qApp->installTranslator(&mTranslator);});到此就ok了
注意事項:
1、每次新增或者刪除了要翻譯的內容,要翻譯的時候記得過更新翻譯;
2、翻譯的本質是重新設置文本,所以向QMessageBox這個點擊的時候生成的控件可以不需要提供更新接口,直接加tr()設置即可。
3、調用ui->retranslateUi(this)之后再調用FunSetText()重新設置文本,因為ui->retranslateUi(this)用給ui上拉的控件重新設置文本信息,可能會清空文本。
4、加載完翻譯文本之后再調用FunSetText()重新設置文本。等翻譯文件加載完之后再重新設置才能生效。
5、QT翻譯失效問題
6、翻譯的本質是,加載完翻譯文本之后,當遇到這個用tr()包裹的內容,會和qm中的內容進行一個查找,如果查找到了這個內容,就按照設置的翻譯內容翻譯,如果沒有就不翻譯。
程序網盤
為了方便大家使用,我共享在網盤上了,有想要的可以去拿。
第一次完成這么長的一篇文章,喜歡的小伙伴給個支持吧。
提取碼:wzds
網盤鏈接
總結
以上是生活随笔為你收集整理的Qt国际化翻译(中英切换)步骤:可子界面翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D结构光原理及应用浅析
- 下一篇: 【免费-开源-简洁】天若OCR文字识工具