Показать сообщение отдельно
Старый 01.07.2015, 12:39   #1
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Падежирование и костылирование

Как вы решаете вопросы падежей? Допустим, у меня есть файлик ресурсов (C#), в котором лежат соответствия значениям энумов:

ENUM_EnDamageType_Physical => Физический урон 
и метод расширения, который эти значения получает:

public static string GetValue(this Enum en)
        {
            
string resourceDisplayName _lov.GetString("ENUM_" en.GetType().Name "_" en);

            return 
string.IsNullOrWhiteSpace(resourceDisplayName) ? string.Format("[[{0}]]"en) : resourceDisplayName;
        } 
Задача: получать нужный падеж при необходимости.

Вопрос: как лучше всего хранить/получать эти значения?

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

На данный момент у меня такое решение: в ресурсах хранится не только номинатив, но и генитив с дативом (остальные не востребованны), разделяемые спец.символом. Например:

ENUM_EnDamageType_Physical => Физический урон|Физического урона|Физическому урону 
В то же время метод допилен до состояния

public static string GetValue(this Enum enEnGrammaticalCase gc EnGrammaticalCase.Nominative)
        {
            
string[] values _lov.GetString("ENUM_" en.GetType().Name "_" en).Split('|');
            switch (
gc)
            {
                case 
EnGrammaticalCase.Genitive:
                    {
                        return 
string.IsNullOrWhiteSpace(values[1]) ? string.Format("[[{0}]]"en) : values[1];
                    }
                case 
EnGrammaticalCase.Dative:
                    {
                        return 
string.IsNullOrWhiteSpace(values[2]) ? string.Format("[[{0}]]"en) : values[2];
                    }
                default:
                    {
                        return 
string.IsNullOrWhiteSpace(values[0]) ? string.Format("[[{0}]]"en) : values[0];
                    }
            }
        } 
Буду рад выслушать более простые/изящные/правильные решения.
(Offline)
 
Ответить с цитированием