@juice-js/localize 1.0.0-alpha.9 → 1.2.0-alpha.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.
@@ -1,18 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, NgModule } from '@angular/core';
2
+ import { Injectable, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import * as i1$2 from '@ngx-translate/core';
4
4
  import { Observable, timer } from 'rxjs';
5
5
  import * as i1 from '@angular/common/http';
6
- import { HttpClientModule } from '@angular/common/http';
6
+ import { provideHttpClient, withXhr, withInterceptorsFromDi } from '@angular/common/http';
7
7
  import * as i1$1 from '@angular/router';
8
8
  import * as i5 from '@angular/material/select';
9
9
  import { MatSelectModule } from '@angular/material/select';
10
- import * as i6 from '@angular/material/core';
11
- import { MatOptionModule } from '@angular/material/core';
12
- import * as i7 from '@angular/common';
13
- import { CommonModule } from '@angular/common';
14
- import * as i8 from '@angular/forms';
10
+ import * as i6 from '@angular/forms';
15
11
  import { FormsModule } from '@angular/forms';
12
+ import { CommonModule } from '@angular/common';
13
+ import { MatOptionModule } from '@angular/material/core';
16
14
 
17
15
  class LocalizeConfig {
18
16
  constructor() {
@@ -51,15 +49,15 @@ class LocalizeService {
51
49
  var apiUrl = `${this.options.localizeApi}/${scope}/${appName}`;
52
50
  return this.http.post(apiUrl, data);
53
51
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, deps: [{ token: i1.HttpClient }, { token: LocalizeConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
55
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, providedIn: 'root' }); }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeService, deps: [{ token: i1.HttpClient }, { token: LocalizeConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
53
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeService, providedIn: 'root' }); }
56
54
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, decorators: [{
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeService, decorators: [{
58
56
  type: Injectable,
59
57
  args: [{
60
58
  providedIn: 'root'
61
59
  }]
62
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: LocalizeConfig }]; } });
60
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: LocalizeConfig }] });
63
61
 
64
62
  class UrlHelper {
65
63
  constructor(router) {
@@ -72,7 +70,9 @@ class UrlHelper {
72
70
  });
73
71
  }
74
72
  getCurrentUrl() {
75
- return this.router.url;
73
+ // Router.url can be undefined before the first navigation (Angular v20+);
74
+ // coalesce to an empty string so downstream string ops stay safe.
75
+ return this.router.url ?? '';
76
76
  }
77
77
  trimSlash(url) {
78
78
  if (url.startsWith('/')) {
@@ -83,15 +83,15 @@ class UrlHelper {
83
83
  }
84
84
  return url;
85
85
  }
86
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
87
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, providedIn: 'root' }); }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UrlHelper, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
87
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UrlHelper, providedIn: 'root' }); }
88
88
  }
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, decorators: [{
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: UrlHelper, decorators: [{
90
90
  type: Injectable,
91
91
  args: [{
92
92
  providedIn: 'root'
93
93
  }]
94
- }], ctorParameters: function () { return [{ type: i1$1.Router }]; } });
94
+ }], ctorParameters: () => [{ type: i1$1.Router }] });
95
95
 
96
96
  class CultureComponent {
97
97
  constructor(translate, localize, router, urlHelper) {
@@ -105,8 +105,8 @@ class CultureComponent {
105
105
  });
106
106
  let storedCulture = localStorage.getItem('culture');
107
107
  console.debug("stored culture", storedCulture);
108
- this.culture = storedCulture ? storedCulture : this.translate.defaultLang;
109
- if (this.culture != this.translate.currentLang) {
108
+ this.culture = storedCulture ? storedCulture : (this.translate.getFallbackLang() ?? '');
109
+ if (this.culture != this.translate.getCurrentLang()) {
110
110
  localStorage.setItem('culture', this.culture);
111
111
  }
112
112
  this.router.events.subscribe((event) => {
@@ -117,7 +117,7 @@ class CultureComponent {
117
117
  }
118
118
  loadTranslation() {
119
119
  this.translate.use(this.culture);
120
- if (this.culture != this.translate.defaultLang) {
120
+ if (this.culture != this.translate.getFallbackLang()) {
121
121
  console.debug("loading Translation", this.culture, this.urlHelper.page);
122
122
  this.localize.fetch(this.culture, this.urlHelper.page).subscribe((data) => {
123
123
  console.debug("loaded Translation", data);
@@ -129,13 +129,13 @@ class CultureComponent {
129
129
  localStorage.setItem('culture', this.culture);
130
130
  this.loadTranslation();
131
131
  }
132
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CultureComponent, deps: [{ token: i1$2.TranslateService }, { token: LocalizeService }, { token: i1$1.Router }, { token: UrlHelper }], target: i0.ɵɵFactoryTarget.Component }); }
133
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CultureComponent, selector: "juice-culture-select", ngImport: i0, template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n <mat-option *ngFor=\"let culture of Cultures\" [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n</mat-select>", dependencies: [{ kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CultureComponent, deps: [{ token: i1$2.TranslateService }, { token: LocalizeService }, { token: i1$1.Router }, { token: UrlHelper }], target: i0.ɵɵFactoryTarget.Component }); }
133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: CultureComponent, isStandalone: false, selector: "juice-culture-select", ngImport: i0, template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n @for (culture of Cultures; track culture) {\n <mat-option [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n }\n</mat-select>", dependencies: [{ kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
134
134
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CultureComponent, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CultureComponent, decorators: [{
136
136
  type: Component,
137
- args: [{ selector: 'juice-culture-select', template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n <mat-option *ngFor=\"let culture of Cultures\" [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n</mat-select>" }]
138
- }], ctorParameters: function () { return [{ type: i1$2.TranslateService }, { type: LocalizeService }, { type: i1$1.Router }, { type: UrlHelper }]; } });
137
+ args: [{ selector: 'juice-culture-select', changeDetection: ChangeDetectionStrategy.Eager, standalone: false, template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n @for (culture of Cultures; track culture) {\n <mat-option [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n }\n</mat-select>" }]
138
+ }], ctorParameters: () => [{ type: i1$2.TranslateService }, { type: LocalizeService }, { type: i1$1.Router }, { type: UrlHelper }] });
139
139
 
140
140
  class LocalizeModule {
141
141
  static forRoot(config) {
@@ -150,35 +150,27 @@ class LocalizeModule {
150
150
  ]
151
151
  };
152
152
  }
153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
154
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, declarations: [CultureComponent], imports: [HttpClientModule,
155
- MatSelectModule,
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
154
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.6", ngImport: i0, type: LocalizeModule, declarations: [CultureComponent], imports: [MatSelectModule,
156
155
  MatOptionModule,
157
156
  CommonModule,
158
157
  FormsModule], exports: [CultureComponent] }); }
159
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, imports: [HttpClientModule,
160
- MatSelectModule,
158
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeModule, providers: [provideHttpClient(withXhr(), withInterceptorsFromDi())], imports: [MatSelectModule,
161
159
  MatOptionModule,
162
160
  CommonModule,
163
161
  FormsModule] }); }
164
162
  }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, decorators: [{
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: LocalizeModule, decorators: [{
166
164
  type: NgModule,
167
- args: [{
168
- declarations: [
165
+ args: [{ declarations: [
169
166
  CultureComponent,
170
167
  ],
171
- imports: [
172
- HttpClientModule,
173
- MatSelectModule,
174
- MatOptionModule,
175
- CommonModule,
176
- FormsModule
177
- ],
178
168
  exports: [
179
169
  CultureComponent
180
- ]
181
- }]
170
+ ], imports: [MatSelectModule,
171
+ MatOptionModule,
172
+ CommonModule,
173
+ FormsModule], providers: [provideHttpClient(withXhr(), withInterceptorsFromDi())] }]
182
174
  }] });
183
175
 
