Зачем нужны локалезависимые преобразования строк в JavaScript

Я знал, что существуют локалезависимые альтернативы toLowerCase и toUpperCase, но всё никак не было времени понять, зачем.

Причина в том, как устроен Unicode. Операции смены регистра зависят от локали, потому что некоторые символы переиспользуются между языками, хотя фактически они разные.

Самый наглядный пример — буква I в турецком языке. Там есть две версии I: с точкой и без точки. Если преобразовывать этот символ без указания локали, получится неправильный вариант:

> 'I'.toLowerCase()
'i'

> 'I'.toLocaleLowerCase('tr')
'ı'

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

Наткнулся на этот пример в замечательной статье Тонского про Unicode в 2023 году.