66 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-02-14 17:53:37 -08:00
import { fetchAccount } from './../../redux/clientSlice';
2021-02-13 10:10:02 -08:00
export class Locale {
code: LocaleCode;
label: string;
2021-02-14 16:33:36 -08:00
message: any;
2021-02-13 10:10:02 -08:00
2021-02-14 16:33:36 -08:00
constructor(code: LocaleCode, label: string, message: any) {
2021-02-13 10:10:02 -08:00
this.code = code;
this.label = label;
2021-02-14 16:33:36 -08:00
this.message = message;
2021-02-13 10:10:02 -08:00
}
}
export default class AppI18n {
2021-02-14 17:53:37 -08:00
constructor() {
2021-02-13 10:10:02 -08:00
}
2021-02-14 17:53:37 -08:00
public getUserLocale(): Locale {
const account = fetchAccount();
return account ? account.locale : this.getBrowserLocale();
2021-02-13 10:10:02 -08:00
}
2021-02-14 17:53:37 -08:00
public getBrowserLocale(): Locale {
2021-02-13 10:10:02 -08:00
let localeCode = (navigator.languages && navigator.languages[0])
|| navigator.language;
// Just remove the variant ...
localeCode = localeCode.split('-')[0];
let result = Locales.EN;
try {
result = localeFromStr(localeCode)
} catch {
console.warn(`Unsupported languange code ${localeCode}`);
}
return result;
}
}
export type LocaleCode = 'en' | 'es' | 'fr' | 'de';
export const Locales =
{
2021-02-14 16:33:36 -08:00
EN: new Locale('en', 'English', require('./../../compiled-lang/en.json')),
ES: new Locale('es', 'Español', require('./../../compiled-lang/es.json')),
2021-02-14 17:53:37 -08:00
DE: new Locale('fr', 'Français', require('./../../compiled-lang/fr.json')),
FR: new Locale('de', 'Deutsch', require('./../../compiled-lang/de.json')),
2021-02-13 10:10:02 -08:00
}
export const localeFromStr = (code: string): Locale => {
const locales: Locale[] = Object
.values(Locales);
const result = locales
.find((l) => l.code == code);
if (!result) {
2021-02-14 23:32:52 -08:00
throw `Language code could not be found in list of default supported: + ${code}`
2021-02-13 10:10:02 -08:00
}
return result;
}