程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> DevExpress控件漢化詳解(WebForm)

DevExpress控件漢化詳解(WebForm)

編輯:關於.NET

所有Developer Express .NET產品都有本地化資源,比如按鈕屬性,控件屬性描述,菜單項,確認和錯誤的信息等等,所有這些資源字符串可以很容易地被翻譯成各種語言。

先看下面漢化前後的圖片:

漢化前 漢化後

如何實現上述的漢化呢?Dev漢化總結下來一般分三種形式:一種是利用已經漢化好的資源包;一種是使用本地對象類,利用代碼漢化;還有就是資源包和代碼結合。下面我們就這三種情況的實現方法和各自的利弊做一詳細的講解。

一、利用資源包漢化

一、如何使用資源包進行漢化

首先,您需下載現有的資源包(資源包漢化由慧都科技提供,下載鏈接地址www.devexpress.com/kb=A421)將所需的漢化的資源zh-CHS中國 (簡體) 、zh-CN中國 (中國)、zh-TW 中國 (台灣)拷貝到執行目錄下。利用CurrentThread.CurrentUICulture加載資源包。參照代碼如下:

Code

1static void Main()
2{
3  System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
4      Application.Run(new Form1());
5}
6

二、如何修改資源包

資源包有一個跟Dev組件同樣的強名密鑰文件StrongKey.snk。如果你想編譯資源文件,你可以做到這一點,只要你擁有組件完整的源代碼,重新指定強名密鑰文件,獲得自己的StrongKey.snk。具體實現可查閱MSDN Library。

1、拷貝StrongKey.snk從安裝的源代碼的目錄"Program Files"Developer Express .NET vX.Y"Sources"DevExpress.Key" 到當前資源包的DevExpress.Key目錄。(vX.Y為當前安裝版本號)

2、打開資源包Localization.sln工程,根據下面提及的使用本地化方法找出要漢化的屬性,當然如果你購買了源代碼也可以查看源代碼Localization類裡面的本地化方法列出的變量來實現你需要的漢化。

3、重新生成資源文件,這時對應的Dll將在DevExpress.DLL文件夾中。

注:利用現有資源包漢化使用簡單,運用也最普遍,但因目前漢化的資源不全,往往會修改資源包。然而StrongKey.snk強名密鑰文件商家不可能提供,因為那是他們的簽名。如果在沒有自己StrongKey.snk的情況下重新編譯資源包,那只能將自己修改好的資源文件,借助於商家來幫助重新編譯。

二、使用本地對象漢化

每一個Dev組件或者庫都有其相對應的本地化類。其實本地化的過程很簡單,首先創建一個子類繼承相對應的本地化基類(參照下面表),重載GetLocalizedString方法,這方法應該返回字符串的具體字符串資源標識符。其次,就是調用該類,實例化對應類的靜態Active屬性。

Control Class XtraBars DevExpress.XtraBars.Localization.BarLocalizer XtraCharts DevExpress.XtraCharts.Localization.ChartLocalizer XtraEditors Library DevExpress.XtraEditors.Controls.Localizer XtraGrid DevExpress.XtraGrid.Localization.GridLocalizer XtraLayout DevExpress.XtraLayout.Localization.LayoutLocalizer XtraNavBar DevExpress.XtraNavBar.NavBarLocalizer XtraPrinting Library DevExpress.XtraPrinting.Localization.PreviewLocalizer XtraPivotGrid DevExpress.XtraPivotGrid.Localization.PivotGridLocalizer XtraReports DevExpress.XtraReports.Localization.ReportLocalizer XtraScheduler DevExpress.XtraScheduler.Localization.SchedulerLocalizer XtraSpellChecker DevExpress.XtraSpellChecker.Localization.SpellCheckerLocalizer XtraTreeList DevExpress.XtraTreeList.Localization.TreeListLocalizer XtraVerticalGrid DevExpress.XtraVerticalGrid.Localization.VGridLocalizer

具體代碼實現:

一、實現上述漢化,您需要在代碼中添加如下代碼:

代碼漢化

1 public class ChEditLocalizer : Localizer
2  {  // 重載 GetLocalizedString 方法
3    public override string GetLocalizedString(StringId id)
4    {  switch (id)
5      {  // PictureEdit 菜單漢化
6        case StringId.PictureEditMenuCut: return "剪切";
7        case StringId.PictureEditMenuCopy: return "復制";
8        case StringId.PictureEditMenuPaste: return "粘貼";
9        case StringId.PictureEditMenuDelete: return "刪除";
10        case StringId.PictureEditMenuLoad: return "加載";
11        case StringId.PictureEditMenuSave: return "保存";
12        // TextEdit 菜單漢化
13        case StringId.TextEditMenuCut: return "剪切";
14        case StringId.TextEditMenuCopy: return "復制";
15        case StringId.TextEditMenuPaste: return "粘貼";
16        case StringId.TextEditMenuDelete: return "刪除";
17        case StringId.TextEditMenuSelectAll: return "全選";
18        case StringId.TextEditMenuUndo: return "返回";
19        // DateEdit 控件漢化
20        case StringId.DateEditToday: return "今天";
21        case StringId.DateEditClear: return "取消";
22      }
23      return "";
24    }
25}
26
27  public class MyTreeListLocalizer : TreeListLocalizer
28  {
29    public override string GetLocalizedString(TreeListStringId id)
30    {
31      switch (id)
32      {
33        //TreeList列菜單漢化
34        case TreeListStringId.MenuColumnSortAscending: return "升序";
35        case TreeListStringId.MenuColumnSortDescending: return "升序";
36        case TreeListStringId.MenuColumnBestFit: return "固定列";
37        case TreeListStringId.MenuColumnBestFitAllColumns: return "固定所有列";
38        case TreeListStringId.MenuColumnColumnCustomization: return "自定義列";
39      }
40      return "";
41    }
42  }
43

