ASP.NET2.0國際化/本地化應用程式的實現總結(多語言,多文化頁面的實現)

來源:互聯網
上載者:User

相關文章導航
  1. Sql Server2005 Transact-SQL 新兵器學習總結之-總結
  2. Flex,Fms3相關文章索引
  3. FlexAir開源版-全球免費群組視訊聊天室,免費網路遠程群組視訊會議系統((Flex,Fms3聯合開發))<視訊交談,會議開發執行個體8>

 

最近給單位做了一個業務下單系統,由於在全球幾個國家都有業務辦事處,所以下單系統做的是多語言介面的
我實現多語言是利用了ASP.NET2.0的資源檔,其實據我所知除了資源檔的方式,在資料庫裡面建多個表中進行一個地區文化映射,也是解決國際化的一種方式(關於這種方式感興趣的朋友可以自己試試)
現在我把實現國際化用到的相關知識總結如下:

在總結全球化知識前,先來瞭解一個名詞:運算式文法
運算式文法格式:<%$ ... %>
它是ASP.NET2.0新增了一種聲明性運算式文法,可在分析頁之前將值替換到頁中.
ASP.NET運算式是基於運行時計算的資訊設定控制項屬性的一種聲明性方式.
ASP.NET運算式主要應用在:連接字串,應用程式設定,資源檔等地方.

ASP.NET 運算式的基本文法如下:
<%$ expressionPrefix: expressionValue %>

下面示範運算式文法在連接字串和應用程式設定的應用:

a.運算式文法在連接字串的應用
將儲存在Web.config檔案中的連接字串的值設定為控制項的連接字串屬性
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
    SelectCommand="SELECT * FROM Employees"
    ConnectionString="<%$ ConnectionStrings:NorthwindCon %>">
</asp:SqlDataSource>

<configuration>
  <connectionStrings>
    <add name="NorthwindCon"
      connectionString="Data Source=yanfa0;Integrated Security=SSPI;Initial Ctalog=Northwind;"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

b.運算式文法在應用程式設定的應用
使用運算式來引用在Web.config設定檔中定義的應用程式設定
<asp:Label ID="Label1" runat="server" Text="<%$ AppSettings:Txt %>"></asp:Label>

<appSettings>
 <add key="Txt" value="Abc"/>
</appSettings>

其實運算式文法還有一個重要的應用,就是在資源檔中的使用,而資源檔正是我實現本地化的基礎.

ASP.NET2.0提供了三項關於網站國際化的特性:
(1)自動偵測瀏覽器的語言
通過確定發出請求的瀏覽器的語言,可以方便地根據使用者的地區性調整應用程式的行為
(2)聲明本地化的運算式
聲明性資源運算式可使您的應用程式使用多種語言,而不必手動編寫代碼來檢索資源並在頁中進行替換
只需使用ASP.NET2.0中新提供的運算式文法即可對資源替換進行定義
(3)產生本地資源
ASP.NET2.0支援標準的resx檔案格式自動進行運行時資源檢索。
Vs2005也提供了相應的支援,可方便地產生資源

 

A.地區性的格式設定
地區性名稱和標識符名稱遵循RFC 1766標準,具體請查看msdn
請看,我抓取的部分地區性圖片:

地區性通常分為三個類型:固定地區性、非特定地區性和特定地區性。
a.固定地區性不區分地區性。可以使用Null 字元串("")或者按地區性標識符0x007F來指定固定地區性,它與英語語言關聯,但不與任何省/地區關聯。
b.非特定地區性是與某種語言關聯但不與省/地區關聯的地區性。
c.特定地區性是與某種語言和某個省/地區關聯的地區性。
例如:"fr"(法語)是非特定地區性,而"fr-FR"(法語(法國))是特定地區性
特別提示:"zh-CHS"(簡體中文)和"zh-CHT"(繁體中文)是非特定地區性。

地區性是有階層的,即特定地區性的父級是非特定地區性,而非特定地區性的父級是InvariantCulture

利用ASP.NET2.0可輕鬆地逐頁更改地區性設定
只需將UICulture和Culture(地區性)屬性添加到.aspx等類似頁面內的Page指令即可
<%@ Page  Culture="Auto" UICulture="Auto" %>

要想對網站中的所有頁面都設定相同的地區性設定,只需將以下元素添加到位於網站的根處的web.config檔案中即可,這樣就不必分別為每個頁面進行分配了
<globalization uiCulture="auto" culture="auto" />

還可以為ASP.NET指定一個預設區域性
以下指定頁面的使用者介面地區性是自動,預設區域性是英語,頁的地區性是自動,預設區域性是英語(美國)
<globalization uiCulture="auto:en" culture="auto:en-US" />

Culture:指示頁的地區性設定
UICulture:指定用於頁的使用者介面(UI)地區性設定

