6
6
} from "./translate.service" ;
7
7
import { Observable , Subject } from "rxjs" ;
8
8
import { getValue , mergeDeep } from "./util" ;
9
+ import { Signal , signal , WritableSignal } from "@angular/core" ;
9
10
10
11
11
12
type DeepReadonly < T > = {
@@ -19,8 +20,8 @@ export class TranslateStore
19
20
private _onLangChange : Subject < LangChangeEvent > = new Subject < LangChangeEvent > ( ) ;
20
21
private _onDefaultLangChange : Subject < DefaultLangChangeEvent > = new Subject < DefaultLangChangeEvent > ( ) ;
21
22
22
- private defaultLang ! : Language ;
23
- private currentLang ! : Language ;
23
+ private _$ defaultLang: WritableSignal < Language | undefined > = signal < Language | undefined > ( undefined ) ;
24
+ private _$ currentLang: WritableSignal < Language | undefined > = signal < Language | undefined > ( undefined ) ;
24
25
25
26
private translations : Record < Language , InterpolatableTranslationObject > = { } ;
26
27
private languages : Language [ ] = [ ] ;
@@ -42,22 +43,32 @@ export class TranslateStore
42
43
return this . languages ;
43
44
}
44
45
45
- public getCurrentLanguage ( ) : Language
46
+ public getCurrentLanguage ( ) : Language | undefined
46
47
{
47
- return this . currentLang ;
48
+ return this . $ currentLang( ) ;
48
49
}
49
50
50
- public getDefaultLanguage ( ) : Language
51
+ get $currentLang ( ) : Signal < Language | undefined >
51
52
{
52
- return this . defaultLang ;
53
+ return this . _$currentLang . asReadonly ( ) ;
54
+ }
55
+
56
+ public getDefaultLanguage ( ) : Language | undefined
57
+ {
58
+ return this . _$defaultLang ( ) ;
59
+ }
60
+
61
+ get $defaultLang ( ) : Signal < Language | undefined >
62
+ {
63
+ return this . _$defaultLang . asReadonly ( ) ;
53
64
}
54
65
55
66
/**
56
67
* Changes the default lang
57
68
*/
58
69
public setDefaultLang ( lang : string , emitChange = true ) : void
59
70
{
60
- this . defaultLang = lang ;
71
+ this . _$ defaultLang. set ( lang ) ;
61
72
if ( emitChange )
62
73
{
63
74
this . _onDefaultLangChange . next ( { lang : lang , translations : this . translations [ lang ] } ) ;
@@ -66,7 +77,7 @@ export class TranslateStore
66
77
67
78
public setCurrentLang ( lang : string , emitChange = true ) : void
68
79
{
69
- this . currentLang = lang ;
80
+ this . _$ currentLang. set ( lang ) ;
70
81
if ( emitChange )
71
82
{
72
83
this . _onLangChange . next ( { lang : lang , translations : this . translations [ lang ] } ) ;
@@ -123,10 +134,13 @@ export class TranslateStore
123
134
124
135
public getTranslation ( key : string , useDefaultLang : boolean ) : InterpolatableTranslation
125
136
{
126
- let text = this . getValue ( this . currentLang , key ) ;
127
- if ( text === undefined && this . defaultLang != null && this . defaultLang !== this . currentLang && useDefaultLang )
137
+ const currentLang = this . getCurrentLanguage ( ) ;
138
+ const defaultLang = this . getDefaultLanguage ( ) ;
139
+
140
+ let text = ( currentLang !== undefined ) ? this . getValue ( currentLang , key ) : undefined ;
141
+ if ( text === undefined && defaultLang != null && defaultLang !== currentLang && useDefaultLang )
128
142
{
129
- text = this . getValue ( this . defaultLang , key ) ;
143
+ text = this . getValue ( defaultLang , key ) ;
130
144
}
131
145
return text ;
132
146
}
0 commit comments