keycloak-demo-frontend/src/models/Core/I18n/index.ts

76 lines
1.4 KiB
TypeScript

import Immerable from '@Models/GeneralImmer';
import tw from '@Langs/data/tw';
import en from '@Langs/data/en';
import { LangObject, LangList } from './types';
const LANGUAGE_BASE_LIST = [
{
lang: 'frontend.global.language.en',
value: 'en',
},
{
lang: 'frontend.global.language.tw',
value: 'tw',
},
];
class I18n extends Immerable {
public lang: string;
public langDefault: LangObject;
public langList: LangList;
public langBase: LangObject;
constructor(lang: string) {
super();
this.lang = lang;
this.langDefault = en;
this.langList = LANGUAGE_BASE_LIST;
this.langBase = en;
this.switchLanguage(this.lang);
}
t(key: string): string {
let text = this.langBase[key];
if (!text) {
text = this.langDefault[key] || '';
}
return text;
}
switchLanguage(language: string): void {
switch (language) {
case 'en':
this.langBase = en;
break;
case 'tw':
this.langBase = tw;
break;
default:
this.langBase = en;
break;
}
}
getSystemLang = (): string => {
const lang = navigator.language.toLowerCase();
switch (lang) {
case 'en':
return 'en';
case 'tw':
case 'zh-tw':
return 'tw';
default:
return 'en';
}
};
get languages(): LangList {
return this.langList;
}
}
export default I18n;