多语言枚举

本文关键字:枚举 语言 | 更新日期: 2023-09-27 18:21:14

我正在开发asp.net mvc网站本地化,我遇到了enums翻译的问题。

我需要这样的代码:

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,
    }

多语言枚举

请记住,视图只是向用户显示数据的一种方式。

尽管枚举在代码中使用,但您不应该将枚举的解析版本用作视图中的文本。相反,使用它来选择一个字符串资源,可以很容易地进行翻译。

尝试在类似的类中编写方法

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;}
}