mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
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 '#imports' |
|
* |
|
* 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 }
|
|
|