@esfaenza/localizations 15.2.2 → 15.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm2020/lib/core/localization.base.mjs +2 -2
  2. package/esm2020/lib/core/localization.persistor.mjs +5 -5
  3. package/esm2020/lib/localizations.module.mjs +8 -3
  4. package/esm2020/lib/localizations.service.mjs +17 -7
  5. package/esm2020/lib/models/BaseLocalizationTokens.mjs +14 -0
  6. package/esm2020/lib/models/ItemLocalization.mjs +18 -0
  7. package/esm2020/lib/models/LocaleDefinitions.mjs +32 -0
  8. package/esm2020/lib/models/LocaleObject.mjs +18 -0
  9. package/esm2020/lib/models/LocalizationMissingPolicy.mjs +11 -0
  10. package/esm2020/lib/models/LocalizationModuleConfig.mjs +6 -0
  11. package/esm2020/lib/models/SpecializedLocalization.mjs +16 -0
  12. package/esm2020/lib/pipes/loc_date.pipe.mjs +62 -14
  13. package/esm2020/lib/tokens.mjs +4 -4
  14. package/esm2020/public-api.mjs +4 -3
  15. package/fesm2015/esfaenza-localizations.mjs +97 -35
  16. package/fesm2015/esfaenza-localizations.mjs.map +1 -1
  17. package/fesm2020/esfaenza-localizations.mjs +97 -33
  18. package/fesm2020/esfaenza-localizations.mjs.map +1 -1
  19. package/lib/core/localization.base.d.ts +1 -1
  20. package/lib/core/localization.persistor.d.ts +2 -1
  21. package/lib/localizations.module.d.ts +1 -1
  22. package/lib/localizations.service.d.ts +3 -2
  23. package/lib/models/LocalizationMissingPolicy.d.ts +9 -0
  24. package/lib/models/{classes/LocalizationModuleConfig.d.ts → LocalizationModuleConfig.d.ts} +4 -1
  25. package/lib/pipes/loc_date.pipe.d.ts +21 -4
  26. package/lib/tokens.d.ts +4 -3
  27. package/package.json +2 -3
  28. package/public-api.d.ts +3 -2
  29. package/esm2020/lib/models/classes/BaseLocalizationTokens.mjs +0 -14
  30. package/esm2020/lib/models/classes/ItemLocalization.mjs +0 -18
  31. package/esm2020/lib/models/classes/LocaleDefinitions.mjs +0 -32
  32. package/esm2020/lib/models/classes/LocaleObject.mjs +0 -18
  33. package/esm2020/lib/models/classes/LocalizationModuleConfig.mjs +0 -6
  34. package/esm2020/lib/models/classes/SpecializedLocalization.mjs +0 -16
  35. package/esm2020/lib/models/index.mjs +0 -6
  36. package/lib/models/index.d.ts +0 -5
  37. /package/lib/models/{classes/BaseLocalizationTokens.d.ts → BaseLocalizationTokens.d.ts} +0 -0
  38. /package/lib/models/{classes/ItemLocalization.d.ts → ItemLocalization.d.ts} +0 -0
  39. /package/lib/models/{classes/LocaleDefinitions.d.ts → LocaleDefinitions.d.ts} +0 -0
  40. /package/lib/models/{classes/LocaleObject.d.ts → LocaleObject.d.ts} +0 -0
  41. /package/lib/models/{classes/SpecializedLocalization.d.ts → SpecializedLocalization.d.ts} +0 -0
@@ -1,8 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Inject, Pipe, Optional, NgModule } from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, Pipe, NgModule } from '@angular/core';
3
3
  import { take, first } from 'rxjs/operators';
4
4
  import { ReplaySubject, of } from 'rxjs';
5
- import * as i1 from '@esfaenza/extensions';
6
5
 
7
6
  /**
8
7
  * Contenitore delle localizzazioni collegate ad un testo "base", una per ogni linguaggio supportato
@@ -71,12 +70,6 @@ LocaleDefinitions.AvailableLocales = [
71
70
  new LocaleObject('en-US', 'English', ['en', 'en-US'])
72
71
  ];
73
72
 
74
- /**
75
- * Classe di configurazione per il modulo di localizzazione
76
- */
77
- class LocalizationModuleConfig {
78
- }
79
-
80
73
  /**
81
74
  * Classe che rappresenta la localizzazione di un test base per una certa lingua
82
75
  */
@@ -172,9 +165,7 @@ class LocalizationPersistor {
172
165
  */
173
166
  get(text, allowtokens) {
174
167
  let possibleItem = this.LocCache[text];
175
- if (!possibleItem)
176
- return null;
177
- var item = allowtokens || !possibleItem.token ? possibleItem : null;
168
+ var item = possibleItem && (allowtokens || !possibleItem.token) ? possibleItem : null;
178
169
  return item;
179
170
  }
180
171
  /**
@@ -209,10 +200,10 @@ var BaseLocalizationTokens;
209
200
  BaseLocalizationTokens["getFullDateDisplayFormatNoSeconds"] = "getFullDateDisplayFormatNoSeconds";
210
201
  })(BaseLocalizationTokens || (BaseLocalizationTokens = {}));
211
202
 
212
- /**
213
- * Locale da utilizzare per le traduzioni
214
- */
215
- const LOC_LOCALE = new InjectionToken('LOC_LOCALE');
203
+ /** Locale da utilizzare per le traduzioni */
204
+ const LOC_LOCALE = new InjectionToken('LOC_LOCALE');
205
+ /** Policy da utilizzare per traduzioni mancanti */
206
+ const LOC_MISSING_POLICY = new InjectionToken('LOC_MISSING_POLICY');
216
207
 
217
208
  /** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */
218
209
  class LocalePersistor {
@@ -311,6 +302,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
311
302
  args: [LOC_LOCALE]
312
303
  }] }]; } });
313
304
 
305
+ /**
306
+ * Enum che rappresenta le policy di comportamento qualore il sistema di localizzazione non trovi la localizzazione cercata,
307
+ * usare **ThrowException** solo se ci si sente infallibili o si vuole debuggare in maniera approfondita l'applicazione
308
+ */
309
+ var LocalizationMissingPolicy;
310
+ (function (LocalizationMissingPolicy) {
311
+ LocalizationMissingPolicy[LocalizationMissingPolicy["PrintEmpty"] = 0] = "PrintEmpty";
312
+ LocalizationMissingPolicy[LocalizationMissingPolicy["PrintSource"] = 1] = "PrintSource";
313
+ LocalizationMissingPolicy[LocalizationMissingPolicy["ThrowException"] = 2] = "ThrowException";
314
+ })(LocalizationMissingPolicy || (LocalizationMissingPolicy = {}));
315
+
314
316
  /**
315
317
  * Classe di localizzazione estendibile che permette di specificare le proprie localizzazioni e comunque rendere disponibili le localizzazioni globali
316
318
  */
