【qt編程】qt編程 多語言版本發佈 +vs

在 main函數中使用 installTranslator,即可讓程序在啓動時自動判斷語言環境,加載相應語言。

至此,靜態語言切換已經完成,下面要做的是動態切換(即不需要重啓軟件)。

基本步驟:

參考:qt 語言家的使用https://www.cnblogs.com/mzy-google/p/5162118.html

參考教程1:Qt翻譯文件結合VS實現語言切換(多語言國際化)https://blog.csdn.net/u012043391/article/details/76684727

參考教程2:在使用Qt5.8完成程序動態語言切換時遇到的問題

一般步驟:

1、創建新的.ts文件

(1)在vs中的工程右鍵——Creat new translation File

(2)選擇要創建的翻譯文件,即完成.ts文件的創建

2、lupdate .ts文件即可獲取需要翻譯的文本,格式如下:

    <message>
        <location filename="guiforuser.cpp" line="1125"/>
        <location filename="guiforuser.cpp" line="1126"/>
        <source>上頜牙可見與否</source>
        <translation type="unfinished">Upper visible or not</translation>

    </message>

source:保存源字符文本,translation 中放入自己的翻譯

幾個問題:

(1)如何自動識別程序中的文本,需要在qstring前加tr(),纔會自動更新在.ts文件中

(2).ts文件亂碼問題:vs的字符集要與.ts字符集一致,一般vs中自動生成的.ts字符集爲utf-8,那麼也需要將相關的源文件字符集設置爲utf-8:

設置方式爲:選中相應文件——File——Advanced Save Options(高級保存選項)——帶符號utf-8(據有些教程說帶符號的編碼更不容易出錯),這裏注意需要選中相應源文件(.cpp,.h等),否則找不到這個選項,如下所示:

這裏注意每個源文件要單獨設置(我沒有找到同一設置的方法),否則設置一個對其他源文件無效,可能還是有亂碼問題。

編碼一致後,就沒有亂碼的問題了

(3)翻譯文本的寫入:a\可以直接用文本方式打開.ts文件直接在相應位置寫入,b\也可以用Qt Linguist打開進行編輯

3、lrelease,生成.qm文件後加載即可

(1).qm文件的加載代碼如下所示:

 

  1. QTranslator* translator = NULL;  
  2. //qm文件的加載:  
  3. translator = new QTranslator;  
  4. if (translator->load("test_zh.qm"))  
  5.         qApp->installTranslator(translator);  
  6.     }  
  7.     ui.retranslateUi(this); 

(2).qm文件的刪除

 

  1. //qm文件的刪除:  
  2. QTranslator* translator = NULL;   
  3. translator = new QTranslator;  
  4. if (translator->load("test_zh.qm"))  
  5. if (translator != NULL)  
  6.     {  
  7.         qApp->removeTranslator(translator);  
  8.         delete translator;  
  9.         translator = NULL;  
  10.     }  
  11. ui.retranslateUi(this);  

(3)注意:如果源文件語言爲中文,加載.qm文件,設置爲英文後,想要換爲中文的兩種方式:

a\創建一箇中文的qm文件後加載

b\刪除加載的英文文件,但是刪除時需要注意translator要是同一個,將其設爲類的私有變量,需要刪除時刪除,否則,重新定義一個變量,加載同一個.qm文件,也刪除不成功(原因??)

 

幾個問題:

1、動態切換與靜態切換問題

參考:qt多國語言及其動態切換的學習筆記 https://blog.csdn.net/prompty/article/details/51442130

(1)靜態切換:

在main函數中寫上加載翻譯文件語句(在設計文件中也可以,但是要比與ui設計相關的語句先運行)

 

  1. QTranslator *translator = new QTranslator;
  2. if (translator->load("E:/GuiForUser/GuiForUser/guiforuser_en.qm"))
  3. {
  4.   qApp->installTranslator(translator);

(2)動態切換的問題:

在動態切換中,純代碼設計的語句,比如settext語句,加載翻譯文件切換語言之後,settext設計的ui並沒有改變,需要重寫函數,再加載一次。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章