多语言枚举
本文关键字:枚举 语言 | 更新日期: 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;}
}