UNPKG

react-native-localize

Version:

A toolbox for your React Native app localization.

133 lines (132 loc) 3.58 kB
"use strict"; import { CURRENCIES, USES_FAHRENHEIT, USES_IMPERIAL, USES_RTL_LAYOUT } from "./constants"; function ensureCountryCode(countryCode) { return countryCode === "419" ? "UN" : countryCode.toUpperCase(); } function splitLanguageTag(languageTag) { const [languageCode = "en", countryCode] = languageTag.split("-"); return { languageCode, countryCode }; } function convertLanguageTagToLocale(languageTag, countryCodeFallback) { let { languageCode, countryCode } = splitLanguageTag(languageTag); languageCode = languageCode.toLowerCase(); countryCode = ensureCountryCode(countryCode || countryCodeFallback); return { languageCode, countryCode, languageTag: `${languageCode}-${countryCode}`, isRTL: USES_RTL_LAYOUT.includes(languageCode) }; } function getCurrentLocale() { return convertLanguageTagToLocale(navigator.language, getCountry()); } export function getCalendar() { return "gregorian"; } export function getCountry() { const { languages = [navigator.language] } = navigator; for (let i = 0; i < languages.length; i++) { const language = languages[i]; if (!language) { continue; } const { countryCode } = splitLanguageTag(language); if (countryCode) { return ensureCountryCode(countryCode); } } return "US"; } export function getCurrencies() { const { languages = [navigator.language] } = navigator; const currencies = []; languages.forEach(language => { const { countryCode } = splitLanguageTag(language); if (countryCode) { const currency = CURRENCIES[ensureCountryCode(countryCode)]; if (currency && currencies.indexOf(currency) === -1) { currencies.push(currency); } } }); if (currencies.length === 0) { currencies.push("USD"); } return currencies; } export function getLocales() { const { languages = [navigator.language] } = navigator; const countryCode = getCountry(); const cache = []; const locales = []; languages.forEach(language => { const locale = convertLanguageTagToLocale(language, countryCode); if (cache.indexOf(locale.languageTag) === -1) { locales.push(locale); cache.push(locale.languageTag); } }); return locales; } export function getNumberFormatSettings() { const { languageTag } = getCurrentLocale(); const formatter = new Intl.NumberFormat(languageTag); const separators = formatter.format(1000000.1).replace(/\d/g, ""); return { decimalSeparator: separators[separators.length - 1] || ".", groupingSeparator: separators[0] || "," }; } export function getTemperatureUnit() { return USES_FAHRENHEIT.includes(getCountry()) ? "fahrenheit" : "celsius"; } export function getTimeZone() { const { languageTag } = getCurrentLocale(); const formatter = new Intl.DateTimeFormat(languageTag, { hour: "numeric" }); return formatter.resolvedOptions().timeZone || "Etc/UTC"; } export function uses24HourClock() { const { languageTag } = getCurrentLocale(); const formatter = new Intl.DateTimeFormat(languageTag, { hour: "numeric" }); return !formatter.format(new Date(2000, 0, 1, 20)).match(/am|pm/i); } export function usesMetricSystem() { return !USES_IMPERIAL.includes(getCountry()); } export function usesAutoDateAndTime() { return; } export function usesAutoTimeZone() { return; } export async function openAppLanguageSettings() { throw new Error("openAppLanguageSettings is supported only on Android 13+"); } //# sourceMappingURL=module.web.js.map