我試圖實現一個典型的語言菜單,用戶可以通過網站中所有頁面顯示的菜單選擇他們想要查看網站的語言。在ASP.NET應用程序中實現語言菜單的最佳方式
該菜單將出現在多個母版頁上(當前用於用戶登錄的頁面和用戶不在其中的頁面)。
我目前的實現是有一個主頁面基類(我們稱之爲MasterBase)。 MasterBase有一個事件
public event LanguageChangedEventHandler LanguageChanged;
其中LanguagedChangedEventHandler被簡單地定義爲
public delegate void LanguageChangedEventHandler(string NewCulture);
MasterBase還具有可重寫的方法
protected virtual void OnLanguageChanged(string NewCulture)
剛剛基本上觸發事件。
繼承MasterBase每個母版頁覆蓋OnLanguageChanged和不常用的東西,如設置線程的CurrentUICulture和語言的cookie,然後做了
Server.Transfer(this.Page.AppRelativeVirtualPath, true);
得到的頁面與新的文化本地化的值重新加載。在登錄用戶的母版頁上,它還更新用戶在db中的語言pref。
每種語言選項當前都是從MasterBase繼承的母版頁上的LinkButton。點擊鏈接時,它會調用傳遞正確文化信息的基礎OnLanguagedChanged方法。例如。
protected void btnEnglish_Click(object sender, EventArgs e) {
this.OnLanguageChanged("en-US");
}
每個頁面都需要處理語言的變化則有看起來像網頁加載一些代碼...
((MasterBase)this.Master).LanguageChanged += this.Page_OnLanguageChanged;
// Where Page_OnLanguageChanged has the signature of LanguageChangedEventHandler
// and has stuff like reloading options in a drop down using the new language.
相當令人費解的「框架」 =)
- 首先,新開發人員很難知道他們必須將方法連接到MasterBase的LanguageChanged事件來處理語言更改。是的,我們會記錄它。但是這仍然不是直截了當,顯而易見的。其次,所有語言修改都是回傳的。這是有問題的,特別是當您想要使用瀏覽器「後退」按鈕導航時。
我正在尋找更優雅的解決方案。一個既沒有上述問題,也處理我目前的要求。
非常感謝您的任何建議。謝謝。
有幫助但仍不能解決不需要回發的問題。 – Fung 2008-11-09 14:35:58