ASP.NET 網站支持多語言


ASP.NET網站支持多語言

(本地資源文件和全局資源文件的調用及需注意的地方總結)

 

一、   本地資源文件(App_LocalResources)

①、     本地資源的生成及調用

1、本地資源的VS自動生成方法:

將頁面調整到【設計】視圖,然后在VS2008菜單欄中

【工具】=》【生成本地資源】即可生成該頁面的資源文件,在App_LocalResources文件夾中可查看。eg:Default2.aspx.resx

2、本地資源的手動生成方法:

選中網站=》添加新項=》然后選擇【資源文件】即可創建一個資源文件,但是此時可以看到剛剛創建的資源文件.resx存放在App_GlobalResources文件夾中,當前為全局資源文件,需要在網站中創建一個名為App_LocalResources的文件夾(即本地資源文件夾)然后將剛剛創建的全局資源文件拖到當前文件夾中即可,然后在調用的時候需要在控件中添加meta:resourcekey=”資源鍵” 代碼,具體在調用中講解。

3、本地資源的調用:

(1)、服務器控件

   1.1、前台隱示使用本地化資源,VS2008自動生成本地資源在控件中就會自動包含meta:resourcekey=”資源鍵” 代碼,如果某控件未掃描到則就不會有該代碼標識需要手動添加此代碼

eg:

<asp:Label ruant=”server” ID=”lbl_msg”  meta:resourcekey=”lbl_msg” ></asp:Label>

 

   1.2、前台顯示使用本地化資源

eg:

<asp:Label ruant=”server” ID=”lbl_msg” 

Text=”<%$  Resources: lbl_msg .Text %>

ToolTip=”<%$  Resources: lbl_msg .ToolTip %>

></asp:Label>

 

藍色圖標和紅色圖標表示綁定數據形式(顯示/隱示),如下圖示:

 

1.3、后台編碼時使用本地化資源

 

方法一:

//后台通過資源鍵來獲取資源值,然后賦值給頁面對象

this.txtbox1.Text=(string)GetLocalResourceObject("資源鍵");

 

this.txtbox1.Text=(string)HttpContext.GetLocalResourceObject("資源文件名", "資源鍵");

 

(2)、非服務器控件(HTML控件,input …):

   1.1、html控件或input控件都無法自動生成資源文件,需要手動添加meta:resourcekey=”資源鍵” 標記,並將其添加到資源文件中,但必須注意的是控件中必須添加服務器標識屬性,即:runat=”server”

eg:

<input id=”txt_msg” type=”text” meta:resourcekey=” txt_msg” />

測試結果:無法顯示資源txt_msg值,將其修改如下:

<input id=”txt_msg” type=”text” meta:resourcekey=”txt_msg”  runat="server" />

測試結果:正常顯示資源txt_msg

 

②、注意事項:

 

1、  每個頁面必須包含一個默認的本地資源文件,(資源文件名和頁面文件名區別在於資源文件名是在頁面文件名(包含文件的后綴)基礎上添加一個.resx后綴)

eg:index.aspx.resx

默認的本地資源文件的作用:當其他本地資源文件,eg:index.aspx.en-US.resx 或…資源文件中未包含某,而默認的本地資源文件中包含某,則從默認的本地資源文件中取值。

2、  如果頁面需要支持多語言則可以復制默認的本地資源文件,然后修改其文件名稱

eg:index.aspx.en-US.resx(英文)

然后將index.aspx.en-US.resx中的鍵值修改為英文即可

3、  1)如果需要將所有的頁面都使用同一種語言則可以配置web.config文件,前提將頁面Page指令中的culture="auto" uiCulture="auto" 刪除,否則首先使用頁面中的語言形式

eg:

<system.web>

<!—en-US(英文),zh-CN(中文)  … 

UICulture - 針對用戶界面的安鈕之類的控件顯示
Culture - 決定各種數據類型是如何組織,如數字與日期,貨幣
-->

         <globalization culture="en-US"  uiCulture="en-US"/>

</system.web>

       2)如果某個頁面和其他的頁面使用的語言不同,則可以在某個頁面Page命令中設置culture和uiCulture, 這兩個屬性的作用是使頁面優先跟據瀏覽器的語言設置自動加載相應語言的資源文件等顯示方式

  eg:

 <%@ Page culture="zh-CN" uiCulture="zh-CN" %>

 

