ASP.NET 2.0 引入聲明性資源表達式,讓開發人員無需撰寫大量程式碼即可實現多語言支援。透過標準的 .resx 資源檔格式,框架能自動在執行時檢索對應文化特性的資源,大幅簡化本地化開發流程。
en-US 顯示 MM/dd/yyyy)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>
meta:resourcekey),減少維護成本App_GlobalResources,本地資源放置於 App_LocalResourcesResourceFile.resx(預設)、ResourceFile.zh-TW.resx(繁體中文)Culture="auto" 驗證自動偵測功能CurrentCulture,介面文字使用 CurrentUICulture