@tolgee/ngx 6.4.0 → 6.4.1-prerelease.43dd4fa5.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.
- package/fesm2022/tolgee-ngx.mjs +131 -204
- package/fesm2022/tolgee-ngx.mjs.map +1 -1
- package/index.d.ts +110 -5
- package/package.json +3 -5
- package/esm2022/lib/loader.component.mjs +0 -24
- package/esm2022/lib/namespace.resolver.mjs +0 -28
- package/esm2022/lib/ngx-tolgee.module.mjs +0 -39
- package/esm2022/lib/t.component.mjs +0 -103
- package/esm2022/lib/tolgee-instance-token.mjs +0 -3
- package/esm2022/lib/translate.pipe.mjs +0 -64
- package/esm2022/lib/translate.service.mjs +0 -133
- package/esm2022/public-api.mjs +0 -11
- package/esm2022/tolgee-ngx.mjs +0 -5
- package/lib/loader.component.d.ts +0 -6
- package/lib/namespace.resolver.d.ts +0 -11
- package/lib/ngx-tolgee.module.d.ts +0 -9
- package/lib/t.component.d.ts +0 -33
- package/lib/tolgee-instance-token.d.ts +0 -3
- package/lib/translate.pipe.d.ts +0 -20
- package/lib/translate.service.d.ts +0 -61
- package/public-api.d.ts +0 -7
package/fesm2022/tolgee-ngx.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Injectable,
|
|
2
|
+
import { InjectionToken, inject, NgZone, Injectable, ChangeDetectorRef, Pipe, input, ElementRef, Renderer2, computed, effect, Directive, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { getTranslateProps } from '@tolgee/web';
|
|
5
5
|
export * from '@tolgee/web';
|
|
@@ -7,35 +7,64 @@ export * from '@tolgee/web';
|
|
|
7
7
|
const TOLGEE_INSTANCE = new InjectionToken('tolgee.instance');
|
|
8
8
|
|
|
9
9
|
class TranslateService {
|
|
10
|
-
_tolgee;
|
|
11
|
-
_ngZone;
|
|
12
10
|
runPromise;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
11
|
+
_ngZone = inject(NgZone);
|
|
12
|
+
#tolgeeOrPromise = inject(TOLGEE_INSTANCE);
|
|
13
|
+
#resolvedTolgee;
|
|
17
14
|
get tolgee() {
|
|
18
|
-
|
|
15
|
+
if (this.#resolvedTolgee) {
|
|
16
|
+
// If it's still a promise, throw error
|
|
17
|
+
if (this.#resolvedTolgee instanceof Promise) {
|
|
18
|
+
throw new Error('Tolgee instance is not yet resolved. Call start() first or wait for app initialization.');
|
|
19
|
+
}
|
|
20
|
+
return this.#resolvedTolgee;
|
|
21
|
+
}
|
|
22
|
+
// If it's a promise, this is a synchronous access before resolution
|
|
23
|
+
if (this.#tolgeeOrPromise instanceof Promise) {
|
|
24
|
+
throw new Error('Tolgee instance is not yet resolved. Call start() first or wait for app initialization.');
|
|
25
|
+
}
|
|
26
|
+
this.#resolvedTolgee = this.#tolgeeOrPromise;
|
|
27
|
+
return this.#resolvedTolgee;
|
|
19
28
|
}
|
|
20
29
|
/**
|
|
21
30
|
* Starts Tolgee if not started.
|
|
22
31
|
*
|
|
23
|
-
* The Tolgee is run outside NgZone. The triggered events
|
|
24
|
-
* trigger the change detection
|
|
32
|
+
* The Tolgee is run outside NgZone. The triggered events don't
|
|
33
|
+
* trigger the change the detection when listening directly via Tolgee.on.
|
|
25
34
|
*
|
|
26
35
|
* However, all the emitting methods (on, translate, languageAsync)
|
|
27
36
|
* in this class are emitting back in Angular's NgZone,
|
|
28
37
|
* so the change detection works fine.
|
|
29
38
|
*/
|
|
30
39
|
async start() {
|
|
40
|
+
// If tolgee was provided as a promise, resolve it first
|
|
41
|
+
if (!this.#resolvedTolgee) {
|
|
42
|
+
if (this.#tolgeeOrPromise instanceof Promise) {
|
|
43
|
+
// Assign the promise immediately to prevent redundant awaits
|
|
44
|
+
this.#resolvedTolgee = this.#tolgeeOrPromise;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Eagerly cache the resolved instance
|
|
48
|
+
this.#resolvedTolgee = this.#tolgeeOrPromise;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Await resolution if it's a promise
|
|
52
|
+
if (this.#resolvedTolgee instanceof Promise) {
|
|
53
|
+
this.#resolvedTolgee = await this.#resolvedTolgee;
|
|
54
|
+
}
|
|
31
55
|
if (!this.isSSR()) {
|
|
32
|
-
|
|
56
|
+
try {
|
|
57
|
+
await this.runIfNotRunning();
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('Tolgee failed to start:', error);
|
|
61
|
+
}
|
|
33
62
|
}
|
|
34
63
|
}
|
|
35
64
|
/**
|
|
36
|
-
* Returns translation asynchronously, this method always
|
|
65
|
+
* Returns translation asynchronously, this method always returns
|
|
37
66
|
*/
|
|
38
|
-
translate
|
|
67
|
+
translate(...args) {
|
|
39
68
|
// @ts-ignore
|
|
40
69
|
const params = getTranslateProps(...args);
|
|
41
70
|
return new Observable((subscriber) => {
|
|
@@ -43,7 +72,9 @@ class TranslateService {
|
|
|
43
72
|
const translate = async () => {
|
|
44
73
|
await loadPromise;
|
|
45
74
|
const translated = this.tolgee.t(params);
|
|
46
|
-
|
|
75
|
+
this._ngZone.run(() => {
|
|
76
|
+
subscriber.next(translated);
|
|
77
|
+
});
|
|
47
78
|
};
|
|
48
79
|
// noinspection JSIgnoredPromiseFromCall
|
|
49
80
|
translate();
|
|
@@ -53,10 +84,10 @@ class TranslateService {
|
|
|
53
84
|
subscription.unsubscribe();
|
|
54
85
|
};
|
|
55
86
|
});
|
|
56
|
-
}
|
|
87
|
+
}
|
|
57
88
|
/**
|
|
58
|
-
* Instantly returns translated value. May return undefined or outdated value.
|
|
59
|
-
* Use only when you cannot use translate.
|
|
89
|
+
* Instantly returns a translated value. May return undefined or outdated value.
|
|
90
|
+
* Use only when you cannot use translate pipe.
|
|
60
91
|
*/
|
|
61
92
|
instant = (...args) => {
|
|
62
93
|
// @ts-ignore
|
|
@@ -71,7 +102,7 @@ class TranslateService {
|
|
|
71
102
|
}
|
|
72
103
|
/**
|
|
73
104
|
* Returns an observable emitting current language.
|
|
74
|
-
* It instantly emits current language
|
|
105
|
+
* It instantly emits the current language
|
|
75
106
|
*/
|
|
76
107
|
get languageAsync() {
|
|
77
108
|
return new Observable((subscriber) => {
|
|
@@ -84,7 +115,7 @@ class TranslateService {
|
|
|
84
115
|
}
|
|
85
116
|
/**
|
|
86
117
|
* Changes the current language
|
|
87
|
-
* @param lang The new current language (e.g
|
|
118
|
+
* @param lang The new current language (e.g., en, en-US)
|
|
88
119
|
* @return Promise<void> Resolves when translations
|
|
89
120
|
* for given language are loaded
|
|
90
121
|
*/
|
|
@@ -92,9 +123,9 @@ class TranslateService {
|
|
|
92
123
|
return this.tolgee.changeLanguage(lang);
|
|
93
124
|
}
|
|
94
125
|
/**
|
|
95
|
-
* Returns observable emitting when specified event is triggered.
|
|
126
|
+
* Returns observable emitting when a specified event is triggered.
|
|
96
127
|
*
|
|
97
|
-
* It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,
|
|
128
|
+
* It's a wrapper of Tolgee. 'on' method. The emmit is triggered inside ngZone,
|
|
98
129
|
* so change detection should work properly.
|
|
99
130
|
*
|
|
100
131
|
* @param event the event to listen
|
|
@@ -110,7 +141,18 @@ class TranslateService {
|
|
|
110
141
|
});
|
|
111
142
|
}
|
|
112
143
|
ngOnDestroy() {
|
|
113
|
-
this
|
|
144
|
+
const tolgeeInstance = this.#resolvedTolgee || this.#tolgeeOrPromise;
|
|
145
|
+
if (tolgeeInstance instanceof Promise) {
|
|
146
|
+
// If Tolgee is still resolving, stop it when it resolves
|
|
147
|
+
tolgeeInstance
|
|
148
|
+
.then((instance) => instance?.stop())
|
|
149
|
+
.catch(() => {
|
|
150
|
+
// Ignore errors if the promise was rejected
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else if (tolgeeInstance) {
|
|
154
|
+
tolgeeInstance.stop();
|
|
155
|
+
}
|
|
114
156
|
}
|
|
115
157
|
async runIfNotRunning() {
|
|
116
158
|
if (!this.runPromise) {
|
|
@@ -123,36 +165,29 @@ class TranslateService {
|
|
|
123
165
|
isSSR() {
|
|
124
166
|
return typeof window === 'undefined';
|
|
125
167
|
}
|
|
126
|
-
static ɵfac = function TranslateService_Factory(
|
|
168
|
+
static ɵfac = function TranslateService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TranslateService)(); };
|
|
127
169
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac, providedIn: 'root' });
|
|
128
170
|
}
|
|
129
171
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateService, [{
|
|
130
172
|
type: Injectable,
|
|
131
173
|
args: [{ providedIn: 'root' }]
|
|
132
|
-
}],
|
|
133
|
-
type: Inject,
|
|
134
|
-
args: [TOLGEE_INSTANCE]
|
|
135
|
-
}] }, { type: i0.NgZone }], null); })();
|
|
174
|
+
}], null, null); })();
|
|
136
175
|
|
|
137
176
|
class TranslatePipe {
|
|
138
|
-
translateService;
|
|
139
|
-
_cdr;
|
|
140
177
|
value = '';
|
|
141
178
|
previousHash;
|
|
142
179
|
subscription;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
this._cdr = _cdr;
|
|
146
|
-
}
|
|
180
|
+
translateService = inject(TranslateService);
|
|
181
|
+
_cdr = inject(ChangeDetectorRef);
|
|
147
182
|
ngOnDestroy() {
|
|
148
183
|
this.unsubscribe();
|
|
149
184
|
}
|
|
150
|
-
transform
|
|
185
|
+
transform(...args) {
|
|
151
186
|
// @ts-ignore
|
|
152
187
|
const params = getTranslateProps(...args);
|
|
153
188
|
const { key } = params;
|
|
154
|
-
if (!key
|
|
155
|
-
return
|
|
189
|
+
if (!key) {
|
|
190
|
+
return '';
|
|
156
191
|
}
|
|
157
192
|
const newHash = this.hash(params);
|
|
158
193
|
if (this.previousHash === newHash) {
|
|
@@ -161,7 +196,7 @@ class TranslatePipe {
|
|
|
161
196
|
this.previousHash = newHash;
|
|
162
197
|
this.translate(params);
|
|
163
198
|
return this.value;
|
|
164
|
-
}
|
|
199
|
+
}
|
|
165
200
|
hash(props) {
|
|
166
201
|
return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);
|
|
167
202
|
}
|
|
@@ -182,7 +217,7 @@ class TranslatePipe {
|
|
|
182
217
|
this._cdr.detectChanges();
|
|
183
218
|
});
|
|
184
219
|
}
|
|
185
|
-
static ɵfac = function TranslatePipe_Factory(
|
|
220
|
+
static ɵfac = function TranslatePipe_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TranslatePipe)(); };
|
|
186
221
|
static ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "translate", type: TranslatePipe, pure: false });
|
|
187
222
|
}
|
|
188
223
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslatePipe, [{
|
|
@@ -190,189 +225,81 @@ class TranslatePipe {
|
|
|
190
225
|
args: [{
|
|
191
226
|
name: 'translate',
|
|
192
227
|
pure: false,
|
|
193
|
-
standalone: false,
|
|
194
228
|
}]
|
|
195
|
-
}],
|
|
229
|
+
}], null, null); })();
|
|
196
230
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
default;
|
|
205
|
-
noWrap = false;
|
|
206
|
-
language;
|
|
231
|
+
class TDirective {
|
|
232
|
+
key = input(...(ngDevMode ? [undefined, { debugName: "key" }] : []));
|
|
233
|
+
ns = input(...(ngDevMode ? [undefined, { debugName: "ns" }] : []));
|
|
234
|
+
params = input(...(ngDevMode ? [undefined, { debugName: "params" }] : []));
|
|
235
|
+
default = input(...(ngDevMode ? [undefined, { debugName: "default" }] : []));
|
|
236
|
+
noWrap = input(false, ...(ngDevMode ? [{ debugName: "noWrap" }] : []));
|
|
237
|
+
language = input(...(ngDevMode ? [undefined, { debugName: "language" }] : []));
|
|
207
238
|
/**
|
|
208
|
-
* When true, innerHTML property of element is set.
|
|
239
|
+
* When true, the innerHTML property of an element is set.
|
|
209
240
|
* Use only when you're sure the HTML is sanitized.
|
|
210
241
|
*/
|
|
211
|
-
isHtml = false;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
this.
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
this.
|
|
221
|
-
this.
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
...this.getTranslateProps(),
|
|
234
|
-
orEmpty: true,
|
|
235
|
-
});
|
|
236
|
-
this.setElementContent(translated);
|
|
237
|
-
}
|
|
238
|
-
getTranslateProps() {
|
|
239
|
-
return {
|
|
240
|
-
key: this.key,
|
|
241
|
-
ns: this.ns,
|
|
242
|
-
params: this.params,
|
|
243
|
-
defaultValue: this.default,
|
|
244
|
-
noWrap: this.noWrap,
|
|
245
|
-
language: this.language,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
unsubscribe() {
|
|
249
|
-
this.subscription?.unsubscribe();
|
|
250
|
-
}
|
|
251
|
-
async subscribe() {
|
|
252
|
-
this.unsubscribe();
|
|
253
|
-
this.subscription = this.translateService
|
|
254
|
-
.translate(this.getTranslateProps())
|
|
255
|
-
.subscribe((translated) => {
|
|
256
|
-
this.setElementContent(translated);
|
|
257
|
-
this.initialized = true;
|
|
242
|
+
isHtml = input(false, ...(ngDevMode ? [{ debugName: "isHtml" }] : []));
|
|
243
|
+
ref = inject(ElementRef);
|
|
244
|
+
translate = inject(TranslateService);
|
|
245
|
+
renderer = inject(Renderer2);
|
|
246
|
+
translateParams = computed(() => ({
|
|
247
|
+
key: this.key(),
|
|
248
|
+
ns: this.ns(),
|
|
249
|
+
params: this.params(),
|
|
250
|
+
defaultValue: this.default(),
|
|
251
|
+
noWrap: this.noWrap(),
|
|
252
|
+
language: this.language(),
|
|
253
|
+
}), ...(ngDevMode ? [{ debugName: "translateParams" }] : []));
|
|
254
|
+
constructor() {
|
|
255
|
+
effect((onCleanup) => {
|
|
256
|
+
const params = this.translateParams();
|
|
257
|
+
const subscription = this.translate
|
|
258
|
+
.translate(params)
|
|
259
|
+
.subscribe((translated) => {
|
|
260
|
+
this.setElementContent(translated);
|
|
261
|
+
});
|
|
262
|
+
// cleanup when params change or directive is destroyed
|
|
263
|
+
onCleanup(() => subscription.unsubscribe());
|
|
258
264
|
});
|
|
259
265
|
}
|
|
260
266
|
setElementContent(translated) {
|
|
261
|
-
if (this.isHtml) {
|
|
262
|
-
this.
|
|
263
|
-
|
|
267
|
+
if (this.isHtml()) {
|
|
268
|
+
this.renderer.setProperty(this.ref.nativeElement, 'innerHTML', translated);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
this.renderer.setProperty(this.ref.nativeElement, 'textContent', translated);
|
|
264
272
|
}
|
|
265
|
-
this.getElement().textContent = translated;
|
|
266
|
-
}
|
|
267
|
-
getElement() {
|
|
268
|
-
return this.ref.nativeElement;
|
|
269
273
|
}
|
|
270
|
-
static ɵfac = function
|
|
271
|
-
static
|
|
274
|
+
static ɵfac = function TDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TDirective)(); };
|
|
275
|
+
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TDirective, selectors: [["", "t", ""]], inputs: { key: [1, "key"], ns: [1, "ns"], params: [1, "params"], default: [1, "default"], noWrap: [1, "noWrap"], language: [1, "language"], isHtml: [1, "isHtml"] } });
|
|
272
276
|
}
|
|
273
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(
|
|
274
|
-
type:
|
|
277
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TDirective, [{
|
|
278
|
+
type: Directive,
|
|
275
279
|
args: [{
|
|
276
280
|
selector: '[t]',
|
|
277
|
-
template: ``,
|
|
278
|
-
standalone: false
|
|
279
|
-
}]
|
|
280
|
-
}], () => [{ type: i0.ElementRef }, { type: TranslateService }], { key: [{
|
|
281
|
-
type: Input
|
|
282
|
-
}], ns: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], params: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], default: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], noWrap: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], language: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], isHtml: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}] }); })();
|
|
295
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TComponent, { className: "TComponent", filePath: "lib/t.component.ts", lineNumber: 18 }); })();
|
|
296
|
-
|
|
297
|
-
class LoaderComponent {
|
|
298
|
-
html;
|
|
299
|
-
static ɵfac = function LoaderComponent_Factory(t) { return new (t || LoaderComponent)(); };
|
|
300
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoaderComponent, selectors: [["ng-component"]], inputs: { html: "html" }, decls: 1, vars: 1, consts: [[1, "loader-template", 3, "innerHTML"]], template: function LoaderComponent_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
-
i0.ɵɵelement(0, "div", 0);
|
|
302
|
-
} if (rf & 2) {
|
|
303
|
-
i0.ɵɵproperty("innerHTML", ctx.html, i0.ɵɵsanitizeHtml);
|
|
304
|
-
} }, encapsulation: 2 });
|
|
305
|
-
}
|
|
306
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoaderComponent, [{
|
|
307
|
-
type: Component,
|
|
308
|
-
args: [{
|
|
309
|
-
template: `
|
|
310
|
-
<div class="loader-template" [innerHTML]="html"></div>
|
|
311
|
-
`,
|
|
312
|
-
standalone: false,
|
|
313
281
|
}]
|
|
314
|
-
}],
|
|
315
|
-
type: Input
|
|
316
|
-
}] }); })();
|
|
317
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoaderComponent, { className: "LoaderComponent", filePath: "lib/loader.component.ts", lineNumber: 9 }); })();
|
|
282
|
+
}], () => [], { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], ns: [{ type: i0.Input, args: [{ isSignal: true, alias: "ns", required: false }] }], params: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }], default: [{ type: i0.Input, args: [{ isSignal: true, alias: "default", required: false }] }], noWrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "noWrap", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], isHtml: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHtml", required: false }] }] }); })();
|
|
318
283
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
deps: [TranslateService],
|
|
329
|
-
multi: true,
|
|
330
|
-
},
|
|
331
|
-
] });
|
|
284
|
+
function provideTolgee(factory) {
|
|
285
|
+
return makeEnvironmentProviders([
|
|
286
|
+
{
|
|
287
|
+
provide: TOLGEE_INSTANCE,
|
|
288
|
+
useFactory: factory,
|
|
289
|
+
},
|
|
290
|
+
TranslateService,
|
|
291
|
+
provideAppInitializer(() => inject(TranslateService).start()),
|
|
292
|
+
]);
|
|
332
293
|
}
|
|
333
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgxTolgeeModule, [{
|
|
334
|
-
type: NgModule,
|
|
335
|
-
args: [{
|
|
336
|
-
declarations: [TranslatePipe, TComponent, LoaderComponent],
|
|
337
|
-
exports: [TranslatePipe, TComponent],
|
|
338
|
-
providers: [
|
|
339
|
-
{
|
|
340
|
-
provide: APP_INITIALIZER,
|
|
341
|
-
useFactory: (service) => {
|
|
342
|
-
return async () => await service.start();
|
|
343
|
-
},
|
|
344
|
-
deps: [TranslateService],
|
|
345
|
-
multi: true,
|
|
346
|
-
},
|
|
347
|
-
],
|
|
348
|
-
}]
|
|
349
|
-
}], null, null); })();
|
|
350
|
-
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(NgxTolgeeModule, { declarations: [TranslatePipe, TComponent, LoaderComponent], exports: [TranslatePipe, TComponent] }); })();
|
|
351
294
|
|
|
352
|
-
|
|
353
|
-
service;
|
|
354
|
-
|
|
355
|
-
|
|
295
|
+
const namespaceResolver = async (route) => {
|
|
296
|
+
const service = inject(TranslateService);
|
|
297
|
+
const namespace = route?.data?.tolgeeNamespace;
|
|
298
|
+
if (namespace === undefined) {
|
|
299
|
+
console.warn(`No namespace provided. Please add tolgeeNamespace to your route data.\nIf you really want to lazy load default namespace set tolgeeNamespace to empty string`);
|
|
356
300
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
await this.service.tolgee.addActiveNs(ns, true);
|
|
360
|
-
}
|
|
361
|
-
getNamespace(route) {
|
|
362
|
-
const namespace = route?.data?.tolgeeNamespace;
|
|
363
|
-
if (namespace === undefined) {
|
|
364
|
-
console.warn('No namespace provided. Please add tolgeeNamespace to your route data. \n' +
|
|
365
|
-
'If you really want to lazy load default namespace set tolgeeNamespace to empty string');
|
|
366
|
-
}
|
|
367
|
-
return namespace;
|
|
368
|
-
}
|
|
369
|
-
static ɵfac = function NamespaceResolver_Factory(t) { return new (t || NamespaceResolver)(i0.ɵɵinject(TranslateService)); };
|
|
370
|
-
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NamespaceResolver, factory: NamespaceResolver.ɵfac, providedIn: 'root' });
|
|
371
|
-
}
|
|
372
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NamespaceResolver, [{
|
|
373
|
-
type: Injectable,
|
|
374
|
-
args: [{ providedIn: 'root' }]
|
|
375
|
-
}], () => [{ type: TranslateService }], null); })();
|
|
301
|
+
await service.tolgee.addActiveNs(namespace, true);
|
|
302
|
+
};
|
|
376
303
|
|
|
377
304
|
/*
|
|
378
305
|
* Public API Surface of ngx-tolgee
|
|
@@ -382,5 +309,5 @@ class NamespaceResolver {
|
|
|
382
309
|
* Generated bundle index. Do not edit.
|
|
383
310
|
*/
|
|
384
311
|
|
|
385
|
-
export {
|
|
312
|
+
export { TDirective, TOLGEE_INSTANCE, TranslatePipe, TranslateService, namespaceResolver, provideTolgee };
|
|
386
313
|
//# sourceMappingURL=tolgee-ngx.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/loader.component.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<TolgeeInstance>(\n 'tolgee.instance'\n);\n","import { Inject, Injectable, OnDestroy, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n TranslationKey,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n\n constructor(\n @Inject(TOLGEE_INSTANCE) private _tolgee: TolgeeInstance,\n private _ngZone: NgZone\n ) {}\n\n get tolgee() {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started.\n *\n * The Tolgee is run outside NgZone. The triggered events, doesn't\n * trigger the change detection, when listening directly via Tolgee.on.\n *\n * However, all the emitting methods (on, translate, languageAsync)\n * in this class are emitting back in Angular's NgZone,\n * so the change detection works fine.\n */\n public async start(): Promise<void> {\n if (!this.isSSR()) {\n await this.runIfNotRunning();\n }\n }\n\n /**\n * Returns translation asynchronously, this method always return\n */\n readonly translate: TFnType<DefaultParamType, Observable<string>, TranslationKey> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n subscriber.next(translated);\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee.on('update', translate)\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n };\n\n /**\n * Instantly returns translated value. May return undefined or outdated value.\n * Use only when you cannot use translate.\n */\n public readonly instant: TFnType<DefaultParamType, string, TranslationKey> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Returns observable emitting when specified event is triggered.\n *\n * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,\n * so change detection should work properly.\n *\n * @param event the event to listen\n */\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<Event, EventType[Event]>>((subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n this._ngZone.run(() => {\n subscriber.next(value as any);\n });\n });\n return () => subscription.unsubscribe();\n });\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n }\n\n private async runIfNotRunning() {\n if (!this.runPromise) {\n this.runPromise = this._ngZone.runOutsideAngular(() => {\n return this.tolgee.run();\n });\n }\n await this.runPromise;\n }\n\n private isSSR() {\n return typeof window === 'undefined';\n }\n}\n","import {\n ChangeDetectorRef,\n OnDestroy,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport {\n getTranslateProps,\n TFnType,\n TranslateProps,\n TranslationKey,\n} from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n standalone: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n constructor(\n protected translateService: TranslateService,\n private _cdr: ChangeDetectorRef\n ) {}\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n readonly transform: TFnType<string, string, TranslationKey> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n const { key } = params;\n\n if (!key || key.length === 0) {\n return key;\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n };\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n this.subscription = null;\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(props)\n .subscribe((r) => {\n this.value = r;\n this._cdr.detectChanges();\n });\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams, TranslationKey } from '@tolgee/web';\n\n@Component({\n selector: '[t]',\n template: ``,\n standalone: false\n})\nexport class TComponent implements OnInit, OnDestroy, OnChanges {\n @Input() key: TranslationKey;\n @Input() ns: string;\n @Input() params?: TranslateParams<any>;\n @Input() default?: string;\n @Input() noWrap?: boolean = false;\n @Input() language?: string;\n\n /**\n * When true, innerHTML property of element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n @Input() isHtml?: boolean = false;\n\n private subscription: Subscription;\n private initialized: boolean;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n this.renderInstantValue();\n }\n\n ngOnChanges(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n private renderInstantValue() {\n // get initial value first\n const translated = this.translateService.instant({\n ...this.getTranslateProps(),\n orEmpty: true,\n });\n this.setElementContent(translated);\n }\n\n private getTranslateProps() {\n return {\n key: this.key,\n ns: this.ns,\n params: this.params,\n defaultValue: this.default,\n noWrap: this.noWrap,\n language: this.language,\n };\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private async subscribe() {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(this.getTranslateProps())\n .subscribe((translated) => {\n this.setElementContent(translated);\n this.initialized = true;\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml) {\n this.getElement().innerHTML = translated;\n return;\n }\n this.getElement().textContent = translated;\n }\n\n private getElement() {\n return this.ref.nativeElement as HTMLElement;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"loader-template\" [innerHTML]=\"html\"></div>\n `,\n standalone: false,\n})\nexport class LoaderComponent {\n @Input() html: string | undefined;\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TComponent } from './t.component';\nimport { TranslateService } from './translate.service';\nimport { LoaderComponent } from \"./loader.component\";\n\n@NgModule({\n declarations: [TranslatePipe, TComponent, LoaderComponent],\n exports: [TranslatePipe, TComponent],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (service: TranslateService) => {\n return async () => await service.start();\n },\n deps: [TranslateService],\n multi: true,\n },\n ],\n})\nexport class NgxTolgeeModule {}\n","import { ActivatedRouteSnapshot } from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceResolver {\n constructor(public service: TranslateService) {}\n\n async resolve(\n route: ActivatedRouteSnapshot,\n ): Promise<void> {\n const ns = this.getNamespace(route);\n await this.service.tolgee.addActiveNs(ns, true)\n }\n\n private getNamespace(route: ActivatedRouteSnapshot) {\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n 'No namespace provided. Please add tolgeeNamespace to your route data. \\n' +\n 'If you really want to lazy load default namespace set tolgeeNamespace to empty string'\n );\n }\n return namespace;\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.component';\n\nexport * from './lib/ngx-tolgee.module';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.directive.ts","../../../projects/ngx-tolgee/src/lib/provide-tolgee.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<\n TolgeeInstance | Promise<TolgeeInstance>\n>('tolgee.instance');\n","import { Injectable, OnDestroy, NgZone, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n CombinedOptions,\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n TranslateProps,\n TranslationKey,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n private readonly _ngZone = inject(NgZone);\n\n readonly #tolgeeOrPromise = inject(TOLGEE_INSTANCE);\n #resolvedTolgee: TolgeeInstance | Promise<TolgeeInstance> | undefined;\n\n get tolgee(): TolgeeInstance {\n if (this.#resolvedTolgee) {\n // If it's still a promise, throw error\n if (this.#resolvedTolgee instanceof Promise) {\n throw new Error(\n 'Tolgee instance is not yet resolved. Call start() first or wait for app initialization.'\n );\n }\n return this.#resolvedTolgee;\n }\n\n // If it's a promise, this is a synchronous access before resolution\n if (this.#tolgeeOrPromise instanceof Promise) {\n throw new Error(\n 'Tolgee instance is not yet resolved. Call start() first or wait for app initialization.'\n );\n }\n\n this.#resolvedTolgee = this.#tolgeeOrPromise;\n return this.#resolvedTolgee;\n }\n\n /**\n * Starts Tolgee if not started.\n *\n * The Tolgee is run outside NgZone. The triggered events don't\n * trigger the change the detection when listening directly via Tolgee.on.\n *\n * However, all the emitting methods (on, translate, languageAsync)\n * in this class are emitting back in Angular's NgZone,\n * so the change detection works fine.\n */\n public async start(): Promise<void> {\n // If tolgee was provided as a promise, resolve it first\n if (!this.#resolvedTolgee) {\n if (this.#tolgeeOrPromise instanceof Promise) {\n // Assign the promise immediately to prevent redundant awaits\n this.#resolvedTolgee = this.#tolgeeOrPromise;\n } else {\n // Eagerly cache the resolved instance\n this.#resolvedTolgee = this.#tolgeeOrPromise;\n }\n }\n\n // Await resolution if it's a promise\n if (this.#resolvedTolgee instanceof Promise) {\n this.#resolvedTolgee = await this.#resolvedTolgee;\n }\n\n if (!this.isSSR()) {\n try {\n await this.runIfNotRunning();\n } catch (error) {\n console.error('Tolgee failed to start:', error);\n }\n }\n }\n\n translate(props: TranslateProps): Observable<string>;\n translate(\n key: TranslationKey,\n options?: CombinedOptions<string>\n ): Observable<string>;\n translate(\n key: TranslationKey,\n defaultValue?: string,\n options?: CombinedOptions<string>\n ): Observable<string>;\n /**\n * Returns translation asynchronously, this method always returns\n */\n translate(...args: any[]): Observable<string> {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n this._ngZone.run(() => {\n subscriber.next(translated);\n });\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee.on('update', translate);\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n }\n\n /**\n * Instantly returns a translated value. May return undefined or outdated value.\n * Use only when you cannot use translate pipe.\n */\n public readonly instant: TFnType<DefaultParamType, string, TranslationKey> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits the current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g., en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Returns observable emitting when a specified event is triggered.\n *\n * It's a wrapper of Tolgee. 'on' method. The emmit is triggered inside ngZone,\n * so change detection should work properly.\n *\n * @param event the event to listen\n */\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<Event, EventType[Event]>>(\n (subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n this._ngZone.run(() => {\n subscriber.next(value as any);\n });\n });\n return () => subscription.unsubscribe();\n }\n );\n }\n\n ngOnDestroy(): void {\n const tolgeeInstance = this.#resolvedTolgee || this.#tolgeeOrPromise;\n\n if (tolgeeInstance instanceof Promise) {\n // If Tolgee is still resolving, stop it when it resolves\n tolgeeInstance\n .then((instance) => instance?.stop())\n .catch(() => {\n // Ignore errors if the promise was rejected\n });\n } else if (tolgeeInstance) {\n tolgeeInstance.stop();\n }\n }\n\n private async runIfNotRunning() {\n if (!this.runPromise) {\n this.runPromise = this._ngZone.runOutsideAngular(() => {\n return this.tolgee.run();\n });\n }\n await this.runPromise;\n }\n\n private isSSR() {\n return typeof window === 'undefined';\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n OnDestroy,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport {\n getTranslateProps,\n CombinedOptions,\n TranslateProps,\n TranslationKey,\n} from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n private readonly translateService = inject(TranslateService);\n private readonly _cdr = inject(ChangeDetectorRef);\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n transform(props: TranslateProps<string, TranslationKey>): string;\n transform(key: TranslationKey, options?: CombinedOptions<string>): string;\n transform(\n key: TranslationKey,\n defaultValue?: string,\n options?: CombinedOptions<string>\n ): string;\n transform(...args: any[]): string {\n // @ts-ignore\n const params = getTranslateProps(...args);\n\n const { key } = params;\n\n if (!key) {\n return '';\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n }\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n this.subscription = null;\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(props)\n .subscribe((r) => {\n this.value = r;\n this._cdr.detectChanges();\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n input,\n inject,\n effect,\n computed,\n Renderer2,\n} from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams, TranslateProps, TranslationKey } from '@tolgee/web';\n\n@Directive({\n selector: '[t]',\n})\nexport class TDirective {\n key = input<TranslationKey>();\n ns = input<string>();\n params = input<TranslateParams<any>>();\n default = input<string>();\n noWrap = input<boolean>(false);\n language = input<string>();\n /**\n * When true, the innerHTML property of an element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n isHtml = input<boolean>(false);\n\n private ref = inject<ElementRef<HTMLElement>>(ElementRef);\n private translate = inject(TranslateService);\n private renderer = inject(Renderer2);\n\n private translateParams = computed<TranslateProps>(() => ({\n key: this.key(),\n ns: this.ns(),\n params: this.params(),\n defaultValue: this.default(),\n noWrap: this.noWrap(),\n language: this.language(),\n }));\n\n constructor() {\n effect((onCleanup) => {\n const params = this.translateParams();\n\n const subscription = this.translate\n .translate(params)\n .subscribe((translated) => {\n this.setElementContent(translated);\n });\n\n // cleanup when params change or directive is destroyed\n onCleanup(() => subscription.unsubscribe());\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml()) {\n this.renderer.setProperty(this.ref.nativeElement, 'innerHTML', translated);\n } else {\n this.renderer.setProperty(this.ref.nativeElement, 'textContent', translated);\n }\n }\n}\n","import {\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\nimport { TranslateService } from './translate.service';\n\nexport function provideTolgee(\n factory: () => TolgeeInstance | Promise<TolgeeInstance>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TOLGEE_INSTANCE,\n useFactory: factory,\n },\n TranslateService,\n provideAppInitializer(() => inject(TranslateService).start()),\n ]);\n}\n","import { ResolveFn } from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { inject } from '@angular/core';\n\nexport const namespaceResolver: ResolveFn<void> = async (route) => {\n const service = inject(TranslateService);\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n `No namespace provided. Please add tolgeeNamespace to your route data.\\nIf you really want to lazy load default namespace set tolgeeNamespace to empty string`\n );\n }\n\n await service.tolgee.addActiveNs(namespace, true);\n};\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.directive';\n\nexport * from './lib/provide-tolgee';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|