Qt QTranslator的使用


一、怎樣去掉ui文件

     1、為什么要去掉ui文件

       項目開發不建議使用.ui文件,因為.ui文件使部分代碼不可見,同時當多人同時開發時,合並分支會出現許多沖突。

      2、去掉ui文件的方法

     使用QtDesigner打開ui文件,點擊“窗體“菜單下的”查看代碼“項,會彈出ui文件對應的源文件;

      將其中的包含文件復制到引用ui文件的源文件中;

      將Ui_***類中的成員變量,復制到引用ui文件的頭文件的類中, 將setupUi函數、retranslateUi函數復制為該類的成員函數,並復制函數體;

      在類的構造函數中將”ui.setupUi( this )“的調用改為” setupUi( this )“;

      

二、QTranslator的使用

     1、生成翻譯文件

      項目名上右鍵菜單,選擇”create new translation file“;項目中會添加一個以”.ts“為后綴的文件,例如”testtranslator_zh.ts“;

      使用Qt Linguist打開該文件,就可以為指定的字符串設置譯文;

      翻譯完成后,點擊”文件“菜單下的”發布“項,就會生成.qm文件;

      2、載入翻譯文件

      在應用程序啟動時載入翻譯文件,一般放在main函數的開始位置;

1 QApplication a(argc, argv); 2  
3 //加載語言包
4 QTranslator qtTranslator; 5 qtTranslator.load( "testtranslator_zh"); 6 a.installTranslator( &qtTranslator );

     3、update 翻譯文件

      在應用程序代碼中修改后添加某些翻譯字符串后,“.ts”文件不會自動更新,需要在相應的“.ts”文件的右鍵菜單中點擊“lupdate”項,才會更新。

      注意:翻譯文件的加載位置必須在界面實例化之前完成

注意:在程序中每一個使用tr()函數的字符創都會顯示到Qt Linguist中,另外tr()的作用域修飾很重要,因為Qt Linguist會根據該作用域設置不同的上下文,比如源代碼中只存在TestTranslator::tr("**")和TestTranslatorClass::tr("**")兩種類型的字符串,那么Qt Linguist會生成兩個上下文:TestTranslator和TestTranslatorClass,用TestTranslator修飾的字符串會出現在TestTranslator上下文中,用TestTranslatorClass修飾的字符串會出現在TestTranslatorClass上下文中,方便字符串的管理。

 

三、Qt標准對話框中的翻譯

     1、安裝qt標准的翻譯文件

      在Qt安裝目錄中搜索“qt_zh_CN.qm”文件和“qt_zh_CN.ts”文件,復制到項目目錄;

1 QTranslator qtTranslatorStandard; 2 qtTranslatorStandard.load("qt_zh_CN"); 3 a.installTranslator(&qtTranslatorStandard);

2、修改ts文件

     ** QDialogButtonBox的確定、取消按鈕沒有正常翻譯

     解決方法:在“qt_zh_CN.ts”里面手動添加:

 1 <context>  
 2     <name>QPlatformTheme</name>  
 3     <message>  
 4         <location filename="../src/widgets/qdialogbuttonbox.cpp" line="+42"/>  
 5         <location line="+18"/>  
 6         <source>OK</source>  
 7         <translation>確定</translation>  
 8     </message>  
 9     <message>  
10         <location line="+54"/>  
11         <source>Cancel</source>  
12         <translation>取消</translation>  
13     </message>  
14 ..... 15 </context>

 ** QMessageBox中的QMessageBox::Yes, QMessageBox::No沒有正常翻譯

      解決方法:上述context中再添加:

1 <message>
2         <source>&Yes</source>
3         <translation>是</translation>
4     </message>
5     <message>
6         <source>&No</source>
7         <translation>否</translation>
8     </message>

注意:在xml中<source>&Yes</source>的寫法是<source>&amp;Yes</source>

    3、保存並發布修改后的翻譯文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM