File: localization.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Reference version
SDK 54 (latest)
Archive Expo Snack Discord and Forums Newsletter
Expo LocalizationAsk AI
A library that provides an interface for native user localization information.
Ask AI
Android
iOS
tvOS
Web
Bundled version:
~17.0.7
Copy page
expo-localization allows you to Localize your app, customizing the experience for specific regions, languages, or cultures. It also provides access to the locale data on the native device. Using a localization library such as lingui-js
, react-i18next
, react-intl
or i18n-js
with expo-localization will enable you to create a very accessible experience for users.
Terminal
Copy
- npx expo install expo-localization
If you are installing this in an existing React Native app
, make sure to install expo
in your project.
You can configure expo-localization using its built-in config plugin
if you use config plugins in your project (Continuous Native Generation (CNG)
). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does not use CNG, then you'll need to manually configure the library.
app.json
Copy
{ "expo": { "plugins": ["expo-localization"] } }
Find more information about using expo-localization and adding support for right-to-left languages in the Localization
guide.
import { getLocales, getCalendars } from 'expo-localization';
You can use synchronous getLocales() and getCalendars() methods to get the locale settings of the user device. On iOS, the results will remain the same while the app is running.
On Android, the user can change locale preferences in Settings without restarting apps. To keep the localization current, you can rerun the getLocales() and getCalendars() methods every time the app returns to the foreground. Use AppState to detect this.
useCalendars()Android
iOS
tvOS
Web
A hook providing a list of user's preferred calendars, returned as an array of objects of type Calendar. Guaranteed to contain at least 1 element. For now always returns a single element, but it's likely to return a user preference list on some platforms in the future. If the OS settings change, the hook will rerender with a new list of calendars.
Returns:
[Calendar[]](https://docs.expo.dev/versions/latest/sdk/localization#calendar)
Example
[{ "calendar": "gregory", "timeZone": "Europe/Warsaw", "uses24hourClock": true, "firstWeekday": 1 }]
useLocales()Android
iOS
tvOS
Web
A hook providing a list of user's locales, returned as an array of objects of type Locale. Guaranteed to contain at least 1 element. These are returned in the order the user defines in their device settings. On the web currency and measurements systems are not provided, instead returned as null. If needed, you can infer them from the current region using a lookup table. If the OS settings change, the hook will rerender with a new list of locales.
Returns:
[Locale[]](https://docs.expo.dev/versions/latest/sdk/localization#locale)
Example
[{ "languageTag": "pl-PL", "languageCode": "pl", "textDirection": "ltr", "digitGroupingSeparator": " ", "decimalSeparator": ",", "measurementSystem": "metric", "currencyCode": "PLN", "currencySymbol": "zł", "regionCode": "PL", "temperatureUnit": "celsius" }]
Localization.getCalendars()Android
iOS
tvOS
Web
List of user's preferred calendars, returned as an array of objects of type Calendar. Guaranteed to contain at least 1 element. For now always returns a single element, but it's likely to return a user preference list on some platforms in the future.
Returns:
[Calendar[]](https://docs.expo.dev/versions/latest/sdk/localization#calendar)
Example
[{ "calendar": "gregory", "timeZone": "Europe/Warsaw", "uses24hourClock": true, "firstWeekday": 1 }]
Localization.getLocales()Android
iOS
tvOS
Web
List of user's locales, returned as an array of objects of type Locale. Guaranteed to contain at least 1 element. These are returned in the order the user defines in their device settings. On the web currency and measurements systems are not provided, instead returned as null. If needed, you can infer them from the current region using a lookup table.
Returns:
[Locale[]](https://docs.expo.dev/versions/latest/sdk/localization#locale)
Example
[{ "languageTag": "pl-PL", "languageCode": "pl", "textDirection": "ltr", "digitGroupingSeparator": " ", "decimalSeparator": ",", "measurementSystem": "metric", "currencyCode": "PLN", "currencySymbol": "zł", "regionCode": "PL", "temperatureUnit": "celsius" }]
CalendarAndroid
iOS
tvOS
Web
| Property | Type | Description |
| --- | --- | --- |
| calendar | [CalendarIdentifier](https://docs.expo.dev/versions/latest/sdk/localization#calendaridentifier) \| null | The calendar identifier, one of Unicode calendar types<br>.<br><br>On Android is limited to one of device's available calendar types<br>.<br><br>On iOS uses calendar identifiers<br>, but maps them to the corresponding Unicode types, will also never contain 'dangi' or 'islamic-rgsa' due to it not being implemented on iOS. |
| firstWeekday | [Weekday](https://docs.expo.dev/versions/latest/sdk/localization#weekday) \| null | The first day of the week. For most calendars Sunday is numbered 1, with Saturday being number 7. Can be null on some browsers that don't support the weekInfo<br> property in Intl<br> API.<br><br>Example<br><br>1, 7. |
| timeZone | string \| null | Time zone for the calendar. Can be null on Web.<br><br>Example<br><br>'America/Los_Angeles', 'Europe/Warsaw', 'GMT+1'. |
| uses24hourClock | boolean \| null | True when current device settings use 24-hour time format. Can be null on some browsers that don't support the hourCycle<br> property in Intl<br> API. |
LocaleAndroid
iOS
tvOS
Web
| Property | Type | Description |
| --- | --- | --- |
| currencyCode | string \| null | Currency code for the locale. On iOS, it's the currency code from the Region setting under Language & Region, not for the current locale. On Android, it's the currency specifc to the locale in the list, as there are no separate settings for selecting a region. Is null on Web, use a table lookup based on region instead.<br><br>Example<br><br>'USD', 'EUR', 'PLN'. |
| currencySymbol | string \| null | Currency symbol for the currency specified by currencyCode.<br><br>Example<br><br>'$', '€', 'zł'. |
| decimalSeparator | string \| null | Decimal separator used for formatting numbers with fractional parts.<br><br>Example<br><br>'.', ','. |
| digitGroupingSeparator | string \| null | Digit grouping separator used for formatting large numbers.<br><br>Example<br><br>'.', ','. |
| languageCode | string \| null | An IETF BCP 47 language tag<br> without the region code.<br><br>Example<br><br>'en', 'es', 'pl'. |
| languageCurrencyCode | string \| null | Currency code for the locale. On iOS, it's the currency code for the current locale in the list, not the device region. On Android, it's equal to currencyCode. Is null on Web. Prefer using currencyCode for any internalization purposes.<br><br>Example<br><br>'USD', 'EUR', 'PLN'. |
| languageCurrencySymbol | string \| null | Currency symbol for the currency specified by languageCurrencyCode. Prefer using currencySymbol for any internalization purposes.<br><br>Example<br><br>'$', '€', 'zł'. |
| languageRegionCode | string \| null | The region code for the preferred language. When the language is not region-specific, it returns the same value as regionCode. When the language is region-specific, it returns the region code for the language (en-CA -> CA). Prefer using regionCode for any internalization purposes.<br><br>Example<br><br>'US'. |
| languageScriptCode | string \| null | An ISO 15924<br> 4-letter script code. On Android and Web, it may be null if none is defined.<br><br>Example<br><br>'Latn', 'Hans', 'Hebr'. |
| languageTag | string | An IETF BCP 47 language tag<br> with a region code.<br><br>Example<br><br>'en-US', 'es-419', 'pl-PL'. |
| measurementSystem | 'metric' \| 'us' \| 'uk' \| null | The measurement system used in the locale. Is null on Web, as user chosen measurement system is not exposed on the web and using locale to determine measurement systems is unreliable. Ask for user preferences if possible. |
| regionCode | string \| null | The region code for your device that comes from the Region setting under Language & Region on iOS, Region settings on Android and is parsed from locale on Web (can be null on Web).<br><br>Example<br><br>'US'. |
| temperatureUnit | 'celsius' \| 'fahrenheit' \| null | The temperature unit used in the locale. Returns null if the region code is unknown. |
| textDirection | 'ltr' \| 'rtl' \| null | Text direction for the locale. One of: 'ltr', 'rtl', but can also be null on some browsers without support for the textInfo<br> property in Intl<br> API. |
CalendarIdentifierAndroid
iOS
tvOS
Web
The calendar identifier, one of Unicode calendar types
. Gregorian calendar is aliased and can be referred to as both CalendarIdentifier.GREGORIAN and CalendarIdentifier.GREGORY.
BUDDHISTCalendarIdentifier.BUDDHIST = "buddhist"
Thai Buddhist calendar
CHINESECalendarIdentifier.CHINESE = "chinese"
Traditional Chinese calendar
COPTICCalendarIdentifier.COPTIC = "coptic"
Coptic calendar
DANGICalendarIdentifier.DANGI = "dangi"
Traditional Korean calendar
ETHIOAACalendarIdentifier.ETHIOAA = "ethioaa"
Ethiopic calendar, Amete Alem (epoch approx. 5493 B.C.E)
ETHIOPICCalendarIdentifier.ETHIOPIC = "ethiopic"
Ethiopic calendar, Amete Mihret (epoch approx, 8 C.E.)
GREGORIANCalendarIdentifier.GREGORIAN = "gregory"
Gregorian calendar (alias)
GREGORYCalendarIdentifier.GREGORY = "gregory"
Gregorian calendar
HEBREWCalendarIdentifier.HEBREW = "hebrew"
Traditional Hebrew calendar
INDIANCalendarIdentifier.INDIAN = "indian"
Indian calendar
ISLAMICCalendarIdentifier.ISLAMIC = "islamic"
Islamic calendar
ISLAMIC_CIVILCalendarIdentifier.ISLAMIC_CIVIL = "islamic-civil"
Islamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - civil epoch)
ISLAMIC_RGSACalendarIdentifier.ISLAMIC_RGSA = "islamic-rgsa"
Islamic calendar, Saudi Arabia sighting
ISLAMIC_TBLACalendarIdentifier.ISLAMIC_TBLA = "islamic-tbla"
Islamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - astronomical epoch)
ISLAMIC_UMALQURACalendarIdentifier.ISLAMIC_UMALQURA = "islamic-umalqura"
Islamic calendar, Umm al-Qura
ISO8601CalendarIdentifier.ISO8601 = "iso8601"
ISO calendar (Gregorian calendar using the ISO 8601 calendar week rules)
JAPANESECalendarIdentifier.JAPANESE = "japanese"
Japanese imperial calendar
PERSIANCalendarIdentifier.PERSIAN = "persian"
Persian calendar
ROCCalendarIdentifier.ROC = "roc"
Civil (algorithmic) Arabic calendar
WeekdayAndroid
iOS
tvOS
Web
An enum mapping days of the week in Gregorian calendar to their index as returned by the firstWeekday property.
SUNDAYWeekday.SUNDAY = 1
MONDAYWeekday.MONDAY = 2
TUESDAYWeekday.TUESDAY = 3
WEDNESDAYWeekday.WEDNESDAY = 4
THURSDAYWeekday.THURSDAY = 5
FRIDAYWeekday.FRIDAY = 6
SATURDAYWeekday.SATURDAY = 7