在ASP.NET 2.0中實現本地化

來源:互聯網
上載者:User
摘要

  由于越來越多的跨國公司需要跨語言的WEB應用,所以本地化工作變得尤其重要,在ASP.NET 1.1 中我們使用ResourceManager 類來實現這個工作,而2.0中提供了更加方便的方法和工具來實現。

  導言

  現在很多跨國的商務需求都需要實現多語言,對客戶來說他們始終想看到網站是用他們所熟悉的語言來顯示的,他們不會關注網站使用的是什麼技術,而現在的開發工具或者開發技術並沒有在本地化方面做的很好,我們還需要花大量的時間和精力去做本地化的工作。

  ASP.NET2.0的出現大大簡化了這個過程,配合VS.NET2005新的特性,我們可以很方便得來自動剝離網站的語言元素,很容易去實現多版本網站,而且許多針對本地化的API同樣也可以方便得協助我們完成這個過程

   .NET 1.1中的本地化:

  在1.1中我們使用ResourceManager來實現這個過程,或許對於WINFORM來說這個過程還比較簡單,但是VS.NET2003並沒有給我們WEBFORM下的本地化工作帶來什麼自動化,我們還需要花很多精力在重複復制代碼上。

  .NET 2.0 中的本地化:

  2.0中的本地化還是基於1.1的,但是卻提供了很多自動化工作:

  1、自動產生頁面資源檔

  2、方便的編程實現資源檔的訪問

  3、自動為頁面裝載合適的語言

  4、控制項和資源檔自動匹配

  5、強型別的資源檔

  6、資源檔編輯器

  7、資源檔使用運算式

  8、資源Provider模型

   本地資源檔實現:

  VS.NET 2005 菜單-Tools-Generate Local Resource,所產生的資源檔將會放在/App_LocalResources下面

  顯示了,不僅ASPX檔案,使用者控制項和MASTER頁都會自動產生資源檔,自動產生的資源檔名將是原檔案名稱加上.resx,頁面上的所有伺服器控制項,使用者控制項和在伺服器端啟動並執行HTML控制項都會被自動加在資源檔中,顯示了一個LINKBUTTON的資源檔

  可以看到,只有TEST和TOOLTIP這些涉及到語言的屬性被加入了資源檔

    再切換回檢視狀態可以看到一些屬性右邊有紅色標記,這表明這個屬性綁定的是本地資源,通常這些都是IDE自動為你做的,再看看上面的AlternateText後面有一個藍色標記,這表示這個資源是全域的資源

  全域資源的實現:
  在我們的項目中通常有很多重複的東西,比如MasterPage,使用者控制項,菜單,甚至還有一些提示資訊等這些東西如果包含在多個頁面,我們每次都需要重複製作他們的資源檔,這非常不科學,所以我們要手動的來制定全域資源。這個時候先要建立一個/App_GlobalResources目錄然後在下面添加資源檔,先看看IDE提供給我們的資源檔編輯器

  非常多種的類型,我們訪問全域資源不需要考慮太多,比如說一個資源檔是Flags.resx,試試在編譯器內輸入Resources.Flags,當再次按下.的時候,智能感應出來了

  可見這些資源檔都被編譯成了強型別的類,比如說圖片資源我們得到的類型是System.Drawing.Bitmap
  本地資源訪問
  通常我們使用meta:resourcekey來指定控制項的資源,如果說一個控制項的資源首碼是LinkButtonResource1的話,那麼它的Text屬性的資源就是LinkButtonResource1.Text,這個是產生資源檔的時候IDE自動做的,如果我們需要在程式中訪問本地資源可以按照下面的例子:

LinkButton button1 = new LinkButton();
this.lnkSelectCulture = button1;
button1.ID = "lnkSelectCulture";
button1.PostBackUrl = "selectculture.aspx";
button1.Text = ((string)
  base.GetLocalResourceObject("LinkButtonResource1.Text"));
button1.ToolTip = ((string)base.GetLocalResourceObject("LinkButtonResource1.ToolTip"));

  當然,如果你不想你的控制項使用資源檔可以按照下面的例子修改:

<asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx"
  runat="server" meta:localize="false">Change Culture Settings</asp:LinkButton>

  全域資源訪問
  使用下面的格式來定位全域資源

<%$ resources: [applicationkey], resourcekey%>

  比如從Glossary.resx讀取資源例子如下

<asp:ImageButton ID="btnIDesign" Runat="server"   ImageUrl="~/Images/idesignlogo.jpg"
  AlternateText='<%$ Resources:Glossary, MissionSatatement%>'
PostBackUrl="http://www.idesign.net"   meta:resourcekey="ImageButtonResource1" />

  當然你也可以直接用IDE的運算式對話方塊直接來選擇

    用程式讀取方式如下:

ImageButton button1 = new ImageButton();
// other initialization code
button1.ID = "btnIDesign";
button1.AccessKey = (string) base.GetLocalResourceObject("ImageButtonResource1.AccessKey");
button1.AlternateText = (string) base.GetGlobalResourceObject("Glossary", "MissionStatement");
button1.ImageUrl = (string)  base.GetLocalResourceObject("ImageButtonResource1.ImageUrl");
button1.ToolTip = (string) base.GetLocalResourceObject("ImageButtonResource1.ToolTip");
button1.Visible = (bool)
  base.GetLocalResourceObject("ImageButtonResource1.Visible", typeof(Control), "Visible");

  本地化HTML控制項和文本:
  Html控制項:html控制項不能用前面說的兩種運算式來指定資源,除非是讓它runat=server,不過對於頁面的title比較特殊,它也會作為頁面的一個對象自動產生本地資源

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

  不過,我們也可以為它制定全域資源

<head runat="server">
  <title>
<asp:Literal Text='<% $ Resources: Glossary, DefaultPageTitle %>' runat="server"></asp:Literal>
</title>
</head>

  本地化文本:
  對於項目中很多靜態文本,我們可以使用Localize控制項來包含這些文字,其實這個控制項和Literal相似,但是它能在設計模式下隨意修改裡面的文字內容,看下怎麼訪問本地資源和全域資源

<asp:Localize id="welcomeContent" runat="server"   meta:resourcekey="welcome">Welcome!</asp:Localize>
<asp:Localize id="welcomeContent" runat="server" text='<%$ resources: Glossary,
  welcomeText%>'>Welcome!</asp:Localize>

  多語言實現:

  從預設的資源檔複製一個新的的資源檔,只要在resx前面加上地區代號,逐項編輯即可,如下設定後瀏覽器會自動根據設定(工具-選項-語言)調用新的資源檔

<%@ Page UICulture="auto" Culture="auto">

  當然你也可以通過web.config檔案指定一種語言

<system.web>
 <globalization culture="es-ES" uiCulture="es">
</system.web>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.