4、  如果想在頁面后台(即.cs文件)通過傳遞參數的方式設置使用的語言,則

eg:

命名空間引用:

using System.Threading;

using System.Globalization;

 

protected override void InitializeCulture()

{

string culture = Request.QueryString[“culture”].ToString();

        if (culture != "")

        {

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

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

        }

        else

        {

           //默認中文

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");

            Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");

        }

        base.InitializeCulture();

}

 通過傳遞編碼參數的方式,進行重寫InitializeCulture (初始化語言方法)來改變頁面語言顯示方式。

5、  本地資源文件只能在本頁面調用,不能被其他頁面調用,假如有兩個頁面Index1.aspx和Page 2.aspx則,如下資源文件

eg:Index1.aspx.resx

Page2.aspx.resx

Index1.aspx頁面不能調用Page 2.aspx.resx中的資源鍵值;

Page 2.aspx頁面也不能調用Index1.aspx.resx中的資源鍵值;

Index1.aspx頁面只能調用Index1.aspx.resx中的資源鍵值;

Page 2.aspx頁面只能調用Page 2.aspx.resx中的資源鍵值;

 

二、   全局資源文件(App_GlobalResources)

①  、全局資源的生成及調用

1全局資源的手動生成方法:

選中網站=》添加新項=》然后選擇【資源文件】即可創建一個資源文件,但是此時可以看到剛剛創建的資源文件.resx存放在App_GlobalResources文件夾中,當前為全局資源文件.

 

2、前台全局資源文件的調用:

  1)、在需要調用的控件中添加<%$ Resources : 資源文件名,資源鍵 %>

eg

<asp:Label ID="lbl_global" runat ="server"  Text ="<%$ Resources:langlbl_global %>">

</asp:Label>

 

 2)、前台頁面級JavaScript調用全局資源文件方法:

<%= Resources .資源文件名 . 資源鍵 %>

eg

<script>

var msg=” <%= Resources . lang . lbl_global %>

</script>

 

  3、后台全局資源文件的調用:

      1)、在后台直接使用Resources  .資源文件名  .資源鍵 方可獲取資源值

        eg

       this. lbl_global.Text=Resources . lang . lbl_global ;

      //后台獲取image類型對象

       System.Drawing.Bitmap imgJpg= Resources.lang.img_jpg

     2)、

//后台通過資源鍵來獲取資源值,然后賦值給頁面對象

this.lbl_global.Text=(string)GetGlobalResourceObject ("資源鍵");

this.lbl_global.Text=(string)HttpContext.GetGlobalResourceObject("資源文件名", "資源鍵");

 

     3)、后台使用 ResourceManager類來獲取資源

         ResourceManager rm = new ResourceManager(Resource1.ResourceManager.BaseName,

                Assembly.GetExecutingAssembly());

string str=rm. GetString(“資源鍵”);

 

②  注意事項:

1、全局的資源文件,存放在App_GlobalResources文件夾中,以.resx為后綴,首先必須添加一個默認的全局資源文件

eg:lang.resx

默認的全局資源文件的作用:①、當其他全局資源文件,eg:lang.en-US.resx 或lang.zh-CN.resx等 資源文件中未包含某,而默認的全局資源文件中包含某,則從默認的全局資源文件中取值;②、資源調用時只能通過默認的資源文件名去調用,即

Resources . lang . 資源鍵   (正確)

而不能使用

Resources . lang . en-US . 資源鍵; (錯誤×)

lang.en-US.resx 或lang.zh-CN.resx 只是根據使用的語言不同來自動調用

 

2、全局資源文件可以在本網站的所有頁面中調用。

 

其他需要注意的地方和本地資源差不多,這里就不重復講解。

 

以上是我對本地資源和全局資源的理解, 如果有錯誤的地方請各位大神給予指導。^.^

 

未解決的問題:

 

無法實現外部Javascript中調用資源的問題,如果各位大神有好的解決辦法,麻煩分享下噢,謝謝哈!

 

關於網站支持多語言問題相關文章:

http://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html

http://www.cnblogs.com/wenjl520/archive/2010/10/17/1853367.html

http://www.cnblogs.com/lansetiankong/archive/2010/07/30/1788790.html

http://www.cnblogs.com/winsonet/archive/2010/09/08/1821107.html

多語言資源文件制作工具: 

 

http://www.cnblogs.com/LifelongLearning/archive/2010/07/04/1771019.html

 


免責聲明!

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



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