184
176
  class SubmitMissingTranslationHandler {
@@ -190,9 +182,9 @@ class SubmitMissingTranslationHandler {
190
182
  this.lastUpdate = new Date();
191
183
  }
192
184
  handle(params) {
193
- if (this.keys.indexOf(params.key) < 0 && params.translateService.currentLang != undefined
194
- && params.translateService.currentLang != params.translateService.defaultLang) {
195
- console.debug("missing translation", params.translateService.currentLang, params.key);
185
+ if (this.keys.indexOf(params.key) < 0 && params.translateService.getCurrentLang() != null
186
+ && params.translateService.getCurrentLang() != params.translateService.getFallbackLang()) {
187
+ console.debug("missing translation", params.translateService.getCurrentLang(), params.key);
196
188
  this.keys.push(params.key);
197
189
  timer(500).subscribe(() => this.checkForSubmit());
198
190
  }
@@ -226,12 +218,12 @@ class SubmitMissingTranslationHandler {
226
218
  });
227
219
  }
228
220
  }
229
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler, deps: [{ token: LocalizeService }, { token: LocalizeConfig }, { token: UrlHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
230
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler }); }
221
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SubmitMissingTranslationHandler, deps: [{ token: LocalizeService }, { token: LocalizeConfig }, { token: UrlHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
222
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SubmitMissingTranslationHandler }); }
231
223
  }
232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler, decorators: [{
224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SubmitMissingTranslationHandler, decorators: [{
233
225
  type: Injectable
234
- }], ctorParameters: function () { return [{ type: LocalizeService }, { type: LocalizeConfig }, { type: UrlHelper }]; } });
226
+ }], ctorParameters: () => [{ type: LocalizeService }, { type: LocalizeConfig }, { type: UrlHelper }] });
235
227
 
