当前位置:   article > 正文

vue-i18n +(vue3+element-plus)实现中英文切换_elementplus 中英文切换

elementplus 中英文切换

目录

安装引入 

使用


vue3需安装9.x版本的vue-i18n,官方文档目前没有中文版

官方文档: Vue I18n

安装引入 

第一步:安装vue-i18n

  1. // npm
  2. npm install vue-i18n@9
  3. // yarn
  4. yarn add vue-i18n@9

第二步: 为了方便统一管理以及后期需在router.js等地方获取当前的语言,

                在utils下新建lang文件夹,

                在lang文件夹下分别建index.js、en.js、zh.js文件

第三步: 在index.js里,引入vue-i18n,并进行相关配置后导出

index.js

我是将语言记录在localStorage里,所以首次要先去localStorage里取值,没有的话默认是中文

  1. import { createI18n } from 'vue-i18n'
  2. import en from './en' //英文
  3. import zh from './zh' //中文
  4. const i18n = createI18n({
  5. legacy: false, // 使用CompotitionAPI必须添加这条.
  6. locale: localStorage('lang') || 'zh', // set locale设置默认值
  7. fallbackLocale: 'zh', // set fallback locale
  8. messages: {
  9. en,
  10. zh, // set locale messages
  11. },
  12. })
  13. export default i18n

 第四步:在main.js里,将vue-i18n注入全局

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import { store } from './store'
  5. import ElementPlus from 'element-plus'
  6. import i18n from '@/utils/lang'
  7. const app = createApp(App)
  8. app.use(store)
  9. app.use(router)
  10. app.use(ElementPlus)
  11. // 全局注入语言
  12. app.use(i18n)
  13. app.mount('#app')

第五步:设置自动导入,前提是安装了自动导入插件unplugin-auto-import

vite.config.js

  1. import { defineConfig } from 'vite'
  2. import AutoImport from 'unplugin-auto-import/vite'
  3. export default ({ mode }) => {
  4. return defineConfig({
  5. plugins: [
  6. AutoImport({
  7. imports: [
  8. 'vue-i18n',
  9. ],
  10. dts: './auto-imports.d.ts',
  11. eslintrc: {
  12. enabled: false, // 配置更新时临时设为true,
  13. },
  14. }),
  15. ],
  16. resolve: {
  17. alias: {
  18. 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
  19. },
  20. },
  21. })
  22. }

 

到此,vue-i18n就引入成功啦。

使用

1、在zh.js及en.js里添加相应的中英文

2、在组件模板里使用 

  1. //基本用法
  2. <div>{{ $t('common.title') }}</div>
  3. //传值用法
  4. <div>{{ $t('common.title2',{date:'2023'}) }}</div>
  5. //zh.js
  6. //title2:'今年是{date}'
  7. //en.js
  8. //title2:'This year is {date}'

3、在setup里使用,以及进行语言切换

t:即组件里使用的$t

local:当下语言

  1. const { t, locale } = useI18n()
  2. const title = ref('测试')
  3. title.value = t('common.title')
  4. // 切换语言
  5. function toggleLang() {
  6. locale.value = locale.value === 'zh' ? 'en' : 'zh'
  7. localStorage.set('lang', locale.value)
  8. }

4、在其他js文件里使用,如:router.js 

  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import i18n from '@/utils/lang'
  3. export const routes = [
  4. {
  5. path: '/home',
  6. name: 'home',
  7. component: () => import('@/views/home.vue'),
  8. },
  9. ]
  10. const router = createRouter({
  11. history: createWebHistory('/web/'),
  12. routes,
  13. })
  14. router.afterEach((to, form, failure) => {
  15. if (!failure) {
  16. // 更改标签页标题
  17. const { t } = i18n.global
  18. document.title = t(`menu.${to.name}`) || 'page'
  19. }
  20. })

 element-plus

在app.vue中引入element多语言

如果是dialog或者popover这种在app.vue之外的,里面有用到element组件的,可将内容用el-config-provider再包裹一遍

  1. <template>
  2. <el-config-provider :locale="locale === 'en' ? en : zhCn">
  3. <router-view />
  4. </el-config-provider>
  5. </template>
  6. <script setup>
  7. import zhCn from 'element-plus/lib/locale/lang/zh-cn'
  8. import en from 'element-plus/dist/locale/en.mjs'
  9. const { locale } = useI18n()
  10. </script>
  11. <style lang="scss" scoped></style>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/332171
推荐阅读