@acorex/core 19.12.0-next.2 → 19.12.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/date-time/index.d.ts +5 -5
  2. package/date-time/lib/calendar.service.d.ts +8 -3
  3. package/date-time/lib/dateTime.config.d.ts +1 -1
  4. package/date-time/lib/datetime.pipe.d.ts +2 -1
  5. package/date-time/lib/{datetime.class.d.ts → datetime.types.d.ts} +2 -2
  6. package/date-time/lib/formatters/date.formatter.d.ts +12 -0
  7. package/date-time/lib/formatters/{datetime-formatter.d.ts → datetime.formatter.d.ts} +3 -1
  8. package/date-time/lib/formatters/time.formatter.d.ts +12 -0
  9. package/date-time/lib/{georgian.calendar.d.ts → gregorian.calendar.d.ts} +2 -2
  10. package/date-time/lib/{jalali.calendar.d.ts → solar-hijri.calendar.d.ts} +8 -8
  11. package/events/index.d.ts +0 -1
  12. package/fesm2022/acorex-core-date-time.mjs +263 -100
  13. package/fesm2022/acorex-core-date-time.mjs.map +1 -1
  14. package/fesm2022/acorex-core-events.mjs +1 -7
  15. package/fesm2022/acorex-core-events.mjs.map +1 -1
  16. package/fesm2022/acorex-core-format.mjs +47 -33
  17. package/fesm2022/acorex-core-format.mjs.map +1 -1
  18. package/fesm2022/acorex-core-locale-en-AU.profile-BW-_9tgT.mjs +64 -0
  19. package/fesm2022/acorex-core-locale-en-AU.profile-BW-_9tgT.mjs.map +1 -0
  20. package/fesm2022/acorex-core-locale.mjs +341 -0
  21. package/fesm2022/acorex-core-locale.mjs.map +1 -0
  22. package/fesm2022/acorex-core-translation.mjs +12 -4
  23. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  24. package/format/index.d.ts +2 -2
  25. package/format/lib/format.directive.d.ts +1 -1
  26. package/format/lib/format.module.d.ts +3 -3
  27. package/locale/README.md +3 -0
  28. package/locale/index.d.ts +8 -0
  29. package/locale/lib/formatters/currency.formatter.d.ts +10 -0
  30. package/locale/lib/locale-profile-provider.service.d.ts +24 -0
  31. package/locale/lib/locale.config.d.ts +5 -0
  32. package/locale/lib/locale.module.d.ts +7 -0
  33. package/locale/lib/locale.service.d.ts +20 -0
  34. package/locale/lib/locale.types.d.ts +61 -0
  35. package/locale/lib/profiles/en-AU.profile.d.ts +2 -0
  36. package/locale/lib/profiles/en-US.profile.d.ts +2 -0
  37. package/locale/lib/profiles/fa-IR.profile.d.ts +2 -0
  38. package/package.json +5 -1
  39. package/translation/lib/translation.service.d.ts +1 -0
  40. package/types/README.md +2 -2
  41. package/events/lib/event.type.d.ts +0 -5
  42. package/i18n/en/common.json +0 -191
  43. package/i18n/fa/common.json +0 -190
  44. /package/date-time/lib/formatters/{time-duration-formatter.d.ts → time-duration.formatter.d.ts} +0 -0
  45. /package/date-time/lib/formatters/{timeleft-formatter.d.ts → timeleft.formatter.d.ts} +0 -0
  46. /package/format/lib/formatters/{number-formatter.d.ts → number.formatter.d.ts} +0 -0
  47. /package/format/lib/formatters/{string-formatter.d.ts → string.formatter.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-core-locale.mjs","sources":["../../../../libs/core/locale/src/lib/locale.config.ts","../../../../libs/core/locale/src/lib/locale-profile-provider.service.ts","../../../../libs/core/locale/src/lib/locale.types.ts","../../../../libs/core/locale/src/lib/profiles/en-US.profile.ts","../../../../libs/core/locale/src/lib/profiles/fa-IR.profile.ts","../../../../libs/core/locale/src/lib/locale.service.ts","../../../../libs/core/locale/src/lib/locale.module.ts","../../../../libs/core/locale/src/lib/formatters/currency.formatter.ts","../../../../libs/core/locale/src/acorex-core-locale.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\n\n\n\nexport interface AXLocaleConfig {\n default: string;\n}\n\n\n\nexport const AX_LOCALE_CONFIG = new InjectionToken<AXLocaleConfig>('AX_LOCALE_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return {\n default: 'en-US',\n };\n },\n});\n\n\n\n\n\n\n\n\n\n","import { inject, Injectable, InjectionToken } from \"@angular/core\";\nimport { AXLocaleProfile } from \"./locale.types\";\n\n// Record of locale code → loader function (returns profile or Promise<profile>)\nexport type AXLocaleProfileProviderResult = Record<string, () => Promise<AXLocaleProfile> | AXLocaleProfile>;\n\nexport interface AXLocaleProfileProvider {\n provide(): Promise<AXLocaleProfileProviderResult>;\n}\n\nexport const AX_LOCALE_PROFILE_PROVIDERS = new InjectionToken<AXLocaleProfileProvider[]>(\n 'AX_LOCALE_PROFILE_PROVIDERS',\n {\n providedIn: 'root',\n factory: () => [new AXLocaleProfileProviderDefault()],\n }\n);\n\n// ✅ Lazy-loaded default provider\nexport class AXLocaleProfileProviderDefault implements AXLocaleProfileProvider {\n async provide(): Promise<AXLocaleProfileProviderResult> {\n return {\n 'en-AU': () => import('./profiles/en-AU.profile').then(m => m.AXAURegionalConfig),\n 'en-US': () => import('./profiles/en-US.profile').then(m => m.AXUSLocaleProfile),\n 'fa-IR': () => import('./profiles/fa-IR.profile').then(m => m.AXIRLocaleProfile),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXLocaleProfileProviderService {\n private providers: AXLocaleProfileProvider[] = inject(AX_LOCALE_PROFILE_PROVIDERS);\n\n private registry = new Map<string, () => Promise<AXLocaleProfile>>();\n private resolvedCache = new Map<string, AXLocaleProfile>();\n private isInitialized = false;\n\n private async init(): Promise<void> {\n if (this.isInitialized) return;\n\n for (const provider of this.providers) {\n const result: AXLocaleProfileProviderResult = await provider.provide();\n\n for (const [localeCode, loaderFn] of Object.entries(result)) {\n if (typeof loaderFn === 'function') {\n this.registry.set(localeCode, async () => {\n const profile = await loaderFn();\n return profile;\n });\n } else {\n console.warn(`[AXLocaleService] Profile for \"${localeCode}\" is not a function. Skipped.`);\n }\n }\n }\n\n this.isInitialized = true;\n }\n\n public async getList(): Promise<AXLocaleProfile[]> {\n await this.init();\n\n const profiles: AXLocaleProfile[] = [];\n\n for (const localeCode of this.registry.keys()) {\n const profile = await this.getByLocale(localeCode);\n if (profile) profiles.push(profile);\n }\n\n return profiles;\n }\n\n public async getByLocale(localeCode: string): Promise<AXLocaleProfile | undefined> {\n await this.init();\n\n // If already loaded, return from cache\n if (this.resolvedCache.has(localeCode)) {\n return this.resolvedCache.get(localeCode);\n }\n\n // Otherwise, try to load it\n const loader = this.registry.get(localeCode);\n if (!loader) {\n console.warn(`[AXLocaleService] No profile loader found for locale: \"${localeCode}\"`);\n return undefined;\n }\n\n const profile = await loader();\n this.resolvedCache.set(localeCode, profile);\n return profile;\n }\n\n public async reload(): Promise<void> {\n this.registry.clear();\n this.resolvedCache.clear();\n this.isInitialized = false;\n await this.init();\n }\n\n public has(localeCode: string): boolean {\n return this.registry.has(localeCode);\n }\n}\n","export interface AXLocaleProfile {\n localeInfo: {\n code: string; // e.g., 'en-US'\n language: string; // e.g., 'en'\n region: string; // e.g., 'US'\n timezone: string; // e.g., 'America/New_York'\n };\n\n calendar: {\n system: 'gregorian' | 'solar-hijri' | string;\n week: {\n startsOn: number; // 0 = Sunday, 1 = Monday\n weekends: number[]; // e.g., [0, 6]\n };\n clock: {\n format24Hour: boolean;\n };\n };\n\n formats: {\n date: FormatPattern;\n time: FormatPattern;\n datetime: FormatPattern;\n numbers: {\n decimalPattern: string; // e.g., '1,000.00'\n currency: {\n code: string; // e.g., 'USD'\n };\n };\n contacts: {\n phone: string; // e.g., '000-000-0000'\n postalCode: string; // e.g., '00000'\n };\n };\n\n units?: {\n temperature: 'celsius' | 'fahrenheit';\n distance: 'kilometers' | 'miles';\n weight?: 'kilograms' | 'pounds';\n volume?: 'liters' | 'gallons';\n speed?: 'km/h' | 'mph';\n area?: 'square-meters' | 'square-feet';\n custom?: Record<string, string>; // Optional: supports domain-specific units\n };\n\n i18nMeta?: {\n fallbackLocales?: string[]; // e.g., ['en']\n supportedLanguages?: string[]; // e.g., ['en', 'fa']\n rtl?: boolean; // true for RTL languages like Arabic, Persian\n };\n}\ninterface FormatPattern {\n short: string;\n medium: string;\n long: string;\n full: string;\n}\n\n\n\nexport enum AXLocaleEvents {\n AXLocaleChanged = 'AX_LOCALE_CHANGED',\n AXLocaleLoaded = 'AX_LOCALE_LOADED',\n //\n AXCalendarChanged = 'AX_CALENDAR_CHANGED',\n //\n AXLanguageChanged = 'AX_LANGUAGE_CHANGED',\n AXLanguageLoaded = 'AX_LANGUAGE_LOADED',\n}\n\n","import { AXLocaleProfile } from \"../locale.types\";\n\nexport const AXUSLocaleProfile: AXLocaleProfile = {\n localeInfo: {\n code: 'en-US',\n language: 'en',\n region: 'US',\n timezone: 'America/New_York',\n },\n calendar: {\n system: 'gregorian',\n week: {\n startsOn: 0, // Sunday\n weekends: [0, 6], // Sunday + Saturday\n },\n clock: {\n format24Hour: false,\n },\n },\n formats: {\n date: {\n short: 'MM/DD/YY',\n medium: 'MMM DD, YYYY',\n long: 'MMMM DD, YYYY',\n full: 'dddd, MMMM DD, YYYY',\n },\n time: {\n short: 'hh:mm A',\n medium: 'hh:mm:ss A',\n long: 'hh:mm:ss A Z',\n full: 'hh:mm:ss A ZZZZ',\n },\n datetime: {\n short: 'MM/DD/YY hh:mm A',\n medium: 'MMM DD, YYYY hh:mm:ss A',\n long: 'MMMM DD, YYYY hh:mm:ss A Z',\n full: 'dddd, MMMM DD, YYYY hh:mm:ss A ZZZZ',\n },\n numbers: {\n decimalPattern: '1,000.00',\n currency: {\n code: 'USD',\n },\n },\n contacts: {\n phone: '(000) 000-0000',\n postalCode: '00000',\n },\n },\n units: {\n temperature: 'fahrenheit',\n distance: 'miles',\n weight: 'pounds',\n volume: 'gallons',\n speed: 'mph',\n area: 'square-feet',\n },\n i18nMeta: {\n rtl: false,\n fallbackLocales: ['en-US'],\n supportedLanguages: ['en-US'],\n },\n};\n","import { AXLocaleProfile } from \"../locale.types\";\n\nexport const AXIRLocaleProfile: AXLocaleProfile = {\n localeInfo: {\n code: 'fa-IR',\n language: 'fa',\n region: 'IR',\n timezone: 'Asia/Tehran',\n },\n calendar: {\n system: 'solar-hijri',\n week: {\n startsOn: 6, // Saturday\n weekends: [5], // Friday\n },\n clock: {\n format24Hour: true,\n },\n },\n formats: {\n date: {\n short: 'YY/MM/DD',\n medium: 'YYYY/MM/DD',\n long: 'dddd، D MMMM YYYY',\n full: 'dddd، D MMMM YYYY',\n },\n time: {\n short: 'HH:mm',\n medium: 'HH:mm:ss',\n long: 'HH:mm:ss Z',\n full: 'HH:mm:ss ZZZZ',\n },\n datetime: {\n short: 'YY/MM/DD HH:mm',\n medium: 'YYYY/MM/DD HH:mm:ss',\n long: 'dddd، D MMMM YYYY HH:mm:ss Z',\n full: 'dddd، D MMMM YYYY HH:mm:ss ZZZZ',\n },\n numbers: {\n decimalPattern: '1٬000٫00',\n currency: {\n code: 'IRR',\n },\n },\n contacts: {\n phone: '09XX XXX XXXX',\n postalCode: 'XXXXX-XXXXX',\n },\n },\n units: {\n temperature: 'celsius',\n distance: 'kilometers',\n weight: 'kilograms',\n volume: 'liters',\n speed: 'km/h',\n area: 'square-meters',\n },\n i18nMeta: {\n rtl: true,\n fallbackLocales: ['en-IR'],\n supportedLanguages: ['fa-IR', 'en-IR'],\n },\n};\n","import { Injectable, inject, signal } from '@angular/core';\nimport { AXLocaleProfile } from './locale.types';\nimport { AXLocaleProfileProviderService } from './locale-profile-provider.service';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport merge from 'lodash/merge';\nimport set from 'lodash/set';\nimport { AXUSLocaleProfile } from './profiles/en-US.profile';\nimport { AX_LOCALE_CONFIG } from './locale.config';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXLocaleService {\n private provider = inject(AXLocaleProfileProviderService);\n private config = inject(AX_LOCALE_CONFIG);\n\n\n private _activeProfile = signal<AXLocaleProfile>(AXUSLocaleProfile);\n public activeProfile = this._activeProfile.asReadonly();\n\n\n public profileChanged$ = toObservable(this._activeProfile);\n\n private originalProfile: AXLocaleProfile = cloneDeep(AXUSLocaleProfile);\n\n public async setProfile(localeCode: string): Promise<void> {\n const profile = await this.provider.getByLocale(localeCode);\n if (profile) {\n this.originalProfile = cloneDeep(profile);\n this._activeProfile.set(cloneDeep(profile));\n } else {\n console.warn(`[AXLocaleService] Locale not found: ${localeCode}`);\n }\n }\n\n /**\n *\n */\n constructor() {\n this.setProfile(this.config.default);\n }\n\n\n public apply(profile: Partial<AXLocaleProfile>): void;\n public apply(path: string, value: any): void;\n public apply(arg1: any, arg2?: any): void {\n const current = this.activeProfile();\n if (!current) {\n console.warn('[AXLocaleService] No active profile found');\n return;\n };\n\n const updated = cloneDeep(current);\n\n if (typeof arg1 === 'string' && arg2 !== undefined) {\n // Overload: updateProfile('formats.date.full', 'YYYY-MM-DD')\n set(updated, arg1, arg2);\n } else if (typeof arg1 === 'object') {\n // Overload: updateProfile({ formats: { date: { short: '...' } } })\n merge(updated, arg1);\n } else {\n console.warn('[AXLocaleService] Invalid arguments passed to updateProfile()');\n return;\n }\n\n }\n\n public reset(): void {\n if (this.originalProfile) {\n this._activeProfile.set(cloneDeep(this.originalProfile));\n }\n }\n}\n","import { AXFormatModule } from '@acorex/core/format';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n imports: [\n AXFormatModule.forChild({\n formatters: [],\n }),\n ],\n})\nexport class AXLocaleModule {\n\n}\n","import { Injectable } from '@angular/core';\nimport { AXFormatter } from '@acorex/core/format';\nimport { AXFormatOptions } from '@acorex/core/format';\n\nexport interface AXCurrencyFormatterOptions extends AXFormatOptions {\n locale?: string;\n currency?: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n currency: AXCurrencyFormatterOptions;\n }\n}\n\n// @Injectable()\n// export class AXCurrencyFormatter implements AXFormatter {\n\n// get name(): string {\n// return 'currency';\n// }\n\n// format(value: number, options: AXCurrencyFormatterOptions): string {\n// return value.toLocaleString(options.locale, { style: 'currency', currency: options.currency });\n// }\n// }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, Directive, Pipe, provideAppInitializer, NgModule } from '@angular/core';
3
- import { AXEventTypes, AXEventService } from '@acorex/core/events';
3
+ import { AXEventService } from '@acorex/core/events';
4
4
  import { set, get } from 'lodash-es';
5
5
  import { of, BehaviorSubject, forkJoin, tap, catchError, finalize, shareReplay, startWith, map, distinctUntilChanged, switchMap, firstValueFrom } from 'rxjs';
6
+ import { AXLocaleEvents, AXLocaleService } from '@acorex/core/locale';
6
7
 
7
8
  const AX_TRANSLATION_CONFIG = new InjectionToken('AX_TRANSLATION_CONFIG', {
8
9
  providedIn: 'root',
@@ -11,7 +12,7 @@ const AX_TRANSLATION_CONFIG = new InjectionToken('AX_TRANSLATION_CONFIG', {
11
12
  },
12
13
  });
13
14
  const AXTranslationDefaultConfig = {
14
- defaultLang: 'en',
15
+ defaultLang: 'en-US',
15
16
  defaultScope: 'common',
16
17
  scopeResolverKey: 'scope',
17
18
  };
@@ -50,7 +51,7 @@ class AXTranslationService {
50
51
  if (lang != this.getActiveLang()) {
51
52
  this.activeLang.next(lang);
52
53
  this.eventService.emitEvent({
53
- type: AXEventTypes.AXLanguageChanged,
54
+ type: AXLocaleEvents.AXLanguageChanged,
54
55
  payload: lang,
55
56
  });
56
57
  }
@@ -62,6 +63,7 @@ class AXTranslationService {
62
63
  this.loader = inject(AX_TRANSLATION_LOADER);
63
64
  this.config = inject(AX_TRANSLATION_CONFIG);
64
65
  this.eventService = inject(AXEventService);
66
+ this.localeService = inject(AXLocaleService);
65
67
  this.translationCache = {};
66
68
  this.ongoingRequests = new Map();
67
69
  this.activeLang = new BehaviorSubject(this.getDefaultLang());
@@ -69,6 +71,12 @@ class AXTranslationService {
69
71
  this.expressionCache = new Map();
70
72
  this.isExpression = (value) => value.includes('t(');
71
73
  singletonInstance = this;
74
+ //
75
+ this.localeService.profileChanged$.subscribe((locale) => {
76
+ if (locale?.localeInfo?.code) {
77
+ this.setActiveLang(locale.localeInfo.code);
78
+ }
79
+ });
72
80
  }
73
81
  loadLanguagesAndScopes(languages, scopes) {
74
82
  const requests = languages.flatMap((lang) => scopes.map((scope) => {
@@ -93,7 +101,7 @@ class AXTranslationService {
93
101
  return of(null);
94
102
  }), finalize(() => {
95
103
  this.eventService.emitEvent({
96
- type: AXEventTypes.AXLanguageLoaded,
104
+ type: AXLocaleEvents.AXLanguageLoaded,
97
105
  payload: lang,
98
106
  });
99
107
  this.ongoingRequests.delete(requestKey);
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../libs/core/translation/src/lib/translation.config.ts","../../../../libs/core/translation/src/lib/translation.loader.ts","../../../../libs/core/translation/src/lib/translation.service.ts","../../../../libs/core/translation/src/lib/translation-scope.resolver.ts","../../../../libs/core/translation/src/lib/translator.directive.ts","../../../../libs/core/translation/src/lib/translator.pipe.ts","../../../../libs/core/translation/src/lib/translation.module.ts","../../../../libs/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXTranslateLang, AXTranslateScope } from './translation.types';\n\nexport interface AXTranslationConfig {\n defaultLang: AXTranslateLang;\n defaultScope: AXTranslateScope;\n preloadLangs?: AXTranslateLang[];\n preloadScopes?: AXTranslateLang[];\n availableLangs?: AXTranslateLang[];\n scopeResolverKey: string;\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaultLang: 'en',\n defaultScope: 'common',\n scopeResolverKey: 'scope',\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang;\n scope?: AXTranslateScope;\n}\n\nexport interface AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});\n","import { AXEventService, AXEventTypes } from '@acorex/core/events';\nimport { Injectable, inject } from '@angular/core';\nimport { get as lodashGet, set as lodashSet } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n catchError,\n distinctUntilChanged,\n finalize,\n firstValueFrom,\n forkJoin,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { AXTranslateHashMap, AXTranslateOptions, AXTranslateParams } from './translation.types';\n\nlet singletonInstance: AXTranslationService;\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return singletonInstance.translateSync(key, options);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationService {\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n\n private eventService = inject(AXEventService);\n\n private translationCache: AXTranslateHashMap<AXTranslateHashMap<string>> = {};\n private ongoingRequests: Map<string, Observable<any>> = new Map();\n\n private activeLang: BehaviorSubject<string> = new BehaviorSubject<string>(this.getDefaultLang());\n langChanges$: Observable<string> = this.activeLang.asObservable();\n\n private expressionCache = new Map<\n string,\n { key: string; scope?: string; lang?: string; fullMatch: string }[]\n >();\n\n public getDefaultLang(): string {\n return this.config.defaultLang;\n }\n\n public getActiveLang(): string {\n return this.activeLang.getValue();\n }\n\n public setActiveLang(lang: string): void {\n if (lang != this.getActiveLang()) {\n this.activeLang.next(lang);\n this.eventService.emitEvent({\n type: AXEventTypes.AXLanguageChanged,\n payload: lang,\n });\n }\n }\n\n /**\n * @ignore\n */\n constructor() {\n singletonInstance = this;\n }\n\n public loadLanguagesAndScopes(languages: string[], scopes: string[]): Observable<unknown> {\n const requests = languages.flatMap((lang) =>\n scopes.map((scope) => {\n // Check if translations are already cached\n if (this.translationCache[lang]?.[scope]) {\n return of(this.translationCache[lang][scope]);\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.fetchTranslationFiles(lang, scope);\n }),\n );\n\n return forkJoin(requests);\n }\n\n private fetchTranslationFiles(lang: string, scope: string): Observable<AXTranslateHashMap<string>> {\n const requestKey = `${lang}_${scope}`;\n\n // Return existing observable if the request is already in progress\n if (this.ongoingRequests.has(requestKey)) {\n return this.ongoingRequests.get(requestKey);\n }\n\n // Load translations if not in cache or ongoing requests\n const translationObservable = this.loader.getTranslation({ lang, scope }).pipe(\n tap((translations) => this.setTranslationCache(lang, scope, translations)),\n catchError((error) => {\n this.handleError(`Error loading translations for lang: ${lang}, scope: ${scope}`, error);\n return of(null);\n }),\n finalize(() => {\n this.eventService.emitEvent({\n type: AXEventTypes.AXLanguageLoaded,\n payload: lang,\n });\n this.ongoingRequests.delete(requestKey);\n }),\n shareReplay(1),\n );\n\n this.ongoingRequests.set(requestKey, translationObservable);\n return translationObservable;\n }\n\n //#region Helpers Methods\n\n /**\n * Set translation data into cache\n */\n private setTranslationCache(lang: string, scope: string, translations: AXTranslateHashMap<string>): void {\n lodashSet(this.translationCache, `${lang}.${scope}`, translations);\n }\n\n /**\n * Get the translation from the cache or fallback to loading\n */\n private getTranslationFromCache(lang: string, scope: string, key: string): string {\n return lodashGet(this.translationCache, `${lang}.${scope}.${key}`, key) as string;\n }\n\n public isLangAvailable(lang: string, scope: string = null): boolean {\n return !this.translationCache[lang] && (!scope || !this.translationCache[lang][scope]);\n }\n\n private translateKey(key: string, lang: string, scope: string, params?: AXTranslateParams): string {\n // Trigger async preloading without blocking execution\n this.loadLanguagesAndScopes([lang], [scope]).pipe(startWith()).subscribe({\n error: (err) => {\n this.handleError(`Error preloading translations for ${lang}, ${scope}`, err)\n },\n });\n\n // Retrieve the translation from the cache or fallback to the key\n let translation: string = this.getTranslationFromCache(lang, scope, key);\n\n // Replace params like {{ name }}\n if (params && typeof translation === 'string') {\n Object.keys(params).forEach((paramKey) => {\n translation = translation.replace(\n new RegExp(`{{\\\\s*${paramKey}\\\\s*}}`, 'g'),\n params[paramKey] as string,\n );\n });\n }\n\n return translation || key;\n }\n\n private isExpression = (value: string) => value.includes('t(');\n\n private decodeExpression(\n expression: string,\n ): { key: string; scope?: string; lang?: string; fullMatch: string }[] {\n if (this.expressionCache.has(expression)) {\n return this.expressionCache.get(expression);\n }\n\n const regex = /t\\([\"']([^\"']+)[\"']\\s*(?:,\\s*(\\{.*?\\}))?\\)/g;\n const matches: { key: string; scope?: string; lang?: string; fullMatch: string }[] = [];\n let match;\n\n while ((match = regex.exec(expression)) !== null) {\n const key = match[1];\n const rawOptions = match[2];\n\n if (!rawOptions) {\n matches.push({ key, scope: null, lang: null, fullMatch: match[0] });\n continue;\n }\n\n try {\n const jsonString = rawOptions\n .replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?\\s*:/g, '\"$2\":') // Ensure keys are quoted\n .replace(/'/g, '\"'); // Replace single quotes with double quotes\n const options = JSON.parse(jsonString);\n\n matches.push({\n key,\n scope: options.scope || null,\n lang: options.lang || null,\n fullMatch: match[0],\n });\n } catch (error) {\n this.handleError(`Failed to parse options for key \"${key}\":`, error);\n matches.push({ key, scope: null, lang: null, fullMatch: match[0] });\n }\n }\n\n this.expressionCache.set(expression, matches);\n return matches;\n }\n\n private handleError(message: string, error: any): void {\n console.error(message, error);\n this.eventService.emitEvent({\n type: 'error',\n payload: { message, error },\n });\n }\n\n //#endregion\n\n //#region Async Translation Methods\n\n private translateText(\n text: string,\n contextLang: string,\n contextScope: string,\n params?: AXTranslateParams,\n ): Observable<string> {\n\n if (!this.isExpression(text)) {\n return this.loadLanguagesAndScopes([contextLang], [contextScope]).pipe(\n map(() => this.translateKey(text, contextLang, contextScope, params)),\n catchError((error) => {\n this.handleError(`Error during translation:`, error);\n return of(text); // Fallback to the original text\n })\n );\n }\n\n\n\n\n const matches = this.decodeExpression(text);\n\n // Extract unique languages and scopes for batch loading\n const langScopeSet = new Set(\n matches.map(({ lang, scope }) => `${lang || contextLang}_${scope || contextScope}`),\n );\n\n const langs = Array.from(new Set(Array.from(langScopeSet).map((pair) => pair.split('_')[0])));\n const scopes = Array.from(new Set(Array.from(langScopeSet).map((pair) => pair.split('_')[1])));\n\n // Load all required languages and scopes\n return this.loadLanguagesAndScopes(langs, scopes).pipe(\n map(() => {\n // Resolve translations after loading\n const translations = matches.reduce(\n (acc, { key, scope, lang, fullMatch }) => {\n const resolvedScope = scope || contextScope;\n const resolvedLang = lang || contextLang;\n\n acc[fullMatch] = this.translateKey(key, resolvedLang, resolvedScope, params);\n return acc;\n },\n {} as Record<string, string>,\n );\n\n // Replace all matches in the text with their resolved translations\n return matches.reduce(\n (result, { fullMatch }) =>\n result.replace(\n new RegExp(fullMatch.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'),\n translations[fullMatch],\n ),\n text,\n );\n }),\n catchError((error) => {\n this.handleError(`Error during translation:`, error);\n return of(text); // Fallback to the original text\n }),\n );\n }\n\n public translate$(text: string, options?: AXTranslateOptions): Observable<string> {\n if (options?.lang) {\n return this.translateText(\n text,\n options.lang,\n options?.scope ?? this.config.defaultScope,\n options?.params,\n );\n }\n return this.langChanges$.pipe(\n startWith(this.getActiveLang()),\n distinctUntilChanged(),\n switchMap((lang) => {\n return this.translateText(text, lang, options?.scope ?? this.config.defaultScope, options?.params);\n }),\n );\n }\n\n public async translateAsync(text: string, options?: AXTranslateOptions): Promise<string> {\n return firstValueFrom(this.translate$(text, options));\n }\n\n //#endregion\n\n //#region Sync Translation Methods\n\n public translateSync(text: string, options?: AXTranslateOptions) {\n if (this.isExpression(text)) {\n return this.translateTextSync(\n text,\n options?.lang ?? this.getActiveLang(),\n options?.scope ?? this.config.defaultScope,\n );\n } else {\n return this.translateKey(\n text,\n options?.lang ?? this.getActiveLang(),\n options?.scope ?? this.config.defaultScope,\n );\n }\n }\n\n private translateTextSync(\n text: string,\n contextLang: string,\n contextScope: string,\n params?: AXTranslateParams,\n ): string {\n const matches = this.decodeExpression(text);\n\n const translations = matches.reduce(\n (acc, { key, scope, lang, fullMatch }) => {\n const resolvedScope = scope || contextScope;\n const resolvedLang = lang || contextLang;\n\n // Cache translation to avoid redundant processing\n if (!acc[fullMatch]) {\n acc[fullMatch] = this.translateKey(key, resolvedLang, resolvedScope, params);\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n // Replace all matches in one go\n return matches.reduce(\n (result, { fullMatch }) => result.replace(fullMatch, translations[fullMatch]),\n text,\n );\n }\n\n //#endregion\n}\n","import { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translatorService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.scopeResolverKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translatorService.loadLanguagesAndScopes([translatorService.getActiveLang()], scopes);\n};\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Directive({ selector: '[translate]' })\nexport class AXTranslatorDirective implements OnInit {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private translationService: AXTranslationService,\n ) {}\n\n ngOnInit() {\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView(this.templateRef, {\n $implicit: (key: string, options?: AXTranslateOptions) => {\n return this.translationService.translate$(key, options);\n },\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Pipe({\n name: 'translate',\n pure: true,\n}) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n constructor(private service: AXTranslationService) {}\n\n transform(key: string, options?: AXTranslateOptions): Observable<string> {\n if (!key) {\n return of(''); // Return an empty observable if the key is not provided\n }\n return this.service.translate$(key, options);\n }\n}\n","import { NgModule, inject, provideAppInitializer } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AXTranslationConfig, AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslatorPipe } from './translator.pipe';\n\nfunction initializeApp(translatorService: AXTranslationService, config: AXTranslationConfig) {\n return (): Observable<any> => {\n return translatorService.loadLanguagesAndScopes(config.preloadLangs ?? [config.defaultLang], config.preloadScopes ?? [config.defaultScope]);\n };\n}\n\n@NgModule({\n imports: [AXTranslatorPipe, AXTranslatorDirective],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeApp(inject(AXTranslationService), inject(AX_TRANSLATION_CONFIG));\n return initializerFn();\n }),\n ],\n})\nexport class AXTranslationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["lodashSet","lodashGet","i1.AXTranslationService"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../libs/core/translation/src/lib/translation.config.ts","../../../../libs/core/translation/src/lib/translation.loader.ts","../../../../libs/core/translation/src/lib/translation.service.ts","../../../../libs/core/translation/src/lib/translation-scope.resolver.ts","../../../../libs/core/translation/src/lib/translator.directive.ts","../../../../libs/core/translation/src/lib/translator.pipe.ts","../../../../libs/core/translation/src/lib/translation.module.ts","../../../../libs/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXTranslateLang, AXTranslateScope } from './translation.types';\n\nexport interface AXTranslationConfig {\n defaultLang: AXTranslateLang;\n defaultScope: AXTranslateScope;\n preloadLangs?: AXTranslateLang[];\n preloadScopes?: AXTranslateLang[];\n availableLangs?: AXTranslateLang[];\n scopeResolverKey: string;\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaultLang: 'en-US',\n defaultScope: 'common',\n scopeResolverKey: 'scope',\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang;\n scope?: AXTranslateScope;\n}\n\nexport interface AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});\n","import { AXEventService } from '@acorex/core/events';\nimport { Injectable, inject } from '@angular/core';\nimport { get as lodashGet, set as lodashSet } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n catchError,\n distinctUntilChanged,\n finalize,\n firstValueFrom,\n forkJoin,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { AXTranslateHashMap, AXTranslateOptions, AXTranslateParams } from './translation.types';\nimport { AXLocaleEvents, AXLocaleService } from '@acorex/core/locale';\n\nlet singletonInstance: AXTranslationService;\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return singletonInstance.translateSync(key, options);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationService {\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n\n private eventService = inject(AXEventService);\n private localeService = inject(AXLocaleService);\n\n private translationCache: AXTranslateHashMap<AXTranslateHashMap<string>> = {};\n private ongoingRequests: Map<string, Observable<any>> = new Map();\n\n private activeLang: BehaviorSubject<string> = new BehaviorSubject<string>(this.getDefaultLang());\n langChanges$: Observable<string> = this.activeLang.asObservable();\n\n private expressionCache = new Map<\n string,\n { key: string; scope?: string; lang?: string; fullMatch: string }[]\n >();\n\n public getDefaultLang(): string {\n return this.config.defaultLang;\n }\n\n public getActiveLang(): string {\n return this.activeLang.getValue();\n }\n\n public setActiveLang(lang: string): void {\n if (lang != this.getActiveLang()) {\n this.activeLang.next(lang);\n this.eventService.emitEvent({\n type: AXLocaleEvents.AXLanguageChanged,\n payload: lang,\n });\n }\n }\n\n /**\n * @ignore\n */\n constructor() {\n singletonInstance = this;\n //\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.localeInfo?.code) {\n this.setActiveLang(locale.localeInfo.code);\n }\n });\n }\n\n public loadLanguagesAndScopes(languages: string[], scopes: string[]): Observable<unknown> {\n const requests = languages.flatMap((lang) =>\n scopes.map((scope) => {\n // Check if translations are already cached\n if (this.translationCache[lang]?.[scope]) {\n return of(this.translationCache[lang][scope]);\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.fetchTranslationFiles(lang, scope);\n }),\n );\n\n return forkJoin(requests);\n }\n\n private fetchTranslationFiles(lang: string, scope: string): Observable<AXTranslateHashMap<string>> {\n const requestKey = `${lang}_${scope}`;\n\n // Return existing observable if the request is already in progress\n if (this.ongoingRequests.has(requestKey)) {\n return this.ongoingRequests.get(requestKey);\n }\n\n // Load translations if not in cache or ongoing requests\n const translationObservable = this.loader.getTranslation({ lang, scope }).pipe(\n tap((translations) => this.setTranslationCache(lang, scope, translations)),\n catchError((error) => {\n this.handleError(`Error loading translations for lang: ${lang}, scope: ${scope}`, error);\n return of(null);\n }),\n finalize(() => {\n this.eventService.emitEvent({\n type: AXLocaleEvents.AXLanguageLoaded,\n payload: lang,\n });\n this.ongoingRequests.delete(requestKey);\n }),\n shareReplay(1),\n );\n\n this.ongoingRequests.set(requestKey, translationObservable);\n return translationObservable;\n }\n\n //#region Helpers Methods\n\n /**\n * Set translation data into cache\n */\n private setTranslationCache(lang: string, scope: string, translations: AXTranslateHashMap<string>): void {\n lodashSet(this.translationCache, `${lang}.${scope}`, translations);\n }\n\n /**\n * Get the translation from the cache or fallback to loading\n */\n private getTranslationFromCache(lang: string, scope: string, key: string): string {\n return lodashGet(this.translationCache, `${lang}.${scope}.${key}`, key) as string;\n }\n\n public isLangAvailable(lang: string, scope: string = null): boolean {\n return !this.translationCache[lang] && (!scope || !this.translationCache[lang][scope]);\n }\n\n private translateKey(key: string, lang: string, scope: string, params?: AXTranslateParams): string {\n // Trigger async preloading without blocking execution\n this.loadLanguagesAndScopes([lang], [scope]).pipe(startWith()).subscribe({\n error: (err) => {\n this.handleError(`Error preloading translations for ${lang}, ${scope}`, err)\n },\n });\n\n // Retrieve the translation from the cache or fallback to the key\n let translation: string = this.getTranslationFromCache(lang, scope, key);\n\n // Replace params like {{ name }}\n if (params && typeof translation === 'string') {\n Object.keys(params).forEach((paramKey) => {\n translation = translation.replace(\n new RegExp(`{{\\\\s*${paramKey}\\\\s*}}`, 'g'),\n params[paramKey] as string,\n );\n });\n }\n\n return translation || key;\n }\n\n private isExpression = (value: string) => value.includes('t(');\n\n private decodeExpression(\n expression: string,\n ): { key: string; scope?: string; lang?: string; fullMatch: string }[] {\n if (this.expressionCache.has(expression)) {\n return this.expressionCache.get(expression);\n }\n\n const regex = /t\\([\"']([^\"']+)[\"']\\s*(?:,\\s*(\\{.*?\\}))?\\)/g;\n const matches: { key: string; scope?: string; lang?: string; fullMatch: string }[] = [];\n let match;\n\n while ((match = regex.exec(expression)) !== null) {\n const key = match[1];\n const rawOptions = match[2];\n\n if (!rawOptions) {\n matches.push({ key, scope: null, lang: null, fullMatch: match[0] });\n continue;\n }\n\n try {\n const jsonString = rawOptions\n .replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?\\s*:/g, '\"$2\":') // Ensure keys are quoted\n .replace(/'/g, '\"'); // Replace single quotes with double quotes\n const options = JSON.parse(jsonString);\n\n matches.push({\n key,\n scope: options.scope || null,\n lang: options.lang || null,\n fullMatch: match[0],\n });\n } catch (error) {\n this.handleError(`Failed to parse options for key \"${key}\":`, error);\n matches.push({ key, scope: null, lang: null, fullMatch: match[0] });\n }\n }\n\n this.expressionCache.set(expression, matches);\n return matches;\n }\n\n private handleError(message: string, error: any): void {\n console.error(message, error);\n this.eventService.emitEvent({\n type: 'error',\n payload: { message, error },\n });\n }\n\n //#endregion\n\n //#region Async Translation Methods\n\n private translateText(\n text: string,\n contextLang: string,\n contextScope: string,\n params?: AXTranslateParams,\n ): Observable<string> {\n\n if (!this.isExpression(text)) {\n return this.loadLanguagesAndScopes([contextLang], [contextScope]).pipe(\n map(() => this.translateKey(text, contextLang, contextScope, params)),\n catchError((error) => {\n this.handleError(`Error during translation:`, error);\n return of(text); // Fallback to the original text\n })\n );\n }\n\n\n\n\n const matches = this.decodeExpression(text);\n\n // Extract unique languages and scopes for batch loading\n const langScopeSet = new Set(\n matches.map(({ lang, scope }) => `${lang || contextLang}_${scope || contextScope}`),\n );\n\n const langs = Array.from(new Set(Array.from(langScopeSet).map((pair) => pair.split('_')[0])));\n const scopes = Array.from(new Set(Array.from(langScopeSet).map((pair) => pair.split('_')[1])));\n\n // Load all required languages and scopes\n return this.loadLanguagesAndScopes(langs, scopes).pipe(\n map(() => {\n // Resolve translations after loading\n const translations = matches.reduce(\n (acc, { key, scope, lang, fullMatch }) => {\n const resolvedScope = scope || contextScope;\n const resolvedLang = lang || contextLang;\n\n acc[fullMatch] = this.translateKey(key, resolvedLang, resolvedScope, params);\n return acc;\n },\n {} as Record<string, string>,\n );\n\n // Replace all matches in the text with their resolved translations\n return matches.reduce(\n (result, { fullMatch }) =>\n result.replace(\n new RegExp(fullMatch.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'),\n translations[fullMatch],\n ),\n text,\n );\n }),\n catchError((error) => {\n this.handleError(`Error during translation:`, error);\n return of(text); // Fallback to the original text\n }),\n );\n }\n\n public translate$(text: string, options?: AXTranslateOptions): Observable<string> {\n if (options?.lang) {\n return this.translateText(\n text,\n options.lang,\n options?.scope ?? this.config.defaultScope,\n options?.params,\n );\n }\n return this.langChanges$.pipe(\n startWith(this.getActiveLang()),\n distinctUntilChanged(),\n switchMap((lang) => {\n return this.translateText(text, lang, options?.scope ?? this.config.defaultScope, options?.params);\n }),\n );\n }\n\n public async translateAsync(text: string, options?: AXTranslateOptions): Promise<string> {\n return firstValueFrom(this.translate$(text, options));\n }\n\n //#endregion\n\n //#region Sync Translation Methods\n\n public translateSync(text: string, options?: AXTranslateOptions) {\n if (this.isExpression(text)) {\n return this.translateTextSync(\n text,\n options?.lang ?? this.getActiveLang(),\n options?.scope ?? this.config.defaultScope,\n );\n } else {\n return this.translateKey(\n text,\n options?.lang ?? this.getActiveLang(),\n options?.scope ?? this.config.defaultScope,\n );\n }\n }\n\n private translateTextSync(\n text: string,\n contextLang: string,\n contextScope: string,\n params?: AXTranslateParams,\n ): string {\n const matches = this.decodeExpression(text);\n\n const translations = matches.reduce(\n (acc, { key, scope, lang, fullMatch }) => {\n const resolvedScope = scope || contextScope;\n const resolvedLang = lang || contextLang;\n\n // Cache translation to avoid redundant processing\n if (!acc[fullMatch]) {\n acc[fullMatch] = this.translateKey(key, resolvedLang, resolvedScope, params);\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n // Replace all matches in one go\n return matches.reduce(\n (result, { fullMatch }) => result.replace(fullMatch, translations[fullMatch]),\n text,\n );\n }\n\n //#endregion\n}\n","import { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translatorService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.scopeResolverKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translatorService.loadLanguagesAndScopes([translatorService.getActiveLang()], scopes);\n};\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Directive({ selector: '[translate]' })\nexport class AXTranslatorDirective implements OnInit {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private translationService: AXTranslationService,\n ) {}\n\n ngOnInit() {\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView(this.templateRef, {\n $implicit: (key: string, options?: AXTranslateOptions) => {\n return this.translationService.translate$(key, options);\n },\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Pipe({\n name: 'translate',\n pure: true,\n}) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n constructor(private service: AXTranslationService) {}\n\n transform(key: string, options?: AXTranslateOptions): Observable<string> {\n if (!key) {\n return of(''); // Return an empty observable if the key is not provided\n }\n return this.service.translate$(key, options);\n }\n}\n","import { NgModule, inject, provideAppInitializer } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AXTranslationConfig, AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslatorPipe } from './translator.pipe';\n\nfunction initializeApp(translatorService: AXTranslationService, config: AXTranslationConfig) {\n return (): Observable<any> => {\n return translatorService.loadLanguagesAndScopes(config.preloadLangs ?? [config.defaultLang], config.preloadScopes ?? [config.defaultScope]);\n };\n}\n\n@NgModule({\n imports: [AXTranslatorPipe, AXTranslatorDirective],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeApp(inject(AXTranslationService), inject(AX_TRANSLATION_CONFIG));\n return initializerFn();\n }),\n ],\n})\nexport class AXTranslationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["lodashSet","lodashGet","i1.AXTranslationService"],"mappings":"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"}
package/format/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export * from './lib/format.pipe';
4
4
  export * from './lib/format.service';
5
5
  export * from './lib/format.directive';
6
6
  export * from './lib/format.types';
7
- export * from './lib/formatters/number-formatter';
8
- export * from './lib/formatters/string-formatter';
7
+ export * from './lib/formatters/number.formatter';
8
+ export * from './lib/formatters/string.formatter';
@@ -8,5 +8,5 @@ export declare class AXFormatterDirective implements OnInit {
8
8
  constructor(templateRef: TemplateRef<any>, viewContainer: ViewContainerRef, formatService: AXFormatService);
9
9
  ngOnInit(): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<AXFormatterDirective, never>;
11
- static ɵdir: i0.ɵɵDirectiveDeclaration<AXFormatterDirective, "[format]", never, {}, {}, never, never, true, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AXFormatterDirective, "[formatter]", never, {}, {}, never, never, true, never>;
12
12
  }
@@ -1,8 +1,8 @@
1
1
  import { ModuleWithProviders } from '@angular/core';
2
2
  import { AXFormatter } from './format.config';
3
3
  import * as i0 from "@angular/core";
4
- import * as i1 from "./format.pipe";
5
- import * as i2 from "./format.directive";
4
+ import * as i1 from "./format.directive";
5
+ import * as i2 from "./format.pipe";
6
6
  export interface AXFormatModuleConfigs {
7
7
  formatters: (new () => AXFormatter)[];
8
8
  }
@@ -14,6 +14,6 @@ export declare class AXFormatModule {
14
14
  */
15
15
  constructor(instances: any[]);
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<AXFormatModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXFormatModule, never, [typeof i1.AXFormatPipe, typeof i2.AXFormatterDirective], [typeof i1.AXFormatPipe, typeof i2.AXFormatterDirective]>;
17
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXFormatModule, never, [typeof i1.AXFormatterDirective, typeof i2.AXFormatPipe], [typeof i1.AXFormatterDirective, typeof i2.AXFormatPipe]>;
18
18
  static ɵinj: i0.ɵɵInjectorDeclaration<AXFormatModule>;
19
19
  }
@@ -0,0 +1,3 @@
1
+ # @acorex/core/locale
2
+
3
+ Secondary entry point of `@acorex/core`. It can be used by importing from `@acorex/core/locale`.
@@ -0,0 +1,8 @@
1
+ export * from './lib/locale.config';
2
+ export * from './lib/locale-profile-provider.service';
3
+ export * from './lib/locale.types';
4
+ export * from './lib/profiles/en-US.profile';
5
+ export * from './lib/profiles/fa-IR.profile';
6
+ export * from './lib/locale.service';
7
+ export * from './lib/locale.module';
8
+ export * from './lib/formatters/currency.formatter';
@@ -0,0 +1,10 @@
1
+ import { AXFormatOptions } from '@acorex/core/format';
2
+ export interface AXCurrencyFormatterOptions extends AXFormatOptions {
3
+ locale?: string;
4
+ currency?: string;
5
+ }
6
+ declare module '@acorex/core/format' {
7
+ interface AXFormatOptionsMap {
8
+ currency: AXCurrencyFormatterOptions;
9
+ }
10
+ }
@@ -0,0 +1,24 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ import { AXLocaleProfile } from "./locale.types";
3
+ import * as i0 from "@angular/core";
4
+ export type AXLocaleProfileProviderResult = Record<string, () => Promise<AXLocaleProfile> | AXLocaleProfile>;
5
+ export interface AXLocaleProfileProvider {
6
+ provide(): Promise<AXLocaleProfileProviderResult>;
7
+ }
8
+ export declare const AX_LOCALE_PROFILE_PROVIDERS: InjectionToken<AXLocaleProfileProvider[]>;
9
+ export declare class AXLocaleProfileProviderDefault implements AXLocaleProfileProvider {
10
+ provide(): Promise<AXLocaleProfileProviderResult>;
11
+ }
12
+ export declare class AXLocaleProfileProviderService {
13
+ private providers;
14
+ private registry;
15
+ private resolvedCache;
16
+ private isInitialized;
17
+ private init;
18
+ getList(): Promise<AXLocaleProfile[]>;
19
+ getByLocale(localeCode: string): Promise<AXLocaleProfile | undefined>;
20
+ reload(): Promise<void>;
21
+ has(localeCode: string): boolean;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXLocaleProfileProviderService, never>;
23
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXLocaleProfileProviderService>;
24
+ }
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export interface AXLocaleConfig {
3
+ default: string;
4
+ }
5
+ export declare const AX_LOCALE_CONFIG: InjectionToken<AXLocaleConfig>;
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@acorex/core/format";
3
+ export declare class AXLocaleModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXLocaleModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXLocaleModule, never, [typeof i1.AXFormatModule], never>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<AXLocaleModule>;
7
+ }
@@ -0,0 +1,20 @@
1
+ import { AXLocaleProfile } from './locale.types';
2
+ import * as i0 from "@angular/core";
3
+ export declare class AXLocaleService {
4
+ private provider;
5
+ private config;
6
+ private _activeProfile;
7
+ activeProfile: import("@angular/core").Signal<AXLocaleProfile>;
8
+ profileChanged$: import("rxjs").Observable<AXLocaleProfile>;
9
+ private originalProfile;
10
+ setProfile(localeCode: string): Promise<void>;
11
+ /**
12
+ *
13
+ */
14
+ constructor();
15
+ apply(profile: Partial<AXLocaleProfile>): void;
16
+ apply(path: string, value: any): void;
17
+ reset(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXLocaleService, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXLocaleService>;
20
+ }
@@ -0,0 +1,61 @@
1
+ export interface AXLocaleProfile {
2
+ localeInfo: {
3
+ code: string;
4
+ language: string;
5
+ region: string;
6
+ timezone: string;
7
+ };
8
+ calendar: {
9
+ system: 'gregorian' | 'solar-hijri' | string;
10
+ week: {
11
+ startsOn: number;
12
+ weekends: number[];
13
+ };
14
+ clock: {
15
+ format24Hour: boolean;
16
+ };
17
+ };
18
+ formats: {
19
+ date: FormatPattern;
20
+ time: FormatPattern;
21
+ datetime: FormatPattern;
22
+ numbers: {
23
+ decimalPattern: string;
24
+ currency: {
25
+ code: string;
26
+ };
27
+ };
28
+ contacts: {
29
+ phone: string;
30
+ postalCode: string;
31
+ };
32
+ };
33
+ units?: {
34
+ temperature: 'celsius' | 'fahrenheit';
35
+ distance: 'kilometers' | 'miles';
36
+ weight?: 'kilograms' | 'pounds';
37
+ volume?: 'liters' | 'gallons';
38
+ speed?: 'km/h' | 'mph';
39
+ area?: 'square-meters' | 'square-feet';
40
+ custom?: Record<string, string>;
41
+ };
42
+ i18nMeta?: {
43
+ fallbackLocales?: string[];
44
+ supportedLanguages?: string[];
45
+ rtl?: boolean;
46
+ };
47
+ }
48
+ interface FormatPattern {
49
+ short: string;
50
+ medium: string;
51
+ long: string;
52
+ full: string;
53
+ }
54
+ export declare enum AXLocaleEvents {
55
+ AXLocaleChanged = "AX_LOCALE_CHANGED",
56
+ AXLocaleLoaded = "AX_LOCALE_LOADED",
57
+ AXCalendarChanged = "AX_CALENDAR_CHANGED",
58
+ AXLanguageChanged = "AX_LANGUAGE_CHANGED",
59
+ AXLanguageLoaded = "AX_LANGUAGE_LOADED"
60
+ }
61
+ export {};
@@ -0,0 +1,2 @@
1
+ import { AXLocaleProfile } from "../locale.types";
2
+ export declare const AXAURegionalConfig: AXLocaleProfile;
@@ -0,0 +1,2 @@
1
+ import { AXLocaleProfile } from "../locale.types";
2
+ export declare const AXUSLocaleProfile: AXLocaleProfile;
@@ -0,0 +1,2 @@
1
+ import { AXLocaleProfile } from "../locale.types";
2
+ export declare const AXIRLocaleProfile: AXLocaleProfile;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/core",
3
- "version": "19.12.0-next.2",
3
+ "version": "19.12.0-next.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=19.0.0",
6
6
  "@angular/core": ">=19.0.0",
@@ -56,6 +56,10 @@
56
56
  "types": "./image/index.d.ts",
57
57
  "default": "./fesm2022/acorex-core-image.mjs"
58
58
  },
59
+ "./locale": {
60
+ "types": "./locale/index.d.ts",
61
+ "default": "./fesm2022/acorex-core-locale.mjs"
62
+ },
59
63
  "./memoize": {
60
64
  "types": "./memoize/index.d.ts",
61
65
  "default": "./fesm2022/acorex-core-memoize.mjs"
@@ -6,6 +6,7 @@ export declare class AXTranslationService {
6
6
  private loader;
7
7
  private config;
8
8
  private eventService;
9
+ private localeService;
9
10
  private translationCache;
10
11
  private ongoingRequests;
11
12
  private activeLang;
package/types/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # @acorex/core/types
1
+ # @acorex/core/translation
2
2
 
3
- Secondary entry point of `@acorex/core`. It can be used by importing from `@acorex/core/types`.
3
+ Secondary entry point of `@acorex/core`. It can be used by importing from `@acorex/core/translation`.
@@ -1,5 +0,0 @@
1
- export declare const AXEventTypes: {
2
- AXLanguageChanged: string;
3
- AXLanguageLoaded: string;
4
- AXCalendarChanged: string;
5
- };