236
228
  class ScopedTranslateApiLoader {
237
229
  constructor(service, urlHelper) {
@@ -244,7 +236,6 @@ class ScopedTranslateApiLoader {
244
236
  getTranslation(lang) {
245
237
  console.log("loading translation", lang, this.urlHelper.page);
246
238
  return this.service.fetch(lang, this.urlHelper.page);
247
- ;
248
239
  }
249
240
  }
250
241
 
@@ -1 +1 @@
1
- {"version":3,"file":"juice-js-localize.mjs","sources":["../../../../projects/juice-js/localize/src/lib/localize.config.ts","../../../../projects/juice-js/localize/src/lib/localize.service.ts","../../../../projects/juice-js/localize/src/lib/url-helper.ts","../../../../projects/juice-js/localize/src/lib/culture.component.ts","../../../../projects/juice-js/localize/src/lib/culture.component.html","../../../../projects/juice-js/localize/src/lib/localize.module.ts","../../../../projects/juice-js/localize/src/lib/translate.missing-handler.ts","../../../../projects/juice-js/localize/src/lib/translate.api-loader.ts","../../../../projects/juice-js/localize/src/public-api.ts","../../../../projects/juice-js/localize/src/juice-js-localize.ts"],"sourcesContent":["export class LocalizeConfig{\n submitMissing: boolean = false;\n appName: string = ''; // used for submit missing translation\n localizeApi: string = '';\n cultureApi: string = '';\n}\nexport interface ILocalizeConfig{\n submitMissing?: boolean;\n appName?: string;\n localizeApi: string;\n cultureApi: string;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { LocalizeConfig } from './localize.config';\nimport { Observable } from 'rxjs';\n\nexport interface CultureInfo{\n key: string,\n displayName: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeService {\n\n constructor(private http:HttpClient, private options: LocalizeConfig) { }\n\n fetchCultures() {\n if(!this.options.cultureApi) return new Observable<CultureInfo[]>(function subscribe(observer) {});\n return this.http.get<CultureInfo[]>(this.options.cultureApi);\n }\n\n fetch(lang: string, page: string) {\n if(!this.options.localizeApi) return new Observable<Object>(function subscribe(observer) {});\n let scope = page.replace(/\\//g, '.');\n var apiUrl = `${this.options.localizeApi}/${lang}/${scope}`;\n \n return this.http.get(apiUrl);\n }\n\n submit(page: string, appName: string, data: any) {\n if(this.options.submitMissing == false || !this.options.localizeApi) {\n return new Observable(function subscribe(observer) {\n observer.next(data);\n observer.complete();\n });\n }\n let scope = page.replace(/\\//g, '.');\n var apiUrl = `${this.options.localizeApi}/${scope}/${appName}`;\n \n return this.http.post(apiUrl, data);\n }\n}\n","\nimport {Injectable} from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UrlHelper {\n url!: string;\n page!: string;\n\n constructor(private router: Router) {\n this.url = this.getCurrentUrl();\n this.page = this.trimSlash(this.url.split('?')[0]);\n this.router.events.subscribe((event) => {\n this.url = this.getCurrentUrl();\n this.page = this.trimSlash(this.url.split('?')[0]);\n });\n }\n\n getCurrentUrl(): string {\n return this.router.url;\n }\n\n trimSlash(url: string): string {\n if (url.startsWith('/')) {\n url = url.substring(1);\n }\n if (url.endsWith('/')) {\n url = url.substring(0, url.length - 1);\n }\n return url;\n }\n}","import { Component } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { CultureInfo, LocalizeService } from './localize.service';\nimport { Router } from '@angular/router';\nimport { UrlHelper } from './url-helper';\n\n@Component({\n selector: 'juice-culture-select',\n templateUrl: './culture.component.html',\n styles: [\n ]\n})\nexport class CultureComponent {\n Cultures: CultureInfo[] = [];\n culture!: string;\n constructor(private translate: TranslateService, \n private localize: LocalizeService,\n private router: Router,\n private urlHelper: UrlHelper) {\n\n this.localize.fetchCultures().subscribe(cultures => {\n this.Cultures = cultures;\n });\n\n let storedCulture = localStorage.getItem('culture');\n console.debug(\"stored culture\", storedCulture);\n this.culture = storedCulture ? storedCulture: this.translate.defaultLang;\n if(this.culture != this.translate.currentLang){\n localStorage.setItem('culture', this.culture);\n }\n \n this.router.events.subscribe((event) => {\n if(event.constructor.name == \"NavigationEnd\"){\n this.loadTranslation();\n }\n });\n }\n\n loadTranslation(){\n this.translate.use(this.culture);\n\n if(this.culture != this.translate.defaultLang){\n console.debug(\"loading Translation\", this.culture, this.urlHelper.page);\n\n this.localize.fetch(this.culture, this.urlHelper.page).subscribe((data) => {\n console.debug(\"loaded Translation\", data);\n this.translate.setTranslation(this.culture, data);\n });\n }\n }\n\n changeCulture(){\n localStorage.setItem('culture', this.culture);\n this.loadTranslation();\n }\n}\n","<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n <mat-option *ngFor=\"let culture of Cultures\" [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n</mat-select>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CultureComponent } from './culture.component';\nimport { LocalizeConfig, ILocalizeConfig } from './localize.config';\nimport { LocalizeService } from './localize.service';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [\n CultureComponent,\n ],\n imports: [\n HttpClientModule,\n MatSelectModule,\n MatOptionModule,\n CommonModule,\n FormsModule\n ],\n exports: [\n CultureComponent\n ]\n})\nexport class LocalizeModule {\n public static forRoot(config: ILocalizeConfig): ModuleWithProviders<LocalizeModule> {\n\n return {\n ngModule: LocalizeModule,\n providers: [\n LocalizeService,\n {\n provide: LocalizeConfig,\n useValue: config\n }\n ]\n };\n }\n }\n","import {Injectable} from \"@angular/core\";\nimport {MissingTranslationHandler, MissingTranslationHandlerParams} from \"@ngx-translate/core\";\nimport { timer } from \"rxjs\";\nimport { LocalizeService } from \"./localize.service\";\nimport { UrlHelper } from \"./url-helper\";\nimport { LocalizeConfig } from \"./localize.config\";\n\n\n@Injectable()\nexport class SubmitMissingTranslationHandler implements MissingTranslationHandler {\n\n keys: Array<string> = [];\n lastUpdate: Date = new Date();\n constructor(private service: LocalizeService, \n private options: LocalizeConfig,\n private urlHeper: UrlHelper) {\n }\n\n handle(params: MissingTranslationHandlerParams): string {\n if(this.keys.indexOf(params.key) < 0 && params.translateService.currentLang != undefined\n && params.translateService.currentLang != params.translateService.defaultLang\n ){\n console.debug(\"missing translation\", params.translateService.currentLang, params.key);\n this.keys.push(params.key);\n timer(500).subscribe(()=>this.checkForSubmit());\n }\n return params.key;\n }\n\n checkForSubmit(){\n if(!this.lastUpdate || new Date().getTime() - this.lastUpdate.getTime()>500){\n this.lastUpdate = new Date();\n this.submit();\n }\n }\n submit(){\n if(this.keys.length > 0){\n let keys = this.keys;\n this.keys = [];\n var appName = this.options.appName;\n var page = this.urlHeper.page;\n \n this.service.submit(page, appName, keys)\n .subscribe({\n next: (data) => {\n console.debug(\"submited missing translation\", data);\n },\n error: (error) => {\n if(error.error && error.error == \"Not supported by server configuration\"){\n console.debug(error.error);\n }else{\n console.error(\"error submiting missing translation\", error);\n }\n }\n });\n }\n }\n}","import {TranslateLoader} from \"@ngx-translate/core\";\nimport {Observable, map} from 'rxjs';\nimport { UrlHelper } from \"./url-helper\";\nimport { LocalizeService } from \"./localize.service\";\n\nexport class ScopedTranslateApiLoader implements TranslateLoader {\n constructor(private service: LocalizeService, \n private urlHelper: UrlHelper\n ) {\n\n }\n\n /**\n * Gets the translations from the server\n */\n public getTranslation(lang: string): Observable<Object> {\n console.log(\"loading translation\", lang, this.urlHelper.page);\n return this.service.fetch(lang, this.urlHelper.page);;\n }\n\n}","/*\n * Public API Surface of localize\n */\n\n// export * from './lib/localize.service';\nexport * from './lib/culture.component';\nexport * from './lib/localize.module';\nexport * from './lib/localize.config';\nexport * from './lib/translate.missing-handler';\nexport * from './lib/translate.api-loader';\n// export * from './lib/url-helper';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeConfig","i1","i2.LocalizeService","i3","i4.UrlHelper","i1.LocalizeService","i3.UrlHelper"],"mappings":"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"}
1
+ {"version":3,"file":"juice-js-localize.mjs","sources":["../../../../projects/juice-js/localize/src/lib/localize.config.ts","../../../../projects/juice-js/localize/src/lib/localize.service.ts","../../../../projects/juice-js/localize/src/lib/url-helper.ts","../../../../projects/juice-js/localize/src/lib/culture.component.ts","../../../../projects/juice-js/localize/src/lib/culture.component.html","../../../../projects/juice-js/localize/src/lib/localize.module.ts","../../../../projects/juice-js/localize/src/lib/translate.missing-handler.ts","../../../../projects/juice-js/localize/src/lib/translate.api-loader.ts","../../../../projects/juice-js/localize/src/public-api.ts","../../../../projects/juice-js/localize/src/juice-js-localize.ts"],"sourcesContent":["export class LocalizeConfig{\n submitMissing: boolean = false;\n appName: string = ''; // used for submit missing translation\n localizeApi: string = '';\n cultureApi: string = '';\n}\nexport interface ILocalizeConfig{\n submitMissing?: boolean;\n appName?: string;\n localizeApi: string;\n cultureApi: string;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { LocalizeConfig } from './localize.config';\nimport { Observable } from 'rxjs';\n\nexport interface CultureInfo{\n key: string,\n displayName: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizeService {\n\n constructor(private http:HttpClient, private options: LocalizeConfig) { }\n\n fetchCultures() {\n if(!this.options.cultureApi) return new Observable<CultureInfo[]>(function subscribe(observer) {});\n return this.http.get<CultureInfo[]>(this.options.cultureApi);\n }\n\n fetch(lang: string, page: string) {\n if(!this.options.localizeApi) return new Observable<Object>(function subscribe(observer) {});\n let scope = page.replace(/\\//g, '.');\n var apiUrl = `${this.options.localizeApi}/${lang}/${scope}`;\n \n return this.http.get(apiUrl);\n }\n\n submit(page: string, appName: string, data: any) {\n if(this.options.submitMissing == false || !this.options.localizeApi) {\n return new Observable(function subscribe(observer) {\n observer.next(data);\n observer.complete();\n });\n }\n let scope = page.replace(/\\//g, '.');\n var apiUrl = `${this.options.localizeApi}/${scope}/${appName}`;\n \n return this.http.post(apiUrl, data);\n }\n}\n","\nimport {Injectable} from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UrlHelper {\n url!: string;\n page!: string;\n\n constructor(private router: Router) {\n this.url = this.getCurrentUrl();\n this.page = this.trimSlash(this.url.split('?')[0]);\n this.router.events.subscribe((event) => {\n this.url = this.getCurrentUrl();\n this.page = this.trimSlash(this.url.split('?')[0]);\n });\n }\n\n getCurrentUrl(): string {\n // Router.url can be undefined before the first navigation (Angular v20+);\n // coalesce to an empty string so downstream string ops stay safe.\n return this.router.url ?? '';\n }\n\n trimSlash(url: string): string {\n if (url.startsWith('/')) {\n url = url.substring(1);\n }\n if (url.endsWith('/')) {\n url = url.substring(0, url.length - 1);\n }\n return url;\n }\n}","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { TranslateService, TranslationObject } from '@ngx-translate/core';\nimport { CultureInfo, LocalizeService } from './localize.service';\nimport { Router } from '@angular/router';\nimport { UrlHelper } from './url-helper';\n\n@Component({\n selector: 'juice-culture-select',\n templateUrl: './culture.component.html',\n styles: [],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class CultureComponent {\n Cultures: CultureInfo[] = [];\n culture!: string;\n constructor(private translate: TranslateService, \n private localize: LocalizeService,\n private router: Router,\n private urlHelper: UrlHelper) {\n\n this.localize.fetchCultures().subscribe(cultures => {\n this.Cultures = cultures;\n });\n\n let storedCulture = localStorage.getItem('culture');\n console.debug(\"stored culture\", storedCulture);\n this.culture = storedCulture ? storedCulture: (this.translate.getFallbackLang() ?? '');\n if(this.culture != this.translate.getCurrentLang()){\n localStorage.setItem('culture', this.culture);\n }\n \n this.router.events.subscribe((event) => {\n if(event.constructor.name == \"NavigationEnd\"){\n this.loadTranslation();\n }\n });\n }\n\n loadTranslation(){\n this.translate.use(this.culture);\n\n if(this.culture != this.translate.getFallbackLang()){\n console.debug(\"loading Translation\", this.culture, this.urlHelper.page);\n\n this.localize.fetch(this.culture, this.urlHelper.page).subscribe((data) => {\n console.debug(\"loaded Translation\", data);\n this.translate.setTranslation(this.culture, data as TranslationObject);\n });\n }\n }\n\n changeCulture(){\n localStorage.setItem('culture', this.culture);\n this.loadTranslation();\n }\n}\n","<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n @for (culture of Cultures; track culture) {\n <mat-option [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n }\n</mat-select>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi, withXhr } from '@angular/common/http';\nimport { CultureComponent } from './culture.component';\nimport { LocalizeConfig, ILocalizeConfig } from './localize.config';\nimport { LocalizeService } from './localize.service';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({ declarations: [\n CultureComponent,\n ],\n exports: [\n CultureComponent\n ], imports: [MatSelectModule,\n MatOptionModule,\n CommonModule,\n FormsModule], providers: [provideHttpClient(withXhr(), withInterceptorsFromDi())] })\nexport class LocalizeModule {\n public static forRoot(config: ILocalizeConfig): ModuleWithProviders<LocalizeModule> {\n\n return {\n ngModule: LocalizeModule,\n providers: [\n LocalizeService,\n {\n provide: LocalizeConfig,\n useValue: config\n }\n ]\n };\n }\n }\n","import {Injectable} from \"@angular/core\";\nimport {MissingTranslationHandler, MissingTranslationHandlerParams} from \"@ngx-translate/core\";\nimport { timer } from \"rxjs\";\nimport { LocalizeService } from \"./localize.service\";\nimport { UrlHelper } from \"./url-helper\";\nimport { LocalizeConfig } from \"./localize.config\";\n\n\n@Injectable()\nexport class SubmitMissingTranslationHandler implements MissingTranslationHandler {\n\n keys: Array<string> = [];\n lastUpdate: Date = new Date();\n constructor(private service: LocalizeService, \n private options: LocalizeConfig,\n private urlHeper: UrlHelper) {\n }\n\n handle(params: MissingTranslationHandlerParams): string {\n if(this.keys.indexOf(params.key) < 0 && params.translateService.getCurrentLang() != null\n && params.translateService.getCurrentLang() != params.translateService.getFallbackLang()\n ){\n console.debug(\"missing translation\", params.translateService.getCurrentLang(), params.key);\n this.keys.push(params.key);\n timer(500).subscribe(()=>this.checkForSubmit());\n }\n return params.key;\n }\n\n checkForSubmit(){\n if(!this.lastUpdate || new Date().getTime() - this.lastUpdate.getTime()>500){\n this.lastUpdate = new Date();\n this.submit();\n }\n }\n submit(){\n if(this.keys.length > 0){\n let keys = this.keys;\n this.keys = [];\n var appName = this.options.appName;\n var page = this.urlHeper.page;\n \n this.service.submit(page, appName, keys)\n .subscribe({\n next: (data) => {\n console.debug(\"submited missing translation\", data);\n },\n error: (error) => {\n if(error.error && error.error == \"Not supported by server configuration\"){\n console.debug(error.error);\n }else{\n console.error(\"error submiting missing translation\", error);\n }\n }\n });\n }\n }\n}","import {TranslateLoader, TranslationObject} from \"@ngx-translate/core\";\nimport {Observable} from 'rxjs';\nimport { UrlHelper } from \"./url-helper\";\nimport { LocalizeService } from \"./localize.service\";\n\nexport class ScopedTranslateApiLoader implements TranslateLoader {\n constructor(private service: LocalizeService,\n private urlHelper: UrlHelper\n ) {\n\n }\n\n /**\n * Gets the translations from the server\n */\n public getTranslation(lang: string): Observable<TranslationObject> {\n console.log(\"loading translation\", lang, this.urlHelper.page);\n return this.service.fetch(lang, this.urlHelper.page) as Observable<TranslationObject>;\n }\n\n}","/*\n * Public API Surface of localize\n */\n\n// export * from './lib/localize.service';\nexport * from './lib/culture.component';\nexport * from './lib/localize.module';\nexport * from './lib/localize.config';\nexport * from './lib/translate.missing-handler';\nexport * from './lib/translate.api-loader';\n// export * from './lib/url-helper';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeConfig","i1","i2.LocalizeService","i3","i4.UrlHelper","i1.LocalizeService","i3.UrlHelper"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juice-js/localize",
3
- "version": "1.0.0-alpha.9",
3
+ "version": "1.2.0-alpha.1",
4
4
  "description": "Localize your Angular app with remote translations",
5
5
  "author": "jack@creatorflow.io",
6
6
  "license": "MIT",
@@ -22,16 +22,15 @@
22
22
  },
23
23
  "sideEffects": false,
24
24
  "module": "fesm2022/juice-js-localize.mjs",
25
- "typings": "index.d.ts",
25
+ "typings": "types/juice-js-localize.d.ts",
26
26
  "exports": {
27
27
  "./package.json": {
28
28
  "default": "./package.json"
29
29
  },
30
30
  ".": {
31
- "types": "./index.d.ts",
32
- "esm2022": "./esm2022/juice-js-localize.mjs",
33
- "esm": "./esm2022/juice-js-localize.mjs",
31
+ "types": "./types/juice-js-localize.d.ts",
34
32
  "default": "./fesm2022/juice-js-localize.mjs"
35
33
  }
36
- }
34
+ },
35
+ "type": "module"
37
36
  }
@@ -0,0 +1,97 @@
1
+ import { TranslateService, MissingTranslationHandler, MissingTranslationHandlerParams, TranslateLoader, TranslationObject } from '@ngx-translate/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Observable } from 'rxjs';
4
+ import * as i0 from '@angular/core';
5
+ import { ModuleWithProviders } from '@angular/core';
6
+ import { Router } from '@angular/router';
7
+ import * as i2 from '@angular/material/select';
8
+ import * as i3 from '@angular/material/core';
9
+ import * as i4 from '@angular/common';
10
+ import * as i5 from '@angular/forms';
11
+
12
+ declare class LocalizeConfig {
13
+ submitMissing: boolean;
14
+ appName: string;
15
+ localizeApi: string;
16
+ cultureApi: string;
17
+ }
18
+ interface ILocalizeConfig {
19
+ submitMissing?: boolean;
20
+ appName?: string;
21
+ localizeApi: string;
22
+ cultureApi: string;
23
+ }
24
+
25
+ interface CultureInfo {
26
+ key: string;
27
+ displayName: string;
28
+ }
29
+ declare class LocalizeService {
30
+ private http;
31
+ private options;
32
+ constructor(http: HttpClient, options: LocalizeConfig);
33
+ fetchCultures(): Observable<CultureInfo[]>;
34
+ fetch(lang: string, page: string): Observable<Object>;
35
+ submit(page: string, appName: string, data: any): Observable<unknown>;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeService, never>;
37
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeService>;
38
+ }
39
+
40
+ declare class UrlHelper {
41
+ private router;
42
+ url: string;
43
+ page: string;
44
+ constructor(router: Router);
45
+ getCurrentUrl(): string;
46
+ trimSlash(url: string): string;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<UrlHelper, never>;
48
+ static ɵprov: i0.ɵɵInjectableDeclaration<UrlHelper>;
49
+ }
50
+
51
+ declare class CultureComponent {
52
+ private translate;
53
+ private localize;
54
+ private router;
55
+ private urlHelper;
56
+ Cultures: CultureInfo[];
57
+ culture: string;
58
+ constructor(translate: TranslateService, localize: LocalizeService, router: Router, urlHelper: UrlHelper);
59
+ loadTranslation(): void;
60
+ changeCulture(): void;
61
+ static ɵfac: i0.ɵɵFactoryDeclaration<CultureComponent, never>;
62
+ static ɵcmp: i0.ɵɵComponentDeclaration<CultureComponent, "juice-culture-select", never, {}, {}, never, never, false, never>;
63
+ }
64
+
65
+ declare class LocalizeModule {
66
+ static forRoot(config: ILocalizeConfig): ModuleWithProviders<LocalizeModule>;
67
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeModule, never>;
68
+ static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizeModule, [typeof CultureComponent], [typeof i2.MatSelectModule, typeof i3.MatOptionModule, typeof i4.CommonModule, typeof i5.FormsModule], [typeof CultureComponent]>;
69
+ static ɵinj: i0.ɵɵInjectorDeclaration<LocalizeModule>;
70
+ }
71
+
72
+ declare class SubmitMissingTranslationHandler implements MissingTranslationHandler {
73
+ private service;
74
+ private options;
75
+ private urlHeper;
76
+ keys: Array<string>;
77
+ lastUpdate: Date;
78
+ constructor(service: LocalizeService, options: LocalizeConfig, urlHeper: UrlHelper);
79
+ handle(params: MissingTranslationHandlerParams): string;
80
+ checkForSubmit(): void;
81
+ submit(): void;
82
+ static ɵfac: i0.ɵɵFactoryDeclaration<SubmitMissingTranslationHandler, never>;
83
+ static ɵprov: i0.ɵɵInjectableDeclaration<SubmitMissingTranslationHandler>;
84
+ }
85
+
86
+ declare class ScopedTranslateApiLoader implements TranslateLoader {
87
+ private service;
88
+ private urlHelper;
89
+ constructor(service: LocalizeService, urlHelper: UrlHelper);
90
+ /**
91
+ * Gets the translations from the server
92
+ */
93
+ getTranslation(lang: string): Observable<TranslationObject>;
94
+ }
95
+
96
+ export { CultureComponent, LocalizeConfig, LocalizeModule, ScopedTranslateApiLoader, SubmitMissingTranslationHandler };
97
+ export type { ILocalizeConfig };
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVpY2UtanMtbG9jYWxpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9qdWljZS1qcy9sb2NhbGl6ZS9zcmMvanVpY2UtanMtbG9jYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,54 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@ngx-translate/core";
4
- import * as i2 from "./localize.service";
5
- import * as i3 from "@angular/router";
6
- import * as i4 from "./url-helper";
7
- import * as i5 from "@angular/material/select";
8
- import * as i6 from "@angular/material/core";
9
- import * as i7 from "@angular/common";
10
- import * as i8 from "@angular/forms";
11
- export class CultureComponent {
12
- constructor(translate, localize, router, urlHelper) {
13
- this.translate = translate;
14
- this.localize = localize;
15
- this.router = router;
16
- this.urlHelper = urlHelper;
17
- this.Cultures = [];
18
- this.localize.fetchCultures().subscribe(cultures => {
19
- this.Cultures = cultures;
20
- });
21
- let storedCulture = localStorage.getItem('culture');
22
- console.debug("stored culture", storedCulture);
23
- this.culture = storedCulture ? storedCulture : this.translate.defaultLang;
24
- if (this.culture != this.translate.currentLang) {
25
- localStorage.setItem('culture', this.culture);
26
- }
27
- this.router.events.subscribe((event) => {
28
- if (event.constructor.name == "NavigationEnd") {
29
- this.loadTranslation();
30
- }
31
- });
32
- }
33
- loadTranslation() {
34
- this.translate.use(this.culture);
35
- if (this.culture != this.translate.defaultLang) {
36
- console.debug("loading Translation", this.culture, this.urlHelper.page);
37
- this.localize.fetch(this.culture, this.urlHelper.page).subscribe((data) => {
38
- console.debug("loaded Translation", data);
39
- this.translate.setTranslation(this.culture, data);
40
- });
41
- }
42
- }
43
- changeCulture() {
44
- localStorage.setItem('culture', this.culture);
45
- this.loadTranslation();
46
- }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CultureComponent, deps: [{ token: i1.TranslateService }, { token: i2.LocalizeService }, { token: i3.Router }, { token: i4.UrlHelper }], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CultureComponent, selector: "juice-culture-select", ngImport: i0, template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n <mat-option *ngFor=\"let culture of Cultures\" [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n</mat-select>", dependencies: [{ kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CultureComponent, decorators: [{
51
- type: Component,
52
- args: [{ selector: 'juice-culture-select', template: "<mat-select [style.width.px]=\"180\" [style.margin-left.px]=\"40\" [(ngModel)]=\"culture\" (ngModelChange)=\"changeCulture()\">\n <mat-option *ngFor=\"let culture of Cultures\" [value]=\"culture.key\">\n {{culture.displayName}}\n </mat-option>\n</mat-select>" }]
53
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.LocalizeService }, { type: i3.Router }, { type: i4.UrlHelper }]; } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VsdHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qdWljZS1qcy9sb2NhbGl6ZS9zcmMvbGliL2N1bHR1cmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvanVpY2UtanMvbG9jYWxpemUvc3JjL2xpYi9jdWx0dXJlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFZMUMsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFvQixTQUEyQixFQUNyQyxRQUF5QixFQUN6QixNQUFjLEVBQ2QsU0FBb0I7UUFIVixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNyQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUw5QixhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQU8zQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUN6RSxJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUM7WUFDNUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsSUFBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUM7Z0JBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFakMsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7K0dBMUNVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDREQ1o3QiwrUUFJYTs7NEZEUUEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ3VsdHVyZUluZm8sIExvY2FsaXplU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVXJsSGVscGVyIH0gZnJvbSAnLi91cmwtaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnanVpY2UtY3VsdHVyZS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VsdHVyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEN1bHR1cmVDb21wb25lbnQge1xuICBDdWx0dXJlczogQ3VsdHVyZUluZm9bXSA9IFtdO1xuICBjdWx0dXJlITogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgXG4gICAgcHJpdmF0ZSBsb2NhbGl6ZTogTG9jYWxpemVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB1cmxIZWxwZXI6IFVybEhlbHBlcikge1xuXG4gICAgdGhpcy5sb2NhbGl6ZS5mZXRjaEN1bHR1cmVzKCkuc3Vic2NyaWJlKGN1bHR1cmVzID0+IHtcbiAgICAgIHRoaXMuQ3VsdHVyZXMgPSBjdWx0dXJlcztcbiAgICB9KTtcblxuICAgIGxldCBzdG9yZWRDdWx0dXJlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1bHR1cmUnKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzdG9yZWQgY3VsdHVyZVwiLCBzdG9yZWRDdWx0dXJlKTtcbiAgICAgIHRoaXMuY3VsdHVyZSA9IHN0b3JlZEN1bHR1cmUgPyBzdG9yZWRDdWx0dXJlOiB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICAgIGlmKHRoaXMuY3VsdHVyZSAhPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyl7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdWx0dXJlJywgdGhpcy5jdWx0dXJlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYoZXZlbnQuY29uc3RydWN0b3IubmFtZSA9PSBcIk5hdmlnYXRpb25FbmRcIil7XG4gICAgICAgICAgdGhpcy5sb2FkVHJhbnNsYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBsb2FkVHJhbnNsYXRpb24oKXtcbiAgICB0aGlzLnRyYW5zbGF0ZS51c2UodGhpcy5jdWx0dXJlKTtcblxuICAgIGlmKHRoaXMuY3VsdHVyZSAhPSB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZyl7XG4gICAgICBjb25zb2xlLmRlYnVnKFwibG9hZGluZyBUcmFuc2xhdGlvblwiLCB0aGlzLmN1bHR1cmUsIHRoaXMudXJsSGVscGVyLnBhZ2UpO1xuXG4gICAgICB0aGlzLmxvY2FsaXplLmZldGNoKHRoaXMuY3VsdHVyZSwgdGhpcy51cmxIZWxwZXIucGFnZSkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJsb2FkZWQgVHJhbnNsYXRpb25cIiwgZGF0YSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldFRyYW5zbGF0aW9uKHRoaXMuY3VsdHVyZSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDdWx0dXJlKCl7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2N1bHR1cmUnLCB0aGlzLmN1bHR1cmUpO1xuICAgIHRoaXMubG9hZFRyYW5zbGF0aW9uKCk7XG4gIH1cbn1cbiIsIjxtYXQtc2VsZWN0IFtzdHlsZS53aWR0aC5weF09XCIxODBcIiBbc3R5bGUubWFyZ2luLWxlZnQucHhdPVwiNDBcIiBbKG5nTW9kZWwpXT1cImN1bHR1cmVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDdWx0dXJlKClcIj5cbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY3VsdHVyZSBvZiBDdWx0dXJlc1wiIFt2YWx1ZV09XCJjdWx0dXJlLmtleVwiPlxuICAgICAge3tjdWx0dXJlLmRpc3BsYXlOYW1lfX1cbiAgICA8L21hdC1vcHRpb24+XG48L21hdC1zZWxlY3Q+Il19
@@ -1,9 +0,0 @@
1
- export class LocalizeConfig {
2
- constructor() {
3
- this.submitMissing = false;
4
- this.appName = ''; // used for submit missing translation
5
- this.localizeApi = '';
6
- this.cultureApi = '';
7
- }
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvanVpY2UtanMvbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDSSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixZQUFPLEdBQVcsRUFBRSxDQUFDLENBQUMsc0NBQXNDO1FBQzVELGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIExvY2FsaXplQ29uZmlne1xuICAgIHN1Ym1pdE1pc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBhcHBOYW1lOiBzdHJpbmcgPSAnJzsgLy8gdXNlZCBmb3Igc3VibWl0IG1pc3NpbmcgdHJhbnNsYXRpb25cbiAgICBsb2NhbGl6ZUFwaTogc3RyaW5nID0gJyc7XG4gICAgY3VsdHVyZUFwaTogc3RyaW5nID0gJyc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6ZUNvbmZpZ3tcbiAgICBzdWJtaXRNaXNzaW5nPzogYm9vbGVhbjtcbiAgICBhcHBOYW1lPzogc3RyaW5nO1xuICAgIGxvY2FsaXplQXBpOiBzdHJpbmc7XG4gICAgY3VsdHVyZUFwaTogc3RyaW5nO1xufSJdfQ==
@@ -1,54 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { HttpClientModule } from '@angular/common/http';
4
- import { CultureComponent } from './culture.component';
5
- import { LocalizeConfig } from './localize.config';
6
- import { LocalizeService } from './localize.service';
7
- import { MatSelectModule } from '@angular/material/select';
8
- import { MatOptionModule } from '@angular/material/core';
9
- import { FormsModule } from '@angular/forms';
10
- import * as i0 from "@angular/core";
11
- export class LocalizeModule {
12
- static forRoot(config) {
13
- return {
14
- ngModule: LocalizeModule,
15
- providers: [
16
- LocalizeService,
17
- {
18
- provide: LocalizeConfig,
19
- useValue: config
20
- }
21
- ]
22
- };
23
- }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, declarations: [CultureComponent], imports: [HttpClientModule,
26
- MatSelectModule,
27
- MatOptionModule,
28
- CommonModule,
29
- FormsModule], exports: [CultureComponent] }); }
30
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, imports: [HttpClientModule,
31
- MatSelectModule,
32
- MatOptionModule,
33
- CommonModule,
34
- FormsModule] }); }
35
- }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeModule, decorators: [{
37
- type: NgModule,
38
- args: [{
39
- declarations: [
40
- CultureComponent,
41
- ],
42
- imports: [
43
- HttpClientModule,
44
- MatSelectModule,
45
- MatOptionModule,
46
- CommonModule,
47
- FormsModule
48
- ],
49
- exports: [
50
- CultureComponent
51
- ]
52
- }]
53
- }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvanVpY2UtanMvbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWlCN0MsTUFBTSxPQUFPLGNBQWM7SUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF1QjtRQUUzQyxPQUFPO1lBQ0gsUUFBUSxFQUFFLGNBQWM7WUFDeEIsU0FBUyxFQUFFO2dCQUNQLGVBQWU7Z0JBQ2Y7b0JBQ0ksT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFFBQVEsRUFBRSxNQUFNO2lCQUNuQjthQUNKO1NBQ0osQ0FBQztJQUNKLENBQUM7K0dBYlUsY0FBYztnSEFBZCxjQUFjLGlCQWJ2QixnQkFBZ0IsYUFHaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixlQUFlO1lBQ2YsWUFBWTtZQUNaLFdBQVcsYUFHWCxnQkFBZ0I7Z0hBR1AsY0FBYyxZQVZ2QixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGVBQWU7WUFDZixZQUFZO1lBQ1osV0FBVzs7NEZBTUYsY0FBYztrQkFmMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixXQUFXO3FCQUNaO29CQUNELE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7cUJBQ2pCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VsdHVyZUNvbXBvbmVudCB9IGZyb20gJy4vY3VsdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxpemVDb25maWcsIElMb2NhbGl6ZUNvbmZpZyB9IGZyb20gJy4vbG9jYWxpemUuY29uZmlnJztcbmltcG9ydCB7IExvY2FsaXplU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemUuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ3VsdHVyZUNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEN1bHR1cmVDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZU1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IElMb2NhbGl6ZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9jYWxpemVNb2R1bGU+IHtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5nTW9kdWxlOiBMb2NhbGl6ZU1vZHVsZSxcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICBMb2NhbGl6ZVNlcnZpY2UsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogTG9jYWxpemVDb25maWcsXG4gICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbiAgfVxuIH1cbiJdfQ==
@@ -1,43 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common/http";
5
- import * as i2 from "./localize.config";
6
- export class LocalizeService {
7
- constructor(http, options) {
8
- this.http = http;
9
- this.options = options;
10
- }
11
- fetchCultures() {
12
- if (!this.options.cultureApi)
13
- return new Observable(function subscribe(observer) { });
14
- return this.http.get(this.options.cultureApi);
15
- }
16
- fetch(lang, page) {
17
- if (!this.options.localizeApi)
18
- return new Observable(function subscribe(observer) { });
19
- let scope = page.replace(/\//g, '.');
20
- var apiUrl = `${this.options.localizeApi}/${lang}/${scope}`;
21
- return this.http.get(apiUrl);
22
- }
23
- submit(page, appName, data) {
24
- if (this.options.submitMissing == false || !this.options.localizeApi) {
25
- return new Observable(function subscribe(observer) {
26
- observer.next(data);
27
- observer.complete();
28
- });
29
- }
30
- let scope = page.replace(/\//g, '.');
31
- var apiUrl = `${this.options.localizeApi}/${scope}/${appName}`;
32
- return this.http.post(apiUrl, data);
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, deps: [{ token: i1.HttpClient }, { token: i2.LocalizeConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
35
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, providedIn: 'root' }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalizeService, decorators: [{
38
- type: Injectable,
39
- args: [{
40
- providedIn: 'root'
41
- }]
42
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.LocalizeConfig }]; } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2p1aWNlLWpzL2xvY2FsaXplL3NyYy9saWIvbG9jYWxpemUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFVbEMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBb0IsSUFBZSxFQUFVLE9BQXVCO1FBQWhELFNBQUksR0FBSixJQUFJLENBQVc7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtJQUFJLENBQUM7SUFFekUsYUFBYTtRQUNYLElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksVUFBVSxDQUFnQixTQUFTLFNBQVMsQ0FBQyxRQUFRLElBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzlCLElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksVUFBVSxDQUFTLFNBQVMsU0FBUyxDQUFDLFFBQVEsSUFBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUU1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBRSxJQUFTO1FBQzdDLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDbkUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxRQUFRO2dCQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRS9ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBNUJVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IExvY2FsaXplQ29uZmlnIH0gZnJvbSAnLi9sb2NhbGl6ZS5jb25maWcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1bHR1cmVJbmZve1xuICBrZXk6IHN0cmluZyxcbiAgZGlzcGxheU5hbWU6IHN0cmluZyxcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxpemVTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6SHR0cENsaWVudCwgcHJpdmF0ZSBvcHRpb25zOiBMb2NhbGl6ZUNvbmZpZykgeyB9XG5cbiAgZmV0Y2hDdWx0dXJlcygpIHtcbiAgICBpZighdGhpcy5vcHRpb25zLmN1bHR1cmVBcGkpIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxDdWx0dXJlSW5mb1tdPihmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHt9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDdWx0dXJlSW5mb1tdPih0aGlzLm9wdGlvbnMuY3VsdHVyZUFwaSk7XG4gIH1cblxuICBmZXRjaChsYW5nOiBzdHJpbmcsIHBhZ2U6IHN0cmluZykge1xuICAgIGlmKCF0aGlzLm9wdGlvbnMubG9jYWxpemVBcGkpIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxPYmplY3Q+KGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge30pO1xuICAgIGxldCBzY29wZSA9IHBhZ2UucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgdmFyIGFwaVVybCA9IGAke3RoaXMub3B0aW9ucy5sb2NhbGl6ZUFwaX0vJHtsYW5nfS8ke3Njb3BlfWA7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpVXJsKTtcbiAgfVxuXG4gIHN1Ym1pdChwYWdlOiBzdHJpbmcsIGFwcE5hbWU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgaWYodGhpcy5vcHRpb25zLnN1Ym1pdE1pc3NpbmcgPT0gZmFsc2UgfHwgIXRoaXMub3B0aW9ucy5sb2NhbGl6ZUFwaSkge1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgc2NvcGUgPSBwYWdlLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgIHZhciBhcGlVcmwgPSBgJHt0aGlzLm9wdGlvbnMubG9jYWxpemVBcGl9LyR7c2NvcGV9LyR7YXBwTmFtZX1gO1xuICAgIFxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChhcGlVcmwsIGRhdGEpO1xuICB9XG59XG4iXX0=
@@ -1,15 +0,0 @@
1
- export class ScopedTranslateApiLoader {
2
- constructor(service, urlHelper) {
3
- this.service = service;
4
- this.urlHelper = urlHelper;
5
- }
6
- /**
7
- * Gets the translations from the server
8
- */
9
- getTranslation(lang) {
10
- console.log("loading translation", lang, this.urlHelper.page);
11
- return this.service.fetch(lang, this.urlHelper.page);
12
- ;
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmFwaS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qdWljZS1qcy9sb2NhbGl6ZS9zcmMvbGliL3RyYW5zbGF0ZS5hcGktbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFBb0IsT0FBd0IsRUFDbEMsU0FBb0I7UUFEVixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFXO0lBRzVCLENBQUM7SUFFSDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFBLENBQUM7SUFDeEQsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVMb2FkZXJ9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge09ic2VydmFibGUsIG1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVcmxIZWxwZXIgfSBmcm9tIFwiLi91cmwtaGVscGVyXCI7XG5pbXBvcnQgeyBMb2NhbGl6ZVNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBTY29wZWRUcmFuc2xhdGVBcGlMb2FkZXIgaW1wbGVtZW50cyBUcmFuc2xhdGVMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IExvY2FsaXplU2VydmljZSwgXG4gICAgcHJpdmF0ZSB1cmxIZWxwZXI6IFVybEhlbHBlclxuICAgICkge1xuXG4gICAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgc2VydmVyXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcbiAgICBjb25zb2xlLmxvZyhcImxvYWRpbmcgdHJhbnNsYXRpb25cIiwgbGFuZywgdGhpcy51cmxIZWxwZXIucGFnZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5mZXRjaChsYW5nLCB0aGlzLnVybEhlbHBlci5wYWdlKTs7XG4gIH1cblxufSJdfQ==
@@ -1,58 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { timer } from "rxjs";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./localize.service";
5
- import * as i2 from "./localize.config";
6
- import * as i3 from "./url-helper";
7
- export class SubmitMissingTranslationHandler {
8
- constructor(service, options, urlHeper) {
9
- this.service = service;
10
- this.options = options;
11
- this.urlHeper = urlHeper;
12
- this.keys = [];
13
- this.lastUpdate = new Date();
14
- }
15
- handle(params) {
16
- if (this.keys.indexOf(params.key) < 0 && params.translateService.currentLang != undefined
17
- && params.translateService.currentLang != params.translateService.defaultLang) {
18
- console.debug("missing translation", params.translateService.currentLang, params.key);
19
- this.keys.push(params.key);
20
- timer(500).subscribe(() => this.checkForSubmit());
21
- }
22
- return params.key;
23
- }
24
- checkForSubmit() {
25
- if (!this.lastUpdate || new Date().getTime() - this.lastUpdate.getTime() > 500) {
26
- this.lastUpdate = new Date();
27
- this.submit();
28
- }
29
- }
30
- submit() {
31
- if (this.keys.length > 0) {
32
- let keys = this.keys;
33
- this.keys = [];
34
- var appName = this.options.appName;
35
- var page = this.urlHeper.page;
36
- this.service.submit(page, appName, keys)
37
- .subscribe({
38
- next: (data) => {
39
- console.debug("submited missing translation", data);
40
- },
41
- error: (error) => {
42
- if (error.error && error.error == "Not supported by server configuration") {
43
- console.debug(error.error);
44
- }
45
- else {
46
- console.error("error submiting missing translation", error);
47
- }
48
- }
49
- });
50
- }
51
- }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler, deps: [{ token: i1.LocalizeService }, { token: i2.LocalizeConfig }, { token: i3.UrlHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
53
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler }); }
54
- }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubmitMissingTranslationHandler, decorators: [{
56
- type: Injectable
57
- }], ctorParameters: function () { return [{ type: i1.LocalizeService }, { type: i2.LocalizeConfig }, { type: i3.UrlHelper }]; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLm1pc3NpbmctaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2p1aWNlLWpzL2xvY2FsaXplL3NyYy9saWIvdHJhbnNsYXRlLm1pc3NpbmctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTzdCLE1BQU0sT0FBTywrQkFBK0I7SUFJMUMsWUFBb0IsT0FBd0IsRUFDbEMsT0FBdUIsRUFDdkIsUUFBbUI7UUFGVCxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBSjdCLFNBQUksR0FBa0IsRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBSTlCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBdUM7UUFDNUMsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksU0FBUztlQUNuRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQzlFO1lBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFFLEVBQUUsQ0FBQSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBQyxHQUFHLEVBQUM7WUFDMUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUNELE1BQU07UUFDSixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUN0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7aUJBQ3JDLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLElBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLHVDQUF1QyxFQUFDO3dCQUN2RSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDNUI7eUJBQUk7d0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDN0Q7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQzsrR0EvQ1UsK0JBQStCO21IQUEvQiwrQkFBK0I7OzRGQUEvQiwrQkFBK0I7a0JBRDNDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge01pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXIsIE1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXJQYXJhbXN9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBMb2NhbGl6ZVNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVcmxIZWxwZXIgfSBmcm9tIFwiLi91cmwtaGVscGVyXCI7XG5pbXBvcnQgeyBMb2NhbGl6ZUNvbmZpZyB9IGZyb20gXCIuL2xvY2FsaXplLmNvbmZpZ1wiO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdWJtaXRNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyIGltcGxlbWVudHMgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlciB7XG5cbiAga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBsYXN0VXBkYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBMb2NhbGl6ZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgb3B0aW9uczogTG9jYWxpemVDb25maWcsXG4gICAgcHJpdmF0ZSB1cmxIZXBlcjogVXJsSGVscGVyKSB7XG4gIH1cblxuICBoYW5kbGUocGFyYW1zOiBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyUGFyYW1zKTogc3RyaW5nIHtcbiAgICBpZih0aGlzLmtleXMuaW5kZXhPZihwYXJhbXMua2V5KSA8IDAgJiYgcGFyYW1zLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgIT0gdW5kZWZpbmVkXG4gICAgICAmJiBwYXJhbXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyAhPSBwYXJhbXMudHJhbnNsYXRlU2VydmljZS5kZWZhdWx0TGFuZ1xuICAgICl7XG4gICAgICBjb25zb2xlLmRlYnVnKFwibWlzc2luZyB0cmFuc2xhdGlvblwiLCBwYXJhbXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZywgcGFyYW1zLmtleSk7XG4gICAgICB0aGlzLmtleXMucHVzaChwYXJhbXMua2V5KTtcbiAgICAgIHRpbWVyKDUwMCkuc3Vic2NyaWJlKCgpPT50aGlzLmNoZWNrRm9yU3VibWl0KCkpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLmtleTtcbiAgfVxuXG4gIGNoZWNrRm9yU3VibWl0KCl7XG4gICAgaWYoIXRoaXMubGFzdFVwZGF0ZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMubGFzdFVwZGF0ZS5nZXRUaW1lKCk+NTAwKXtcbiAgICAgIHRoaXMubGFzdFVwZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuICBzdWJtaXQoKXtcbiAgICBpZih0aGlzLmtleXMubGVuZ3RoID4gMCl7XG4gICAgICBsZXQga2V5cyA9IHRoaXMua2V5cztcbiAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgdmFyIGFwcE5hbWUgPSB0aGlzLm9wdGlvbnMuYXBwTmFtZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy51cmxIZXBlci5wYWdlO1xuICAgICAgXG4gICAgICB0aGlzLnNlcnZpY2Uuc3VibWl0KHBhZ2UsIGFwcE5hbWUsIGtleXMpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzdWJtaXRlZCBtaXNzaW5nIHRyYW5zbGF0aW9uXCIsIGRhdGEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IgPT0gXCJOb3Qgc3VwcG9ydGVkIGJ5IHNlcnZlciBjb25maWd1cmF0aW9uXCIpe1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGVycm9yLmVycm9yKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3Igc3VibWl0aW5nIG1pc3NpbmcgdHJhbnNsYXRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59Il19
@@ -1,35 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/router";
4
- export class UrlHelper {
5
- constructor(router) {
6
- this.router = router;
7
- this.url = this.getCurrentUrl();
8
- this.page = this.trimSlash(this.url.split('?')[0]);
9
- this.router.events.subscribe((event) => {
10
- this.url = this.getCurrentUrl();
11
- this.page = this.trimSlash(this.url.split('?')[0]);
12
- });
13
- }
14
- getCurrentUrl() {
15
- return this.router.url;
16
- }
17
- trimSlash(url) {
18
- if (url.startsWith('/')) {
19
- url = url.substring(1);
20
- }
21
- if (url.endsWith('/')) {
22
- url = url.substring(0, url.length - 1);
23
- }
24
- return url;
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, providedIn: 'root' }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UrlHelper, decorators: [{
30
- type: Injectable,
31
- args: [{
32
- providedIn: 'root'
33
- }]
34
- }], ctorParameters: function () { return [{ type: i1.Router }]; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2p1aWNlLWpzL2xvY2FsaXplL3NyYy9saWIvdXJsLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFNekMsTUFBTSxPQUFPLFNBQVM7SUFJcEIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2QixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzsrR0F6QlUsU0FBUzttSEFBVCxTQUFTLGNBRlIsTUFBTTs7NEZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXJsSGVscGVyIHtcbiAgdXJsITogc3RyaW5nO1xuICBwYWdlITogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcbiAgICB0aGlzLnVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICAgIHRoaXMucGFnZSA9IHRoaXMudHJpbVNsYXNoKHRoaXMudXJsLnNwbGl0KCc/JylbMF0pO1xuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuICAgICAgdGhpcy5wYWdlID0gdGhpcy50cmltU2xhc2godGhpcy51cmwuc3BsaXQoJz8nKVswXSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDdXJyZW50VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybDtcbiAgfVxuXG4gIHRyaW1TbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIGlmICh1cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH1cbn0iXX0=
@@ -1,11 +0,0 @@
1
- /*
2
- * Public API Surface of localize
3
- */
4
- // export * from './lib/localize.service';
5
- export * from './lib/culture.component';
6
- export * from './lib/localize.module';
7
- export * from './lib/localize.config';
8
- export * from './lib/translate.missing-handler';
9
- export * from './lib/translate.api-loader';
10
- // export * from './lib/url-helper';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2p1aWNlLWpzL2xvY2FsaXplL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsMENBQTBDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGxvY2FsaXplXG4gKi9cblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWxpemUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdWx0dXJlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbGl6ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWxpemUuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RyYW5zbGF0ZS5taXNzaW5nLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHJhbnNsYXRlLmFwaS1sb2FkZXInO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdXJsLWhlbHBlcic7Il19
package/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="@juice-js/localize" />
5
- export * from './public-api';
@@ -1,18 +0,0 @@
1
- import { TranslateService } from '@ngx-translate/core';
2
- import { CultureInfo, LocalizeService } from './localize.service';
3
- import { Router } from '@angular/router';
4
- import { UrlHelper } from './url-helper';
5
- import * as i0 from "@angular/core";
6
- export declare class CultureComponent {
7
- private translate;
8
- private localize;
9
- private router;
10
- private urlHelper;
11
- Cultures: CultureInfo[];
12
- culture: string;
13
- constructor(translate: TranslateService, localize: LocalizeService, router: Router, urlHelper: UrlHelper);
14
- loadTranslation(): void;
15
- changeCulture(): void;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<CultureComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<CultureComponent, "juice-culture-select", never, {}, {}, never, never, false, never>;
18
- }
@@ -1,12 +0,0 @@
1
- export declare class LocalizeConfig {
2
- submitMissing: boolean;
3
- appName: string;
4
- localizeApi: string;
5
- cultureApi: string;
6
- }
7
- export interface ILocalizeConfig {
8
- submitMissing?: boolean;
9
- appName?: string;
10
- localizeApi: string;
11
- cultureApi: string;
12
- }
@@ -1,15 +0,0 @@
1
- import { ModuleWithProviders } from '@angular/core';
2
- import { ILocalizeConfig } from './localize.config';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./culture.component";
5
- import * as i2 from "@angular/common/http";
6
- import * as i3 from "@angular/material/select";
7
- import * as i4 from "@angular/material/core";
8
- import * as i5 from "@angular/common";
9
- import * as i6 from "@angular/forms";
10
- export declare class LocalizeModule {
11
- static forRoot(config: ILocalizeConfig): ModuleWithProviders<LocalizeModule>;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeModule, never>;
13
- static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizeModule, [typeof i1.CultureComponent], [typeof i2.HttpClientModule, typeof i3.MatSelectModule, typeof i4.MatOptionModule, typeof i5.CommonModule, typeof i6.FormsModule], [typeof i1.CultureComponent]>;
14
- static ɵinj: i0.ɵɵInjectorDeclaration<LocalizeModule>;
15
- }
@@ -1,18 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { LocalizeConfig } from './localize.config';
3
- import { Observable } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- export interface CultureInfo {
6
- key: string;
7
- displayName: string;
8
- }
9
- export declare class LocalizeService {
10
- private http;
11
- private options;
12
- constructor(http: HttpClient, options: LocalizeConfig);
13
- fetchCultures(): Observable<CultureInfo[]>;
14
- fetch(lang: string, page: string): Observable<Object>;
15
- submit(page: string, appName: string, data: any): Observable<unknown>;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeService, never>;
17
- static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeService>;
18
- }
@@ -1,13 +0,0 @@
1
- import { TranslateLoader } from "@ngx-translate/core";
2
- import { Observable } from 'rxjs';
3
- import { UrlHelper } from "./url-helper";
4
- import { LocalizeService } from "./localize.service";
5
- export declare class ScopedTranslateApiLoader implements TranslateLoader {
6
- private service;
7
- private urlHelper;
8
- constructor(service: LocalizeService, urlHelper: UrlHelper);
9
- /**
10
- * Gets the translations from the server
11
- */
12
- getTranslation(lang: string): Observable<Object>;
13
- }
@@ -1,18 +0,0 @@
1
- import { MissingTranslationHandler, MissingTranslationHandlerParams } from "@ngx-translate/core";
2
- import { LocalizeService } from "./localize.service";
3
- import { UrlHelper } from "./url-helper";
4
- import { LocalizeConfig } from "./localize.config";
5
- import * as i0 from "@angular/core";
6
- export declare class SubmitMissingTranslationHandler implements MissingTranslationHandler {
7
- private service;
8
- private options;
9
- private urlHeper;
10
- keys: Array<string>;
11
- lastUpdate: Date;
12
- constructor(service: LocalizeService, options: LocalizeConfig, urlHeper: UrlHelper);
13
- handle(params: MissingTranslationHandlerParams): string;
14
- checkForSubmit(): void;
15
- submit(): void;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<SubmitMissingTranslationHandler, never>;
17
- static ɵprov: i0.ɵɵInjectableDeclaration<SubmitMissingTranslationHandler>;
18
- }
@@ -1,12 +0,0 @@
1
- import { Router } from "@angular/router";
2
- import * as i0 from "@angular/core";
3
- export declare class UrlHelper {
4
- private router;
5
- url: string;
6
- page: string;
7
- constructor(router: Router);
8
- getCurrentUrl(): string;
9
- trimSlash(url: string): string;
10
- static ɵfac: i0.ɵɵFactoryDeclaration<UrlHelper, never>;
11
- static ɵprov: i0.ɵɵInjectableDeclaration<UrlHelper>;
12
- }
package/public-api.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './lib/culture.component';
2
- export * from './lib/localize.module';
3
- export * from './lib/localize.config';
4
- export * from './lib/translate.missing-handler';
5
- export * from './lib/translate.api-loader';