Многоязычный enum - PullRequest
       3

Многоязычный enum

2 голосов
/ 23 января 2012

Я работаю над локализацией веб-сайта 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,
    }

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Помните, что ваш View - это просто средство представления данных вашему пользователю.

Несмотря на то, что перечисление используется в коде, вы не должны использовать разобранную версию вашего перечисления в качестве текста в вашем представлении. Вместо этого используйте его для выбора строкового ресурса, который можно легко перевести.

0 голосов
/ 23 января 2012

Попробуйте написать метод в таком классе, как этот

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...