@igo2/sdg-i18n 1.0.0-next.99 → 1.1.0-next.1

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/README.md CHANGED
@@ -1,3 +1,9 @@
1
1
  # I18n
2
2
 
3
- This is base on @ngx-translate
3
+ Documentation à venir
4
+
5
+ Installer le paquet internationalisation i18n basé sur @ngx-translate. Ce paquet est optionnel et vous pouvez utiliser la stratégie qui convient le mieux à votre application.
6
+
7
+ ```
8
+ npm install --save @igo2/sdg-i18n
9
+ ```
@@ -1,15 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, PLATFORM_ID, signal, Injectable, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
2
+ import { inject, DOCUMENT, PLATFORM_ID, signal, Injectable, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
3
3
  import { of } from 'rxjs';
4
- import * as i2 from '@angular/common';
5
- import { DOCUMENT, isPlatformServer } from '@angular/common';
6
4
  import { TitleResolver } from '@igo2/sdg-core';
7
- import * as i3 from '@ngx-translate/core';
8
- import { TranslateLoader, provideTranslateService, TRANSLATE_SERVICE_CONFIG } from '@ngx-translate/core';
5
+ import { TranslateLoader, TranslateService, provideTranslateService, TRANSLATE_SERVICE_CONFIG } from '@ngx-translate/core';
9
6
  export { TranslatePipe as TranslationPipe } from '@ngx-translate/core';
7
+ import { isPlatformServer, Location } from '@angular/common';
10
8
  import { HttpBackend } from '@angular/common/http';
11
9
  import { TRANSLATE_HTTP_LOADER_CONFIG, TranslateHttpLoader } from '@ngx-translate/http-loader';
12
- import * as i1 from '@angular/router';
10
+ import { Router } from '@angular/router';
13
11
 
14
12
  function provideTranslateHttpLoader(config = {}) {
15
13
  return [
@@ -58,14 +56,11 @@ function parseUrlWithLanguage(routerUrl, lang) {
58
56
  }
59
57
 
60
58
  class TranslationService {
61
- router;
62
- location;
63
- translate;
64
- lang = signal('fr');
65
- constructor(router, location, translate) {
66
- this.router = router;
67
- this.location = location;
68
- this.translate = translate;
59
+ router = inject(Router);
60
+ location = inject(Location);
61
+ translate = inject(TranslateService);
62
+ lang = signal('fr', ...(ngDevMode ? [{ debugName: "lang" }] : []));
63
+ constructor() {
69
64
  this.lang.set(this.translate.getFallbackLang());
70
65
  }
71
66
  get currentLoader() {
@@ -82,15 +77,15 @@ class TranslationService {
82
77
  this.location.go(url, params);
83
78
  window.location.reload();
84
79
  }
85
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TranslationService, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
86
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TranslationService, providedIn: 'root' });
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
81
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TranslationService, providedIn: 'root' });
87
82
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TranslationService, decorators: [{
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TranslationService, decorators: [{
89
84
  type: Injectable,
90
85
  args: [{
91
86
  providedIn: 'root'
92
87
  }]
93
- }], ctorParameters: () => [{ type: i1.Router }, { type: i2.Location }, { type: i3.TranslateService }] });
88
+ }], ctorParameters: () => [] });
94
89
 
95
90
  var TranslationFeatureKind;
