为Enums提供本地化的最佳方式是什么?

Mar*_*ark 6 c# enums localization internationalization

我正在编写一个使用很多枚举的多语言应用程序,我希望实现以下目标:

  1. 将枚举名称显示为本地化字符串
  2. 使用属性提供本地化描述
  3. 启用对枚举的语言敏感解析回到int值

我热衷于使用属性+资源文件来修饰枚举,以便可以从运行时类型信息中访问本地化字符串.在使用静态成员而不是枚举声明静态类之前,我一直沿着这条路走下去,但是这解决了很多问题.

某种基于TypeDescriptor的机制是否合适?甚至可能吗?

此外 - 如何以干净,通用,可重复使用的方式完成目标#3?


自从提出这个问题以来,我已经完成了需要可本地化的枚举显示的开源库.我选择了实现TypeConverters的技术.完整资料来源于http://measures.codeplex.com/

Vin*_*ayC 5

如何为你的枚举编写TypeConvertor

  1. 定义一些自定义属性,用于标识枚举值的资源字符串.
  2. 写TypeConvertor,它将查找此属性以获取资源ID,然后将该值转换为字符串.(您可以使用相同的辅助类,但使用TypeConvertor和TypeConvertorAttribute允许更透明地使用它).
  3. 您可以编写一个将执行反向转换的通用类/方法(从字符串到枚举).该方法将类似于Parse<T>(string value)T将是枚举类型.该实现将使用反射构建(按需)给定枚举类型T的查找字典以查找您的自定义属性.