@tolgee/ngx 2.7.0 → 2.8.0

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,7 +1,7 @@
1
1
  import { __awaiter } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
3
  import { EventEmitter, Injectable, Pipe, Component, Input, APP_INITIALIZER, NgModule } from '@angular/core';
4
- import { from } from 'rxjs';
4
+ import { Observable } from 'rxjs';
5
5
  import { Tolgee, TolgeeConfig, TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '@tolgee/core';
6
6
  export { TolgeeConfig } from '@tolgee/core';
7
7
 
@@ -14,11 +14,15 @@ class TranslateService {
14
14
  get tolgee() {
15
15
  return this._tolgee;
16
16
  }
17
+ /**
18
+ * Starts Tolgee if not started and subscribes for languageChange and translationChange events
19
+ */
17
20
  start(config) {
18
21
  return __awaiter(this, void 0, void 0, function* () {
19
22
  if (!this.runPromise) {
20
23
  this._tolgee = new Tolgee(config);
21
24
  this.runPromise = this.tolgee.run();
25
+ // unsubscribe first, if it is subscribed for some reason
22
26
  this.unsubscribeCoreListeners();
23
27
  this.onTranslationChangeCoreSubscription =
24
28
  this._tolgee.onTranslationChange.subscribe((data) => {
@@ -32,43 +36,120 @@ class TranslateService {
32
36
  });
33
37
  }
34
38
  ngOnDestroy() {
39
+ // stop it!
35
40
  this.tolgee.stop();
41
+ // unsubscribe listeners
36
42
  this.unsubscribeCoreListeners();
37
43
  }
44
+ /**
45
+ * Changes the current language
46
+ * @param lang The new current language (e.g. en, en-US)
47
+ */
38
48
  setLang(lang) {
39
49
  this.tolgee.lang = lang;
40
50
  }
41
- get(input, params = {}, defaultValue) {
42
- return from(this.translate(input, params, false, defaultValue));
51
+ /**
52
+ * Returns the current language
53
+ */
54
+ getCurrentLang() {
55
+ return this.tolgee.lang;
43
56
  }
44
- getSafe(input, params = {}, defaultValue) {
45
- return from(this.translate(input, params, true, defaultValue));
57
+ /**
58
+ * Returns Observable providing current translated value
59
+ * Tne observable is subscribed to translation change and language change events of Tolgee
60
+ *
61
+ * In development mode, it returns string wrapped with configured
62
+ * prefix and suffix to be handled in browser by MutationObserver.
63
+ *
64
+ * You should use unsubscribe method when you are done!
65
+ *
66
+ * in onInit: this.subscription = translateService.get('aa')
67
+ * in onDestroy: this.subscription.unsubscribe()
68
+ *
69
+ * @param key The key to translate (e.g. what-a-key)
70
+ * @param params The parameters to interpolate (e.g. {name: "John"})
71
+ * @param defaultValue Value, which will be rendered, when no translated value is provided
72
+ */
73
+ get(key, params = {}, defaultValue) {
74
+ return this.translate(key, params, false, defaultValue);
46
75
  }
47
- instant(input, params = {}, defaultValue) {
48
- return this.tolgee.instant(input, params, undefined, undefined, defaultValue);
76
+ /**
77
+ * Returns Observable providing current translated value
78
+ * Tne observable is subscribed to translation change and language change events of Tolgee
79
+ *
80
+ * In development mode, it returns the translated string,
81
+ * so in-context localization is not going to work.
82
+ *
83
+ * You should use unsubscribe method when you are done!
84
+ *
85
+ * in onInit: this.subscription = translateService.get('aa')
86
+ * in onDestroy: this.subscription.unsubscribe()
87
+ *
88
+ * @param key The key to translate (e.g. what-a-key)
89
+ * @param params The parameters to interpolate (e.g. {name: "John"})
90
+ * @param defaultValue Value, which will be rendered, when no translated value is provided
91
+ */
92
+ getSafe(key, params = {}, defaultValue) {
93
+ return this.translate(key, params, true, defaultValue);
49
94
  }
95
+ /**
96
+ * Returns the translation value synchronously
97
+ *
98
+ * In development mode, it returns string wrapped with configured
99
+ * prefix and suffix to be handled in browser by MutationObserver.
100
+ *
101
+ * @param key The key to translate (e.g. what-a-key)
102
+ * @param params The parameters to interpolate (e.g. {name: "John"})
103
+ * @param defaultValue Value, which will be rendered, when no translated value is provided
104
+ */
105
+ instant(key, params = {}, defaultValue) {
106
+ return this.tolgee.instant(key, params, undefined, undefined, defaultValue);
107
+ }
108
+ /**
109
+ * Returns the translation value synchronously
110
+ *
111
+ * In development mode, it returns the translated string,
112
+ * so in-context localization is not going to work.
113
+ *
114
+ * @param key The key to translate (e.g. what-a-key)
115
+ * @param params The parameters to interpolate (e.g. {name: "John"})
116
+ * @param defaultValue Value, which will be rendered, when no translated value is provided
117
+ */
50
118
  instantSafe(input, params = {}, defaultValue) {
51
119
  return this.tolgee.instant(input, params, true, undefined, defaultValue);
52
120
  }
53
- getCurrentLang() {
54
- return this.tolgee.lang;
55
- }
56
121
  unsubscribeCoreListeners() {
57
122
  var _a, _b;
58
123
  (_a = this.onTranslationChangeCoreSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
59
124
  (_b = this.onLangChangeCoreSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
60
125
  }
61
- translate(input, params = {}, noWrap = false, defaultValue) {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- //wait for start before translating
64
- yield this.start(this.config);
65
- return yield this.tolgee.translate(input, params, noWrap, defaultValue);
126
+ translate(key, params = {}, noWrap = false, defaultValue) {
127
+ return new Observable((subscriber) => {
128
+ const translate = () => __awaiter(this, void 0, void 0, function* () {
129
+ // start if not started
130
+ yield this.start(this.config);
131
+ const translated = yield this.tolgee.translate(key, params, noWrap, defaultValue);
132
+ subscriber.next(translated);
133
+ });
134
+ translate();
135
+ const onTranslationChangeSubscription = this.tolgee.onTranslationChange.subscribe((data) => {
136
+ if (data.key === key) {
137
+ translate();
138
+ }
139
+ });
140
+ const onLanguageChangeSubscription = this.tolgee.onLangChange.subscribe(() => {
141
+ translate();
142
+ });
143
+ return () => {
144
+ onTranslationChangeSubscription.unsubscribe();
145
+ onLanguageChangeSubscription.unsubscribe();
146
+ };
66
147
  });
67
148
  }
68
149
  }
69
- TranslateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslateService, deps: [{ token: TolgeeConfig }], target: i0.ɵɵFactoryTarget.Injectable });
70
- TranslateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslateService });
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslateService, decorators: [{
150
+ TranslateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslateService, deps: [{ token: TolgeeConfig }], target: i0.ɵɵFactoryTarget.Injectable });
151
+ TranslateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslateService });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslateService, decorators: [{
72
153
  type: Injectable
73
154
  }], ctorParameters: function () { return [{ type: TolgeeConfig }]; } });
74
155
 
@@ -78,15 +159,14 @@ class TranslatePipe {
78
159
  this.value = '';
79
160
  }
80
161
  get resultProvider() {
81
- return (input, params, defaultValue) => this.translateService.get(input, params, defaultValue);
162
+ return (key, params, defaultValue) => this.translateService.get(key, params, defaultValue);
82
163
  }
83
164
  ngOnDestroy() {
84
- this.langChangeSubscription.unsubscribe();
165
+ this.unsubscribe();
85
166
  }
86
- transform(input, paramsOrDefaultValue, params) {
87
- var _a;
88
- if (!input || input.length === 0) {
89
- return input;
167
+ transform(key, paramsOrDefaultValue, params) {
168
+ if (!key || key.length === 0) {
169
+ return key;
90
170
  }
91
171
  const defaultValue = typeof paramsOrDefaultValue !== 'object'
92
172
  ? paramsOrDefaultValue
@@ -94,30 +174,34 @@ class TranslatePipe {
94
174
  if (typeof paramsOrDefaultValue === 'object') {
95
175
  params = paramsOrDefaultValue;
96
176
  }
97
- const newHash = this.getHash(input, params, this.translateService.getCurrentLang());
98
- if (newHash === this.lastHash) {
177
+ if (this.key === key &&
178
+ JSON.stringify(this.params) === JSON.stringify(params) &&
179
+ this.defaultValue === defaultValue) {
99
180
  return this.value;
100
181
  }
101
- (_a = this.langChangeSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
102
- this.langChangeSubscription = this.translateService.onLangChange.subscribe(() => {
103
- this.onLangChange(input, params, defaultValue);
104
- });
105
- this.onLangChange(input, params, defaultValue);
106
- this.lastHash = newHash;
182
+ this.key = key;
183
+ this.params = params;
184
+ this.defaultValue = defaultValue;
185
+ // unsubscribe first
186
+ this.unsubscribe();
187
+ // asynchronously translate and assign subscription
188
+ this.subscription = this.translate(key, params, defaultValue);
107
189
  return this.value;
108
190
  }
109
- getHash(input, params, language) {
110
- return JSON.stringify({ input, params, language });
191
+ unsubscribe() {
192
+ if (this.subscription) {
193
+ this.subscription.unsubscribe();
194
+ }
111
195
  }
112
- onLangChange(input, params, defaultValue) {
113
- this.resultProvider(input, params, defaultValue).subscribe((r) => {
196
+ translate(key, params, defaultValue) {
197
+ return this.resultProvider(key, params, defaultValue).subscribe((r) => {
114
198
  this.value = r;
115
199
  });
116
200
  }
117
201
  }
118
- TranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslatePipe, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
119
- TranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslatePipe, name: "translate", pure: false });
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslatePipe, decorators: [{
202
+ TranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslatePipe, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
203
+ TranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslatePipe, name: "translate", pure: false });
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslatePipe, decorators: [{
121
205
  type: Pipe,
122
206
  args: [{
123
207
  name: 'translate',
@@ -133,9 +217,9 @@ class STranslatePipe extends TranslatePipe {
133
217
  return (input, params, defaultValue) => this.translateService.getSafe(input, params, defaultValue);
134
218
  }
135
219
  }
136
- STranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: STranslatePipe, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
137
- STranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: STranslatePipe, name: "stranslate", pure: false });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: STranslatePipe, decorators: [{
220
+ STranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: STranslatePipe, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
221
+ STranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: STranslatePipe, name: "stranslate", pure: false });
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: STranslatePipe, decorators: [{
139
223
  type: Pipe,
140
224
  args: [{
141
225
  name: 'stranslate',
@@ -148,40 +232,27 @@ class TComponent {
148
232
  this.ref = ref;
149
233
  this.translateService = translateService;
150
234
  }
151
- get resultProvider() {
152
- return (key, params, defaultValue) => this.translateService.getSafe(key, params, defaultValue);
153
- }
154
235
  ngOnInit() {
155
236
  const element = this.ref.nativeElement;
156
237
  element.setAttribute(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, this.key);
157
- //update value when language changed
158
- this.onLangChangeSubscription =
159
- this.translateService.onLangChange.subscribe(() => {
160
- this.translate(this.key, this.params, this.default);
161
- });
162
- //update value when translation changed
163
- this.onTranslationChangeSubscription =
164
- this.translateService.onTranslationChange.subscribe((data) => {
165
- if (data.key == this.key) {
166
- this.translate(this.key, this.params, this.default);
167
- }
168
- });
169
- this.translate(this.key, this.params, this.default);
238
+ // set safe at first
239
+ element.textContent = this.translateService.instantSafe(this.key, this.params, this.default);
240
+ // then do the async translation
241
+ this.subscription = this.translateService
242
+ .getSafe(this.key, this.params, this.default)
243
+ .subscribe((translated) => {
244
+ return (element.textContent = translated);
245
+ });
170
246
  }
171
247
  ngOnDestroy() {
172
- var _a, _b;
173
- (_a = this.onLangChangeSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
174
- (_b = this.onTranslationChangeSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
175
- }
176
- translate(key, params, defaultValue) {
177
- this.resultProvider(key, params, defaultValue).subscribe((r) => {
178
- this.ref.nativeElement.textContent = r;
179
- });
248
+ if (this.subscription) {
249
+ this.subscription.unsubscribe();
250
+ }
180
251
  }
181
252
  }
182
- TComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TComponent, deps: [{ token: i0.ElementRef }, { token: TranslateService }], target: i0.ɵɵFactoryTarget.Component });
183
- TComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TComponent, selector: "[t]", inputs: { params: "params", key: "key", default: "default" }, ngImport: i0, template: ``, isInline: true });
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TComponent, decorators: [{
253
+ TComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TComponent, deps: [{ token: i0.ElementRef }, { token: TranslateService }], target: i0.ɵɵFactoryTarget.Component });
254
+ TComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: TComponent, selector: "[t]", inputs: { params: "params", key: "key", default: "default" }, ngImport: i0, template: ``, isInline: true });
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TComponent, decorators: [{
185
256
  type: Component,
186
257
  args: [{
187
258
  selector: '[t]',
@@ -205,9 +276,9 @@ class TranslationsProvider {
205
276
  });
206
277
  }
207
278
  }
208
- TranslationsProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslationsProvider, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
209
- TranslationsProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslationsProvider });
210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TranslationsProvider, decorators: [{
279
+ TranslationsProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslationsProvider, deps: [{ token: TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
280
+ TranslationsProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslationsProvider });
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TranslationsProvider, decorators: [{
211
282
  type: Injectable
212
283
  }], ctorParameters: function () { return [{ type: TranslateService }]; } });
213
284
 
@@ -233,10 +304,10 @@ class NgxTolgeeModule {
233
304
  };
234
305
  }
235
306
  }
236
- NgxTolgeeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxTolgeeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
237
- NgxTolgeeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxTolgeeModule, declarations: [TranslatePipe, STranslatePipe, TComponent], exports: [TranslatePipe, STranslatePipe, TComponent] });
238
- NgxTolgeeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxTolgeeModule, providers: [] });
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: NgxTolgeeModule, decorators: [{
307
+ NgxTolgeeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgxTolgeeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
308
+ NgxTolgeeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgxTolgeeModule, declarations: [TranslatePipe, STranslatePipe, TComponent], exports: [TranslatePipe, STranslatePipe, TComponent] });
309
+ NgxTolgeeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgxTolgeeModule, providers: [] });
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgxTolgeeModule, decorators: [{
240
311
  type: NgModule,
241
312
  args: [{
242
313
  declarations: [TranslatePipe, STranslatePipe, TComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/stranslate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/translations-provider.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { EventEmitter, Injectable, OnDestroy } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport { Tolgee, TranslationData } from '@tolgee/core';\nimport { TolgeeConfig } from './tolgeeConfig';\n\n@Injectable()\nexport class TranslateService implements OnDestroy {\n public readonly onLangChange: EventEmitter<never> = new EventEmitter<never>();\n public readonly onTranslationChange: EventEmitter<TranslationData> =\n new EventEmitter<TranslationData>();\n\n private runPromise: Promise<void>;\n private onTranslationChangeCoreSubscription: any;\n private onLangChangeCoreSubscription: any;\n\n constructor(private config: TolgeeConfig) {}\n\n private _tolgee: Tolgee;\n\n public get tolgee(): Tolgee {\n return this._tolgee;\n }\n\n public async start(config: TolgeeConfig): Promise<void> {\n if (!this.runPromise) {\n this._tolgee = new Tolgee(config);\n this.runPromise = this.tolgee.run();\n this.unsubscribeCoreListeners();\n this.onTranslationChangeCoreSubscription =\n this._tolgee.onTranslationChange.subscribe((data) => {\n this.onTranslationChange.emit(data);\n });\n this.onLangChangeCoreSubscription = this._tolgee.onLangChange.subscribe(\n () => {\n this.onLangChange.emit();\n }\n );\n }\n await this.runPromise;\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n this.unsubscribeCoreListeners();\n }\n\n public setLang(lang: string) {\n this.tolgee.lang = lang;\n }\n\n public get(\n input: string,\n params = {},\n defaultValue?: string\n ): Observable<string> {\n return from(this.translate(input, params, false, defaultValue));\n }\n\n public getSafe(\n input: string,\n params = {},\n defaultValue?: string\n ): Observable<string> {\n return from(this.translate(input, params, true, defaultValue));\n }\n\n public instant(input: string, params = {}, defaultValue?: string): string {\n return this.tolgee.instant(\n input,\n params,\n undefined,\n undefined,\n defaultValue\n );\n }\n\n public instantSafe(\n input: string,\n params = {},\n defaultValue?: string\n ): string {\n return this.tolgee.instant(input, params, true, undefined, defaultValue);\n }\n\n public getCurrentLang(): string {\n return this.tolgee.lang;\n }\n\n private unsubscribeCoreListeners() {\n this.onTranslationChangeCoreSubscription?.unsubscribe();\n this.onLangChangeCoreSubscription?.unsubscribe();\n }\n\n private async translate(\n input: string,\n params = {},\n noWrap = false,\n defaultValue: string\n ): Promise<string> {\n //wait for start before translating\n await this.start(this.config);\n return await this.tolgee.translate(input, params, noWrap, defaultValue);\n }\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n value = '';\n lastHash: string;\n private langChangeSubscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n protected get resultProvider(): (\n key,\n params,\n defaultValue: string\n ) => Observable<string> {\n return (input, params, defaultValue) =>\n this.translateService.get(input, params, defaultValue);\n }\n\n ngOnDestroy(): void {\n this.langChangeSubscription.unsubscribe();\n }\n\n transform(input: any, params?: Record<string, any>): string;\n transform(\n input: any,\n defaultValue?: string,\n params?: Record<string, any>\n ): string;\n\n transform(\n input: any,\n paramsOrDefaultValue?: Record<string, any> | string,\n params?: Record<string, any>\n ): string {\n if (!input || input.length === 0) {\n return input;\n }\n\n const defaultValue =\n typeof paramsOrDefaultValue !== 'object'\n ? paramsOrDefaultValue\n : undefined;\n\n if (typeof paramsOrDefaultValue === 'object') {\n params = paramsOrDefaultValue;\n }\n\n const newHash = this.getHash(\n input,\n params,\n this.translateService.getCurrentLang()\n );\n\n if (newHash === this.lastHash) {\n return this.value;\n }\n\n this.langChangeSubscription?.unsubscribe();\n this.langChangeSubscription = this.translateService.onLangChange.subscribe(\n () => {\n this.onLangChange(input, params, defaultValue);\n }\n );\n\n this.onLangChange(input, params, defaultValue);\n\n this.lastHash = newHash;\n\n return this.value;\n }\n\n private getHash(input: string, params: object, language: string): string {\n return JSON.stringify({ input, params, language });\n }\n\n private onLangChange(input, params, defaultValue) {\n this.resultProvider(input, params, defaultValue).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import { Pipe } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { TranslatePipe } from './translate.pipe';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n name: 'stranslate',\n pure: false,\n})\nexport class STranslatePipe extends TranslatePipe {\n constructor(translateService: TranslateService) {\n super(translateService);\n }\n\n protected get resultProvider(): (\n input,\n params,\n defaultValue\n ) => Observable<string> {\n return (input, params, defaultValue) =>\n this.translateService.getSafe(input, params, defaultValue);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '@tolgee/core';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy {\n value: string;\n @Input() params?: Record<string, any>;\n @Input() key: string;\n @Input() default?: string;\n onLangChangeSubscription: Subscription;\n onTranslationChangeSubscription: Subscription;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n protected get resultProvider(): (\n key,\n params,\n defaultValue: string\n ) => Observable<string> {\n return (key, params, defaultValue) =>\n this.translateService.getSafe(key, params, defaultValue);\n }\n\n ngOnInit(): void {\n const element = this.ref.nativeElement as HTMLElement;\n\n element.setAttribute(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, this.key);\n\n //update value when language changed\n this.onLangChangeSubscription =\n this.translateService.onLangChange.subscribe(() => {\n this.translate(this.key, this.params, this.default);\n });\n\n //update value when translation changed\n this.onTranslationChangeSubscription =\n this.translateService.onTranslationChange.subscribe((data) => {\n if (data.key == this.key) {\n this.translate(this.key, this.params, this.default);\n }\n });\n this.translate(this.key, this.params, this.default);\n }\n\n ngOnDestroy(): void {\n this.onLangChangeSubscription?.unsubscribe();\n this.onTranslationChangeSubscription?.unsubscribe();\n }\n\n private translate(key, params, defaultValue: string) {\n this.resultProvider(key, params, defaultValue).subscribe((r) => {\n this.ref.nativeElement.textContent = r;\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TranslateService} from \"./translate.service\";\nimport {TolgeeConfig} from \"@tolgee/core\";\n\n@Injectable()\nexport class TranslationsProvider {\n\n constructor(private translateService: TranslateService) {\n }\n\n async load(options: TolgeeConfig) {\n return await this.translateService.start(options);\n }\n}\n\n\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslationsProvider } from './translations-provider';\nimport { TranslateService } from './translate.service';\nimport { STranslatePipe } from './stranslate.pipe';\nimport { TolgeeConfig } from './tolgeeConfig';\nimport { TComponent } from './t.component';\n\n@NgModule({\n declarations: [TranslatePipe, STranslatePipe, TComponent],\n exports: [TranslatePipe, STranslatePipe, TComponent],\n providers: [],\n})\nexport class NgxTolgeeModule {\n // @dynamic\n static forRoot(options: TolgeeConfig): ModuleWithProviders<NgxTolgeeModule> {\n options = { filesUrlPrefix: '/assets/i18n/', ...options };\n return {\n ngModule: NgxTolgeeModule,\n providers: [\n TranslateService,\n TranslationsProvider,\n {\n provide: APP_INITIALIZER,\n useFactory: (provider: TranslationsProvider) => {\n return async () => await provider.load(options);\n },\n deps: [TranslationsProvider, TranslateService],\n multi: true,\n },\n { provide: TolgeeConfig, useValue: options },\n ],\n };\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nimport { TranslateService } from './lib/translate.service';\nimport { TranslatePipe } from './lib/translate.pipe';\nimport { STranslatePipe } from './lib/stranslate.pipe';\nimport { TolgeeConfig } from './lib/tolgeeConfig';\nimport { TComponent } from './lib/t.component';\n\nexport * from './lib/ngx-tolgee.module';\nexport { TolgeeConfig };\nexport { TranslateService };\nexport { TranslatePipe };\nexport { STranslatePipe };\nexport { TComponent };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/stranslate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/translations-provider.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { EventEmitter, Injectable, OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Tolgee, TranslationData } from '@tolgee/core';\nimport { TolgeeConfig } from './tolgeeConfig';\n\n@Injectable()\nexport class TranslateService implements OnDestroy {\n public readonly onLangChange: EventEmitter<never> = new EventEmitter<never>();\n public readonly onTranslationChange: EventEmitter<TranslationData> =\n new EventEmitter<TranslationData>();\n\n private runPromise: Promise<void>;\n private onTranslationChangeCoreSubscription: any;\n private onLangChangeCoreSubscription: any;\n\n constructor(private config: TolgeeConfig) {}\n\n private _tolgee: Tolgee;\n\n public get tolgee(): Tolgee {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started and subscribes for languageChange and translationChange events\n */\n public async start(config: TolgeeConfig): Promise<void> {\n if (!this.runPromise) {\n this._tolgee = new Tolgee(config);\n this.runPromise = this.tolgee.run();\n // unsubscribe first, if it is subscribed for some reason\n this.unsubscribeCoreListeners();\n this.onTranslationChangeCoreSubscription =\n this._tolgee.onTranslationChange.subscribe((data) => {\n this.onTranslationChange.emit(data);\n });\n this.onLangChangeCoreSubscription = this._tolgee.onLangChange.subscribe(\n () => {\n this.onLangChange.emit();\n }\n );\n }\n await this.runPromise;\n }\n\n ngOnDestroy(): void {\n // stop it!\n this.tolgee.stop();\n // unsubscribe listeners\n this.unsubscribeCoreListeners();\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n */\n public setLang(lang: string) {\n this.tolgee.lang = lang;\n }\n\n /**\n * Returns the current language\n */\n public getCurrentLang(): string {\n return this.tolgee.lang;\n }\n\n /**\n * Returns Observable providing current translated value\n * Tne observable is subscribed to translation change and language change events of Tolgee\n *\n * In development mode, it returns string wrapped with configured\n * prefix and suffix to be handled in browser by MutationObserver.\n *\n * You should use unsubscribe method when you are done!\n *\n * in onInit: this.subscription = translateService.get('aa')\n * in onDestroy: this.subscription.unsubscribe()\n *\n * @param key The key to translate (e.g. what-a-key)\n * @param params The parameters to interpolate (e.g. {name: \"John\"})\n * @param defaultValue Value, which will be rendered, when no translated value is provided\n */\n public get(\n key: string,\n params = {},\n defaultValue?: string\n ): Observable<string> {\n return this.translate(key, params, false, defaultValue);\n }\n\n /**\n * Returns Observable providing current translated value\n * Tne observable is subscribed to translation change and language change events of Tolgee\n *\n * In development mode, it returns the translated string,\n * so in-context localization is not going to work.\n *\n * You should use unsubscribe method when you are done!\n *\n * in onInit: this.subscription = translateService.get('aa')\n * in onDestroy: this.subscription.unsubscribe()\n *\n * @param key The key to translate (e.g. what-a-key)\n * @param params The parameters to interpolate (e.g. {name: \"John\"})\n * @param defaultValue Value, which will be rendered, when no translated value is provided\n */\n public getSafe(\n key: string,\n params = {},\n defaultValue?: string\n ): Observable<string> {\n return this.translate(key, params, true, defaultValue);\n }\n\n /**\n * Returns the translation value synchronously\n *\n * In development mode, it returns string wrapped with configured\n * prefix and suffix to be handled in browser by MutationObserver.\n *\n * @param key The key to translate (e.g. what-a-key)\n * @param params The parameters to interpolate (e.g. {name: \"John\"})\n * @param defaultValue Value, which will be rendered, when no translated value is provided\n */\n public instant(key: string, params = {}, defaultValue?: string): string {\n return this.tolgee.instant(key, params, undefined, undefined, defaultValue);\n }\n\n /**\n * Returns the translation value synchronously\n *\n * In development mode, it returns the translated string,\n * so in-context localization is not going to work.\n *\n * @param key The key to translate (e.g. what-a-key)\n * @param params The parameters to interpolate (e.g. {name: \"John\"})\n * @param defaultValue Value, which will be rendered, when no translated value is provided\n */\n public instantSafe(\n input: string,\n params = {},\n defaultValue?: string\n ): string {\n return this.tolgee.instant(input, params, true, undefined, defaultValue);\n }\n\n private unsubscribeCoreListeners() {\n this.onTranslationChangeCoreSubscription?.unsubscribe();\n this.onLangChangeCoreSubscription?.unsubscribe();\n }\n\n private translate(\n key: string,\n params = {},\n noWrap = false,\n defaultValue: string\n ): Observable<string> {\n return new Observable((subscriber) => {\n const translate = async () => {\n // start if not started\n await this.start(this.config);\n const translated = await this.tolgee.translate(\n key,\n params,\n noWrap,\n defaultValue\n );\n\n subscriber.next(translated);\n };\n\n translate();\n\n const onTranslationChangeSubscription =\n this.tolgee.onTranslationChange.subscribe((data) => {\n if (data.key === key) {\n translate();\n }\n });\n\n const onLanguageChangeSubscription = this.tolgee.onLangChange.subscribe(\n () => {\n translate();\n }\n );\n\n return () => {\n onTranslationChangeSubscription.unsubscribe();\n onLanguageChangeSubscription.unsubscribe();\n };\n });\n }\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Observable, Subscription } from 'rxjs';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n value = '';\n key: string;\n params: Record<string, any>;\n defaultValue: string;\n private;\n private subscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n protected get resultProvider(): (\n key,\n params,\n defaultValue: string\n ) => Observable<string> {\n return (key, params, defaultValue) =>\n this.translateService.get(key, params, defaultValue);\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n transform(key: any, params?: Record<string, any>): string;\n\n transform(\n key: any,\n defaultValue?: string,\n params?: Record<string, any>\n ): string;\n\n transform(\n key: any,\n paramsOrDefaultValue?: Record<string, any> | string,\n params?: Record<string, any>\n ): string {\n if (!key || key.length === 0) {\n return key;\n }\n\n const defaultValue =\n typeof paramsOrDefaultValue !== 'object'\n ? paramsOrDefaultValue\n : undefined;\n\n if (typeof paramsOrDefaultValue === 'object') {\n params = paramsOrDefaultValue;\n }\n\n if (\n this.key === key &&\n JSON.stringify(this.params) === JSON.stringify(params) &&\n this.defaultValue === defaultValue\n ) {\n return this.value;\n }\n\n this.key = key;\n this.params = params;\n this.defaultValue = defaultValue;\n\n // unsubscribe first\n this.unsubscribe();\n\n // asynchronously translate and assign subscription\n this.subscription = this.translate(key, params, defaultValue);\n\n return this.value;\n }\n\n private unsubscribe() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private translate(key, params, defaultValue) {\n return this.resultProvider(key, params, defaultValue).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import { Pipe } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { TranslatePipe } from './translate.pipe';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n name: 'stranslate',\n pure: false,\n})\nexport class STranslatePipe extends TranslatePipe {\n constructor(translateService: TranslateService) {\n super(translateService);\n }\n\n protected get resultProvider(): (\n input,\n params,\n defaultValue\n ) => Observable<string> {\n return (input, params, defaultValue) =>\n this.translateService.getSafe(input, params, defaultValue);\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '@tolgee/core';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy {\n @Input() params?: Record<string, any>;\n @Input() key: string;\n @Input() default?: string;\n subscription: Subscription;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n const element = this.ref.nativeElement as HTMLElement;\n element.setAttribute(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, this.key);\n\n // set safe at first\n element.textContent = this.translateService.instantSafe(\n this.key,\n this.params,\n this.default\n );\n\n // then do the async translation\n this.subscription = this.translateService\n .getSafe(this.key, this.params, this.default)\n .subscribe((translated) => {\n return (element.textContent = translated);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TranslateService} from \"./translate.service\";\nimport {TolgeeConfig} from \"@tolgee/core\";\n\n@Injectable()\nexport class TranslationsProvider {\n\n constructor(private translateService: TranslateService) {\n }\n\n async load(options: TolgeeConfig) {\n return await this.translateService.start(options);\n }\n}\n\n\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslationsProvider } from './translations-provider';\nimport { TranslateService } from './translate.service';\nimport { STranslatePipe } from './stranslate.pipe';\nimport { TolgeeConfig } from './tolgeeConfig';\nimport { TComponent } from './t.component';\n\n@NgModule({\n declarations: [TranslatePipe, STranslatePipe, TComponent],\n exports: [TranslatePipe, STranslatePipe, TComponent],\n providers: [],\n})\nexport class NgxTolgeeModule {\n // @dynamic\n static forRoot(options: TolgeeConfig): ModuleWithProviders<NgxTolgeeModule> {\n options = { filesUrlPrefix: '/assets/i18n/', ...options };\n return {\n ngModule: NgxTolgeeModule,\n providers: [\n TranslateService,\n TranslationsProvider,\n {\n provide: APP_INITIALIZER,\n useFactory: (provider: TranslationsProvider) => {\n return async () => await provider.load(options);\n },\n deps: [TranslationsProvider, TranslateService],\n multi: true,\n },\n { provide: TolgeeConfig, useValue: options },\n ],\n };\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nimport { TranslateService } from './lib/translate.service';\nimport { TranslatePipe } from './lib/translate.pipe';\nimport { STranslatePipe } from './lib/stranslate.pipe';\nimport { TolgeeConfig } from './lib/tolgeeConfig';\nimport { TComponent } from './lib/t.component';\n\nexport * from './lib/ngx-tolgee.module';\nexport { TolgeeConfig };\nexport { TranslateService };\nexport { TranslatePipe };\nexport { STranslatePipe };\nexport { TComponent };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}