首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 實作多語言本地化完整指南

     編輯:關於ASP.NET

ASP.NET 2.0 本地化核心機制

ASP.NET 2.0 引入聲明性資源表達式,讓開發人員無需撰寫大量程式碼即可實現多語言支援。透過標準的 .resx 資源檔格式,框架能自動在執行時檢索對應文化特性的資源,大幅簡化本地化開發流程。

關鍵概念與設定

Culture 與 UICulture 的區別

  • Culture:決定數值、日期、貨幣等資料類型的格式化規則(如 en-US 顯示 MM/dd/yyyy)
  • UICulture:決定載入哪種語言的資源檔(如繁體中文介面對應 zh-TW)

可在 @Page 指令或 web.config 的 <globalization> 區段設定。注意 Culture="auto:en-US" 會優先嘗試自動偵測瀏覽器語言,失敗時回退至指定文化特性。

瀏覽器語言偏好設定

HTTP 標頭 Accept-Language 允許瀏覽器傳送優先語言清單。使用者可在 IE 的「網際網路選項」→「語言」中調整優先順序,ASP.NET 會據此自動設定 CurrentUICulture。

網站地圖本地化

在 web.sitemap 的 <siteMap> 元素加上 enableLocalization="true",即可使用 $Resources: 全域資源檔名, Key 或 resourceKey 屬性綁定本地化資源。

資源存取方式

類型語法說明
全域資源(聲明式)<%$ Resources: GlobalRes, Key %>適用於跨頁面共用資源
本地資源(顯式)<%$ Resources: Key.Property %>針對單一頁面,需對應 App_LocalResources 目錄
本地資源(隱式)meta:resourcekey="Key"自動對應控制項所有屬性,最省力
程式碼存取全域資源GetGlobalResourceObject("ResFile", "Key")後端動態取值
程式碼存取本地資源GetLocalResourceObject("Key")後端動態取值

動態切換文化特性

重寫 InitializeCulture() 方法,根據使用者選擇(如查詢字串 ?currentculture=zh-TW)設定執行緒文化特性:

protected override void InitializeCulture() {
    string lang = Request["currentculture"];
    if (!string.IsNullOrEmpty(lang)) {
        Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
    }
    base.InitializeCulture();
}

完整範例:多語言測試頁

以下展示各種本地化技術的實際應用:

<%@ Page Language="C#" MasterPageFile="~/Site.master" 
    Culture="auto:en-US" UICulture="auto:en-US" 
    meta:resourcekey="PageResource" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <p>目前文化特性:<asp:Label ID="lblCulture" runat="server" /></p>
    <p>當前時間:<%= DateTime.Now.ToString("F") %></p>
    
    <!-- 隱式本地化:自動套用 lbl 的 Text、ToolTip 等屬性 -->
    <p><asp:Label ID="lbl" runat="server" meta:resourcekey="lbl" /></p>
    
    <!-- 顯式本地化:指定屬性對應資源 Key -->
    <p><asp:Label ID="lblExplicit" runat="server" 
        Text="<%$ Resources: lbl.Text %>" 
        ToolTip="<%$ Resources: lbl.ToolTip %>" /></p>
    
    <!-- 全域資源 -->
    <p><asp:Label ID="lblGlobal" runat="server" 
        Text="<%$ Resources: GlobalRes, WelcomeText %>" /></p>
    
    <!-- Localize 控制項:不輸出 span 標籤,僅輸出文字 -->
    <p><asp:Localize ID="AboutUs" runat="server" meta:resourcekey="AboutUs"></asp:Localize></p>
    
    <p>
        <a href="?currentculture=zh-TW">繁體中文</a> | 
        <a href="?currentculture=en-US">English</a>
    </p>
</asp:Content>

最佳實踐建議

  1. 優先使用隱式本地化(meta:resourcekey),減少維護成本
  2. 全域資源放置於 App_GlobalResources,本地資源放置於 App_LocalResources
  3. 資源檔命名慣例:ResourceFile.resx(預設)、ResourceFile.zh-TW.resx(繁體中文)
  4. 測試時使用 Culture="auto" 驗證自動偵測功能
  5. 日期/數值格式化請使用 CurrentCulture,介面文字使用 CurrentUICulture
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved