vue3 + i18n 中英文切换

第一步:安装vue-i18n

npm install vue-i18n

第二步:配置语言包及js文件

目录如下:

英文语言包 en.js

// lang/en.js - 英文语言包
export default {
    menu: {      
        库房管理: 'Warehouse Management',
        入库检测: 'Incoming Inspection',       
        设置: 'Settings'
    }
  };
  

中文语言包 zh-CN.js

// lang/zh.js - 中文语言包
export default {
    menu: {       
        库房管理: '库房管理',
        入库检测: '入库检测',       
        设置: '设置'
    }
  };
  

js配置文件(单独设置一个文件,方便其他地方引用,直接配置在main.js中在router中调用有问题未解决)

// 引入插件
import { createI18n } from 'vue-i18n'
// 引入语言包
import zh from './zh-CN'
import en from './en'

// 自动设置多语言 默认选择浏览器系统语言
const navLang       = navigator.language;    //判断当前浏览器使用的语言
const localLang     = (navLang === 'zh-CN' || navLang === 'en-US') ? navLang : false;
let lang            = localStorage.getItem('language') || localLang || 'en-US';    //如果有存,取缓存的语言
// 创建 VueI18n 实例,并为 messages 和 locale 属性赋值
const i18n  = createI18n({
    legacy: false, //解决Not available in legacy mode
    locale: lang, // 设置语言类型
    messages:{
        'zh': zh, // 中文语言包
        'en': en // 英文语言包
    },
    silentTranslationWarn: true,
    globalInjection: true, // 全局注册$t方法
});
localStorage.setItem('language',lang);    //最后缓存当前使用的语言

export default i18n

语言包的配置不尽相同,大家按自己项目中的需求合理配置即可,我的项目中是后台动态获取菜单(非动态路由)

第三步:调用

动态菜单的实现(组件中调用 全局变量 $t

<el-menu
            :default-active="$route.path"
            class="el-menu-vertical-demo"
            :collapse-transition="false"
            :unique-opened=true
            :router="true"
            background-color="#F3F5FA"
          >
            <el-menu-item :index="item.url" class="one-bj" v-for="(item,index) in menuList" @click="judge(item.menuId)">
              <i :class="item.icon"></i>&nbsp;
              <div class="pos">{{$t('menu.'+item.name)}}</div>         
            </el-menu-item>
          </el-menu>

中英文切换按钮:

<button @click="changeLang">{{ language }}</button>

插件import

import i18n from '@/locales'
const { t,locale } =  i18n.global  //解构出t方法
//中英文切换
const route = useRoute()
const changeLang = () => {
  if(language.value == "中文"){
    language.value = "英文"
    locale.value = "zh"
    localStorage.setItem('language','zh'); 
    document.title = t('menu.'+route.meta.title) + '-' + t('menu.'+'风味科学') //设置网页标题  //修改页面标题中英文切换
  }else {
    language.value = "中文"
    locale.value = "en"
    localStorage.setItem('language','en'); 
    document.title = t('menu.'+route.meta.title) + '-' + t('menu.'+'风味科学') //设置网页标题
  }
}

以上为页面中的使用。

在router中的使用,同样需要先引入插件并导入用到的方法

直接路由中使用

 {
              path:'/home',
              name:'home',
              component:() => import('@/views/OverView.vue'),
              meta:{title:t('menu.'+'整体概览'),requireAuth:true}
          },

上述方法页面标题只有在刷新页面的时候会更改中英文,点击中英文切换按钮的时候并不会实时改变

所以我们需要在路由守卫中进行处理,同时配合按钮切换的时候document.title的改变

router.beforeEach((to,from,next)=>{
  const title = ( t('menu.'+to.meta.title) ? t('menu.'+to.meta.title) : "" ) + '-' + t('menu.'+'科学') //设置网页标题
  document.title = title
  const pathArr = ['/home',''] 
  if(pathArr.indexOf(to.path) !== -1){
    if(localStorage.getItem('token')){
      next()
    }else{
      next("/login")
    }
  }else{
    next()
  }
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 07:34:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 07:34:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 07:34:04       58 阅读
  4. Python语言-面向对象

    2024-07-12 07:34:04       69 阅读

热门阅读

  1. 【WPF】Enum与Converter的使用

    2024-07-12 07:34:04       25 阅读
  2. 【CH32V305FBP6】USBD 初始化分析

    2024-07-12 07:34:04       26 阅读
  3. Ansible的Playbook

    2024-07-12 07:34:04       24 阅读
  4. Ansible

    2024-07-12 07:34:04       22 阅读
  5. RabbitMQ保证消息被成功发送和消费

    2024-07-12 07:34:04       23 阅读
  6. Python实现一对多WebSocket发送给指定多个客户端

    2024-07-12 07:34:04       26 阅读
  7. React 18 + Babel 7 + Webpack 5 开发环境搭建

    2024-07-12 07:34:04       27 阅读
  8. flutter常用库的介绍(1)

    2024-07-12 07:34:04       31 阅读
  9. 用Python和TensorFlow实现图像分类:从零开始

    2024-07-12 07:34:04       28 阅读
  10. 鸿蒙开发工程师面试题-架构篇

    2024-07-12 07:34:04       29 阅读
  11. 递推(C语言)

    2024-07-12 07:34:04       18 阅读