2012-01-23 98 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;} 

}