2021-02-22 22:37:29 -08:00
|
|
|
import { fetchAccount } from './../../redux/clientSlice'
|
|
|
|
import 'dayjs/locale/fr'
|
|
|
|
import 'dayjs/locale/en'
|
|
|
|
import 'dayjs/locale/es'
|
2021-02-14 17:53:37 -08:00
|
|
|
|
2021-02-13 10:10:02 -08:00
|
|
|
export class Locale {
|
2021-02-22 22:37:29 -08:00
|
|
|
code: LocaleCode
|
|
|
|
label: string
|
|
|
|
message: Record<string, string>
|
2021-02-13 10:10:02 -08:00
|
|
|
|
2021-02-16 21:51:59 -08:00
|
|
|
constructor(code: LocaleCode, label: string, message: unknown) {
|
2021-02-22 22:37:29 -08:00
|
|
|
this.code = code
|
|
|
|
this.label = label
|
|
|
|
this.message = message as Record<string, string>
|
2021-02-13 10:10:02 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default class AppI18n {
|
2021-02-14 17:53:37 -08:00
|
|
|
public getUserLocale(): Locale {
|
2021-02-22 22:37:29 -08:00
|
|
|
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-22 22:37:29 -08:00
|
|
|
let localeCode = (navigator.languages && navigator.languages[0]) || navigator.language
|
2021-02-13 10:10:02 -08:00
|
|
|
|
|
|
|
// Just remove the variant ...
|
2021-02-22 22:37:29 -08:00
|
|
|
localeCode = localeCode.split('-')[0]
|
2021-02-13 10:10:02 -08:00
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
let result = Locales.EN
|
2021-02-13 10:10:02 -08:00
|
|
|
try {
|
|
|
|
result = localeFromStr(localeCode)
|
|
|
|
} catch {
|
2021-02-22 22:37:29 -08:00
|
|
|
console.warn(`Unsupported languange code ${localeCode}`)
|
2021-02-13 10:10:02 -08:00
|
|
|
}
|
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
return result
|
2021-02-13 10:10:02 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
export type LocaleCode = 'en' | 'es' | 'fr' | 'de'
|
2021-02-13 10:10:02 -08:00
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
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 => {
|
2021-02-22 22:37:29 -08:00
|
|
|
const locales: Locale[] = Object.values(Locales)
|
2021-02-13 10:10:02 -08:00
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
const result = locales.find((l) => l.code == code)
|
2021-02-13 10:10:02 -08:00
|
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2021-02-22 22:37:29 -08:00
|
|
|
return result
|
2021-02-16 22:47:09 -05:00
|
|
|
}
|