ref: https://dotblogs.com.tw/yc421206/2015/11/27/asp_net_multiple_language_local_global_resource ASP.NET 目錄: App_Code App_Data App_GlobalResouces 整個網站 App_LocalResouces 特定某頁 Local is specific to particular page and Global is common for whole porta 本地資源檔 App_LocalResouces 用於特定頁面 放在 App_LocalResources 資源檔格式: 以login.aspx為例,預設本地端資源檔規則為 web stite name.resx,其他國家語言則是 web stite name.culture.resx,範例如下: 預設語系:login.aspx.resx 英文美國:login.aspx.en-US.resx 英文英國:login.aspx.en-GB.resx 不特別指定語系時會套用 login.aspx.resx 全域資源檔 App_GlobalResources 所有頁面共用 放在 App_GlobalResources 資源檔格式: 跟本地資源檔不一樣的是,不需要帶入頁面名稱,範例如下: 預設語系:Config.resx 英文美國:Config.en-US.resx 英文英國:Config.en-GB.resx 資源檔取用分為隱含和明確套用 明確式比隱含套用方便 開始使用多語系時一定要先建立預設語系資源檔,若沒有該檔案,其他語系的資源檔會失效 建立預設資源檔後,其他的語系則是用複製檔案的方式 資源檔維護 使用 ResX Manager,它可以由 VS 的擴充工具取得 工具自動產生本地資源檔 手動建立其實還蠻累的,利用VS IDE所提供的功能可以大量建立控制項的所屬的資源定義,在*.aspx檔裡,焦點一定要在 UI Design 模式,Generate Local Resource 選單才能點 (我卡在這裡) VS IDE 產生本地端資源檔,如下圖: 工具產生出來的欄位,帶有後綴詞 Resource1,這命名不合我的原則,我得再用文字編輯器處理*.resx 和 *.aspx ,把 Resource1 全部取代掉;另外,他還會產生我不需要替換的欄位,與其這樣,不如我一開始就自己來 控制項的資源檔屬性 在 UI 的Design 視窗裡有一個Data屬性,就是用來處理資源檔的,如下圖: 明確(Explicit)套用本地資源檔 在前端 *.aspx,使用 <%$ Resources:Name %> 便可取得資源檔的定義 在<%@ Page %>指示詞若有套用meta:resourceKey, 就會直接套用資源檔的Title設定 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Default" meta:resourceKey="Page" %> Title本地資源檔設定,如下圖: 隱含套用只需要加上 meta:resourceKey,就能套用資源檔的屬性設定,這比明確套用來的省事、方便 後端程式取得本地資源檔定義 GetLocalResourceObject 方法,可以取得本地端資源定義 var name= GetLocalResourceObject("Name"); this.Response.Write(name); 我的工具可以跳出本地資源檔的IntelliSense,老實說我不知道是哪一個擴充工具的功能 使用強型別本地資源檔 可以透過 VS IDE來建立資源檔的類別 完成之後,便可以看到 *.resx 後面跟著對應的 *.cs 檔案了 調用端開發時就能使用 IntelliSense,如下圖: 創建全域資源檔 採取手動建立的方式,這和本地資源檔的建立步驟一樣,就不在介紹了,差別在於它是存放在 App_GlobalResources,然後是讓給每一個頁面使用 另外,當全域資源檔建立源成後,就自動幫我們建立類別了,如下圖: 明確(Explicit)套用全域資源檔 在前端 *.aspx,使用 <%$ Resources:Config,Name %>" 便可取得資源檔的定義,Config 代表的是資源檔類別名,Name 代表的是屬性 <asp:Literal ID="Literal2" runat="server" Text="<%$ Resources:Config,Name %>"></asp:Literal> 後端程式取得全域資源檔定義 var name = this.GetGlobalResourceObject("Config", "Name"); this.Response.Write(name); 使用強型別全域資源檔 VS IDE 預設會把加入到 App_GlobalResources 的資源檔,變成類別,便可以直接取用 在前端使用資源檔 function Backup(){ if ( !confirm('<%= this.GetGlobalResourceObject( ("Config","Backup") %>' ) ) return; //TODO: } 若有謬誤,煩請告知,新手發帖請多包涵