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

时间:2010-10-12 12:32:13

标签: c# localization internationalization enums

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

  1. 将枚举名称显示为本地化字符串
  2. 使用属性提供本地化描述
  3. 启用语言敏感的枚举解析回到int值
  4. 我热衷于使用属性+资源文件来修饰枚举,以便可以从运行时类型信息中访问本地化字符串。在使用静态成员而不是枚举声明静态类之前,我一直沿着这条路走下去,但这解决了很多问题。

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

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


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

3 个答案:

答案 0 :(得分:5)

如何为您的枚举撰写TypeConvertor

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

答案 1 :(得分:4)

我刚刚写了另一个涉及某些内容的线索的答案。查看here以获取一些代码示例。

答案 2 :(得分:4)

我认为你的方向正确 - 使用属性来装饰枚举成员。您可能需要做的唯一想法是忘记System.ComponentModel并设计一组符合您要求和整体应用程序架构的属性。

我们使用了相同的方法,它以“干净,通用,可重复使用的方式”按预期工作。我们没有实施的唯一方面是因为我们不需要实际国际化。但是,这只是一些需要您跟踪当前文化并决定在何处选择资源文件的机制。基本上,您可能需要在“多个属性”(每种语言一个)或“单个属性”(一个用于封装资源文件选择的所有语言)方法之间进行选择。