QT國際化

本文提及如何使用QT和QT Linguist來實(shí)現(xiàn)翻譯兜叨,如果你對(duì)所謂動(dòng)態(tài)翻譯感興趣,請(qǐng)移步到其他文章国撵。筆者也推薦一本叫《精通QT4 GUI 編程》的書瓤的,里面第18章有提及動(dòng)態(tài)的(既不用關(guān)閉程序?qū)崿F(xiàn)“一點(diǎn)即換”)翻譯。

網(wǎng)上有許多關(guān)于QT國際化的文章扮碧。這里也簡(jiǎn)單講述一次.


1趟章、qm文件和ts文件。

ts文件是程序員是用的翻譯文件慎王。你有幾種方法可以得到這樣的文件蚓土。

(1) 針對(duì)整個(gè)項(xiàng)目:在項(xiàng)目文件中加入TRANSLATION += ?abc.ts(abc是自定的文件名)。那么你可以使用Qt自帶的控制臺(tái)赖淤,輸入命令lupdate myPro.pro(myPro是自定的項(xiàng)目名稱)蜀漆。Qt就會(huì)為你在項(xiàng)目文件的同一目錄下生成一個(gè)abc.ts文件。輸入命令時(shí)要么當(dāng)前目錄就是pro文件所在目錄咱旱,要就在pro文件名前帶上絕對(duì)或相對(duì)路徑确丢。

當(dāng)你lupdate你的pro文件是,Qt會(huì)將ui文件中所有的可見字符以及你在程序用使用tr括起來所有字符放入到ts文件中吐限。

(2) 針對(duì)單個(gè)文件鲜侥,這只適用于一些特定場(chǎng)景或者個(gè)人使用習(xí)慣。當(dāng)你往項(xiàng)目里頭添加了新的帶有需要翻譯文本的文件后诸典,你完全可以直接再次lupdate一次整個(gè)項(xiàng)目描函,Qt不會(huì)覆蓋你在abc.ts中已經(jīng)做好的任何翻譯。 當(dāng)然你也可以lupdate單個(gè)文件狐粱,命令和上一個(gè)是一樣的 : lupdate ?文件的絕對(duì)路徑或相對(duì)路徑 -ts 要生成的ts文件名和文件路徑舀寓,例如:

lupdate ../app/test.cpp ?-ts ./testTs.ts

那么Qt就是在你指定的路徑下生成你指定的文件名的ts文件。

qm文件是程序能識(shí)別的二進(jìn)制的翻譯文件肌蜻。通過發(fā)布一個(gè)ts文件來產(chǎn)生互墓。命令很簡(jiǎn)單:lrelease abc.ts。 那么Qt 會(huì)為你在abc.ts的同名目錄下生成一個(gè)同名的qm文件蒋搜。qm文件是QTranslator應(yīng)該讀入的文件篡撵,關(guān)于QTranslator,就移步到Qt的幫助手冊(cè)吧豆挽。

下圖是Qt自帶的控制臺(tái)酸休。


2、處理ts文件

處理ts文件當(dāng)然也有多種方法祷杈。你可以使用Qt Linguist打開,也可以使用任何支持XML文本格式的工具打開渗饮。個(gè)人比較喜歡使用notepad++ 來處理ts文件而不是Qt Linguist(別笑我低端)但汞。

如下是Qt Linguist中打開ts文件的樣子 宿刮, 黃色的框是你的文件列表,點(diǎn)選文件后會(huì)在紅色的框內(nèi)顯示所有tr括起來的語句或者是ui中的可見字符串私蕾。綠色框是當(dāng)前翻譯中的文本和翻譯后的文本僵缺。黑色框是文本在代碼中的具體位置,幫助你精確翻譯踩叭,但是這部分常常不可用磕潮。那些文件名和源語句前的鉤鉤只是用來標(biāo)記完成度的,完成就打成綠色的鉤容贝,自己打自脯,但是不影響翻譯的。

個(gè)人更喜歡用notepad++斤富,順便一提吧膏潮。如下是notepad++打開ts的樣子,剛好是一個(gè)完整的context满力。標(biāo)簽是一個(gè)文件所有需翻譯文本集合的開始標(biāo)志焕参。標(biāo)簽指明了文件中的類名稱。是一條需翻譯語句的開始標(biāo)記油额。是語句在文件中的行數(shù)叠纷,因此可能在同一個(gè)中出現(xiàn)多次。需翻譯的語句潦嘶,要精確涩嚣,連空格個(gè)數(shù)不一樣都不能匹配。是翻譯后的語句衬以,這個(gè)標(biāo)簽一個(gè)開始是 缓艳,好像是這樣的,表示語句沒有翻譯好看峻,當(dāng)你在notepad++中確實(shí)完成翻譯后記得將type部分刪掉阶淘,帶有這個(gè)unfinished標(biāo)志的語句是即使翻譯好也不會(huì)被寫入qm文件中的。