關於Internet Explorer中設定慣用語言,可以如下配置:
1.選擇“工具 | Internet 選項”命令。
2.選擇“語言”按鈕。
3.在顯示的對話方塊中,單擊“添加”按鈕添加一個新的語言並選擇一個新的地區性。單擊“確定”。
4.請確保慣用語言位於列表的頂部。選擇該語言並單擊“上移”。單擊“確定”退出對話方塊。
5.重新整理。

 

B.設定語言喜好設定
自動檢測功能所選擇的預設Culture和UICulture有時可能不是使用者所需要的
例如:一個美國籍業務員來到中國出差,在中國總部上網下業務單.這種情況下,Web應用程式應該為使用者提供顯式更改語言的功能,給他提供英文版的業務下單頁

using System.Threading;
using System.Globalization;

protected override void InitializeCulture ( )
{
    //顯式的指定地區為en,為美國籍業務員顯示英文頁
    //實際應用中可以根據使用者選擇來動態設定語言
    //還可以利用Profile來記住使用者選擇的語言,以便使用者以後訪問網站時自動進入相應語言頁
    Thread.CurrentThread.CurrentUICulture = new  CultureInfo ( "en" );
    Thread.CurrentThread.CurrentCulture =  CultureInfo.CreateSpecificCulture ( "en-US" );
}

注意:對Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中進行,因為對首選瀏覽器語言的自動檢測是在頁生存期的早期發生的

特別提示:
CultureInfo類的執行個體化一般有兩個途徑,如下所示:
CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
CultureInfo culture = new CultureInfo(name);
二者的區分:
使用第一種方法,只能建立固定地區性或特定地區性的CultureInfo執行個體。
使用第二種方法,則是建立一個name所指定的地區性的CultureInfo執行個體,它可以是固定的,非特定的或特定地區性的

Thread類的CurrentCulture屬性用來擷取或配置當前線程的地區性,它必須被配置為特定地區性。
假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就會報錯!

 

C.全域資源和本地資源
資源檔實際是XML檔案,其中包含要轉換為不同語言或映像路徑的字串。
資源檔包含鍵/值對,每一對都是一個單獨的資源。鍵名不區分大小寫。
ASP.NET中的資源檔具有.resx副檔名。在運行時,.resx 檔案將編譯進一個程式集內。

全域資源位於一個名為/App_GlobalResources的專用檔案夾中,該檔案夾位於應用程式的根目錄下。
所有頁、使用者控制項等都可訪問這些資源,因此全域資源通常用作共用資源。
資源檔的名稱用在顯式運算式中,但也採用namespace.classname形式,以便在應用程式的Resources命名空間下進行強型別訪問。

本地資源在同級/App_LocalResources檔案夾下定義,RESX 檔案遵循關聯頁、使用者控制項或主版頁面以及地區性定義的命名規範.
例如:與Index.aspx頁一起有一個名為App_LocalResources的檔案夾,本地資源就放在該檔案夾中,該檔案夾根據頁的名稱相應命名如下:
Index.aspx.resx。非地區性特定資源檔
Index.aspx.fr.resx。地區性特定資源檔(法語)
Index.aspx.de.resx。地區性特定資源檔(德語)
檔案的基名稱與頁檔案名稱相同,後跟語言和地區性名稱,最後以副檔名 .resx 結尾

提示:Vs2005可以在設計檢視編輯器中開啟頁、使用者控制項或主版頁面時,在工具菜單中提供一個名為產生本地資源的命令。該命令可自動建立預設區域性的本地資源檔。
若要建立其他語言的資源檔,可以在方案總管中複製該檔案,然後按照以下模式之一重新命名它:
對於全域資源檔:
name.language.resx
name.language-culture.resx
對於局部資源檔:
pageOrControlName.extension.language.resx
pageOrControlName.extension.language-culture.resx
例如,如果建立名為WebResources.resx的全域資源檔,且該檔案將翻譯為英語,則請將複製的檔案命名為WebResources.en.resx。請注意,對於局部資源檔,資源檔名是頁或控制項的名稱(包括副檔名),後面是語言和地區性資訊。

全域資源檔和本地資源檔之間選擇?
通常情況下,希望在各頁之間共用資源時,應向全域資源檔添加這些資源。
全域資源檔中的資源還是強型別的,用於以編程方式訪問。
但如果將所有本地化資源都儲存在全域資源檔中,則這些檔案會變得很大。
此外,如果多個開發人員要處理不同的頁但在同一個資源檔中工作時,全域資源檔也會更難於管理。
本地資源檔使得單個ASP.NET網頁的資源比較容易管理,但不能在各頁之間共用資源。
此外,如果有許多頁必須本地化為多種語言,則可能會建立大量本地資源檔。

提示:
在對預設資源檔變更時,無論它是本地資源檔還是全域資源檔,ASP.NET都重新編譯資源並重新啟動ASP.NET應用程式
在添加附屬資源檔將不會導致重新編譯資源,但ASP.NET應用程式將重新啟動

 

