專案建立 App_GlobalResources 資料夾,資源檔命名:Resources.resx(預設/備援)、Resources.zh-TW.resx、Resources.en-US.resx、Resources.fr-FR.resx 等。ASP.NET 依 UICulture 自動選擇對應檔案。
在 BasePage 覆寫 InitializeCulture()(頁面生命週期早期,控制項尚未建立),透過 Request.Form 讀取主版頁面 Header 控制項下拉選單值(名稱含命名容器前綴,如 ctl00$cphHeader$Header1$ddlLanguage),以 switch 設定 Thread.CurrentThread.CurrentUICulture 與 CurrentCulture,並寫入 Session 跨頁保持。
protected override void InitializeCulture() {
if (Request[PostBackEventTarget] != null) {
string controlID = Request[PostBackEventTarget];
if (controlID.Equals(LanguageDropDownID)) {
string val = Request.Form[controlID];
switch (val) {
case "0": SetCulture("zh-TW", "zh-TW"); break;
case "1": SetCulture("en-US", "en-US"); break;
// ...
}
}
}
if (Session["MyUICulture"] != null) {
Thread.CurrentThread.CurrentUICulture = (CultureInfo)Session["MyUICulture"];
Thread.CurrentThread.CurrentCulture = (CultureInfo)Session["MyCulture"];
}
base.InitializeCulture();
}
void SetCulture(string ui, string cult) {
Thread.CurrentThread.CurrentUICulture = new CultureInfo(ui);
Thread.CurrentThread.CurrentCulture = new CultureInfo(cult);
Session["MyUICulture"] = Thread.CurrentThread.CurrentUICulture;
Session["MyCulture"] = Thread.CurrentThread.CurrentCulture;
}
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
UTF-8 相容 ASCII 且支援全球字元,為多語言網站標準編碼。