Posted on 2006-11-08 15:15
云自無心水自閑 閱讀(5206)
評論(9) 編輯 收藏 所屬分類:
.Net
第一步. 使用正統(tǒng)的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,發(fā)現(xiàn)只有第一個Pointer被正確的翻譯了,下面的CheckBox、RichText等等都還是英文。查找原因發(fā)現(xiàn)工具箱的控件是動態(tài)生成的,在XtraReports.UserDesigner.Native.AsmHelper中的函數(shù)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。