D.資源運算式
有兩種形式的資源運算式:顯式和隱式

(1).本地資源的隱式運算式
如果已為頁建立了本地資源檔,則可以使用隱式本地化從該資源檔中為控制項填充屬性值。
使用隱式本地化時,ASP.NET讀取資源檔並將資源與屬性值相匹配。
在頁上,對該控制項的標記使用特殊的 meta 屬性可指定隱式本地化.

<asp:Button ID="Button1" runat="server" Text="Button" meta:resourcekey="Button1Resource1" />

resourcekey值與相應資源檔中的鍵相匹配,如果在資源檔中定義了某個屬性值,則ASP.NET會用資源值替換該屬性。

(2).本地資源的顯式運算式
與隱式本地化不同,必須為要設定的每個屬性分別使用一個資源運算式。
該運算式採用以下形式,ResourceID是必需的:
<%$ Resources:  ResourceID %>

<asp:Button ID="Button1" runat="server"
 Text="<%$ Resources: Button1Resource1.Text  %>"
    ToolTip="<%$ Resources:Button1Resource1.ToolTip %>" />
               

(3).全域資源的顯式運算式
該運算式採用以下形式:
<%$ Resources: Class , ResourceID %>
Class是全域資源時使用的資源檔,ResourceID是要讀取的資源的標識符.

<asp:Button ID="Button1" runat="server"
    Text="<%$ Resources : ResourceGlobal, Button1Txt  %>"
    ToolTip="<%$ Resources : ResourceGlobal, Button1ToolTip  %>" />

 

E.對全域資源和本地資源的編程訪問
調用GetLocalResourceObject或GetGlobalResourceObject方法以分別從全域資源檔或本地資源檔中讀取特定的資源

//訪問本地資源
Button1.Text = GetLocalResourceObject ( "Button1Resource1.Text" ).ToString ( );
Button1.ToolTip = GetLocalResourceObject ( "Button1Resource1.ToolTip" ).ToString ( );
//訪問全域資源
Button1.Text = GetGlobalResourceObject ( "ResourceGlobal" , "Button1Txt" ).ToString ( );
Button1.ToolTip = GetGlobalResourceObject ( "ResourceGlobal" , "Button1ToolTip" ).ToString ( );

 

F.編碼
對於比較舊的瀏覽器以及行動裝置上的瀏覽器,可能有必要將與瀏覽器之間的通訊轉換成某種基於字碼頁的舊式編碼
在web.config檔案的globalization節中配置即可

 

G.為全球化使用 HTML 標籤從右向左顯示文本
編寫ASP.NET網頁時,令文本從右向左顯示的最佳方式是採用dir方向)屬性
dir屬性通常放在html或body標記中,而頁上的控制項和HTML元素從指定的方向繼承

如果dir屬性的值為html標記中的rtl(從右向左),則說明頁的擴充樣式設定正確。
如果dir屬性的值為body標記中的rtl(從右向左),則架構和標題不繼承從右向左的方向。

1.在<html>或<body>標記中,將dir設定為ltr或rtl
<html dir="rtl">
<body dir="rtl" >

2.若要重寫單個控制項的預設方向,請將每個控制項的dir設定為ltr或rtl
<table dir="ltr" >
<asp:TextBox dir="ltr" >

 

H.代碼下載
http://files.cnblogs.com/aierong/WebSite_CultureInfo.rar

 

作者:http://www.cnblogs.com/aierong

 

 

 

Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQLDatabase Backup和恢複預存程序(加強版本)
sql server中分散式查詢隨筆(連結的伺服器(sp_addlinkedserver)和遠程登入映射(sp_addlinkedsrvlogin)使用小總結)
WAP開發資料站(最新更新)
自訂格式字串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三介面的實現)
Mcad學習筆記之非同步編程(AsyncCallback 委託,IAsyncResult介面,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之通過反射調用類的方法,屬性,欄位,索引器(2種方法)
Mcad學習筆記之序列化(2進位和Soap序列化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
WinForm開發,表單顯示和表單傳值相關知識總結
Mcad學習筆記之Microsoft Windows服務
copy某目錄下的所有的目錄和檔案到目的目錄(目錄數據備份)
ASP.NET狀態管理之一(概括篇)

 

 

收藏與分享

收藏到QQ書籤  添加到百度搜藏 {
function onclick()
{
window.open('http://myweb.cn.yahoo.com/popadd.html?url='+encodeURIComponent(document.location.href)+'&title='+encodeURIComponent(document.title), 'Yahoo','scrollbars=yes,width=440,height=440,left=80,top=80,status=yes,resizable=yes');
}
}">添加到雅虎收藏

RSS訂閱我 什麼是RSS?

     
        
     
     

東莞.net俱樂部

歡迎您的加入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.