實現(xiàn)ASP.NET全球化
一、 ASP.NET全球化信息
在我的網(wǎng)站中,在創(chuàng)建資源文件并加入一些本地化數(shù)據(jù)后,我首先開始使用顯式本地化來設置控件(例如,在我的網(wǎng)站中的標簽)的文本,以便它們可以從資源文件中得到它們的值。既然存在四種語言;所以,除一個完全可依賴的資源文件之外(沒有本地化命名),我創(chuàng)建了四個資源文件。
注意,這些資源文件都以本地化標記作為它們的中間名稱,因此,我需要把UICulture設置為與該本地化相同的名字以便ASP.NET存取這些資源文件。
但是,問題是:我該怎樣在PostBack事件中動態(tài)地改變文化呢?幸好,ASP.NET在Page類中提供了一種可重載的方法: InitializeCulture()。這個方法在頁面生命周期(在生成任何控件之前)中執(zhí)行得很早,并且在此,我們能夠設置當前線程的UICulture和Culture。
由于這個方法位于Page類中,并且我不想針對每一個web頁面都重復相同的代碼,所以我創(chuàng)建了一個BasePage類,我的應用程序中的所有的aspx頁面都派生自這個BasePage類。但是現(xiàn)在,我又面臨另一個問題。
回到UI設計:我使用了一個MasterPage和一個Header用戶控件(在一個ContentPlaceHolder內(nèi))。我把一個缺省的頁面與該MasterPage相關聯(lián)。整個站點必須動態(tài)地實現(xiàn)本地化。因此,在頂部,有一個下拉框,用戶可以從中選擇一種語言/文化。在BasePage的 InitilializeCulture方法中,我必須取得用戶從下拉框選擇的項的值;但是,因為它還沒有被初始化,所以,我還不能存取任何控件的值。答案是:使用表單集合(從響應對象內(nèi))。
一旦我們從web應用程序中提取了所有的內(nèi)容并且基于用戶選擇和使用Resources.TestWebSite.XXXPropertyName設置好了Culture和UICulture,那么,我們就已經(jīng)為我們的全球化框架作好了準備。現(xiàn)在,剩下的唯一事情是把資源特定的數(shù)據(jù)添加到相應的資源文件中。針對每一種文件類型,我們需要有一個單獨的(和適當命名的)資源文件。這個過程稱為本地化。在我的web.config文件中,我使用了下列屬性:
- <globalization responseEncoding"=utf-8" requestEncoding="utf-8" fileEncoding="utf-8" />
二、設置語言方向相應的dir屬性
許多時候,我們還需要設置本地化文本的方向(這是使用<html> 或<body>標簽的dir屬性設置的)。這是必需的,因為有些語言從右到左(RTL)讀取,例如Arabic,不同于象Hindi和 English這樣語言的標準的從左到右(LTR)的讀取方式。這可以通過把.resx文件中的dir屬性設置為適當?shù)闹祦韺崿F(xiàn)。
首先,你可以在所有資源文件中創(chuàng)建一個Direction(你可以使用任何名)域,并基于單個資源文件把它的屬性設置為RTL或LTR。對于Arabic,這個域的值是RTL,而對于Hindi則是LTR。然后,把<body>標簽的dir屬性設置為如下:
- <body runat="server" dir="<%$ Resources: TestSiteResources, Direction %>">
三、使用數(shù)據(jù)庫實現(xiàn)本地化
我們已經(jīng)看到了如何本地化控件的文本和UI描述。但是,存儲在數(shù)據(jù)庫中的內(nèi)容會怎么呢?其實,這一部分內(nèi)容也需要本地化,但是由于它存儲在一個DB中,所以我們不能使用資源文件來實現(xiàn)相同目的。為此,我們需要創(chuàng)建新的表格。
假定我有一個存儲用戶評價的表格。該表格結構如下所示:
現(xiàn)在,我們想實現(xiàn)以本地化的文本來顯示Comments和Name字段,但是,我們不可能把所有這些域的不同語言版本都存儲在同一個表格中(既然存在不需要被本地化但卻重復的其它域)。因此,我們需要重新組織該表格結構并且創(chuàng)建另一個表格來存儲這兩個域的本地化版本。首先,我們需要從這個表格中刪除這兩個域并創(chuàng)建一個如下所示的新表格:
ASP.NET全球化與本地化之全球化
在此,我們添加了一個新域:CultureID,它等價于LCID(或Locale標識符)。我們能夠按如下所示添加文化特定的本地化數(shù)據(jù):
現(xiàn)在,我們可以使用以CultureID(LCID)作為參數(shù)的SQL查詢來取得本地化內(nèi)容。我們還能夠提供一個用戶接口來把本地化數(shù)據(jù)輸入到這樣的表格以便能夠以一種交互方式創(chuàng)建相應的內(nèi)容。
四、總結
在本文中,我們討論了有關實現(xiàn)ASP.NET全球化的一些重要方面,并且看到,這是非常容易實現(xiàn)的事情.
【編輯推薦】