@o3r/transloco 0.0.0 → 14.4.0-rc.2
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.
- package/LICENSE +26 -0
- package/README.md +64 -0
- package/builders/helpers/localization-generator.d.ts +126 -0
- package/builders/helpers/localization-generator.d.ts.map +1 -0
- package/builders/helpers/localization-generator.js +303 -0
- package/builders/helpers/localization-generator.js.map +1 -0
- package/builders/i18n/index.d.ts +7 -0
- package/builders/i18n/index.d.ts.map +1 -0
- package/builders/i18n/index.js +39 -0
- package/builders/i18n/index.js.map +1 -0
- package/builders/i18n/schema.d.ts +30 -0
- package/builders/i18n/schema.d.ts.map +1 -0
- package/builders/i18n/schema.js +3 -0
- package/builders/i18n/schema.js.map +1 -0
- package/builders/i18n/schema.json +35 -0
- package/builders/localization/index.d.ts +23 -0
- package/builders/localization/index.d.ts.map +1 -0
- package/builders/localization/index.js +416 -0
- package/builders/localization/index.js.map +1 -0
- package/builders/localization/schema.d.ts +29 -0
- package/builders/localization/schema.d.ts.map +1 -0
- package/builders/localization/schema.js +3 -0
- package/builders/localization/schema.js.map +1 -0
- package/builders/localization/schema.json +78 -0
- package/builders/localization-extractor/index.d.ts +8 -0
- package/builders/localization-extractor/index.d.ts.map +1 -0
- package/builders/localization-extractor/index.js +181 -0
- package/builders/localization-extractor/index.js.map +1 -0
- package/builders/localization-extractor/schema.d.ts +25 -0
- package/builders/localization-extractor/schema.d.ts.map +1 -0
- package/builders/localization-extractor/schema.js +3 -0
- package/builders/localization-extractor/schema.js.map +1 -0
- package/builders/localization-extractor/schema.json +62 -0
- package/builders/localization-extractor/validations.d.ts +17 -0
- package/builders/localization-extractor/validations.d.ts.map +1 -0
- package/builders/localization-extractor/validations.js +54 -0
- package/builders/localization-extractor/validations.js.map +1 -0
- package/builders/metadata-check/helpers/index.d.ts +2 -0
- package/builders/metadata-check/helpers/index.d.ts.map +1 -0
- package/builders/metadata-check/helpers/index.js +5 -0
- package/builders/metadata-check/helpers/index.js.map +1 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts +14 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts.map +1 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js +34 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js.map +1 -0
- package/builders/metadata-check/index.d.ts +7 -0
- package/builders/metadata-check/index.d.ts.map +1 -0
- package/builders/metadata-check/index.js +12 -0
- package/builders/metadata-check/index.js.map +1 -0
- package/builders/metadata-check/schema.d.ts +5 -0
- package/builders/metadata-check/schema.d.ts.map +1 -0
- package/builders/metadata-check/schema.js +3 -0
- package/builders/metadata-check/schema.js.map +1 -0
- package/builders/metadata-check/schema.json +46 -0
- package/builders/package.json +3 -0
- package/builders.json +25 -0
- package/collection.json +29 -0
- package/fesm2022/o3r-transloco-rules-engine.mjs +57 -0
- package/fesm2022/o3r-transloco-rules-engine.mjs.map +1 -0
- package/fesm2022/o3r-transloco.mjs +1177 -0
- package/fesm2022/o3r-transloco.mjs.map +1 -0
- package/package.json +190 -2
- package/rules-engine/package.json +4 -0
- package/schemas/localization.metadata.schema.json +84 -0
- package/schemas/localization.schema.json +116 -0
- package/schemas/rules-engine.localization-action.schema.json +26 -0
- package/schematics/add-localization-key/index.d.ts +13 -0
- package/schematics/add-localization-key/index.d.ts.map +1 -0
- package/schematics/add-localization-key/index.js +227 -0
- package/schematics/add-localization-key/index.js.map +1 -0
- package/schematics/add-localization-key/schema.d.ts +20 -0
- package/schematics/add-localization-key/schema.d.ts.map +1 -0
- package/schematics/add-localization-key/schema.js +3 -0
- package/schematics/add-localization-key/schema.js.map +1 -0
- package/schematics/add-localization-key/schema.json +49 -0
- package/schematics/cms-adapter/index.d.ts +8 -0
- package/schematics/cms-adapter/index.d.ts.map +1 -0
- package/schematics/cms-adapter/index.js +81 -0
- package/schematics/cms-adapter/index.js.map +1 -0
- package/schematics/localization-base/index.d.ts +14 -0
- package/schematics/localization-base/index.d.ts.map +1 -0
- package/schematics/localization-base/index.js +359 -0
- package/schematics/localization-base/index.js.map +1 -0
- package/schematics/localization-base/templates/src/assets/locales/__empty__.gitkeep +0 -0
- package/schematics/localization-to-component/index.d.ts +13 -0
- package/schematics/localization-to-component/index.d.ts.map +1 -0
- package/schematics/localization-to-component/index.js +264 -0
- package/schematics/localization-to-component/index.js.map +1 -0
- package/schematics/localization-to-component/schema.d.ts +12 -0
- package/schematics/localization-to-component/schema.d.ts.map +1 -0
- package/schematics/localization-to-component/schema.js +3 -0
- package/schematics/localization-to-component/schema.js.map +1 -0
- package/schematics/localization-to-component/schema.json +31 -0
- package/schematics/localization-to-component/templates/__name__-localization.json +3 -0
- package/schematics/localization-to-component/templates/__name__-translation.ts.template +5 -0
- package/schematics/migration-localization-to-transloco/index.d.ts +8 -0
- package/schematics/migration-localization-to-transloco/index.d.ts.map +1 -0
- package/schematics/migration-localization-to-transloco/index.js +194 -0
- package/schematics/migration-localization-to-transloco/index.js.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.d.ts +15 -0
- package/schematics/migration-localization-to-transloco/schema.d.ts.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.js +3 -0
- package/schematics/migration-localization-to-transloco/schema.js.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.json +30 -0
- package/schematics/ng-add/helpers/devtools-registration.d.ts +8 -0
- package/schematics/ng-add/helpers/devtools-registration.d.ts.map +1 -0
- package/schematics/ng-add/helpers/devtools-registration.js +37 -0
- package/schematics/ng-add/helpers/devtools-registration.js.map +1 -0
- package/schematics/ng-add/index.d.ts +8 -0
- package/schematics/ng-add/index.d.ts.map +1 -0
- package/schematics/ng-add/index.js +62 -0
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/schema.d.ts +11 -0
- package/schematics/ng-add/schema.d.ts.map +1 -0
- package/schematics/ng-add/schema.js +3 -0
- package/schematics/ng-add/schema.js.map +1 -0
- package/schematics/ng-add/schema.json +38 -0
- package/schematics/package.json +3 -0
- package/types/o3r-transloco-rules-engine.d.ts +40 -0
- package/types/o3r-transloco-rules-engine.d.ts.map +1 -0
- package/types/o3r-transloco.d.ts +804 -0
- package/types/o3r-transloco.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"o3r-transloco.mjs","sources":["../../src/annotations/localization.ts","../../src/core/localization-configuration.ts","../../src/tools/localization-helpers.ts","../../src/tools/localization-token.ts","../../src/tools/translations-loader.ts","../../src/tools/localization-loader-provider.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-service.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/localization-module.ts","../../src/tools/localization-translate-directive.ts","../../src/tools/localization-translate-pipe.ts","../../src/devkit/localization-devtools.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-transloco.ts"],"sourcesContent":["import {\n deepFill,\n immutablePrimitive,\n otterComponentInfoPropertyName,\n} from '@o3r/core';\n\n/**\n * Decorator to pass localization url\n * @param url\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- decorator should start with a capital letter\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","/**\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 * @example Mapping of fallback languages\n * ```typescript\n * {\n * supportedLocales: ['en-GB', 'en-US', 'fr-FR'],\n * fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n * }\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 */\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 * @default false\n */\n mergeWithLocalTranslations: boolean;\n}\n\n/**\n * Default configuration for LocalizationModule\n */\nexport const DEFAULT_LOCALIZATION_CONFIGURATION: Readonly<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} as const;\n","/**\n * Formats a debug key string combining the translation key and its value.\n * Used across the localization service, pipe, and directive when debugMode is enabled.\n * @param key The translation key\n * @param value The translated value\n */\nexport function getDebugKey(key: string, value: string): string {\n return `${key} - ${value}`;\n}\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n LocalizationConfiguration,\n} from '../core';\n\n/** Localization Configuration Token */\nexport const LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<LocalizationConfiguration>('Localization Configuration injection token');\n","import {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n Translation,\n TranslocoLoader,\n} from '@jsverse/transloco';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n combineLatest,\n from,\n Observable,\n of,\n} from 'rxjs';\nimport {\n catchError,\n map,\n switchMap,\n} from 'rxjs/operators';\nimport {\n LocalizationConfiguration,\n} from '../core';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\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 TranslocoLoader {\n private readonly localizationConfiguration: LocalizationConfiguration = inject(LOCALIZATION_CONFIGURATION_TOKEN);\n private readonly logger? = inject(LoggerService, { optional: true });\n private readonly dynamicContentService? = inject(DynamicContentService, { optional: true });\n\n /**\n * Download a language bundle file\n * @param url Url to the bundle file\n */\n private downloadLanguageBundle$(url: string) {\n const queryParams = this.localizationConfiguration.queryParams;\n const parsedUrl = new URL(url, window.location.origin);\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => parsedUrl.searchParams.append(key, value));\n }\n return from(fetch(parsedUrl.href, this.localizationConfiguration.fetchOptions)).pipe(\n switchMap((response) => response.json() as Promise<Translation>)\n );\n }\n\n /**\n * @inheritdoc\n */\n public getTranslation(lang: string): Observable<Translation> {\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 new Error('Dynamic Content is not available. Please verify you have provided the DynamicContent 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 const localizationBundle$ = this.downloadLanguageBundle$(localizationPath + lang + JSON_EXT);\n\n if (this.localizationConfiguration.mergeWithLocalTranslations) {\n return combineLatest([\n localizationBundle$.pipe(catchError(() => {\n this.logger?.warn(`Failed to load the localization resource from ${localizationPath + lang + JSON_EXT} during merge, falling back to local translations only`);\n return of({});\n })),\n this.getTranslationFromLocal(lang, fallback).pipe(\n map((translations) => {\n Object.entries(translations).forEach(([key, value]) => translations[key] = `[local] ${value 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 * @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<Translation> {\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?.error(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}.`);\n return of({});\n } else {\n this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}. Application will fallback to ${fallbackLanguage}`);\n return this.getTranslationFromLocal(fallbackLanguage, fallbackLanguage);\n }\n })\n );\n }\n}\n","import {\n FactoryProvider,\n Injector,\n Optional,\n} from '@angular/core';\nimport {\n TRANSLOCO_LOADER,\n} from '@jsverse/transloco';\nimport {\n DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n LocalizationConfiguration,\n} from '../core';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\nimport {\n TranslationsLoader,\n} 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 * @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 const injector = Injector.create({\n providers: [\n { provide: LOCALIZATION_CONFIGURATION_TOKEN, useValue: localizationConfiguration },\n { provide: LoggerService, useValue: logger },\n { provide: DynamicContentService, useValue: dynamicContentService },\n {\n provide: TranslationsLoader,\n deps: [[LoggerService, new Optional()], [DynamicContentService, new Optional()], LOCALIZATION_CONFIGURATION_TOKEN]\n }\n ]\n });\n return injector.get(TranslationsLoader);\n}\n\n/**\n * TranslocoLoader provider, using framework's TranslationsLoader class\n */\nexport const translateLoaderProvider: Readonly<FactoryProvider> = {\n provide: TRANSLOCO_LOADER,\n useFactory: createTranslateLoader,\n deps: [LOCALIZATION_CONFIGURATION_TOKEN, [new Optional(), LoggerService], [new Optional(), DynamicContentService]]\n} as const;\n","import {\n createAction,\n props,\n} from '@ngrx/store';\nimport {\n SetStateActionPayload,\n} from '@o3r/core';\nimport {\n LocalizationOverrideState,\n} 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 {\n ActionCreator,\n createReducer,\n on,\n ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './localization-override.actions';\nimport {\n LocalizationOverrideState,\n} 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 {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport {\n Action,\n ActionReducer,\n StoreModule,\n} from '@ngrx/store';\nimport {\n localizationOverrideReducer,\n} from './localization-override.reducer';\nimport {\n LOCALIZATION_OVERRIDE_STORE_NAME,\n LocalizationOverrideState,\n} 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/**\n * NgModule for localization override store.\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 {\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport {\n LOCALIZATION_OVERRIDE_STORE_NAME,\n LocalizationOverrideState,\n} 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 {\n Serializer,\n} from '@o3r/core';\nimport {\n localizationOverrideInitialState,\n} from './localization-override.reducer';\nimport {\n LocalizationOverrideState,\n} from './localization-override.state';\n\n/**\n * Deserializer for the LocalizationOverride store storage\n * @param rawObject\n */\nexport const localizationOverrideStorageDeserializer = (rawObject: any) => {\n if (!rawObject) {\n return localizationOverrideInitialState;\n }\n return rawObject;\n};\n\n/** Serializer/Deserializer configuration for the LocalizationOverride store sync */\nexport const localizationOverrideStorageSync: Serializer<LocalizationOverrideState> = {\n deserialize: localizationOverrideStorageDeserializer\n};\n","import {\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n toObservable,\n} from '@angular/core/rxjs-interop';\nimport {\n TranslocoService,\n} from '@jsverse/transloco';\nimport {\n select,\n Store,\n} from '@ngrx/store';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n combineLatest,\n distinctUntilChanged,\n firstValueFrom,\n map,\n Observable,\n of,\n shareReplay,\n startWith,\n switchMap,\n} from 'rxjs';\nimport {\n LocalizationConfiguration,\n} from '../core/localization-configuration';\nimport {\n LocalizationOverrideStore,\n selectLocalizationOverride,\n} from '../stores/index';\nimport {\n getDebugKey,\n} from './localization-helpers';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * Service which is wrapping the configuration logic of TranslocoService from JSVerse Transloco.\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 private readonly translateService = inject(TranslocoService);\n private readonly logger = inject(LoggerService, { optional: true });\n private readonly configuration = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n private readonly store = inject<Store<LocalizationOverrideStore>>(Store, { optional: true });\n\n private readonly localeSplitIdentifier = '-';\n\n /**\n * Internal signal that we use to track changes between keys only and translation mode\n */\n private readonly _showKeys = signal(false);\n\n /**\n * Map of localization keys to replace a key to another\n */\n private readonly keyMapping$?: Observable<Record<string, any>>;\n\n /**\n * _showKeys exposed as an Observable\n */\n public readonly showKeys$ = toObservable(this._showKeys);\n\n /**\n * Return the current value of debug show/hide translation keys.\n */\n public readonly showKeys = this._showKeys.asReadonly();\n\n constructor() {\n this.configure().catch((err) => {\n this.logger?.error(`Failed to configure LocalizationService: ${err}`);\n });\n if (this.store) {\n this.keyMapping$ = this.store.pipe(\n select(selectLocalizationOverride)\n );\n } else {\n this.logger?.debug('Store not available: localization key overrides via rules engine will not be active.');\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 * @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.includes(language)) {\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 * @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 * 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 * @param language Selected language.\n * @returns Closest supported language if available, undefined otherwise.\n */\n private getFirstClosestSupportedLanguageCode(language: string): string | undefined {\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 * @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.events$.pipe(\n startWith(undefined),\n switchMap(() => this.translateService.selectTranslate(translationKey, interpolateParams)),\n map((value) => this.configuration.debugMode ? getDebugKey(translationKey, value) : value),\n distinctUntilChanged()\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 TranslocoService and registers locales. This method is called from the application level.\n */\n public async configure() {\n const language = this.checkFallbackLocalesMap(this.configuration.language || this.configuration.fallbackLanguage);\n this.translateService.setAvailableLangs(this.configuration.supportedLocales);\n this.translateService.setDefaultLang(language);\n await firstValueFrom(this.useLanguage(language));\n }\n\n /**\n * Is the translation deactivation enabled\n */\n public isTranslationDeactivationEnabled() {\n return this.configuration.enableTranslationDeactivation;\n }\n\n /**\n * Wrapper to call the TranslocoService method getAvailableLangs().\n */\n public getLanguages() {\n return this.translateService.getAvailableLangs().map((l) => (typeof l === 'string' ? l : l.id));\n }\n\n /**\n * Wrapper to call the TranslocoService method setActiveLang(language).\n * @param language\n */\n public useLanguage(language: string): Observable<any> {\n language = this.checkFallbackLocalesMap(language);\n this.translateService.setActiveLang(language);\n return this.translateService.load(language);\n }\n\n /**\n * Wrapper to get the TranslocoService getActiveLang.\n */\n public getCurrentLanguage() {\n return this.translateService.getActiveLang();\n }\n\n /**\n * Get the instance of the TranslocoService used by LocalizationService.\n */\n public getTranslateService() {\n return this.translateService;\n }\n\n /**\n * Toggle the ShowKeys mode between active and inactive.\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 ? !this.showKeys() : value;\n this._showKeys.set(newValue);\n }\n\n /**\n * Get an observable of translation key after global mapping\n * @param requestedKey Original translation key\n */\n public getKey(requestedKey: string) {\n return this.keyMapping$\n ? this.keyMapping$.pipe(\n map((keyMapping) => keyMapping[requestedKey] || requestedKey),\n distinctUntilChanged()\n )\n : of(requestedKey);\n }\n\n /**\n * Returns a stream of translated values of a key which updates whenever the language changes.\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({ refCount: true, bufferSize: 1 })\n );\n }\n}\n","import {\n CurrencyPipe,\n} from '@angular/common';\nimport {\n ChangeDetectorRef,\n inject,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LocalizationService,\n} 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 standalone: true\n})\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements PipeTransform {\n private readonly localizationService = inject(LocalizationService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor() {\n super(inject(LocalizationService).getCurrentLanguage());\n this.localizationService.getTranslateService().langChanges$\n .pipe(takeUntilDestroyed())\n .subscribe(() =>\n this.changeDetectorRef.markForCheck()\n );\n }\n\n /**\n * @inheritdoc\n */\n public transform(value: number | string, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(value: null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): null;\n public transform(\n // eslint-disable-next-line @typescript-eslint/unified-signatures -- Expose same signatures as angular CurrencyPipe\n value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n public transform(\n value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null {\n return this.localizationService.showKeys() ? '' : super.transform(value, currencyCode, display, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n}\n","import {\n DatePipe,\n} from '@angular/common';\nimport {\n ChangeDetectorRef,\n inject,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LocalizationService,\n} 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 standalone: true\n})\nexport class LocalizedDatePipe extends DatePipe implements PipeTransform {\n private readonly localizationService = inject(LocalizationService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor() {\n super(inject(LocalizationService).getCurrentLanguage());\n this.localizationService.getTranslateService().langChanges$\n .pipe(takeUntilDestroyed())\n .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 return this.localizationService.showKeys() ? format : super.transform(value, format, timezone, locale || this.localizationService.getCurrentLanguage());\n }\n}\n","import {\n DecimalPipe,\n} from '@angular/common';\nimport {\n ChangeDetectorRef,\n inject,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LocalizationService,\n} from './localization-service';\n\n/**\n * Native angular DecimalPipe taking the current lang into consideration\n */\n@Pipe({\n name: 'number',\n pure: false,\n standalone: true\n})\nexport class LocalizedDecimalPipe extends DecimalPipe implements PipeTransform {\n private readonly localizationService = inject(LocalizationService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor() {\n super(inject(LocalizationService).getCurrentLanguage());\n this.localizationService.getTranslateService().langChanges$\n .pipe(takeUntilDestroyed())\n .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 this.localizationService.showKeys() ? '' : super.transform(value, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n }\n}\n","import {\n Directionality,\n} from '@angular/cdk/bidi';\nimport {\n inject,\n Injectable,\n OnDestroy,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport {\n TranslocoService,\n} from '@jsverse/transloco';\nimport {\n Subscription,\n} from 'rxjs';\nimport {\n LocalizationConfiguration,\n} from '../core';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * Service for handling the text direction based on the LocalizationConfiguration\n */\n@Injectable()\nexport class TextDirectionService implements OnDestroy {\n private readonly translateService = inject(TranslocoService);\n private readonly configuration = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n private readonly rendererFactory = inject(RendererFactory2);\n private readonly directionality = inject(Directionality);\n\n private subscription?: Subscription;\n private readonly renderer: Renderer2;\n\n constructor() {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n /**\n * Updates the dir attribute on body HTML tag.\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.langChanges$.subscribe((lang: string) => {\n const direction = this.configuration.rtlLanguages.includes(lang.split('-')[0]) ? 'rtl' : 'ltr';\n this.renderer.setAttribute(document.body, 'dir', direction);\n this.directionality.change.emit(direction);\n });\n return this.subscription;\n }\n\n public ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","import {\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n} from '@angular/common';\nimport {\n type EnvironmentProviders,\n InjectionToken,\n isDevMode,\n LOCALE_ID,\n makeEnvironmentProviders,\n Optional,\n type Provider,\n} from '@angular/core';\nimport {\n provideTransloco,\n} from '@jsverse/transloco';\nimport {\n DEFAULT_LOCALIZATION_CONFIGURATION,\n LocalizationConfiguration,\n} from '../core';\nimport {\n translateLoaderProvider,\n} from './localization-loader-provider';\nimport {\n LocalizationService,\n} from './localization-service';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\nimport {\n LocalizedCurrencyPipe,\n} from './localized-currency-pipe';\nimport {\n LocalizedDatePipe,\n} from './localized-date-pipe';\nimport {\n LocalizedDecimalPipe,\n} from './localized-decimal-pipe';\nimport {\n TextDirectionService,\n} from './text-direction-service';\n\n/**\n * creates LocalizationConfiguration, which is used if the application\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 * @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/**\n * Provide localization services and configuration for the application.\n * This is the recommended way to set up localization in standalone applications.\n * @param configuration Optional partial localization configuration to override defaults. Can be a configuration object or a factory function.\n * @example Override of default and supported languages override at application bootstrap\n * ```typescript\n * bootstrapApplication(App, {\n * providers: [\n * provideLocalization({ language: 'en-US', supportedLocales: ['en-US', 'fr-FR'] })\n * ]\n * });\n * ```\n */\nexport function provideLocalization(configuration?: Partial<LocalizationConfiguration> | (() => Partial<LocalizationConfiguration>)): EnvironmentProviders {\n const config = typeof configuration === 'function' ? configuration() : (configuration || {});\n const mergedConfig = { ...DEFAULT_LOCALIZATION_CONFIGURATION, ...config };\n\n const providers: (Provider | EnvironmentProviders)[] = [\n provideTransloco({\n config: {\n availableLangs: mergedConfig.supportedLocales || [],\n defaultLang: mergedConfig.language || mergedConfig.fallbackLanguage,\n reRenderOnLangChange: true,\n prodMode: !isDevMode(),\n fallbackLang: mergedConfig.fallbackLanguage,\n missingHandler: {\n useFallbackTranslation: true\n }\n }\n }),\n translateLoaderProvider,\n LocalizationService,\n TextDirectionService,\n { provide: LOCALIZATION_CONFIGURATION_TOKEN, useFactory: createLocalizationConfiguration, deps: [[new Optional(), CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN]] },\n { provide: LOCALE_ID, useFactory: localeIdNgBridge, deps: [LocalizationService] },\n { provide: DatePipe, useClass: LocalizedDatePipe },\n { provide: DecimalPipe, useClass: LocalizedDecimalPipe },\n { provide: CurrencyPipe, useClass: LocalizedCurrencyPipe }\n ];\n\n if (configuration) {\n providers.push({\n provide: CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN,\n ...(typeof configuration === 'function' ? { useFactory: configuration } : { useValue: configuration })\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n TranslocoDirective,\n} from '@jsverse/transloco';\nimport {\n Subject,\n switchMap,\n} from 'rxjs';\nimport {\n LocalizationConfiguration,\n} from '../core';\nimport {\n getDebugKey,\n} from './localization-helpers';\nimport {\n LocalizationService,\n} from './localization-service';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * TranslocoDirective class adding debug functionality.\n *\n * Extends the TranslocoDirective from Transloco to add:\n * - Key mapping via LocalizationService (override store)\n * - Show keys mode (display raw keys instead of translations)\n * - Debug mode (display key alongside translation)\n *\n * For the structural strategy (`*transloco`), the debug/showKeys behavior is handled\n * by overriding `getTranslateFn`.\n *\n * For the attribute strategy (`[transloco]=\"key\"`), the parent's private `attributeStrategy()`\n * sets `innerText` directly. Since we cannot override this private method, we apply\n * debug/showKeys transformations by overwriting `innerText` immediately after calling\n * `super.ngOnInit()` and `super.ngOnChanges()`, in the same call stack.\n */\n@Directive({\n selector: '[transloco]',\n standalone: true\n})\nexport class LocalizationTranslateDirective extends TranslocoDirective implements OnInit, OnChanges {\n private readonly localizationService = inject(LocalizationService);\n private readonly localizationConfig = inject<LocalizationConfiguration>(LOCALIZATION_CONFIGURATION_TOKEN);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly hostElement = inject(ElementRef);\n private readonly hostRenderer = inject(Renderer2);\n private readonly isAttributeStrategy = inject(TemplateRef, { optional: true }) === null;\n private readonly o3rDestroyRef = inject(DestroyRef);\n\n /**\n * Should we display keys instead of translations\n */\n private showKeys = false;\n\n /**\n * Subject to emit translation key changes\n */\n private readonly translocoSubject = new Subject<string>();\n\n /** @inheritdoc */\n @Input()\n public set transloco(key: string) {\n if (key) {\n this.translocoSubject.next(key);\n }\n }\n\n constructor() {\n super();\n if (this.localizationConfig.enableTranslationDeactivation) {\n this.localizationService.showKeys$.pipe(takeUntilDestroyed(this.o3rDestroyRef)).subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.changeDetectorRef.markForCheck();\n });\n }\n\n // Set up reactive key mapping subscription\n this.translocoSubject.pipe(\n switchMap((key) => this.localizationService.getKey(key)),\n takeUntilDestroyed(this.o3rDestroyRef)\n ).subscribe((newKey) => {\n const previousKey = this.key;\n this.key = newKey;\n this.changeDetectorRef.markForCheck();\n super.ngOnChanges({ transloco: new SimpleChange(previousKey, newKey, !previousKey) });\n });\n }\n\n /**\n * For the attribute strategy, overwrites `innerText` with the debug/showKeys value\n * immediately after the parent has set it.\n */\n private applyAttributeDebug() {\n if (!this.isAttributeStrategy || !this.key) {\n return;\n }\n if (this.showKeys) {\n this.hostRenderer.setProperty(this.hostElement.nativeElement, 'innerText', this.key);\n } else if (this.localizationConfig.debugMode) {\n this.hostRenderer.setProperty(\n this.hostElement.nativeElement,\n 'innerText',\n getDebugKey(this.key, this.hostElement.nativeElement.innerText as string)\n );\n }\n }\n\n /**\n * Override getTranslateFn to plug debug/showKeys for the structural strategy.\n * @param lang Current language\n * @param prefix Scope prefix\n */\n protected override getTranslateFn(lang: string, prefix: string | undefined): (key: string, params?: Record<string, unknown>) => any {\n const parentTranslateFn = super.getTranslateFn(lang, prefix);\n return (key: string, params?: Record<string, unknown>) => {\n if (this.showKeys) {\n return key;\n }\n const value = parentTranslateFn(key, params);\n if (this.localizationConfig.debugMode) {\n return getDebugKey(key, value as string);\n }\n return value;\n };\n }\n\n /** @inheritdoc */\n public override ngOnInit() {\n super.ngOnInit();\n this.applyAttributeDebug();\n }\n\n /** @inheritdoc */\n public override ngOnChanges(changes: SimpleChanges) {\n super.ngOnChanges(changes);\n this.applyAttributeDebug();\n }\n}\n","import {\n ChangeDetectorRef,\n DestroyRef,\n inject,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n TRANSLOCO_LANG,\n TRANSLOCO_SCOPE,\n TranslocoPipe,\n TranslocoService,\n} from '@jsverse/transloco';\nimport {\n Subject,\n switchMap,\n} from 'rxjs';\nimport {\n LocalizationConfiguration,\n} from '../core';\nimport {\n getDebugKey,\n} from './localization-helpers';\nimport {\n LocalizationService,\n} from './localization-service';\nimport {\n LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization-token';\n\n/**\n * TranslocoPipe class adding debug functionality\n */\n@Pipe({\n name: 'o3rTranslate',\n pure: false,\n standalone: true\n})\nexport class O3rLocalizationTranslatePipe extends TranslocoPipe implements PipeTransform {\n /** Localization service instance */\n protected readonly localizationService = inject(LocalizationService);\n /** Change detector service instance */\n protected readonly changeDetector = inject(ChangeDetectorRef);\n /** Localization config token */\n protected readonly localizationConfig: LocalizationConfiguration = inject(LOCALIZATION_CONFIGURATION_TOKEN);\n /** Destroy reference */\n protected readonly destroyRef = inject(DestroyRef);\n\n /**\n * Should we display keys instead of translations\n */\n protected showKeys = false;\n\n /**\n * Subject to emit translation key changes\n */\n protected readonly querySubject = new Subject<string>();\n\n /** last key resolved */\n protected lastResolvedKey?: string;\n\n constructor() {\n super(\n inject(TranslocoService),\n inject(TRANSLOCO_SCOPE, { optional: true }) ?? undefined,\n inject(TRANSLOCO_LANG, { optional: true }) ?? undefined,\n inject(ChangeDetectorRef)\n );\n if (this.localizationConfig.enableTranslationDeactivation) {\n this.localizationService.showKeys$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((showKeys) => {\n this.showKeys = showKeys;\n this.changeDetector.markForCheck();\n });\n }\n\n // Set up reactive key mapping subscription\n this.querySubject.pipe(\n switchMap((query) => this.localizationService.getKey(query)),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe((key) => {\n this.lastResolvedKey = key;\n this.changeDetector.markForCheck();\n });\n }\n\n /**\n * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled\n * @inheritdoc\n */\n public transform(query: string, ...args: any[]): any {\n if (!query || this.localizationService.showKeys()) {\n return query;\n }\n\n // Emit query to subject for reactive key mapping\n this.querySubject.next(query);\n\n const value = super.transform(this.lastResolvedKey, ...args);\n\n if (this.localizationConfig.debugMode) {\n return getDebugKey(this.lastResolvedKey!, value);\n }\n\n return value;\n }\n}\n","import {\n ApplicationRef,\n inject,\n Injectable,\n OnDestroy,\n} from '@angular/core';\nimport {\n TRANSLOCO_TRANSPILER,\n type TranslocoTranspiler,\n} from '@jsverse/transloco';\nimport {\n lastValueFrom,\n Subscription,\n} from 'rxjs';\nimport {\n LocalizationService,\n} from '../tools';\n\n/**\n * Service that provides core localization devtools functionality\n */\n@Injectable()\nexport class OtterLocalizationDevtools implements OnDestroy {\n private readonly localizationService = inject(LocalizationService);\n private readonly translateTranspiler = inject<TranslocoTranspiler>(TRANSLOCO_TRANSPILER);\n private readonly appRef = inject(ApplicationRef);\n private readonly languageChangeSubscriptions = new Set<Subscription>();\n\n /**\n * Is the translation deactivation enabled\n */\n public isTranslationDeactivationEnabled() {\n return this.localizationService.isTranslationDeactivationEnabled();\n }\n\n /**\n * Show localization keys\n * @param value value enforced by the DevTools extension\n */\n public showLocalizationKeys(value?: boolean): void {\n this.localizationService.toggleShowKeys(value);\n this.appRef.tick();\n }\n\n /**\n * Returns the current language\n */\n public getCurrentLanguage() {\n return this.localizationService.getCurrentLanguage();\n }\n\n /**\n * Set up a listener on language change\n * @param fn called when the language is changed in the app\n * @returns Object with unsubscribe() method to prevent memory leaks\n */\n public onLanguageChange(fn: (language: string) => any): { unsubscribe: () => void } {\n const subscription = this.localizationService\n .getTranslateService()\n .langChanges$\n .subscribe((lang: string) => {\n fn(lang);\n });\n\n this.languageChangeSubscriptions.add(subscription);\n\n // Return custom object with unsubscribe method\n return {\n unsubscribe: () => {\n subscription.unsubscribe();\n this.languageChangeSubscriptions.delete(subscription);\n }\n };\n }\n\n /**\n * Clear all language change listeners\n */\n public clearLanguageChangeListeners(): void {\n this.languageChangeSubscriptions.forEach((sub) => sub.unsubscribe());\n this.languageChangeSubscriptions.clear();\n }\n\n /**\n * Cleanup subscriptions when service is destroyed\n */\n public ngOnDestroy(): void {\n this.clearLanguageChangeListeners();\n }\n\n /**\n * Switch the current language to the specified value\n * @param language new language to switch to\n */\n public async switchLanguage(language: string | undefined) {\n if (!language) {\n return;\n }\n await lastValueFrom(this.localizationService.useLanguage(language));\n this.appRef.tick();\n }\n\n /**\n * Updates the specified localization key/values for the current language.\n *\n * Recommendation: To be used with a small number of keys to update to avoid performance issues.\n * @param keyValues key/values to update\n * @param language if not provided, the current language value\n */\n public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n const lang = language || this.getCurrentLanguage();\n const translateService = this.localizationService.getTranslateService();\n Object.entries(keyValues).forEach(([key, value]) => {\n translateService.setTranslationKey(key, value, { lang });\n });\n this.appRef.tick();\n }\n\n /**\n * Reload a language from the language file\n * @param language language to reload\n */\n public async reloadLocalizationKeys(language?: string) {\n const lang = language || this.getCurrentLanguage();\n if ((this.translateTranspiler as any).setLocale) {\n (this.translateTranspiler as any).setLocale(null);\n }\n const translateService = this.localizationService.getTranslateService();\n const translations = await lastValueFrom(translateService.load(lang));\n translateService.setTranslation(translations, lang, { merge: false });\n this.appRef.tick();\n }\n}\n","import {\n InjectionToken,\n} from '@angular/core';\nimport {\n LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\n\n/**\n * Default configuration options for the Otter Localization Devtools\n */\nexport const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: Readonly<LocalizationDevtoolsServiceOptions> = {\n isActivatedOnBootstrap: false,\n isActivatedOnBootstrapWhenCMSContext: true,\n metadataFilePath: './metadata/localisation.metadata.json'\n} as const;\n\n/**\n * Injection token for Otter Localization Devtools configuration options\n */\nexport const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken<LocalizationDevtoolsServiceOptions>('Otter Localization Devtools options');\n","/* eslint-disable no-console -- This is the purpose of this service */\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport type {\n ContextualizationDataset,\n DevtoolsServiceInterface,\n WindowWithDevtools,\n} from '@o3r/core';\nimport {\n LocalizationContextualizationDevtools,\n LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\nimport {\n OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\n/**\n * Service that exposes localization devtools functionality via the browser console\n */\n@Injectable()\nexport class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {\n /** Name of the Window property to access to the devtools */\n public static readonly windowModuleName = 'localization';\n\n private readonly localizationDevtools = inject(OtterLocalizationDevtools);\n private readonly options = inject<LocalizationDevtoolsServiceOptions>(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, { optional: true }) ?? OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS;\n\n constructor() {\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\n windowWithDevtools._OTTER_DEVTOOLS_ ||= {};\n\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 isTranslationDeactivationEnabled(): boolean | Promise<boolean> {\n return this.localizationDevtools.isTranslationDeactivationEnabled();\n }\n\n /**\n * @inheritdoc\n */\n public showLocalizationKeys(value?: boolean): void | Promise<void> {\n this.localizationDevtools.showLocalizationKeys(value);\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 this.localizationDevtools.switchLanguage(language);\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): { unsubscribe: () => void } {\n return this.localizationDevtools.onLanguageChange(fn);\n }\n\n /**\n * @inheritdoc\n */\n public clearLanguageChangeListeners(): void {\n this.localizationDevtools.clearLanguageChangeListeners();\n }\n\n /**\n * @inheritdoc\n */\n public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n return this.localizationDevtools.updateLocalizationKeys(keyValues, language);\n }\n\n /**\n * @inheritdoc\n */\n public reloadLocalizationKeys(language?: string) {\n return this.localizationDevtools.reloadLocalizationKeys(language);\n }\n}\n","import {\n DestroyRef,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n filterMessageContent,\n sendOtterMessage,\n} from '@o3r/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n fromEvent,\n} from 'rxjs';\nimport {\n LocalizationService,\n} from '../tools';\nimport {\n type AvailableLocalizationMessageContents,\n LocalizationDevtoolsServiceOptions,\n type LocalizationMessageDataTypes,\n} from './localization-devkit-interface';\nimport {\n OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\n/**\n * Type guard to check if a message is a localization message\n * @param message Message to check\n * @returns True if the message is a localization message\n */\nconst isLocalizationMessage = (message: any): message is AvailableLocalizationMessageContents => {\n return message && (\n message.dataType === 'displayLocalizationKeys'\n || message.dataType === 'languages'\n || message.dataType === 'switchLanguage'\n || message.dataType === 'localizations'\n || message.dataType === 'updateLocalization'\n || message.dataType === 'requestMessages'\n || message.dataType === 'connect'\n || message.dataType === 'reloadLocalizationKeys'\n || message.dataType === 'isTranslationDeactivationEnabled'\n || message.dataType === 'getTranslationValuesContentMessage'\n );\n};\n\n/**\n * Service that handles localization devtools messages communication\n */\n@Injectable()\nexport class LocalizationDevtoolsMessageService {\n private readonly logger = inject(LoggerService);\n private readonly localizationDevTools = inject(OtterLocalizationDevtools);\n private readonly localizationService = inject(LocalizationService);\n private readonly options = inject<LocalizationDevtoolsServiceOptions>(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, { optional: true }) ?? OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS;\n\n private readonly sendMessage = sendOtterMessage<AvailableLocalizationMessageContents>;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.options = {\n ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n ...this.options\n };\n if (this.options.isActivatedOnBootstrap) {\n this.activate();\n }\n }\n\n private async sendLocalizationsMetadata() {\n const metadata = await (await fetch(this.options.metadataFilePath)).json();\n this.sendMessage('localizations', {\n localizations: metadata\n });\n }\n\n /**\n * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension\n * @param only restricted list of messages to re-send\n */\n private handleReEmitRequest(only?: LocalizationMessageDataTypes[]) {\n if (!only || only.includes('localizations')) {\n void this.sendLocalizationsMetadata();\n }\n if (!only || only.includes('switchLanguage')) {\n this.sendMessage('switchLanguage', { language: this.localizationDevTools.getCurrentLanguage() });\n }\n if (!only || only.includes('languages')) {\n this.sendMessage('languages', { languages: this.localizationService.getLanguages() });\n }\n if (!only || only.includes('getTranslationValuesContentMessage')) {\n this.sendMessage('getTranslationValuesContentMessage', {\n translations: this.localizationService.getTranslateService().getTranslation(this.localizationService.getCurrentLanguage())\n });\n }\n if (!only || only.includes('isTranslationDeactivationEnabled')) {\n this.sendMessage('isTranslationDeactivationEnabled', { enabled: this.localizationService.isTranslationDeactivationEnabled() });\n }\n }\n\n /**\n * Function to handle the incoming messages from Otter Chrome DevTools extension\n * @param message Message coming from the Otter Chrome DevTools extension\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 case 'requestMessages': {\n void this.handleReEmitRequest(message.only);\n break;\n }\n case 'switchLanguage': {\n void this.localizationDevTools.switchLanguage(message.language);\n break;\n }\n case 'updateLocalization': {\n void this.localizationDevTools.updateLocalizationKeys({\n [message.key]: message.value\n }, message.lang);\n break;\n }\n case 'reloadLocalizationKeys': {\n void this.localizationDevTools.reloadLocalizationKeys(message.lang);\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 fromEvent(window, 'message').pipe(\n takeUntilDestroyed(this.destroyRef),\n filterMessageContent(isLocalizationMessage)\n ).subscribe((e) => this.handleEvents(e));\n }\n}\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport type {\n LocalizationDevtoolsServiceOptions,\n} from './localization-devkit-interface';\nimport {\n OtterLocalizationDevtools,\n} from './localization-devtools';\nimport {\n LocalizationDevtoolsConsoleService,\n} from './localization-devtools-console-service';\nimport {\n LocalizationDevtoolsMessageService,\n} from './localization-devtools-message-service';\nimport {\n OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools-token';\n\n/**\n * Provide localization devtools functionality for the application.\n * This is the recommended way to set up localization devtools in standalone applications.\n * @param options Optional partial localization devtools configuration to override defaults. Can be a configuration object or a factory function.\n * @example Load localization with automatic activation at bootstrap\n * ```typescript\n * bootstrapApplication(App, {\n * providers: [\n * provideLocalizationDevtools({ isActivatedOnBootstrap: true })\n * ]\n * });\n * ```\n */\nexport function provideLocalizationDevtools(options?: Partial<LocalizationDevtoolsServiceOptions>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n useValue: { ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, ...options }\n },\n LocalizationDevtoolsMessageService,\n LocalizationDevtoolsConsoleService,\n OtterLocalizationDevtools\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setLocalizationOverride","switchMap","map"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,195 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o3r/transloco",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.4.0-rc.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
|
-
}
|
|
6
|
+
},
|
|
7
|
+
"description": "Experimental package — This module provides a runtime dynamic language/translation support based on JSVerse Transloco and debug tools.",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"localization",
|
|
10
|
+
"transloco",
|
|
11
|
+
"otter",
|
|
12
|
+
"otter-module",
|
|
13
|
+
"otter-cms",
|
|
14
|
+
"experimental"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
"./package.json": {
|
|
18
|
+
"default": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"./schemas/*.json": {
|
|
21
|
+
"default": "./schemas/*.json"
|
|
22
|
+
},
|
|
23
|
+
"./builders/*": {
|
|
24
|
+
"types": "./dist/builders/*.d.ts",
|
|
25
|
+
"default": "./dist/builders/*"
|
|
26
|
+
},
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./types/o3r-transloco.d.ts",
|
|
29
|
+
"default": "./fesm2022/o3r-transloco.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./rules-engine": {
|
|
32
|
+
"types": "./types/o3r-transloco-rules-engine.d.ts",
|
|
33
|
+
"default": "./fesm2022/o3r-transloco-rules-engine.mjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@angular-devkit/architect": ">=0.2100.0 <0.2200.0-0",
|
|
38
|
+
"@angular-devkit/core": "^21.0.0",
|
|
39
|
+
"@angular-devkit/schematics": "^21.0.0",
|
|
40
|
+
"@angular/cdk": "^21.0.0",
|
|
41
|
+
"@angular/cli": "^21.0.0",
|
|
42
|
+
"@angular/common": "^21.0.0",
|
|
43
|
+
"@angular/core": "^21.0.0",
|
|
44
|
+
"@angular/platform-browser-dynamic": "^21.0.0",
|
|
45
|
+
"@jsverse/transloco": "^8.0.0",
|
|
46
|
+
"@jsverse/transloco-messageformat": "^8.0.0",
|
|
47
|
+
"@jsverse/utils": "1.0.0-beta.5",
|
|
48
|
+
"@ngrx/store": "^21.0.0",
|
|
49
|
+
"@o3r/core": "~14.4.0-rc.2",
|
|
50
|
+
"@o3r/dynamic-content": "~14.4.0-rc.2",
|
|
51
|
+
"@o3r/extractors": "~14.4.0-rc.2",
|
|
52
|
+
"@o3r/logger": "~14.4.0-rc.2",
|
|
53
|
+
"@o3r/schematics": "~14.4.0-rc.2",
|
|
54
|
+
"@schematics/angular": "^21.0.0",
|
|
55
|
+
"@yarnpkg/cli": "^4.3.1",
|
|
56
|
+
"@yarnpkg/core": "^4.1.1",
|
|
57
|
+
"@yarnpkg/fslib": "^3.1.0",
|
|
58
|
+
"@yarnpkg/plugin-npm": "^3.0.1",
|
|
59
|
+
"@yarnpkg/plugin-pack": "^4.0.0",
|
|
60
|
+
"chokidar": "^4.0.0 || ^5.0.0",
|
|
61
|
+
"globby": "^11.1.0",
|
|
62
|
+
"rxjs": "^7.8.1",
|
|
63
|
+
"type-fest": "^5.3.1",
|
|
64
|
+
"typescript": "^5.9.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependenciesMeta": {
|
|
67
|
+
"@angular-devkit/architect": {
|
|
68
|
+
"optional": true
|
|
69
|
+
},
|
|
70
|
+
"@angular-devkit/core": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"@angular-devkit/schematics": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"@angular/cli": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"@o3r/schematics": {
|
|
80
|
+
"optional": true
|
|
81
|
+
},
|
|
82
|
+
"@schematics/angular": {
|
|
83
|
+
"optional": true
|
|
84
|
+
},
|
|
85
|
+
"@yarnpkg/cli": {
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
88
|
+
"@yarnpkg/core": {
|
|
89
|
+
"optional": true
|
|
90
|
+
},
|
|
91
|
+
"@yarnpkg/fslib": {
|
|
92
|
+
"optional": true
|
|
93
|
+
},
|
|
94
|
+
"@yarnpkg/plugin-npm": {
|
|
95
|
+
"optional": true
|
|
96
|
+
},
|
|
97
|
+
"@yarnpkg/plugin-pack": {
|
|
98
|
+
"optional": true
|
|
99
|
+
},
|
|
100
|
+
"chokidar": {
|
|
101
|
+
"optional": true
|
|
102
|
+
},
|
|
103
|
+
"globby": {
|
|
104
|
+
"optional": true
|
|
105
|
+
},
|
|
106
|
+
"type-fest": {
|
|
107
|
+
"optional": true
|
|
108
|
+
},
|
|
109
|
+
"typescript": {
|
|
110
|
+
"optional": true
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"dependencies": {
|
|
114
|
+
"@o3r/schematics": "~14.4.0-rc.2",
|
|
115
|
+
"tslib": "^2.6.2"
|
|
116
|
+
},
|
|
117
|
+
"engines": {
|
|
118
|
+
"node": "^22.17.0 || ^24.0.0"
|
|
119
|
+
},
|
|
120
|
+
"builders": "./builders.json",
|
|
121
|
+
"schematics": "./collection.json",
|
|
122
|
+
"sideEffects": false,
|
|
123
|
+
"module": "fesm2022/o3r-transloco.mjs",
|
|
124
|
+
"typings": "types/o3r-transloco.d.ts",
|
|
125
|
+
"type": "module",
|
|
126
|
+
"contributors": [
|
|
127
|
+
{
|
|
128
|
+
"name": "Yannick Adam",
|
|
129
|
+
"url": "https://github.com/yannickadam",
|
|
130
|
+
"email": "yannickadam@users.noreply.github.com"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "Kilian Panot",
|
|
134
|
+
"url": "https://github.com/kpanot",
|
|
135
|
+
"email": "kpanot@users.noreply.github.com"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"name": "Jeremy Bourgeois",
|
|
139
|
+
"url": "https://github.com/jbourgeois-1A",
|
|
140
|
+
"email": "jbourgeois-1A@users.noreply.github.com"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "Pierre Henri Ginoux",
|
|
144
|
+
"url": "https://github.com/pginoux-1A",
|
|
145
|
+
"email": "pginoux-1A@users.noreply.github.com"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "Mircea Vasile Rednic",
|
|
149
|
+
"url": "https://github.com/mrednic-1A",
|
|
150
|
+
"email": "mrednic-1A@users.noreply.github.com"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"name": "Stephane Dalle",
|
|
154
|
+
"url": "https://github.com/sdalle-1A",
|
|
155
|
+
"email": "sdalle-1A@users.noreply.github.com"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"name": "Nicolas Hoffmann",
|
|
159
|
+
"url": "https://github.com/nhoffmann-1A",
|
|
160
|
+
"email": "nhoffmann-1A@users.noreply.github.com"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"name": "Victor Scaiceanu",
|
|
164
|
+
"url": "https://github.com/vscaiceanu-1a",
|
|
165
|
+
"email": "vscaiceanu-1A@users.noreply.github.com"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "Florian Paul",
|
|
169
|
+
"url": "https://github.com/fpaul-1A",
|
|
170
|
+
"email": "fpaul-1A@users.noreply.github.com"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"name": "Corinne Paulve",
|
|
174
|
+
"url": "https://github.com/cpaulve-1A",
|
|
175
|
+
"email": "cpaulve-1A@users.noreply.github.com"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "Matthieu Crouzet",
|
|
179
|
+
"url": "https://github.com/matthieu-crouzet",
|
|
180
|
+
"email": "matthieu-crouzet@users.noreply.github.com"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"name": "Salome Do",
|
|
184
|
+
"url": "https://github.com/sdo-1A",
|
|
185
|
+
"email": "sdo-1A@users.noreply.github.com"
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"bugs": "https://github.com/AmadeusITGroup/otter/issues",
|
|
189
|
+
"repository": {
|
|
190
|
+
"type": "git",
|
|
191
|
+
"url": "git+https://github.com/AmadeusITGroup/otter.git"
|
|
192
|
+
},
|
|
193
|
+
"license": "BSD-3-Clause",
|
|
194
|
+
"homepage": "https://amadeusitgroup.github.io/otter/"
|
|
7
195
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "LocalizationMetadataSchema",
|
|
4
|
+
"description": "Schema of Localizations",
|
|
5
|
+
"type": "array",
|
|
6
|
+
"uniqueItems": true,
|
|
7
|
+
"items": {
|
|
8
|
+
"anyOf": [
|
|
9
|
+
{
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": [
|
|
12
|
+
"key",
|
|
13
|
+
"ref",
|
|
14
|
+
"description"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"key": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Key of the localized string"
|
|
20
|
+
},
|
|
21
|
+
"ref": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Reference to a local localization"
|
|
24
|
+
},
|
|
25
|
+
"description": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Description of the key. Used to give some context to the translators"
|
|
28
|
+
},
|
|
29
|
+
"referenceData": {
|
|
30
|
+
"type": "boolean",
|
|
31
|
+
"description": "Determine if the value has to be overriden"
|
|
32
|
+
},
|
|
33
|
+
"tags": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"description": "tags used to filter, categorize",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "object",
|
|
44
|
+
"required": [
|
|
45
|
+
"key",
|
|
46
|
+
"description",
|
|
47
|
+
"dictionary"
|
|
48
|
+
],
|
|
49
|
+
"if": { "properties": { "dictionary": { "const": false } } },
|
|
50
|
+
"then": { "required": ["key", "description", "dictionary", "value"] },
|
|
51
|
+
"else": { "required": ["key", "description", "dictionary"] },
|
|
52
|
+
"properties": {
|
|
53
|
+
"key": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Key of the localized string"
|
|
56
|
+
},
|
|
57
|
+
"description": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Description of the key. Used to give some context to the translators"
|
|
60
|
+
},
|
|
61
|
+
"dictionary": {
|
|
62
|
+
"type": "boolean",
|
|
63
|
+
"description": "Means that the key will be mapped to a dictionary in the CMS. In this case the key is just a prefix and the CMS will concatenate to this prefix a code coming from a dictionary in the CMS"
|
|
64
|
+
},
|
|
65
|
+
"value": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Default value for EN language. It is mandatory if dictionary is set to false"
|
|
68
|
+
},
|
|
69
|
+
"tags": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"description": "tags used to filter, categorize",
|
|
72
|
+
"items": {
|
|
73
|
+
"type": "string"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"referenceData": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"description": "Determine if the value has to be overriden"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "LocalizationSchema",
|
|
4
|
+
"description": "Schema of Localization file",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"patternProperties": {
|
|
8
|
+
"\\$schema": true,
|
|
9
|
+
"^[a-zA-Z0-9.-]+": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"oneOf": [
|
|
12
|
+
{
|
|
13
|
+
"type": "object",
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"required": [
|
|
16
|
+
"description",
|
|
17
|
+
"defaultValue"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"defaultValue": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Localization default value"
|
|
23
|
+
},
|
|
24
|
+
"description": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Localization Description"
|
|
27
|
+
},
|
|
28
|
+
"dictionary": {
|
|
29
|
+
"type": "boolean",
|
|
30
|
+
"description": "Determine if the item can have multiple extensions",
|
|
31
|
+
"const": false
|
|
32
|
+
},
|
|
33
|
+
"referenceData": {
|
|
34
|
+
"type": "boolean",
|
|
35
|
+
"description": "Determine if the value has to be overridden",
|
|
36
|
+
"default": false
|
|
37
|
+
},
|
|
38
|
+
"tags": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"items": {
|
|
41
|
+
"type": "string"
|
|
42
|
+
},
|
|
43
|
+
"description": "Tags used for filtering/categorizing"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"type": "object",
|
|
49
|
+
"additionalProperties": false,
|
|
50
|
+
"required": [
|
|
51
|
+
"description",
|
|
52
|
+
"dictionary"
|
|
53
|
+
],
|
|
54
|
+
"properties": {
|
|
55
|
+
"description": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "Localization Description"
|
|
58
|
+
},
|
|
59
|
+
"dictionary": {
|
|
60
|
+
"type": "boolean",
|
|
61
|
+
"description": "Determine if the item can have multiple extensions",
|
|
62
|
+
"const": true
|
|
63
|
+
},
|
|
64
|
+
"referenceData": {
|
|
65
|
+
"type": "boolean",
|
|
66
|
+
"description": "Determine if the value has to be overridden",
|
|
67
|
+
"default": false
|
|
68
|
+
},
|
|
69
|
+
"tags": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"description": "Tags used for filtering/categorizing"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "object",
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"required": [
|
|
82
|
+
"description",
|
|
83
|
+
"$ref"
|
|
84
|
+
],
|
|
85
|
+
"properties": {
|
|
86
|
+
"$ref": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Reference to other localization"
|
|
89
|
+
},
|
|
90
|
+
"description": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "Localization Description"
|
|
93
|
+
},
|
|
94
|
+
"dictionary": {
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"description": "Determine if the item can have multiple extensions",
|
|
97
|
+
"default": false
|
|
98
|
+
},
|
|
99
|
+
"referenceData": {
|
|
100
|
+
"type": "boolean",
|
|
101
|
+
"description": "Determine if the value has to be overridden",
|
|
102
|
+
"default": false
|
|
103
|
+
},
|
|
104
|
+
"tags": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "string"
|
|
108
|
+
},
|
|
109
|
+
"description": "Tags used for filtering/categorizing"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "RulesActionUpdateLocalizationBlock",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"description": "Content of action that updates the localizations",
|
|
6
|
+
"properties": {
|
|
7
|
+
"actionType": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Action Type",
|
|
10
|
+
"const": "UPDATE_LOCALIZATION"
|
|
11
|
+
},
|
|
12
|
+
"key": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "key of the location to update"
|
|
15
|
+
},
|
|
16
|
+
"value": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"additionalItems": false,
|
|
21
|
+
"required": [
|
|
22
|
+
"actionType",
|
|
23
|
+
"key",
|
|
24
|
+
"value"
|
|
25
|
+
]
|
|
26
|
+
}
|