DevExpress XtraReports設計器中工具箱控件的本地化(主要是漢化)
Posted on 2006-11-08 15:15 云自無心水自閑 閱讀(5205) 評論(9) 編輯 收藏 所屬分類: .Net第一步. 使用正統的Localizer方法
在項目中添加一個類ChnReportLocalizer,繼承ReportLocalizer,將ReportLocalizer類的所有代碼拷貝過來。原來的代碼返回的都是英文,我們需要全部翻譯成中文
比如原來是??? case ReportStringId.Msg_FileNotFound:
??? ??? ??? ??? ??? return "File not found.";
我們修改成:
??? ??? ??? case ReportStringId.Msg_FileNotFound:
??? ??? ??? ??? ??? return "文件沒有找到";
全部翻譯完畢后,賦值
DevExpress.XtraReports.Localization.ReportLocalizer.Active = new ChnReportLocalizer();
再次運行XtraReports的Designer,發現只有第一個Pointer被正確的翻譯了,下面的CheckBox、RichText等等都還是英文。查找原因發現工具箱的控件是動態生成的,在XtraReports.UserDesigner.Native.AsmHelper中的函數GetToolboxItems負責往工具箱內添加控件。控件顯示的名稱就是ToolboxItem的DisplayName。
OK,搞清楚之后開始動手修改,
1. 在XtraReports.Localization.ReportStringId這個枚舉中添加控件對應的枚舉,比如:Subreport對應添加枚舉值為UD_SubreportCaption,CheckBox添加的枚舉值為UD_CheckBoxCaption,控件名與枚舉值的名稱需要有對應關系,因為需要使用Enum.Parse根據控件的名稱映射枚舉值。
2. 在ChnReportLocalizer中添加對應的翻譯,case ReportStringID.UD_SubreportCaption : return "子報表"; 等等。
3. 在AsmHelper中修改原代碼,新生成的ToolboxItem不再直接添加到ArrayList中,先進行DisplayName的本地化。先根據DisplayName使用Enum.Parse獲得枚舉值,然后調用ReportLocalizer.GetString獲得本地化的字符串賦值給ToolboxItem.DisplayName。
在項目中添加一個類ChnReportLocalizer,繼承ReportLocalizer,將ReportLocalizer類的所有代碼拷貝過來。原來的代碼返回的都是英文,我們需要全部翻譯成中文
比如原來是??? case ReportStringId.Msg_FileNotFound:
??? ??? ??? ??? ??? return "File not found.";
我們修改成:
??? ??? ??? case ReportStringId.Msg_FileNotFound:
??? ??? ??? ??? ??? return "文件沒有找到";
全部翻譯完畢后,賦值
DevExpress.XtraReports.Localization.ReportLocalizer.Active = new ChnReportLocalizer();
再次運行XtraReports的Designer,發現只有第一個Pointer被正確的翻譯了,下面的CheckBox、RichText等等都還是英文。查找原因發現工具箱的控件是動態生成的,在XtraReports.UserDesigner.Native.AsmHelper中的函數GetToolboxItems負責往工具箱內添加控件。控件顯示的名稱就是ToolboxItem的DisplayName。
OK,搞清楚之后開始動手修改,
1. 在XtraReports.Localization.ReportStringId這個枚舉中添加控件對應的枚舉,比如:Subreport對應添加枚舉值為UD_SubreportCaption,CheckBox添加的枚舉值為UD_CheckBoxCaption,控件名與枚舉值的名稱需要有對應關系,因為需要使用Enum.Parse根據控件的名稱映射枚舉值。
2. 在ChnReportLocalizer中添加對應的翻譯,case ReportStringID.UD_SubreportCaption : return "子報表"; 等等。
3. 在AsmHelper中修改原代碼,新生成的ToolboxItem不再直接添加到ArrayList中,先進行DisplayName的本地化。先根據DisplayName使用Enum.Parse獲得枚舉值,然后調用ReportLocalizer.GetString獲得本地化的字符串賦值給ToolboxItem.DisplayName。