日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

字符串的多國語言支持解決方案 Qt篇

 just_person 2012-04-05

最近比較懶,公司的事情忙完后,在家也就是看看《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打開此文件,接下來的就簡單了:


分別在左邊選擇字符串所在的context,然后在Strings里面會列出所有可以進(jìn)行翻譯的字符串,在Sources and Forms中甚至還能顯示出上下文,幫助你進(jìn)行翻譯。
在下面的translation中寫上你想翻譯的內(nèi)容,保存好。

在VS中,用lrelease解析(編譯?)此文件


此時,可以在工程目錄下看到一個叫做qt_linguist_test_zh.qm的文件,就是剛剛生成的文件。在代碼中使用該多國語言的文件實(shí)在是簡單了,只需要下面幾行代碼:
    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)..............


原創(chuàng)文章作者保留版權(quán) 轉(zhuǎn)載請注明原作者 并給出鏈接

九天雁翎(JTianLing) -- www.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多