Локализация перечислимых атрибутов описаний

Не используйте какое-либо ключевое слово или аргумент в качестве ввода или скобки для вашей функции. Это очень простое решение:)

36
задан Ryan 20 February 2009 в 11:48
поделиться

5 ответов

Это - то, с чем я закончил тем, что шел, я не видел значение в добавлении класса пользовательского атрибута для удержания клавиши ресурса и затем поиска в файлы ресурсов - почему не только используют имя типа перечислений + значение как ключ ресурса?

using System;
using System.Resources;
using System.Reflection;

public class MyClass
{
  enum SomeEnum {Small,Large};

  private ResourceManager _resources = new ResourceManager("MyClass.myResources",
                          System.Reflection.Assembly.GetExecutingAssembly());    

  public string EnumDescription(Enum enumerator)
  {     
    string rk = String.Format("{0}.{1}",enumerator.GetType(),enumerator);
    string localizedDescription = _resources.GetString(rk);

    if (localizedDescription == null)
       {
       // A localized string was not found so you can either just return
       // the enums value - most likely readable and a good fallback.
       return enumerator.ToString();

       // Or you can return the full resourceKey which will be helpful when
       // editing the resource files(e.g. MyClass+SomeEnum.Small) 
       // return resourceKey;
       }
    else
       return localizedDescription;
    }


  void SomeRoutine()
  {
    // Looks in resource file for a string matching the key
    // "MyClass+SomeEnum.Large"
    string s1 = EnumDescription(SomeEnum.Large);       
  }
}
25
ответ дан Ryan 10 October 2019 в 10:41
поделиться

У Вас не может быть нескольких Система. ComponentModel. DescriptionAttribute применялся (так, чтобы опция отсутствовала).

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

0
ответ дан Richard 10 October 2019 в 10:41
поделиться

Посмотрите мой пример таблицы в этом вопросе:

Localisation/I18n данных базы данных в LINQ к SQL

таблица типа состояния отображается на Перечислимые величины. Реальная выгода здесь - то, что Вы можете иметь локализацию в своих отчетах и через Ваши приложения и указать внешние идентификаторы для интеграции с третьими сторонами, которые не хотят Ваши внутренние значения и т.д. Это отделяет перечислимое описание от, он - значение.

0
ответ дан Community 10 October 2019 в 10:41
поделиться

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

    public static string Describe(this SomeEnum e)
    {
        switch(e)
        {
            SomeEnum.A:
                return "Some text from resourcefile";
            SomeEnum.B:
                return "Some other text from resourcefile";
            ...:
                return ...;
        }
    }

, Возможно, не чрезвычайно гладкое или необычное решение, но это работает =)

3
ответ дан Svish 10 October 2019 в 10:41
поделиться

существует легкое решение: используйте атрибут LocalizedDescription для передачи ключа ресурса.

    [Serializable]
    public class LocalizableDescriptionAttribute:DescriptionAttribute
    {
        public LocalizableDescriptionAttribute(string resourceKey)
            :base(Resources.ResourceManager.GetString(resourceKey))
        { }

    }
8
ответ дан Valentin 10 October 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: