ASP.NET - 全球化資源文件[Web Forms]


I:本博文代碼示例效果圖

好久沒來寫隨筆了.不多說先上大餅!
image
跟着直接上 [代碼下載地址]

II:ASP.NET 資源文件介紹

在ASP.NET特殊文件夾內有那么兩個不太引人注意,他們分別是App_GlobalResources, App_LocalResources.
image

資源文件命名規則: {文件名}.{區域}.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
image 
在這里先介紹一下在web.config里面<system.web>下的子節點<globalization />
image
這里我把uiCulture設置為"auto"的話. Page.UICulture的屬性將會自動對應為客戶端瀏覽器設置的語言環境:
image
上圖中的設置將會影響到瀏覽器發起的Reqeust頭的Accept-Language信息,上圖的設置對應如下:
image
如果沒有把uiCulture設置為"auto"的話,ASP.NET系統將不會自動將客戶端瀏覽器的語言環境對應到Page.UICulture.

在次關於.resx的文件結構我就不解釋了.相信大家已經很熟悉了.它就類似於Key/Value的配置方式.

III.ASP.NET 中資源文件的使用

在上面提供的項目代碼中.我只是寫了3種語言(中文,英文,韓文)的資源.其配置入下圖:
image
在這里為大家介紹在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”的方式:
image

另外關於資源文件的代碼生成.可以由如下圖配置:
image
另外有什么問題可以先看例子里的代碼!

本文內的代碼可以讓客戶選擇一個語言環境然后裝到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文件!覺得有點不便利!如果確實希望用這套方法的話.還得需要自己寫些擴展小工具去管理這堆資源文件.

本文到此結束.謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM