12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*!
- * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
- * v1.0.0-beta.82
- */
- import { getAssetPath } from "@stencil/core";
- import { locales } from "../../utils/locale";
- /**
- * Get supported locale code from raw user input
- * Exported for testing purposes.
- * @private
- */
- function getSupportedLocale(lang = "") {
- if (locales.indexOf(lang) > -1) {
- return lang;
- }
- lang = lang.toLowerCase();
- if (lang.includes("-")) {
- lang = lang.replace(/(\w+)-(\w+)/, (_match, language, region) => `${language}-${region.toUpperCase()}`);
- if (!locales.includes(lang)) {
- lang = lang.split("-")[0];
- }
- }
- return locales.includes(lang) ? lang : "en";
- }
- /**
- * CLDR cache.
- * Exported for testing purposes.
- * @private
- */
- export const translationCache = {};
- /**
- * CLDR request cache.
- * Exported for testing purposes.
- * @private
- */
- export const requestCache = {};
- /**
- * Fetch calendar data for a given locale from list of supported languages
- * @public
- */
- export async function getLocaleData(lang) {
- const locale = getSupportedLocale(lang);
- if (translationCache[locale]) {
- return translationCache[locale];
- }
- if (!requestCache[locale]) {
- requestCache[locale] = fetch(getAssetPath(`./assets/date-picker/nls/${locale}.json`))
- .then((resp) => resp.json())
- .catch(() => {
- console.error(`Translations for "${locale}" not found or invalid, falling back to english`);
- return getLocaleData("en");
- });
- }
- const data = await requestCache[locale];
- translationCache[locale] = data;
- return data;
- }
|