96
91
  (function (TranslationFeatureKind) {
@@ -207,7 +202,7 @@ function withTranslationMock() {
207
202
  };
208
203
  }
209
204
  class TranslationServiceMock extends TranslationService {
210
- lang = signal('fr');
205
+ lang = signal('fr', ...(ngDevMode ? [{ debugName: "lang" }] : []));
211
206
  get(key) {
212
207
  return Array.isArray(key) ? key[0] : key;
213
208
  }
@@ -220,7 +215,7 @@ class TranslationServiceMock extends TranslationService {
220
215
  }
221
216
 
222
217
  function labelAttribute(value, defaultValue = {}) {
223
- return value ? { ...defaultValue, ...value } : defaultValue;
218
+ return { ...defaultValue, ...(value ?? {}) };
224
219
  }
225
220
 
226
221
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-sdg-i18n.mjs","sources":["../../../packages/i18n/src/translation-loader.ts","../../../packages/i18n/src/translation.utils.ts","../../../packages/i18n/src/translation.service.ts","../../../packages/i18n/src/translation.provider.ts","../../../packages/i18n/src/translation-mock.provider.ts","../../../packages/i18n/src/utils/coercion.ts","../../../packages/i18n/src/public-api.ts","../../../packages/i18n/src/igo2-sdg-i18n.ts"],"sourcesContent":["import { DOCUMENT, isPlatformServer } from '@angular/common';\nimport { HttpBackend } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\n\nimport { TranslateLoader } from '@ngx-translate/core';\nimport {\n TranslateHttpLoaderConfig as NgxTranslateHttpLoaderConfig,\n TRANSLATE_HTTP_LOADER_CONFIG,\n TranslateHttpLoader\n} from '@ngx-translate/http-loader';\n\nexport type TranslateHttpLoaderConfig = NgxTranslateHttpLoaderConfig;\n\nexport function provideTranslateHttpLoader(\n config: Partial<TranslateHttpLoaderConfig> = {}\n) {\n return [\n {\n provide: TRANSLATE_HTTP_LOADER_CONFIG,\n useFactory: provideHttpLoaderFactory(config)\n },\n {\n provide: TranslateLoader,\n useClass: TranslateHttpLoader,\n deps: [HttpBackend, TRANSLATE_HTTP_LOADER_CONFIG]\n }\n ];\n}\n\nfunction provideHttpLoaderFactory(config: Partial<TranslateHttpLoaderConfig>) {\n return () => {\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n const baseUrl = isPlatformServer(platformId) ? getServerUrl(document) : '';\n return {\n ...config,\n prefix: `${baseUrl}${config.prefix ?? ''}`\n };\n };\n}\nfunction getServerUrl(document: Document) {\n const origin = document.location.origin;\n return origin.endsWith('/') ? origin.slice(0, -1) : origin;\n}\n","/**\n *\n * @param routerUrl\n * @param lang\n * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')\n */\nexport function parseUrlWithLanguage(\n routerUrl: string,\n lang: string\n): [url: string, params: string | undefined] {\n // eslint-disable-next-line prefer-const\n let [url, params] = routerUrl.split('?');\n\n const urlParts = url.split('/');\n if (urlParts.length > 1) {\n urlParts[1] = lang;\n }\n\n url = urlParts.join('/');\n\n return [url, params];\n}\n","import { Location } from '@angular/common';\nimport { Injectable, WritableSignal, signal } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport {\n TranslateService,\n Translation,\n TranslationObject\n} from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport { parseUrlWithLanguage } from './translation.utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n lang: WritableSignal<Language> = signal('fr');\n\n constructor(\n public router: Router,\n public location: Location,\n public translate: TranslateService\n ) {\n this.lang.set(this.translate.getFallbackLang() as Language);\n }\n\n get currentLoader() {\n return this.translate.currentLoader;\n }\n\n get(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Translation | TranslationObject {\n return this.translate.instant(key, interpolateParams);\n }\n\n getAsync(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Observable<Translation | TranslationObject> {\n return this.translate.get(key, interpolateParams);\n }\n\n setLanguage(lang: string) {\n const [url, params] = parseUrlWithLanguage(this.router.url, lang);\n this.location.go(url, params);\n window.location.reload();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n EnvironmentProviders,\n InjectionToken,\n Provider,\n Type,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { TitleResolver } from '@igo2/sdg-core';\n\nimport {\n Language,\n RootTranslateServiceConfig,\n TRANSLATE_SERVICE_CONFIG,\n TranslateServiceConfig,\n provideTranslateService\n} from '@ngx-translate/core';\n\nimport {\n TranslateHttpLoaderConfig,\n provideTranslateHttpLoader\n} from './translation-loader';\nimport { TranslationService } from './translation.service';\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n RouterTitleResolver = 1,\n DefaultLanguage = 2,\n WaitOnLoading = 3\n}\n\nexport function provideTranslatedLabels(\n token: InjectionToken<unknown>,\n key: string\n) {\n return {\n provide: token,\n useFactory: (translationService: TranslationService) =>\n translationService.get(key),\n deps: [TranslationService]\n };\n}\n\nexport function provideTranslation(\n features: TranslationFeature<TranslationFeatureKind>[],\n config?: Omit<RootTranslateServiceConfig, 'loader'> & {\n loader:\n | Partial<TranslateHttpLoaderConfig>\n | RootTranslateServiceConfig['loader'];\n }\n) {\n const providers: (Provider | EnvironmentProviders)[] = [];\n\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n\n return makeEnvironmentProviders([\n provideTranslateService({\n ...(config ?? {}),\n loader: getLoader(config?.loader)\n }),\n ...providers\n ]);\n}\n\nfunction getLoader(\n loader: Provider | Partial<TranslateHttpLoaderConfig> | undefined\n) {\n if (loader && isProvider(loader)) {\n return loader;\n }\n\n return provideTranslateHttpLoader({\n prefix: '/locale/',\n suffix: '.json',\n useHttpBackend: true,\n ...(loader ?? {})\n });\n}\n\nfunction isProvider(obj: any): obj is Provider {\n return (obj as any).provide !== undefined;\n}\n\n/**\n * Provide a translater for the Route title.\n * Some components is base on the title of the route and\n * this Resolver will allow to automatically resolve the translation\n **/\nexport function withRouterTitleResolver<T>(\n resolver: Type<TitleResolver<T>>\n): TranslationFeature<TranslationFeatureKind.RouterTitleResolver> {\n return {\n kind: TranslationFeatureKind.RouterTitleResolver,\n providers: [\n {\n provide: TitleResolver<T>,\n useClass: resolver\n }\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withLanguageFromUrl(\n fallbackLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: TRANSLATE_SERVICE_CONFIG,\n useFactory: defaultLanguageSegmentFactory(\n allowedLanguages,\n fallbackLang\n )\n }\n ]\n };\n}\n\nexport function withWaitOnI18nReady(): TranslationFeature<TranslationFeatureKind.WaitOnLoading> {\n return {\n kind: TranslationFeatureKind.WaitOnLoading,\n providers: [\n provideAppInitializer(() => {\n const translationService = inject(TranslationService);\n return translationService.translate.use(translationService.lang());\n })\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n fallbackLang?: Language\n): () => TranslateServiceConfig {\n return () => {\n const defaultConfig = {\n extend: true\n } satisfies TranslateServiceConfig;\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const langInSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(langInSegment)) {\n return {\n ...defaultConfig,\n lang: langInSegment,\n fallbackLang: langInSegment\n };\n }\n\n return {\n ...defaultConfig,\n lang: fallbackLang,\n fallbackLang: fallbackLang ?? 'fr'\n };\n };\n}\n","import { WritableSignal, signal } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport {\n TranslationFeature,\n TranslationFeatureKind\n} from './translation.provider';\nimport { TranslationService } from './translation.service';\n\nexport function withTranslationMock(): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n { provide: TranslationService, useClass: TranslationServiceMock }\n ]\n };\n}\n\nexport class TranslationServiceMock extends TranslationService {\n override lang: WritableSignal<Language> = signal('fr');\n\n override get(key: string | string[]): string {\n return Array.isArray(key) ? key[0] : key;\n }\n\n override getAsync(key: string | string[]): Observable<string> {\n return of(Array.isArray(key) ? key[0] : key);\n }\n\n override setLanguage() {\n window.location.reload();\n }\n}\n","import { Translation, TranslationObject } from '../translation.interface';\n\nexport function labelAttribute(\n value: Translation | TranslationObject,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return value ? { ...defaultValue, ...value } : defaultValue;\n}\n","/*\n * Public API Surface of i18n\n */\n\nexport * from './translation-mock.provider';\nexport * from './translation.interface';\nexport * from './translation.provider';\nexport * from './translation.service';\nexport * from './translation.utils';\nexport * from './utils';\n\nexport { TranslatePipe as TranslationPipe } from '@ngx-translate/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igo2-sdg-i18n.mjs","sources":["../../../packages/i18n/src/translation-loader.ts","../../../packages/i18n/src/translation.utils.ts","../../../packages/i18n/src/translation.service.ts","../../../packages/i18n/src/translation.provider.ts","../../../packages/i18n/src/translation-mock.provider.ts","../../../packages/i18n/src/utils/coercion.ts","../../../packages/i18n/src/public-api.ts","../../../packages/i18n/src/igo2-sdg-i18n.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\nimport { HttpBackend } from '@angular/common/http';\nimport { DOCUMENT, PLATFORM_ID, inject } from '@angular/core';\n\nimport { TranslateLoader } from '@ngx-translate/core';\nimport {\n TranslateHttpLoaderConfig as NgxTranslateHttpLoaderConfig,\n TRANSLATE_HTTP_LOADER_CONFIG,\n TranslateHttpLoader\n} from '@ngx-translate/http-loader';\n\nexport type TranslateHttpLoaderConfig = NgxTranslateHttpLoaderConfig;\n\nexport function provideTranslateHttpLoader(\n config: Partial<TranslateHttpLoaderConfig> = {}\n) {\n return [\n {\n provide: TRANSLATE_HTTP_LOADER_CONFIG,\n useFactory: provideHttpLoaderFactory(config)\n },\n {\n provide: TranslateLoader,\n useClass: TranslateHttpLoader,\n deps: [HttpBackend, TRANSLATE_HTTP_LOADER_CONFIG]\n }\n ];\n}\n\nfunction provideHttpLoaderFactory(config: Partial<TranslateHttpLoaderConfig>) {\n return () => {\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n const baseUrl = isPlatformServer(platformId) ? getServerUrl(document) : '';\n return {\n ...config,\n prefix: `${baseUrl}${config.prefix ?? ''}`\n };\n };\n}\nfunction getServerUrl(document: Document) {\n const origin = document.location.origin;\n return origin.endsWith('/') ? origin.slice(0, -1) : origin;\n}\n","/**\n *\n * @param routerUrl\n * @param lang\n * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')\n */\nexport function parseUrlWithLanguage(\n routerUrl: string,\n lang: string\n): [url: string, params: string | undefined] {\n // eslint-disable-next-line prefer-const\n let [url, params] = routerUrl.split('?');\n\n const urlParts = url.split('/');\n if (urlParts.length > 1) {\n urlParts[1] = lang;\n }\n\n url = urlParts.join('/');\n\n return [url, params];\n}\n","import { Location } from '@angular/common';\nimport { Injectable, WritableSignal, inject, signal } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport {\n TranslateService,\n Translation,\n TranslationObject\n} from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport { parseUrlWithLanguage } from './translation.utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n router = inject(Router);\n location = inject(Location);\n translate = inject(TranslateService);\n\n lang: WritableSignal<Language> = signal('fr');\n\n constructor() {\n this.lang.set(this.translate.getFallbackLang() as Language);\n }\n\n get currentLoader() {\n return this.translate.currentLoader;\n }\n\n get(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Translation | TranslationObject {\n return this.translate.instant(key, interpolateParams);\n }\n\n getAsync(\n key: string | string[],\n interpolateParams?: Record<string, unknown>\n ): Observable<Translation | TranslationObject> {\n return this.translate.get(key, interpolateParams);\n }\n\n setLanguage(lang: string) {\n const [url, params] = parseUrlWithLanguage(this.router.url, lang);\n this.location.go(url, params);\n window.location.reload();\n }\n}\n","import {\n DOCUMENT,\n EnvironmentProviders,\n InjectionToken,\n Provider,\n Type,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { TitleResolver } from '@igo2/sdg-core';\n\nimport {\n Language,\n RootTranslateServiceConfig,\n TRANSLATE_SERVICE_CONFIG,\n TranslateServiceConfig,\n provideTranslateService\n} from '@ngx-translate/core';\n\nimport {\n TranslateHttpLoaderConfig,\n provideTranslateHttpLoader\n} from './translation-loader';\nimport { TranslationService } from './translation.service';\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n RouterTitleResolver = 1,\n DefaultLanguage = 2,\n WaitOnLoading = 3\n}\n\nexport function provideTranslatedLabels(\n token: InjectionToken<unknown>,\n key: string\n) {\n return {\n provide: token,\n useFactory: (translationService: TranslationService) =>\n translationService.get(key),\n deps: [TranslationService]\n };\n}\n\nexport function provideTranslation(\n features: TranslationFeature<TranslationFeatureKind>[],\n config?: Omit<RootTranslateServiceConfig, 'loader'> & {\n loader:\n | Partial<TranslateHttpLoaderConfig>\n | RootTranslateServiceConfig['loader'];\n }\n) {\n const providers: (Provider | EnvironmentProviders)[] = [];\n\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n\n return makeEnvironmentProviders([\n provideTranslateService({\n ...(config ?? {}),\n loader: getLoader(config?.loader)\n }),\n ...providers\n ]);\n}\n\nfunction getLoader(\n loader: Provider | Partial<TranslateHttpLoaderConfig> | undefined\n) {\n if (loader && isProvider(loader)) {\n return loader;\n }\n\n return provideTranslateHttpLoader({\n prefix: '/locale/',\n suffix: '.json',\n useHttpBackend: true,\n ...(loader ?? {})\n });\n}\n\nfunction isProvider(obj: any): obj is Provider {\n return (obj as any).provide !== undefined;\n}\n\n/**\n * Provide a translater for the Route title.\n * Some components is base on the title of the route and\n * this Resolver will allow to automatically resolve the translation\n **/\nexport function withRouterTitleResolver<T>(\n resolver: Type<TitleResolver<T>>\n): TranslationFeature<TranslationFeatureKind.RouterTitleResolver> {\n return {\n kind: TranslationFeatureKind.RouterTitleResolver,\n providers: [\n {\n provide: TitleResolver<T>,\n useClass: resolver\n }\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withLanguageFromUrl(\n fallbackLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: TRANSLATE_SERVICE_CONFIG,\n useFactory: defaultLanguageSegmentFactory(\n allowedLanguages,\n fallbackLang\n )\n }\n ]\n };\n}\n\nexport function withWaitOnI18nReady(): TranslationFeature<TranslationFeatureKind.WaitOnLoading> {\n return {\n kind: TranslationFeatureKind.WaitOnLoading,\n providers: [\n provideAppInitializer(() => {\n const translationService = inject(TranslationService);\n return translationService.translate.use(translationService.lang());\n })\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n fallbackLang?: Language\n): () => TranslateServiceConfig {\n return () => {\n const defaultConfig = {\n extend: true\n } satisfies TranslateServiceConfig;\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const langInSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(langInSegment)) {\n return {\n ...defaultConfig,\n lang: langInSegment,\n fallbackLang: langInSegment\n };\n }\n\n return {\n ...defaultConfig,\n lang: fallbackLang,\n fallbackLang: fallbackLang ?? 'fr'\n };\n };\n}\n","import { WritableSignal, signal } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\n\nimport { Language } from './translation.interface';\nimport {\n TranslationFeature,\n TranslationFeatureKind\n} from './translation.provider';\nimport { TranslationService } from './translation.service';\n\nexport function withTranslationMock(): TranslationFeature<TranslationFeatureKind.Translation> {\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n { provide: TranslationService, useClass: TranslationServiceMock }\n ]\n };\n}\n\nexport class TranslationServiceMock extends TranslationService {\n override lang: WritableSignal<Language> = signal('fr');\n\n override get(key: string | string[]): string {\n return Array.isArray(key) ? key[0] : key;\n }\n\n override getAsync(key: string | string[]): Observable<string> {\n return of(Array.isArray(key) ? key[0] : key);\n }\n\n override setLanguage() {\n window.location.reload();\n }\n}\n","import { Translation, TranslationObject } from '../translation.interface';\n\nexport function labelAttribute(\n value: Translation | TranslationObject | undefined,\n defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n return { ...defaultValue, ...(value ?? {}) };\n}\n","/*\n * Public API Surface of i18n\n */\n\nexport * from './translation-mock.provider';\nexport * from './translation.interface';\nexport * from './translation.provider';\nexport * from './translation.service';\nexport * from './translation.utils';\nexport * from './utils';\n\nexport { TranslatePipe as TranslationPipe } from '@ngx-translate/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,84 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { WritableSignal, Provider, EnvironmentProviders, InjectionToken, Type } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+ import { TitleResolver } from '@igo2/sdg-core';
5
+ import * as _ngx_translate_core from '@ngx-translate/core';
6
+ import { TranslateService, Translation as Translation$1, TranslationObject as TranslationObject$1, RootTranslateServiceConfig, Language as Language$1 } from '@ngx-translate/core';
7
+ export { TranslatePipe as TranslationPipe } from '@ngx-translate/core';
8
+ import { TranslateHttpLoaderConfig as TranslateHttpLoaderConfig$1 } from '@ngx-translate/http-loader';
9
+ import { Location } from '@angular/common';
10
+ import { Router } from '@angular/router';
11
+
12
+ type Language = 'fr' | 'en';
13
+ type Translation = string | Translation[] | TranslationObject | any;
14
+ interface TranslationObject {
15
+ [key: string]: Translation;
16
+ }
17
+
18
+ type TranslateHttpLoaderConfig = TranslateHttpLoaderConfig$1;
19
+
20
+ declare class TranslationService {
21
+ router: Router;
22
+ location: Location;
23
+ translate: TranslateService;
24
+ lang: WritableSignal<Language>;
25
+ constructor();
26
+ get currentLoader(): _ngx_translate_core.TranslateLoader;
27
+ get(key: string | string[], interpolateParams?: Record<string, unknown>): Translation$1 | TranslationObject$1;
28
+ getAsync(key: string | string[], interpolateParams?: Record<string, unknown>): Observable<Translation$1 | TranslationObject$1>;
29
+ setLanguage(lang: string): void;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TranslationService, never>;
31
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TranslationService>;
32
+ }
33
+
34
+ interface TranslationFeature<KindT extends TranslationFeatureKind> {
35
+ kind: KindT;
36
+ providers: (Provider | EnvironmentProviders)[];
37
+ }
38
+ declare enum TranslationFeatureKind {
39
+ Translation = 0,
40
+ RouterTitleResolver = 1,
41
+ DefaultLanguage = 2,
42
+ WaitOnLoading = 3
43
+ }
44
+ declare function provideTranslatedLabels(token: InjectionToken<unknown>, key: string): {
45
+ provide: InjectionToken<unknown>;
46
+ useFactory: (translationService: TranslationService) => any;
47
+ deps: (typeof TranslationService)[];
48
+ };
49
+ declare function provideTranslation(features: TranslationFeature<TranslationFeatureKind>[], config?: Omit<RootTranslateServiceConfig, 'loader'> & {
50
+ loader: Partial<TranslateHttpLoaderConfig> | RootTranslateServiceConfig['loader'];
51
+ }): EnvironmentProviders;
1
52
  /**
2
- * Generated bundle index. Do not edit.
53
+ * Provide a translater for the Route title.
54
+ * Some components is base on the title of the route and
55
+ * this Resolver will allow to automatically resolve the translation
56
+ **/
57
+ declare function withRouterTitleResolver<T>(resolver: Type<TitleResolver<T>>): TranslationFeature<TranslationFeatureKind.RouterTitleResolver>;
58
+ /**
59
+ * Get the first segment of the path (e.g., '/en/alerts' => 'en')
60
+ * @param allowedLanguages default to ['fr', 'en']
61
+ */
62
+ declare function withLanguageFromUrl(fallbackLang?: Language$1, allowedLanguages?: Language$1[]): TranslationFeature<TranslationFeatureKind.DefaultLanguage>;
63
+ declare function withWaitOnI18nReady(): TranslationFeature<TranslationFeatureKind.WaitOnLoading>;
64
+
65
+ declare function withTranslationMock(): TranslationFeature<TranslationFeatureKind.Translation>;
66
+ declare class TranslationServiceMock extends TranslationService {
67
+ lang: WritableSignal<Language>;
68
+ get(key: string | string[]): string;
69
+ getAsync(key: string | string[]): Observable<string>;
70
+ setLanguage(): void;
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @param routerUrl
76
+ * @param lang
77
+ * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')
3
78
  */
4
- /// <amd-module name="@igo2/sdg-i18n" />
5
- export * from './public-api';
79
+ declare function parseUrlWithLanguage(routerUrl: string, lang: string): [url: string, params: string | undefined];
80
+
81
+ declare function labelAttribute(value: Translation | TranslationObject | undefined, defaultValue?: Translation | TranslationObject): Translation | TranslationObject;
82
+
83
+ export { TranslationFeatureKind, TranslationService, TranslationServiceMock, labelAttribute, parseUrlWithLanguage, provideTranslatedLabels, provideTranslation, withLanguageFromUrl, withRouterTitleResolver, withTranslationMock, withWaitOnI18nReady };
84
+ export type { Language, Translation, TranslationFeature, TranslationObject };
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@igo2/sdg-i18n",
3
- "version": "1.0.0-next.99",
3
+ "version": "1.1.0-next.1",
4
4
  "license": "LiLiQ-R",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/infra-geo-ouverte/sdg.git",
8
8
  "directory": "packages/i18n"
9
9
  },
10
+ "engines": {
11
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
12
+ },
10
13
  "exports": {
11
14
  ".": {
12
15
  "types": "./index.d.ts",
@@ -17,9 +20,9 @@
17
20
  }
18
21
  },
19
22
  "peerDependencies": {
20
- "@angular/common": "^19.2.0",
21
- "@angular/core": "^19.2.0",
22
- "@igo2/sdg-core": "^1.0.0-next.99",
23
+ "@angular/common": "^20.0.0",
24
+ "@angular/core": "^20.0.0",
25
+ "@igo2/sdg-core": "^1.1.0-next.1",
23
26
  "@ngx-translate/core": "^17.0.0",
24
27
  "@ngx-translate/http-loader": "^17.0.0"
25
28
  },
package/public-api.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export * from './translation-mock.provider';
2
- export * from './translation.interface';
3
- export * from './translation.provider';
4
- export * from './translation.service';
5
- export * from './translation.utils';
6
- export * from './utils';
7
- export { TranslatePipe as TranslationPipe } from '@ngx-translate/core';
@@ -1,20 +0,0 @@
1
- import { HttpBackend } from '@angular/common/http';
2
- import { TranslateLoader } from '@ngx-translate/core';
3
- import { TranslateHttpLoaderConfig as NgxTranslateHttpLoaderConfig, TranslateHttpLoader } from '@ngx-translate/http-loader';
4
- export type TranslateHttpLoaderConfig = NgxTranslateHttpLoaderConfig;
5
- export declare function provideTranslateHttpLoader(config?: Partial<TranslateHttpLoaderConfig>): ({
6
- provide: import("@angular/core").InjectionToken<Partial<NgxTranslateHttpLoaderConfig>>;
7
- useFactory: () => {
8
- prefix: string;
9
- suffix?: string | undefined;
10
- enforceLoading?: boolean | undefined;
11
- useHttpBackend?: boolean | undefined;
12
- };
13
- useClass?: undefined;
14
- deps?: undefined;
15
- } | {
16
- provide: typeof TranslateLoader;
17
- useClass: typeof TranslateHttpLoader;
18
- deps: (import("@angular/core").InjectionToken<Partial<NgxTranslateHttpLoaderConfig>> | typeof HttpBackend)[];
19
- useFactory?: undefined;
20
- })[];
@@ -1,12 +0,0 @@
1
- import { WritableSignal } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { Language } from './translation.interface';
4
- import { TranslationFeature, TranslationFeatureKind } from './translation.provider';
5
- import { TranslationService } from './translation.service';
6
- export declare function withTranslationMock(): TranslationFeature<TranslationFeatureKind.Translation>;
7
- export declare class TranslationServiceMock extends TranslationService {
8
- lang: WritableSignal<Language>;
9
- get(key: string | string[]): string;
10
- getAsync(key: string | string[]): Observable<string>;
11
- setLanguage(): void;
12
- }
@@ -1,5 +0,0 @@
1
- export type Language = 'fr' | 'en';
2
- export type Translation = string | Translation[] | TranslationObject | any;
3
- export interface TranslationObject {
4
- [key: string]: Translation;
5
- }
@@ -1,35 +0,0 @@
1
- import { EnvironmentProviders, InjectionToken, Provider, Type } from '@angular/core';
2
- import { TitleResolver } from '@igo2/sdg-core';
3
- import { Language, RootTranslateServiceConfig } from '@ngx-translate/core';
4
- import { TranslateHttpLoaderConfig } from './translation-loader';
5
- import { TranslationService } from './translation.service';
6
- export interface TranslationFeature<KindT extends TranslationFeatureKind> {
7
- kind: KindT;
8
- providers: (Provider | EnvironmentProviders)[];
9
- }
10
- export declare enum TranslationFeatureKind {
11
- Translation = 0,
12
- RouterTitleResolver = 1,
13
- DefaultLanguage = 2,
14
- WaitOnLoading = 3
15
- }
16
- export declare function provideTranslatedLabels(token: InjectionToken<unknown>, key: string): {
17
- provide: InjectionToken<unknown>;
18
- useFactory: (translationService: TranslationService) => any;
19
- deps: (typeof TranslationService)[];
20
- };
21
- export declare function provideTranslation(features: TranslationFeature<TranslationFeatureKind>[], config?: Omit<RootTranslateServiceConfig, 'loader'> & {
22
- loader: Partial<TranslateHttpLoaderConfig> | RootTranslateServiceConfig['loader'];
23
- }): EnvironmentProviders;
24
- /**
25
- * Provide a translater for the Route title.
26
- * Some components is base on the title of the route and
27
- * this Resolver will allow to automatically resolve the translation
28
- **/
29
- export declare function withRouterTitleResolver<T>(resolver: Type<TitleResolver<T>>): TranslationFeature<TranslationFeatureKind.RouterTitleResolver>;
30
- /**
31
- * Get the first segment of the path (e.g., '/en/alerts' => 'en')
32
- * @param allowedLanguages default to ['fr', 'en']
33
- */
34
- export declare function withLanguageFromUrl(fallbackLang?: Language, allowedLanguages?: Language[]): TranslationFeature<TranslationFeatureKind.DefaultLanguage>;
35
- export declare function withWaitOnI18nReady(): TranslationFeature<TranslationFeatureKind.WaitOnLoading>;
@@ -1,20 +0,0 @@
1
- import { Location } from '@angular/common';
2
- import { WritableSignal } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { TranslateService, Translation, TranslationObject } from '@ngx-translate/core';
5
- import { Observable } from 'rxjs';
6
- import { Language } from './translation.interface';
7
- import * as i0 from "@angular/core";
8
- export declare class TranslationService {
9
- router: Router;
10
- location: Location;
11
- translate: TranslateService;
12
- lang: WritableSignal<Language>;
13
- constructor(router: Router, location: Location, translate: TranslateService);
14
- get currentLoader(): import("@ngx-translate/core").TranslateLoader;
15
- get(key: string | string[], interpolateParams?: Record<string, unknown>): Translation | TranslationObject;
16
- getAsync(key: string | string[], interpolateParams?: Record<string, unknown>): Observable<Translation | TranslationObject>;
17
- setLanguage(lang: string): void;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<TranslationService, never>;
19
- static ɵprov: i0.ɵɵInjectableDeclaration<TranslationService>;
20
- }
@@ -1,7 +0,0 @@
1
- /**
2
- *
3
- * @param routerUrl
4
- * @param lang
5
- * @param strategy default to 'segment' set the first segment of the path (e.g., '/en/alerts' => 'en')
6
- */
7
- export declare function parseUrlWithLanguage(routerUrl: string, lang: string): [url: string, params: string | undefined];
@@ -1,2 +0,0 @@
1
- import { Translation, TranslationObject } from '../translation.interface';
2
- export declare function labelAttribute(value: Translation | TranslationObject, defaultValue?: Translation | TranslationObject): Translation | TranslationObject;
package/utils/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './coercion';