Зачем нужны локалезависимые преобразования строк в JavaScript
Я знал, что существуют локалезависимые альтернативы toLowerCase и toUpperCase, но всё никак не было времени понять, зачем.
Причина в том, как устроен Unicode. Операции смены регистра зависят от локали, потому что некоторые символы переиспользуются между языками, хотя фактически они разные.
Самый наглядный пример — буква I в турецком языке. Там есть две версии I: с точкой и без точки. Если преобразовывать этот символ без указания локали, получится неправильный вариант:
> 'I'.toLowerCase()
'i'
> 'I'.toLocaleLowerCase('tr')
'ı'
Это не было бы проблемой, если бы у турецкого языка были собственные отдельные символы I (с точкой и без). Но поскольку один и тот же символ переиспользуется между языками, перед преобразованием нужно понимать, что именно ты преобразуешь.
Наткнулся на этот пример в замечательной статье Тонского про Unicode в 2023 году.