Я просматривал все StackOverflow в bazillion вопросов о заглавном слове на Java, и ни один из них, по-видимому, не заботится о интернационализации, и на самом деле ничто действительно не работает в международном контексте. Итак, вот мой вопрос.
У меня есть строка в Java, которая представляет слово - все символы isLetter(), без пробелов. Я хочу сделать первый верхний регистр символов, а нижний регистр остальных. У меня действительно есть язык моего слова.
Достаточно легко вызвать .substring(1).toLowerCase(Locale) для последней части моей строки. Я даже не знаю, как получить правильный первый символ.
Первая проблема, с которой я столкнулся, - это голландский, где "ij", являющийся орграфом, должен быть капитализирован вместе. Я мог бы это сделать вручную, потому что знаю об этом; теперь могут быть другие языки с такими вещами, о которых я не знаю, и я уверен, что Unicode скажет мне, если я попрошу красиво. Но я не знаю, как спросить.
Даже если вышеупомянутая проблема решена, я все еще не придерживаюсь надлежащего способа обработки английского, турецкого и греческого языков, потому что символ поддерживает тэз файл, но не локаль, а String поддерживает локали, но не заголовок.
Если я возьму кодовую точку и передаю ее в Character.toTitleCase(), это не сработает, потому что невозможно передать языковой стандарт этому методу. Поэтому, если языковой стандарт системы находится на английском языке, но слово является турецким, а первое слово char слова "i", я получу "Я" вместо "İ", и это неправильно. Теперь, если я возьму подстроку и использую .toUpperCase(Locale), это завершится неудачно, потому что это верхний и не титульный регистр. Поэтому, если слово "греческий", я все равно получаю неправильный символ.
Если у кого-то есть полезные указатели, я был бы рад их услышать.