2012-01-23 4 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

Ваш способ украсить ваш enum может быть оптимальным. Взгляните на эту статью: http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/. – Steven

+0

Да У меня есть задача с разными метками для значений перечисления, но значения зависят от информации в учетной записи пользователя, а не от местоположения. –

ответ

4

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

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

+0

Да, спасибо, но моя проблема скорее заключается в анализе всех перечислений в моем проекте. И у меня их много. –

+0

Разберите их, чтобы получить строку ресурсов из ваших ресурсов. Этот код будет содержать значение свойства, которое вы используете для предоставления данных для вашего представления. Просто, что это будет строка, а не перечисление. – 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;} 

} 
Смежные вопросы