39 lines
977 B
TypeScript
39 lines
977 B
TypeScript
import { defineNuxtPlugin, useRuntimeConfig } from '#app'
|
|
import { createI18n } from 'vue-i18n'
|
|
import en from '~/locales/en'
|
|
import ca from '~/locales/ca'
|
|
import es from '~/locales/es'
|
|
|
|
const locales = ['en', 'ca', 'es'] as const
|
|
type LocaleType = (typeof locales)[number]
|
|
|
|
function getSavedLocale(): LocaleType {
|
|
if (typeof window !== 'undefined') {
|
|
const saved = localStorage.getItem('quibot-locale')
|
|
if (saved && locales.includes(saved as LocaleType)) {
|
|
return saved as LocaleType
|
|
}
|
|
}
|
|
return 'en'
|
|
}
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
const locale = getSavedLocale()
|
|
const i18n = createI18n({
|
|
legacy: false,
|
|
locale,
|
|
fallbackLocale: 'en',
|
|
messages: { en, ca, es },
|
|
})
|
|
|
|
nuxtApp.vueApp.use(i18n)
|
|
|
|
// Expose setLocale for global access
|
|
nuxtApp.provide('setLocale', (l: LocaleType) => {
|
|
if (locales.includes(l)) {
|
|
i18n.global.locale.value = l
|
|
localStorage.setItem('quibot-locale', l)
|
|
}
|
|
})
|
|
})
|