最后互妓,你需要一個(gè)年輕貌美的女同事溪窒,既熟悉英文,又溫柔體貼冯勉。而且不會(huì)在你忘得不可開交但剩下30%翻譯任務(wù)的時(shí)候也不肯幫你一把澈蚌。祝你好運(yùn),coder灼狰。


3宛瞄、我的工程使用了Qt的控件,但是Qt的控件中字符都是英文的……

不要緊交胚,到你的Qt安裝目錄下搜一下.ts文件份汗,你會(huì)發(fā)現(xiàn)其實(shí)Qt已經(jīng)為我們準(zhǔn)備好了非常多的ts文件盈电。剛剛這個(gè)問題中,我們就找到qt_zh_CN.ts文件杯活,這是一個(gè)有qt控件簡(jiǎn)體中文翻譯的文件匆帚。你完全可以把這個(gè)文件放到你的工程中去(你不會(huì)跟計(jì)較那幾百k的空間吧!旁钧?)吸重,然后通過文本工具,往這個(gè)文件中添加 歪今, 例如你可以將你的項(xiàng)目的ts文件直接拷貝到qt_zh_CN.ts文件的最后面(為了好找) 嚎幸,然后lrelease這個(gè)qt_zh_CN.ts文件。你就會(huì)發(fā)現(xiàn)Qt控件中的英文也變成中文了彤委,而且還添加了你自己的部分鞭铆。


4、我想為我的工程添加繁體翻譯

方法同上焦影,不過這次你要找的文件叫qt_ch_TW.ts(Qt在這就做得不對(duì)了哈车遂!什么TaiWan 和 China的,都一個(gè)地方)斯辰,這個(gè)文件有Qt所有控件的繁體中文翻譯舶担。你甚至可以講qt_zh_CN.ts的內(nèi)容拷貝到word中,然后簡(jiǎn)轉(zhuǎn)繁彬呻,再覆蓋原來的ts文件來完成這個(gè)任務(wù)衣陶。不論怎樣,完成繁體翻譯吧騷年闸氮!


5剪况、關(guān)于動(dòng)態(tài)語言切換

個(gè)人對(duì)這個(gè)沒有什么認(rèn)識(shí)。但是我只提一個(gè)問題:動(dòng)態(tài)翻譯是否在你的工程中非有不可蒲跨? 如果不是译断,就稍稍偷個(gè)懶吧。我的建議有兩個(gè)或悲,一個(gè)比較傻瓜孙咪。1.在用戶安裝你的應(yīng)用的過程中(安裝包),讓用戶選定一個(gè)語言巡语,安裝完成后不可以改變翎蹈。相信這個(gè)不會(huì)影響用戶的使用體驗(yàn),因?yàn)闆]有人會(huì)裝B到明明英文不好卻是要用英文安裝男公,安裝后又作賤地想換回中文的(你荤堪?)。 2.在應(yīng)用中給用戶一個(gè)設(shè)置選項(xiàng),讓用戶可以選擇語言逞力,但是選擇語言后提示需要重啟本應(yīng)用曙寡。這個(gè)辦法比較傻瓜。在用戶重啟你的應(yīng)用時(shí)寇荧,你就有機(jī)會(huì)讓你的QTranslator重新load一個(gè)不同的qm文件,這樣就可以完成語言切換执隧。個(gè)人偏向第一種方法揩抡,也稍稍省點(diǎn)心吧,別讓自己太容易暴斃吧coder镀琉。


6峦嗤、QTranslator的一些問題

一個(gè)QApplication會(huì)有一個(gè)translator。translator可以remove屋摔,也可以install烁设。下面是筆者一個(gè)簡(jiǎn)單的程序來設(shè)置語言:

1).先定義我的qm文件的路徑先


2).根據(jù)系統(tǒng)的QLocale判斷應(yīng)該load哪個(gè)qm文件

那個(gè)optionManager是用來讀注冊(cè)表的。這個(gè)跟應(yīng)用本身有關(guān)钓试。

3). 準(zhǔn)備一個(gè)接口装黑,然App在啟動(dòng)時(shí)load好qm文件。

這樣大概就是使用過程了弓熏。其他的話聰明的你應(yīng)該可以理解的了恋谭。


