招生熱線
0755-86191118 0755-86191118
我的位置: 首頁(yè) > 學(xué)習(xí)專區(qū) > .NET技術(shù) > ASP.NET本地化(多語(yǔ)言)

ASP.NET本地化(多語(yǔ)言)

2013-05-17 10:14:58
來(lái)源:
[導(dǎo)讀] 1 使用工具自動(dòng)生成本地化資源(LocalResources)首先當(dāng)然是建立一個(gè)WEB工程啦,如圖所示:雙擊Default aspx,切換到[設(shè)計(jì)]視圖,從工具箱里

 

 

1.使用工具自動(dòng)生成本地化資源(LocalResources)

首先當(dāng)然是建立一個(gè)WEB工程啦,如圖所示:

雙擊Default.aspx,切換到[設(shè)計(jì)]視圖,從工具箱里拖一個(gè)Button進(jìn)來(lái)。點(diǎn)擊菜單中的[工具]->[生成本地資源],如圖所示:

這時(shí)發(fā)現(xiàn)在解決方案方案視圖里自動(dòng)增加了一份本地資源,如下圖所示:

切換到屬性視圖,可以看到Text和ToolTip都被加上了一個(gè)紅色符號(hào),提示“屬性是用表達(dá)形式隱式綁定的”,如下圖所示:(注意:只有在視圖狀態(tài)下選中控件才能看到這兩個(gè)屬性喲)

為了增加對(duì)多語(yǔ)言的支持,我們現(xiàn)在右鍵Default.aspx.resx,點(diǎn)擊復(fù)制,再選中App_LocalResources目錄,點(diǎn)擊粘貼,將“副本 Default.aspx.resx”重命名為Default.aspx.en-us.resx,如圖所示:

分別編輯Default.aspx.resx和Default.aspx.en-s.resx 的內(nèi)容,如下圖示:

Default.aspx.resx

Default.aspx.en-s.resx

打開(kāi)Default.aspx,在 Page 標(biāo)簽里添加Culture="auto" UICulture="auto",如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" meta:resourcekey="PageResource1" UICulture="auto" Culture="auto" %>

只有這樣,后面才能獲取瀏覽器的首選語(yǔ)言設(shè)置。如果要加到 Web.config 中,如下所示:

運(yùn)行網(wǎng)站,效果如下圖所示:

點(diǎn)擊IE菜單的[工具]->[Internet 選項(xiàng)],在彈出的對(duì)話框中點(diǎn)[常規(guī)]選項(xiàng)卡的[語(yǔ)言]按鈕,彈出[語(yǔ)言首選項(xiàng)]對(duì)話框,如下圖所示:

點(diǎn)擊[添加]按鈕,選擇英語(yǔ)(

美國(guó)),并上移到第一位,如下圖所示:

一路[確定]點(diǎn)下來(lái),刷新頁(yè)面,可以看到Button的標(biāo)題變成“Hello World”啦,如下圖所示:

綜上所述,使用工具自動(dòng)生成本地化資源,并隱式的綁定到控件上,來(lái)實(shí)現(xiàn)頁(yè)面的本地化是非常簡(jiǎn)單的,但存在以下幾項(xiàng)問(wèn)題:

1)必須為每個(gè)頁(yè)生成多份資源文件;

2)只有控件屬性中被標(biāo)識(shí)為L(zhǎng)ocalizable(true)才可能被工具掃描到;

3)由于是對(duì)頁(yè)面包含的控件進(jìn)行掃描,所以最好是在頁(yè)面布局基本確定后再使用該工具,并且在編輯完 資源文件后不要再使用該工具,如果不幸你這樣做了。。。會(huì)發(fā)現(xiàn)默認(rèn)的資源文件被清空了

2.原來(lái)Localizable AttributeProperty是這么回事呀

在我前天寫(xiě)的隨筆開(kāi)發(fā)和使用自定義服務(wù)器控件中,一直對(duì)屬性為什么要使用Localizable(true)不清楚。

[

Bindable(true),

Category("Appearance"),

DefaultValue("Hello"),

Description("The welcome message text."),

Localizable(true)

]

public virtual string Text

{

get

{

string s = (string)ViewState["Text"];

return (s == null) ? "Hello" : s;

}

set

{

ViewState["Text"] = value;

}

}

查了許多關(guān)于WEB控件開(kāi)發(fā)的資料,其中都對(duì)這個(gè)AttributeProperty做了忽略,原來(lái)只有當(dāng)控件的屬性聲明為L(zhǎng)ocalizable(true)時(shí),VS的生成本地資源工具才會(huì)掃描到。