@@ -330,6 +332,7 @@ class LocalizationService {
330
332
  this.TranslationCache = {};
331
333
  this.LocalePersistor = this.injector.get(LocalePersistor);
332
334
  this.baseLocalization = this.injector.get(BaseLocalization);
335
+ this.onMissing = this.injector.get(LOC_MISSING_POLICY);
333
336
  this.Persistor = new LocalizationPersistor(this.TranslationCache);
334
337
  this.baseLocalization.Locale.subscribe(lr => {
335
338
  this.Locale = lr;
@@ -385,17 +388,24 @@ class LocalizationService {
385
388
  * @returns {string} Frase localizzata
386
389
  */
387
390
  loc(text, allowtokens) {
391
+ if (!this.Locale)
392
+ throw "Il sistema di localizzazione non ha ancora caricato il Locale, assicurarsi di caricare l'APP solo al retrieve del locale'";
388
393
  if (!text || text == "undefined")
389
394
  return "";
390
395
  // Prendo la localizzazione o dalla cache attuale o dalla cache del servizio base
391
396
  var item = this.Persistor.get(text, allowtokens) || this.baseLocalization.Persistor.get(text, allowtokens);
392
397
  if (!item) {
393
- console.error("Impossibile trovare la localizzazione per '" + text + "'");
394
- return "";
395
- }
396
- if (!this.Locale) {
397
- console.error("Il sistema di localizzazione non ha ancora caricato il Locale, assicurarsi di caricare l'APP solo al retrieve del locale'");
398
- return "";
398
+ let message = `Impossibile trovare la localizzazione per '${text}'`;
399
+ switch (this.onMissing) {
400
+ case LocalizationMissingPolicy.PrintEmpty:
401
+ console.error(message);
402
+ return "";
403
+ case LocalizationMissingPolicy.PrintSource:
404
+ console.warn(message);
405
+ return text;
406
+ case LocalizationMissingPolicy.ThrowException:
407
+ throw message;
408
+ }
399
409
  }
400
410
  var loc = this.Persistor.translationByCulture(item, this.Locale);
401
411
  if (!loc) {
@@ -430,8 +440,8 @@ class LocDatePipe {
430
440
  /**
431
441
  * @ignore
432
442
  */
433
- constructor(dts) {
434
- this.dts = dts;
443
+ constructor(baseLoc) {
444
+ this.baseLoc = baseLoc;
435
445
  }
436
446
  /**
437
447
  * Trasformazione della data in input in base al formato richiesto
@@ -444,23 +454,69 @@ class LocDatePipe {
444
454
  transform(value, format = "DD/MM/YYYY") {
445
455
  if (value == null || value === "")
446
456
  return null;
447
- if (!this.dts) {
448
- console.error("Tentativo di usare loc_date senza DateService. È possibile importare DateService installando e configurando il pacchetto @esfaenza/extensions");
449
- return null;
450
- }
451
457
  var detatchedValue = JSON.parse(JSON.stringify(value));
452
- var dt = this.dts.getDateConvertion(detatchedValue);
458
+ var dt = this.getDateConvertion(detatchedValue);
453
459
  return dt.format(format);
454
460
  }
461
+ /** @ignore Codice copiato da extensionservice per evitare la dipendenza con extensions */
462
+ getDateConvertion(date, useUtc = false) {
463
+ if (!date)
464
+ return null;
465
+ if (this.isDayJs(date))
466
+ return date;
467
+ if (this.isJsDate(date))
468
+ return useUtc ? dayjs.utc(date) : dayjs(date);
469
+ // Se non c'è la proprietà length vuol dire che non è una stringa e a questo punto non ho idea di che minchia sia
470
+ let length = date.length;
471
+ if (!length)
472
+ return null;
473
+ // Per risparmiare chiamate a tentoni, in base alla lunghezza della stringa chiamo direttamente il metodo giusto,
474
+ // controllando poi che mi generi una data come me la aspetto io
475
+ let tryThis = null;
476
+ // Se la data contiene la lettera "T" vuol dire che è una data del tipo 2020-10-15T00:00:00, direttamente parsabile dal dayjs col locale corretto.
477
+ // Per il resto mi baso sulla lunghezza della stringa
478
+ if (date.includes("T"))
479
+ tryThis = dayjs(date);
480
+ else if (length == this.baseLoc.token(BaseLocalizationTokens.getFullDateFormat).length)
481
+ tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getFullDateFormat));
482
+ else if (length == this.baseLoc.token(BaseLocalizationTokens.getSmallDateFormat).length)
483
+ tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getSmallDateFormat));
484
+ else if (length == this.baseLoc.token(BaseLocalizationTokens.getFullDateFormatNoSeconds).length)
485
+ tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getFullDateFormatNoSeconds));
486
+ if (tryThis && tryThis.isValid && tryThis.isValid())
487
+ return tryThis;
488
+ // Se niente funziona, null.
489
+ // Ricondurre l'Input ad una data non è possibile.
490
+ return null;
491
+ }
492
+ /**
493
+ * Helper che restituisce **true** qualora l'oggetto passato fosse una data vera e propria, **false** altrimenti
494
+ *
495
+ * @param {any} check Oggetto da controllare
496
+ *
497
+ * @returns {boolean} Indicazione se l'oggetto è un vero Date di Javascript o no
498
+ */
499
+ isJsDate(check) {
500
+ return check && Object.prototype.toString.call(check) === "[object Date]" && !isNaN(check);
501
+ }
502
+ /**
503
+ * Helper che restituisce **true** qualora l'oggetto passato fosse un DayJs vero e proprio, **false** altrimenti
504
+ *
505
+ * @param {any} check Oggetto da controllare
506
+ * @returns {boolean} Indicazione se l'oggetto è un vero DayJs o no
507
+ */
508
+ isDayJs(check) {
509
+ // Non uso instanceof perché sarebbe estremamente più lento
510
+ // Non uso nemmeno isDayjs() della libreria Dayjs dato che ha lo stesso problema: https://github.com/iamkun/dayjs/blob/06f88f425828b1ce96b737332d25145a95a4ee9d/src/index.js#L9
511
+ return check.$D !== undefined && check.$M !== undefined && check.$y !== undefined;
512
+ }
455
513
  }
456
- LocDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocDatePipe, deps: [{ token: i1.DateService, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
514
+ LocDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocDatePipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
457
515
  LocDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LocDatePipe, name: "loc_date" });
458
516
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocDatePipe, decorators: [{
459
517
  type: Pipe,
460
518
  args: [{ name: "loc_date", pure: true }]
461
- }], ctorParameters: function () { return [{ type: i1.DateService, decorators: [{
462
- type: Optional
463
- }] }]; } });
519
+ }], ctorParameters: function () { return [{ type: LocalizationService }]; } });
464
520
 
465
521
  // Angular
466
522
  /**
@@ -517,6 +573,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
517
573
  type: Injectable
518
574
  }] });
519
575
 
576
+ // Angular
520
577
  class LocalizationModule {
521
578
  static forRoot(config) {
522
579
  return {
@@ -525,6 +582,7 @@ class LocalizationModule {
525
582
  LocalizationService,
526
583
  BaseLocalization,
527
584
  { provide: LOC_LOCALE, useValue: config?.defaultLocale || 'it-IT' },
585
+ { provide: LOC_MISSING_POLICY, useValue: config?.localizationMissingPolicy || LocalizationMissingPolicy.PrintEmpty },
528
586
  { provide: LocalePersistor, useClass: config?.localePersistor || LocalStorageLocalePersistor },
529
587
  ]
530
588
  };
@@ -541,6 +599,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
541
599
  }]
542
600
  }] });
543
601
 
602
+ /**
603
+ * Classe di configurazione per il modulo di localizzazione
604
+ */
605
+ class LocalizationModuleConfig {
606
+ }
607
+
544
608
  /*
545
609
  * Public API Surface of localizations
546
610
  */
@@ -549,5 +613,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
549
613
  * Generated bundle index. Do not edit.
550
614
  */
551
615
 
