2012-01-23 66 views
2

我正在处理asp.net mvc网站本地化和我遇到了枚举翻译问题。多语言枚举

我需要这样的代码:

public enum PossibilityEnum 
{ 
    [LocalDescription(CultureCode=UserLoginInfo.UserLang, ResourceKey="ProjectDelete")] 
    ProjectDelete, 
    [LocalDescription(CultureCode=UserLoginInfo.UserLang, ResourceKey="ProjectCreate")] 
    ProjectCreate, 
    [LocalDescription(CultureCode=UserLoginInfo.UserLang, ResourceKey="ProjectEdit")] 
    ProjectEdit 
} 

UserLoginInfo是我的自定义类,我在那里有关于用户的所有信息。

可能吗?我该如何做到这一点?

编辑 UserLoginInfo拥有财产

public LangType UserLang { get { return LangType.Eng; } } 

public enum LangType 
    { 
     [Tag(TagType.Culture, "ru-RU")] 
     Rus = 1, 
     [Tag(TagType.Culture, "en")] 
     Eng = 2, 
    } 
+0

您是否试图根据语言环境为枚举值设置不同的标签? –

+3

您的装饰枚举的方式可能是次优的。看看这篇文章:http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/。 – Steven

+0

是的我有种不同的标签枚举值的任务,但值取决于用户帐户中的信息,而不是位置 –

回答

4

记住,你的搜索只是数据呈现给用户的一种手段。

虽然在代码中使用了枚举,但您不应该将您的枚举的解析版本用作视图上的文本。而是用它来选择一个可以很容易翻译的字符串资源。

+0

是的,谢谢,但我的问题,而是在解析我的项目中的所有枚举。我有很多。 –

+0

解析它们以从资源文件中获取资源字符串。此代码将用于您用于向View提供数据的属性值。只是这将是一个字符串而不是枚举。 – ChrisBD

+0

谢谢,我会这样做。 –

0

尝试写一个方法,一类像这样

public static string GetLocalizedName(Enum enumeration){ 
    System.Reflection.MemberInfo[] mi = enumeration.GetType().GetMember(enumeration.ToString()); 
    LocalDescription ld = (LocalDescription) Attribute.GetCustomAttribute(mi[0], typeof(LocalDescription), false); 
    if (null != ld) 
    return getfromresource(ld.CultureCode, ld.ResourceKey); 
} 

getfromresource是伪的方法,实现了你。

“LocalDescription”的定义可以象下面这样:

[AttributeUsage(AttributeTargets.Field)] 
public class LocalDescription : Attribute 
{ 
    public LocalDescription (string cc, string rk) 
    { 
     CultureCode = cc; 
     ResourceKey = rk; 
    } 
    public string CultureCode{get;set;} 
    public string ResourceKEy{get;set;} 

}