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

2021-08-26 02:01:16 字數 1735 閱讀 7218

最近比較懶,公司的事情忙完後,在家也就是看看《game engine architecture》,好久沒有寫部落格了,總算遭到報應了,昨晚腹瀉,發燒,冷汗,今天一天班都沒上,於是,閒話少說,還是寫篇部落格吧.......

在不久以前,軟體還是由一幫根本不知道世界上存在其他語言的美國人製作的,那時候他們只用ascii編碼去寫軟體。然後當他們發現世界上還有其他語種的人也需要使用軟體,並且也有很大市場以後,出現了多位元組的解決方案來解決字串的國際化問題,但是那是段相當恐怖的日子。再

然後,我們有了unicode,一切就簡單了很多。

假如乙個軟體只支援中文,那麼簡單的使用unicode的中文去表示ui中的所有字串就好了,但是要支援多國語言呢?具

體說來怎麼樣才能方便的在不同語言中進行切換呢?

qt的強大程度在很多方面都遠超乙個framework應該呆的範圍,基本上是乙個強大的跨平台解決方案,其中,對於多國語言,qt的解決方案也是我見過的最好的。

對於qt的字串來說,分成兩種情況:

1.在qt designer中拖放控制項時,控制項上的字串。比如,我擺乙個label上去,叫做hello world。注意的是需要在translatable屬性上打勾(預設就是打勾的),表示可以翻譯。

2.在**裡面直接指定的字串,需要用tr()包含該字串。比如手動建立乙個label,顯示hello world again!

qlabel *label = new qlabel(this);

label->settext(tr("hello world again!"));

label->setgeometry(100, 100, 200, 25);

此時整體程式的顯示內容如下:

此時,通過qt選單中的(用了qt的qt visual studio add-in)的create new tranlation file,

比如,這裡我建了乙個中文的檔案,叫做qt_linguist_test_zh.ts,在vs中雙擊此程式,會用qt linguist開啟此檔案,接下來的就簡單了:

分別在左邊選擇字串所在的context,然後在strings裡面會列出所有可以進行翻譯的字串,在sources and forms中甚至還能顯示出上下文,幫助你進行翻譯。

在下面的translation中寫上你想翻譯的內容,儲存好。

在vs中,用lrelease解析(編譯?)此檔案

此時,可以在工程目錄下看到乙個叫做qt_linguist_test_zh.qm的檔案,就是剛剛生成的檔案。在**中使用該多國語言的檔案實在是簡單了,只需要下面幾行**:

qtranslator translator;

translator.load("qt_linguist_test_zh.qm");

從此以後,所有的字串都會按照你翻譯過的來顯示:

小結:qt的多國語言支援主要**於qt linguist這個翻譯程式,按照qt本身的設計,這個程式甚至是交由翻譯人員去使用的,和程式設計師無關,程式方面只需要記得在**裡面的字串加tr()就行,然後通過lupdate(在上面的例子中用qt visual studio add-in來完成了)去提取**中所有可以翻譯的字串,生成ts檔案,然後把ts檔案交給翻譯人員使用即可。其方便性在於不僅是程式設計師使用方便,還從軟體開發流程上讓各個環節都有合適易用的工具去高效的完成各自工作......作為程式設計師,開發乙個qt的多國語言支援的軟體幾乎沒有任何額外的負擔..............

九天雁翎(jtianling) -- www.jtianling.com

字串的多國語言支援解決方案 通用解決方案篇

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!write by 九天雁翎 jtianling blog.jtianling.com 討論新聞組 庫 豆瓣 在用qt的時候,自然是使用qt的解決方案,簡單易用,參考 字串的多國語言支援解決方案 qt篇 在不需要跨平台開發iphone的應用時,自然使...

程式實現多國語言的動態切換解決方案

實現思想 傳統的做法是把所有的資源都放到動態庫中,一種語言乙個動態庫,程式執行的時候通重載入不同的動態庫來實現多語言功能。這樣做的缺點是不能動態切換語言,如果更換語言後必須重新啟動軟體。當然,沒有人會需要經常的切換語言玩兒,但是採用動態庫的方法,如果程式需要修改資源的話,就要更新所有的動態庫,這是乙...

使用全域性雜湊表實現字串變數的多國語言

1.建立乙個全域性的hash表 initialization g hash thashedstringlist.create finalization freeandnil g hash 2.往全域性hash表裡面寫入 ini檔案的指定小節 字串定義集中放在乙個小節裡面 讀取到的所有行,每次更選擇語...