|
|
|
import { Language, LanguageAlias, defineNuxtPlugin, isEeUI, useApi, useGlobal } from '#imports'
|
|
|
|
import { loadLocaleMessages, setI18nLanguage } from '~/plugins/a.i18n'
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialize global state and watches for changes
|
|
|
|
*
|
|
|
|
* @example
|
|
|
|
* ```js
|
|
|
|
* import { useNuxtApp } from '#app'
|
|
|
|
*
|
|
|
|
* const { $state } = useNuxtApp()
|
|
|
|
*
|
|
|
|
* console.log($state.lang.value) // 'en'
|
|
|
|
* ```
|
|
|
|
*/
|
|
|
|
const statePlugin = async (_nuxtApp) => {
|
|
|
|
const state = useGlobal()
|
|
|
|
|
|
|
|
const { api } = useApi({ useGlobalInstance: true })
|
|
|
|
|
|
|
|
let currentLang = state.lang.value
|
|
|
|
|
|
|
|
/** fall back to EN language if the current language cannot be found in Language or LanguagesAlias */
|
|
|
|
if (![...Object.keys(Language), ...Object.keys(LanguageAlias)].includes(currentLang)) state.lang.value = currentLang = 'en'
|
|
|
|
|
|
|
|
/** force load initial locale messages */
|
|
|
|
await Promise.all([loadLocaleMessages(currentLang), loadLocaleMessages('en')])
|
|
|
|
|
|
|
|
/** set i18n locale to stored language */
|
|
|
|
await setI18nLanguage(currentLang)
|
|
|
|
|
|
|
|
try {
|
|
|
|
state.appInfo.value = await api.utils.appInfo()
|
|
|
|
} catch (e) {
|
|
|
|
console.error(e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default defineNuxtPlugin(async function (nuxtApp) {
|
|
|
|
if (!isEeUI) return await statePlugin(nuxtApp)
|
|
|
|
})
|
|
|
|
|
|
|
|
export { statePlugin }
|