Posted on 2006-11-08 15:15
云自无心水自闲 阅读(690)
评论(6) 编辑 收藏 所属分类:
.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。
Feedback
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化)[未登录] 回复 更多评论
2007-04-06 09:29 by
能不能給個例子呀? 謝謝!
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化)[未登录] 回复 更多评论
2007-04-06 09:30 by
case BarString.ToolbarNameCaption:
return "工具列名稱(&T):"
怎麼也變不過來呀
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化)[未登录] 回复 更多评论
2007-04-07 18:40 by
只添加 Localization类是不够的,关键还要把这个类的实例赋值给Active属性
DevExpress.XtraReports.Localization.ReportLocalizer.Active = new ChnReportLocalizer();
这句话加上。
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化) 回复 更多评论
2007-09-04 14:23 by
您好,我现在也想汉化xtraReport,您的教程给了我很大的帮助,可是对于控件的显示名称我还是做不出来,劳驾您指点一二。谢谢。
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化) 回复 更多评论
2007-09-04 14:29 by
您好!我没有XtraReport的源代码,是不是就不能按照您说的方式进行控件名称的汉化?
非常期待您的帮助,我的Email:anpangjunliang@gmail.com
再次感谢。
# re: DevExpress XtraReports设计器中工具箱控件的本地化(主要是汉化)[未登录] 回复 更多评论
2007-09-10 14:18 by
@gotonext
It's true that without the source code, you can't I18N the control's name.