- main.ts引入i18n
import { createApp } from 'vue' import App from './App.vue' import router from './router' import store from './store' import ElementPlus from "./plugins/ElementPlus"; import common from "./plugins/common"; import i18n from './language'; createApp(App).use(store).use(router).use(ElementPlus).use(common).use(i18n).mount('#app');
- 新建文件夹language, language文件夹下创建lang文件夹、index.ts,lang文件夹下创建语言类型文件
- 自动引入文件类型文件
/** * require.context * @param {directory}:表示检索的目录 * @param {useSubdirectories}:表示是否检索子文件夹 * @param {regExp}:匹配文件的正则表达式,一般是文件名 * @param {mode}:加载模式,同步/异步 */ import { createI18n } from 'vue-i18n' const lang = require.context(`./lang`, false, /\.ts$/); const messages:any = {}; lang.keys().forEach(key => { const val = lang(key).default; const name = key.replace(/(.*\/)*([^.]+).*/ig, '$2'); messages[name] = val; }); const i18n = createI18n({ locale: navigator.language.toLowerCase(), //默认显示的语言 messages }); export default i18n;
-
element-plus国际化
<template> <el-config-provider :locale="locale"> <router-view /> </el-config-provider> </template> <script lang="ts"> import { defineComponent, reactive, toRefs } from "vue"; export default defineComponent({ name: "App", setup() { const languageType = navigator.language.toLowerCase(); const state = reactive({ locale: require(`element-plus/lib/locale/lang/${languageType}`).default, }); return { ...toRefs(state) } } }) </script> <style lang="scss"></style>