UNPKG

react-native-localize

Version:

A toolbox for your React Native app localization.

148 lines (147 loc) 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCalendar = getCalendar; exports.getCountry = getCountry; exports.getCurrencies = getCurrencies; exports.getLocales = getLocales; exports.getNumberFormatSettings = getNumberFormatSettings; exports.getTemperatureUnit = getTemperatureUnit; exports.getTimeZone = getTimeZone; exports.openAppLanguageSettings = openAppLanguageSettings; exports.uses24HourClock = uses24HourClock; exports.usesAutoDateAndTime = usesAutoDateAndTime; exports.usesAutoTimeZone = usesAutoTimeZone; exports.usesMetricSystem = usesMetricSystem; var _constants = require("./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: _constants.USES_RTL_LAYOUT.includes(languageCode) }; } function getCurrentLocale() { return convertLanguageTagToLocale(navigator.language, getCountry()); } function getCalendar() { return "gregorian"; } 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"; } function getCurrencies() { const { languages = [navigator.language] } = navigator; const currencies = []; languages.forEach(language => { const { countryCode } = splitLanguageTag(language); if (countryCode) { const currency = _constants.CURRENCIES[ensureCountryCode(countryCode)]; if (currency && currencies.indexOf(currency) === -1) { currencies.push(currency); } } }); if (currencies.length === 0) { currencies.push("USD"); } return currencies; } 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; } 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] || "," }; } function getTemperatureUnit() { return _constants.USES_FAHRENHEIT.includes(getCountry()) ? "fahrenheit" : "celsius"; } function getTimeZone() { const { languageTag } = getCurrentLocale(); const formatter = new Intl.DateTimeFormat(languageTag, { hour: "numeric" }); return formatter.resolvedOptions().timeZone || "Etc/UTC"; } 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); } function usesMetricSystem() { return !_constants.USES_IMPERIAL.includes(getCountry()); } function usesAutoDateAndTime() { return; } function usesAutoTimeZone() { return; } async function openAppLanguageSettings() { throw new Error("openAppLanguageSettings is supported only on Android 13+"); } //# sourceMappingURL=module.web.js.map