專案上線後,客戶突然要求新增特定語言版本。傳統做法需修改程式碼、重新編譯部署,風險與成本皆高。本文介紹一種零程式碼修改、免重新編譯的動態本地化方案:利用 ASP.NET 內建的資源檔機制,透過外掛式資源檔實現運行時語言擴充。
meta:resourcekey)。Resources.ResourceClass.Key)。本方案採用隱式本地化,配合 App_GlobalResources 與 App_LocalResources 目錄,實現頁面級與全域資源的動態載入。
Default.aspx,放置 Label、Button 等控件,設定 meta:resourcekey 屬性。App_LocalResources/Default.aspx.resx。Default.aspx.zh-TW.resx、Default.aspx.de-DE.resx 等,翻譯 Value 欄位。web.config 或頁面指令中設定 Culture="auto" UICulture="auto",ASP.NET 依瀏覽器語言偏好自動選擇資源檔。.resx 檔案上傳至對應目錄(App_LocalResources 或 App_GlobalResources),無需重新編譯、無需重啟應用程式,即時生效。若語言包頻繁變更或需由非技術人員維護,可實作自訂 ResourceProvider 從資料庫讀取資源,配合快取機制提升效能。核心步驟:
ResourceProviderFactory 與 IResourceProvider。GetObject 從資料庫查詢鍵值。web.config 註冊自訂 Provider:<system.web>
<globalization culture="auto" uiCulture="auto" />
<resourceProvider factoryType="MyNamespace.DbResourceProviderFactory" />
</system.web>
善用 ASP.NET 內建資源檔機制與自訂 ResourceProvider,能以極低成本為現有系統新增多語系支援,滿足全球化部署需求,且不影響現有系統穩定性。