@o3r/localization 9.6.0-alpha.40 → 9.6.0-alpha.42

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.
@@ -1,5 +1,6 @@
1
- import type { ConnectContentMessage, DevtoolsCommonOptions, MessageDataTypes, OtterMessageContent, RequestMessagesContentMessage } from '@o3r/core';
2
- export interface LocalizationDevtoolsServiceOptions extends DevtoolsCommonOptions {
1
+ import type { ConnectContentMessage, ContextualizationDevtoolsCommonOptions, DevtoolsCommonOptions, MessageDataTypes, OtterMessageContent, RequestMessagesContentMessage } from '@o3r/core';
2
+ import { Subscription } from 'rxjs';
3
+ export interface LocalizationDevtoolsServiceOptions extends DevtoolsCommonOptions, ContextualizationDevtoolsCommonOptions {
3
4
  }
4
5
  /** Display localization key message content */
5
6
  export interface DisplayLocalizationKeysContentMessage extends OtterMessageContent<'displayLocalizationKeys'> {
@@ -11,5 +12,47 @@ type LocalizationMessageContents = DisplayLocalizationKeysContentMessage;
11
12
  type LocalizationMessageDataTypes = MessageDataTypes<LocalizationMessageContents>;
12
13
  /** List of all messages for Localization purpose */
13
14
  export type AvailableLocalizationMessageContents = LocalizationMessageContents | ConnectContentMessage | RequestMessagesContentMessage<LocalizationMessageDataTypes>;
15
+ /**
16
+ * Contextualization devtools exposed for localization in CMS integration
17
+ */
18
+ export interface LocalizationContextualizationDevtools {
19
+ /**
20
+ * Show localization keys
21
+ * @param value value enforced by the DevTools extension
22
+ */
23
+ showLocalizationKeys: (value?: boolean) => void | Promise<void>;
24
+ /**
25
+ * Returns the current language
26
+ */
27
+ getCurrentLanguage: () => string | Promise<string>;
28
+ /**
29
+ * Switch the current language to the specified value
30
+ * @param language new language to switch to
31
+ */
32
+ switchLanguage: (language: string) => Promise<{
33
+ previous: string;
34
+ requested: string;
35
+ current: string;
36
+ }>;
37
+ /**
38
+ * Setup a listener on language change
39
+ * @param fn called when the language is changed in the app
40
+ */
41
+ onLanguageChange: (fn: (language: string) => any) => Subscription;
42
+ /**
43
+ * Updates the specified localization key/values for the current language
44
+ * @param keyValues key/values to update
45
+ * @param language if not provided, the current language value
46
+ */
47
+ updateLocalizationKeys: (keyValues: {
48
+ [key: string]: string;
49
+ }, language?: string) => void | Promise<void>;
50
+ /**
51
+ * Reload a language from the language file
52
+ * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490
53
+ * @param language language to reload
54
+ */
55
+ reloadLocalizationKeys: (language?: string) => Promise<void>;
56
+ }
14
57
  export {};
15
58
  //# sourceMappingURL=localization-devkit.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localization-devkit.interface.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devkit.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAEpJ,MAAM,WAAW,kCAAmC,SAAQ,qBAAqB;CAChF;AAED,+CAA+C;AAC/C,MAAM,WAAW,qCAAsC,SAAQ,mBAAmB,CAAC,yBAAyB,CAAC;IAC3G,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,2BAA2B,GAC5B,qCAAqC,CAAC;AAE1C,2DAA2D;AAC3D,KAAK,4BAA4B,GAAG,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;AAElF,oDAAoD;AACpD,MAAM,MAAM,oCAAoC,GAC5C,2BAA2B,GAC3B,qBAAqB,GACrB,6BAA6B,CAAC,4BAA4B,CAAC,CAAC"}
1
+ {"version":3,"file":"localization-devkit.interface.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devkit.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,sCAAsC,EACtC,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,EAC9B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,WAAW,kCAAmC,SAAQ,qBAAqB,EAAE,sCAAsC;CACxH;AAED,+CAA+C;AAC/C,MAAM,WAAW,qCAAsC,SAAQ,mBAAmB,CAAC,yBAAyB,CAAC;IAC3G,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,2BAA2B,GAC5B,qCAAqC,CAAC;AAE1C,2DAA2D;AAC3D,KAAK,4BAA4B,GAAG,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;AAElF,oDAAoD;AACpD,MAAM,MAAM,oCAAoC,GAC5C,2BAA2B,GAC3B,qBAAqB,GACrB,6BAA6B,CAAC,4BAA4B,CAAC,CAAC;AAGhE;;GAEG;AACH,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,kBAAkB,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnD;;;OAGG;IACH,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAExG;;;OAGG;IACH,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,KAAK,YAAY,CAAC;IAElE;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1G;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D"}
@@ -1,22 +1,51 @@
1
+ import { ApplicationRef } from '@angular/core';
1
2
  import type { DevtoolsServiceInterface } from '@o3r/core';
2
- import { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';
3
+ import { Subscription } from 'rxjs';
4
+ import { LocalizationService } from '../tools';
5
+ import { LocalizationContextualizationDevtools, LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';
3
6
  import { OtterLocalizationDevtools } from './localization-devtools.service';
4
7
  import * as i0 from "@angular/core";
5
- export declare class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface {
8
+ export declare class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {
6
9
  private readonly localizationDevtools;
10
+ private readonly localizationService;
11
+ private readonly appRef;
7
12
  private options;
8
13
  /** Name of the Window property to access to the devtools */
9
14
  static readonly windowModuleName = "localization";
10
- constructor(localizationDevtools: OtterLocalizationDevtools, options?: LocalizationDevtoolsServiceOptions);
15
+ constructor(localizationDevtools: OtterLocalizationDevtools, localizationService: LocalizationService, appRef: ApplicationRef, options?: LocalizationDevtoolsServiceOptions);
11
16
  /** @inheritDoc */
12
17
  activate(): void;
13
18
  /**
14
- * Show localization keys
15
- *
16
- * @param value value enforced by the DevTools extension
19
+ * @inheritdoc
17
20
  */
18
- showLocalizationKeys(value?: boolean): void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationDevtoolsConsoleService, [null, { optional: true; }]>;
21
+ showLocalizationKeys(value?: boolean): void | Promise<void>;
22
+ /**
23
+ * @inheritdoc
24
+ */
25
+ getCurrentLanguage(): string | Promise<string>;
26
+ /**
27
+ * @inheritdoc
28
+ */
29
+ switchLanguage(language: string): Promise<{
30
+ previous: string;
31
+ requested: string;
32
+ current: string;
33
+ }>;
34
+ /**
35
+ * @inheritdoc
36
+ */
37
+ onLanguageChange(fn: (language: string) => any): Subscription;
38
+ /**
39
+ * @inheritdoc
40
+ */
41
+ updateLocalizationKeys(keyValues: {
42
+ [key: string]: string;
43
+ }, language?: string): void | Promise<void>;
44
+ /**
45
+ * @inheritdoc
46
+ */
47
+ reloadLocalizationKeys(language?: string): Promise<void>;
48
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationDevtoolsConsoleService, [null, null, null, { optional: true; }]>;
20
49
  static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationDevtoolsConsoleService>;
21
50
  }
22
51
  //# sourceMappingURL=localization-devtools.console.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localization-devtools.console.service.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.console.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAsB,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;;AAG5E,qBACa,kCAAmC,YAAW,wBAAwB;IAM/E,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACoB,OAAO,CAAC,OAAO;IAL1E,4DAA4D;IAC5D,gBAAuB,gBAAgB,kBAAkB;gBAGtC,oBAAoB,EAAE,yBAAyB,EACC,OAAO,GAAE,kCAAgF;IAO5J,kBAAkB;IACX,QAAQ;IAUf;;;;OAIG;IACI,oBAAoB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;yCA9BvC,kCAAkC;6CAAlC,kCAAkC;CAiC9C"}
1
+ {"version":3,"file":"localization-devtools.console.service.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.console.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAgC,MAAM,eAAe,CAAC;AAC7E,OAAO,KAAK,EAA4B,wBAAwB,EAAsB,MAAM,WAAW,CAAC;AACxG,OAAO,EAAiB,YAAY,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,qCAAqC,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AAC5H,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;;AAG5E,qBACa,kCAAmC,YAAW,wBAAwB,EAAE,qCAAqC;IAMtH,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACkC,OAAO,CAAC,OAAO;IAP1E,4DAA4D;IAC5D,gBAAuB,gBAAgB,kBAAkB;gBAGtC,oBAAoB,EAAE,yBAAyB,EAC/C,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,cAAc,EAC0B,OAAO,GAAE,kCAAgF;IAa5J,kBAAkB;IACX,QAAQ;IAUf;;OAEG;IACI,oBAAoB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;OAEG;IACI,kBAAkB,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhH;;OAEG;IACI,gBAAgB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,GAAG,YAAY;IAIpE;;OAEG;IACI,sBAAsB,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5G;;OAEG;IACU,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM;yCApF1C,kCAAkC;6CAAlC,kCAAkC;CA8F9C"}
@@ -1,3 +1,4 @@
1
+ import { Subscription } from 'rxjs';
1
2
  import { LocalizationService } from '../tools';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class OtterLocalizationDevtools {
@@ -9,6 +10,15 @@ export declare class OtterLocalizationDevtools {
9
10
  * @param value value enforced by the DevTools extension
10
11
  */
11
12
  showLocalizationKeys(value?: boolean): void;
13
+ /**
14
+ * Returns the current language
15
+ */
16
+ getCurrentLanguage(): string;
17
+ /**
18
+ * Setup a listener on language change
19
+ * @param fn called when the language is changed in the app
20
+ */
21
+ onLanguageChange(fn: (language: string) => any): Subscription;
12
22
  static ɵfac: i0.ɵɵFactoryDeclaration<OtterLocalizationDevtools, never>;
13
23
  static ɵprov: i0.ɵɵInjectableDeclaration<OtterLocalizationDevtools>;
14
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"localization-devtools.service.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;;AAE/C,qBACa,yBAAyB;IAExB,OAAO,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;IAG5D;;;;OAIG;IACI,oBAAoB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;yCAVvC,yBAAyB;6CAAzB,yBAAyB;CAarC"}
1
+ {"version":3,"file":"localization-devtools.service.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;;AAE/C,qBACa,yBAAyB;IACxB,OAAO,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;IAE5D;;;;OAIG;IACI,oBAAoB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAIlD;;OAEG;IACI,kBAAkB;IAIzB;;;OAGG;IACI,gBAAgB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,GAAG,YAAY;yCAvBzD,yBAAyB;6CAAzB,yBAAyB;CA+BrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"localization-devtools.token.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AAErF,eAAO,MAAM,2CAA2C,EAAE,kCAEzD,CAAC;AAEF,eAAO,MAAM,mCAAmC,EAAE,cAAc,CAAC,kCAAkC,CAAiG,CAAC"}
1
+ {"version":3,"file":"localization-devtools.token.d.ts","sourceRoot":"","sources":["../../src/devkit/localization-devtools.token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AAErF,eAAO,MAAM,2CAA2C,EAAE,kCAGzD,CAAC;AAEF,eAAO,MAAM,mCAAmC,EAAE,cAAc,CAAC,kCAAkC,CAAiG,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldmtpdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZraXQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbm5lY3RDb250ZW50TWVzc2FnZSwgRGV2dG9vbHNDb21tb25PcHRpb25zLCBNZXNzYWdlRGF0YVR5cGVzLCBPdHRlck1lc3NhZ2VDb250ZW50LCBSZXF1ZXN0TWVzc2FnZXNDb250ZW50TWVzc2FnZSB9IGZyb20gJ0BvM3IvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyBleHRlbmRzIERldnRvb2xzQ29tbW9uT3B0aW9ucyB7XG59XG5cbi8qKiBEaXNwbGF5IGxvY2FsaXphdGlvbiBrZXkgbWVzc2FnZSBjb250ZW50ICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlMb2NhbGl6YXRpb25LZXlzQ29udGVudE1lc3NhZ2UgZXh0ZW5kcyBPdHRlck1lc3NhZ2VDb250ZW50PCdkaXNwbGF5TG9jYWxpemF0aW9uS2V5cyc+IHtcbiAgLyoqIFRvZ2dsZSB0aGUgZGlzcGxheSBvZiB0aGUgbG9jYWxpemF0aW9uIGtleXMgKi9cbiAgdG9nZ2xlPzogYm9vbGVhbjtcbn1cblxudHlwZSBMb2NhbGl6YXRpb25NZXNzYWdlQ29udGVudHMgPVxuICB8IERpc3BsYXlMb2NhbGl6YXRpb25LZXlzQ29udGVudE1lc3NhZ2U7XG5cbi8qKiBMaXN0IG9mIHBvc3NpYmxlIERhdGFUeXBlcyBmb3IgTG9jYWxpemF0aW9uIG1lc3NhZ2VzICovXG50eXBlIExvY2FsaXphdGlvbk1lc3NhZ2VEYXRhVHlwZXMgPSBNZXNzYWdlRGF0YVR5cGVzPExvY2FsaXphdGlvbk1lc3NhZ2VDb250ZW50cz47XG5cbi8qKiBMaXN0IG9mIGFsbCBtZXNzYWdlcyBmb3IgTG9jYWxpemF0aW9uIHB1cnBvc2UgKi9cbmV4cG9ydCB0eXBlIEF2YWlsYWJsZUxvY2FsaXphdGlvbk1lc3NhZ2VDb250ZW50cyA9XG4gIHwgTG9jYWxpemF0aW9uTWVzc2FnZUNvbnRlbnRzXG4gIHwgQ29ubmVjdENvbnRlbnRNZXNzYWdlXG4gIHwgUmVxdWVzdE1lc3NhZ2VzQ29udGVudE1lc3NhZ2U8TG9jYWxpemF0aW9uTWVzc2FnZURhdGFUeXBlcz47XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldmtpdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZraXQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIENvbm5lY3RDb250ZW50TWVzc2FnZSxcbiAgQ29udGV4dHVhbGl6YXRpb25EZXZ0b29sc0NvbW1vbk9wdGlvbnMsXG4gIERldnRvb2xzQ29tbW9uT3B0aW9ucyxcbiAgTWVzc2FnZURhdGFUeXBlcyxcbiAgT3R0ZXJNZXNzYWdlQ29udGVudCxcbiAgUmVxdWVzdE1lc3NhZ2VzQ29udGVudE1lc3NhZ2Vcbn0gZnJvbSAnQG8zci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgZXh0ZW5kcyBEZXZ0b29sc0NvbW1vbk9wdGlvbnMsIENvbnRleHR1YWxpemF0aW9uRGV2dG9vbHNDb21tb25PcHRpb25zIHtcbn1cblxuLyoqIERpc3BsYXkgbG9jYWxpemF0aW9uIGtleSBtZXNzYWdlIGNvbnRlbnQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheUxvY2FsaXphdGlvbktleXNDb250ZW50TWVzc2FnZSBleHRlbmRzIE90dGVyTWVzc2FnZUNvbnRlbnQ8J2Rpc3BsYXlMb2NhbGl6YXRpb25LZXlzJz4ge1xuICAvKiogVG9nZ2xlIHRoZSBkaXNwbGF5IG9mIHRoZSBsb2NhbGl6YXRpb24ga2V5cyAqL1xuICB0b2dnbGU/OiBib29sZWFuO1xufVxuXG50eXBlIExvY2FsaXphdGlvbk1lc3NhZ2VDb250ZW50cyA9XG4gIHwgRGlzcGxheUxvY2FsaXphdGlvbktleXNDb250ZW50TWVzc2FnZTtcblxuLyoqIExpc3Qgb2YgcG9zc2libGUgRGF0YVR5cGVzIGZvciBMb2NhbGl6YXRpb24gbWVzc2FnZXMgKi9cbnR5cGUgTG9jYWxpemF0aW9uTWVzc2FnZURhdGFUeXBlcyA9IE1lc3NhZ2VEYXRhVHlwZXM8TG9jYWxpemF0aW9uTWVzc2FnZUNvbnRlbnRzPjtcblxuLyoqIExpc3Qgb2YgYWxsIG1lc3NhZ2VzIGZvciBMb2NhbGl6YXRpb24gcHVycG9zZSAqL1xuZXhwb3J0IHR5cGUgQXZhaWxhYmxlTG9jYWxpemF0aW9uTWVzc2FnZUNvbnRlbnRzID1cbiAgfCBMb2NhbGl6YXRpb25NZXNzYWdlQ29udGVudHNcbiAgfCBDb25uZWN0Q29udGVudE1lc3NhZ2VcbiAgfCBSZXF1ZXN0TWVzc2FnZXNDb250ZW50TWVzc2FnZTxMb2NhbGl6YXRpb25NZXNzYWdlRGF0YVR5cGVzPjtcblxuXG4vKipcbiAqIENvbnRleHR1YWxpemF0aW9uIGRldnRvb2xzIGV4cG9zZWQgZm9yIGxvY2FsaXphdGlvbiBpbiBDTVMgaW50ZWdyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6YXRpb25Db250ZXh0dWFsaXphdGlvbkRldnRvb2xzIHtcbiAgLyoqXG4gICAqIFNob3cgbG9jYWxpemF0aW9uIGtleXNcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIGVuZm9yY2VkIGJ5IHRoZSBEZXZUb29scyBleHRlbnNpb25cbiAgICovXG4gIHNob3dMb2NhbGl6YXRpb25LZXlzOiAodmFsdWU/OiBib29sZWFuKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgKi9cbiAgZ2V0Q3VycmVudExhbmd1YWdlOiAoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgY3VycmVudCBsYW5ndWFnZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gICAqIEBwYXJhbSBsYW5ndWFnZSBuZXcgbGFuZ3VhZ2UgdG8gc3dpdGNoIHRvXG4gICAqL1xuICBzd2l0Y2hMYW5ndWFnZTogKGxhbmd1YWdlOiBzdHJpbmcpID0+IFByb21pc2U8eyBwcmV2aW91czogc3RyaW5nOyByZXF1ZXN0ZWQ6IHN0cmluZzsgY3VycmVudDogc3RyaW5nIH0+O1xuXG4gIC8qKlxuICAgKiBTZXR1cCBhIGxpc3RlbmVyIG9uIGxhbmd1YWdlIGNoYW5nZVxuICAgKiBAcGFyYW0gZm4gY2FsbGVkIHdoZW4gdGhlIGxhbmd1YWdlIGlzIGNoYW5nZWQgaW4gdGhlIGFwcFxuICAgKi9cbiAgb25MYW5ndWFnZUNoYW5nZTogKGZuOiAobGFuZ3VhZ2U6IHN0cmluZykgPT4gYW55KSA9PiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHNwZWNpZmllZCBsb2NhbGl6YXRpb24ga2V5L3ZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICogQHBhcmFtIGtleVZhbHVlcyBrZXkvdmFsdWVzIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gbGFuZ3VhZ2UgaWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBsYW5ndWFnZSB2YWx1ZVxuICAgKi9cbiAgdXBkYXRlTG9jYWxpemF0aW9uS2V5czogKGtleVZhbHVlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgbGFuZ3VhZ2U/OiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSZWxvYWQgYSBsYW5ndWFnZSBmcm9tIHRoZSBsYW5ndWFnZSBmaWxlXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25neC10cmFuc2xhdGUvY29yZS9ibG9iL21hc3Rlci9wYWNrYWdlcy9jb3JlL2xpYi90cmFuc2xhdGUuc2VydmljZS50cyNMNDkwXG4gICAqIEBwYXJhbSBsYW5ndWFnZSBsYW5ndWFnZSB0byByZWxvYWRcbiAgICovXG4gIHJlbG9hZExvY2FsaXphdGlvbktleXM6IChsYW5ndWFnZT86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
@@ -1,16 +1,24 @@
1
1
  /* eslint-disable no-console */
2
- import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { ApplicationRef, Inject, Injectable, Optional } from '@angular/core';
3
+ import { lastValueFrom } from 'rxjs';
4
+ import { take } from 'rxjs/operators';
5
+ import { LocalizationService } from '../tools';
3
6
  import { OtterLocalizationDevtools } from './localization-devtools.service';
4
7
  import { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';
5
8
  import * as i0 from "@angular/core";
6
9
  import * as i1 from "./localization-devtools.service";
10
+ import * as i2 from "../tools";
7
11
  export class LocalizationDevtoolsConsoleService {
8
12
  /** Name of the Window property to access to the devtools */
9
13
  static { this.windowModuleName = 'localization'; }
10
- constructor(localizationDevtools, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
14
+ constructor(localizationDevtools, localizationService, appRef, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
11
15
  this.localizationDevtools = localizationDevtools;
16
+ this.localizationService = localizationService;
17
+ this.appRef = appRef;
12
18
  this.options = options;
13
- if (this.options.isActivatedOnBootstrap) {
19
+ if (this.options.isActivatedOnBootstrap
20
+ || (this.options.isActivatedOnBootstrapWhenCMSContext
21
+ && document.body.dataset.cmscontext === 'true')) {
14
22
  this.activate();
15
23
  }
16
24
  }
@@ -24,22 +32,68 @@ export class LocalizationDevtoolsConsoleService {
24
32
  console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);
25
33
  }
26
34
  /**
27
- * Show localization keys
28
- *
29
- * @param value value enforced by the DevTools extension
35
+ * @inheritdoc
30
36
  */
31
37
  showLocalizationKeys(value) {
32
38
  this.localizationDevtools.showLocalizationKeys(value);
39
+ this.appRef.tick();
33
40
  }
34
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: i1.OtterLocalizationDevtools }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
+ /**
42
+ * @inheritdoc
43
+ */
44
+ getCurrentLanguage() {
45
+ const currentLanguage = this.localizationDevtools.getCurrentLanguage();
46
+ return currentLanguage;
47
+ }
48
+ /**
49
+ * @inheritdoc
50
+ */
51
+ async switchLanguage(language) {
52
+ const previous = this.localizationDevtools.getCurrentLanguage();
53
+ await lastValueFrom(this.localizationService.useLanguage(language));
54
+ this.appRef.tick();
55
+ const current = this.localizationDevtools.getCurrentLanguage();
56
+ return {
57
+ requested: language,
58
+ previous,
59
+ current
60
+ };
61
+ }
62
+ /**
63
+ * @inheritdoc
64
+ */
65
+ onLanguageChange(fn) {
66
+ return this.localizationDevtools.onLanguageChange(fn);
67
+ }
68
+ /**
69
+ * @inheritdoc
70
+ */
71
+ updateLocalizationKeys(keyValues, language) {
72
+ Object.entries(keyValues).map(([key, value]) => {
73
+ this.localizationService.getTranslateService().set(key, value, language || this.localizationDevtools.getCurrentLanguage());
74
+ });
75
+ this.appRef.tick();
76
+ }
77
+ /**
78
+ * @inheritdoc
79
+ */
80
+ async reloadLocalizationKeys(language) {
81
+ const lang = language || this.localizationDevtools.getCurrentLanguage();
82
+ const initialLocs = await lastValueFrom(this.localizationService
83
+ .getTranslateService()
84
+ .reloadLang(lang)
85
+ .pipe(take(1)));
86
+ return this.updateLocalizationKeys(initialLocs, lang);
87
+ }
88
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: i1.OtterLocalizationDevtools }, { token: i2.LocalizationService }, { token: i0.ApplicationRef }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
35
89
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService }); }
36
90
  }
37
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, decorators: [{
38
92
  type: Injectable
39
- }], ctorParameters: function () { return [{ type: i1.OtterLocalizationDevtools }, { type: undefined, decorators: [{
93
+ }], ctorParameters: function () { return [{ type: i1.OtterLocalizationDevtools }, { type: i2.LocalizationService }, { type: i0.ApplicationRef }, { type: undefined, decorators: [{
40
94
  type: Optional
41
95
  }, {
42
96
  type: Inject,
43
97
  args: [OTTER_LOCALIZATION_DEVTOOLS_OPTIONS]
44
98
  }] }]; } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLmNvbnNvbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXZraXQvbG9jYWxpemF0aW9uLWRldnRvb2xzLmNvbnNvbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFHakksTUFBTSxPQUFPLGtDQUFrQztJQUU3Qyw0REFBNEQ7YUFDckMscUJBQWdCLEdBQUcsY0FBYyxBQUFqQixDQUFrQjtJQUV6RCxZQUNtQixvQkFBK0MsRUFDQyxVQUE4QywyQ0FBMkM7UUFEekkseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEyQjtRQUNDLFlBQU8sR0FBUCxPQUFPLENBQWtGO1FBRTFKLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE1BQU0sa0JBQWtCLEdBQXVCLE1BQU0sQ0FBQztRQUN0RCxnREFBZ0Q7UUFDaEQsa0JBQWtCLENBQUMsZ0JBQWdCLEtBQUssRUFBRSxDQUFDO1FBQzNDLGdEQUFnRDtRQUNoRCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxrQ0FBa0MsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVoRyxPQUFPLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxrQ0FBa0MsQ0FBQyxnQkFBZ0IsV0FBVyxDQUFDLENBQUM7SUFDekosQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxvQkFBb0IsQ0FBQyxLQUFlO1FBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO2tJQWhDVSxrQ0FBa0MsMkRBT3ZCLG1DQUFtQztzSUFQOUMsa0NBQWtDOzs0RkFBbEMsa0NBQWtDO2tCQUQ5QyxVQUFVOzswQkFRTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRGV2dG9vbHNTZXJ2aWNlSW50ZXJmYWNlLCBXaW5kb3dXaXRoRGV2dG9vbHMgfSBmcm9tICdAbzNyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLWRldmtpdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3R0ZXJMb2NhbGl6YXRpb25EZXZ0b29scyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLWRldnRvb2xzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX0RFRkFVTFRfT1BUSU9OUywgT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX09QVElPTlMgfSBmcm9tICcuL2xvY2FsaXphdGlvbi1kZXZ0b29scy50b2tlbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25EZXZ0b29sc0NvbnNvbGVTZXJ2aWNlIGltcGxlbWVudHMgRGV2dG9vbHNTZXJ2aWNlSW50ZXJmYWNlIHtcblxuICAvKiogTmFtZSBvZiB0aGUgV2luZG93IHByb3BlcnR5IHRvIGFjY2VzcyB0byB0aGUgZGV2dG9vbHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB3aW5kb3dNb2R1bGVOYW1lID0gJ2xvY2FsaXphdGlvbic7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25EZXZ0b29sczogT3R0ZXJMb2NhbGl6YXRpb25EZXZ0b29scyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19PUFRJT05TKSBwcml2YXRlIG9wdGlvbnM6IExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgPSBPVFRFUl9MT0NBTElaQVRJT05fREVWVE9PTFNfREVGQVVMVF9PUFRJT05TXG4gICkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNBY3RpdmF0ZWRPbkJvb3RzdHJhcCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgYWN0aXZhdGUoKSB7XG4gICAgY29uc3Qgd2luZG93V2l0aERldnRvb2xzOiBXaW5kb3dXaXRoRGV2dG9vbHMgPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgd2luZG93V2l0aERldnRvb2xzLl9PVFRFUl9ERVZUT09MU18gfHw9IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIHdpbmRvd1dpdGhEZXZ0b29scy5fT1RURVJfREVWVE9PTFNfW0xvY2FsaXphdGlvbkRldnRvb2xzQ29uc29sZVNlcnZpY2Uud2luZG93TW9kdWxlTmFtZV0gPSB0aGlzO1xuXG4gICAgY29uc29sZS5pbmZvKGBPdHRlciBsb2NhbGl6YXRpb24gRGV2dG9vbHMgaXMgbm93IGFjY2Vzc2libGUgdmlhIHRoZSBfT1RURVJfREVWVE9PTFNfLiR7TG9jYWxpemF0aW9uRGV2dG9vbHNDb25zb2xlU2VydmljZS53aW5kb3dNb2R1bGVOYW1lfSB2YXJpYWJsZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbG9jYWxpemF0aW9uIGtleXNcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIGVuZm9yY2VkIGJ5IHRoZSBEZXZUb29scyBleHRlbnNpb25cbiAgICovXG4gIHB1YmxpYyBzaG93TG9jYWxpemF0aW9uS2V5cyh2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsaXphdGlvbkRldnRvb2xzLnNob3dMb2NhbGl6YXRpb25LZXlzKHZhbHVlKTtcbiAgfVxufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLmNvbnNvbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXZraXQvbG9jYWxpemF0aW9uLWRldnRvb2xzLmNvbnNvbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBR2pJLE1BQU0sT0FBTyxrQ0FBa0M7SUFFN0MsNERBQTREO2FBQ3JDLHFCQUFnQixHQUFHLGNBQWMsQUFBakIsQ0FBa0I7SUFFekQsWUFDbUIsb0JBQStDLEVBQy9DLG1CQUF3QyxFQUN4QyxNQUFzQixFQUMwQixVQUE4QywyQ0FBMkM7UUFIekkseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEyQjtRQUMvQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQzBCLFlBQU8sR0FBUCxPQUFPLENBQWtGO1FBRTFKLElBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0I7ZUFDaEMsQ0FDRCxJQUFJLENBQUMsT0FBTyxDQUFDLG9DQUFvQzttQkFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFvQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQzdFLEVBQ0Q7WUFDQSxJQUFJLENBQUMs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WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0dWFsaXphdGlvbkRhdGFzZXQsIERldnRvb2xzU2VydmljZUludGVyZmFjZSwgV2luZG93V2l0aERldnRvb2xzIH0gZnJvbSAnQG8zci9jb3JlJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi90b29scyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db250ZXh0dWFsaXphdGlvbkRldnRvb2xzLCBMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24tZGV2a2l0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdHRlckxvY2FsaXphdGlvbkRldnRvb2xzIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24tZGV2dG9vbHMuc2VydmljZSc7XG5pbXBvcnQgeyBPVFRFUl9MT0NBTElaQVRJT05fREVWVE9PTFNfREVGQVVMVF9PUFRJT05TLCBPVFRFUl9MT0NBTElaQVRJT05fREVWVE9PTFNfT1BUSU9OUyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLWRldnRvb2xzLnRva2VuJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvbkRldnRvb2xzQ29uc29sZVNlcnZpY2UgaW1wbGVtZW50cyBEZXZ0b29sc1NlcnZpY2VJbnRlcmZhY2UsIExvY2FsaXphdGlvbkNvbnRleHR1YWxpemF0aW9uRGV2dG9vbHMge1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBXaW5kb3cgcHJvcGVydHkgdG8gYWNjZXNzIHRvIHRoZSBkZXZ0b29scyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHdpbmRvd01vZHVsZU5hbWUgPSAnbG9jYWxpemF0aW9uJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXphdGlvbkRldnRvb2xzOiBPdHRlckxvY2FsaXphdGlvbkRldnRvb2xzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChPVFRFUl9MT0NBTElaQVRJT05fREVWVE9PTFNfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zID0gT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX0RFRkFVTFRfT1BUSU9OU1xuICApIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuaXNBY3RpdmF0ZWRPbkJvb3RzdHJhcFxuICAgICAgfHwgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaXNBY3RpdmF0ZWRPbkJvb3RzdHJhcFdoZW5DTVNDb250ZXh0XG4gICAgICAgICYmIChkb2N1bWVudC5ib2R5LmRhdGFzZXQgYXMgQ29udGV4dHVhbGl6YXRpb25EYXRhc2V0KS5jbXNjb250ZXh0ID09PSAndHJ1ZSdcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFjdGl2YXRlKCkge1xuICAgIGNvbnN0IHdpbmRvd1dpdGhEZXZ0b29sczogV2luZG93V2l0aERldnRvb2xzID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIHdpbmRvd1dpdGhEZXZ0b29scy5fT1RURVJfREVWVE9PTFNfIHx8PSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICB3aW5kb3dXaXRoRGV2dG9vbHMuX09UVEVSX0RFVlRPT0xTX1tMb2NhbGl6YXRpb25EZXZ0b29sc0NvbnNvbGVTZXJ2aWNlLndpbmRvd01vZHVsZU5hbWVdID0gdGhpcztcblxuICAgIGNvbnNvbGUuaW5mbyhgT3R0ZXIgbG9jYWxpemF0aW9uIERldnRvb2xzIGlzIG5vdyBhY2Nlc3NpYmxlIHZpYSB0aGUgX09UVEVSX0RFVlRPT0xTXy4ke0xvY2FsaXphdGlvbkRldnRvb2xzQ29uc29sZVNlcnZpY2Uud2luZG93TW9kdWxlTmFtZX0gdmFyaWFibGVgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIHNob3dMb2NhbGl6YXRpb25LZXlzKHZhbHVlPzogYm9vbGVhbik6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvY2FsaXphdGlvbkRldnRvb2xzLnNob3dMb2NhbGl6YXRpb25LZXlzKHZhbHVlKTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50TGFuZ3VhZ2UoKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLmxvY2FsaXphdGlvbkRldnRvb2xzLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xuICAgIHJldHVybiBjdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzd2l0Y2hMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogUHJvbWlzZTx7IHByZXZpb3VzOiBzdHJpbmc7IHJlcXVlc3RlZDogc3RyaW5nOyBjdXJyZW50OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2NhbGl6YXRpb25EZXZ0b29scy5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS51c2VMYW5ndWFnZShsYW5ndWFnZSkpO1xuICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5sb2NhbGl6YXRpb25EZXZ0b29scy5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWVzdGVkOiBsYW5ndWFnZSxcbiAgICAgIHByZXZpb3VzLFxuICAgICAgY3VycmVudFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHB1YmxpYyBvbkxhbmd1YWdlQ2hhbmdlKGZuOiAobGFuZ3VhZ2U6IHN0cmluZykgPT4gYW55KTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25EZXZ0b29scy5vbkxhbmd1YWdlQ2hhbmdlKGZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUxvY2FsaXphdGlvbktleXMoa2V5VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBsYW5ndWFnZT86IHN0cmluZyk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBPYmplY3QuZW50cmllcyhrZXlWYWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0VHJhbnNsYXRlU2VydmljZSgpLnNldChrZXksIHZhbHVlLCBsYW5ndWFnZSB8fCB0aGlzLmxvY2FsaXphdGlvbkRldnRvb2xzLmdldEN1cnJlbnRMYW5ndWFnZSgpKTtcbiAgICB9KTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWxvYWRMb2NhbGl6YXRpb25LZXlzKGxhbmd1YWdlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgbGFuZyA9IGxhbmd1YWdlIHx8IHRoaXMubG9jYWxpemF0aW9uRGV2dG9vbHMuZ2V0Q3VycmVudExhbmd1YWdlKCk7XG4gICAgY29uc3QgaW5pdGlhbExvY3MgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAgIC5nZXRUcmFuc2xhdGVTZXJ2aWNlKClcbiAgICAgICAgLnJlbG9hZExhbmcobGFuZylcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUxvY2FsaXphdGlvbktleXMoaW5pdGlhbExvY3MsIGxhbmcpO1xuICB9XG59XG4iXX0=
@@ -14,10 +14,28 @@ export class OtterLocalizationDevtools {
14
14
  showLocalizationKeys(value) {
15
15
  this.localizationService.toggleShowKeys(value);
16
16
  }
17
+ /**
18
+ * Returns the current language
19
+ */
20
+ getCurrentLanguage() {
21
+ return this.localizationService.getCurrentLanguage();
22
+ }
23
+ /**
24
+ * Setup a listener on language change
25
+ * @param fn called when the language is changed in the app
26
+ */
27
+ onLanguageChange(fn) {
28
+ return this.localizationService
29
+ .getTranslateService()
30
+ .onLangChange
31
+ .subscribe(({ lang }) => {
32
+ fn(lang);
33
+ });
34
+ }
17
35
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
18
36
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtterLocalizationDevtools }); }
19
37
  }
20
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtterLocalizationDevtools, decorators: [{
21
39
  type: Injectable
22
40
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZ0b29scy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFHL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUVwQyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG9CQUFvQixDQUFDLEtBQWU7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO2tJQVpVLHlCQUF5QjtzSUFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3Rvb2xzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE90dGVyTG9jYWxpemF0aW9uRGV2dG9vbHMge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSkge1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbG9jYWxpemF0aW9uIGtleXNcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIGVuZm9yY2VkIGJ5IHRoZSBEZXZUb29scyBleHRlbnNpb25cbiAgICovXG4gIHB1YmxpYyBzaG93TG9jYWxpemF0aW9uS2V5cyh2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UudG9nZ2xlU2hvd0tleXModmFsdWUpO1xuICB9XG59XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZ0b29scy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFHL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUFHLENBQUM7SUFFaEU7Ozs7T0FJRztJQUNJLG9CQUFvQixDQUFDLEtBQWU7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsRUFBNkI7UUFDbkQsT0FBTyxJQUFJLENBQUMsbUJBQW1CO2FBQzVCLG1CQUFtQixFQUFFO2FBQ3JCLFlBQVk7YUFDWixTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDdEIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO2tJQTlCVSx5QkFBeUI7c0lBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3Rvb2xzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE90dGVyTG9jYWxpemF0aW9uRGV2dG9vbHMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFNob3cgbG9jYWxpemF0aW9uIGtleXNcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIGVuZm9yY2VkIGJ5IHRoZSBEZXZUb29scyBleHRlbnNpb25cbiAgICovXG4gIHB1YmxpYyBzaG93TG9jYWxpemF0aW9uS2V5cyh2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UudG9nZ2xlU2hvd0tleXModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50TGFuZ3VhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBhIGxpc3RlbmVyIG9uIGxhbmd1YWdlIGNoYW5nZVxuICAgKiBAcGFyYW0gZm4gY2FsbGVkIHdoZW4gdGhlIGxhbmd1YWdlIGlzIGNoYW5nZWQgaW4gdGhlIGFwcFxuICAgKi9cbiAgcHVibGljIG9uTGFuZ3VhZ2VDaGFuZ2UoZm46IChsYW5ndWFnZTogc3RyaW5nKSA9PiBhbnkpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2VcbiAgICAgIC5nZXRUcmFuc2xhdGVTZXJ2aWNlKClcbiAgICAgIC5vbkxhbmdDaGFuZ2VcbiAgICAgIC5zdWJzY3JpYmUoKHsgbGFuZyB9KSA9PiB7XG4gICAgICAgIGZuKGxhbmcpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS = {
3
- isActivatedOnBootstrap: false
3
+ isActivatedOnBootstrap: false,
4
+ isActivatedOnBootstrapWhenCMSContext: true
4
5
  };
5
6
  export const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localization Devtools options');
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RldmtpdC9sb2NhbGl6YXRpb24tZGV2dG9vbHMudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBdUM7SUFDN0Ysc0JBQXNCLEVBQUUsS0FBSztDQUM5QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQXVELElBQUksY0FBYyxDQUFxQyxxQ0FBcUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgfSBmcm9tICcuL2xvY2FsaXphdGlvbi1kZXZraXQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19ERUZBVUxUX09QVElPTlM6IExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgPSB7XG4gIGlzQWN0aXZhdGVkT25Cb290c3RyYXA6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX09QVElPTlM6IEluamVjdGlvblRva2VuPExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnM+ID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnM+KCdPdHRlciBMb2NhbGl6YXRpb24gRGV2dG9vbHMgb3B0aW9ucycpO1xuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RldmtpdC9sb2NhbGl6YXRpb24tZGV2dG9vbHMudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBdUM7SUFDN0Ysc0JBQXNCLEVBQUUsS0FBSztJQUM3QixvQ0FBb0MsRUFBRSxJQUFJO0NBQzNDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBdUQsSUFBSSxjQUFjLENBQXFDLHFDQUFxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLWRldmtpdC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX0RFRkFVTFRfT1BUSU9OUzogTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyA9IHtcbiAgaXNBY3RpdmF0ZWRPbkJvb3RzdHJhcDogZmFsc2UsXG4gIGlzQWN0aXZhdGVkT25Cb290c3RyYXBXaGVuQ01TQ29udGV4dDogdHJ1ZVxufTtcblxuZXhwb3J0IGNvbnN0IE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19PUFRJT05TOiBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPignT3R0ZXIgTG9jYWxpemF0aW9uIERldnRvb2xzIG9wdGlvbnMnKTtcbiJdfQ==
@@ -4,12 +4,12 @@ import { InjectionToken, Injectable, Optional, Inject, NgModule, Directive, Inpu
4
4
  import * as i2 from '@ngx-translate/core';
5
5
  import { TranslateCompiler, TranslateDirective, TranslatePipe, TranslateModule, TranslateLoader } from '@ngx-translate/core';
6
6
  import { IntlMessageFormat } from 'intl-messageformat';
7
+ import { BehaviorSubject, combineLatest, of, from, lastValueFrom, Subscription, fromEvent } from 'rxjs';
8
+ import { map, distinctUntilChanged, switchMap, shareReplay, startWith, catchError, take } from 'rxjs/operators';
7
9
  import * as i3 from '@ngrx/store';
8
10
  import { createAction, props, on, createReducer, StoreModule, createFeatureSelector, createSelector, select } from '@ngrx/store';
9
11
  import * as i1 from '@o3r/logger';
10
12
  import { LoggerService } from '@o3r/logger';
11
- import { BehaviorSubject, combineLatest, of, from, Subscription, fromEvent } from 'rxjs';
12
- import { map, distinctUntilChanged, switchMap, shareReplay, startWith, catchError } from 'rxjs/operators';
13
13
  import * as i2$1 from '@angular/cdk/bidi';
14
14
  import { Directionality, DIR_DOCUMENT, BidiModule } from '@angular/cdk/bidi';
15
15
  import { CurrencyPipe, DatePipe, DecimalPipe, CommonModule } from '@angular/common';
@@ -908,6 +908,24 @@ class OtterLocalizationDevtools {
908
908
  showLocalizationKeys(value) {
909
909
  this.localizationService.toggleShowKeys(value);
910
910
  }
911
+ /**
912
+ * Returns the current language
913
+ */
914
+ getCurrentLanguage() {
915
+ return this.localizationService.getCurrentLanguage();
916
+ }
917
+ /**
918
+ * Setup a listener on language change
919
+ * @param fn called when the language is changed in the app
920
+ */
921
+ onLanguageChange(fn) {
922
+ return this.localizationService
923
+ .getTranslateService()
924
+ .onLangChange
925
+ .subscribe(({ lang }) => {
926
+ fn(lang);
927
+ });
928
+ }
911
929
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
912
930
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtterLocalizationDevtools }); }
913
931
  }
@@ -916,7 +934,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
916
934
  }], ctorParameters: function () { return [{ type: LocalizationService }]; } });
917
935
 
918
936
  const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS = {
919
- isActivatedOnBootstrap: false
937
+ isActivatedOnBootstrap: false,
938
+ isActivatedOnBootstrapWhenCMSContext: true
920
939
  };
921
940
  const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localization Devtools options');
922
941
 
@@ -924,10 +943,14 @@ const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localizati
924
943
  class LocalizationDevtoolsConsoleService {
925
944
  /** Name of the Window property to access to the devtools */
926
945
  static { this.windowModuleName = 'localization'; }
927
- constructor(localizationDevtools, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
946
+ constructor(localizationDevtools, localizationService, appRef, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
928
947
  this.localizationDevtools = localizationDevtools;
948
+ this.localizationService = localizationService;
949
+ this.appRef = appRef;
929
950
  this.options = options;
930
- if (this.options.isActivatedOnBootstrap) {
951
+ if (this.options.isActivatedOnBootstrap
952
+ || (this.options.isActivatedOnBootstrapWhenCMSContext
953
+ && document.body.dataset.cmscontext === 'true')) {
931
954
  this.activate();
932
955
  }
933
956
  }
@@ -941,19 +964,65 @@ class LocalizationDevtoolsConsoleService {
941
964
  console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);
942
965
  }
943
966
  /**
944
- * Show localization keys
945
- *
946
- * @param value value enforced by the DevTools extension
967
+ * @inheritdoc
947
968
  */
948
969
  showLocalizationKeys(value) {
949
970
  this.localizationDevtools.showLocalizationKeys(value);
971
+ this.appRef.tick();
972
+ }
973
+ /**
974
+ * @inheritdoc
975
+ */
976
+ getCurrentLanguage() {
977
+ const currentLanguage = this.localizationDevtools.getCurrentLanguage();
978
+ return currentLanguage;
979
+ }
980
+ /**
981
+ * @inheritdoc
982
+ */
983
+ async switchLanguage(language) {
984
+ const previous = this.localizationDevtools.getCurrentLanguage();
985
+ await lastValueFrom(this.localizationService.useLanguage(language));
986
+ this.appRef.tick();
987
+ const current = this.localizationDevtools.getCurrentLanguage();
988
+ return {
989
+ requested: language,
990
+ previous,
991
+ current
992
+ };
993
+ }
994
+ /**
995
+ * @inheritdoc
996
+ */
997
+ onLanguageChange(fn) {
998
+ return this.localizationDevtools.onLanguageChange(fn);
999
+ }
1000
+ /**
1001
+ * @inheritdoc
1002
+ */
1003
+ updateLocalizationKeys(keyValues, language) {
1004
+ Object.entries(keyValues).map(([key, value]) => {
1005
+ this.localizationService.getTranslateService().set(key, value, language || this.localizationDevtools.getCurrentLanguage());
1006
+ });
1007
+ this.appRef.tick();
1008
+ }
1009
+ /**
1010
+ * @inheritdoc
1011
+ */
1012
+ async reloadLocalizationKeys(language) {
1013
+ const lang = language || this.localizationDevtools.getCurrentLanguage();
1014
+ const initialLocs = await lastValueFrom(this.localizationService
1015
+ .getTranslateService()
1016
+ .reloadLang(lang)
1017
+ .pipe(take(1)));
1018
+ return this.updateLocalizationKeys(initialLocs, lang);
950
1019
  }
951
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: OtterLocalizationDevtools }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1020
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: OtterLocalizationDevtools }, { token: LocalizationService }, { token: i0.ApplicationRef }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
952
1021
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService }); }
953
1022
  }
