String.prototype.toLocaleLowerCase(locales?) returns a new lowercased string using locale-specific case rules. For most Latin text it matches toLowerCase(); languages like Turkish can differ.
Pass the required arguments shown below. Check return values and browser support before you rely on the result.
Syntax
Call string.toLocaleLowerCase. Start with this line.
JavaScript
str.toLocaleLowerCase(locales?)
Call
What it does
str.toLocaleLowerCase(locales?)
Primary signature.
string.toLocaleLowerCase(...)
Call with the arguments your case needs.
Built into JavaScript. Call toLocaleLowerCase(...) on a string (or String instance) — no import required.
Library declarations
JavaScript
str.toLocaleLowerCase(locales?)
Parameters
Parameter
Description
locales
Optional. BCP 47 tag or array; default = host locale
Return Value
Return Value
Description
*
New lowercased string
JavaScript Examples
Example 1 — Basic Locale Lowercase
Lowercase a string with the host default locale (or a simple Latin locale).
Start with İ. That is Latin capital I with a dot above (U+0130).
Turkish mapping."tr" lowercases it to plain i.
English mapping."en-US" often keeps a combining dot → i̇.
Pass the UI language. Case folding for display should match the user’s locale.
Example 3 — toLocaleLowerCase vs toLowerCase
They often match; choose locale-aware when language rules can differ.
JavaScript
const city = "İstanbul";
console.log(city.toLocaleLowerCase("tr"));
console.log(city.toLowerCase());
console.log("HELLO".toLocaleLowerCase() === "HELLO".toLowerCase());
// true for simple Latin text
Default Unicode path.toLowerCase() does not take a locale.
ASCII is boring (in a good way). Simple Latin often matches on both APIs.
Rule of thumb. User-facing text → locale method; simple ASCII → either is fine.
Compatibility
Browser & Runtime Support
String.prototype.toLocaleLowerCase() is widely available. The optional locales argument is supported in modern browsers and Node.js.
✓ Baseline · Widely available
String.toLocaleLowerCase()
Supported in modern browsers and Node.js. Prefer an explicit locales tag when your app must behave the same across hosts.
98%Modern browser support
Google ChromeSupported · Desktop & Mobile
Full support
Mozilla FirefoxSupported · Desktop & Mobile
Full support
Apple SafariSupported · macOS & iOS
Full support
Microsoft EdgeSupported · Chromium
Full support
Internet ExplorerNo native support · Use a polyfill
Polyfill
OperaSupported · Modern versions
Full support
Samsung InternetSupported · Android
Full support
BunSupported · JavaScript runtime
Supported
DenoSupported · JavaScript runtime
Supported
Node.jsSupported · Server runtime
Supported
Android WebViewSupported · Modern WebView
Full support
toLocaleLowerCase()Excellent
Bottom line: Safe for modern web apps. For ASCII-only pipelines, toLowerCase() is fine; for multilingual UI, pass the active locale explicitly.
Frequently Asked Questions
String.prototype.toLocaleLowerCase(locales?) returns a new string with characters lowercased using locale-specific case mappings. Without locales, the host default locale is used.
For most Latin text they match. toLocaleLowerCase respects language rules (for example Turkish dotted/dotless i). Prefer toLocaleLowerCase when the UI language can change case mapping.
A BCP 47 language tag such as "tr" or "en-US", or an array of tags. Unlike Intl.Collator, toLocaleLowerCase does not do locale matching — it uses the first locale in the list (or the default if the list is empty).
In Turkish, uppercase İ (U+0130) lowercases to plain i, while English often produces i plus a combining dot. Passing "tr" gives the Turkish mapping.
No. Strings are immutable. The method returns a new lowercased string.
Use toLowerCase for simple ASCII or when you intentionally want the Unicode default mapping and do not care about locale. Use toLocaleLowerCase for user-facing text in a known language.