日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现

發布時間:2025/3/18 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

四、多語言的實現

??? 上一章講的是如何實現與數據的連接,本章來講一下多語言是如何實現的。

??? 現在很多公司都已經開展了國際化的運作,所以多語言的支持已經成為必須要考慮的一個因素,現在能真正實現多語言的系統大多都比較昂貴。

??? 本系統的多語言支持直接得益于asp.net本身,它們本身都是使用UTF-8格式來存儲,不是傳統的本地編碼。在asp.net頁面中,每個控件都可以為多個國家字符集指定不同的字符串,但是這種方式不太靈活,特別是很多內容都是從數據庫中拼湊出來的時候。為此我采用了另外一種方式,類似于資源文件,只是直接把內容寫入了web.config中,這樣以明文的形式來存儲,并且web.config文件更改后,網站可以實現自動更新,不需要重新起動IIS。

??? 在web.config中,存儲多語言的部分如下例:

??????? <add key="STRING_EN_內容管理" value="Content" />

??????? <add key="STRING_EN_系統管理" value="System" />

??????? <add key="STRING_EN_權限管理" value="Privilege" />

??????? <add key="STRING_RU_內容管理" value="содержание" />

??????? <add key="STRING_RU_系統管理" value="Система" />

??????? <add key="STRING_RU_權限管理" value="привилегированность" />

??? 可以看出,是直接對<appSettings>進行的擴展使用,沒有建立新的段,key分成三部分:

??????? u STRING

??????? u EN / RU

??????? u 需要翻譯的中文

??? STRING用來標識,在后面的程序中會用到,而EN表示需要翻譯成何種語言,如果您需要其它語種,只要在這里指定即可,如上例就是指定了英文和俄文兩個語言,加上默認的中文,共有三種語言支持。最后只要把翻譯的結果寫在value這個屬性里即可。

??? 在配置了這個文件后,看起來以后每寫一個asp.net頁面都需要寫很多的程序去翻譯里面的字符,其實不是這樣的,我還定義了一個基類,繼承自Page,命名為local,在這個頁面的Page_Load函數中,自動搜索頁面中所包括的各種控件,比如文本框,標簽,按鈕,甚至圖片框等,然后根據當前指定的語言(可由Session中尋找,也可以由Post中查看),選擇相對應的翻譯,就實現了多語言。

??? 上面也提到了圖片框,在多語言環境中,很多圖片里都固化了本地的文字,所以對圖片也需要替換。我在網站的images目錄中,根據不同的語言增加了相應的子目錄,如images/EN images/RU 等等,在翻譯的時候,會把圖片的路徑由 images/a.gif 拼接成 images/EN/a.gif這種樣式,就實現了圖片的自動替換,當然前提是您已經準備了充足的圖片用于替換。

??? 取得頁面中的所有控件可以用下面的函數:

foreach(Control control in parent.Controls)

{

}

??? 在數據庫中,有一個專門的表ZR_LANG來存儲當前系統所支持的語言,在登錄界面(包括前端和后端)都會從這里判斷,多語言選擇需要支持哪些語言。

??? 如果頁面的標題寫在asp.net的頁面里,那么是不能利用上面的方式來翻譯的,所以我專門做了一個Label,來存放標題的內容,然后在頁面中按如下方式來引用標題:

<HTML> <HEAD> <title><%=lblTitle.Text%></title> ….

??? 這樣在運行后,就可以實現正確的標題的翻譯了。

??? 關于Grid表格,對于Caption的翻譯,并不難做,但是需要根據不同的語言,對Grid中的實際內容進行翻譯,這是比較難做的,我在這里用了一個小技巧來實現:把Grid中需要翻譯內容的列的前面加一個空格,在實際工作中,遇到有空格的列,就表明其中的內容需要翻譯,然后就一條條的翻譯過來即可。為什么加一個空格呢,首先,它不會對顯示有什么影響,另外,這樣也可以區別對待,不需要翻譯的列,就不需要使用此方式來占用過多的時間了。以下兩個函數處理此事,請參考:

public static void LocalGrid(ref System.Web.UI.WebControls.DataGrid grid)

{

System.Web.UI.Page page = new System.Web.UI.Page();

if (page.Session["__LANGUAGE__"] != null)

{

if (page.Session["__LANGUAGE__"].ToString() == "TW" || page.Session["__LANGUAGE__"].ToString() == "EN")

{

string lang = page.Session["__LANGUAGE__"].ToString();

foreach( System.Web.UI.WebControls.DataGridColumn column in grid.Columns )

{

string text = column.HeaderText;

if (System.Configuration.ConfigurationSettings.AppSettings["STRING_" + lang + "_" + text] != null)

{

text = System.Configuration.ConfigurationSettings.AppSettings["STRING_" + lang + "_" + text];

}

else

{

if (lang == "TW")

{

text = Big5.GetBig5Code(text);

}

}

column.HeaderText = text;

}

}

}

}

/// <summary>

/// 本地化一個GRID里的內容

/// </summary>

/// <param name="grid">表格</param>

public static void LocalGridContent(ref System.Web.UI.WebControls.DataGrid grid)

{

System.Web.UI.Page page = new System.Web.UI.Page();

if (page.Session["__LANGUAGE__"] != null)

{

ArrayList cols = new ArrayList();

int i = 0;

foreach( System.Web.UI.WebControls.DataGridColumn column in grid.Columns )

{

string text = column.HeaderText;

if (text.Substring(0,1) == " ")

{

column.HeaderText = Tran(column.HeaderText);

cols.Add(i);

}

i++;

}

if (cols.Count > 0)

{

int cnt = grid.Items.Count;

for (int j = 0; j < cnt; j++)

{

foreach(object col in cols)

{

int colNumber = (int)col;

string content = grid.Items[j].Cells[colNumber].Text ;

content = Tran(content);

grid.Items[j].Cells[colNumber].Text = content;

}

}

}

}

}

??? 到此,已經基本講了多語言的一些實現方式,在后面一節會來重點講一下本系統的控件結構。


本文轉自Aicken(李鳴)博客園博客,原文鏈接:http://www.cnblogs.com/isline/archive/2010/04/17/1714211.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。