954
1023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizationDevtoolsConsoleService, decorators: [{
955
1024
  type: Injectable
956
- }], ctorParameters: function () { return [{ type: OtterLocalizationDevtools }, { type: undefined, decorators: [{
1025
+ }], ctorParameters: function () { return [{ type: OtterLocalizationDevtools }, { type: LocalizationService }, { type: i0.ApplicationRef }, { type: undefined, decorators: [{
957
1026
  type: Optional
958
1027
  }, {
959
1028
  type: Inject,
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-localization.mjs","sources":["../../src/annotations/localization.ts","../../src/annotations/input-merge.ts","../../src/core/localization.configuration.ts","../../src/core/translate-messageformat-lazy.compiler.ts","../../src/stores/localization-override/localization-override.actions.ts","../../src/stores/localization-override/localization-override.reducer.ts","../../src/stores/localization-override/localization-override.state.ts","../../src/stores/localization-override/localization-override.module.ts","../../src/stores/localization-override/localization-override.selectors.ts","../../src/stores/localization-override/localization-override.sync.ts","../../src/tools/localization.token.ts","../../src/tools/localization.service.ts","../../src/tools/localization-translate.directive.ts","../../src/tools/localization-translate.pipe.ts","../../src/tools/localized-currency.pipe.ts","../../src/tools/localized-date.pipe.ts","../../src/tools/localized-decimal.pipe.ts","../../src/tools/text-direction.service.ts","../../src/tools/text-directionality.service.ts","../../src/tools/localization.module.ts","../../src/tools/translations-loader.ts","../../src/tools/localization.provider.ts","../../src/devkit/localization-devtools.service.ts","../../src/devkit/localization-devtools.token.ts","../../src/devkit/localization-devtools.console.service.ts","../../src/devkit/localization-devtools.message.service.ts","../../src/devkit/localization-devtools.module.ts","../../src/o3r-localization.ts"],"sourcesContent":["import { deepFill, immutablePrimitive, otterComponentInfoPropertyName } from '@o3r/core';\n\n/**\n * Decorator to pass localization url\n *\n * @param _url\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function Localization(_url: string) {\n return (target: any, key: string) => {\n const privateField = _url || `_${key}`;\n const privateValue = target[key];\n\n if (delete target[key]) {\n Object.defineProperty(target, key, {\n get: function (this: any) {\n return this[privateField];\n },\n set: function (this: any, value: Record<string, unknown>) {\n const currentField = this[privateField] || privateValue;\n this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n if (this[otterComponentInfoPropertyName]) {\n this[otterComponentInfoPropertyName].translations = this[privateField];\n }\n },\n enumerable: true,\n configurable: true\n });\n }\n };\n}\n","import { deepFill, immutablePrimitive } from '@o3r/core';\n\n/**\n * Decorator for @Input property\n * It merges user input with default property value\n *\n * @param privateFieldName\n * @deprecated will be removed in v10\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function InputMerge(privateFieldName?: string) {\n return (target: any, key: string) => {\n const privateField = privateFieldName || `_${key}`;\n const privateValue = target[key];\n\n if (delete target[key]) {\n Object.defineProperty(target, key, {\n get: function (this: any) {\n return this[privateField];\n },\n set: function (this: any, value: Record<string, unknown>) {\n const currentField = this[privateField] || privateValue;\n this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n },\n enumerable: true,\n configurable: true\n });\n }\n };\n}\n","/**\n * Describes configuration for LocalizationModule\n */\nexport interface LocalizationConfiguration {\n /** List of available languages */\n supportedLocales: string[];\n /** Application display language */\n language?: string;\n /** Url to fetch translation bundles from */\n endPointUrl: string;\n /** Prefix endPoinrUrl with dynamicContentPath provided by DynamicContentPath */\n useDynamicContent: boolean;\n /** List of RTL language codes */\n rtlLanguages: string[];\n /**\n * Fallback language map of resource in case translation in language does not exist.\n * translate to unsupported language will try to map to supportedLocales from below property.\n *\n * @example\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR,\n * translate to en-NZ -> fallback to en-GB, translate to en -> fallback to en-GB.\n */\n fallbackLocalesMap?: {\n [supportedLocale: string]: string;\n };\n /** Fallback language of resource in case translation in language does not exist */\n fallbackLanguage: string;\n /** Path relative to published folder where webpack will copy translation bundles */\n bundlesOutputPath: string;\n /** Debug mode switch */\n debugMode: boolean;\n /** Query parameters for fetching the localization resources */\n queryParams?: {[key: string]: string};\n /** Fetch options object as per https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters */\n fetchOptions?: RequestInit;\n /** Enable the ability to switch the translations on and off at runtime. */\n enableTranslationDeactivation: boolean;\n /**\n * Merge the translations from DynamicContentPath with the local translations\n * Warning: Enable this option will download two localization bundles and can delay the display of the text on application first page\n *\n * @default false\n */\n mergeWithLocalTranslations: boolean;\n}\n\n/**\n * Default configuration for LocalizationModule\n */\nexport const DEFAULT_LOCALIZATION_CONFIGURATION: LocalizationConfiguration = {\n supportedLocales: [],\n endPointUrl: '',\n useDynamicContent: false,\n rtlLanguages: ['ar', 'he'],\n fallbackLanguage: 'en',\n bundlesOutputPath: '',\n debugMode: false,\n enableTranslationDeactivation: false,\n mergeWithLocalTranslations: false\n};\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { TranslateCompiler } from '@ngx-translate/core';\nimport { IntlMessageFormat, Options } from 'intl-messageformat';\n\n/**\n * Options for Lazy Message Format compiler\n */\nexport interface LazyMessageFormatConfig extends Options {\n /**\n * Enables compiled translation caching\n *\n * @default true\n */\n enableCache?: boolean;\n\n /**\n * Enables HTML in translation\n *\n * @default true\n */\n ignoreTag?: boolean;\n}\n\n/**\n * Message format configuration default value\n */\nexport const lazyMessageDefaultConfig: LazyMessageFormatConfig = {\n enableCache: true,\n ignoreTag: true\n};\n\n/** Message Format configuration Token */\nexport const MESSAGE_FORMAT_CONFIG = new InjectionToken<LazyMessageFormatConfig>('Message Format configuration');\n\n/**\n * This compiler expects ICU syntax and compiles the expressions with messageformat.js\n * Compare to ngx-translate-messageformat-compiler package, the compilation of the translation is done only on demand\n */\n@Injectable()\nexport class TranslateMessageFormatLazyCompiler extends TranslateCompiler {\n\n /** Configuration */\n private config: LazyMessageFormatConfig;\n\n /** Cache of compiled translations */\n private cache: { [x: string]: IntlMessageFormat } = {};\n\n constructor(@Optional() @Inject(MESSAGE_FORMAT_CONFIG) config?: LazyMessageFormatConfig) {\n super();\n\n this.config = config ? { ...lazyMessageDefaultConfig, ...config } : lazyMessageDefaultConfig;\n }\n\n /**\n * Clear the cache of the compiled translations\n */\n public clearCache() {\n this.cache = {};\n }\n\n /** @inheritDoc */\n public compile(value: string, lang: string): (params: any) => string {\n return (params: any) => (new IntlMessageFormat(value, lang, undefined, this.config).format(params) as string);\n }\n\n /** @inheritDoc */\n public compileTranslations(translations: {[x: string]: any}, lang: string) {\n type CompiledTranslationMap = {[key in keyof typeof translations]: (params: any) => string};\n\n const compilingStrategy = this.config.enableCache ?\n (acc: CompiledTranslationMap, key: string) => {\n acc[key] = (params: any) => {\n const cached = this.cache[`${lang}_${key}`];\n if (cached) {\n return cached.format(params) as string;\n }\n\n const newCachedItem = new IntlMessageFormat(translations[key], lang, undefined, this.config);\n this.cache[`${lang}_${key}`] = newCachedItem;\n return newCachedItem.format(params) as string;\n };\n return acc;\n } :\n\n (acc: CompiledTranslationMap, key: string) => {\n acc[key] = (params: any) => new IntlMessageFormat(translations[key], lang, undefined, this.config).format(params) as string;\n return acc;\n };\n\n return Object.keys(translations)\n .reduce<CompiledTranslationMap>(compilingStrategy, {});\n }\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SetStateActionPayload } from '@o3r/core';\nimport { LocalizationOverrideState } from './localization-override.state';\n\n/** Actions */\nconst ACTION_SET = '[LocalizationOverride] set';\n\n/**\n * Clear all overrides and fill the store with the payload\n */\nexport const setLocalizationOverride = createAction(ACTION_SET, props<SetStateActionPayload<LocalizationOverrideState>>());\n","import {ActionCreator, createReducer, on, ReducerTypes} from '@ngrx/store';\nimport * as actions from './localization-override.actions';\nimport { LocalizationOverrideState} from './localization-override.state';\n\n/**\n * LocalizationOverride Store initial value\n */\nexport const localizationOverrideInitialState: LocalizationOverrideState = {localizationOverrides: {}};\n\n/**\n * List of basic actions for LocalizationOverride Store\n */\nexport const localizationOverrideReducerFeatures: ReducerTypes<LocalizationOverrideState, ActionCreator[]>[] = [\n on(actions.setLocalizationOverride, (_state, payload) => ({...payload.state}))\n];\n\n/**\n * LocalizationOverride Store reducer\n */\nexport const localizationOverrideReducer = createReducer(\n localizationOverrideInitialState,\n ...localizationOverrideReducerFeatures\n);\n","/**\n * LocalizationOverride store state\n */\nexport interface LocalizationOverrideState {\n /** Mapping of initial localization keys to the one they are replaced with */\n localizationOverrides : Record<string,string>;\n}\n\n/**\n * Name of the LocalizationOverride Store\n */\nexport const LOCALIZATION_OVERRIDE_STORE_NAME = 'localizationOverride';\n\n/**\n * LocalizationOverride Store Interface\n */\nexport interface LocalizationOverrideStore {\n /** LocalizationOverride state */\n [LOCALIZATION_OVERRIDE_STORE_NAME]: LocalizationOverrideState;\n}\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { Action, ActionReducer, StoreModule } from '@ngrx/store';\n\nimport { localizationOverrideReducer } from './localization-override.reducer';\nimport { LOCALIZATION_OVERRIDE_STORE_NAME, LocalizationOverrideState } from './localization-override.state';\n\n/** Token of the LocalizationOverride reducer */\nexport const LOCALIZATION_OVERRIDE_REDUCER_TOKEN = new InjectionToken<ActionReducer<LocalizationOverrideState, Action>>('Feature LocalizationOverride Reducer');\n\n/** Provide default reducer for LocalizationOverride store */\nexport function getDefaultLocalizationOverrideReducer() {\n return localizationOverrideReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(LOCALIZATION_OVERRIDE_STORE_NAME, LOCALIZATION_OVERRIDE_REDUCER_TOKEN)\n ],\n providers: [\n { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: getDefaultLocalizationOverrideReducer }\n ]\n})\nexport class LocalizationOverrideStoreModule {\n public static forRoot<T extends LocalizationOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<LocalizationOverrideStoreModule> {\n return {\n ngModule: LocalizationOverrideStoreModule,\n providers: [\n { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { LOCALIZATION_OVERRIDE_STORE_NAME, LocalizationOverrideState } from './localization-override.state';\n\n/** Select LocalizationOverride State */\nexport const selectLocalizationOverrideState = createFeatureSelector<LocalizationOverrideState>(LOCALIZATION_OVERRIDE_STORE_NAME);\n\n/** Select all localization override map */\nexport const selectLocalizationOverride = createSelector(selectLocalizationOverrideState, (state) => state?.localizationOverrides || {});\n","import { Serializer } from '@o3r/core';\nimport { localizationOverrideInitialState } from './localization-override.reducer';\nimport { LocalizationOverrideState } from './localization-override.state';\n\nexport const localizationOverrideStorageDeserializer = (rawObject: any) => {\n if (!rawObject) {\n return localizationOverrideInitialState;\n }\n return rawObject;\n};\n\nexport const localizationOverrideStorageSync: Serializer<LocalizationOverrideState> = {\n deserialize: localizationOverrideStorageDeserializer\n};\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationConfiguration } from '../core';\n\n/** Localization Configuration Token */\nexport const LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<LocalizationConfiguration>('Localization Configuration injection token');\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoggerService } from '@o3r/logger';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\nimport { LocalizationConfiguration } from '../core/localization.configuration';\nimport { LocalizationOverrideStore, selectLocalizationOverride } from '../stores/index';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\n/**\n * Service which is wrapping the configuration logic of TranslateService from ngx-translate\n * Any application willing to use localization just needs to inject LocalizationService\n * in the root component and call its configure() method.\n */\n@Injectable()\nexport class LocalizationService {\n\n private readonly localeSplitIdentifier: string = '-';\n\n /**\n * Internal subject that we use to track changes between keys only and translation mode\n */\n private _showKeys$ = new BehaviorSubject(false);\n\n /**\n * Map of localization keys to replace a key to another\n */\n private keyMapping$?: Observable<Record<string, any | undefined>>;\n\n /**\n * _showKeys$ exposed as an Observable\n */\n public showKeys$ = this._showKeys$.asObservable();\n\n constructor(\n private translateService: TranslateService,\n private logger: LoggerService,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private configuration: LocalizationConfiguration,\n @Optional() private store?: Store<LocalizationOverrideStore>) {\n this.configure();\n if (this.store) {\n this.keyMapping$ = this.store.pipe(\n select(selectLocalizationOverride)\n );\n }\n }\n\n /**\n * This will handle the fallback language hierarchy to find out fallback language.\n * supportedLocales language has highest priority, next priority goes to fallbackLocalesMap and default would be\n * fallbackLanguage.\n *\n * @param language Selected language.\n * @returns selected language if supported, fallback language otherwise.\n */\n private checkFallbackLocalesMap<T extends string | undefined>(language: T) {\n if (language && this.configuration.supportedLocales.indexOf(language) === -1) {\n const closestSupportedLanguageCode = this.getFirstClosestSupportedLanguageCode(language);\n const fallbackForLanguage = this.getFallbackMapLangCode(language);\n const fallbackStrategyDebug = fallbackForLanguage && ' associated fallback language ' ||\n closestSupportedLanguageCode && ' closest supported language ' ||\n this.configuration.fallbackLanguage && ' configured default language ';\n const fallbackLang = fallbackForLanguage || closestSupportedLanguageCode || this.configuration.fallbackLanguage || language;\n if (language !== fallbackLang) {\n this.logger.debug(`Non supported languages ${language} will fallback to ${fallbackStrategyDebug} ${fallbackLang}`);\n }\n return fallbackLang;\n } else if (!language) {\n this.logger.debug('Language is not defined');\n }\n return language;\n }\n\n /**\n * This function checks if fallback language can be provided from fallbackLocalesMap.\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR\n * translate to en-NZ -> fallback to en-GB\n *\n * @param language Selected language.\n * @returns Fallback language if available, undefined otherwise.\n */\n private getFallbackMapLangCode(language: string): string | undefined {\n const fallbackLocalesMap = this.configuration.fallbackLocalesMap;\n const [locale] = language.split(this.localeSplitIdentifier);\n\n return fallbackLocalesMap && (fallbackLocalesMap[language] || fallbackLocalesMap[locale]);\n\n }\n\n /**\n * This function checks if closest supported language available incase of selected language is not\n * supported language.\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR']\n * translate to en-CA -> fallback to en-GB\n *\n * @param language Selected language.\n * @returns Closest supported language if available, undefined otherwise.\n */\n private getFirstClosestSupportedLanguageCode(language: string): string | undefined {\n\n const [locale] = language.split(this.localeSplitIdentifier);\n const firstClosestRegx = new RegExp(`^${locale}${this.localeSplitIdentifier}?`, 'i');\n\n return this.configuration.supportedLocales.find((supportedLang) => firstClosestRegx.test(supportedLang));\n }\n\n /**\n * Returns a stream of translated values of a key which updates whenever the language changes.\n *\n * @param translationKey Key to translate\n * @param interpolateParams Object to use in translation binding\n * @returns A stream of the translated key\n */\n private getTranslationStream(translationKey: string, interpolateParams?: object) {\n const translation$ = this.translateService.stream(translationKey, interpolateParams).pipe(\n map((value: string) => this.configuration.debugMode ? `${translationKey} - ${value}` : value)\n );\n\n if (!this.configuration.enableTranslationDeactivation) {\n return translation$;\n }\n\n return combineLatest([\n translation$,\n this.showKeys$\n ]).pipe(\n map(([value, showKeys]) => showKeys ? translationKey : value)\n );\n }\n\n /**\n * Configures TranslateService and registers locales. This method is called from the application level.\n */\n public configure() {\n const language = this.checkFallbackLocalesMap(this.configuration.language || this.configuration.fallbackLanguage);\n this.translateService.addLangs(this.configuration.supportedLocales);\n this.translateService.setDefaultLang(language);\n this.useLanguage(language);\n }\n\n /**\n * Wrapper to call the ngx-translate service TranslateService method getLangs().\n */\n public getLanguages() {\n return this.translateService.getLangs();\n }\n\n /**\n * Wrapper to call the ngx-translate service TranslateService method use(language).\n *\n * @param language\n */\n public useLanguage(language: string): Observable<any> {\n\n language = this.checkFallbackLocalesMap(language);\n return this.translateService.use(language);\n }\n\n /**\n * Wrapper to get the ngx-translate service TranslateService currentLang.\n */\n public getCurrentLanguage() {\n return this.translateService.currentLang;\n }\n\n /**\n * Get the instance of the ngx-translate TranslateService used by LocalizationService.\n */\n public getTranslateService() {\n return this.translateService;\n }\n\n /**\n * Toggle the ShowKeys mode between active and inactive.\n *\n * @param value if specified, set the ShowKeys mode to value. If not specified, toggle the ShowKeys mode.\n */\n public toggleShowKeys(value?: boolean) {\n if (!this.configuration.enableTranslationDeactivation) {\n throw new Error('Translation deactivation is not enabled. Please set the LocalizationConfiguration property \"enableTranslationDeactivation\" accordingly.');\n }\n const newValue = value !== undefined ? value : !this.showKeys;\n this._showKeys$.next(newValue);\n }\n\n /**\n * Return the current value of debug show/hide translation keys.\n */\n public get showKeys() {\n return this._showKeys$.value;\n }\n\n /**\n * Get an observable of translation key after global mapping\n *\n * @param requestedKey Original translation key\n */\n public getKey(requestedKey: string) {\n if (this.keyMapping$) {\n return this.keyMapping$.pipe(\n map((keyMapping) => keyMapping && keyMapping[requestedKey] || requestedKey),\n distinctUntilChanged()\n );\n } else {\n return of(requestedKey);\n }\n }\n\n /**\n * Returns a stream of translated values of a key which updates whenever the language changes.\n *\n * @param key Key to translate\n * @param interpolateParams Object to use in translation binding\n * @returns A stream of the translated key\n */\n public translate(key: string, interpolateParams?: object) {\n return this.getKey(key).pipe(\n switchMap((translationKey) => this.getTranslationStream(translationKey, interpolateParams)),\n shareReplay(1)\n );\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Inject, Input } from '@angular/core';\nimport { TranslateDirective, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n/**\n * TranslateDirective class adding debug functionality\n */\n@Directive({\n selector: '[translate],[ngx-translate]'\n})\nexport class LocalizationTranslateDirective extends TranslateDirective {\n /**\n * Internal subscription to the LocalizationService showKeys mode changes\n */\n private onShowKeysChange?: Subscription;\n\n /**\n * Should we display keys instead of translations\n */\n private showKeys = false;\n\n /**\n * Internal subscription to the LocalizationService key mapping\n */\n private onKeyChange?: Subscription;\n\n /** @inheritdoc */\n @Input()\n public set translate(key: string) {\n if (key && key !== this.key) {\n if (this.onKeyChange) {\n this.onKeyChange.unsubscribe();\n }\n this.onKeyChange = this.localizationService.getKey(key).subscribe((newKey) => {\n this.key = newKey;\n this.checkNodes();\n });\n }\n }\n\n constructor(private localizationService: LocalizationService, translateService: TranslateService, element: ElementRef, _ref: ChangeDetectorRef,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfig: LocalizationConfiguration) {\n super(translateService, element, _ref);\n\n if (localizationConfig.enableTranslationDeactivation) {\n this.onShowKeysChange = localizationService.showKeys$.subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.checkNodes(true);\n });\n }\n }\n\n /**\n * Overriding parent's setContent to plug debugging feature\n *\n * @param node\n * @param content\n */\n public setContent(node: any, content: string): void {\n const key = node.originalContent;\n const newContent = this.showKeys ? key : this.localizationConfig.debugMode && key ? `${key as string} - ${content}` : content;\n if (typeof node.textContent !== 'undefined' && node.textContent !== null) {\n node.textContent = newContent;\n } else {\n node.data = newContent;\n }\n }\n\n public ngOnDestroy() {\n super.ngOnDestroy();\n if (this.onShowKeysChange) {\n this.onShowKeysChange.unsubscribe();\n }\n if (this.onKeyChange) {\n this.onKeyChange?.unsubscribe();\n }\n }\n}\n","import { ChangeDetectorRef, Inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n/**\n * TranslatePipe class adding debug functionality\n */\n@Pipe({name: 'translate', pure: false})\nexport class LocalizationTranslatePipe extends TranslatePipe implements PipeTransform {\n /**\n * Internal subscription to the LocalizationService showKeys mode changes\n */\n private onShowKeysChange?: Subscription;\n\n /**\n * Internal subscription to the LocalizationService key mapping\n */\n private onKeyChange?: Subscription;\n\n /**\n * Should we display keys instead of translations\n */\n private showKeys = false;\n\n /** last key queried */\n private lastQueryKey?: string;\n\n /** last key resolved */\n private lastResolvedKey?: string;\n\n constructor(private localizationService: LocalizationService, translateService: TranslateService, private changeDetector: ChangeDetectorRef,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfig: LocalizationConfiguration) {\n super(translateService, changeDetector);\n\n if (localizationConfig.enableTranslationDeactivation) {\n this.onShowKeysChange = this.localizationService.showKeys$.subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.changeDetector.markForCheck();\n });\n }\n }\n\n /**\n * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled\n *\n * @inheritdoc\n */\n public transform(query: string, ...args: any[]): any {\n if (this.showKeys) {\n return query;\n }\n\n if (query !== this.lastQueryKey) {\n this.lastQueryKey = query;\n if (this.onKeyChange) {\n this.onKeyChange.unsubscribe();\n }\n this.onKeyChange = this.localizationService.getKey(query).subscribe((key) => {\n this.lastResolvedKey = key;\n this.changeDetector.markForCheck();\n });\n\n }\n\n if (this.lastResolvedKey) {\n const value = super.transform(this.lastResolvedKey, ...args);\n\n if (this.localizationConfig.debugMode) {\n return `${this.lastResolvedKey} - ${value as string}`;\n }\n\n return value;\n }\n\n return this.value;\n }\n\n public ngOnDestroy() {\n super.ngOnDestroy();\n if (this.onShowKeysChange) {\n this.onShowKeysChange.unsubscribe();\n }\n }\n}\n","import {CurrencyPipe} from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular CurrencyPipe taking the current lang into consideration\n */\n@Pipe({\n name: 'currency',\n pure: false\n})\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: number | string, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(value: null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): null;\n public transform(\n // Expose same signatures as angular CurencyPipe\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n value: number | string | null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(\n value: number | string | null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null {\n return super.transform(value, currencyCode, display, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import {DatePipe} from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular DatePipe taking the current lang into consideration\n */\n@Pipe({\n name: 'date',\n pure: false\n})\nexport class LocalizedDatePipe extends DatePipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string\n | null;\n public transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n public transform(\n value: Date | string | number | null | undefined, format?: string, timezone?: string,\n locale?: string): string | null;\n public transform(\n value: Date | string | number | null | undefined, format = 'mediumDate', timezone?: string,\n locale?: string): string | null {\n if (this.localizationService.showKeys) {\n return format;\n } else {\n return super.transform(value, format, timezone, locale || this.localizationService.getCurrentLanguage());\n }\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular DecimalPipe taking the current lang into consideration\n */\n@Pipe({\n name: 'decimal',\n pure: false\n})\nexport class LocalizedDecimalPipe extends DecimalPipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\n public transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\n public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null {\n return super.transform(value, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\n/**\n * Service for handling the text direction based on the LocalizationConfiguration\n */\n@Injectable()\nexport class TextDirectionService {\n private subscription?: Subscription;\n private renderer: Renderer2;\n\n constructor(\n private translateService: TranslateService,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private configuration: LocalizationConfiguration,\n private rendererFactory: RendererFactory2,\n private directionality: Directionality) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n /**\n * Updates the dir attribute on body HTML tag.\n *\n * @returns a subscription that updates the dir attribute\n */\n public onLangChangeSubscription() {\n if (this.subscription && !this.subscription.closed) {\n return this.subscription;\n }\n this.subscription = this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {\n const direction = this.configuration.rtlLanguages.indexOf(event.lang.split('-')[0]) > -1 ? 'rtl' : 'ltr';\n this.renderer.setAttribute(document.body, 'dir', direction);\n this.directionality.change.emit(direction);\n });\n return this.subscription;\n }\n}\n","import { DIR_DOCUMENT, Direction, Directionality } from '@angular/cdk/bidi';\n\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { startWith } from 'rxjs/operators';\n\n@Injectable()\nexport class TextDirectionality extends Directionality {\n /**\n * The current 'ltr' or 'rtl' value.\n *\n * @override\n */\n public value!: Direction;\n\n constructor(@Optional() @Inject(DIR_DOCUMENT) _document?: any) {\n super(_document);\n this.change\n .pipe(startWith(this.value))\n .subscribe((value: Direction) => this.value = value);\n }\n\n public ngOnDestroy() {\n this.change.complete();\n }\n}\n","import { BidiModule, Directionality } from '@angular/cdk/bidi';\nimport { CommonModule, CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { InjectionToken, LOCALE_ID, ModuleWithProviders, NgModule, Optional } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DynamicContentModule } from '@o3r/dynamic-content';\nimport { DEFAULT_LOCALIZATION_CONFIGURATION, LocalizationConfiguration } from '../core';\nimport { LocalizationTranslateDirective } from './localization-translate.directive';\nimport { LocalizationTranslatePipe } from './localization-translate.pipe';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\nimport { LocalizedCurrencyPipe } from './localized-currency.pipe';\nimport { LocalizedDatePipe } from './localized-date.pipe';\nimport { LocalizedDecimalPipe } from './localized-decimal.pipe';\nimport { TextDirectionService } from './text-direction.service';\nimport { TextDirectionality } from './text-directionality.service';\n\n/**\n * creates LocalizationConfiguration, which is used if the application\n *\n * @param configuration Localization configuration\n */\nexport function createLocalizationConfiguration(configuration?: Partial<LocalizationConfiguration>): LocalizationConfiguration {\n return {\n ...DEFAULT_LOCALIZATION_CONFIGURATION,\n ...(configuration || {})\n };\n}\n\n/**\n * Factory to inject the LOCALE_ID token with the current language into Angular context\n *\n * @param localizationService Localization service\n */\nexport function localeIdNgBridge(localizationService: LocalizationService) {\n return localizationService.getCurrentLanguage();\n}\n\n/** Custom Localization Configuration Token to override default localization configuration */\nexport const CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<Partial<LocalizationConfiguration>>('Partial Localization configuration');\n\n@NgModule({\n declarations: [LocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n imports: [TranslateModule, BidiModule, DynamicContentModule, CommonModule],\n exports: [TranslateModule, LocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n providers: [\n {provide: LOCALIZATION_CONFIGURATION_TOKEN, useFactory: createLocalizationConfiguration, deps: [[new Optional(), CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN]]},\n {provide: LOCALE_ID, useFactory: localeIdNgBridge, deps: [LocalizationService]},\n {provide: Directionality, useClass: TextDirectionality},\n {provide: DatePipe, useClass: LocalizedDatePipe},\n {provide: DecimalPipe, useClass: LocalizedDecimalPipe},\n {provide: CurrencyPipe, useClass: LocalizedCurrencyPipe},\n TextDirectionService\n ]\n})\nexport class LocalizationModule {\n /**\n * forRoot method should be called only once from the application index.ts\n * It will do several things:\n * - provide the configuration for the whole application\n * - register all locales specified in the LocalizationConfiguration\n * - configure TranslateService\n * - inject LOCALE_ID token\n *\n * @param configuration LocalizationConfiguration\n */\n public static forRoot(\n configuration?: () => Partial<LocalizationConfiguration>\n ): ModuleWithProviders<LocalizationModule> {\n return {\n ngModule: LocalizationModule,\n providers: [\n LocalizationService,\n ...(configuration ? [{\n provide: CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN,\n useFactory: configuration\n }] : [])\n ]\n };\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\n\nimport { LocalizationConfiguration } from '../core';\n\nimport { combineLatest, from, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\nimport { DynamicContentService } from '@o3r/dynamic-content';\nimport { LoggerService } from '@o3r/logger';\n\nconst JSON_EXT = '.json';\n\n/**\n * This class is responsible for loading translation bundles from remote or local endpoints depending on the LocalizationConfiguration.\n * Fallback mechanism ensures that if a bundle in some language cannot be fetched remotely\n * we try to fetch the same language bundle locally (bundles stored inside the application)\n * and finally load the fallback language bundle (if all previous fetches failed)\n */\n@Injectable()\nexport class TranslationsLoader implements TranslateLoader {\n constructor(@Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfiguration: LocalizationConfiguration,\n @Optional() private readonly logger?: LoggerService,\n @Optional() private dynamicContentService?: DynamicContentService) {}\n\n /**\n * Download a language bundle file\n *\n * @param url Url to the bundle file\n */\n private downloadLanguageBundle$(url: string) {\n const queryParams = this.localizationConfiguration.queryParams;\n\n let queryString = '';\n if (queryParams) {\n queryString = '?' + Object.keys(queryParams).map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key])).join('&');\n }\n return from(fetch(url + queryString, this.localizationConfiguration.fetchOptions)).pipe(\n switchMap((response) => from(response.json()))\n );\n }\n\n /**\n * @inheritdoc\n */\n public getTranslation(lang: string): Observable<any> {\n const fallback = this.localizationConfiguration.fallbackLanguage;\n let localizationPath$ = of(this.localizationConfiguration.endPointUrl);\n\n if (this.localizationConfiguration.useDynamicContent) {\n if (!this.dynamicContentService) {\n throw Error('Dynamic Content is not available. Please verify you have imported the module DynamicContentModule in your application');\n }\n localizationPath$ = this.dynamicContentService.getContentPathStream(this.localizationConfiguration.endPointUrl);\n }\n\n return localizationPath$.pipe(\n switchMap((localizationPath: string) => {\n if (localizationPath) {\n\n const localizationBundle$ = this.downloadLanguageBundle$(localizationPath + lang + JSON_EXT);\n\n if (this.localizationConfiguration.mergeWithLocalTranslations) {\n return combineLatest([\n localizationBundle$.pipe(catchError(() => of({}))),\n this.getTranslationFromLocal(lang, fallback).pipe(\n map((translations) => {\n Object.keys(translations).forEach((key) => translations[key] = `[local] ${translations[key] as string}`);\n return translations;\n })\n )\n ]).pipe(map(([dynamicTranslations, localTranslations]) => ({...localTranslations, ...dynamicTranslations})));\n }\n\n /*\n * if endPointUrl is specified by the configuration then:\n * 1. try to load lang from endPointUrl\n * 2. if 1 fails then try to load from the app (local file)\n */\n return localizationBundle$.pipe(\n catchError(() => {\n this.logger?.warn(`Failed to load the localization resource from ${localizationPath + lang + JSON_EXT}, trying from the application resources`);\n return this.getTranslationFromLocal(lang, fallback);\n })\n );\n }\n /*\n * else if endPointUrl NOT specified by then configuration then:\n * 1. try to load from the app (local file)\n */\n this.logger?.warn('No localization endpoint specified, localization fetch from application resources');\n return this.getTranslationFromLocal(lang, fallback);\n })\n );\n }\n\n /**\n *\n * Fetches localization bundles from published folder (internal to application)\n *\n * 1. try to load lang from local\n * 2. if 1 fails try to load fallback lang but only if it's different from lang in 1\n *\n * @param lang - language of the bundle\n * @param fallbackLanguage - fallback language in case bundle in language not found\n */\n public getTranslationFromLocal(lang: string, fallbackLanguage: string): Observable<any> {\n const pathPrefix: string = this.localizationConfiguration.bundlesOutputPath;\n return this.downloadLanguageBundle$(pathPrefix + lang + JSON_EXT).pipe(\n catchError(() => {\n if (lang !== fallbackLanguage) {\n this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}. Application will fallback to ${fallbackLanguage}`);\n return this.downloadLanguageBundle$(pathPrefix + fallbackLanguage + JSON_EXT).pipe(\n catchError(() => of({}))\n );\n } else {\n this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}.`);\n return of({});\n }\n })\n );\n }\n}\n","import { FactoryProvider, Optional } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { DynamicContentService } from '@o3r/dynamic-content';\nimport { LoggerService } from '@o3r/logger';\nimport { LocalizationConfiguration } from '../core';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\nimport { TranslationsLoader } from './translations-loader';\n\n/**\n * Creates a loader of translations bundles based on the configuration\n * (endPointUrl and language determine which bundle we load and where do we fetch it from)\n *\n * @param localizationConfiguration\n * @param logger service to handle the log of warning and errors\n * @param dynamicContentService (optional)\n */\nexport function createTranslateLoader(localizationConfiguration: LocalizationConfiguration, logger?: LoggerService, dynamicContentService?: DynamicContentService) {\n return new TranslationsLoader(localizationConfiguration, logger, dynamicContentService);\n}\n\n/**\n * TranslateLoader provider, using framework's TranslationsLoader class\n */\nexport const translateLoaderProvider: FactoryProvider = {\n provide: TranslateLoader,\n useFactory: createTranslateLoader,\n deps: [LOCALIZATION_CONFIGURATION_TOKEN, [new Optional(), LoggerService], [new Optional(), DynamicContentService]]\n};\n","import { Injectable } from '@angular/core';\nimport { LocalizationService } from '../tools';\n\n@Injectable()\nexport class OtterLocalizationDevtools {\n\n constructor(private localizationService: LocalizationService) {\n }\n\n /**\n * Show localization keys\n *\n * @param value value enforced by the DevTools extension\n */\n public showLocalizationKeys(value?: boolean): void {\n this.localizationService.toggleShowKeys(value);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: LocalizationDevtoolsServiceOptions = {\n isActivatedOnBootstrap: false\n};\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS: InjectionToken<LocalizationDevtoolsServiceOptions> = new InjectionToken<LocalizationDevtoolsServiceOptions>('Otter Localization Devtools options');\n","/* eslint-disable no-console */\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport type { DevtoolsServiceInterface, WindowWithDevtools } from '@o3r/core';\nimport { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\n@Injectable()\nexport class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface {\n\n /** Name of the Window property to access to the devtools */\n public static readonly windowModuleName = 'localization';\n\n constructor(\n private readonly localizationDevtools: OtterLocalizationDevtools,\n @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS\n ) {\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n /** @inheritDoc */\n public activate() {\n const windowWithDevtools: WindowWithDevtools = window;\n // eslint-disable-next-line no-underscore-dangle\n windowWithDevtools._OTTER_DEVTOOLS_ ||= {};\n // eslint-disable-next-line no-underscore-dangle\n windowWithDevtools._OTTER_DEVTOOLS_[LocalizationDevtoolsConsoleService.windowModuleName] = this;\n\n console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);\n }\n\n /**\n * Show localization keys\n *\n * @param value value enforced by the DevTools extension\n */\n public showLocalizationKeys(value?: boolean): void {\n this.localizationDevtools.showLocalizationKeys(value);\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport { filterMessageContent } from '@o3r/core';\nimport { LoggerService } from '@o3r/logger';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { AvailableLocalizationMessageContents, LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\nconst isLocalizationMessage = (message: any): message is AvailableLocalizationMessageContents => {\n return message && message.dataType === 'displayLocalizationKeys';\n};\n\n@Injectable()\nexport class LocalizationDevtoolsMessageService implements OnDestroy {\n\n private subscriptions = new Subscription();\n\n constructor(\n private logger: LoggerService,\n private localizationDevTools: OtterLocalizationDevtools,\n @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {\n\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n /**\n * Function to handle the incoming messages from Otter Chrome DevTools extension\n *\n * @param event Event coming from the Otter Chrome DevTools extension\n * @param message\n */\n private handleEvents(message: AvailableLocalizationMessageContents) {\n this.logger.debug('Message handling by the localization service', message);\n\n switch (message.dataType) {\n case 'connect': {\n this.connectPlugin();\n break;\n }\n case 'displayLocalizationKeys': {\n this.localizationDevTools.showLocalizationKeys(message.toggle);\n break;\n }\n default: {\n this.logger.warn('Message ignored by the localization service', message);\n }\n }\n }\n\n /**\n * Function to connect the plugin to the Otter Chrome DevTools extension\n */\n private connectPlugin() {\n this.logger.debug('Otter DevTools is plugged to localization service of the application');\n }\n\n /** @inheritDoc */\n public activate() {\n this.subscriptions.add(\n fromEvent(window, 'message').pipe(filterMessageContent(isLocalizationMessage)).subscribe((e) => this.handleEvents(e))\n );\n }\n\n /** @inheritDoc */\n public ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { LocalizationModule } from '../tools/index';\nimport type { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { LocalizationDevtoolsConsoleService } from './localization-devtools.console.service';\nimport { LocalizationDevtoolsMessageService } from './localization-devtools.message.service';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\n@NgModule({\n imports: [\n LocalizationModule\n ],\n providers: [\n { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS },\n LocalizationDevtoolsMessageService,\n LocalizationDevtoolsConsoleService,\n OtterLocalizationDevtools\n ]\n})\nexport class LocalizationDevtoolsModule {\n\n /**\n * Initialize Otter Devtools\n *\n * @param options\n */\n public static instrument(options: Partial<LocalizationDevtoolsServiceOptions>): ModuleWithProviders<LocalizationDevtoolsModule> {\n return {\n ngModule: LocalizationDevtoolsModule,\n providers: [\n { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: { ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n LocalizationDevtoolsMessageService,\n LocalizationDevtoolsConsoleService,\n OtterLocalizationDevtools\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setLocalizationOverride","i1","i1.LocalizationService","i2"],"mappings":"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"}
1
+ {"version":3,"file":"o3r-localization.mjs","sources":["../../src/annotations/localization.ts","../../src/annotations/input-merge.ts","../../src/core/localization.configuration.ts","../../src/core/translate-messageformat-lazy.compiler.ts","../../src/stores/localization-override/localization-override.actions.ts","../../src/stores/localization-override/localization-override.reducer.ts","../../src/stores/localization-override/localization-override.state.ts","../../src/stores/localization-override/localization-override.module.ts","../../src/stores/localization-override/localization-override.selectors.ts","../../src/stores/localization-override/localization-override.sync.ts","../../src/tools/localization.token.ts","../../src/tools/localization.service.ts","../../src/tools/localization-translate.directive.ts","../../src/tools/localization-translate.pipe.ts","../../src/tools/localized-currency.pipe.ts","../../src/tools/localized-date.pipe.ts","../../src/tools/localized-decimal.pipe.ts","../../src/tools/text-direction.service.ts","../../src/tools/text-directionality.service.ts","../../src/tools/localization.module.ts","../../src/tools/translations-loader.ts","../../src/tools/localization.provider.ts","../../src/devkit/localization-devtools.service.ts","../../src/devkit/localization-devtools.token.ts","../../src/devkit/localization-devtools.console.service.ts","../../src/devkit/localization-devtools.message.service.ts","../../src/devkit/localization-devtools.module.ts","../../src/o3r-localization.ts"],"sourcesContent":["import { deepFill, immutablePrimitive, otterComponentInfoPropertyName } from '@o3r/core';\n\n/**\n * Decorator to pass localization url\n *\n * @param _url\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function Localization(_url: string) {\n return (target: any, key: string) => {\n const privateField = _url || `_${key}`;\n const privateValue = target[key];\n\n if (delete target[key]) {\n Object.defineProperty(target, key, {\n get: function (this: any) {\n return this[privateField];\n },\n set: function (this: any, value: Record<string, unknown>) {\n const currentField = this[privateField] || privateValue;\n this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n if (this[otterComponentInfoPropertyName]) {\n this[otterComponentInfoPropertyName].translations = this[privateField];\n }\n },\n enumerable: true,\n configurable: true\n });\n }\n };\n}\n","import { deepFill, immutablePrimitive } from '@o3r/core';\n\n/**\n * Decorator for @Input property\n * It merges user input with default property value\n *\n * @param privateFieldName\n * @deprecated will be removed in v10\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function InputMerge(privateFieldName?: string) {\n return (target: any, key: string) => {\n const privateField = privateFieldName || `_${key}`;\n const privateValue = target[key];\n\n if (delete target[key]) {\n Object.defineProperty(target, key, {\n get: function (this: any) {\n return this[privateField];\n },\n set: function (this: any, value: Record<string, unknown>) {\n const currentField = this[privateField] || privateValue;\n this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n },\n enumerable: true,\n configurable: true\n });\n }\n };\n}\n","/**\n * Describes configuration for LocalizationModule\n */\nexport interface LocalizationConfiguration {\n /** List of available languages */\n supportedLocales: string[];\n /** Application display language */\n language?: string;\n /** Url to fetch translation bundles from */\n endPointUrl: string;\n /** Prefix endPoinrUrl with dynamicContentPath provided by DynamicContentPath */\n useDynamicContent: boolean;\n /** List of RTL language codes */\n rtlLanguages: string[];\n /**\n * Fallback language map of resource in case translation in language does not exist.\n * translate to unsupported language will try to map to supportedLocales from below property.\n *\n * @example\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR,\n * translate to en-NZ -> fallback to en-GB, translate to en -> fallback to en-GB.\n */\n fallbackLocalesMap?: {\n [supportedLocale: string]: string;\n };\n /** Fallback language of resource in case translation in language does not exist */\n fallbackLanguage: string;\n /** Path relative to published folder where webpack will copy translation bundles */\n bundlesOutputPath: string;\n /** Debug mode switch */\n debugMode: boolean;\n /** Query parameters for fetching the localization resources */\n queryParams?: {[key: string]: string};\n /** Fetch options object as per https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters */\n fetchOptions?: RequestInit;\n /** Enable the ability to switch the translations on and off at runtime. */\n enableTranslationDeactivation: boolean;\n /**\n * Merge the translations from DynamicContentPath with the local translations\n * Warning: Enable this option will download two localization bundles and can delay the display of the text on application first page\n *\n * @default false\n */\n mergeWithLocalTranslations: boolean;\n}\n\n/**\n * Default configuration for LocalizationModule\n */\nexport const DEFAULT_LOCALIZATION_CONFIGURATION: LocalizationConfiguration = {\n supportedLocales: [],\n endPointUrl: '',\n useDynamicContent: false,\n rtlLanguages: ['ar', 'he'],\n fallbackLanguage: 'en',\n bundlesOutputPath: '',\n debugMode: false,\n enableTranslationDeactivation: false,\n mergeWithLocalTranslations: false\n};\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { TranslateCompiler } from '@ngx-translate/core';\nimport { IntlMessageFormat, Options } from 'intl-messageformat';\n\n/**\n * Options for Lazy Message Format compiler\n */\nexport interface LazyMessageFormatConfig extends Options {\n /**\n * Enables compiled translation caching\n *\n * @default true\n */\n enableCache?: boolean;\n\n /**\n * Enables HTML in translation\n *\n * @default true\n */\n ignoreTag?: boolean;\n}\n\n/**\n * Message format configuration default value\n */\nexport const lazyMessageDefaultConfig: LazyMessageFormatConfig = {\n enableCache: true,\n ignoreTag: true\n};\n\n/** Message Format configuration Token */\nexport const MESSAGE_FORMAT_CONFIG = new InjectionToken<LazyMessageFormatConfig>('Message Format configuration');\n\n/**\n * This compiler expects ICU syntax and compiles the expressions with messageformat.js\n * Compare to ngx-translate-messageformat-compiler package, the compilation of the translation is done only on demand\n */\n@Injectable()\nexport class TranslateMessageFormatLazyCompiler extends TranslateCompiler {\n\n /** Configuration */\n private config: LazyMessageFormatConfig;\n\n /** Cache of compiled translations */\n private cache: { [x: string]: IntlMessageFormat } = {};\n\n constructor(@Optional() @Inject(MESSAGE_FORMAT_CONFIG) config?: LazyMessageFormatConfig) {\n super();\n\n this.config = config ? { ...lazyMessageDefaultConfig, ...config } : lazyMessageDefaultConfig;\n }\n\n /**\n * Clear the cache of the compiled translations\n */\n public clearCache() {\n this.cache = {};\n }\n\n /** @inheritDoc */\n public compile(value: string, lang: string): (params: any) => string {\n return (params: any) => (new IntlMessageFormat(value, lang, undefined, this.config).format(params) as string);\n }\n\n /** @inheritDoc */\n public compileTranslations(translations: {[x: string]: any}, lang: string) {\n type CompiledTranslationMap = {[key in keyof typeof translations]: (params: any) => string};\n\n const compilingStrategy = this.config.enableCache ?\n (acc: CompiledTranslationMap, key: string) => {\n acc[key] = (params: any) => {\n const cached = this.cache[`${lang}_${key}`];\n if (cached) {\n return cached.format(params) as string;\n }\n\n const newCachedItem = new IntlMessageFormat(translations[key], lang, undefined, this.config);\n this.cache[`${lang}_${key}`] = newCachedItem;\n return newCachedItem.format(params) as string;\n };\n return acc;\n } :\n\n (acc: CompiledTranslationMap, key: string) => {\n acc[key] = (params: any) => new IntlMessageFormat(translations[key], lang, undefined, this.config).format(params) as string;\n return acc;\n };\n\n return Object.keys(translations)\n .reduce<CompiledTranslationMap>(compilingStrategy, {});\n }\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SetStateActionPayload } from '@o3r/core';\nimport { LocalizationOverrideState } from './localization-override.state';\n\n/** Actions */\nconst ACTION_SET = '[LocalizationOverride] set';\n\n/**\n * Clear all overrides and fill the store with the payload\n */\nexport const setLocalizationOverride = createAction(ACTION_SET, props<SetStateActionPayload<LocalizationOverrideState>>());\n","import {ActionCreator, createReducer, on, ReducerTypes} from '@ngrx/store';\nimport * as actions from './localization-override.actions';\nimport { LocalizationOverrideState} from './localization-override.state';\n\n/**\n * LocalizationOverride Store initial value\n */\nexport const localizationOverrideInitialState: LocalizationOverrideState = {localizationOverrides: {}};\n\n/**\n * List of basic actions for LocalizationOverride Store\n */\nexport const localizationOverrideReducerFeatures: ReducerTypes<LocalizationOverrideState, ActionCreator[]>[] = [\n on(actions.setLocalizationOverride, (_state, payload) => ({...payload.state}))\n];\n\n/**\n * LocalizationOverride Store reducer\n */\nexport const localizationOverrideReducer = createReducer(\n localizationOverrideInitialState,\n ...localizationOverrideReducerFeatures\n);\n","/**\n * LocalizationOverride store state\n */\nexport interface LocalizationOverrideState {\n /** Mapping of initial localization keys to the one they are replaced with */\n localizationOverrides : Record<string,string>;\n}\n\n/**\n * Name of the LocalizationOverride Store\n */\nexport const LOCALIZATION_OVERRIDE_STORE_NAME = 'localizationOverride';\n\n/**\n * LocalizationOverride Store Interface\n */\nexport interface LocalizationOverrideStore {\n /** LocalizationOverride state */\n [LOCALIZATION_OVERRIDE_STORE_NAME]: LocalizationOverrideState;\n}\n","import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { Action, ActionReducer, StoreModule } from '@ngrx/store';\n\nimport { localizationOverrideReducer } from './localization-override.reducer';\nimport { LOCALIZATION_OVERRIDE_STORE_NAME, LocalizationOverrideState } from './localization-override.state';\n\n/** Token of the LocalizationOverride reducer */\nexport const LOCALIZATION_OVERRIDE_REDUCER_TOKEN = new InjectionToken<ActionReducer<LocalizationOverrideState, Action>>('Feature LocalizationOverride Reducer');\n\n/** Provide default reducer for LocalizationOverride store */\nexport function getDefaultLocalizationOverrideReducer() {\n return localizationOverrideReducer;\n}\n\n@NgModule({\n imports: [\n StoreModule.forFeature(LOCALIZATION_OVERRIDE_STORE_NAME, LOCALIZATION_OVERRIDE_REDUCER_TOKEN)\n ],\n providers: [\n { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: getDefaultLocalizationOverrideReducer }\n ]\n})\nexport class LocalizationOverrideStoreModule {\n public static forRoot<T extends LocalizationOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<LocalizationOverrideStoreModule> {\n return {\n ngModule: LocalizationOverrideStoreModule,\n providers: [\n { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: reducerFactory }\n ]\n };\n }\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { LOCALIZATION_OVERRIDE_STORE_NAME, LocalizationOverrideState } from './localization-override.state';\n\n/** Select LocalizationOverride State */\nexport const selectLocalizationOverrideState = createFeatureSelector<LocalizationOverrideState>(LOCALIZATION_OVERRIDE_STORE_NAME);\n\n/** Select all localization override map */\nexport const selectLocalizationOverride = createSelector(selectLocalizationOverrideState, (state) => state?.localizationOverrides || {});\n","import { Serializer } from '@o3r/core';\nimport { localizationOverrideInitialState } from './localization-override.reducer';\nimport { LocalizationOverrideState } from './localization-override.state';\n\nexport const localizationOverrideStorageDeserializer = (rawObject: any) => {\n if (!rawObject) {\n return localizationOverrideInitialState;\n }\n return rawObject;\n};\n\nexport const localizationOverrideStorageSync: Serializer<LocalizationOverrideState> = {\n deserialize: localizationOverrideStorageDeserializer\n};\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationConfiguration } from '../core';\n\n/** Localization Configuration Token */\nexport const LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<LocalizationConfiguration>('Localization Configuration injection token');\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoggerService } from '@o3r/logger';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\nimport { LocalizationConfiguration } from '../core/localization.configuration';\nimport { LocalizationOverrideStore, selectLocalizationOverride } from '../stores/index';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\n/**\n * Service which is wrapping the configuration logic of TranslateService from ngx-translate\n * Any application willing to use localization just needs to inject LocalizationService\n * in the root component and call its configure() method.\n */\n@Injectable()\nexport class LocalizationService {\n\n private readonly localeSplitIdentifier: string = '-';\n\n /**\n * Internal subject that we use to track changes between keys only and translation mode\n */\n private _showKeys$ = new BehaviorSubject(false);\n\n /**\n * Map of localization keys to replace a key to another\n */\n private keyMapping$?: Observable<Record<string, any | undefined>>;\n\n /**\n * _showKeys$ exposed as an Observable\n */\n public showKeys$ = this._showKeys$.asObservable();\n\n constructor(\n private translateService: TranslateService,\n private logger: LoggerService,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private configuration: LocalizationConfiguration,\n @Optional() private store?: Store<LocalizationOverrideStore>) {\n this.configure();\n if (this.store) {\n this.keyMapping$ = this.store.pipe(\n select(selectLocalizationOverride)\n );\n }\n }\n\n /**\n * This will handle the fallback language hierarchy to find out fallback language.\n * supportedLocales language has highest priority, next priority goes to fallbackLocalesMap and default would be\n * fallbackLanguage.\n *\n * @param language Selected language.\n * @returns selected language if supported, fallback language otherwise.\n */\n private checkFallbackLocalesMap<T extends string | undefined>(language: T) {\n if (language && this.configuration.supportedLocales.indexOf(language) === -1) {\n const closestSupportedLanguageCode = this.getFirstClosestSupportedLanguageCode(language);\n const fallbackForLanguage = this.getFallbackMapLangCode(language);\n const fallbackStrategyDebug = fallbackForLanguage && ' associated fallback language ' ||\n closestSupportedLanguageCode && ' closest supported language ' ||\n this.configuration.fallbackLanguage && ' configured default language ';\n const fallbackLang = fallbackForLanguage || closestSupportedLanguageCode || this.configuration.fallbackLanguage || language;\n if (language !== fallbackLang) {\n this.logger.debug(`Non supported languages ${language} will fallback to ${fallbackStrategyDebug} ${fallbackLang}`);\n }\n return fallbackLang;\n } else if (!language) {\n this.logger.debug('Language is not defined');\n }\n return language;\n }\n\n /**\n * This function checks if fallback language can be provided from fallbackLocalesMap.\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR\n * translate to en-NZ -> fallback to en-GB\n *\n * @param language Selected language.\n * @returns Fallback language if available, undefined otherwise.\n */\n private getFallbackMapLangCode(language: string): string | undefined {\n const fallbackLocalesMap = this.configuration.fallbackLocalesMap;\n const [locale] = language.split(this.localeSplitIdentifier);\n\n return fallbackLocalesMap && (fallbackLocalesMap[language] || fallbackLocalesMap[locale]);\n\n }\n\n /**\n * This function checks if closest supported language available incase of selected language is not\n * supported language.\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR']\n * translate to en-CA -> fallback to en-GB\n *\n * @param language Selected language.\n * @returns Closest supported language if available, undefined otherwise.\n */\n private getFirstClosestSupportedLanguageCode(language: string): string | undefined {\n\n const [locale] = language.split(this.localeSplitIdentifier);\n const firstClosestRegx = new RegExp(`^${locale}${this.localeSplitIdentifier}?`, 'i');\n\n return this.configuration.supportedLocales.find((supportedLang) => firstClosestRegx.test(supportedLang));\n }\n\n /**\n * Returns a stream of translated values of a key which updates whenever the language changes.\n *\n * @param translationKey Key to translate\n * @param interpolateParams Object to use in translation binding\n * @returns A stream of the translated key\n */\n private getTranslationStream(translationKey: string, interpolateParams?: object) {\n const translation$ = this.translateService.stream(translationKey, interpolateParams).pipe(\n map((value: string) => this.configuration.debugMode ? `${translationKey} - ${value}` : value)\n );\n\n if (!this.configuration.enableTranslationDeactivation) {\n return translation$;\n }\n\n return combineLatest([\n translation$,\n this.showKeys$\n ]).pipe(\n map(([value, showKeys]) => showKeys ? translationKey : value)\n );\n }\n\n /**\n * Configures TranslateService and registers locales. This method is called from the application level.\n */\n public configure() {\n const language = this.checkFallbackLocalesMap(this.configuration.language || this.configuration.fallbackLanguage);\n this.translateService.addLangs(this.configuration.supportedLocales);\n this.translateService.setDefaultLang(language);\n this.useLanguage(language);\n }\n\n /**\n * Wrapper to call the ngx-translate service TranslateService method getLangs().\n */\n public getLanguages() {\n return this.translateService.getLangs();\n }\n\n /**\n * Wrapper to call the ngx-translate service TranslateService method use(language).\n *\n * @param language\n */\n public useLanguage(language: string): Observable<any> {\n\n language = this.checkFallbackLocalesMap(language);\n return this.translateService.use(language);\n }\n\n /**\n * Wrapper to get the ngx-translate service TranslateService currentLang.\n */\n public getCurrentLanguage() {\n return this.translateService.currentLang;\n }\n\n /**\n * Get the instance of the ngx-translate TranslateService used by LocalizationService.\n */\n public getTranslateService() {\n return this.translateService;\n }\n\n /**\n * Toggle the ShowKeys mode between active and inactive.\n *\n * @param value if specified, set the ShowKeys mode to value. If not specified, toggle the ShowKeys mode.\n */\n public toggleShowKeys(value?: boolean) {\n if (!this.configuration.enableTranslationDeactivation) {\n throw new Error('Translation deactivation is not enabled. Please set the LocalizationConfiguration property \"enableTranslationDeactivation\" accordingly.');\n }\n const newValue = value !== undefined ? value : !this.showKeys;\n this._showKeys$.next(newValue);\n }\n\n /**\n * Return the current value of debug show/hide translation keys.\n */\n public get showKeys() {\n return this._showKeys$.value;\n }\n\n /**\n * Get an observable of translation key after global mapping\n *\n * @param requestedKey Original translation key\n */\n public getKey(requestedKey: string) {\n if (this.keyMapping$) {\n return this.keyMapping$.pipe(\n map((keyMapping) => keyMapping && keyMapping[requestedKey] || requestedKey),\n distinctUntilChanged()\n );\n } else {\n return of(requestedKey);\n }\n }\n\n /**\n * Returns a stream of translated values of a key which updates whenever the language changes.\n *\n * @param key Key to translate\n * @param interpolateParams Object to use in translation binding\n * @returns A stream of the translated key\n */\n public translate(key: string, interpolateParams?: object) {\n return this.getKey(key).pipe(\n switchMap((translationKey) => this.getTranslationStream(translationKey, interpolateParams)),\n shareReplay(1)\n );\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Inject, Input } from '@angular/core';\nimport { TranslateDirective, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n/**\n * TranslateDirective class adding debug functionality\n */\n@Directive({\n selector: '[translate],[ngx-translate]'\n})\nexport class LocalizationTranslateDirective extends TranslateDirective {\n /**\n * Internal subscription to the LocalizationService showKeys mode changes\n */\n private onShowKeysChange?: Subscription;\n\n /**\n * Should we display keys instead of translations\n */\n private showKeys = false;\n\n /**\n * Internal subscription to the LocalizationService key mapping\n */\n private onKeyChange?: Subscription;\n\n /** @inheritdoc */\n @Input()\n public set translate(key: string) {\n if (key && key !== this.key) {\n if (this.onKeyChange) {\n this.onKeyChange.unsubscribe();\n }\n this.onKeyChange = this.localizationService.getKey(key).subscribe((newKey) => {\n this.key = newKey;\n this.checkNodes();\n });\n }\n }\n\n constructor(private localizationService: LocalizationService, translateService: TranslateService, element: ElementRef, _ref: ChangeDetectorRef,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfig: LocalizationConfiguration) {\n super(translateService, element, _ref);\n\n if (localizationConfig.enableTranslationDeactivation) {\n this.onShowKeysChange = localizationService.showKeys$.subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.checkNodes(true);\n });\n }\n }\n\n /**\n * Overriding parent's setContent to plug debugging feature\n *\n * @param node\n * @param content\n */\n public setContent(node: any, content: string): void {\n const key = node.originalContent;\n const newContent = this.showKeys ? key : this.localizationConfig.debugMode && key ? `${key as string} - ${content}` : content;\n if (typeof node.textContent !== 'undefined' && node.textContent !== null) {\n node.textContent = newContent;\n } else {\n node.data = newContent;\n }\n }\n\n public ngOnDestroy() {\n super.ngOnDestroy();\n if (this.onShowKeysChange) {\n this.onShowKeysChange.unsubscribe();\n }\n if (this.onKeyChange) {\n this.onKeyChange?.unsubscribe();\n }\n }\n}\n","import { ChangeDetectorRef, Inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n/**\n * TranslatePipe class adding debug functionality\n */\n@Pipe({name: 'translate', pure: false})\nexport class LocalizationTranslatePipe extends TranslatePipe implements PipeTransform {\n /**\n * Internal subscription to the LocalizationService showKeys mode changes\n */\n private onShowKeysChange?: Subscription;\n\n /**\n * Internal subscription to the LocalizationService key mapping\n */\n private onKeyChange?: Subscription;\n\n /**\n * Should we display keys instead of translations\n */\n private showKeys = false;\n\n /** last key queried */\n private lastQueryKey?: string;\n\n /** last key resolved */\n private lastResolvedKey?: string;\n\n constructor(private localizationService: LocalizationService, translateService: TranslateService, private changeDetector: ChangeDetectorRef,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfig: LocalizationConfiguration) {\n super(translateService, changeDetector);\n\n if (localizationConfig.enableTranslationDeactivation) {\n this.onShowKeysChange = this.localizationService.showKeys$.subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.changeDetector.markForCheck();\n });\n }\n }\n\n /**\n * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled\n *\n * @inheritdoc\n */\n public transform(query: string, ...args: any[]): any {\n if (this.showKeys) {\n return query;\n }\n\n if (query !== this.lastQueryKey) {\n this.lastQueryKey = query;\n if (this.onKeyChange) {\n this.onKeyChange.unsubscribe();\n }\n this.onKeyChange = this.localizationService.getKey(query).subscribe((key) => {\n this.lastResolvedKey = key;\n this.changeDetector.markForCheck();\n });\n\n }\n\n if (this.lastResolvedKey) {\n const value = super.transform(this.lastResolvedKey, ...args);\n\n if (this.localizationConfig.debugMode) {\n return `${this.lastResolvedKey} - ${value as string}`;\n }\n\n return value;\n }\n\n return this.value;\n }\n\n public ngOnDestroy() {\n super.ngOnDestroy();\n if (this.onShowKeysChange) {\n this.onShowKeysChange.unsubscribe();\n }\n }\n}\n","import {CurrencyPipe} from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular CurrencyPipe taking the current lang into consideration\n */\n@Pipe({\n name: 'currency',\n pure: false\n})\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: number | string, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(value: null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): null;\n public transform(\n // Expose same signatures as angular CurencyPipe\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n value: number | string | null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(\n value: number | string | null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean, digitsInfo?: string, locale?: string): string | null {\n return super.transform(value, currencyCode, display, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import {DatePipe} from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular DatePipe taking the current lang into consideration\n */\n@Pipe({\n name: 'date',\n pure: false\n})\nexport class LocalizedDatePipe extends DatePipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string\n | null;\n public transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n public transform(\n value: Date | string | number | null | undefined, format?: string, timezone?: string,\n locale?: string): string | null;\n public transform(\n value: Date | string | number | null | undefined, format = 'mediumDate', timezone?: string,\n locale?: string): string | null {\n if (this.localizationService.showKeys) {\n return format;\n } else {\n return super.transform(value, format, timezone, locale || this.localizationService.getCurrentLanguage());\n }\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport {ChangeDetectorRef, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {LocalizationService} from './localization.service';\n\n/**\n * Native angular DecimalPipe taking the current lang into consideration\n */\n@Pipe({\n name: 'decimal',\n pure: false\n})\nexport class LocalizedDecimalPipe extends DecimalPipe implements OnDestroy, PipeTransform {\n private onLangChange: Subscription;\n\n constructor(private localizationService: LocalizationService, private changeDetectorRef: ChangeDetectorRef) {\n super(localizationService.getCurrentLanguage());\n this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\n public transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\n public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null {\n return super.transform(value, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n\n public ngOnDestroy(): void {\n this.onLangChange.unsubscribe();\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationConfiguration } from '../core';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\n/**\n * Service for handling the text direction based on the LocalizationConfiguration\n */\n@Injectable()\nexport class TextDirectionService {\n private subscription?: Subscription;\n private renderer: Renderer2;\n\n constructor(\n private translateService: TranslateService,\n @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private configuration: LocalizationConfiguration,\n private rendererFactory: RendererFactory2,\n private directionality: Directionality) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n /**\n * Updates the dir attribute on body HTML tag.\n *\n * @returns a subscription that updates the dir attribute\n */\n public onLangChangeSubscription() {\n if (this.subscription && !this.subscription.closed) {\n return this.subscription;\n }\n this.subscription = this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {\n const direction = this.configuration.rtlLanguages.indexOf(event.lang.split('-')[0]) > -1 ? 'rtl' : 'ltr';\n this.renderer.setAttribute(document.body, 'dir', direction);\n this.directionality.change.emit(direction);\n });\n return this.subscription;\n }\n}\n","import { DIR_DOCUMENT, Direction, Directionality } from '@angular/cdk/bidi';\n\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { startWith } from 'rxjs/operators';\n\n@Injectable()\nexport class TextDirectionality extends Directionality {\n /**\n * The current 'ltr' or 'rtl' value.\n *\n * @override\n */\n public value!: Direction;\n\n constructor(@Optional() @Inject(DIR_DOCUMENT) _document?: any) {\n super(_document);\n this.change\n .pipe(startWith(this.value))\n .subscribe((value: Direction) => this.value = value);\n }\n\n public ngOnDestroy() {\n this.change.complete();\n }\n}\n","import { BidiModule, Directionality } from '@angular/cdk/bidi';\nimport { CommonModule, CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { InjectionToken, LOCALE_ID, ModuleWithProviders, NgModule, Optional } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DynamicContentModule } from '@o3r/dynamic-content';\nimport { DEFAULT_LOCALIZATION_CONFIGURATION, LocalizationConfiguration } from '../core';\nimport { LocalizationTranslateDirective } from './localization-translate.directive';\nimport { LocalizationTranslatePipe } from './localization-translate.pipe';\nimport { LocalizationService } from './localization.service';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\nimport { LocalizedCurrencyPipe } from './localized-currency.pipe';\nimport { LocalizedDatePipe } from './localized-date.pipe';\nimport { LocalizedDecimalPipe } from './localized-decimal.pipe';\nimport { TextDirectionService } from './text-direction.service';\nimport { TextDirectionality } from './text-directionality.service';\n\n/**\n * creates LocalizationConfiguration, which is used if the application\n *\n * @param configuration Localization configuration\n */\nexport function createLocalizationConfiguration(configuration?: Partial<LocalizationConfiguration>): LocalizationConfiguration {\n return {\n ...DEFAULT_LOCALIZATION_CONFIGURATION,\n ...(configuration || {})\n };\n}\n\n/**\n * Factory to inject the LOCALE_ID token with the current language into Angular context\n *\n * @param localizationService Localization service\n */\nexport function localeIdNgBridge(localizationService: LocalizationService) {\n return localizationService.getCurrentLanguage();\n}\n\n/** Custom Localization Configuration Token to override default localization configuration */\nexport const CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<Partial<LocalizationConfiguration>>('Partial Localization configuration');\n\n@NgModule({\n declarations: [LocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n imports: [TranslateModule, BidiModule, DynamicContentModule, CommonModule],\n exports: [TranslateModule, LocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n providers: [\n {provide: LOCALIZATION_CONFIGURATION_TOKEN, useFactory: createLocalizationConfiguration, deps: [[new Optional(), CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN]]},\n {provide: LOCALE_ID, useFactory: localeIdNgBridge, deps: [LocalizationService]},\n {provide: Directionality, useClass: TextDirectionality},\n {provide: DatePipe, useClass: LocalizedDatePipe},\n {provide: DecimalPipe, useClass: LocalizedDecimalPipe},\n {provide: CurrencyPipe, useClass: LocalizedCurrencyPipe},\n TextDirectionService\n ]\n})\nexport class LocalizationModule {\n /**\n * forRoot method should be called only once from the application index.ts\n * It will do several things:\n * - provide the configuration for the whole application\n * - register all locales specified in the LocalizationConfiguration\n * - configure TranslateService\n * - inject LOCALE_ID token\n *\n * @param configuration LocalizationConfiguration\n */\n public static forRoot(\n configuration?: () => Partial<LocalizationConfiguration>\n ): ModuleWithProviders<LocalizationModule> {\n return {\n ngModule: LocalizationModule,\n providers: [\n LocalizationService,\n ...(configuration ? [{\n provide: CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN,\n useFactory: configuration\n }] : [])\n ]\n };\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\n\nimport { LocalizationConfiguration } from '../core';\n\nimport { combineLatest, from, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\n\nimport { DynamicContentService } from '@o3r/dynamic-content';\nimport { LoggerService } from '@o3r/logger';\n\nconst JSON_EXT = '.json';\n\n/**\n * This class is responsible for loading translation bundles from remote or local endpoints depending on the LocalizationConfiguration.\n * Fallback mechanism ensures that if a bundle in some language cannot be fetched remotely\n * we try to fetch the same language bundle locally (bundles stored inside the application)\n * and finally load the fallback language bundle (if all previous fetches failed)\n */\n@Injectable()\nexport class TranslationsLoader implements TranslateLoader {\n constructor(@Inject(LOCALIZATION_CONFIGURATION_TOKEN) private localizationConfiguration: LocalizationConfiguration,\n @Optional() private readonly logger?: LoggerService,\n @Optional() private dynamicContentService?: DynamicContentService) {}\n\n /**\n * Download a language bundle file\n *\n * @param url Url to the bundle file\n */\n private downloadLanguageBundle$(url: string) {\n const queryParams = this.localizationConfiguration.queryParams;\n\n let queryString = '';\n if (queryParams) {\n queryString = '?' + Object.keys(queryParams).map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key])).join('&');\n }\n return from(fetch(url + queryString, this.localizationConfiguration.fetchOptions)).pipe(\n switchMap((response) => from(response.json()))\n );\n }\n\n /**\n * @inheritdoc\n */\n public getTranslation(lang: string): Observable<any> {\n const fallback = this.localizationConfiguration.fallbackLanguage;\n let localizationPath$ = of(this.localizationConfiguration.endPointUrl);\n\n if (this.localizationConfiguration.useDynamicContent) {\n if (!this.dynamicContentService) {\n throw Error('Dynamic Content is not available. Please verify you have imported the module DynamicContentModule in your application');\n }\n localizationPath$ = this.dynamicContentService.getContentPathStream(this.localizationConfiguration.endPointUrl);\n }\n\n return localizationPath$.pipe(\n switchMap((localizationPath: string) => {\n if (localizationPath) {\n\n const localizationBundle$ = this.downloadLanguageBundle$(localizationPath + lang + JSON_EXT);\n\n if (this.localizationConfiguration.mergeWithLocalTranslations) {\n return combineLatest([\n localizationBundle$.pipe(catchError(() => of({}))),\n this.getTranslationFromLocal(lang, fallback).pipe(\n map((translations) => {\n Object.keys(translations).forEach((key) => translations[key] = `[local] ${translations[key] as string}`);\n return translations;\n })\n )\n ]).pipe(map(([dynamicTranslations, localTranslations]) => ({...localTranslations, ...dynamicTranslations})));\n }\n\n /*\n * if endPointUrl is specified by the configuration then:\n * 1. try to load lang from endPointUrl\n * 2. if 1 fails then try to load from the app (local file)\n */\n return localizationBundle$.pipe(\n catchError(() => {\n this.logger?.warn(`Failed to load the localization resource from ${localizationPath + lang + JSON_EXT}, trying from the application resources`);\n return this.getTranslationFromLocal(lang, fallback);\n })\n );\n }\n /*\n * else if endPointUrl NOT specified by then configuration then:\n * 1. try to load from the app (local file)\n */\n this.logger?.warn('No localization endpoint specified, localization fetch from application resources');\n return this.getTranslationFromLocal(lang, fallback);\n })\n );\n }\n\n /**\n *\n * Fetches localization bundles from published folder (internal to application)\n *\n * 1. try to load lang from local\n * 2. if 1 fails try to load fallback lang but only if it's different from lang in 1\n *\n * @param lang - language of the bundle\n * @param fallbackLanguage - fallback language in case bundle in language not found\n */\n public getTranslationFromLocal(lang: string, fallbackLanguage: string): Observable<any> {\n const pathPrefix: string = this.localizationConfiguration.bundlesOutputPath;\n return this.downloadLanguageBundle$(pathPrefix + lang + JSON_EXT).pipe(\n catchError(() => {\n if (lang !== fallbackLanguage) {\n this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}. Application will fallback to ${fallbackLanguage}`);\n return this.downloadLanguageBundle$(pathPrefix + fallbackLanguage + JSON_EXT).pipe(\n catchError(() => of({}))\n );\n } else {\n this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}.`);\n return of({});\n }\n })\n );\n }\n}\n","import { FactoryProvider, Optional } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { DynamicContentService } from '@o3r/dynamic-content';\nimport { LoggerService } from '@o3r/logger';\nimport { LocalizationConfiguration } from '../core';\nimport { LOCALIZATION_CONFIGURATION_TOKEN } from './localization.token';\nimport { TranslationsLoader } from './translations-loader';\n\n/**\n * Creates a loader of translations bundles based on the configuration\n * (endPointUrl and language determine which bundle we load and where do we fetch it from)\n *\n * @param localizationConfiguration\n * @param logger service to handle the log of warning and errors\n * @param dynamicContentService (optional)\n */\nexport function createTranslateLoader(localizationConfiguration: LocalizationConfiguration, logger?: LoggerService, dynamicContentService?: DynamicContentService) {\n return new TranslationsLoader(localizationConfiguration, logger, dynamicContentService);\n}\n\n/**\n * TranslateLoader provider, using framework's TranslationsLoader class\n */\nexport const translateLoaderProvider: FactoryProvider = {\n provide: TranslateLoader,\n useFactory: createTranslateLoader,\n deps: [LOCALIZATION_CONFIGURATION_TOKEN, [new Optional(), LoggerService], [new Optional(), DynamicContentService]]\n};\n","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LocalizationService } from '../tools';\n\n@Injectable()\nexport class OtterLocalizationDevtools {\n constructor(private localizationService: LocalizationService) {}\n\n /**\n * Show localization keys\n *\n * @param value value enforced by the DevTools extension\n */\n public showLocalizationKeys(value?: boolean): void {\n this.localizationService.toggleShowKeys(value);\n }\n\n /**\n * Returns the current language\n */\n public getCurrentLanguage() {\n return this.localizationService.getCurrentLanguage();\n }\n\n /**\n * Setup a listener on language change\n * @param fn called when the language is changed in the app\n */\n public onLanguageChange(fn: (language: string) => any): Subscription {\n return this.localizationService\n .getTranslateService()\n .onLangChange\n .subscribe(({ lang }) => {\n fn(lang);\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: LocalizationDevtoolsServiceOptions = {\n isActivatedOnBootstrap: false,\n isActivatedOnBootstrapWhenCMSContext: true\n};\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS: InjectionToken<LocalizationDevtoolsServiceOptions> = new InjectionToken<LocalizationDevtoolsServiceOptions>('Otter Localization Devtools options');\n","/* eslint-disable no-console */\nimport { ApplicationRef, Inject, Injectable, Optional } from '@angular/core';\nimport type { ContextualizationDataset, DevtoolsServiceInterface, WindowWithDevtools } from '@o3r/core';\nimport { lastValueFrom, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { LocalizationService } from '../tools';\nimport { LocalizationContextualizationDevtools, LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\n@Injectable()\nexport class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {\n\n /** Name of the Window property to access to the devtools */\n public static readonly windowModuleName = 'localization';\n\n constructor(\n private readonly localizationDevtools: OtterLocalizationDevtools,\n private readonly localizationService: LocalizationService,\n private readonly appRef: ApplicationRef,\n @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS\n ) {\n if (\n this.options.isActivatedOnBootstrap\n || (\n this.options.isActivatedOnBootstrapWhenCMSContext\n && (document.body.dataset as ContextualizationDataset).cmscontext === 'true'\n )\n ) {\n this.activate();\n }\n }\n\n /** @inheritDoc */\n public activate() {\n const windowWithDevtools: WindowWithDevtools = window;\n // eslint-disable-next-line no-underscore-dangle\n windowWithDevtools._OTTER_DEVTOOLS_ ||= {};\n // eslint-disable-next-line no-underscore-dangle\n windowWithDevtools._OTTER_DEVTOOLS_[LocalizationDevtoolsConsoleService.windowModuleName] = this;\n\n console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);\n }\n\n /**\n * @inheritdoc\n */\n public showLocalizationKeys(value?: boolean): void | Promise<void> {\n this.localizationDevtools.showLocalizationKeys(value);\n this.appRef.tick();\n }\n\n /**\n * @inheritdoc\n */\n public getCurrentLanguage(): string | Promise<string> {\n const currentLanguage = this.localizationDevtools.getCurrentLanguage();\n return currentLanguage;\n }\n\n /**\n * @inheritdoc\n */\n public async switchLanguage(language: string): Promise<{ previous: string; requested: string; current: string }> {\n const previous = this.localizationDevtools.getCurrentLanguage();\n await lastValueFrom(this.localizationService.useLanguage(language));\n this.appRef.tick();\n const current = this.localizationDevtools.getCurrentLanguage();\n return {\n requested: language,\n previous,\n current\n };\n }\n\n /**\n * @inheritdoc\n */\n public onLanguageChange(fn: (language: string) => any): Subscription {\n return this.localizationDevtools.onLanguageChange(fn);\n }\n\n /**\n * @inheritdoc\n */\n public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n Object.entries(keyValues).map(([key, value]) => {\n this.localizationService.getTranslateService().set(key, value, language || this.localizationDevtools.getCurrentLanguage());\n });\n this.appRef.tick();\n }\n\n /**\n * @inheritdoc\n */\n public async reloadLocalizationKeys(language?: string) {\n const lang = language || this.localizationDevtools.getCurrentLanguage();\n const initialLocs = await lastValueFrom(\n this.localizationService\n .getTranslateService()\n .reloadLang(lang)\n .pipe(take(1))\n );\n return this.updateLocalizationKeys(initialLocs, lang);\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport { filterMessageContent } from '@o3r/core';\nimport { LoggerService } from '@o3r/logger';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { AvailableLocalizationMessageContents, LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\nconst isLocalizationMessage = (message: any): message is AvailableLocalizationMessageContents => {\n return message && message.dataType === 'displayLocalizationKeys';\n};\n\n@Injectable()\nexport class LocalizationDevtoolsMessageService implements OnDestroy {\n\n private subscriptions = new Subscription();\n\n constructor(\n private logger: LoggerService,\n private localizationDevTools: OtterLocalizationDevtools,\n @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {\n\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n /**\n * Function to handle the incoming messages from Otter Chrome DevTools extension\n *\n * @param event Event coming from the Otter Chrome DevTools extension\n * @param message\n */\n private handleEvents(message: AvailableLocalizationMessageContents) {\n this.logger.debug('Message handling by the localization service', message);\n\n switch (message.dataType) {\n case 'connect': {\n this.connectPlugin();\n break;\n }\n case 'displayLocalizationKeys': {\n this.localizationDevTools.showLocalizationKeys(message.toggle);\n break;\n }\n default: {\n this.logger.warn('Message ignored by the localization service', message);\n }\n }\n }\n\n /**\n * Function to connect the plugin to the Otter Chrome DevTools extension\n */\n private connectPlugin() {\n this.logger.debug('Otter DevTools is plugged to localization service of the application');\n }\n\n /** @inheritDoc */\n public activate() {\n this.subscriptions.add(\n fromEvent(window, 'message').pipe(filterMessageContent(isLocalizationMessage)).subscribe((e) => this.handleEvents(e))\n );\n }\n\n /** @inheritDoc */\n public ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { LocalizationModule } from '../tools/index';\nimport type { LocalizationDevtoolsServiceOptions } from './localization-devkit.interface';\nimport { LocalizationDevtoolsConsoleService } from './localization-devtools.console.service';\nimport { LocalizationDevtoolsMessageService } from './localization-devtools.message.service';\nimport { OtterLocalizationDevtools } from './localization-devtools.service';\nimport { OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, OTTER_LOCALIZATION_DEVTOOLS_OPTIONS } from './localization-devtools.token';\n\n@NgModule({\n imports: [\n LocalizationModule\n ],\n providers: [\n { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS },\n LocalizationDevtoolsMessageService,\n LocalizationDevtoolsConsoleService,\n OtterLocalizationDevtools\n ]\n})\nexport class LocalizationDevtoolsModule {\n\n /**\n * Initialize Otter Devtools\n *\n * @param options\n */\n public static instrument(options: Partial<LocalizationDevtoolsServiceOptions>): ModuleWithProviders<LocalizationDevtoolsModule> {\n return {\n ngModule: LocalizationDevtoolsModule,\n providers: [\n { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: { ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n LocalizationDevtoolsMessageService,\n LocalizationDevtoolsConsoleService,\n OtterLocalizationDevtools\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setLocalizationOverride","i1","i1.LocalizationService","i2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@o3r/localization",
3
- "version": "9.6.0-alpha.40",
3
+ "version": "9.6.0-alpha.42",
4
4
  "description": "This module provides a runtime dynamic language/translation support and debug tools.",
5
5
  "keywords": [
6
6
  "localization",
@@ -34,11 +34,11 @@
34
34
  "@formatjs/intl-numberformat": "^8.0.2",
35
35
  "@ngrx/store": "~16.3.0",
36
36
  "@ngx-translate/core": "~15.0.0",
37
- "@o3r/core": "^9.6.0-alpha.40",
38
- "@o3r/dynamic-content": "^9.6.0-alpha.40",
39
- "@o3r/extractors": "^9.6.0-alpha.40",
40
- "@o3r/logger": "^9.6.0-alpha.40",
41
- "@o3r/schematics": "^9.6.0-alpha.40",
37
+ "@o3r/core": "^9.6.0-alpha.42",
38
+ "@o3r/dynamic-content": "^9.6.0-alpha.42",
39
+ "@o3r/extractors": "^9.6.0-alpha.42",
40
+ "@o3r/logger": "^9.6.0-alpha.42",
41
+ "@o3r/schematics": "^9.6.0-alpha.42",
42
42
  "@schematics/angular": "~16.2.0",
43
43
  "chokidar": "^3.5.2",
44
44
  "intl-messageformat": "~10.5.0",
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-registration.d.ts","sourceRoot":"","sources":["../../../../schematics/ng-add/helpers/devtools-registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAMvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,YAAmB,qBAAqB,KAAG,QAAQ,IAAI,CAQnF,CAAC"}
1
+ {"version":3,"file":"devtools-registration.d.ts","sourceRoot":"","sources":["../../../../schematics/ng-add/helpers/devtools-registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAOvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,YAAmB,qBAAqB,KAAG,QAAQ,IAAI,CAgBnF,CAAC"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerDevtools = void 0;
4
+ const schematics_1 = require("@angular-devkit/schematics");
4
5
  const path = require("node:path");
5
6
  const DEVTOOL_MODULE_NAME = 'LocalizationDevtoolsModule';
6
- const DEVTOOL_SERVICE_NAME = 'LocalizationDevtoolsService';
7
+ const MESSAGE_DEVTOOL_SERVICE_NAME = 'LocalizationDevtoolsMessageService';
8
+ const CONSOLE_DEVTOOL_SERVICE_NAME = 'LocalizationDevtoolsConsoleService';
7
9
  const PACKAGE_NAME = require(path.resolve(__dirname, '..', '..', '..', 'package.json')).name;
8
10
  /**
9
11
  * Register Devtools to the application
@@ -14,12 +16,20 @@ const PACKAGE_NAME = require(path.resolve(__dirname, '..', '..', '..', 'package.
14
16
  */
15
17
  const registerDevtools = async (options) => {
16
18
  const { registerDevtoolsToApplication } = await Promise.resolve().then(() => require('@o3r/schematics'));
17
- return registerDevtoolsToApplication({
18
- moduleName: DEVTOOL_MODULE_NAME,
19
- packageName: PACKAGE_NAME,
20
- serviceName: DEVTOOL_SERVICE_NAME,
21
- projectName: options.projectName
22
- });
19
+ return (0, schematics_1.chain)([
20
+ registerDevtoolsToApplication({
21
+ moduleName: DEVTOOL_MODULE_NAME,
22
+ packageName: PACKAGE_NAME,
23
+ serviceName: MESSAGE_DEVTOOL_SERVICE_NAME,
24
+ projectName: options.projectName
25
+ }),
26
+ registerDevtoolsToApplication({
27
+ moduleName: DEVTOOL_MODULE_NAME,
28
+ packageName: PACKAGE_NAME,
29
+ serviceName: CONSOLE_DEVTOOL_SERVICE_NAME,
30
+ projectName: options.projectName
31
+ })
32
+ ]);
23
33
  };
24
34
  exports.registerDevtools = registerDevtools;
25
35
  //# sourceMappingURL=devtools-registration.js.map