現在開發多語言的軟體方法比較多,使用資源或自定義的xml檔案來儲存選單字串資訊都是比較好的形式。現在我就來分享一下,我最近在做多語言開發的一些經驗。
對於winform程式開發中,如果當前開啟多個視窗,就關係到在選中語言變化時,怎樣來通知所有視窗語言已經變化,應該重新重新整理介面。
我在實踐採取思路是,讓所有開啟的窗體都去語言管理服務註冊乙個事件,當介面語言變化時,由語言管理來進行通知所有窗體,下面給出語言管理的幫助類:
public classlanguagehelper
// resharper disable inconsistentnaming
private static eventeventhandler
_languagechanged;
// resharper restore inconsistentnaming
public static eventeventhandler
languagechanged
remove
}
public static void changelanguage(string oldlanguage, string newlanguage)
if (string.compare(oldlanguage, newlanguage, true) == 0)
try
catch (exception)
var languagechanged = _languagechanged;
if (languagechanged != null)
}
}這個是乙個靜態類,讓所有開啟的窗體都來註冊這個語言改變的事件(languagechanged),當有窗體要修改語言要求時,就呼叫靜態方法
「public static void changelanguage(string oldlanguage, string newlanguage)」。但如果在新建立窗體時,都去註冊這個事件也是比較麻煩的,另外還要在窗體關閉時登出這個事件。在實際我是使用窗體基類的方式來實現事件的自動註冊和登出,窗體基本的**如下:
public classformbase : form
}
void languagehelper_languagechanged(object sender, languagechangedeventargs e)
}
protected override void onclosed(eventargs e)
base.onclosed(e);
}
}為了簡化這個操作,在上面基類中,在onload中註冊事件,在onclosed中登出事件,這樣只要繼承此窗體的子類,都很好的實現了語言修改時通知,每個子窗體只要簡單的實現乙個虛擬方法就可以了。
下次說一下,怎樣使用資源檔案來進行資源載入
多語言製作工具之vs外掛程式(2010-07-07更新)
軟體多語言
locale是指特定於某個國家或地區的一組設定,包括字符集,數字 貨幣 時間和日期的格式等。在windows中,每個locale可以用乙個32位數字表示,記作lcid。在winnt.h中可以看到lcid的組成。它的高16位表示字元的排序方法,一般為0。在它的低16位中,低10位是primary la...
基於WinForm的多語言開發之介面載入
在 基於winform的多語言軟體開發 一文中,說明載入統一載入資源檔案和動態重新整理介面的方法,現在使用上篇文章中介紹的方法,怎樣來快速開發介面。對資源的的載入有兩種方法,一種是用虛擬方法直接載入資源到介面控制項中,另一種是用反射的方式來進行載入,這種方式需要一些編輯技巧。定義下面的基類 publ...
WinForm程式的介面多語言切換
資源檔案在國際化中的運用 winform 國際化的軟體往往需要多種語言資源,如何在c 的winform中做到呢?且看以下分解 1 工程新增資源檔案 資源檔案命名方式 資源檔案主題名 語言區域.resx 例如資源檔案主題名為 resource1 我們準備了 中 英 日 三個語言版本的資源檔案,則對應的...