552
- export { BaseLocalization, BaseLocalizationTokens, LOC_LOCALE, LocDatePipe, LocalizationModule, LocalizationModuleConfig, LocalizationService, LocalizePipe };
616
+ export { BaseLocalization, BaseLocalizationTokens, LOC_LOCALE, LOC_MISSING_POLICY, LocDatePipe, LocalizationMissingPolicy, LocalizationModule, LocalizationModuleConfig, LocalizationService, LocalizePipe };
553
617
  //# sourceMappingURL=esfaenza-localizations.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-localizations.mjs","sources":["../../../projects/localizations/src/lib/models/classes/ItemLocalization.ts","../../../projects/localizations/src/lib/models/classes/LocaleObject.ts","../../../projects/localizations/src/lib/models/classes/LocaleDefinitions.ts","../../../projects/localizations/src/lib/models/classes/LocalizationModuleConfig.ts","../../../projects/localizations/src/lib/models/classes/SpecializedLocalization.ts","../../../projects/localizations/src/lib/core/localization.persistor.ts","../../../projects/localizations/src/lib/models/classes/BaseLocalizationTokens.ts","../../../projects/localizations/src/lib/tokens.ts","../../../projects/localizations/src/lib/locale-persistor/LocalePersistor.ts","../../../projects/localizations/src/lib/core/localization.base.ts","../../../projects/localizations/src/lib/localizations.service.ts","../../../projects/localizations/src/lib/pipes/loc_date.pipe.ts","../../../projects/localizations/src/lib/pipes/localize.pipe.ts","../../../projects/localizations/src/lib/locale-persistor/LocalStorageCachePersistor.ts","../../../projects/localizations/src/lib/localizations.module.ts","../../../projects/localizations/src/public-api.ts","../../../projects/localizations/src/esfaenza-localizations.ts"],"sourcesContent":["import { SpecializedLocalization } from \"./SpecializedLocalization\";\r\n\r\n/**\r\n * Contenitore delle localizzazioni collegate ad un testo \"base\", una per ogni linguaggio supportato\r\n */\r\nexport class ItemLocalization {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {boolean} token Indica se è un token o se è un testo\r\n * @param {string} baseText Testo base che verrà richiesto quando verrà cercata la localizzazione\r\n * @param {SpecializedLocalization[]} translations Lista di traduzioni in base al testo base\r\n */\r\n constructor(public token: boolean, public baseText: string, public translations: SpecializedLocalization[]){ }\r\n}","\r\n/**\r\n * Classe che rappresenta un locale (Es. 'Italiano') con i propri alias (Es. 'it' oppure 'it-IT')\r\n */\r\nexport class LocaleObject {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice locale\r\n * @param {string} description Descrizione locale\r\n * @param {string[]} aliases Alias con cui quel locale è conosciuto\r\n */\r\n constructor(public id: string, public description: string, public aliases: string[]) { }\r\n}\r\n","import { LocaleObject } from \"./LocaleObject\";\r\n\r\n// VVVVVVVV Tag per evitare che typescript muoia con l'errore \"Error encountered in metadata generated for exported symbol 'LocaleDefinitions'\" (https://github.com/angular/angular/issues/18867#issuecomment-357484102),\r\n// @dynamic\r\n\r\n/**\r\n * Definizione dei locali disponibili\r\n */\r\nexport class LocaleDefinitions {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Lista dei locali disponibili, definiti anche con i vari alias\r\n */\r\n public static AvailableLocales: LocaleObject[] = [\r\n new LocaleObject('it-IT', 'Italiano', ['it', 'it-IT']),\r\n new LocaleObject('en-US', 'English', ['en', 'en-US'])\r\n ];\r\n\r\n /**\r\n * In base a un alias restituisce il locale rappresentato\r\n * \r\n * @param {string} alias Alias in base al quale raccogliere il Locale\r\n * \r\n * @returns {LocaleObject} Locale richiesto dall'alias\r\n */\r\n public static getByAlias(alias: string): LocaleObject {\r\n return this.AvailableLocales.find(t => !!t.aliases.find(a => a == alias));\r\n }\r\n}\r\n","import { Type } from \"@angular/core\";\r\nimport { LocalePersistor } from \"../../locale-persistor/LocalePersistor\";\r\n\r\n/**\r\n * Classe di configurazione per il modulo di localizzazione\r\n */\r\nexport class LocalizationModuleConfig {\r\n\r\n /** Locale di default utilizzato per richiedere le traduzioni */\r\n defaultLocale: string;\r\n\r\n /**\r\n * Classe che si deve occupare dello store \"Definitivo\" delle info sul locale utilizzato. Di default viene proposto uno store lato localStorage ma si può facilmente \r\n * fornire uno storage che porta le informazioni lato Database in modo da avere la stessa lingua fino a che non viene cambiata (Es. Preference storage)\r\n */\r\n localePersistor?: Type<LocalePersistor>;\r\n}\r\n","/**\r\n * Classe che rappresenta la localizzazione di un test base per una certa lingua\r\n */\r\nexport class SpecializedLocalization {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} culture Culture della traduzione\r\n * @param {string} translation Traduzione nella lingua specificata dalla **culture**\r\n */\r\n constructor(public culture: string, public translation: string) { }\r\n}\r\n","import { ItemLocalization, LocaleDefinitions, SpecializedLocalization } from \"../models\";\r\n\r\nexport class LocalizationPersistor {\r\n\r\n constructor(private LocCache: { [id: string]: ItemLocalization } = null) { }\r\n\r\n /**\r\n * Imposta la localizzazione di un token all'interno della cache scelta\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} token Nome del token\r\n * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n public setToken(direction: string, token: string, left: string, right: string[]) {\r\n let parsingRegex = /([a-zA-Z]+)[\\s]*->[\\s]*([a-zA-Z,\\s]+)+/g;\r\n var parsingRes = parsingRegex.exec(direction);\r\n\r\n let from = parsingRes[1];\r\n let to: string[] = parsingRes[2].replace(/\\s/g, '').split(',');\r\n let localeFrom = LocaleDefinitions.getByAlias(from);\r\n this._set(token, localeFrom.id, left, true);\r\n\r\n to.forEach((t, index) => {\r\n let localeTo = LocaleDefinitions.getByAlias(t);\r\n this._set(token, localeTo.id, right[index], true);\r\n });\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di una frase all'interno della cache scelta\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n public set(direction: string, left: string, right: string[]) {\r\n let parsingRegex = /([a-zA-Z]+)[\\s]*->[\\s]*([a-zA-Z,\\s]+)+/g;\r\n var parsingRes = parsingRegex.exec(direction);\r\n\r\n let from = parsingRes[1];\r\n let to: string[] = parsingRes[2].replace(/\\s/g, '').split(',');\r\n let localeFrom = LocaleDefinitions.getByAlias(from);\r\n this._set(left, localeFrom.id, left);\r\n\r\n to.forEach((t, index) => {\r\n let localeTo = LocaleDefinitions.getByAlias(t);\r\n this._set(left, localeTo.id, right[index]);\r\n });\r\n }\r\n\r\n /**\r\n * Imposta all'interno della cache specificata un'unica traduzione partendo da un testo di base\r\n * \r\n * @param {string} text Testo da tradurre\r\n * @param {string} culture Lingua per cui inserire la traduzione\r\n * @param {string} translation Traduzione del **text** nella lingua specificata da **culture**\r\n * @param {boolean} token Indica se il **text** è un token o è una frase normale\r\n */\r\n private _set(text: string, culture: string, translation: string, token?: boolean) {\r\n let item = this.get(text, token);\r\n if (!item) {\r\n this.LocCache[text] = new ItemLocalization(token, text, [new SpecializedLocalization(culture, translation)]);\r\n return;\r\n }\r\n\r\n var trs = this.translationByCulture(item, culture);\r\n if (trs) {\r\n console.warn(\"Localization already loaded for sentence '\" + text + \"' and culture \" + culture);\r\n return;\r\n }\r\n\r\n item.translations.push(new SpecializedLocalization(culture, translation));\r\n }\r\n\r\n /**\r\n * Partendo da una cache di localizzazione, dato un testo che può essere o meno un token, cerca quell'elemento all'interno della cache\r\n * \r\n * @param {string} text Testo da cercare nella **LocCache**\r\n * @param {boolean} allowtokens Indica se l'elemento cercato può essere un token o se dev'essere per forza una frase (per evitare rari \r\n * casi di collisione in cui magari un token è uguale a una frase tradotta)\r\n * \r\n * @returns {ItemLocalization} Informazioni di localizzazione per il **text** cercato\r\n */\r\n public get(text: string, allowtokens: boolean): ItemLocalization {\r\n let possibleItem: ItemLocalization = this.LocCache[text];\r\n if (!possibleItem)\r\n return null;\r\n\r\n var item = allowtokens || !possibleItem.token ? possibleItem : null;\r\n return item;\r\n }\r\n\r\n /**\r\n * Date le informazioni di localizzazione per un testo cerca e restituisce la traduzione per una lingua specifica\r\n * \r\n * @param {ItemLocalization} Informazioni di localizzazione\r\n * @param {string} culture Lingua della traduzione richiesta\r\n * \r\n * @returns {SpecializedLocalization} Informazioni di localizzazione specifiche della lingua richiesta\r\n */\r\n public translationByCulture(item: ItemLocalization, culture: string): SpecializedLocalization {\r\n for (let i = 0; i < item.translations.length; i++) {\r\n let trl = item.translations[i];\r\n if (trl.culture == culture)\r\n return trl;\r\n }\r\n\r\n return null;\r\n }\r\n}","\r\nexport enum BaseLocalizationTokens {\r\n getDateMonthPosition = \"getDateMonthPosition\",\r\n getDisplayDateMonthPosition = \"getDisplayDateMonthPosition\",\r\n getLocale = \"getLocale\",\r\n getSmallDateFormat = \"getSmallDateFormat\",\r\n getDefaultDateFormat = \"getDefaultDateFormat\",\r\n getSmallDateDisplayFormat = \"getSmallDateDisplayFormat\",\r\n getFullDateFormat = \"getFullDateFormat\",\r\n getFullDateDisplayFormat = \"getFullDateDisplayFormat\",\r\n getFullDateFormatNoSeconds = \"getFullDateFormatNoSeconds\",\r\n getFullDateDisplayFormatNoSeconds = \"getFullDateDisplayFormatNoSeconds\"\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Locale da utilizzare per le traduzioni\r\n */\r\nexport const LOC_LOCALE: InjectionToken<string> = new InjectionToken<string>('LOC_LOCALE');","import { Observable } from \"rxjs\";\r\n\r\n/** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */\r\nexport abstract class LocalePersistor {\r\n\r\n /** Chiave su cui salvare il locale */\r\n protected LOCALE: string = \"LOCALE\";\r\n\r\n /**\r\n * Salva il Locale\r\n * \r\n * @param {string} locale Locale da salvare\r\n */\r\n public abstract persist(locale: string): Observable<boolean>;\r\n\r\n /**\r\n * Recupera il Locale\r\n * \r\n * @returns {Observable<string>} Valore salvato per il locale\r\n */\r\n public abstract recover(): Observable<string>;\r\n}","import { Inject, Injectable } from \"@angular/core\";\r\nimport { ItemLocalization } from \"../models\";\r\nimport { LocalizationPersistor } from \"./localization.persistor\";\r\nimport { BaseLocalizationTokens } from \"../models/classes/BaseLocalizationTokens\";\r\nimport { LocalePersistor } from \"../locale-persistor/LocalePersistor\";\r\nimport { take } from \"rxjs/operators\";\r\nimport { ReplaySubject } from \"rxjs\";\r\nimport { LOC_LOCALE } from \"../tokens\";\r\n\r\n/**\r\n * Classe singleton che contiene le traduzioni di base (per evitare di ripeterle in oggi classe di traduzione) e le funzioni base per \r\n * inserire e leggere traduzioni in/da una cache\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class BaseLocalization {\r\n\r\n /**\r\n * Cache di tutte le localizzazioni di base\r\n */\r\n public LocCache: { [id: string]: ItemLocalization } = {};\r\n\r\n /**\r\n * Persistor delle localizzazioni relativo a questa classe\r\n */\r\n public Persistor: LocalizationPersistor;\r\n\r\n /**\r\n * Locale di riferimento per tutte le traduzioni\r\n */\r\n public Locale: ReplaySubject<string> = new ReplaySubject<string>(1);\r\n\r\n /**\r\n * Costruttore. Da qui utilizzando il metodo statico **BaseLocalization.set** si va a popolare la cache delle traduzioni **BaseTranslations**\r\n */\r\n constructor(public LocalePersistor: LocalePersistor, @Inject(LOC_LOCALE) defaultLocale: string) {\r\n\r\n // Recupero il locale alla partenza del BaseLocalization in modo, spero di dare tempo all'applicazione di tirarlo su\r\n this.LocalePersistor.recover().pipe(take(1)).subscribe(async l => {\r\n if (!l) {\r\n l = defaultLocale;\r\n this.LocalePersistor.persist(defaultLocale);\r\n }\r\n this.Locale.next(l)\r\n });\r\n\r\n this.Persistor = new LocalizationPersistor(this.LocCache); \r\n\r\n this.Persistor.set(\"en->it\", \"Remove\", [\"Elimina\"]);\r\n this.Persistor.set(\"en->it\", \"Paging\", [\"Paginazione\"]);\r\n this.Persistor.set(\"en->it\", \"Yes\", [\"Si\"]);\r\n this.Persistor.set(\"en->it\", \"No\", [\"No\"]);\r\n this.Persistor.set(\"en->it\", \"YES\", [\"SI'\"]);\r\n this.Persistor.set(\"en->it\", \"NO\", [\"NO\"]);\r\n this.Persistor.set(\"en->it\", \"Found objects\", [\"Risultati trovati\"]);\r\n this.Persistor.set(\"en->it\", \"Loading data...\", [\"Carico i dati...\"]);\r\n this.Persistor.set(\"en->it\", \"Error during save operations\", [\"Errori durante il salvataggio\"]);\r\n this.Persistor.set(\"en->it\", \"Error\", [\"Errore\"]);\r\n this.Persistor.set(\"en->it\", \"Warning\", [\"Avviso\"]);\r\n this.Persistor.set(\"en->it\", \"Information\", [\"Informazione\"]);\r\n this.Persistor.set(\"en->it\", \"Save\", [\"Salva\"]);\r\n this.Persistor.set(\"en->it\", \"Back\", [\"Indietro\"]);\r\n this.Persistor.set(\"en->it\", \"From\", [\"Da\"]);\r\n this.Persistor.set(\"en->it\", \"To\", [\"A\"]);\r\n this.Persistor.set(\"en->it\", \"View Chart\", [\"Vedi Grafico\"]);\r\n this.Persistor.set(\"en->it\", \"View Table\", [\"Vedi Tabella\"]);\r\n this.Persistor.set(\"en->it\", \"Notes\", [\"Note\"]);\r\n this.Persistor.set(\"en->it\", \"Edit Notes\", [\"Modifica Note\"]);\r\n this.Persistor.set(\"en->it\", \"Cancel\", [\"Annulla\"]);\r\n this.Persistor.set(\"en->it\", \"Confirm\", [\"Conferma\"]);\r\n this.Persistor.set(\"en->it\", \"View\", [\"Visualizza\"]);\r\n this.Persistor.set(\"en->it\", \"Close\", [\"Chiudi\"]);\r\n this.Persistor.set(\"en->it\", \"Select\", [\"Seleziona\"]);\r\n this.Persistor.set(\"en->it\", \"Meter Reading registered successfully\", [\"Lettura registrata correttamente\"]);\r\n this.Persistor.set(\"en->it\", \"Validation errors during save operations\", [\"Errori di validazione durante il salvataggio\"]);\r\n this.Persistor.set(\"en->it\", \"Can't register reading\", [\"Impossibile registrare la lettura\"]);\r\n this.Persistor.set(\"en->it\", \"Electricity\", [\"Elettricita\"]);\r\n this.Persistor.set(\"en->it\", \"Gas\", [\"Gas\"]);\r\n this.Persistor.set(\"en->it\", \"Water\", [\"Acqua\"]);\r\n this.Persistor.set(\"en->it\", \"Delete\", [\"Elimina\"]);\r\n this.Persistor.set(\"en->it\", \"This operation cannot be reverted\", [\"Questa operazione non puo' essere annullata\"]);\r\n this.Persistor.set(\"en->it\", \"Hide\", [\"Nascondi\"]);\r\n\r\n // Helper validazione\r\n this.Persistor.set(\"en->it\", \"Required field\", [\"Campo richiesto\"]);\r\n this.Persistor.set(\"en->it\", \"Wrong field format\", [\"Formato campo errato\"]);\r\n this.Persistor.set(\"en->it\", \"Wrong field format or field missing\", [\"Formato campo errato o campo mancante\"]);\r\n this.Persistor.set(\"en->it\", \"You don't have the required permissions to view this page. The navigation has been blocked\", [\"Non si hanno privilegi a sufficienza per accedere a questa pagina. La navigazione e' stata bloccata\"]);\r\n\r\n // Informazioni sulle date\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDateMonthPosition, \"0\", [\"1\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDisplayDateMonthPosition, \"1\", [\"1\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getLocale, \"en-US\", [\"it-IT\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getSmallDateFormat, \"MM/DD/YYYY\", [\"DD/MM/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDefaultDateFormat, \"MM/DD/YYYY\", [\"MM/DD/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getSmallDateDisplayFormat, \"DD/MM/YYYY\", [\"DD/MM/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateFormat, \"MM/DD/YYYY HH:mm:ss\", [\"DD/MM/YYYY HH:mm:ss\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateDisplayFormat, \"DD/MM/YYYY HH:mm:ss\", [\"DD/MM/YYYY HH:mm:ss\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateFormatNoSeconds, \"MM/DD/YYYY HH:mm\", [\"DD/MM/YYYY HH:mm\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateDisplayFormatNoSeconds, \"DD/MM/YYYY HH:mm\", [\"DD/MM/YYYY HH:mm\"]);\r\n }\r\n}","import { Injectable, Injector } from '@angular/core';\r\nimport { BaseLocalization } from './core/localization.base';\r\nimport { ItemLocalization } from './models';\r\nimport { LocalizationPersistor } from './core/localization.persistor';\r\nimport { LocalePersistor } from './locale-persistor/LocalePersistor';\r\n\r\n/**\r\n * Classe di localizzazione estendibile che permette di specificare le proprie localizzazioni e comunque rendere disponibili le localizzazioni globali\r\n */\r\n@Injectable()\r\nexport class LocalizationService {\r\n\r\n /**\r\n * Cache di tutte le localizzazioni disonibili all'interno di questa classe\r\n */\r\n private TranslationCache: { [id: string]: ItemLocalization } = {};\r\n\r\n private Persistor: LocalizationPersistor;\r\n private LocalePersistor: LocalePersistor;\r\n\r\n public Locale: string;\r\n private baseLocalization: BaseLocalization;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} Locale Locale da utilizzare nel momento che questo servizio richiede le traduzioni\r\n * @param {baseLocalization} baseLocalization Classe base di localizzazione già fornita a livello di root dalla libreria stessa. \r\n * È sufficiente iniettarla nell'eventuale costruttore che estende questa classe e passarla as-is\r\n */\r\n constructor(private injector: Injector) {\r\n this.LocalePersistor = this.injector.get(LocalePersistor);\r\n this.baseLocalization = this.injector.get(BaseLocalization);\r\n \r\n this.Persistor = new LocalizationPersistor(this.TranslationCache);\r\n\r\n this.baseLocalization.Locale.subscribe(lr => {\r\n this.Locale = lr\r\n });\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di un token all'interno della **TranslationCache**\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} token Nome del token\r\n * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n protected setToken(direction: string, token: string, left: string, right: string[]) {\r\n this.Persistor.setToken(direction, token, left, right);\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di una frase all'interno della **TranslationCache**\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n protected set(direction: string, left: string, right: string[]) {\r\n // Controlla di non reinserire la stessa localizzazione presente nel BaseLocalization\r\n // i controlli per il non reinserimento della stessa localizzazione all'interno della stessa istanza è fatto lato Persistor\r\n if (this.baseLocalization.Persistor.get(left, false)) {\r\n console.warn(`La localizzazione per ${left} è già presente fra le localizzazioni base, ignoro l'operazione`);\r\n return;\r\n }\r\n this.Persistor.set(direction, left, right);\r\n }\r\n\r\n /**\r\n * Localizza un token\r\n * \r\n * @param {string} text Il token da localizzare\r\n * \r\n * @returns {string} Token localizzato\r\n */\r\n public token(text: string): string {\r\n return this.loc(text, true);\r\n }\r\n\r\n /**\r\n * Localizza una frase\r\n * \r\n * @param {string} text Frase da localizzare\r\n * @param {boolean} allowtokens Indica se la frase **text** potrebbe essere un token o no\r\n * \r\n * @returns {string} Frase localizzata\r\n */\r\n public loc(text: string, allowtokens?: boolean): string {\r\n if (!text || text == \"undefined\")\r\n return \"\";\r\n \r\n // Prendo la localizzazione o dalla cache attuale o dalla cache del servizio base\r\n var item = this.Persistor.get(text, allowtokens) || this.baseLocalization.Persistor.get(text, allowtokens);\r\n if (!item) {\r\n console.error(\"Impossibile trovare la localizzazione per '\" + text + \"'\");\r\n return \"\";\r\n }\r\n\r\n if(!this.Locale){\r\n console.error(\"Il sistema di localizzazione non ha ancora caricato il Locale, assicurarsi di caricare l'APP solo al retrieve del locale'\");\r\n return \"\";\r\n }\r\n\r\n var loc = this.Persistor.translationByCulture(item, this.Locale);\r\n if (!loc) {\r\n console.error(\"Impossibile trovare la localizzazione per '\" + text + \"', culture \" + this.Locale);\r\n return \"\";\r\n }\r\n\r\n return loc.translation;\r\n }\r\n\r\n public async changeLocale(newLocale: string) {\r\n let locale = await this.LocalePersistor.recover().toPromise();\r\n if (newLocale == locale) {\r\n console.info(\"Il locale richiesto è lo stesso del locale attuale. Ignoro l'operazione\");\r\n return;\r\n }\r\n else {\r\n await this.LocalePersistor.persist(newLocale).toPromise();\r\n location.reload();\r\n }\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform, Optional } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { DateService } from '@esfaenza/extensions';\r\n\r\n/**\r\n * Pipe che permette di formattare una data in base al formato specificato. Utilizza il **DateService** di **@esfaenza/extensions** per ricondurre l'input a una data valida\r\n */\r\n@Pipe({ name: \"loc_date\", pure: true })\r\nexport class LocDatePipe implements PipeTransform {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Optional() private dts: DateService) { }\r\n\r\n /**\r\n * Trasformazione della data in input in base al formato richiesto\r\n * \r\n * @param {any} value Valore da ricondurre ad una data e formattare\r\n * @param {string} format Formato in output della data da visualizzare\r\n * \r\n * @returns {string} Data formattata in base al formato\r\n */\r\n transform(value: any, format: string = \"DD/MM/YYYY\"): string {\r\n if (value == null || value === \"\") return null;\r\n\r\n if(!this.dts)\r\n {\r\n console.error(\"Tentativo di usare loc_date senza DateService. È possibile importare DateService installando e configurando il pacchetto @esfaenza/extensions\")\r\n return null;\r\n }\r\n var detatchedValue = JSON.parse(JSON.stringify(value));\r\n var dt = this.dts.getDateConvertion(detatchedValue);\r\n return dt.format(format);\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { LocalizationService } from '../localizations.service';\r\n\r\n/**\r\n * Pipe di localizzazione per tradurre direttamente da template\r\n */\r\n@Pipe({ name: \"localize\", pure: true })\r\nexport class LocalizePipe implements PipeTransform {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {LocalizationService} translationContainer Container delle traduzioni disponibili nel contesto in cui viene usata la pipe.\r\n * \r\n * Viene iniettata dal provider dichiarato nel singolo componente che utilizza la traduzione e, se non esiste, viene iniettato dal default\r\n */\r\n constructor(private translationContainer: LocalizationService) { }\r\n\r\n /**\r\n * Trasformazione della stringa in input ad una stringa tradotta\r\n * \r\n * @param {string} value Testo da tradurre\r\n * @param {LocalizationService} locContainerOverride Override al contenitore della traduzione iniettato dal costruttore, qualora serva\r\n * \r\n * @returns {string} Frase tradotta\r\n */\r\n transform(value: string, locContainerOverride?: LocalizationService): string {\r\n if (value == null || value === \"\") return \"\";\r\n\r\n return (locContainerOverride || this.translationContainer).loc(value);\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// RXJS\r\nimport { Observable, of } from \"rxjs\";\r\nimport { first } from \"rxjs/operators\";\r\nimport { LocalePersistor } from \"./LocalePersistor\";\r\n\r\n@Injectable()\r\nexport class LocalStorageLocalePersistor extends LocalePersistor {\r\n\r\n /** @ignore Vedi classe base */\r\n public persist(locale: string): Observable<boolean> {\r\n localStorage.setItem(this.LOCALE, locale);\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recover(): Observable<string> {\r\n var ret = localStorage.getItem(this.LOCALE);\r\n return of(ret).pipe(first());\r\n }\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { LOC_LOCALE } from './tokens';\r\nimport { LocalizationService } from './localizations.service';\r\nimport { LocalizationModuleConfig } from './models';\r\nimport { LocDatePipe } from './pipes/loc_date.pipe';\r\nimport { LocalizePipe } from './pipes/localize.pipe';\r\nimport { BaseLocalization } from './core/localization.base';\r\nimport { LocalePersistor } from './locale-persistor/LocalePersistor';\r\nimport { LocalStorageLocalePersistor } from './locale-persistor/LocalStorageCachePersistor';\r\n\r\n@NgModule({\r\n declarations: [LocalizePipe, LocDatePipe],\r\n exports: [LocalizePipe, LocDatePipe]\r\n})\r\nexport class LocalizationModule {\r\n static forRoot(config?: LocalizationModuleConfig): ModuleWithProviders<LocalizationModule> {\r\n return {\r\n ngModule: LocalizationModule,\r\n providers: [\r\n LocalizationService,\r\n BaseLocalization,\r\n { provide: LOC_LOCALE, useValue: config?.defaultLocale || 'it-IT' },\r\n { provide: LocalePersistor, useClass: config?.localePersistor || LocalStorageLocalePersistor },\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of localizations\r\n */\r\n\r\nexport * from './lib/core/localization.base';\r\nexport * from './lib/localizations.module';\r\nexport * from './lib/localizations.service';\r\nexport * from './lib/pipes/localize.pipe';\r\nexport * from './lib/pipes/loc_date.pipe';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/classes/LocalizationModuleConfig';\r\nexport * from './lib/models/classes/BaseLocalizationTokens';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-localizations.mjs","sources":["../../../projects/localizations/src/lib/models/ItemLocalization.ts","../../../projects/localizations/src/lib/models/LocaleObject.ts","../../../projects/localizations/src/lib/models/LocaleDefinitions.ts","../../../projects/localizations/src/lib/models/SpecializedLocalization.ts","../../../projects/localizations/src/lib/core/localization.persistor.ts","../../../projects/localizations/src/lib/models/BaseLocalizationTokens.ts","../../../projects/localizations/src/lib/tokens.ts","../../../projects/localizations/src/lib/locale-persistor/LocalePersistor.ts","../../../projects/localizations/src/lib/core/localization.base.ts","../../../projects/localizations/src/lib/models/LocalizationMissingPolicy.ts","../../../projects/localizations/src/lib/localizations.service.ts","../../../projects/localizations/src/lib/pipes/loc_date.pipe.ts","../../../projects/localizations/src/lib/pipes/localize.pipe.ts","../../../projects/localizations/src/lib/locale-persistor/LocalStorageCachePersistor.ts","../../../projects/localizations/src/lib/localizations.module.ts","../../../projects/localizations/src/lib/models/LocalizationModuleConfig.ts","../../../projects/localizations/src/public-api.ts","../../../projects/localizations/src/esfaenza-localizations.ts"],"sourcesContent":["import { SpecializedLocalization } from \"./SpecializedLocalization\";\r\n\r\n/**\r\n * Contenitore delle localizzazioni collegate ad un testo \"base\", una per ogni linguaggio supportato\r\n */\r\nexport class ItemLocalization {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {boolean} token Indica se è un token o se è un testo\r\n * @param {string} baseText Testo base che verrà richiesto quando verrà cercata la localizzazione\r\n * @param {SpecializedLocalization[]} translations Lista di traduzioni in base al testo base\r\n */\r\n constructor(public token: boolean, public baseText: string, public translations: SpecializedLocalization[]){ }\r\n}","\r\n/**\r\n * Classe che rappresenta un locale (Es. 'Italiano') con i propri alias (Es. 'it' oppure 'it-IT')\r\n */\r\nexport class LocaleObject {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice locale\r\n * @param {string} description Descrizione locale\r\n * @param {string[]} aliases Alias con cui quel locale è conosciuto\r\n */\r\n constructor(public id: string, public description: string, public aliases: string[]) { }\r\n}\r\n","import { LocaleObject } from \"./LocaleObject\";\r\n\r\n// VVVVVVVV Tag per evitare che typescript muoia con l'errore \"Error encountered in metadata generated for exported symbol 'LocaleDefinitions'\" (https://github.com/angular/angular/issues/18867#issuecomment-357484102),\r\n// @dynamic\r\n\r\n/**\r\n * Definizione dei locali disponibili\r\n */\r\nexport class LocaleDefinitions {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Lista dei locali disponibili, definiti anche con i vari alias\r\n */\r\n public static AvailableLocales: LocaleObject[] = [\r\n new LocaleObject('it-IT', 'Italiano', ['it', 'it-IT']),\r\n new LocaleObject('en-US', 'English', ['en', 'en-US'])\r\n ];\r\n\r\n /**\r\n * In base a un alias restituisce il locale rappresentato\r\n * \r\n * @param {string} alias Alias in base al quale raccogliere il Locale\r\n * \r\n * @returns {LocaleObject} Locale richiesto dall'alias\r\n */\r\n public static getByAlias(alias: string): LocaleObject {\r\n return this.AvailableLocales.find(t => !!t.aliases.find(a => a == alias));\r\n }\r\n}\r\n","/**\r\n * Classe che rappresenta la localizzazione di un test base per una certa lingua\r\n */\r\nexport class SpecializedLocalization {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} culture Culture della traduzione\r\n * @param {string} translation Traduzione nella lingua specificata dalla **culture**\r\n */\r\n constructor(public culture: string, public translation: string) { }\r\n}\r\n","import { ItemLocalization } from \"../models/ItemLocalization\";\r\nimport { LocaleDefinitions } from \"../models/LocaleDefinitions\";\r\nimport { SpecializedLocalization } from \"../models/SpecializedLocalization\";\r\n\r\nexport class LocalizationPersistor {\r\n\r\n constructor(private LocCache: { [id: string]: ItemLocalization } = null) { }\r\n\r\n /**\r\n * Imposta la localizzazione di un token all'interno della cache scelta\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} token Nome del token\r\n * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n public setToken(direction: string, token: string, left: string, right: string[]) {\r\n let parsingRegex = /([a-zA-Z]+)[\\s]*->[\\s]*([a-zA-Z,\\s]+)+/g;\r\n var parsingRes = parsingRegex.exec(direction);\r\n\r\n let from = parsingRes[1];\r\n let to: string[] = parsingRes[2].replace(/\\s/g, '').split(',');\r\n let localeFrom = LocaleDefinitions.getByAlias(from);\r\n this._set(token, localeFrom.id, left, true);\r\n\r\n to.forEach((t, index) => {\r\n let localeTo = LocaleDefinitions.getByAlias(t);\r\n this._set(token, localeTo.id, right[index], true);\r\n });\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di una frase all'interno della cache scelta\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n public set(direction: string, left: string, right: string[]) {\r\n let parsingRegex = /([a-zA-Z]+)[\\s]*->[\\s]*([a-zA-Z,\\s]+)+/g;\r\n var parsingRes = parsingRegex.exec(direction);\r\n\r\n let from = parsingRes[1];\r\n let to: string[] = parsingRes[2].replace(/\\s/g, '').split(',');\r\n let localeFrom = LocaleDefinitions.getByAlias(from);\r\n this._set(left, localeFrom.id, left);\r\n\r\n to.forEach((t, index) => {\r\n let localeTo = LocaleDefinitions.getByAlias(t);\r\n this._set(left, localeTo.id, right[index]);\r\n });\r\n }\r\n\r\n /**\r\n * Imposta all'interno della cache specificata un'unica traduzione partendo da un testo di base\r\n * \r\n * @param {string} text Testo da tradurre\r\n * @param {string} culture Lingua per cui inserire la traduzione\r\n * @param {string} translation Traduzione del **text** nella lingua specificata da **culture**\r\n * @param {boolean} token Indica se il **text** è un token o è una frase normale\r\n */\r\n private _set(text: string, culture: string, translation: string, token?: boolean) {\r\n let item = this.get(text, token);\r\n if (!item) {\r\n this.LocCache[text] = new ItemLocalization(token, text, [new SpecializedLocalization(culture, translation)]);\r\n return;\r\n }\r\n\r\n var trs = this.translationByCulture(item, culture);\r\n if (trs) {\r\n console.warn(\"Localization already loaded for sentence '\" + text + \"' and culture \" + culture);\r\n return;\r\n }\r\n\r\n item.translations.push(new SpecializedLocalization(culture, translation));\r\n }\r\n\r\n /**\r\n * Partendo da una cache di localizzazione, dato un testo che può essere o meno un token, cerca quell'elemento all'interno della cache\r\n * \r\n * @param {string} text Testo da cercare nella **LocCache**\r\n * @param {boolean} allowtokens Indica se l'elemento cercato può essere un token o se dev'essere per forza una frase (per evitare rari \r\n * casi di collisione in cui magari un token è uguale a una frase tradotta)\r\n * \r\n * @returns {ItemLocalization} Informazioni di localizzazione per il **text** cercato\r\n */\r\n public get(text: string, allowtokens: boolean): ItemLocalization {\r\n let possibleItem: ItemLocalization = this.LocCache[text];\r\n var item = possibleItem && (allowtokens || !possibleItem.token) ? possibleItem : null;\r\n return item;\r\n }\r\n\r\n /**\r\n * Date le informazioni di localizzazione per un testo cerca e restituisce la traduzione per una lingua specifica\r\n * \r\n * @param {ItemLocalization} Informazioni di localizzazione\r\n * @param {string} culture Lingua della traduzione richiesta\r\n * \r\n * @returns {SpecializedLocalization} Informazioni di localizzazione specifiche della lingua richiesta\r\n */\r\n public translationByCulture(item: ItemLocalization, culture: string): SpecializedLocalization {\r\n for (let i = 0; i < item.translations.length; i++) {\r\n let trl = item.translations[i];\r\n if (trl.culture == culture)\r\n return trl;\r\n }\r\n\r\n return null;\r\n }\r\n}","\r\nexport enum BaseLocalizationTokens {\r\n getDateMonthPosition = \"getDateMonthPosition\",\r\n getDisplayDateMonthPosition = \"getDisplayDateMonthPosition\",\r\n getLocale = \"getLocale\",\r\n getSmallDateFormat = \"getSmallDateFormat\",\r\n getDefaultDateFormat = \"getDefaultDateFormat\",\r\n getSmallDateDisplayFormat = \"getSmallDateDisplayFormat\",\r\n getFullDateFormat = \"getFullDateFormat\",\r\n getFullDateDisplayFormat = \"getFullDateDisplayFormat\",\r\n getFullDateFormatNoSeconds = \"getFullDateFormatNoSeconds\",\r\n getFullDateDisplayFormatNoSeconds = \"getFullDateDisplayFormatNoSeconds\"\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { LocalizationMissingPolicy } from \"./models/LocalizationMissingPolicy\"\r\n\r\n/** Locale da utilizzare per le traduzioni */\r\nexport const LOC_LOCALE: InjectionToken<string> = new InjectionToken<string>('LOC_LOCALE');\r\n\r\n/** Policy da utilizzare per traduzioni mancanti */\r\nexport const LOC_MISSING_POLICY: InjectionToken<LocalizationMissingPolicy> = new InjectionToken<LocalizationMissingPolicy>('LOC_MISSING_POLICY');","import { Observable } from \"rxjs\";\r\n\r\n/** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */\r\nexport abstract class LocalePersistor {\r\n\r\n /** Chiave su cui salvare il locale */\r\n protected LOCALE: string = \"LOCALE\";\r\n\r\n /**\r\n * Salva il Locale\r\n * \r\n * @param {string} locale Locale da salvare\r\n */\r\n public abstract persist(locale: string): Observable<boolean>;\r\n\r\n /**\r\n * Recupera il Locale\r\n * \r\n * @returns {Observable<string>} Valore salvato per il locale\r\n */\r\n public abstract recover(): Observable<string>;\r\n}","import { Inject, Injectable } from \"@angular/core\";\r\nimport { ItemLocalization } from \"../models/ItemLocalization\";\r\nimport { LocalizationPersistor } from \"./localization.persistor\";\r\nimport { BaseLocalizationTokens } from \"../models/BaseLocalizationTokens\";\r\nimport { LocalePersistor } from \"../locale-persistor/LocalePersistor\";\r\nimport { take } from \"rxjs/operators\";\r\nimport { ReplaySubject } from \"rxjs\";\r\nimport { LOC_LOCALE } from \"../tokens\";\r\n\r\n/**\r\n * Classe singleton che contiene le traduzioni di base (per evitare di ripeterle in oggi classe di traduzione) e le funzioni base per \r\n * inserire e leggere traduzioni in/da una cache\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class BaseLocalization {\r\n\r\n /**\r\n * Cache di tutte le localizzazioni di base\r\n */\r\n public LocCache: { [id: string]: ItemLocalization } = {};\r\n\r\n /**\r\n * Persistor delle localizzazioni relativo a questa classe\r\n */\r\n public Persistor: LocalizationPersistor;\r\n\r\n /**\r\n * Locale di riferimento per tutte le traduzioni\r\n */\r\n public Locale: ReplaySubject<string> = new ReplaySubject<string>(1);\r\n\r\n /**\r\n * Costruttore. Da qui utilizzando il metodo statico **BaseLocalization.set** si va a popolare la cache delle traduzioni **BaseTranslations**\r\n */\r\n constructor(public LocalePersistor: LocalePersistor, @Inject(LOC_LOCALE) defaultLocale: string) {\r\n\r\n // Recupero il locale alla partenza del BaseLocalization in modo, spero di dare tempo all'applicazione di tirarlo su\r\n this.LocalePersistor.recover().pipe(take(1)).subscribe(async l => {\r\n if (!l) {\r\n l = defaultLocale;\r\n this.LocalePersistor.persist(defaultLocale);\r\n }\r\n this.Locale.next(l)\r\n });\r\n\r\n this.Persistor = new LocalizationPersistor(this.LocCache); \r\n\r\n this.Persistor.set(\"en->it\", \"Remove\", [\"Elimina\"]);\r\n this.Persistor.set(\"en->it\", \"Paging\", [\"Paginazione\"]);\r\n this.Persistor.set(\"en->it\", \"Yes\", [\"Si\"]);\r\n this.Persistor.set(\"en->it\", \"No\", [\"No\"]);\r\n this.Persistor.set(\"en->it\", \"YES\", [\"SI'\"]);\r\n this.Persistor.set(\"en->it\", \"NO\", [\"NO\"]);\r\n this.Persistor.set(\"en->it\", \"Found objects\", [\"Risultati trovati\"]);\r\n this.Persistor.set(\"en->it\", \"Loading data...\", [\"Carico i dati...\"]);\r\n this.Persistor.set(\"en->it\", \"Error during save operations\", [\"Errori durante il salvataggio\"]);\r\n this.Persistor.set(\"en->it\", \"Error\", [\"Errore\"]);\r\n this.Persistor.set(\"en->it\", \"Warning\", [\"Avviso\"]);\r\n this.Persistor.set(\"en->it\", \"Information\", [\"Informazione\"]);\r\n this.Persistor.set(\"en->it\", \"Save\", [\"Salva\"]);\r\n this.Persistor.set(\"en->it\", \"Back\", [\"Indietro\"]);\r\n this.Persistor.set(\"en->it\", \"From\", [\"Da\"]);\r\n this.Persistor.set(\"en->it\", \"To\", [\"A\"]);\r\n this.Persistor.set(\"en->it\", \"View Chart\", [\"Vedi Grafico\"]);\r\n this.Persistor.set(\"en->it\", \"View Table\", [\"Vedi Tabella\"]);\r\n this.Persistor.set(\"en->it\", \"Notes\", [\"Note\"]);\r\n this.Persistor.set(\"en->it\", \"Edit Notes\", [\"Modifica Note\"]);\r\n this.Persistor.set(\"en->it\", \"Cancel\", [\"Annulla\"]);\r\n this.Persistor.set(\"en->it\", \"Confirm\", [\"Conferma\"]);\r\n this.Persistor.set(\"en->it\", \"View\", [\"Visualizza\"]);\r\n this.Persistor.set(\"en->it\", \"Close\", [\"Chiudi\"]);\r\n this.Persistor.set(\"en->it\", \"Select\", [\"Seleziona\"]);\r\n this.Persistor.set(\"en->it\", \"Meter Reading registered successfully\", [\"Lettura registrata correttamente\"]);\r\n this.Persistor.set(\"en->it\", \"Validation errors during save operations\", [\"Errori di validazione durante il salvataggio\"]);\r\n this.Persistor.set(\"en->it\", \"Can't register reading\", [\"Impossibile registrare la lettura\"]);\r\n this.Persistor.set(\"en->it\", \"Electricity\", [\"Elettricita\"]);\r\n this.Persistor.set(\"en->it\", \"Gas\", [\"Gas\"]);\r\n this.Persistor.set(\"en->it\", \"Water\", [\"Acqua\"]);\r\n this.Persistor.set(\"en->it\", \"Delete\", [\"Elimina\"]);\r\n this.Persistor.set(\"en->it\", \"This operation cannot be reverted\", [\"Questa operazione non puo' essere annullata\"]);\r\n this.Persistor.set(\"en->it\", \"Hide\", [\"Nascondi\"]);\r\n\r\n // Helper validazione\r\n this.Persistor.set(\"en->it\", \"Required field\", [\"Campo richiesto\"]);\r\n this.Persistor.set(\"en->it\", \"Wrong field format\", [\"Formato campo errato\"]);\r\n this.Persistor.set(\"en->it\", \"Wrong field format or field missing\", [\"Formato campo errato o campo mancante\"]);\r\n this.Persistor.set(\"en->it\", \"You don't have the required permissions to view this page. The navigation has been blocked\", [\"Non si hanno privilegi a sufficienza per accedere a questa pagina. La navigazione e' stata bloccata\"]);\r\n\r\n // Informazioni sulle date\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDateMonthPosition, \"0\", [\"1\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDisplayDateMonthPosition, \"1\", [\"1\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getLocale, \"en-US\", [\"it-IT\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getSmallDateFormat, \"MM/DD/YYYY\", [\"DD/MM/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getDefaultDateFormat, \"MM/DD/YYYY\", [\"MM/DD/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getSmallDateDisplayFormat, \"DD/MM/YYYY\", [\"DD/MM/YYYY\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateFormat, \"MM/DD/YYYY HH:mm:ss\", [\"DD/MM/YYYY HH:mm:ss\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateDisplayFormat, \"DD/MM/YYYY HH:mm:ss\", [\"DD/MM/YYYY HH:mm:ss\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateFormatNoSeconds, \"MM/DD/YYYY HH:mm\", [\"DD/MM/YYYY HH:mm\"]);\r\n this.Persistor.setToken(\"en->it\", BaseLocalizationTokens.getFullDateDisplayFormatNoSeconds, \"DD/MM/YYYY HH:mm\", [\"DD/MM/YYYY HH:mm\"]);\r\n }\r\n}","\r\n/** \r\n * Enum che rappresenta le policy di comportamento qualore il sistema di localizzazione non trovi la localizzazione cercata, \r\n * usare **ThrowException** solo se ci si sente infallibili o si vuole debuggare in maniera approfondita l'applicazione \r\n */\r\nexport enum LocalizationMissingPolicy {\r\n PrintEmpty,\r\n PrintSource,\r\n ThrowException\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { BaseLocalization } from './core/localization.base';\r\nimport { ItemLocalization } from './models/ItemLocalization';\r\nimport { LocalizationPersistor } from './core/localization.persistor';\r\nimport { LocalePersistor } from './locale-persistor/LocalePersistor';\r\nimport { LOC_MISSING_POLICY } from './tokens';\r\nimport { LocalizationMissingPolicy } from './models/LocalizationMissingPolicy';\r\n\r\n/**\r\n * Classe di localizzazione estendibile che permette di specificare le proprie localizzazioni e comunque rendere disponibili le localizzazioni globali\r\n */\r\n@Injectable()\r\nexport class LocalizationService {\r\n\r\n /**\r\n * Cache di tutte le localizzazioni disonibili all'interno di questa classe\r\n */\r\n private TranslationCache: { [id: string]: ItemLocalization } = {};\r\n\r\n public Locale: string;\r\n\r\n private baseLocalization: BaseLocalization;\r\n private onMissing: LocalizationMissingPolicy\r\n private Persistor: LocalizationPersistor;\r\n private LocalePersistor: LocalePersistor;\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} Locale Locale da utilizzare nel momento che questo servizio richiede le traduzioni\r\n * @param {baseLocalization} baseLocalization Classe base di localizzazione già fornita a livello di root dalla libreria stessa. \r\n * È sufficiente iniettarla nell'eventuale costruttore che estende questa classe e passarla as-is\r\n */\r\n constructor(private injector: Injector) {\r\n this.LocalePersistor = this.injector.get(LocalePersistor);\r\n this.baseLocalization = this.injector.get(BaseLocalization);\r\n this.onMissing = this.injector.get(LOC_MISSING_POLICY);\r\n \r\n this.Persistor = new LocalizationPersistor(this.TranslationCache);\r\n\r\n this.baseLocalization.Locale.subscribe(lr => {\r\n this.Locale = lr\r\n });\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di un token all'interno della **TranslationCache**\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} token Nome del token\r\n * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n protected setToken(direction: string, token: string, left: string, right: string[]) {\r\n this.Persistor.setToken(direction, token, left, right);\r\n }\r\n\r\n /**\r\n * Imposta la localizzazione di una frase all'interno della **TranslationCache**\r\n * \r\n * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.\r\n * Ad esempio, \"en->it\" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right** \r\n * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio \"en->it,jp,ecc\"\r\n * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**\r\n * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**\r\n */\r\n protected set(direction: string, left: string, right: string[]) {\r\n // Controlla di non reinserire la stessa localizzazione presente nel BaseLocalization\r\n // i controlli per il non reinserimento della stessa localizzazione all'interno della stessa istanza è fatto lato Persistor\r\n if (this.baseLocalization.Persistor.get(left, false)) {\r\n console.warn(`La localizzazione per ${left} è già presente fra le localizzazioni base, ignoro l'operazione`);\r\n return;\r\n }\r\n this.Persistor.set(direction, left, right);\r\n }\r\n\r\n /**\r\n * Localizza un token\r\n * \r\n * @param {string} text Il token da localizzare\r\n * \r\n * @returns {string} Token localizzato\r\n */\r\n public token(text: string): string {\r\n return this.loc(text, true);\r\n }\r\n\r\n /**\r\n * Localizza una frase\r\n * \r\n * @param {string} text Frase da localizzare\r\n * @param {boolean} allowtokens Indica se la frase **text** potrebbe essere un token o no\r\n * \r\n * @returns {string} Frase localizzata\r\n */\r\n public loc(text: string, allowtokens?: boolean): string {\r\n if (!this.Locale)\r\n throw \"Il sistema di localizzazione non ha ancora caricato il Locale, assicurarsi di caricare l'APP solo al retrieve del locale'\";\r\n\r\n if (!text || text == \"undefined\")\r\n return \"\";\r\n\r\n // Prendo la localizzazione o dalla cache attuale o dalla cache del servizio base\r\n var item = this.Persistor.get(text, allowtokens) || this.baseLocalization.Persistor.get(text, allowtokens);\r\n if (!item) {\r\n let message = `Impossibile trovare la localizzazione per '${text}'`;\r\n switch (this.onMissing) {\r\n case LocalizationMissingPolicy.PrintEmpty:\r\n console.error(message);\r\n return \"\";\r\n case LocalizationMissingPolicy.PrintSource:\r\n console.warn(message);\r\n return text;\r\n case LocalizationMissingPolicy.ThrowException:\r\n throw message;\r\n }\r\n }\r\n\r\n var loc = this.Persistor.translationByCulture(item, this.Locale);\r\n if (!loc) {\r\n console.error(\"Impossibile trovare la localizzazione per '\" + text + \"', culture \" + this.Locale);\r\n return \"\";\r\n }\r\n\r\n return loc.translation;\r\n }\r\n\r\n public async changeLocale(newLocale: string) {\r\n let locale = await this.LocalePersistor.recover().toPromise();\r\n if (newLocale == locale) {\r\n console.info(\"Il locale richiesto è lo stesso del locale attuale. Ignoro l'operazione\");\r\n return;\r\n }\r\n else {\r\n await this.LocalePersistor.persist(newLocale).toPromise();\r\n location.reload();\r\n }\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { BaseLocalizationTokens } from \"../models/BaseLocalizationTokens\";\r\nimport { LocalizationService } from \"../localizations.service\";\r\n\r\ndeclare var dayjs;\r\n\r\n/**\r\n * Pipe che permette di formattare una data in base al formato specificato. Utilizza il **DateService** di **@esfaenza/extensions** per ricondurre l'input a una data valida\r\n */\r\n@Pipe({ name: \"loc_date\", pure: true })\r\nexport class LocDatePipe implements PipeTransform {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private baseLoc: LocalizationService) { }\r\n\r\n /**\r\n * Trasformazione della data in input in base al formato richiesto\r\n * \r\n * @param {any} value Valore da ricondurre ad una data e formattare\r\n * @param {string} format Formato in output della data da visualizzare\r\n * \r\n * @returns {string} Data formattata in base al formato\r\n */\r\n transform(value: any, format: string = \"DD/MM/YYYY\"): string {\r\n if (value == null || value === \"\") return null;\r\n\r\n var detatchedValue = JSON.parse(JSON.stringify(value));\r\n var dt = this.getDateConvertion(detatchedValue);\r\n return dt.format(format);\r\n }\r\n\r\n /** @ignore Codice copiato da extensionservice per evitare la dipendenza con extensions */\r\n public getDateConvertion(date: any, useUtc: boolean = false): any {\r\n if (!date)\r\n return null;\r\n\r\n if (this.isDayJs(date))\r\n return date;\r\n\r\n if (this.isJsDate(date))\r\n return useUtc ? dayjs.utc(date) : dayjs(date);\r\n\r\n // Se non c'è la proprietà length vuol dire che non è una stringa e a questo punto non ho idea di che minchia sia\r\n let length = date.length;\r\n if (!length)\r\n return null;\r\n\r\n // Per risparmiare chiamate a tentoni, in base alla lunghezza della stringa chiamo direttamente il metodo giusto, \r\n // controllando poi che mi generi una data come me la aspetto io\r\n let tryThis = null;\r\n\r\n // Se la data contiene la lettera \"T\" vuol dire che è una data del tipo 2020-10-15T00:00:00, direttamente parsabile dal dayjs col locale corretto.\r\n // Per il resto mi baso sulla lunghezza della stringa\r\n if ((<string>date).includes(\"T\"))\r\n tryThis = dayjs(date);\r\n else if (length == this.baseLoc.token(BaseLocalizationTokens.getFullDateFormat).length)\r\n tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getFullDateFormat));\r\n else if (length == this.baseLoc.token(BaseLocalizationTokens.getSmallDateFormat).length)\r\n tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getSmallDateFormat));\r\n else if (length == this.baseLoc.token(BaseLocalizationTokens.getFullDateFormatNoSeconds).length)\r\n tryThis = dayjs(date, this.baseLoc.token(BaseLocalizationTokens.getFullDateFormatNoSeconds))\r\n\r\n if (tryThis && tryThis.isValid && tryThis.isValid())\r\n return tryThis;\r\n\r\n // Se niente funziona, null. \r\n // Ricondurre l'Input ad una data non è possibile.\r\n return null;\r\n }\r\n\r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse una data vera e propria, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * \r\n * @returns {boolean} Indicazione se l'oggetto è un vero Date di Javascript o no\r\n */\r\n private isJsDate(check: any): boolean {\r\n return check && Object.prototype.toString.call(check) === \"[object Date]\" && !isNaN(check);\r\n }\r\n\r\n /**\r\n * Helper che restituisce **true** qualora l'oggetto passato fosse un DayJs vero e proprio, **false** altrimenti\r\n * \r\n * @param {any} check Oggetto da controllare\r\n * @returns {boolean} Indicazione se l'oggetto è un vero DayJs o no\r\n */\r\n private isDayJs(check: any): boolean {\r\n // Non uso instanceof perché sarebbe estremamente più lento\r\n // Non uso nemmeno isDayjs() della libreria Dayjs dato che ha lo stesso problema: https://github.com/iamkun/dayjs/blob/06f88f425828b1ce96b737332d25145a95a4ee9d/src/index.js#L9\r\n return check.$D !== undefined && check.$M !== undefined && check.$y !== undefined;\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { LocalizationService } from '../localizations.service';\r\n\r\n/**\r\n * Pipe di localizzazione per tradurre direttamente da template\r\n */\r\n@Pipe({ name: \"localize\", pure: true })\r\nexport class LocalizePipe implements PipeTransform {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {LocalizationService} translationContainer Container delle traduzioni disponibili nel contesto in cui viene usata la pipe.\r\n * \r\n * Viene iniettata dal provider dichiarato nel singolo componente che utilizza la traduzione e, se non esiste, viene iniettato dal default\r\n */\r\n constructor(private translationContainer: LocalizationService) { }\r\n\r\n /**\r\n * Trasformazione della stringa in input ad una stringa tradotta\r\n * \r\n * @param {string} value Testo da tradurre\r\n * @param {LocalizationService} locContainerOverride Override al contenitore della traduzione iniettato dal costruttore, qualora serva\r\n * \r\n * @returns {string} Frase tradotta\r\n */\r\n transform(value: string, locContainerOverride?: LocalizationService): string {\r\n if (value == null || value === \"\") return \"\";\r\n\r\n return (locContainerOverride || this.translationContainer).loc(value);\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// RXJS\r\nimport { Observable, of } from \"rxjs\";\r\nimport { first } from \"rxjs/operators\";\r\nimport { LocalePersistor } from \"./LocalePersistor\";\r\n\r\n@Injectable()\r\nexport class LocalStorageLocalePersistor extends LocalePersistor {\r\n\r\n /** @ignore Vedi classe base */\r\n public persist(locale: string): Observable<boolean> {\r\n localStorage.setItem(this.LOCALE, locale);\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recover(): Observable<string> {\r\n var ret = localStorage.getItem(this.LOCALE);\r\n return of(ret).pipe(first());\r\n }\r\n}","// Angular\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\n// Pipe\r\nimport { LocDatePipe } from './pipes/loc_date.pipe';\r\nimport { LocalizePipe } from './pipes/localize.pipe';\r\n\r\n// Servizi\r\nimport { LocalizationService } from './localizations.service';\r\nimport { BaseLocalization } from './core/localization.base';\r\nimport { LocalePersistor } from './locale-persistor/LocalePersistor';\r\nimport { LocalStorageLocalePersistor } from './locale-persistor/LocalStorageCachePersistor';\r\n\r\n// Modelli\r\nimport { LocalizationModuleConfig } from './models/LocalizationModuleConfig';\r\nimport { LocalizationMissingPolicy } from './models/LocalizationMissingPolicy';\r\nimport { LOC_LOCALE, LOC_MISSING_POLICY } from './tokens';\r\n\r\n@NgModule({\r\n declarations: [LocalizePipe, LocDatePipe],\r\n exports: [LocalizePipe, LocDatePipe]\r\n})\r\nexport class LocalizationModule {\r\n static forRoot(config?: LocalizationModuleConfig): ModuleWithProviders<LocalizationModule> {\r\n return {\r\n ngModule: LocalizationModule,\r\n providers: [\r\n LocalizationService,\r\n BaseLocalization,\r\n { provide: LOC_LOCALE, useValue: config?.defaultLocale || 'it-IT' },\r\n { provide: LOC_MISSING_POLICY, useValue: config?.localizationMissingPolicy || LocalizationMissingPolicy.PrintEmpty},\r\n { provide: LocalePersistor, useClass: config?.localePersistor || LocalStorageLocalePersistor },\r\n ]\r\n };\r\n }\r\n}","import { Type } from \"@angular/core\";\r\nimport { LocalePersistor } from \"../locale-persistor/LocalePersistor\";\r\nimport { LocalizationMissingPolicy } from \"./LocalizationMissingPolicy\";\r\n\r\n/**\r\n * Classe di configurazione per il modulo di localizzazione\r\n */\r\nexport class LocalizationModuleConfig {\r\n\r\n /** Locale di default utilizzato per richiedere le traduzioni */\r\n defaultLocale: string;\r\n\r\n /**\r\n * Classe che si deve occupare dello store \"Definitivo\" delle info sul locale utilizzato. Di default viene proposto uno store lato localStorage ma si può facilmente \r\n * fornire uno storage che porta le informazioni lato Database in modo da avere la stessa lingua fino a che non viene cambiata (Es. Preference storage)\r\n */\r\n localePersistor?: Type<LocalePersistor>;\r\n\r\n /** Policy di cosa fare in caso il sistema non riesca a trovare una delle traduzioni */\r\n localizationMissingPolicy?: LocalizationMissingPolicy\r\n}","/*\r\n * Public API Surface of localizations\r\n */\r\n\r\nexport * from './lib/core/localization.base';\r\nexport * from './lib/localizations.module';\r\nexport * from './lib/localizations.service';\r\nexport * from './lib/pipes/localize.pipe';\r\nexport * from './lib/pipes/loc_date.pipe';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/LocalizationModuleConfig';\r\nexport * from './lib/models/BaseLocalizationTokens';\r\nexport * from './lib/models/LocalizationMissingPolicy';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ItemLocalization } from "../models";
