乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      字符串的多國(guó)語(yǔ)言支持解決方案 Qt篇

       just_person 2012-04-05

      最近比較懶,公司的事情忙完后,在家也就是看看《Game Engine Architecture》,好久沒有寫博客了,總算遭到報(bào)應(yīng)了,昨晚腹瀉,發(fā)燒,冷汗,今天一天班都沒上,于是,閑話少說,還是寫篇博客吧.......

          在不久以前,軟件還是由一幫根本不知道世界上存在其他語(yǔ)言的美國(guó)人制作的,那時(shí)候他們只用ASCII編碼去寫軟件。然后當(dāng)他們發(fā)現(xiàn)世界上還有其他語(yǔ)種的人也需要使用軟件,并且也有很大市場(chǎng)以后,出現(xiàn)了多字節(jié)的解決方案來解決字符串的國(guó)際化問題,但是那是段相當(dāng)恐怖的日子。再然后,我們有了Unicode,一切就簡(jiǎn)單了很多。
          假如一個(gè)軟件只支持中文,那么簡(jiǎn)單的使用unicode的中文去表示UI中的所有字符串就好了,但是要支持多國(guó)語(yǔ)言呢?具體說來怎么樣才能方便的在不同語(yǔ)言中進(jìn)行切換呢?

          Qt的強(qiáng)大程度在很多方面都遠(yuǎn)超一個(gè)framework應(yīng)該呆的范圍,基本上是一個(gè)強(qiáng)大的跨平臺(tái)解決方案,其中,對(duì)于多國(guó)語(yǔ)言,Qt的解決方案也是我見過的最好的。

      對(duì)于Qt的字符串來說,分成兩種情況:
      1.在Qt Designer中拖放控件時(shí),控件上的字符串。比如,我擺一個(gè)label上去,叫做hello world。注意的是需要在translatable屬性上打勾(默認(rèn)就是打勾的),表示可以翻譯。
       


      2.在代碼里面直接指定的字符串,需要用tr()包含該字符串。比如手動(dòng)創(chuàng)建一個(gè)label,顯示Hello World Again!
        QLabel *label = new QLabel(this);
        label->setText(tr("Hello World Again!"));
        label->setGeometry(100, 100, 200, 25);

      此時(shí)整體程序的顯示內(nèi)容如下:



      此時(shí),通過Qt菜單中的(用了qt的Qt Visual Studio Add-in)的Create New Tranlation File,


      比如,這里我建了一個(gè)中文的文件,叫做qt_linguist_test_zh.ts,在VS中雙擊此程序,會(huì)用Qt Linguist打開此文件,接下來的就簡(jiǎn)單了:


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

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


      此時(shí),可以在工程目錄下看到一個(gè)叫做qt_linguist_test_zh.qm的文件,就是剛剛生成的文件。在代碼中使用該多國(guó)語(yǔ)言的文件實(shí)在是簡(jiǎn)單了,只需要下面幾行代碼:
          QApplication app(argc, argv);

          QTranslator translator;
          translator.load("qt_linguist_test_zh.qm");
          app.installTranslator(&translator);

      從此以后,所有的字符串都會(huì)按照你翻譯過的來顯示:


      小結(jié):
      Qt的多國(guó)語(yǔ)言支持主要來源于Qt Linguist這個(gè)翻譯程序,按照Qt本身的設(shè)計(jì),這個(gè)程序甚至是交由翻譯人員去使用的,和程序員無關(guān),程序方面只需要記得在代碼里面的字符串加tr()就行,然后通過lupdate(在上面的例子中用Qt Visual Studio Add-in來完成了)去提取代碼中所有可以翻譯的字符串,生成ts文件,然后把ts文件交給翻譯人員使用即可。其方便性在于不僅是程序員使用方便,還從軟件開發(fā)流程上讓各個(gè)環(huán)節(jié)都有合適易用的工具去高效的完成各自工作......作為程序員,開發(fā)一個(gè)Qt的多國(guó)語(yǔ)言支持的軟件幾乎沒有任何額外的負(fù)擔(dān)..............


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

      九天雁翎(JTianLing) -- www.

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多