> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported NLS functions

> Reference the National Language Support (NLS) functions available under WINAPI_PARTITION_GAMES in the GDK, with XBOX Game OS caveats and usage notes.

The National Language Support (NLS) functions help titles support language- and locale-specific behavior. Only API functions defined under the `WINAPI_PARTITION_GAMES` partition in `WinNLS.h` are available on XBOX.

<Note>
  APIs marked **DEPRECATED** still work on the GDK with the caveats documented on Microsoft Docs. Prefer the replacements.
</Note>

## Available functions

| Function                      | State         | Replacement                |
| ----------------------------- | ------------- | -------------------------- |
| `EnumSystemLocalesEx`         |               |                            |
| `FindNLSStringEx`             |               |                            |
| `FoldStringA`                 |               |                            |
| `GetACP`                      |               |                            |
| `GetCurrencyFormatEx`         |               |                            |
| `GetGeoInfoEx`                |               |                            |
| `GetLocaleInfoEx`             |               |                            |
| `GetNumberFormatEx`           |               |                            |
| `GetStringTypeA`              |               |                            |
| `GetStringTypeExA`            |               |                            |
| `GetThreadLocale`             |               |                            |
| `GetUserDefaultGeoName`       |               |                            |
| `GetUserDefaultLocaleName`    |               |                            |
| `GetUserPreferredUILanguages` | NOT SUPPORTED | Always returns `en-US`     |
| `IdnToAscii`                  |               |                            |
| `IdnToUnicode`                |               |                            |
| `IsValidCodePage`             |               |                            |
| `IsValidLocaleName`           |               |                            |
| `LCIDToLocaleName`            |               |                            |
| `LCMapStringEx`               |               |                            |
| `LocaleNameToLCID`            |               |                            |
| `ResolveLocaleName`           |               |                            |
| `SetThreadLocale`             |               |                            |
| `CompareString`               | DEPRECATED    | `CompareStringEx`          |
| `CompareStringA`              | DEPRECATED    | `CompareStringEx`          |
| `EnumSystemLocalesA`          | DEPRECATED    | `EnumSystemLocalesEx`      |
| `EnumSystemLocalesW`          | DEPRECATED    | `EnumSystemLocalesEx`      |
| `FindNLSString`               | DEPRECATED    | `FindNLSStringEx`          |
| `GetCPInfo`                   | DEPRECATED    | Use Unicode                |
| `GetCPInfoExA`                | DEPRECATED    | Use Unicode                |
| `GetCPInfoExW`                | DEPRECATED    | Use Unicode                |
| `GetCurrencyFormatA`          | DEPRECATED    | `GetCurrencyFormatEx`      |
| `GetCurrencyFormatW`          | DEPRECATED    | `GetCurrencyFormatEx`      |
| `GetGeoInfoA`                 | DEPRECATED    | `GetGeoInfoEx`             |
| `GetGeoInfoW`                 | DEPRECATED    | `GetGeoInfoEx`             |
| `GetLocaleInfoA`              | DEPRECATED    | `GetLocaleInfoEx`          |
| `GetLocaleInfoW`              | DEPRECATED    | `GetLocaleInfoEx`          |
| `GetNumberFormatA`            | DEPRECATED    | `GetNumberFormatEx`        |
| `GetNumberFormatW`            | DEPRECATED    | `GetNumberFormatEx`        |
| `GetUserGeoID`                | DEPRECATED    | `GetUserDefaultLocaleName` |
| `LCMapStringA`                | DEPRECATED    | `LCMapStringEx`            |
| `LCMapStringW`                | DEPRECATED    | `LCMapStringEx`            |

## Game OS behavior notes

Game OS NLS functions do **not** include the full linguistic casing tables that Windows has. Collation and casing operations always use **ordinal** values regardless of the locale.

**Do culture-sensitive casing and sorting as part of your localization process**, not at runtime.

Affected functions:

| NLS               |
| ----------------- |
| `LCMapStringEx`   |
| `CompareStringEx` |
| `CompareString`   |
| `CompareStringA`  |

### Collation

| Base           | Wide         | Multibyte    |
| -------------- | ------------ | ------------ |
| `std::collate` |              |              |
| `strcoll`      | `wcscoll`    | `_mbscoll`   |
| `_stricoll`    | `_wcsicoll`  | `_mbsicoll`  |
| `_strncoll`    | `_wcsncoll`  | `_mbsncoll`  |
| `_strnicoll`   | `_wcsnicoll` | `_mbsnicoll` |

### Uppercasing

| Base           | Variant       | Wide variant  |
| -------------- | ------------- | ------------- |
| `std::toupper` | `toupper`     | `towupper`    |
| `_toupper`     | `_toupper_l`  | `_towupper_l` |
| `std::isupper` | `isupper`     | `iswupper`    |
| `_isupper_l`   | `_iswupper_l` |               |

### Lowercasing

| Base           | Variant       | Wide variant  |
| -------------- | ------------- | ------------- |
| `std::tolower` | `tolower`     | `towlower`    |
| `_tolower`     | `_tolower_l`  | `_towlower_l` |
| `std::islower` | `islower`     | `iswlower`    |
| `_islower_l`   | `_iswlower_l` |               |

<Note>
  This list isn't exhaustive — other Standard C++ Library functions might depend on the impacted APIs.
</Note>

## Related API documentation

* [XGameRuntime features reference](/reference/system/xgameruntimefeature/xgameruntimefeature_members) — locale + region GDK surface complementing NLS


## Related topics

- [Localization and globalization overview](/build/game-principles/localization.md)
- [Supported languages](/publishing/game-publishing/concepts/metadata-supported-languages.md)
- [XFrontPanelIsSupported](/reference/devkit/xfrontpaneldisplay/functions/xfrontpanelissupported.md)
- [Console-supported languages](/build/game-principles/localization/console-supported-languages.md)
- [Supported Azure regions](/services/playfab/multiplayer/networking/supported-azure-regions.md)
