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