1
+ import { ItemLocalization } from "../models/ItemLocalization";
2
2
  import { LocalizationPersistor } from "./localization.persistor";
3
3
  import { LocalePersistor } from "../locale-persistor/LocalePersistor";
4
4
  import { ReplaySubject } from "rxjs";
@@ -1,4 +1,5 @@
1
- import { ItemLocalization, SpecializedLocalization } from "../models";
1
+ import { ItemLocalization } from "../models/ItemLocalization";
2
+ import { SpecializedLocalization } from "../models/SpecializedLocalization";
2
3
  export declare class LocalizationPersistor {
3
4
  private LocCache;
4
5
  constructor(LocCache?: {
@@ -1,5 +1,5 @@
1
1
  import { ModuleWithProviders } from '@angular/core';
2
- import { LocalizationModuleConfig } from './models';
2
+ import { LocalizationModuleConfig } from './models/LocalizationModuleConfig';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./pipes/localize.pipe";
5
5
  import * as i2 from "./pipes/loc_date.pipe";
@@ -9,10 +9,11 @@ export declare class LocalizationService {
9
9
  * Cache di tutte le localizzazioni disonibili all'interno di questa classe
10
10
  */
11
11
  private TranslationCache;
12
- private Persistor;
13
- private LocalePersistor;
14
12
  Locale: string;
15
13
  private baseLocalization;
14
+ private onMissing;
15
+ private Persistor;
16
+ private LocalePersistor;
16
17
  /**
17
18
  * Costruttore
18
19
  *
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Enum che rappresenta le policy di comportamento qualore il sistema di localizzazione non trovi la localizzazione cercata,
3
+ * usare **ThrowException** solo se ci si sente infallibili o si vuole debuggare in maniera approfondita l'applicazione
4
+ */
5
+ export declare enum LocalizationMissingPolicy {
6
+ PrintEmpty = 0,
7
+ PrintSource = 1,
8
+ ThrowException = 2
9
+ }
@@ -1,5 +1,6 @@
1
1
  import { Type } from "@angular/core";
2
- import { LocalePersistor } from "../../locale-persistor/LocalePersistor";
2
+ import { LocalePersistor } from "../locale-persistor/LocalePersistor";
3
+ import { LocalizationMissingPolicy } from "./LocalizationMissingPolicy";
3
4
  /**
4
5
  * Classe di configurazione per il modulo di localizzazione
5
6
  */
@@ -11,4 +12,6 @@ export declare class LocalizationModuleConfig {
11
12
  * fornire uno storage che porta le informazioni lato Database in modo da avere la stessa lingua fino a che non viene cambiata (Es. Preference storage)
12
13
  */
13
14
  localePersistor?: Type<LocalePersistor>;
15
+ /** Policy di cosa fare in caso il sistema non riesca a trovare una delle traduzioni */
16
+ localizationMissingPolicy?: LocalizationMissingPolicy;
14
17
  }
@@ -1,15 +1,15 @@
1
1
  import { PipeTransform } from "@angular/core";
2
- import { DateService } from '@esfaenza/extensions';
2
+ import { LocalizationService } from "../localizations.service";
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * Pipe che permette di formattare una data in base al formato specificato. Utilizza il **DateService** di **@esfaenza/extensions** per ricondurre l'input a una data valida
6
6
  */
7
7
  export declare class LocDatePipe implements PipeTransform {
8
- private dts;
8
+ private baseLoc;
9
9
  /**
10
10
  * @ignore
11
11
  */
12
- constructor(dts: DateService);
12
+ constructor(baseLoc: LocalizationService);
13
13
  /**
14
14
  * Trasformazione della data in input in base al formato richiesto
15
15
  *
@@ -19,6 +19,23 @@ export declare class LocDatePipe implements PipeTransform {
19
19
  * @returns {string} Data formattata in base al formato
20
20
  */
21
21
  transform(value: any, format?: string): string;
22
- static ɵfac: i0.ɵɵFactoryDeclaration<LocDatePipe, [{ optional: true; }]>;
22
+ /** @ignore Codice copiato da extensionservice per evitare la dipendenza con extensions */
23
+ getDateConvertion(date: any, useUtc?: boolean): any;
24
+ /**
25
+ * Helper che restituisce **true** qualora l'oggetto passato fosse una data vera e propria, **false** altrimenti
26
+ *
27
+ * @param {any} check Oggetto da controllare
28
+ *
29
+ * @returns {boolean} Indicazione se l'oggetto è un vero Date di Javascript o no
30
+ */
31
+ private isJsDate;
32
+ /**
33
+ * Helper che restituisce **true** qualora l'oggetto passato fosse un DayJs vero e proprio, **false** altrimenti
34
+ *
35
+ * @param {any} check Oggetto da controllare
36
+ * @returns {boolean} Indicazione se l'oggetto è un vero DayJs o no
37
+ */
38
+ private isDayJs;
39
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocDatePipe, never>;
23
40
  static ɵpipe: i0.ɵɵPipeDeclaration<LocDatePipe, "loc_date", false>;
24
41
  }
package/lib/tokens.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- /**
3
- * Locale da utilizzare per le traduzioni
4
- */
2
+ import { LocalizationMissingPolicy } from "./models/LocalizationMissingPolicy";
3
+ /** Locale da utilizzare per le traduzioni */
5
4
  export declare const LOC_LOCALE: InjectionToken<string>;
5
+ /** Policy da utilizzare per traduzioni mancanti */
6
+ export declare const LOC_MISSING_POLICY: InjectionToken<LocalizationMissingPolicy>;
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@esfaenza/localizations",
3
- "version": "15.2.2",
3
+ "version": "15.2.4",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "@angular/common": "^15.2.9",
9
- "@angular/core": "^15.2.9",
10
- "@esfaenza/extensions": "^15.2.1"
9
+ "@angular/core": "^15.2.9"
11
10
  },
12
11
  "module": "fesm2015/esfaenza-localizations.mjs",
13
12
  "es2020": "fesm2020/esfaenza-localizations.mjs",