UNPKG

@jsverse/transloco-locale

Version:

The localization (l10n) library plugin for Transloco

1 lines 66.6 kB
{"version":3,"file":"jsverse-transloco-locale.mjs","sources":["../../../../libs/transloco-locale/src/lib/helpers.ts","../../../../libs/transloco-locale/src/lib/shared.ts","../../../../libs/transloco-locale/src/lib/locale-currency.ts","../../../../libs/transloco-locale/src/lib/transloco-locale.config.ts","../../../../libs/transloco-locale/src/lib/transloco-locale.transformers.ts","../../../../libs/transloco-locale/src/lib/transloco-locale.service.ts","../../../../libs/transloco-locale/src/lib/pipes/base-locale.pipe.ts","../../../../libs/transloco-locale/src/lib/pipes/transloco-currency.pipe.ts","../../../../libs/transloco-locale/src/lib/pipes/transloco-date.pipe.ts","../../../../libs/transloco-locale/src/lib/pipes/transloco-decimal.pipe.ts","../../../../libs/transloco-locale/src/lib/pipes/transloco-percent.pipe.ts","../../../../libs/transloco-locale/src/lib/transloco-locale.module.ts","../../../../libs/transloco-locale/src/lib/transloco-locale.providers.ts","../../../../libs/transloco-locale/src/jsverse-transloco-locale.ts"],"sourcesContent":["import { toNumber } from '@jsverse/utils';\n\nimport { DateFormatOptions, Locale } from './transloco-locale.types';\n\nexport const ISO8601_DATE_REGEX =\n /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n\n/**\n * Checks if a given value is a valid BCP 47 language tag.\n *\n * Validation is delegated to `Intl.getCanonicalLocales`, which means all\n * formats accepted by the platform are accepted here — including single\n * subtags, case-insensitive region codes, and script subtags. This is\n * intentionally more permissive than a hand-rolled regex so\n * that values coming directly from `navigator.language` (e.g. `\"de\"` on\n * Firefox or `\"de-de\"` on Safari) are treated as valid.\n *\n * @param value - The value to check.\n * @returns `true` if `value` is a valid BCP 47 language tag, `false` otherwise.\n *\n * @example\n * // Single primary language subtag (e.g. Firefox)\n * isLocaleFormat('de') // true\n *\n * @example\n * // Standard language-REGION tag\n * isLocaleFormat('en-US') // true\n *\n * @example\n * // Case-insensitive region (e.g. Safari)\n * isLocaleFormat('de-de') // true\n *\n * @example\n * // Script subtag\n * isLocaleFormat('zh-Hant-TW') // true\n *\n * @example\n * // Invalid tag\n * isLocaleFormat('not valid') // false\n * isLocaleFormat('') // false\n * isLocaleFormat(null) // false\n */\nexport function isLocaleFormat(value: any): value is Locale {\n try {\n return (\n typeof value === 'string' && Intl.getCanonicalLocales(value).length > 0\n );\n } catch {\n return false;\n }\n}\n\nexport function localizeNumber(\n value: number | string,\n locale: Locale,\n options: Intl.NumberFormatOptions,\n): string {\n const number = toNumber(value);\n return number !== null\n ? new Intl.NumberFormat(locale, options).format(number)\n : '';\n}\n\nexport function localizeDate(\n date: Date,\n locale: Locale,\n options: DateFormatOptions,\n): string {\n if (isDate(date)) {\n return new Intl.DateTimeFormat(locale, options as any).format(date);\n }\n return '';\n}\n\nexport function isDate(value: any): boolean {\n return value instanceof Date && !isNaN(<any>value);\n}\n\nexport function toDate(value: any): Date {\n let match: RegExpMatchArray | null;\n\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n if (isDate(value)) {\n return value;\n }\n\n if (!isNaN(value - parseFloat(value))) {\n return new Date(parseFloat(value));\n }\n\n if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n const [y, m, d] = value.split('-').map((val: string) => parseInt(val, 10));\n return new Date(y, m - 1, d);\n }\n\n if (typeof value === 'string' && (match = value.match(ISO8601_DATE_REGEX))) {\n return isoStringToDate(match);\n }\n\n return new Date(value);\n}\n\nexport function isoStringToDate(match: RegExpMatchArray): Date {\n const date: Date = new Date(0);\n let tzHour = 0;\n let tzMin = 0;\n const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n if (match[9]) {\n tzHour = +(match[9] + match[10]);\n tzMin = +(match[9] + match[11]);\n }\n dateSetter.call(date, +match[1], +match[2] - 1, +match[3]);\n const h: number = +(match[4] || '0') - tzHour;\n const m: number = +(match[5] || '0') - tzMin;\n const s: number = +(match[6] || '0');\n const ms: number = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n}\n","import {\n Locale,\n LocaleFormatOptions,\n LocaleConfig,\n} from './transloco-locale.types';\n\nexport function getDefaultOptions<T extends keyof LocaleFormatOptions>(\n locale: Locale,\n style: T,\n localeConfig: LocaleConfig,\n) {\n const defaultConfig = (localeConfig.global?.[style] ?? {}) as NonNullable<\n LocaleFormatOptions[T]\n >;\n const settings = (localeConfig.localeBased?.[locale] ??\n {}) as LocaleFormatOptions;\n\n return Reflect.has(settings, style)\n ? { ...defaultConfig, ...settings[style] }\n : defaultConfig;\n}\n","export default {\n 'aa-DJ': 'DJF',\n 'aa-ER': 'ERN',\n 'aa-ET': 'ETB',\n 'ab-GE': 'ETB',\n 'ab-TR': 'ETB',\n 'af-BW': 'ETB',\n 'af-NA': 'ETB',\n 'af-ZA': 'ZAR',\n 'ak-GH': 'ZAR',\n 'am-ET': 'ETB',\n 'am-IL': 'ETB',\n 'ar-AE': 'AED',\n 'ar-AR': 'AED',\n 'ar-BH': 'BHD',\n 'ar-CM': 'BHD',\n 'ar-CY': 'BHD',\n 'ar-DJ': 'BHD',\n 'ar-DZ': 'DZD',\n 'ar-EG': 'EGP',\n 'ar-EH': 'EGP',\n 'ar-ER': 'EGP',\n 'ar-IL': 'EGP',\n 'ar-IQ': 'IQD',\n 'ar-IR': 'IQD',\n 'ar-JO': 'JOD',\n 'ar-KE': 'JOD',\n 'ar-KM': 'JOD',\n 'ar-KW': 'KWD',\n 'ar-LB': 'LBP',\n 'ar-LY': 'LYD',\n 'ar-MA': 'MAD',\n 'ar-ML': 'MAD',\n 'ar-MR': 'MAD',\n 'ar-NE': 'MAD',\n 'ar-NG': 'MAD',\n 'ar-OM': 'OMR',\n 'ar-PS': 'OMR',\n 'ar-QA': 'QAR',\n 'ar-SA': 'SAR',\n 'ar-SD': 'SDD',\n 'ar-SS': 'SDD',\n 'ar-SY': 'SYP',\n 'ar-TD': 'SYP',\n 'ar-TJ': 'SYP',\n 'ar-TN': 'TND',\n 'ar-TR': 'TND',\n 'ar-YE': 'YER',\n 'as-IN': 'INR',\n 'av-RU': 'INR',\n 'ay-BO': 'INR',\n 'ay-PE': 'INR',\n 'az-AZ': 'AZM',\n 'ba-RU': 'AZM',\n 'be-BY': 'BYR',\n 'be-PL': 'BYR',\n 'be-UA': 'BYR',\n 'bg-BG': 'BGN',\n 'bg-GR': 'BGN',\n 'bg-MD': 'BGN',\n 'bg-RO': 'BGN',\n 'bg-TR': 'BGN',\n 'bg-UA': 'BGN',\n 'bi-VU': 'BGN',\n 'bm-ML': 'BGN',\n 'bn-BD': 'BDT',\n 'bn-GB': 'BDT',\n 'bn-IN': 'INR',\n 'bn-NP': 'INR',\n 'bo-CN': 'CNY',\n 'bo-IN': 'INR',\n 'bo-NP': 'INR',\n 'br-FR': 'EUR',\n 'bs-BA': 'BAM',\n 'ca-AD': 'EUR',\n 'ca-ES': 'EUR',\n 'ca-FR': 'EUR',\n 'ca-IT': 'EUR',\n 'ce-RU': 'EUR',\n 'ch-GU': 'EUR',\n 'ch-MP': 'EUR',\n 'co-FR': 'EUR',\n 'cs-CZ': 'CZK',\n 'cv-RU': 'RUB',\n 'cy-AR': 'RUB',\n 'cy-GB': 'GBP',\n 'da-DE': 'GBP',\n 'da-DK': 'DKK',\n 'da-GL': 'DKK',\n 'da-IS': 'DKK',\n 'de-AT': 'EUR',\n 'de-BE': 'EUR',\n 'de-BR': 'EUR',\n 'de-CA': 'EUR',\n 'de-CH': 'CHF',\n 'de-CZ': 'CHF',\n 'de-DE': 'EUR',\n 'de-DK': 'EUR',\n 'de-HU': 'EUR',\n 'de-IT': 'EUR',\n 'de-KZ': 'EUR',\n 'de-LI': 'EUR',\n 'de-LU': 'EUR',\n 'de-NA': 'EUR',\n 'de-PL': 'EUR',\n 'de-PY': 'EUR',\n 'de-RO': 'EUR',\n 'de-SK': 'EUR',\n 'de-US': 'EUR',\n 'dv-IN': 'EUR',\n 'dv-MV': 'MVR',\n 'dz-BT': 'BTN',\n 'dz-IN': 'BTN',\n 'ee-GH': 'BTN',\n 'ee-TG': 'BTN',\n 'el-AL': 'BTN',\n 'el-CY': 'EUR',\n 'el-DE': 'EUR',\n 'el-EG': 'EUR',\n 'el-GB': 'EUR',\n 'el-GR': 'EUR',\n 'el-IT': 'EUR',\n 'el-RO': 'EUR',\n 'el-TR': 'EUR',\n 'el-UA': 'EUR',\n 'en-AC': 'EUR',\n 'en-AG': 'XCD',\n 'en-AI': 'XCD',\n 'en-AS': 'XCD',\n 'en-AU': 'AUD',\n 'en-AW': 'AUD',\n 'en-BB': 'AUD',\n 'en-BE': 'AUD',\n 'en-BM': 'AUD',\n 'en-BN': 'AUD',\n 'en-BS': 'AUD',\n 'en-BW': 'BWP',\n 'en-BZ': 'BWP',\n 'en-CA': 'CAD',\n 'en-CC': 'CAD',\n 'en-CK': 'CAD',\n 'en-CM': 'CAD',\n 'en-CN': 'CAD',\n 'en-CX': 'CAD',\n 'en-DE': 'CAD',\n 'en-DG': 'CAD',\n 'en-DM': 'CAD',\n 'en-DO': 'CAD',\n 'en-ES': 'CAD',\n 'en-ET': 'CAD',\n 'en-FI': 'CAD',\n 'en-FJ': 'CAD',\n 'en-FK': 'CAD',\n 'en-FM': 'CAD',\n 'en-FR': 'CAD',\n 'en-GB': 'GBP',\n 'en-GD': 'GBP',\n 'en-GG': 'GBP',\n 'en-GH': 'GBP',\n 'en-GI': 'GBP',\n 'en-GM': 'GBP',\n 'en-GU': 'GBP',\n 'en-GY': 'GBP',\n 'en-HK': 'HKD',\n 'en-HN': 'HKD',\n 'en-IE': 'EUR',\n 'en-IL': 'EUR',\n 'en-IM': 'EUR',\n 'en-IN': 'INR',\n 'en-IO': 'INR',\n 'en-IT': 'INR',\n 'en-JE': 'INR',\n 'en-JM': 'INR',\n 'en-KE': 'INR',\n 'en-KI': 'INR',\n 'en-KN': 'INR',\n 'en-KY': 'INR',\n 'en-LB': 'INR',\n 'en-LC': 'INR',\n 'en-LK': 'INR',\n 'en-LR': 'INR',\n 'en-LS': 'INR',\n 'en-MG': 'INR',\n 'en-MH': 'INR',\n 'en-MP': 'INR',\n 'en-MS': 'INR',\n 'en-MT': 'INR',\n 'en-MU': 'INR',\n 'en-MW': 'INR',\n 'en-MY': 'INR',\n 'en-NA': 'INR',\n 'en-NF': 'INR',\n 'en-NG': 'NGN',\n 'en-NL': 'NGN',\n 'en-NR': 'NGN',\n 'en-NU': 'NGN',\n 'en-NZ': 'NZD',\n 'en-PA': 'NZD',\n 'en-PG': 'NZD',\n 'en-PH': 'PHP',\n 'en-PI': 'PHP',\n 'en-PK': 'PHP',\n 'en-PM': 'PHP',\n 'en-PN': 'PHP',\n 'en-PR': 'PHP',\n 'en-PW': 'PHP',\n 'en-RW': 'PHP',\n 'en-SB': 'PHP',\n 'en-SC': 'PHP',\n 'en-SG': 'SGD',\n 'en-SH': 'SGD',\n 'en-SL': 'SGD',\n 'en-SS': 'SGD',\n 'en-SZ': 'SGD',\n 'en-TA': 'SGD',\n 'en-TC': 'SGD',\n 'en-TK': 'SGD',\n 'en-TO': 'SGD',\n 'en-TT': 'SGD',\n 'en-TV': 'SGD',\n 'en-TZ': 'SGD',\n 'en-UD': 'SGD',\n 'en-UG': 'SGD',\n 'en-UM': 'SGD',\n 'en-US': 'USD',\n 'en-VC': 'USD',\n 'en-VG': 'USD',\n 'en-VI': 'USD',\n 'en-VU': 'USD',\n 'en-WS': 'USD',\n 'en-ZA': 'ZAR',\n 'en-ZM': 'ZAR',\n 'en-ZW': 'ZWD',\n 'eo-EO': 'ZWD',\n 'eo-SM': 'ZWD',\n 'es-AD': 'ZWD',\n 'es-AR': 'ARS',\n 'es-BO': 'BOB',\n 'es-BZ': 'BOB',\n 'es-CL': 'CLP',\n 'es-CO': 'COP',\n 'es-CR': 'CRC',\n 'es-CU': 'CRC',\n 'es-DE': 'CRC',\n 'es-DO': 'DOP',\n 'es-EA': 'DOP',\n 'es-EC': 'USD',\n 'es-ES': 'EUR',\n 'es-GQ': 'EUR',\n 'es-GT': 'GTQ',\n 'es-HN': 'HNL',\n 'es-IC': 'HNL',\n 'es-LA': 'HNL',\n 'es-MA': 'HNL',\n 'es-MX': 'MXN',\n 'es-NI': 'NIO',\n 'es-PA': 'PAB',\n 'es-PE': 'PEN',\n 'es-PH': 'PEN',\n 'es-PR': 'USD',\n 'es-PY': 'PYG',\n 'es-SV': 'SVC',\n 'es-TT': 'SVC',\n 'es-US': 'USD',\n 'es-UY': 'UYU',\n 'es-VE': 'VEB',\n 'et-EE': 'EEK',\n 'et-FI': 'EEK',\n 'eu-ES': 'EUR',\n 'eu-FR': 'EUR',\n 'fa-AE': 'EUR',\n 'fa-AF': 'EUR',\n 'fa-IQ': 'EUR',\n 'fa-IR': 'IRR',\n 'fa-OM': 'IRR',\n 'fa-PK': 'IRR',\n 'fa-QA': 'IRR',\n 'fa-TJ': 'IRR',\n 'fb-LT': 'IRR',\n 'ff-GN': 'IRR',\n 'ff-MR': 'IRR',\n 'ff-SN': 'IRR',\n 'fi-FI': 'EUR',\n 'fi-RU': 'EUR',\n 'fi-SE': 'EUR',\n 'fj-FJ': 'EUR',\n 'fo-FO': 'DKK',\n 'fr-AD': 'DKK',\n 'fr-BE': 'EUR',\n 'fr-BF': 'EUR',\n 'fr-BI': 'EUR',\n 'fr-BJ': 'EUR',\n 'fr-BL': 'EUR',\n 'fr-CA': 'CAD',\n 'fr-CD': 'CAD',\n 'fr-CF': 'CAD',\n 'fr-CG': 'CAD',\n 'fr-CH': 'CHF',\n 'fr-CI': 'CHF',\n 'fr-CM': 'CHF',\n 'fr-CP': 'CHF',\n 'fr-DJ': 'CHF',\n 'fr-DZ': 'CHF',\n 'fr-FR': 'EUR',\n 'fr-GA': 'EUR',\n 'fr-GB': 'EUR',\n 'fr-GF': 'EUR',\n 'fr-GN': 'EUR',\n 'fr-GP': 'EUR',\n 'fr-GQ': 'EUR',\n 'fr-HT': 'EUR',\n 'fr-IT': 'EUR',\n 'fr-KM': 'EUR',\n 'fr-LB': 'EUR',\n 'fr-LU': 'EUR',\n 'fr-MA': 'EUR',\n 'fr-MC': 'EUR',\n 'fr-MF': 'EUR',\n 'fr-MG': 'EUR',\n 'fr-ML': 'EUR',\n 'fr-MQ': 'EUR',\n 'fr-MR': 'EUR',\n 'fr-MU': 'EUR',\n 'fr-NC': 'EUR',\n 'fr-NE': 'EUR',\n 'fr-PF': 'EUR',\n 'fr-PM': 'EUR',\n 'fr-RE': 'EUR',\n 'fr-RW': 'EUR',\n 'fr-SC': 'EUR',\n 'fr-SN': 'EUR',\n 'fr-SY': 'EUR',\n 'fr-TD': 'EUR',\n 'fr-TF': 'EUR',\n 'fr-TG': 'EUR',\n 'fr-TN': 'EUR',\n 'fr-US': 'EUR',\n 'fr-VU': 'EUR',\n 'fr-WF': 'EUR',\n 'fr-YT': 'EUR',\n 'fy-NL': 'EUR',\n 'ga-GB': 'EUR',\n 'ga-IE': 'EUR',\n 'gd-GB': 'GBP',\n 'gl-ES': 'EUR',\n 'gl-PT': 'EUR',\n 'gn-AR': 'EUR',\n 'gn-BO': 'EUR',\n 'gn-PY': 'EUR',\n 'gu-IN': 'INR',\n 'gu-KE': 'INR',\n 'gv-IM': 'INR',\n 'he-IL': 'ILS',\n 'hi-FJ': 'ILS',\n 'hi-IN': 'INR',\n 'hi-NP': 'INR',\n 'hi-UG': 'INR',\n 'hi-ZA': 'INR',\n 'ho-PG': 'INR',\n 'hr-AT': 'INR',\n 'hr-BA': 'INR',\n 'hr-DE': 'INR',\n 'hr-HR': 'HRK',\n 'hr-HU': 'HRK',\n 'hr-IT': 'HRK',\n 'ht-HT': 'HTG',\n 'hu-AT': 'HTG',\n 'hu-HU': 'HUF',\n 'hu-IL': 'HUF',\n 'hu-RO': 'HUF',\n 'hu-RS': 'HUF',\n 'hu-SI': 'HUF',\n 'hu-SK': 'HUF',\n 'hu-UA': 'HUF',\n 'hy-AM': 'AMD',\n 'hy-CY': 'AMD',\n 'hy-GE': 'AMD',\n 'hy-IR': 'AMD',\n 'hy-LB': 'AMD',\n 'hy-SY': 'AMD',\n 'hy-TR': 'AMD',\n 'ia-SE': 'AMD',\n 'id-ID': 'IDR',\n 'id-NL': 'IDR',\n 'ig-NG': 'NGN',\n 'ii-CN': 'NGN',\n 'ik-US': 'NGN',\n 'is-IS': 'ISK',\n 'it-AU': 'ISK',\n 'it-BR': 'ISK',\n 'it-CA': 'ISK',\n 'it-CH': 'CHF',\n 'it-DE': 'CHF',\n 'it-FR': 'CHF',\n 'it-GB': 'CHF',\n 'it-HR': 'CHF',\n 'it-IT': 'EUR',\n 'it-SI': 'EUR',\n 'it-SM': 'EUR',\n 'it-US': 'EUR',\n 'it-VA': 'EUR',\n 'iu-GL': 'EUR',\n 'ja-BR': 'EUR',\n 'ja-JP': 'JPY',\n 'jv-ID': 'JPY',\n 'jv-MY': 'JPY',\n 'ka-GE': 'GEL',\n 'ka-IR': 'GEL',\n 'ka-TR': 'GEL',\n 'kg-CD': 'GEL',\n 'ki-KE': 'GEL',\n 'kj-NA': 'GEL',\n 'kl-DK': 'GEL',\n 'kl-GL': 'DKK',\n 'km-KH': 'KHR',\n 'kn-IN': 'INR',\n 'ko-BR': 'INR',\n 'ko-CN': 'INR',\n 'ko-JP': 'INR',\n 'ko-KP': 'INR',\n 'ko-KR': 'KRW',\n 'ko-US': 'KRW',\n 'ks-GB': 'KRW',\n 'ks-IN': 'INR',\n 'ks-PK': 'INR',\n 'ku-TR': 'TRY',\n 'kw-GB': 'GBP',\n 'la-VA': 'GBP',\n 'lb-LU': 'GBP',\n 'lg-UG': 'UGX',\n 'li-NL': 'EUR',\n 'ln-CD': 'EUR',\n 'ln-CG': 'EUR',\n 'lo-LA': 'LAK',\n 'lt-LT': 'LTL',\n 'lu-CD': 'LTL',\n 'lv-LV': 'LVL',\n 'mg-MG': 'MGA',\n 'mh-MH': 'MGA',\n 'mi-NZ': 'NZD',\n 'mk-AL': 'NZD',\n 'mk-GR': 'NZD',\n 'mk-MK': 'MKD',\n 'ml-AE': 'MKD',\n 'ml-BH': 'MKD',\n 'ml-GB': 'MKD',\n 'ml-IL': 'MKD',\n 'ml-IN': 'INR',\n 'ml-MY': 'INR',\n 'ml-QA': 'INR',\n 'ml-SG': 'INR',\n 'mr-IN': 'INR',\n 'ms-BN': 'INR',\n 'ms-CC': 'INR',\n 'ms-ID': 'INR',\n 'ms-MY': 'MYR',\n 'ms-SG': 'MYR',\n 'mt-MT': 'EUR',\n 'my-BD': 'EUR',\n 'my-MM': 'MMK',\n 'na-NR': 'MMK',\n 'nb-NO': 'NOK',\n 'nb-SJ': 'NOK',\n 'nd-ZW': 'NOK',\n 'ne-BT': 'NOK',\n 'ne-IN': 'NOK',\n 'ne-NP': 'INR',\n 'ng-NA': 'INR',\n 'nl-AW': 'AWG',\n 'nl-BE': 'EUR',\n 'nl-DE': 'EUR',\n 'nl-FR': 'EUR',\n 'nl-NL': 'EUR',\n 'nl-SR': 'EUR',\n 'nn-NO': 'NOK',\n 'nr-ZA': 'ZAR',\n 'nv-US': 'ZAR',\n 'ny-MW': 'ZAR',\n 'ny-MZ': 'ZAR',\n 'ny-ZM': 'ZAR',\n 'ny-ZW': 'ZAR',\n 'oc-FR': 'EUR',\n 'om-ET': 'ETB',\n 'om-KE': 'KES',\n 'om-SO': 'KES',\n 'or-IN': 'INR',\n 'os-GE': 'INR',\n 'pa-IN': 'INR',\n 'pl-CZ': 'INR',\n 'pl-DE': 'INR',\n 'pl-IL': 'INR',\n 'pl-PL': 'PLN',\n 'pl-RO': 'PLN',\n 'pl-SK': 'PLN',\n 'pl-UA': 'PLN',\n 'ps-AE': 'PLN',\n 'ps-AF': 'AFN',\n 'ps-IR': 'AFN',\n 'ps-PK': 'AFN',\n 'pt-AG': 'AFN',\n 'pt-AO': 'AFN',\n 'pt-BR': 'BRL',\n 'pt-CV': 'BRL',\n 'pt-FR': 'BRL',\n 'pt-GW': 'BRL',\n 'pt-MO': 'BRL',\n 'pt-MZ': 'BRL',\n 'pt-PT': 'EUR',\n 'pt-ST': 'EUR',\n 'pt-TL': 'EUR',\n 'qu-BO': 'EUR',\n 'qu-PE': 'EUR',\n 'rm-CH': 'EUR',\n 'rn-BI': 'EUR',\n 'ro-HU': 'EUR',\n 'ro-IL': 'EUR',\n 'ro-MD': 'EUR',\n 'ro-RO': 'RON',\n 'ro-RS': 'RON',\n 'ro-UA': 'RON',\n 'ru-BY': 'RON',\n 'ru-CN': 'RON',\n 'ru-DE': 'RON',\n 'ru-EE': 'RON',\n 'ru-FI': 'RON',\n 'ru-GE': 'RON',\n 'ru-IL': 'RON',\n 'ru-KG': 'RON',\n 'ru-KZ': 'RON',\n 'ru-LT': 'RON',\n 'ru-LV': 'RON',\n 'ru-MD': 'RON',\n 'ru-MN': 'RON',\n 'ru-RU': 'RUB',\n 'ru-SJ': 'RUB',\n 'ru-TM': 'RUB',\n 'ru-UA': 'UAH',\n 'ru-US': 'UAH',\n 'ru-UZ': 'UAH',\n 'rw-CD': 'UAH',\n 'rw-RW': 'RWF',\n 'rw-UG': 'RWF',\n 'sa-IN': 'INR',\n 'se-FI': 'INR',\n 'se-NO': 'NOK',\n 'se-SE': 'NOK',\n 'sg-CF': 'NOK',\n 'si-LK': 'LKR',\n 'sk-HU': 'LKR',\n 'sk-RS': 'LKR',\n 'sk-SK': 'EUR',\n 'sl-AT': 'EUR',\n 'sl-HU': 'EUR',\n 'sl-IT': 'EUR',\n 'sl-SI': 'EUR',\n 'sm-AS': 'EUR',\n 'sm-WS': 'EUR',\n 'sn-ZW': 'EUR',\n 'so-DJ': 'DJF',\n 'so-ET': 'ETB',\n 'so-KE': 'ETB',\n 'so-SO': 'SOS',\n 'sq-AL': 'ALL',\n 'sq-GR': 'ALL',\n 'sq-ME': 'ALL',\n 'sq-MK': 'MKD',\n 'sq-RS': 'MKD',\n 'sq-TR': 'MKD',\n 'sr-RS': 'RSD',\n 'ss-LS': 'RSD',\n 'ss-SZ': 'RSD',\n 'ss-ZA': 'ZAR',\n 'st-LS': 'ZAR',\n 'st-ZA': 'ZAR',\n 'su-ID': 'ZAR',\n 'sv-AX': 'ZAR',\n 'sv-FI': 'EUR',\n 'sv-SE': 'SEK',\n 'sw-BI': 'SEK',\n 'sw-CD': 'SEK',\n 'sw-KE': 'SEK',\n 'sw-MZ': 'SEK',\n 'sw-SO': 'SEK',\n 'sw-TZ': 'SEK',\n 'sw-UG': 'SEK',\n 'sw-YT': 'SEK',\n 'sw-ZA': 'SEK',\n 'ta-IN': 'INR',\n 'ta-LK': 'INR',\n 'ta-MU': 'INR',\n 'ta-MY': 'INR',\n 'ta-RE': 'INR',\n 'ta-SG': 'INR',\n 'te-IN': 'INR',\n 'th-TH': 'THB',\n 'ti-ER': 'ERN',\n 'ti-ET': 'ETB',\n 'ti-IL': 'ETB',\n 'tk-AF': 'ETB',\n 'tk-IR': 'ETB',\n 'tk-TM': 'TMM',\n 'tl-PH': 'PHP',\n 'tl-US': 'PHP',\n 'tn-BW': 'PHP',\n 'tn-NA': 'PHP',\n 'tn-ZA': 'ZAR',\n 'tn-ZW': 'ZAR',\n 'to-TO': 'ZAR',\n 'tr-BG': 'ZAR',\n 'tr-CY': 'TRY',\n 'tr-DE': 'TRY',\n 'tr-GR': 'TRY',\n 'tr-MK': 'TRY',\n 'tr-NL': 'TRY',\n 'tr-RO': 'TRY',\n 'tr-TR': 'TRY',\n 'tr-UA': 'TRY',\n 'tr-UZ': 'TRY',\n 'ts-MZ': 'TRY',\n 'ts-SZ': 'TRY',\n 'ts-ZA': 'ZAR',\n 'tt-RU': 'RUB',\n 'ty-PF': 'RUB',\n 'uk-PL': 'RUB',\n 'uk-SK': 'RUB',\n 'uk-UA': 'UAH',\n 'ur-IN': 'UAH',\n 'ur-MU': 'UAH',\n 'ur-PK': 'PKR',\n 've-ZA': 'ZAR',\n 've-ZW': 'ZAR',\n 'vi-CN': 'ZAR',\n 'vi-US': 'ZAR',\n 'vi-VN': 'VND',\n 'wa-BE': 'EUR',\n 'xh-LS': 'EUR',\n 'xh-ZA': 'ZAR',\n 'yi-UA': 'ZAR',\n 'yo-BJ': 'ZAR',\n 'yo-NG': 'NGN',\n 'za-CN': 'NGN',\n 'zh-CN': 'CNY',\n 'zh-HK': 'HKD',\n 'zh-TW': 'TWD',\n 'zu-LS': 'TWD',\n 'zu-MW': 'TWD',\n 'zu-MZ': 'TWD',\n 'zu-SZ': 'TWD',\n 'zu-ZA': 'ZAR',\n};\n","import { InjectionToken } from '@angular/core';\n\nimport LOCALE_CURRENCY from './locale-currency';\nimport {\n TranslocoLocaleConfig,\n LocaleConfigMapping,\n LangToLocaleMapping,\n LocaleToCurrencyMapping,\n Locale,\n Currency,\n} from './transloco-locale.types';\n\nexport const defaultConfig: Required<TranslocoLocaleConfig> = {\n localeConfig: {\n global: {},\n localeBased: {},\n },\n defaultLocale: 'en-US',\n defaultCurrency: 'USD',\n localeToCurrencyMapping: LOCALE_CURRENCY,\n langToLocaleMapping: {},\n};\n\nexport const TRANSLOCO_LOCALE_DEFAULT_LOCALE = new InjectionToken<Locale>(\n 'TRANSLOCO_LOCALE_DEFAULT_LOCALE',\n);\nexport const TRANSLOCO_LOCALE_DEFAULT_CURRENCY = new InjectionToken<Currency>(\n 'TRANSLOCO_LOCALE_DEFAULT_CURRENCY',\n);\nexport const TRANSLOCO_LOCALE_LANG_MAPPING =\n new InjectionToken<LangToLocaleMapping>('TRANSLOCO_LOCALE_LANG_MAPPING');\nexport const TRANSLOCO_LOCALE_CONFIG = new InjectionToken<LocaleConfigMapping>(\n 'TRANSLOCO_LOCALE_CONFIG',\n);\nexport const TRANSLOCO_LOCALE_CURRENCY_MAPPING =\n new InjectionToken<LocaleToCurrencyMapping>(\n 'TRANSLOCO_LOCALE_CURRENCY_MAPPING',\n );\n","import { InjectionToken } from '@angular/core';\n\nimport { localizeNumber, localizeDate } from './helpers';\nimport {\n Locale,\n DateFormatOptions,\n NumberStyles,\n} from './transloco-locale.types';\n\nexport interface TranslocoDateTransformer {\n transform(date: Date, locale: Locale, options: DateFormatOptions): string;\n}\nexport interface TranslocoNumberTransformer {\n transform(\n value: number | string,\n type: NumberStyles,\n locale: Locale,\n options: Intl.NumberFormatOptions,\n ): string;\n}\n\nexport const TRANSLOCO_DATE_TRANSFORMER =\n new InjectionToken<TranslocoDateTransformer>('TRANSLOCO_DATE_TRANSFORMER');\nexport const TRANSLOCO_NUMBER_TRANSFORMER =\n new InjectionToken<TranslocoNumberTransformer>(\n 'TRANSLOCO_NUMBER_TRANSFORMER',\n );\n\nexport class DefaultDateTransformer implements TranslocoDateTransformer {\n public transform(\n date: Date,\n locale: Locale,\n options: DateFormatOptions,\n ): string {\n return localizeDate(date, locale, options);\n }\n}\nexport class DefaultNumberTransformer implements TranslocoNumberTransformer {\n public transform(\n value: number | string,\n type: NumberStyles,\n locale: string,\n options: Intl.NumberFormatOptions,\n ): string {\n return localizeNumber(value, locale, { ...options, style: type });\n }\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getBrowserCultureLang, TranslocoService } from '@jsverse/transloco';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\n\nimport { isLocaleFormat, toDate } from './helpers';\nimport { getDefaultOptions } from './shared';\nimport {\n TRANSLOCO_LOCALE_CONFIG,\n TRANSLOCO_LOCALE_CURRENCY_MAPPING,\n TRANSLOCO_LOCALE_DEFAULT_CURRENCY,\n TRANSLOCO_LOCALE_DEFAULT_LOCALE,\n TRANSLOCO_LOCALE_LANG_MAPPING,\n} from './transloco-locale.config';\nimport {\n TRANSLOCO_DATE_TRANSFORMER,\n TRANSLOCO_NUMBER_TRANSFORMER,\n} from './transloco-locale.transformers';\nimport {\n DateFormatOptions,\n Locale,\n LocaleConfig,\n NumberStyles,\n ValidDate,\n} from './transloco-locale.types';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoLocaleService {\n private translocoService = inject(TranslocoService);\n private langLocaleMapping = inject(TRANSLOCO_LOCALE_LANG_MAPPING);\n private defaultLocale = inject(TRANSLOCO_LOCALE_DEFAULT_LOCALE);\n private defaultCurrency = inject(TRANSLOCO_LOCALE_DEFAULT_CURRENCY);\n private localeCurrencyMapping = inject(TRANSLOCO_LOCALE_CURRENCY_MAPPING);\n private numberTransformer = inject(TRANSLOCO_NUMBER_TRANSFORMER);\n private dateTransformer = inject(TRANSLOCO_DATE_TRANSFORMER);\n private localeConfig: LocaleConfig = inject(TRANSLOCO_LOCALE_CONFIG);\n private browserLocale = getBrowserCultureLang() || this.defaultLocale;\n\n private _locale = '';\n private locale = new BehaviorSubject<Locale>(this._locale);\n\n readonly localeChanges$ = this.locale.pipe(distinctUntilChanged());\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n // Complete subjects to release observers if users forget to unsubscribe manually.\n // This is important in server-side rendering.\n this.locale.complete();\n this.locale.unsubscribe();\n });\n\n // Initialize locale with fallback chain\n this.setLocale(this.initializeLocale());\n\n // Subscribe to language changes\n this.translocoService.langChanges$\n .pipe(\n map((lang) => this.toLocale(lang)),\n filter(Boolean),\n takeUntilDestroyed(),\n )\n .subscribe((locale: Locale) => this.setLocale(locale));\n }\n\n getDefaultLocale() {\n return this.defaultLocale;\n }\n\n getLocale() {\n return this._locale;\n }\n\n setLocale(locale: Locale) {\n if (!isLocaleFormat(locale)) {\n console.error(`${locale} isn't a valid locale format`);\n return;\n }\n\n this.locale.next(locale);\n this._locale = locale;\n }\n\n /**\n * Get the currency symbol for the currently set locale.\n */\n getCurrencySymbol(locale = this.getLocale()) {\n const currency = this.localeCurrencyMapping[locale];\n const numberFormat = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n\n const pivot = 0;\n\n return numberFormat\n .format(pivot)\n .split(pivot.toString())\n .map((element) => element.trim())\n .find((element) => !!element);\n }\n\n /**\n * Transform a date into the locale's date format.\n *\n * The date expression: a `Date` object, a number\n * (milliseconds since UTC epoch), or an ISO string (https://www.w3.org/TR/NOTE-datetime).\n *\n * @example\n *\n * localizeDate(new Date(2019, 9, 7, 12, 0, 0)) // 10/7/2019\n * localizeDate(date, 'en-US', { dateStyle: 'medium', timeStyle: 'medium' }) // Sep 10, 2019, 10:46:12 PM\n * localizeDate(date) 'en-US', { timeZone: 'UTC', timeStyle: 'full' } // 7:40:32 PM Coordinated Universal Time\n * localizeDate(1, 'en-US', { dateStyle: 'medium' }) // Jan 1, 1970\n * localizeDate('2019-02-08', 'en-US', { dateStyle: 'medium' }) // Feb 8, 2019\n */\n localizeDate(\n date: ValidDate,\n locale: Locale = this.getLocale(),\n options: DateFormatOptions = {},\n ): string {\n const resolved =\n options ?? getDefaultOptions(locale, 'date', this.localeConfig);\n\n return this.dateTransformer.transform(toDate(date), locale, resolved);\n }\n\n /**\n * Transform a number into the locale's number format according to the number type.\n *\n * localizeNumber(1234567890, 'decimal') // 1,234,567,890\n * localizeNumber(0.5, 'percent') // 50%\n * localizeNumber(1000, 'currency') // $1,000.00\n */\n localizeNumber(\n value: number | string,\n style: NumberStyles,\n locale: Locale = this.getLocale(),\n options?: Intl.NumberFormatOptions,\n ): string {\n let resolved =\n options ?? getDefaultOptions(locale, style, this.localeConfig);\n\n if (style === 'currency') {\n resolved = {\n ...resolved,\n currency: resolved.currency || this._resolveCurrencyCode(locale),\n };\n }\n\n return this.numberTransformer.transform(value, style, locale, resolved);\n }\n\n /**\n * @internal\n */\n _resolveCurrencyCode(locale: Locale = this.getLocale()) {\n return this.localeCurrencyMapping[locale] || this.defaultCurrency;\n }\n\n private toLocale(val: string | Locale): Locale {\n if (this.langLocaleMapping[val]) {\n return this.langLocaleMapping[val];\n }\n\n if (isLocaleFormat(val)) {\n return val;\n }\n\n return '';\n }\n\n /*\n * Get the browser's language and validate.\n * If the browser's language is not set, it will fall back to the active language from TranslocoService.\n * If active language from TranslocoService is not valid, it will fall back to the default locale.\n * If the default locale is not valid, it will return the default locale as a string\n */\n\n private initializeLocale(): Locale {\n const browserLocale = this.toLocale(this.browserLocale);\n if (browserLocale) return browserLocale;\n\n const activeLang = this.translocoService.getActiveLang();\n if (activeLang) {\n const locale = this.toLocale(activeLang);\n if (locale) return locale;\n }\n\n const defaultLocaleResolved = this.toLocale(this.defaultLocale);\n if (defaultLocaleResolved) return defaultLocaleResolved;\n\n return this.defaultLocale; // Fallback to a default locale\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injectable,\n OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { Locale } from '../../lib/transloco-locale.types';\nimport { TranslocoLocaleService } from '../transloco-locale.service';\n\n@Injectable()\nexport abstract class BaseLocalePipe implements OnDestroy {\n protected localeService = inject(TranslocoLocaleService);\n protected cdr = inject(ChangeDetectorRef);\n\n private localeChangeSub: Subscription | null =\n this.localeService.localeChanges$.subscribe(() => this.cdr.markForCheck());\n\n protected getLocale(locale?: Locale): Locale {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return locale || this.localeService.getLocale()!;\n }\n\n ngOnDestroy(): void {\n this.localeChangeSub?.unsubscribe();\n // Caretaker note: it's important to clean up references to subscriptions since they save the `next`\n // callback within its `destination` property, preventing classes from being GC'd.\n this.localeChangeSub = null;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from '@jsverse/utils';\n\nimport { getDefaultOptions } from '../shared';\nimport { TRANSLOCO_LOCALE_CONFIG } from '../transloco-locale.config';\nimport {\n Currency,\n Locale,\n LocaleConfig,\n NumberFormatOptions,\n} from '../transloco-locale.types';\n\nimport { BaseLocalePipe } from './base-locale.pipe';\n\n@Pipe({\n name: 'translocoCurrency',\n pure: false,\n standalone: true,\n})\nexport class TranslocoCurrencyPipe\n extends BaseLocalePipe\n implements PipeTransform\n{\n private localeConfig: LocaleConfig = inject(TRANSLOCO_LOCALE_CONFIG);\n\n /**\n * Transform a given number into the locale's currency format.\n *\n * @example\n *\n * 1000000 | translocoCurrency: 'symbol' : {} : USD // $1,000,000.00\n * 1000000 | translocoCurrency: 'name' : {} : USD // 1,000,000.00 US dollars\n * 1000000 | translocoCurrency: 'symbol' : {minimumFractionDigits: 0 } : USD // $1,000,000\n * 1000000 | translocoCurrency: 'symbol' : {minimumFractionDigits: 0 } : CAD // CA$1,000,000\n * 1000000 | translocoCurrency: 'narrowSymbol' : {minimumFractionDigits: 0 } : CAD // $1,000,000\n *\n */\n transform(\n value: number | string,\n display: 'code' | 'symbol' | 'narrowSymbol' | 'name' = 'symbol',\n numberFormatOptions: NumberFormatOptions = {},\n currencyCode?: Currency,\n locale?: Locale,\n ): string {\n if (isNil(value)) return '';\n locale = this.getLocale(locale);\n\n const options = {\n ...getDefaultOptions(locale, 'currency', this.localeConfig),\n ...numberFormatOptions,\n currencyDisplay: display,\n currency: currencyCode || this.localeService._resolveCurrencyCode(),\n };\n\n return this.localeService.localizeNumber(\n value,\n 'currency',\n locale,\n options,\n );\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from '@jsverse/utils';\n\nimport { getDefaultOptions } from '../shared';\nimport { TRANSLOCO_LOCALE_CONFIG } from '../transloco-locale.config';\nimport {\n DateFormatOptions,\n Locale,\n LocaleConfig,\n ValidDate,\n} from '../transloco-locale.types';\n\nimport { BaseLocalePipe } from './base-locale.pipe';\n\n@Pipe({\n name: 'translocoDate',\n pure: false,\n standalone: true,\n})\nexport class TranslocoDatePipe extends BaseLocalePipe implements PipeTransform {\n private localeConfig: LocaleConfig = inject(TRANSLOCO_LOCALE_CONFIG);\n\n /**\n * Transform a date into the locale's date format.\n *\n * The date expression: a `Date` object, a number\n * (milliseconds since UTC epoch), or an ISO string (https://www.w3.org/TR/NOTE-datetime).\n *\n * @example\n *\n * date | translocoDate: {} : en-US // 9/10/2019\n * date | translocoDate: { dateStyle: 'medium', timeStyle: 'medium' } : en-US // Sep 10, 2019, 10:46:12 PM\n * date | translocoDate: { timeZone: 'UTC', timeStyle: 'full' } : en-US // 7:40:32 PM Coordinated Universal Time\n * 1 | translocoDate: { dateStyle: 'medium' } // Jan 1, 1970\n * '2019-02-08' | translocoDate: { dateStyle: 'medium' } // Feb 8, 2019\n */\n transform(date: ValidDate, options: DateFormatOptions = {}, locale?: Locale) {\n if (isNil(date)) return '';\n locale = this.getLocale(locale);\n\n return this.localeService.localizeDate(date, locale, {\n ...getDefaultOptions(locale, 'date', this.localeConfig),\n ...options,\n });\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from '@jsverse/utils';\n\nimport { getDefaultOptions } from '../shared';\nimport { TRANSLOCO_LOCALE_CONFIG } from '../transloco-locale.config';\nimport {\n Locale,\n LocaleConfig,\n NumberFormatOptions,\n} from '../transloco-locale.types';\n\nimport { BaseLocalePipe } from './base-locale.pipe';\n\n@Pipe({\n name: 'translocoDecimal',\n pure: false,\n standalone: true,\n})\nexport class TranslocoDecimalPipe\n extends BaseLocalePipe\n implements PipeTransform\n{\n private localeConfig: LocaleConfig = inject(TRANSLOCO_LOCALE_CONFIG);\n\n /**\n * Transform a given number into the locale's currency format.\n *\n * @example\n *\n * 1234567890 | translocoDecimal: {} : en-US // 1,234,567,890\n * 1234567890 | translocoDecimal: {useGrouping: false}: en-US // 1234567890\n *\n */\n transform(\n value: string | number,\n numberFormatOptions: NumberFormatOptions = {},\n locale?: Locale,\n ): string {\n if (isNil(value)) return '';\n locale = this.getLocale(locale);\n\n const options = {\n ...getDefaultOptions(locale, 'decimal', this.localeConfig),\n ...numberFormatOptions,\n };\n\n return this.localeService.localizeNumber(value, 'decimal', locale, options);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from '@jsverse/utils';\n\nimport { getDefaultOptions } from '../shared';\nimport { TRANSLOCO_LOCALE_CONFIG } from '../transloco-locale.config';\nimport {\n Locale,\n LocaleConfig,\n NumberFormatOptions,\n} from '../transloco-locale.types';\n\nimport { BaseLocalePipe } from './base-locale.pipe';\n\n@Pipe({\n name: 'translocoPercent',\n pure: false,\n standalone: true,\n})\nexport class TranslocoPercentPipe\n extends BaseLocalePipe\n implements PipeTransform\n{\n private localeConfig: LocaleConfig = inject(TRANSLOCO_LOCALE_CONFIG);\n\n /**\n * Transform a given number into the locale's currency format.\n *\n * @example\n *\n * 1 | translocoPercent : {} : en-US // 100%\n * \"1\" | translocoPercent : {} : en-US // 100%\n *\n */\n transform(\n value: number | string,\n numberFormatOptions: NumberFormatOptions = {},\n locale?: Locale,\n ): string {\n if (isNil(value)) return '';\n locale = this.getLocale(locale);\n\n const options = {\n ...getDefaultOptions(locale, 'percent', this.localeConfig),\n ...numberFormatOptions,\n };\n\n return this.localeService.localizeNumber(value, 'percent', locale, options);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport {\n TranslocoCurrencyPipe,\n TranslocoDatePipe,\n TranslocoDecimalPipe,\n TranslocoPercentPipe,\n} from './pipes';\n\nconst decl = [\n TranslocoCurrencyPipe,\n TranslocoDatePipe,\n TranslocoDecimalPipe,\n TranslocoPercentPipe,\n];\n\n@NgModule({\n imports: decl,\n exports: decl,\n})\nexport class TranslocoLocaleModule {}\n","import { makeEnvironmentProviders, Type } from '@angular/core';\n\nimport {\n Currency,\n LangToLocaleMapping,\n Locale,\n LocaleConfig,\n LocaleToCurrencyMapping,\n TranslocoLocaleConfig,\n} from './transloco-locale.types';\nimport {\n defaultConfig,\n TRANSLOCO_LOCALE_CONFIG,\n TRANSLOCO_LOCALE_CURRENCY_MAPPING,\n TRANSLOCO_LOCALE_DEFAULT_CURRENCY,\n TRANSLOCO_LOCALE_DEFAULT_LOCALE,\n TRANSLOCO_LOCALE_LANG_MAPPING,\n} from './transloco-locale.config';\nimport {\n DefaultDateTransformer,\n DefaultNumberTransformer,\n TRANSLOCO_DATE_TRANSFORMER,\n TRANSLOCO_NUMBER_TRANSFORMER,\n TranslocoDateTransformer,\n TranslocoNumberTransformer,\n} from './transloco-locale.transformers';\n\nexport function provideTranslocoLocale(config?: TranslocoLocaleConfig) {\n const merged = {\n ...defaultConfig,\n ...config,\n };\n\n return [\n provideTranslocoLocaleConfig(merged.localeConfig),\n provideTranslocoDefaultLocale(merged.defaultLocale),\n provideTranslocoDefaultCurrency(merged.defaultCurrency),\n provideTranslocoLocaleLangMapping(merged.langToLocaleMapping),\n provideTranslocoLocaleCurrencyMapping(merged.localeToCurrencyMapping),\n provideTranslocoDateTransformer(DefaultDateTransformer),\n provideTranslocoNumberTransformer(DefaultNumberTransformer),\n ];\n}\n\nexport function provideTranslocoLocaleConfig(config: LocaleConfig) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_LOCALE_CONFIG,\n useValue: config,\n },\n ]);\n}\n\nexport function provideTranslocoLocaleLangMapping(\n langToLocale: LangToLocaleMapping,\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_LOCALE_LANG_MAPPING,\n useValue: langToLocale,\n },\n ]);\n}\n\nexport function provideTranslocoLocaleCurrencyMapping(\n localeToCurrency: LocaleToCurrencyMapping,\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_LOCALE_CURRENCY_MAPPING,\n useValue: localeToCurrency,\n },\n ]);\n}\n\nexport function provideTranslocoDefaultLocale(defaultLocale: Locale) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_LOCALE_DEFAULT_LOCALE,\n useValue: defaultLocale,\n },\n ]);\n}\n\nexport function provideTranslocoDefaultCurrency(defaultCurrency: Currency) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_LOCALE_DEFAULT_CURRENCY,\n useValue: defaultCurrency,\n },\n ]);\n}\n\nexport function provideTranslocoDateTransformer(\n transformer: Type<TranslocoDateTransformer>,\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_DATE_TRANSFORMER,\n useClass: transformer,\n },\n ]);\n}\n\nexport function provideTranslocoNumberTransformer(\n transformer: Type<TranslocoNumberTransformer>,\n) {\n return makeEnvironmentProviders([\n {\n provide: TRANSLOCO_NUMBER_TRANSFORMER,\n useClass: transformer,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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AK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,E