DevExpress控件庫默認安裝后,使用的本地資源為英文。Developer Express .NET產品都有本地化資源,比如按鈕屬性,控件屬性描述,菜單項,確認和錯誤的信息等等,所有這些資源字符串可以很容易地被翻譯成各種語言。對於要求使用中文漢字資源的項目來說,首要任務就是處理漢化。
在WinForm開發模式下,處理漢化相對簡單。有以下幾種方法。
對於早期的DevExpress版本,已經有制作好的漢化資源DLL,例如:基於v13.1的漢化文件“Dxper.LocalizationCHS.Win.v13.1.5.dll”,使用起來非常方便,將其復制到項目中使用即可。
使用方法:引用 Dxper.LocalizationCHS.Win.v13.1.5.dll文件,並在窗體Form_Load事件中添加以下代碼。僅適用於WinForm。

1 DevExpress.XtraGrid.Localization.GridResLocalizer.Active = new
2 Dxper.LocalizationCHS.Win.XtraGridCHS(); 3
4 DevExpress.XtraEditors.Controls.Localizer.Active = new
5 Dxper.LocalizationCHS.Win.XtraEditorsCHS(); 6
7 DevExpress.XtraCharts.Localization.ChartResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraChartsCHS(); 8
9 DevExpress.XtraBars.Localization.BarLocalizer.Active = new
10 Dxper.LocalizationCHS.Win.XtraBars(); 11
12 DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraLayoutCHS(); 13
14 DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraPrintingCHS(); 15
16 DevExpress.XtraTreeList.Localization.TreeListResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraTreeListCHS(); 17
18 DevExpress.Office.Localization.OfficeResLocalizer.Active = new
19 Dxper.LocalizationCHS.Win.OfficeCHS(); 20
21 DevExpress.XtraSpreadsheet.Localization.XtraSpreadsheetLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraSpreadsheetCHS();
然而此類漢化包同步更新速度較慢,當使用高版本DevExpress時就無法使用了。
使用高版本的DevExpress后,需要使用官方的漢化資源文件。到官方下載漢化包后,打開目錄,看到漢化文件是一系列的獨立資源類,它對應着不同的控件漢化內容
以上是DevExpress控件庫的全部漢化資源,我們不需要全部復制,根據項目的實際使用的控件,找到對應控件的漢化資源,按需復制。
紅色框內即為項目中實際使用的控件(可能有更多其他引用),找到對應控件的漢化資源,將其拷貝到DevExpress安裝目錄D:\Program Files (x86)\DevExpress 14.1\Components\Bin\Framework(視具體安裝路徑)
以上操作完成后,在程序入口函數中,注冊該資源文件:
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-cn"); //加載漢化語言包
當項目安裝部署,制作安裝包時,同樣需要以上漢化資源(后續文章會詳細講解基於DevExpress控件庫開發項目的安裝包制作過程)。如果是直接拷貝項目到其他機器上運行,需要把zh-cn目錄拷貝到項目中才能正常運行。
即使做了以上漢化,有些資源還是顯示為英文
此消息提示框是按照方法二漢化后,在程序中運行的實際效果。其中按鈕的顯示文字漢化不成功,仍然為英文。
為了解決該問題,請參考方法三。
每一個DevExpress組件或者庫都有其相對應的本地化類。步驟為:
1、創建一個子類繼承相對應的本地化基類;
2、重載GetLocalizedString方法,這方法應該返回字符串的具體字符串資源標識符;
3、調用該類,實例化對應類的靜態Active屬性。
以XtraTreeList控件為例說明:

1 /// <summary> 2 /// 自定義DevExpress漢化資源,漢化XtraTreeList控件 3 /// </summary> 4 public class CustomLocalizedXtraTreeList : TreeListLocalizer 5 { 6 /// <summary> 7 /// 重寫GetLocalizedString方法 8 /// </summary> 9 /// <param name="id">StringId</param> 10 /// <returns></returns> 11 public override string GetLocalizedString(TreeListStringId id) 12 { 13 switch (id) 14 { 15 case TreeListStringId.MenuColumnBestFit: 16 return "最佳匹配"; 17 case TreeListStringId.PrintDesignerHeader: 18 return "打印設置"; 19 case TreeListStringId.ColumnCustomizationText: 20 return "自定義"; 21 case TreeListStringId.MenuFooterMin: 22 return "最小值"; 23 case TreeListStringId.MenuFooterMax: 24 return "最大值"; 25 case TreeListStringId.MenuFooterSum: 26 return "和"; 27 case TreeListStringId.MenuFooterAllNodes: 28 return "所有節點"; 29 case TreeListStringId.MenuFooterCount: 30 return "計數"; 31 case TreeListStringId.MenuColumnSortAscending: 32 return "升序排列"; 33 case TreeListStringId.MenuFooterNone: 34 return "無"; 35 case TreeListStringId.MenuColumnSortDescending: 36 return "降序排列"; 37 case TreeListStringId.PrintDesignerDescription: 38 return "為當前的樹狀列表設置不同的打印選項"; 39 case TreeListStringId.MenuColumnBestFitAllColumns: 40 return "最佳匹配 (所有列)"; 41 case TreeListStringId.MenuFooterAverageFormat: 42 return "平均值={0:#.##}"; 43 case TreeListStringId.ColumnNamePrefix: 44 return "列"; 45 case TreeListStringId.MenuFooterMinFormat: 46 return "最小值={0}"; 47 case TreeListStringId.MenuFooterCountFormat: 48 return "{0}"; 49 case TreeListStringId.MenuColumnColumnCustomization: 50 return "列選擇"; 51 case TreeListStringId.MenuFooterMaxFormat: 52 return "最大值={0}"; 53 case TreeListStringId.MenuFooterSumFormat: 54 return "和={0:#.##}"; 55 case TreeListStringId.MultiSelectMethodNotSupported: 56 return "OptionsBehavior.MultiSelect未激活時,指定方法不能工作."; 57 case TreeListStringId.InvalidNodeExceptionText: 58 return " 要修正當前值嗎?"; 59 case TreeListStringId.MenuFooterAverage: 60 return "平均值"; 61 } 62 63 return base.GetLocalizedString(id); 64 } 65 }
其他控件的自定義漢化方式與以上相同,我自己漢化了XtraBar控件、XtraEditor控件、XtraGrid控件、XtraLayout控件、XtraNavBar控件、XtraTreeList控件、XtraVerticalGrid控件,如下圖:
為了統一調用,封裝了一個方法
最后在項目的入口函數或者窗體的Load事件中調用一次:
CustomDevExpressLocalizationCHS.SetSimpleChinese();方法即可實現自定義的漢化資源。
在項目中引用自定義漢化資源后,消息提示框如下:
按鈕上的文字顯示為漢字了,此時才算是真正的漢化。
由於無法上傳附件,需要自定義漢化代碼的朋友請加入.Net技術交流與分享群427789286,自行下載文件《DotNetLib.DevExpress.rar》。