function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } $parcel$export(module.exports, "LocalizedStringDictionary", function () { return $2f953b27181a8377$export$c17fa47878dc55b6; }); /* * Copyright 2022 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ const $2f953b27181a8377$var$localeSymbol = Symbol.for('react-aria.i18n.locale'); const $2f953b27181a8377$var$stringsSymbol = Symbol.for('react-aria.i18n.strings'); let $2f953b27181a8377$var$cachedGlobalStrings = undefined; class $2f953b27181a8377$export$c17fa47878dc55b6 { constructor(messages, defaultLocale = 'en-US'){ // Clone messages so we don't modify the original object. // Filter out entries with falsy values which may have been caused by applying optimize-locales-plugin. this.strings = Object.fromEntries(Object.entries(messages).filter(([, v])=>v)); this.defaultLocale = defaultLocale; } /** Returns a localized string for the given key and locale. */ getStringForLocale(key, locale) { let strings = this.getStringsForLocale(locale); let string = strings[key]; if (!string) throw new Error(`Could not find intl message ${key} in ${locale} locale`); return string; } /** Returns all localized strings for the given locale. */ getStringsForLocale(locale) { let strings = this.strings[locale]; if (!strings) { strings = $2f953b27181a8377$var$getStringsForLocale(locale, this.strings, this.defaultLocale); this.strings[locale] = strings; } return strings; } static getGlobalDictionaryForPackage(packageName) { if (typeof window === 'undefined') return null; let locale = window[$2f953b27181a8377$var$localeSymbol]; if ($2f953b27181a8377$var$cachedGlobalStrings === undefined) { let globalStrings = window[$2f953b27181a8377$var$stringsSymbol]; if (!globalStrings) return null; $2f953b27181a8377$var$cachedGlobalStrings = {}; for(let pkg in globalStrings)$2f953b27181a8377$var$cachedGlobalStrings[pkg] = new $2f953b27181a8377$export$c17fa47878dc55b6({ [locale]: globalStrings[pkg] }, locale); } let dictionary = $2f953b27181a8377$var$cachedGlobalStrings?.[packageName]; if (!dictionary) throw new Error(`Strings for package "${packageName}" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`); return dictionary; } } function $2f953b27181a8377$var$getStringsForLocale(locale, strings, defaultLocale = 'en-US') { // If there is an exact match, use it. if (strings[locale]) return strings[locale]; // Attempt to find the closest match by language. // For example, if the locale is fr-CA (French Canadian), but there is only // an fr-FR (France) set of strings, use that. // This could be replaced with Intl.LocaleMatcher once it is supported. // https://github.com/tc39/proposal-intl-localematcher let language = $2f953b27181a8377$var$getLanguage(locale); if (strings[language]) return strings[language]; for(let key in strings){ if (key.startsWith(language + '-')) return strings[key]; } // Nothing close, use english. return strings[defaultLocale]; } function $2f953b27181a8377$var$getLanguage(locale) { // @ts-ignore if (Intl.Locale) // @ts-ignore return new Intl.Locale(locale).language; return locale.split('-')[0]; } //# sourceMappingURL=LocalizedStringDictionary.cjs.map