DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化)

第一步. 使用正统的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。




你可能感兴趣的:(DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化))