3.手工添加本地化資源

第一點(diǎn)中提到過(guò)生成本地資源工具只能掃描到頁(yè)面已經(jīng)包含的控件,那么如果后面由于開(kāi)發(fā)需要又增加了一個(gè)新的控件要怎么辦呢?雖然大部人都能自己想到,但還是寫(xiě)一下吧。

從工具箱再拖一個(gè)Label控件到頁(yè)面上,切換到源視圖,修改代碼如下:

再修改兩份本地資源文件,為L(zhǎng)abel1添加Label1Resource1鍵值的相關(guān)資源,如下圖所示:

Default.aspx.resx

Default.aspx.en-s.resx

再運(yùn)行程序,切換語(yǔ)言設(shè)置,可以看到Label1的效果和Button1是一樣的,如圖所示:

中文(中國(guó))

英語(yǔ)(美國(guó))

4.顯示使用本地化資源

OK,前面提到的都是隱式使用本地化資源,那么如何顯示的使用本地化資源呢?相對(duì)于隱式來(lái)講,顯示更加靈活,功能也更強(qiáng)大。

只需要將剛才的Label1的代碼,

修改為,即可。

Text="<%$ Resources:Label1Resource1.Text %>"

ToolTip="<%$ Resources:Label1Resource1.ToolTip %>" >

 

這時(shí)切換到[設(shè)計(jì)]視圖,選中Label1控件,查看屬性視圖,會(huì)發(fā)現(xiàn)Text和ToolTip被加上的是藍(lán)色的符號(hào),提示“屬性綁定了表達(dá)式”。跟上面提到的紅色符號(hào)比較,少了“隱式”二字,這也就是所謂的顯式和隱定的來(lái)源吧,如下圖所示:

5.全局資源的使用(GlobalResources)

前面提到過(guò),本地資源需要為每個(gè)頁(yè)面分別生成多個(gè)資源文件,雖然這樣看起來(lái)分門(mén)別類的挺清楚,但在實(shí)際應(yīng)用過(guò)程中,我們有許多資源是可以共享的,總不能不停的重復(fù)寫(xiě)來(lái)寫(xiě)去吧。其實(shí)這種情況我們可以用全局資源(GlobalResources)來(lái)解決。

在資源方案視圖中選中網(wǎng)站,右鍵,點(diǎn)擊[添加ASP.NET 文件夾]->[App_GlobalResources],如圖所示:

再選中App_GlobalResources文件夾,右鍵,點(diǎn)擊[添加新項(xiàng)],在彈出的對(duì)話框中選中“資源文件”,命名為“LocalizedText.resx”,點(diǎn)擊[添加],如圖所示:

雙擊LocalizedText.resx進(jìn)行編輯,添加一條新的字符串資源,如圖所示:

復(fù)制LocalizedText.resx,粘貼到App_GlobalResources目錄,重命名為L(zhǎng)ocalizedText.en-us.resx,雙擊進(jìn)行編輯,添加一條新的字符串資源,如圖所示:

打開(kāi)Default.aspx,切換到[設(shè)計(jì)]視圖,從工具箱拖一個(gè)TextBox控件到頁(yè)面上。切換到[源]視圖,修改代碼:

運(yùn)行程序,切換語(yǔ)言設(shè)置,可以看到全局資源的使用效果了,如圖所示:

中文(中國(guó))

英語(yǔ)(美國(guó))

注意:全局資源不能使用隱式聲明。

6.如何在后臺(tái)編程時(shí)使用這兩種資源

前面提到的都是在網(wǎng)頁(yè)中使用這兩種資源,那么如何在后臺(tái)使用這兩種資源呢?

打開(kāi)Default.aspx,切換到[設(shè)計(jì)]視圖,從工具箱拖一個(gè)Localize控件(Literal 控件與 Label 控件類似,但 Literal 控件不允許對(duì)所顯示的文本應(yīng)用樣式。可以通過(guò)設(shè)置 Text 屬性,以編程方式控制在控件中顯示的文本。)到頁(yè)面上。雙擊Button1,添加以下實(shí)現(xiàn)

protected void Button1_Click(object sender, EventArgs e)

{

Localize1.Text = (String)GetLocalResourceObject("Label1Resource1.Text") + " " +

(String)GetGlobalResourceObject("LocalizedText", "Msg1");

}

記得添上這個(gè)引用

using System.Globalization;

運(yùn)行程序,切換語(yǔ)言設(shè)置,可以看到和前面使用表達(dá)式調(diào)用資源的效果是一樣的,如圖所示:

