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;