-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLanguageService.ts
67 lines (49 loc) · 2.2 KB
/
LanguageService.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright (c) 2021-2022. Sendanor <info@sendanor.fi>. All rights reserved.
import { Language } from "./types/Language";
import { Observer, ObserverCallback, ObserverDestructor } from "./Observer";
export enum LanguageServiceEvent {
CURRENT_LANGUAGE_CHANGED = "LanguageService:currentLanguageChanged",
DEFAULT_LANGUAGE_CHANGED = "LanguageService:defaultLanguageChanged"
}
export type LanguageServiceDestructor = ObserverDestructor;
export class LanguageService {
private static _defaultLanguage : Language | undefined;
private static _language : Language | undefined;
private static _observer: Observer<LanguageServiceEvent> = new Observer<LanguageServiceEvent>(
"LanguageService");
public static Event = LanguageServiceEvent;
public static on (
name: LanguageServiceEvent,
callback: ObserverCallback<LanguageServiceEvent>
): LanguageServiceDestructor {
return this._observer.listenEvent(name, callback);
}
public static destroy (): void {
this._observer.destroy();
}
public static setDefaultLanguage (lang : Language) {
if (this._defaultLanguage !== lang) {
this._defaultLanguage = lang;
if (this._observer.hasCallbacks(LanguageServiceEvent.DEFAULT_LANGUAGE_CHANGED)) {
this._observer.triggerEvent(LanguageServiceEvent.DEFAULT_LANGUAGE_CHANGED);
}
if ( !this._language && this._observer.hasCallbacks(LanguageServiceEvent.CURRENT_LANGUAGE_CHANGED) ) {
this._observer.triggerEvent(LanguageServiceEvent.CURRENT_LANGUAGE_CHANGED);
}
}
}
public static getDefaultLanguage () : Language {
return this._defaultLanguage ?? Language.ENGLISH;
}
public static getCurrentLanguage () : Language {
return this._language ?? this._defaultLanguage ?? Language.ENGLISH;
}
public static setCurrentLanguage (lang : Language) {
if (this._language !== lang) {
this._language = lang;
if (this._observer.hasCallbacks(LanguageServiceEvent.CURRENT_LANGUAGE_CHANGED)) {
this._observer.triggerEvent(LanguageServiceEvent.CURRENT_LANGUAGE_CHANGED);
}
}
}
}