@neosjs/create-app
Version:
帮助开发者快速创建Vue3应用并自动配置项目
43 lines (36 loc) • 1.24 kB
text/typescript
import type { Locale } from 'vue-i18n'
import { createI18n } from 'vue-i18n'
import type { App } from 'vue'
const i18n = createI18n({
legacy: false,
silentTranslationWarn: true,
globalInjection: true
})
const localesMap = Object.fromEntries(
Object.entries(import.meta.glob('../../locales/*.yml')).map(([path, loadLocale]) => [
path.match(/([\w-]*)\.yml$/)?.[1],
loadLocale
])
) as Record<Locale, () => Promise<{ default: Record<string, string> }>>
export const availableLocales = Object.keys(localesMap)
const loadedLanguages: string[] = []
function setI18nLanguage(lang: Locale) {
i18n.global.locale.value = lang as any
if (typeof document !== 'undefined')
document.querySelector('html')?.setAttribute('lang', lang)
return lang
}
export async function loadLanguageAsync(lang: string): Promise<Locale> {
if (i18n.global.locale.value === lang)
return setI18nLanguage(lang)
if (loadedLanguages.includes(lang))
return setI18nLanguage(lang)
const messages = await localesMap[lang]()
i18n.global.setLocaleMessage(lang, messages.default)
loadedLanguages.push(lang)
return setI18nLanguage(lang)
}
export const install = (app: App<Element>) => {
app.use(i18n)
loadLanguageAsync('zh-CN')
}