Как вы решаете вопросы падежей? Допустим, у меня есть файлик ресурсов (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 en, EnGrammaticalCase 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];
}
}
}
Буду рад выслушать более простые/изящные/правильные решения.