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;
|
|
|
|
}
|