Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 本地化自定义枚举属性_C#_.net - Fatal编程技术网

C# 本地化自定义枚举属性

C# 本地化自定义枚举属性,c#,.net,C#,.net,我有财产 public MyEnumType MyType {get; set;} MyEnumType在哪里 public enum MyEnumType { One = 1, Two = 2, Three = 3, } 是否可以在不修改MyEnumType的情况下本地化MyType属性?事实并非如此。这不是故意的。这不是程序名中的输出文本 这不是本地化(输出的翻译),您要做的是翻译源代码中的类名 本地化输出可以使用常用的本地化框架进行。取决于输出技术

我有财产

public MyEnumType MyType {get; set;}
MyEnumType在哪里

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

是否可以在不修改MyEnumType的情况下本地化MyType属性?事实并非如此。这不是故意的。这不是程序名中的输出文本

这不是本地化(输出的翻译),您要做的是翻译源代码中的类名


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

您可以使用扩展方法创建自己的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());
    }
  }
}
如果需要“本地化”“ToString”转换,可以使用静态类的静态方法

public static class Localization
{
  public static string ToCultureString(this MyEnumType type)
  {
     return ResourceManager.GetString(type.ToString(), Culture);
  }
}
!!还请注意:

  • 文化声明
  • 资源文件,您可以在其中翻译密钥
用于所需区域性的rce文件,其中使用枚举中定义的键

此外,您还可以使用以下代码:

  var asString =  MyObj.MyType.ToCultureString();

“本地化”是什么意思?什么是
MoneyTransactionType
?本地化什么?哪里你如何使用它?在哪个控制区?Win/Wpf/Web?您可以使用并编写自定义代码来访问它们,也可以编写自定义代码来根据枚举值的名称进行查找。您的答案确实不清楚。为什么“不是故意的”?我在我的枚举值上使用
DisplayAttribute
,这些属性由客户端使用,无论是HTML页面还是JSON serialiser。这意味着枚举值通常不会显示给应用程序的用户,因此不需要本地化。这就像是一个为国际市场翻译类名的人。另外,“DIsplayAttribute”并没有翻译枚举本身——这是这里要求的。我不确定,我想问题也不清楚。我在使用mvc@Html.DropDownListFor(x=>x.MyType.ToLocalizedString()时出错,…错误消息:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。