@tilde-nlp/ngx-common 4.0.20 → 4.0.21
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.
|
@@ -9,19 +9,31 @@ export class LanguageTranslatePipe {
|
|
|
9
9
|
constructor(translate) {
|
|
10
10
|
this.translate = translate;
|
|
11
11
|
this.languagesLocalizationKey = 'LANGUAGES';
|
|
12
|
+
this.translationCache = new Map();
|
|
13
|
+
this.translate.onLangChange.subscribe(() => {
|
|
14
|
+
this.translationCache.clear();
|
|
15
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
16
|
+
});
|
|
17
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
12
18
|
}
|
|
13
19
|
transform(fullLangCode, hideRegion = false) {
|
|
14
20
|
if (!fullLangCode) {
|
|
15
21
|
return '';
|
|
16
22
|
}
|
|
17
|
-
|
|
23
|
+
if (this.lastUiLanguage !== this.translate.currentLang) {
|
|
24
|
+
this.translationCache.clear();
|
|
25
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
26
|
+
}
|
|
27
|
+
const cacheKey = `${fullLangCode}:${hideRegion}`;
|
|
28
|
+
if (this.translationCache.has(cacheKey)) {
|
|
29
|
+
return this.translationCache.get(cacheKey);
|
|
30
|
+
}
|
|
31
|
+
const langCodeWithoutRegion = this.getLanguageFromLanguageCode(fullLangCode);
|
|
18
32
|
const isCodeAndRegionSame = this.isLanguageCodeSameAsRegion(fullLangCode);
|
|
19
33
|
const langCodeForTranslation = isCodeAndRegionSame ? langCodeWithoutRegion : fullLangCode;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const [code, region, extra] = fullLangCode.split('-');
|
|
24
|
-
return code === region?.toLowerCase() && !extra;
|
|
34
|
+
const translation = this.getTranslation(langCodeForTranslation, hideRegion);
|
|
35
|
+
this.translationCache.set(cacheKey, translation);
|
|
36
|
+
return translation;
|
|
25
37
|
}
|
|
26
38
|
getTranslation(langCode, hideRegion) {
|
|
27
39
|
const languageTranslations = this.translate.instant(this.languagesLocalizationKey);
|
|
@@ -39,7 +51,32 @@ export class LanguageTranslatePipe {
|
|
|
39
51
|
}
|
|
40
52
|
getLanguageTranslationFromLanguageCode(currentLang, code) {
|
|
41
53
|
const languageNamesInCurrentLang = new Intl.DisplayNames([currentLang], { type: 'language' });
|
|
42
|
-
|
|
54
|
+
const regionNamesInCurrentLang = new Intl.DisplayNames([currentLang], { type: 'region' });
|
|
55
|
+
let translation;
|
|
56
|
+
try {
|
|
57
|
+
const language = this.getLanguageFromLanguageCode(code);
|
|
58
|
+
const region = this.getRegionFromLanguageCode(code);
|
|
59
|
+
const languagetranslation = languageNamesInCurrentLang.of(language);
|
|
60
|
+
const regionTranslation = regionNamesInCurrentLang.of(region);
|
|
61
|
+
translation = `${languagetranslation} (${regionTranslation})`;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
translation = languageNamesInCurrentLang.of(code);
|
|
65
|
+
}
|
|
66
|
+
return this.capitalizeFirstLetter(translation);
|
|
67
|
+
}
|
|
68
|
+
isLanguageCodeSameAsRegion(fullLangCode) {
|
|
69
|
+
const [code, region, extra] = fullLangCode.split('-');
|
|
70
|
+
return code === region?.toLowerCase() && !extra;
|
|
71
|
+
}
|
|
72
|
+
getRegionFromLanguageCode(fullLangCode) {
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
74
|
+
const [_code, region, extra] = fullLangCode.split('-');
|
|
75
|
+
const regionCode = extra ? `${region}-${extra}` : `${region}`;
|
|
76
|
+
return regionCode.toUpperCase();
|
|
77
|
+
}
|
|
78
|
+
getLanguageFromLanguageCode(fullLangCode) {
|
|
79
|
+
return fullLangCode.split('-')[0].toLowerCase();
|
|
43
80
|
}
|
|
44
81
|
capitalizeFirstLetter(text) {
|
|
45
82
|
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
@@ -54,4 +91,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
54
91
|
pure: false,
|
|
55
92
|
}]
|
|
56
93
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtdHJhbnNsYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvcGlwZXMvbGFuZ3VhZ2UtdHJhbnNsYXRlL2xhbmd1YWdlLXRyYW5zbGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFPcEQ7OztFQUdFO0FBQ0YsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUE2QixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUZ2Qyw2QkFBd0IsR0FBRyxXQUFXLENBQUM7SUFFRyxDQUFDO0lBRTVELFNBQVMsQ0FBQyxZQUFvQixFQUFFLFVBQVUsR0FBRyxLQUFLO1FBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBRTFGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sMEJBQTBCLENBQUMsWUFBb0I7UUFDckQsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksS0FBSyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFnQixFQUFFLFVBQW9CO1FBQzNELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkYsSUFBSSxXQUFXO1FBQ2I7OztVQUdFO1FBQ0Ysb0JBQW9CLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXBGLElBQUksVUFBVSxFQUFFO1lBQ2QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEQ7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU8sc0NBQXNDLENBQUMsV0FBbUIsRUFBRSxJQUFZO1FBQzlFLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFXLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBWTtRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDOytHQTlDVSxxQkFBcUI7NkdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFSakMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdsYW5ndWFnZVRyYW5zbGF0ZScsXHJcbiAgcHVyZTogZmFsc2UsXHJcbn0pXHJcbi8qKlxyXG4gIFRoaXMgcGlwZSBzZWFyY2hlcyBmb3IgYSBsYW5ndWFnZSBjb2RlIHRyYW5zbGF0aW9uIHdpdGhpbiBvdXIgSlNPTiBmaWxlcy4gXHJcbiAgSWYgdGhlIHRyYW5zbGF0aW9uIGZvciBhIGdpdmVuIGxhbmd1YWdlIGNvZGUgaXMgbm90IGZvdW5kIHRoZXJlLCBpdCByZXRyaWV2ZXMgaXQgZnJvbSB0aGUgYnJvd3NlcidzIEludGwgb2JqZWN0LlxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VUcmFuc2xhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXNMb2NhbGl6YXRpb25LZXkgPSAnTEFOR1VBR0VTJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XHJcblxyXG4gIHRyYW5zZm9ybShmdWxsTGFuZ0NvZGU6IHN0cmluZywgaGlkZVJlZ2lvbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGlmICghZnVsbExhbmdDb2RlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYW5nQ29kZVdpdGhvdXRSZWdpb24gPSBmdWxsTGFuZ0NvZGUuc3BsaXQoJy0nKVswXTtcclxuICAgIGNvbnN0IGlzQ29kZUFuZFJlZ2lvblNhbWUgPSB0aGlzLmlzTGFuZ3VhZ2VDb2RlU2FtZUFzUmVnaW9uKGZ1bGxMYW5nQ29kZSk7XHJcbiAgICBjb25zdCBsYW5nQ29kZUZvclRyYW5zbGF0aW9uID0gaXNDb2RlQW5kUmVnaW9uU2FtZSA/IGxhbmdDb2RlV2l0aG91dFJlZ2lvbiA6IGZ1bGxMYW5nQ29kZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihsYW5nQ29kZUZvclRyYW5zbGF0aW9uLCBoaWRlUmVnaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNMYW5ndWFnZUNvZGVTYW1lQXNSZWdpb24oZnVsbExhbmdDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFtjb2RlLCByZWdpb24sIGV4dHJhXSA9IGZ1bGxMYW5nQ29kZS5zcGxpdCgnLScpO1xyXG4gICAgcmV0dXJuIGNvZGUgPT09IHJlZ2lvbj8udG9Mb3dlckNhc2UoKSAmJiAhZXh0cmE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRyYW5zbGF0aW9uKGxhbmdDb2RlOiBzdHJpbmcsIGhpZGVSZWdpb24/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxhbmd1YWdlVHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmxhbmd1YWdlc0xvY2FsaXphdGlvbktleSk7XHJcbiAgICBsZXQgdHJhbnNsYXRpb24gPVxyXG4gICAgICAvKipcclxuICAgICAgICAgIGUuZy4gSW4gY2FzZSB3ZSBuZWVkIHRvIGRpc3BsYXkgXCJlbi1HQlwiIGxhbmd1YWdlIGNvZGUgYXMgXCJCcml0aXNoXCIgd2UgY2FuIGRvIHRoaXNcclxuICAgICAgICBieSBhZGRpbmcgXCJFTl9HQlwiOiBcIkJyaXRpc2hcIiBpbiBsb2NhbGl6YXRpb24gZmlsZXMgdW5kZXIgXCJMQU5HVUFHRVNcIiBrZXkuIFxyXG4gICAgICAqL1xyXG4gICAgICBsYW5ndWFnZVRyYW5zbGF0aW9uc1tsYW5nQ29kZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoJy0nLCAnXycpXSA/P1xyXG4gICAgICB0aGlzLmdldExhbmd1YWdlVHJhbnNsYXRpb25Gcm9tTGFuZ3VhZ2VDb2RlKHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nLCBsYW5nQ29kZSk7XHJcblxyXG4gICAgaWYgKGhpZGVSZWdpb24pIHtcclxuICAgICAgdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbi5zcGxpdCgnKCcpWzBdLnRyaW0oKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNsYXRpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExhbmd1YWdlVHJhbnNsYXRpb25Gcm9tTGFuZ3VhZ2VDb2RlKGN1cnJlbnRMYW5nOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsYW5ndWFnZU5hbWVzSW5DdXJyZW50TGFuZyA9IG5ldyBJbnRsLkRpc3BsYXlOYW1lcyhbY3VycmVudExhbmddLCB7IHR5cGU6ICdsYW5ndWFnZScgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGFuZ3VhZ2VOYW1lc0luQ3VycmVudExhbmcub2YoY29kZSkgYXMgc3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtdHJhbnNsYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvcGlwZXMvbGFuZ3VhZ2UtdHJhbnNsYXRlL2xhbmd1YWdlLXRyYW5zbGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFPcEQ7OztFQUdFO0FBQ0YsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUE2QixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQU52Qyw2QkFBd0IsR0FBRyxXQUFXLENBQUM7UUFJaEQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFHbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUFvQixFQUFFLFVBQVUsR0FBRyxLQUFLO1FBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztTQUNsRDtRQUVELE1BQU0s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QUssQ0FBQztJQUNsRCxDQUFDO0lBRU8seUJBQXlCLENBQUMsWUFBb0I7UUFDcEQsNkRBQTZEO1FBQzdELE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM5RCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sMkJBQTJCLENBQUMsWUFBb0I7UUFDdEQsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7K0dBbEdVLHFCQUFxQjs2R0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQVJqQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLElBQUksRUFBRSxLQUFLO2lCQUNaIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ2xhbmd1YWdlVHJhbnNsYXRlJyxcclxuICBwdXJlOiBmYWxzZSxcclxufSlcclxuLyoqXHJcbiAgVGhpcyBwaXBlIHNlYXJjaGVzIGZvciBhIGxhbmd1YWdlIGNvZGUgdHJhbnNsYXRpb24gd2l0aGluIG91ciBKU09OIGZpbGVzLiBcclxuICBJZiB0aGUgdHJhbnNsYXRpb24gZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgY29kZSBpcyBub3QgZm91bmQgdGhlcmUsIGl0IHJldHJpZXZlcyBpdCBmcm9tIHRoZSBicm93c2VyJ3MgSW50bCBvYmplY3QuXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBMYW5ndWFnZVRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlc0xvY2FsaXphdGlvbktleSA9ICdMQU5HVUFHRVMnO1xyXG5cclxuICBwcml2YXRlIGxhc3RVaUxhbmd1YWdlOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy50cmFuc2xhdGlvbkNhY2hlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMubGFzdFVpTGFuZ3VhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5sYXN0VWlMYW5ndWFnZSA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKGZ1bGxMYW5nQ29kZTogc3RyaW5nLCBoaWRlUmVnaW9uID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFmdWxsTGFuZ0NvZGUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxhc3RVaUxhbmd1YWdlICE9PSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgdGhpcy5sYXN0VWlMYW5ndWFnZSA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7ZnVsbExhbmdDb2RlfToke2hpZGVSZWdpb259YDtcclxuXHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGlvbkNhY2hlLmhhcyhjYWNoZUtleSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpITtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYW5nQ29kZVdpdGhvdXRSZWdpb24gPSB0aGlzLmdldExhbmd1YWdlRnJvbUxhbmd1YWdlQ29kZShmdWxsTGFuZ0NvZGUpO1xyXG4gICAgY29uc3QgaXNDb2RlQW5kUmVnaW9uU2FtZSA9IHRoaXMuaXNMYW5ndWFnZUNvZGVTYW1lQXNSZWdpb24oZnVsbExhbmdDb2RlKTtcclxuICAgIGNvbnN0IGxhbmdDb2RlRm9yVHJhbnNsYXRpb24gPSBpc0NvZGVBbmRSZWdpb25TYW1lID8gbGFuZ0NvZGVXaXRob3V0UmVnaW9uIDogZnVsbExhbmdDb2RlO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5nZXRUcmFuc2xhdGlvbihsYW5nQ29kZUZvclRyYW5zbGF0aW9uLCBoaWRlUmVnaW9uKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCB0cmFuc2xhdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUcmFuc2xhdGlvbihsYW5nQ29kZTogc3RyaW5nLCBoaWRlUmVnaW9uPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsYW5ndWFnZVRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5sYW5ndWFnZXNMb2NhbGl6YXRpb25LZXkpO1xyXG4gICAgbGV0IHRyYW5zbGF0aW9uID1cclxuICAgICAgLyoqXHJcbiAgICAgICAgICBlLmcuIEluIGNhc2Ugd2UgbmVlZCB0byBkaXNwbGF5IFwiZW4tR0JcIiBsYW5ndWFnZSBjb2RlIGFzIFwiQnJpdGlzaFwiIHdlIGNhbiBkbyB0aGlzXHJcbiAgICAgICAgYnkgYWRkaW5nIFwiRU5fR0JcIjogXCJCcml0aXNoXCIgaW4gbG9jYWxpemF0aW9uIGZpbGVzIHVuZGVyIFwiTEFOR1VBR0VTXCIga2V5LiBcclxuICAgICAgKi9cclxuICAgICAgbGFuZ3VhZ2VUcmFuc2xhdGlvbnNbbGFuZ0NvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKCctJywgJ18nKV0gPz9cclxuICAgICAgdGhpcy5nZXRMYW5ndWFnZVRyYW5zbGF0aW9uRnJvbUxhbmd1YWdlQ29kZSh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZywgbGFuZ0NvZGUpO1xyXG5cclxuICAgIGlmIChoaWRlUmVnaW9uKSB7XHJcbiAgICAgIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb24uc3BsaXQoJygnKVswXS50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZVRyYW5zbGF0aW9uRnJvbUxhbmd1YWdlQ29kZShjdXJyZW50TGFuZzogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VOYW1lc0luQ3VycmVudExhbmcgPSBuZXcgSW50bC5EaXNwbGF5TmFtZXMoW2N1cnJlbnRMYW5nXSwgeyB0eXBlOiAnbGFuZ3VhZ2UnIH0pO1xyXG4gICAgY29uc3QgcmVnaW9uTmFtZXNJbkN1cnJlbnRMYW5nID0gbmV3IEludGwuRGlzcGxheU5hbWVzKFtjdXJyZW50TGFuZ10sIHsgdHlwZTogJ3JlZ2lvbicgfSk7XHJcblxyXG4gICAgbGV0IHRyYW5zbGF0aW9uOiBzdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbUxhbmd1YWdlQ29kZShjb2RlKTtcclxuICAgICAgY29uc3QgcmVnaW9uID0gdGhpcy5nZXRSZWdpb25Gcm9tTGFuZ3VhZ2VDb2RlKGNvZGUpO1xyXG5cclxuICAgICAgY29uc3QgbGFuZ3VhZ2V0cmFuc2xhdGlvbiA9IGxhbmd1YWdlTmFtZXNJbkN1cnJlbnRMYW5nLm9mKGxhbmd1YWdlKTtcclxuICAgICAgY29uc3QgcmVnaW9uVHJhbnNsYXRpb24gPSByZWdpb25OYW1lc0luQ3VycmVudExhbmcub2YocmVnaW9uKTtcclxuXHJcbiAgICAgIHRyYW5zbGF0aW9uID0gYCR7bGFuZ3VhZ2V0cmFuc2xhdGlvbn0gKCR7cmVnaW9uVHJhbnNsYXRpb259KWA7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdHJhbnNsYXRpb24gPSBsYW5ndWFnZU5hbWVzSW5DdXJyZW50TGFuZy5vZihjb2RlKSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNMYW5ndWFnZUNvZGVTYW1lQXNSZWdpb24oZnVsbExhbmdDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFtjb2RlLCByZWdpb24sIGV4dHJhXSA9IGZ1bGxMYW5nQ29kZS5zcGxpdCgnLScpO1xyXG4gICAgcmV0dXJuIGNvZGUgPT09IHJlZ2lvbj8udG9Mb3dlckNhc2UoKSAmJiAhZXh0cmE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlZ2lvbkZyb21MYW5ndWFnZUNvZGUoZnVsbExhbmdDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgY29uc3QgW19jb2RlLCByZWdpb24sIGV4dHJhXSA9IGZ1bGxMYW5nQ29kZS5zcGxpdCgnLScpO1xyXG4gICAgY29uc3QgcmVnaW9uQ29kZSA9IGV4dHJhID8gYCR7cmVnaW9ufS0ke2V4dHJhfWAgOiBgJHtyZWdpb259YDtcclxuICAgIHJldHVybiByZWdpb25Db2RlLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExhbmd1YWdlRnJvbUxhbmd1YWdlQ29kZShmdWxsTGFuZ0NvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZnVsbExhbmdDb2RlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -618,19 +618,31 @@ class LanguageTranslatePipe {
|
|
|
618
618
|
constructor(translate) {
|
|
619
619
|
this.translate = translate;
|
|
620
620
|
this.languagesLocalizationKey = 'LANGUAGES';
|
|
621
|
+
this.translationCache = new Map();
|
|
622
|
+
this.translate.onLangChange.subscribe(() => {
|
|
623
|
+
this.translationCache.clear();
|
|
624
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
625
|
+
});
|
|
626
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
621
627
|
}
|
|
622
628
|
transform(fullLangCode, hideRegion = false) {
|
|
623
629
|
if (!fullLangCode) {
|
|
624
630
|
return '';
|
|
625
631
|
}
|
|
626
|
-
|
|
632
|
+
if (this.lastUiLanguage !== this.translate.currentLang) {
|
|
633
|
+
this.translationCache.clear();
|
|
634
|
+
this.lastUiLanguage = this.translate.currentLang;
|
|
635
|
+
}
|
|
636
|
+
const cacheKey = `${fullLangCode}:${hideRegion}`;
|
|
637
|
+
if (this.translationCache.has(cacheKey)) {
|
|
638
|
+
return this.translationCache.get(cacheKey);
|
|
639
|
+
}
|
|
640
|
+
const langCodeWithoutRegion = this.getLanguageFromLanguageCode(fullLangCode);
|
|
627
641
|
const isCodeAndRegionSame = this.isLanguageCodeSameAsRegion(fullLangCode);
|
|
628
642
|
const langCodeForTranslation = isCodeAndRegionSame ? langCodeWithoutRegion : fullLangCode;
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
const [code, region, extra] = fullLangCode.split('-');
|
|
633
|
-
return code === region?.toLowerCase() && !extra;
|
|
643
|
+
const translation = this.getTranslation(langCodeForTranslation, hideRegion);
|
|
644
|
+
this.translationCache.set(cacheKey, translation);
|
|
645
|
+
return translation;
|
|
634
646
|
}
|
|
635
647
|
getTranslation(langCode, hideRegion) {
|
|
636
648
|
const languageTranslations = this.translate.instant(this.languagesLocalizationKey);
|
|
@@ -648,7 +660,32 @@ class LanguageTranslatePipe {
|
|
|
648
660
|
}
|
|
649
661
|
getLanguageTranslationFromLanguageCode(currentLang, code) {
|
|
650
662
|
const languageNamesInCurrentLang = new Intl.DisplayNames([currentLang], { type: 'language' });
|
|
651
|
-
|
|
663
|
+
const regionNamesInCurrentLang = new Intl.DisplayNames([currentLang], { type: 'region' });
|
|
664
|
+
let translation;
|
|
665
|
+
try {
|
|
666
|
+
const language = this.getLanguageFromLanguageCode(code);
|
|
667
|
+
const region = this.getRegionFromLanguageCode(code);
|
|
668
|
+
const languagetranslation = languageNamesInCurrentLang.of(language);
|
|
669
|
+
const regionTranslation = regionNamesInCurrentLang.of(region);
|
|
670
|
+
translation = `${languagetranslation} (${regionTranslation})`;
|
|
671
|
+
}
|
|
672
|
+
catch {
|
|
673
|
+
translation = languageNamesInCurrentLang.of(code);
|
|
674
|
+
}
|
|
675
|
+
return this.capitalizeFirstLetter(translation);
|
|
676
|
+
}
|
|
677
|
+
isLanguageCodeSameAsRegion(fullLangCode) {
|
|
678
|
+
const [code, region, extra] = fullLangCode.split('-');
|
|
679
|
+
return code === region?.toLowerCase() && !extra;
|
|
680
|
+
}
|
|
681
|
+
getRegionFromLanguageCode(fullLangCode) {
|
|
682
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
683
|
+
const [_code, region, extra] = fullLangCode.split('-');
|
|
684
|
+
const regionCode = extra ? `${region}-${extra}` : `${region}`;
|
|
685
|
+
return regionCode.toUpperCase();
|
|
686
|
+
}
|
|
687
|
+
getLanguageFromLanguageCode(fullLangCode) {
|
|
688
|
+
return fullLangCode.split('-')[0].toLowerCase();
|
|
652
689
|
}
|
|
653
690
|
capitalizeFirstLetter(text) {
|
|
654
691
|
return text.charAt(0).toUpperCase() + text.slice(1);
|