Я пишу основную функцию для преобразования миллионов имен в однократном пакетном процессе из их текущей формы в верхнем регистре в правильный смешанный случай. Я придумал следующую функцию:
public string ConvertToProperNameCase(string input)
{
char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input.ToLower()).ToCharArray();
for (int i = 0; i + 1 < chars.Length; i++)
{
if ((chars[i].Equals('\'')) ||
(chars[i].Equals('-')))
{
chars[i + 1] = Char.ToUpper(chars[i + 1]);
}
}
return new string(chars);
}
Он работает в большинстве случаев, например:
- ДЖОН СМИТ → Джон Смит
- SMITH, JOHN T → Смит, Джон Т
- ДЖОН О'БРИАН → Джон О'Брайан
- ДЖОН ДУ-СМИТ → Джон Доу-Смит
Есть некоторые случаи краев, которые не работают:
- JASON MCDONALD → Джейсон Макдональд (Правильно: Джейсон Макдональд)
- OSCAR DE LA HOYA → Оскар Де Ла Хойя (Правильно: Оскар де ла Хойя)
- MARIE DIFRANCO → Мари Дифранко (Правильно: Мари ДиФранко)
Они не записаны, и я не уверен, могу ли я обрабатывать все эти случаи с нечетным краем. Как я могу изменить или добавить, чтобы захватить больше случаев краев? Я уверен, что есть тонны крайних случаев, о которых я даже не думаю. Все обсадные колонны должны также следовать североамериканским конвенциям, а это означает, что если в некоторых странах ожидается другой формат капитализации, тогда предпочтение отдается североамериканскому формату.