最近比較懶,公司的事情忙完后,在家也就是看看《Game Engine Architecture》,好久沒有寫博客了,總算遭到報(bào)應(yīng)了,昨晚腹瀉,發(fā)燒,冷汗,今天一天班都沒上,于是,閑話少說,還是寫篇博客吧....... 在不久以前,軟件還是由一幫根本不知道世界上存在其他語言的美國人制作的,那時候他們只用ASCII編碼去寫軟件。然后當(dāng)他們發(fā)現(xiàn)世界上還有其他語種的人也需要使用軟件,并且也有很大市場以后,出現(xiàn)了多字節(jié)的解決方案來解決字符串的國際化問題,但是那是段相當(dāng)恐怖的日子。再然后,我們有了Unicode,一切就簡單了很多。 假如一個軟件只支持中文,那么簡單的使用unicode的中文去表示UI中的所有字符串就好了,但是要支持多國語言呢?具體說來怎么樣才能方便的在不同語言中進(jìn)行切換呢? Qt的強(qiáng)大程度在很多方面都遠(yuǎn)超一個framework應(yīng)該呆的范圍,基本上是一個強(qiáng)大的跨平臺解決方案,其中,對于多國語言,Qt的解決方案也是我見過的最好的。 對于Qt的字符串來說,分成兩種情況: 1.在Qt Designer中拖放控件時,控件上的字符串。比如,我擺一個label上去,叫做hello world。注意的是需要在translatable屬性上打勾(默認(rèn)就是打勾的),表示可以翻譯。 ![]() 2.在代碼里面直接指定的字符串,需要用tr()包含該字符串。比如手動創(chuàng)建一個label,顯示Hello World Again! QLabel *label = new QLabel(this); label->setText(tr("Hello World Again!")); label->setGeometry(100, 100, 200, 25); 此時整體程序的顯示內(nèi)容如下: ![]() 此時,通過Qt菜單中的(用了qt的Qt Visual Studio Add-in)的Create New Tranlation File, ![]() 比如,這里我建了一個中文的文件,叫做qt_linguist_test_zh.ts,在VS中雙擊此程序,會用Qt Linguist打開此文件,接下來的就簡單了: ![]() 在下面的translation中寫上你想翻譯的內(nèi)容,保存好。 在VS中,用lrelease解析(編譯?)此文件 ![]() QApplication app(argc, argv); QTranslator translator; translator.load("qt_linguist_test_zh.qm"); app.installTranslator(&translator); ![]() 小結(jié): Qt的多國語言支持主要來源于Qt Linguist這個翻譯程序,按照Qt本身的設(shè)計(jì),這個程序甚至是交由翻譯人員去使用的,和程序員無關(guān),程序方面只需要記得在代碼里面的字符串加tr()就行,然后通過lupdate(在上面的例子中用Qt Visual Studio Add-in來完成了)去提取代碼中所有可以翻譯的字符串,生成ts文件,然后把ts文件交給翻譯人員使用即可。其方便性在于不僅是程序員使用方便,還從軟件開發(fā)流程上讓各個環(huán)節(jié)都有合適易用的工具去高效的完成各自工作......作為程序員,開發(fā)一個Qt的多國語言支持的軟件幾乎沒有任何額外的負(fù)擔(dān)..............
|
|