二、一旦ChEditLocalizer和MyTreeListLocalizer被創建你能設定對應的Active,實現方法參照如下:

Active
private void Form1_Load(object sender, EventArgs e)
{ 
  Localizer.Active = new ChEditLocalizer();
  TreeListLocalizer.Active = new MyTreeListLocalizer();
}

注:代碼漢化可以讓用戶自定漢化內容,但一旦重載GetLocalizedString方法,就必須對整個對象類漢化,代碼量較大。當然,如果您只想對局部屬性進行漢化,其他的保留英語,你可以在返回為空的代碼:

return "";修改為return base.GetLocalizedString(id);

三、資源包與代碼結合

這種方法介於上述兩種方法之間,既使用了資源包,減少了代碼漢化的工作量,又在資源包沒有滿足漢化的基礎上修改追加漢化,但仍然存在比如XtraEditors資源包中有復制與粘貼漢化調換了,就必須對整個Localizer類的成員進行漢化的情況。具體實現可在應用程序初期化時同時追加下面代碼:

Code

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
Localizer.Active = new ChEditLocalizer();

補充:如果你購買了源代碼,並且有自己的StrongKey.snk強名密鑰文件,那麼直接在對應的控件源代碼中修改GetLocalizedString的每一個返回值,使用重新編譯源代碼的Dll文件來達到直接漢化的目的,但同樣會花費很大的工作量。

與網上其它關於 DevExpress 漢化的文章不同,本文提供了DevExpress WinForm 漢化和 WebForm(ASPxControls) 漢化的最簡單最實用的方法,能讓你快速實現對DevExpress 的漢化。同時也說明了使用原始 .resx 文件實現漢化的方法。

WebForm(ASPxControls) 漢化效果圖

WinForm 漢化效果圖

如何實現上述的漢化呢?DevExpress 漢化總結下來一般分三種形式:

一、利用已經漢化好的資源包;

二、使用本地對象類,利用代碼漢化;

三、資源包和代碼結合。
本文只講述用漢化好的資源包進行漢化的方法,因為此種方法最簡單實用。

1. WebForm(ASPxControls)漢化

第一步:

在你的項目中添加一個資源文件夾"App_GlobalResources"

第二步:

找到本地化資源文件,將其全部復制到 App_GlobalResources

所有的 ASP.NET Controls 都有本地化資源文件, 默認情況下這些文件放在以下目錄:

C:\Program Files\Developer Express .NET vX.Y\Sources\DevExpress.Web.ASPxGlobalResources\

第三步:

直接到DevExpress網站下載相應版本的 中文資源文件 ,若沒有對應版本的資源,也沒有關系。將先前復制到 App_GlobalResources 目錄下的文件在復制一份,用 visual studio 直接對其編輯,自己漢化。例如:

將 DevExpress_Web_ASPxEditors_vX_Y.resx 重命為 DevExpress_Web_ASPxEditors_vX_Y.zh-CHS.resx , 打開文件對其進行漢化。

做好之後的效果圖如下:

下面還要修改 web.config 文件, 在 system.web 下加入

<globalization uiCulture="zh-CHS"/>

至此,完成了對 WebForm 的漢化。

2. WinForm漢化

其實相對於 WebForm 漢化來說,WinForm 的漢化要更簡單一些。在 DevExpress 的安裝目錄下找到已有的漢化資源包 zh-CHS

默認位置為:C:\Program Files\DevExpress X.Y\Components\Sources\DevExpress.DLL 。

如果沒有也沒關系,可以到DevExpress的官網下載對應版本的 中文資源包,將所需的漢化的資源zh-CHS中國 (簡體) 、zh-CN中國 (中國)、zh-TW 中國 (台灣)拷貝到執行目錄下。利用 CurrentThread.CurrentUICulture 加載資源包。參照代碼如下 :

static void Main()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}

當然,要是你所用的操作系統的語言就是對應的資源包的語言,那 System.Threading.Thread.CurrentThread.CurrentUICulture 也可省略不寫。

資源圖:

至此,完成了對 WinForm 的漢化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved