2014-03-05 43 views
0

我拥有财产性本地化的自定义枚举属性

public MyEnumType MyType {get; set;} 

其中MyEnumType是

public enum MyEnumType 
{ 
    One = 1, 
    Two = 2, 
    Three = 3,  
} 

是有可能本地化的MyType财产无MyEnumType

+2

你是什么意思的“本地化”? – Tigran

+0

什么是'MoneyTransactionType'?并本地化什么?哪里?你如何使用它?在哪个控件中? Win/Wpf/Web? –

+1

您可以使用['DisplayAttribute'](http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.displayattribute.aspx)并编写自定义代码来访问它们,也可以编写自定义代码根据枚举值的名称进行查找。 – Stijn

回答

0

修改它不是。这并不意味着。这不是输出文本,它们在程序名称中。

这不是本地化(翻译输出),你会做的是翻译源代码中的类名称。

本地化您可以使用通常的本地化框架进行的输出。取决于输出技术。

+0

你的答案确实不清楚。为什么它“不是为了”?我在我的枚举值上使用了'DisplayAttribute',并且这些属性被客户端使用,无论是HTML页面还是JSON序列化程序。 – Stijn

+0

他意味着枚举值通常不是显示给应用程序用户的东西,因此不应该被本地化。这就像是为国际市场翻译类名。确切地说,是 –

+0

。此外,“DIsplayAttribute”不会转换枚举本身 - 这是要求在这里。 – TomTom

0

您可以使用扩展方法创建自己的ToString()而不更改枚举本身。

using System; 

namespace ConsoleApplication1 { 
    public enum MyEnumType { 
    One = 1, 
    Two = 2, 
    Three = 3, 
    } 

    public static class Extension { 
    public static string ToLocalizedString(this MyEnumType type) { 
     // check System.Threading.Thread.CurrentThread.CurrentCulture 
     // if you need current culture context 
     switch (type) { 
     case MyEnumType.One: 
      return "Ein"; 
     case MyEnumType.Two: 
      return "Zwei"; 
     case MyEnumType.Three: 
      return "Drei"; 
     default: 
      throw new NotImplementedException(); 
     } 
    } 
    } 

    class Program { 
    static void Main(string[] args) { 
     var foo = MyEnumType.One; 
     Console.Out.WriteLine(foo.ToLocalizedString()); 
    } 
    } 
} 
+0

我在使用mvc @ Html.DropDownListFor(x => x.MyType.ToLocalizedString(),...时出错,错误消息:模板只能用于字段访问,属性访问,单维数组索引,或单参数自定义索引器表达式。 – user1765862

0

如果你需要“本地化”“的ToString”的转换,你可以去一个静态类

public static class Localization 
{ 
    public static string ToCultureString(this MyEnumType type) 
    { 
    return ResourceManager.GetString(type.ToString(), Culture); 
    } 
} 

的静态方法!请照顾:

  • 文化陈述;
  • ,你必须转换为cooresponded键

RCE文件的文化需要,你在哪里使用您的枚举定义键的资源文件

进一步您可以使用下面的代码:

var asString = MyObj.MyType.ToCultureString();