Posted on 2006-11-08 15:15
云自无心水自闲 阅读(5187)
评论(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。