在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理(2)--開發(fā)框架模塊的整合

我在上篇隨筆《在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理》里面介紹了Winform開發(fā)中多語言的處理解決方案,整個多語言解決方案是以實際需求為驅(qū)動晌柬,以減少代碼改動,高效處理為目的已烤,通過基類繼承的方式減少代碼修改锐峭,通過引入翻譯API方式減少翻譯處理時間,本隨筆繼續(xù)深化這個多語言處理方案的介紹驾讲,是指整合在開發(fā)框架中進行無縫的使用蚊伞。

1席赂、多語言的處理步驟

1)提取多語言處理JSON文件

我們通過把程序界面或者代碼里面的中文提取出來,放到JSON文件中厚柳,對不同模塊可以分為不同的JSON文件氧枣,如下所示沐兵。

image

然后使用輔助類的接口調(diào)用實現(xiàn)英文內(nèi)容的翻譯别垮,如下代碼所示:

            //界面漢化            
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");//英文界面

            //如果語言包有空白的翻譯內(nèi)容,可以調(diào)用下面語句(百度翻譯)獲得翻譯內(nèi)容扎谎,減少手工翻譯的繁瑣
            //翻譯后將內(nèi)容進行審核或調(diào)整一下即可使用
            //正式發(fā)布程序需要屏蔽這個調(diào)用
            JsonLanguage.Default.Translate();

可以把內(nèi)容翻譯并調(diào)整好碳想。

image

這些JSON資源文件,按照程序運行的相對目錄 Lang/en-US/ABC.json 目錄放置即可毁靶,可以根據(jù)不同的模塊或者需求分開不同的文件胧奔,程序加載多語言信息的時候,會全部進行加載预吆。

2)繼承窗體基類和使用統(tǒng)一的信息提示輔助類

準備好多語言文件后龙填,那么多語言的處理還需要一些輔助的處理才能實現(xiàn),由于我們已經(jīng)把多語言處理的邏輯放在了窗體的基類拐叉,如BaseForm窗體基類里面岩遗,如果原來窗體就是繼承了這個基類,那么多語言處理邏輯會在窗體加載后自動進行處理的了凤瘦。

image

通過繼承關(guān)系的處理宿礁,我們可以不用修改子窗體任何代碼就可以自動具有多語言的處理過程了,子窗體在加載完畢后蔬芥,自動遍歷內(nèi)部控件實現(xiàn)多語言的處理邏輯梆靖。

如果我們一些窗體,不方便集成這些基類笔诵,那么也可以使用增加代碼的方式進行處理即可返吻,在窗體的Load或者Shown事件里面實現(xiàn)處理,如下代碼所示乎婿。

        private void Form1_Shown(object sender, EventArgs e)
        {
            //窗體加載并顯示后测僵,對窗體實現(xiàn)多語言處理
            if (!this.DesignMode)
            {
                LanguageHelper.InitLanguage(this);
            }
        }

還有一種特殊的界面,就是一些信息的提示次酌,如消息框的提示恨课,這種默認的處理方式,如下面是一般的消息提示代碼岳服。

