34 lines
886 B
JavaScript
34 lines
886 B
JavaScript
import { createI18n } from 'vue-i18n'
|
|
|
|
export const SUPPORT_LOCALES = ['en', 'sl']
|
|
|
|
export const i18n = createI18n({
|
|
legacy: false,
|
|
locale: 'en',
|
|
fallbackLocale: 'en',
|
|
messages: {},
|
|
})
|
|
|
|
const loadedLocales = new Set()
|
|
|
|
async function loadLocaleMessages(locale) {
|
|
if (!loadedLocales.has(locale)) {
|
|
const messages = await import(`../locales/${locale}.json`)
|
|
i18n.global.setLocaleMessage(locale, messages.default)
|
|
loadedLocales.add(locale)
|
|
}
|
|
}
|
|
|
|
export async function setLocale(locale) {
|
|
await loadLocaleMessages(locale)
|
|
i18n.global.locale.value = locale
|
|
document.documentElement.setAttribute('lang', locale)
|
|
localStorage.setItem('locale', locale)
|
|
}
|
|
|
|
export function initialLocale() {
|
|
const saved = localStorage.getItem('locale')
|
|
const browser = navigator.language.split('-')[0]
|
|
return [saved, browser].find(l => SUPPORT_LOCALES.includes(l)) || 'en'
|
|
}
|