c# - 为枚举提供本地化的最佳方式是什么?

标签 c# localization internationalization enums

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

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

我热衷于使用属性 + 资源文件来装饰枚举,这样本地化的字符串就可以从运行时类型信息中获取。之前我一直在用静态成员而不是声明一个枚举来声明一个静态类,但这带来的问题和它解决的问题一样多。

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

此外 - 如何以一种干净、通用、可重复使用的方式实现目标 3?


自问这个问题以来,我已经完成了需要可本地化枚举显示的开源库。我采用了实现 TypeConverter 的技术。完整资源可在 http://measures.codeplex.com/ 获得

最佳答案

写的怎么样TypeConvertor对于你的枚举?

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

关于c# - 为枚举提供本地化的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3914688/

相关文章:

c# - 将委托(delegate)与参数一起传递给函数

c# - 同步 FileStream 和 StreamReader 的位置

php - MySQL 数据库 I18N,一种 JSON 方法?

python - 有没有一种可移植的方法来提供在 PyPI 上分发的包的本地化?

java - 如何更改 Spring 异常的语言

python - 如何在 Django 模型/数据库中分离语言

c# - 是否可以超时调用 HttpListener.GetContext?

c# - 如何将英文数字转换为阿拉伯数字?

android-studio - 升级到 Gradle 3.3 后的 MissingTranslation 错误

ruby-on-rails - 在 Devise 中设置语言