XtraMessageBox.Show("歡迎使用Winform開發(fā)框架", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
image

我們在框架里面也是通過輔助類封裝的方式進行提示的剂公,因此多語言也只需要修改這個輔助類就可以了,不用修改我們窗體里面已完成的代碼吊宋。

MessageDxUtil.ShowTips("歡迎使用Winform開發(fā)框架");

由于我們在框架里面統(tǒng)一使用消息提示處理纲辽,那么多語言的處理,在其內(nèi)部實現(xiàn)即可,如下所示拖吼。

        /// <summary>
        /// 顯示一般的提示信息
        /// </summary>
        /// <param name="message">提示信息</param>
        /// <param name="args">字符串里面的參數(shù)內(nèi)容</param>
        /// <returns></returns>
        public static DialogResult ShowTips(string message, params object[] args)
        {
            //對消息的內(nèi)容進行多語言處理
            message = JsonLanguage.Default.GetString(message);
            if (args != null)
            {
                message = string.Format(message, args);
            }
            return DevExpress.XtraEditors.XtraMessageBox.Show(message, Caption_Tips, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

如果是帶有一些參數(shù)占位符的多語言處理鳞上,我們一樣可以實現(xiàn)它。

MessageDxUtil.ShowTips("用戶【{0}】身份驗證正確", loginName);
image

通過窗體基類BaseForm內(nèi)部邏輯的修改吊档,以及一些輔助類如MessageDxUtil的修改篙议,我們悄悄的就實現(xiàn)了多語言的處理邏輯,原來的代碼還是不用修改就支持了多語言的處理怠硼,大大節(jié)省了工作量鬼贱。

當然如果是一些特殊的情況,我們還是可以通過統(tǒng)一的多語言處理邏輯來獲得它的內(nèi)容香璃,如下代碼所示这难。

JsonLanguage.Default.GetString(message);

3、模塊化的多語言支持

除了上面介紹的一些總體邏輯葡秒,我們在Winform開發(fā)過程中姻乓,往往也是以模塊化的開發(fā)方式來提高開發(fā)效率,如利用框架的公用類庫眯牧、基礎(chǔ)界面模塊蹋岩、分頁控件模塊、字典模塊炸站、權(quán)限管理系統(tǒng)等等星澳,這些模塊都是整個模塊化過程中的一部分,當然多語言的支持也是很必要旱易,由于我們已經(jīng)通過基類和多余與模塊獨立的方式來簡化它禁偎,但是里面的多語言資源我們也應(yīng)該以模塊方式提供,翻譯好并集成在系統(tǒng)中使用即可阀坏。

image

上面的Basic.json是框架整個基礎(chǔ)的界面(如分頁如暖、字典等)英文參照資源,Security.json為權(quán)限系統(tǒng)的界面資源忌堂,Commons.json為一些其他模塊的多語言資源等等 盒至。

image

以及權(quán)限系統(tǒng)的多語言參照資源

image

例如分頁控件的展示界面,我們的英文版效果如下所示(以用戶管理界面為例)

image

編輯界面效果如下所示

image

權(quán)限管理系統(tǒng)整體的界面效果如下所示士修,包括工具欄枷遂、菜單、選項卡棋嘲,以及里面的所有控件酒唉,測試均表現(xiàn)OK。

當然沸移,里面的數(shù)據(jù)源肯定還是中文的痪伦,除非我們系統(tǒng)的數(shù)據(jù)全部以英文語境進行錄入侄榴。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市网沾,隨后出現(xiàn)的幾起案子癞蚕,更是在濱河造成了極大的恐慌,老刑警劉巖辉哥,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桦山,死亡現(xiàn)場離奇詭異,居然都是意外死亡证薇,警方通過查閱死者的電腦和手機度苔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浑度,“玉大人,你說我怎么就攤上這事鸦概÷嵴牛” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵窗市,是天一觀的道長先慷。 經(jīng)常有香客問我,道長咨察,這世上最難降的妖魔是什么论熙? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮摄狱,結(jié)果婚禮上脓诡,老公的妹妹穿的比我還像新娘。我一直安慰自己媒役,他們只是感情好祝谚,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酣衷,像睡著了一般交惯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上穿仪,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天席爽,我揣著相機與錄音,去河邊找鬼啊片。 笑死只锻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钠龙。 我是一名探鬼主播炬藤,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼御铃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沈矿?” 一聲冷哼從身側(cè)響起上真,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羹膳,沒想到半個月后睡互,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡陵像,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年就珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醒颖。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡妻怎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泞歉,到底是詐尸還是另有隱情逼侦,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布腰耙,位于F島的核電站榛丢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挺庞。R本人自食惡果不足惜晰赞,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望选侨。 院中可真熱鬧掖鱼,春花似錦、人聲如沸侵俗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隘谣。三九已至增拥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寻歧,已是汗流浹背掌栅。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留码泛,地道東北人猾封。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像噪珊,于是被迫代替她去往敵國和親晌缘。 傳聞我的和親對象是個殘疾皇子齐莲,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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