I:本博文代碼示例效果圖
好久沒來寫隨筆了.不多說先上大餅!
跟着直接上 [代碼下載地址]
II:ASP.NET 資源文件介紹
在ASP.NET特殊文件夾內有那么兩個不太引人注意,他們分別是App_GlobalResources, App_LocalResources.
資源文件命名規則: {文件名}.{區域}.resx
{區域}這一個是可以忽略的.當忽略{區域}時,如果Page.UICulture跟資源文件內所提供的{區域}都對不上號時,將會以沒有設置{區域}的資源文件去呈現.
例如當Page.UICulture = “ja-JP”,而資源文件只有
Resource.resx
Resource.zh-CN.resx
Resource.zh.resx
Resource.en.resx
Resource.en-US.resx
ASP.NET因沒有找到Resource.ja-JP.resx而會使用默認的Resource.resx去呈現.
ASP.NET資源文件夾
App_GlobalResources:這里存放全站都可以調用到的資源文件集(比如A.aspx,B.aspx,C.aspx都可以共享用到)
App_LocalResources:這里存放僅單個頁面才能調用到的資源文件集(比如A.aspx只可以映射到A.aspx.{區域}.resx, B.aspx映射到B.aspx.{區域}.resx)
每一個資源文件代表着一種區域語言所需用到的資源文件.如上圖例子MyGlobalResources
在這里先介紹一下在web.config里面<system.web>下的子節點<globalization />
這里我把uiCulture設置為"auto"的話. Page.UICulture的屬性將會自動對應為客戶端瀏覽器設置的語言環境:
上圖中的設置將會影響到瀏覽器發起的Reqeust頭的Accept-Language信息,上圖的設置對應如下:
如果沒有把uiCulture設置為"auto"的話,ASP.NET系統將不會自動將客戶端瀏覽器的語言環境對應到Page.UICulture.
在次關於.resx的文件結構我就不解釋了.相信大家已經很熟悉了.它就類似於Key/Value的配置方式.
III.ASP.NET 中資源文件的使用
在上面提供的項目代碼中.我只是寫了3種語言(中文,英文,韓文)的資源.其配置入下圖:
在這里為大家介紹在aspx頁里面的使用方法.
<%$ Resources:{類名}, {資源文件節點} %> 僅調用App_GlobalResources資源文件
<%$ Resources:{資源文件節點} %> 僅調用App_LocalResources資源文件
注意:這類標記必須使用在runat=”server”的標簽內的屬性使用如:
<asp:Literal ID="ltlSiteName" runat="server" Text="<%$ Resources:MyGlobalResources, SiteName %>"></asp:Literal>
<asp:Literal ID="ltlPassword" runat="server" Text="<%$ Resources:Password %>">
另外也可以用meta:resourcekey="ID”的方式:
另外關於資源文件的代碼生成.可以由如下圖配置:
另外有什么問題可以先看例子里的代碼!
本文內的代碼可以讓客戶選擇一個語言環境然后裝到Cookies里,然后登陸頁面根據用戶選擇的語言環境去調用資源文件呈現界面.
VI:遺漏-記得重寫頁面的InitializeCulture方法
厄....各位真的不好意思.最最重要的一點忘記寫出來了.還是感謝園友John.HuJY在群里指出遺漏點!
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class Logon : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected override void InitializeCulture() { var languageCookie = Request.Cookies.Get("language"); if (languageCookie != null) { Page.UICulture = languageCookie.Value; } base.InitializeCulture(); } } }
在這里相信大家也了解到缺點:一個頁面3個語言的話就需要配置3個.resx文件!覺得有點不便利!如果確實希望用這套方法的話.還得需要自己寫些擴展小工具去管理這堆資源文件.
本文到此結束.謝謝!