中文(中國(guó))

英語(yǔ)(美國(guó))

7.動(dòng)態(tài)切換語(yǔ)言設(shè)置

以上的介紹都是通過(guò)IE瀏覽器獲取語(yǔ)言設(shè)置,其實(shí)我們可以自己設(shè)置使用哪種語(yǔ)言。

1)通過(guò)在每個(gè)頁(yè)面里的Page節(jié)指定

<%@ Page Culture="en-us" UICulture="en-us" %>

如上所設(shè),該頁(yè)將使用en-us的語(yǔ)言設(shè)置。

注意:這只是個(gè)概要式寫(xiě)法,實(shí)際的頁(yè)面中的Page一般都包含更多的屬性。

2)通過(guò)在Web.Config里的globalization節(jié)指定

 

3)當(dāng)然還有一種就是通過(guò)編程動(dòng)態(tài)切換語(yǔ)言設(shè)置啦,這也是實(shí)際項(xiàng)目中經(jīng)常用到的方式

打開(kāi)Default.aspx,切換到[源]視圖,添加如下代碼

中文(中國(guó))

 

English(USA)

打開(kāi)Default.aspx.cs,添加如下代碼

String s;

protected override void InitializeCulture()

{

s = Request.QueryString["currentculture"];

if (!String.IsNullOrEmpty(s))

{

//UICulture - 決定了采用哪一種本地化資源,也就是使用哪種語(yǔ)言

//Culture - 決定各種數(shù)據(jù)類型是如何組織,如數(shù)字與日期

Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);

}

}

記得添上這個(gè)引用

using System.Threading;

運(yùn)行程序,分別點(diǎn)擊新增加的兩個(gè)鏈接,效果如圖所示:

中文(中國(guó))

Enlish(USA)

8.使用圖片資源

分別編輯LocalizedText.resx和LocalizedText.en-su.resx,添加圖片資源,如圖所示:

LocalizedText.resx

LocalizedText.en-su.resx

注意:當(dāng)圖形文件添加到圖形資源里時(shí),系統(tǒng)會(huì)自動(dòng)去除擴(kuò)展名并把“-”替換成“_”,如上圖,我的文件名為“en-us-flag.png”添加到資源里變成了“en_us_flag”。

打開(kāi)Default.aspx,切換到[設(shè)計(jì)]視圖,從工具箱拖一個(gè)Image控件到頁(yè)面上。打開(kāi)Default.aspx.cs,添加如下代碼

protected void Page_Load(object sender, EventArgs e)

{

Image1.ImageUrl = "~/Image.aspx?currentculture=" + s;

}

選中網(wǎng)站右鍵,創(chuàng)建一個(gè)新的WEB窗體,命名為Image.aspx,編輯該頁(yè)面,在Page節(jié)增加如下代碼

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Image.aspx.cs" Inherits="Image" Culture="auto" UICulture="auto"%>

注意:默認(rèn)創(chuàng)建的WEB窗體的Page節(jié),不包括Culture和UICulture這兩個(gè)屬性,一定要手工添上,切記!

打開(kāi)Image.aspx.cs,添加如下代碼

protected override void InitializeCulture()

{

String s = Request.QueryString["currentculture"];

if (!String.IsNullOrEmpty(s))

{

//UICulture - 決定了采用哪一種本地化資源,也就是使用哪種語(yǔ)言

//Culture - 決定各種數(shù)據(jù)類型是如何組織,如數(shù)字與日期

Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);

}

}

protected void Page_Load(object sender, EventArgs e)

{

System.Drawing.Bitmap img = (System.Drawing.Bitmap)GetGlobalResourceObject(

"LocalizedText",

CultureInfo.CurrentCulture.Name.ToLower().Replace("-", "_") + "_flag");

System.IO.MemoryStream ms = new System.IO.MemoryStream();

img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

Response.ClearContent();

Response.ContentType = "image/jpeg";

Response.BinaryWrite(ms.ToArray());

img.Dispose();

ms.Dispose();

ms.Flush();

}

當(dāng)然,別忘了添上這兩個(gè)引用 using System.Threading;

using System.Globalization;

運(yùn)行程序,分別點(diǎn)擊兩個(gè)鏈接,效果如圖所示:

中文(中國(guó))

English(USA)
深圳北大青鳥(niǎo)嘉華校區(qū)

評(píng)論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
中文字幕日韩理论在线 | 欧美中文字幕一级电影 | 亚洲综合婷婷六月日韩 | 中文字幕精品亚洲无线一男人 | 日本免费人成视频在线观看 | 亚洲精品人成网线在线va |