開發一個軟件的時候有時候會遇到需要進行國際化的操作,也就是說一些顯示可能因爲需求而要改爲另一種語言,像一些常見的軟件是會提供一些語言包,然後再軟件中加載就可以更換顯示語言了,今天這一篇講的就是這個,而且暫時針對VS下開發Qt而言,如果在Qt Creator上開發的話,可能會有不同,但是大致還是一樣的。
在VS上開發Qt的項目的話是,Qt的VS插件是很有用的,現在我們的國際化操作也是要依賴這一個小插件的,這裏以VS2013爲例(VS2015基本上是一樣的),VS2013安裝好Qt的插件之後位於下圖的位置:
待我們寫好一個Qt項目之後就可以使用插件生成一個翻譯文件。
簡單寫一個超級簡單的空白界面,我只設置標題,代碼如下:
this->setWindowTitle(tr("bearoom"));
這裏要說明的就是需要翻譯的字符串是要用tr()包裝起來的,如上面的tr("bearoom"),然後運行一下確認是英文沒錯吧:
接下來就要生成一個翻譯文件啦,就是直接點第一張圖片的插件的選項,然後會彈出一個窗口選擇語言和文件名:
這裏我選擇中文簡體,中國的,確定之後就會在工程下生成這個文件:
然後在VS打開該文件,一般會默認用Qt的Linguist打開,如下:
然後就要可以看到我代碼裏面有哪些字符串被tr()包圍着的,然後選擇該字符串,並在下方輸入中文翻譯:
翻譯好了之後我們需要講文件發佈出來,也就是release需要注意這裏不是保存,而是release爲一個qm文件:
release之後可以看到工程目錄下多了一個qm文件:
這個不是在VS中,而是在工程的文件夾下的,然後需要翻譯的時候就加載這個文件即可,加載的代碼如下:
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator *tran = new QTranslator;
tran->load("qt5_ch01_zh.qm");
a.installTranslator(tran);
qt5_ch01 w;
w.show();
return a.exec();
}
然後運行程序的時候就可以看到標題已經被翻譯了
這裏我覺得需要注意的點是寫代碼的時候一定要用英文來寫,包括軟件上顯示的名稱都要用英文來命名比較好,然後需要顯示爲中文的時候就使用這種方法來實現,如果一開始就用中文的話,要把工程轉到Linux下開發的時候就很尷尬了,可能存在編碼問題,因爲VS一般默認是用GB2312來編碼,如果在Linux下用UTF-8的話是可以轉的,但是cpp文件或.h文件就是亂碼了,反而比較麻煩。
不恨天涯行役苦,
只恨西風,吹夢成今古。
明日客程還幾許,
沾衣況是新寒雨。