DevExpress 開發經驗總結2 DevExpress漢化之WinForm開發模式漢化


  DevExpress控件庫默認安裝后,使用的本地資源為英文。Developer Express .NET產品都有本地化資源,比如按鈕屬性,控件屬性描述,菜單項,確認和錯誤的信息等等,所有這些資源字符串可以很容易地被翻譯成各種語言。對於要求使用中文漢字資源的項目來說,首要任務就是處理漢化。

  在WinForm開發模式下,處理漢化相對簡單。有以下幾種方法。

方法一:使用已經制作完成的漢化資源DLL

 

 

  對於早期的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官方漢化資源DLL

 

 

  使用高版本的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》。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM