61 lines
1.7 KiB
TypeScript
Raw Normal View History

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
}