2014-03-05 67 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();