7、 哪個(gè)QLocale::Language表示中文繁體巴炀稀疚颊??

這個(gè)問題問題得好啊信认。在Qt的QLocale中的Language枚舉中是沒有中文繁體的材义。那怎么辦?我這里給有一個(gè)不是建議的建議嫁赏,那就認(rèn)為其掂,這臺(tái)機(jī)子不是英文和中文的話,就是中文繁體(中文指中文簡(jiǎn)體)橄教。用一個(gè)估計(jì)少見的Language表示中文繁體清寇,寫注冊(cè)表時(shí),遇到就這個(gè)Language項(xiàng)护蝶,就認(rèn)為是中文繁體华烟。load的時(shí)候就用繁體的qm。好了持灰,就說到這個(gè)程度盔夜,這樣的損招再說的話那些老鳥又要表示不屑了。


8、請(qǐng)使用命令行獲得.qm文件喂链,而不是QT Linguist的”發(fā)布為"或者“另外發(fā)布為”~7凳!

這里很可能是我的機(jī)器問題椭微。但是那天工作時(shí)遇到的問題確實(shí)就在于此洞坑。如果你用QT Linguist的發(fā)布功能,你可能會(huì)和我一樣發(fā)現(xiàn)很多句子都不能翻譯蝇率,但是你檢查你的ts文件時(shí)卻沒有問題迟杂。如果有人看到了這里,并且有機(jī)會(huì)實(shí)踐本慕,請(qǐng)幫忙看看情況是不是真的如此排拷。如果可以的話請(qǐng)給我留個(gè)言」荆或者直接向Qt 提BUG监氢。

Enjoy your Qt。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藤违,一起剝皮案震驚了整個(gè)濱河市浪腐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纺弊,老刑警劉巖牛欢,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淆游,居然都是意外死亡傍睹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門犹菱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拾稳,“玉大人,你說我怎么就攤上這事腊脱》玫茫” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵陕凹,是天一觀的道長悍抑。 經(jīng)常有香客問我,道長杜耙,這世上最難降的妖魔是什么搜骡? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮佑女,結(jié)果婚禮上记靡,老公的妹妹穿的比我還像新娘谈竿。我一直安慰自己,他們只是感情好摸吠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布空凸。 她就那樣靜靜地躺著,像睡著了一般寸痢。 火紅的嫁衣襯著肌膚如雪呀洲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天轿腺,我揣著相機(jī)與錄音两嘴,去河邊找鬼。 笑死族壳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趣些。 我是一名探鬼主播仿荆,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼坏平!你這毒婦竟也來了拢操?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤舶替,失蹤者是張志新(化名)和其女友劉穎令境,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顾瞪,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舔庶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陈醒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕橙。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钉跷,靈堂內(nèi)的尸體忽然破棺而出弥鹦,到底是詐尸還是另有隱情,我是刑警寧澤爷辙,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布彬坏,位于F島的核電站,受9級(jí)特大地震影響膝晾,放射性物質(zhì)發(fā)生泄漏栓始。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一玷犹、第九天 我趴在偏房一處隱蔽的房頂上張望混滔。 院中可真熱鬧洒疚,春花似錦、人聲如沸坯屿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽领跛。三九已至乏德,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吠昭,已是汗流浹背喊括。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工咬崔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卧蜓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓脖卖,卻偏偏與公主長得像蒲肋,于是被迫代替她去往敵國和親蘑拯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程兜粘,因...
    小菜c閱讀 6,365評(píng)論 0 17
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法申窘,類相關(guān)的語法,內(nèi)部類的語法孔轴,繼承相關(guān)的語法剃法,異常的語法,線程的語...
    子非魚_t_閱讀 31,597評(píng)論 18 399
  • Qt是屬于一個(gè)跨平臺(tái)的GUI開發(fā)軟件路鹰,支持的平臺(tái)有Unix贷洲、Linux、Windows/WinCE悍引、IOS等恩脂。 Q...
    一葉之界閱讀 8,150評(píng)論 0 17
  • 《裕語言》速成開發(fā)手冊(cè)3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 26,230評(píng)論 5 19
  • 我發(fā)現(xiàn)“運(yùn)動(dòng)”這個(gè)項(xiàng)目每隔幾年都會(huì)被“雞血”喚醒列入計(jì)劃,但總是堅(jiān)持不了幾次趣斤,哪怕是產(chǎn)后身體酸痛俩块,花了不少錢去上私...
    什么和什么的閱讀 248評(píng)論 1 2