当前位置: 首页 > news >正文

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 modelocale: 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 = titleconst pathArr = ['/home',''] if(pathArr.indexOf(to.path) !== -1){if(localStorage.getItem('token')){next()}else{next("/login")}}else{next()}
}

http://www.lryc.cn/news/397803.html

相关文章:

  • one-hot-zhu案例
  • 数据库课设---酒店管理系统(MySQL、VBNet)
  • NLP入门——前馈词袋分类模型的搭建、训练与预测
  • GD32F303RET6读取SGM58031电压值
  • Pandas实战指南:any()函数深度解析与高效应用
  • ClickHouse中PRIMARY KEY和ORDER BY关键字的关系
  • android 图片轮播
  • 进度条提示-在python程序中使用避免我误以为挂掉了
  • 【案例】python集成OCR识别工具调研
  • 第一关:Linux基础知识
  • qt 自定义信号和槽举例
  • 编程语言与数据结构的关系:深度解析与探索
  • 了解AsyncRotationController
  • 有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?
  • 物联网系统中市电电量计量方案(一)
  • 2024年热门无线领夹麦克风哪款好,麦克风品牌排行榜前十名推荐
  • IEEE顶刊“放水”?稳居1区Top,发文扩张IF稳长,CCF推荐,审稿友好!
  • 发布:PhonePrompter_PC(手机录视频提词器_电脑版)
  • shein测试开发会问些啥?
  • mysql索引优化
  • Linux文件编程(打开/创建写入读取移动光标)
  • 集成测试技术栈
  • MongoDB - 集合和文档的增删改查操作
  • 【深度学习基础】安装包报错——MAC M3-MAX芯片安装scikit-learn库报错。
  • 【chatgpt消费者偏好】是什么驱动了游客持续旅游意愿?推文分享—2024-07-08
  • torchplus
  • LeetCode之最长回文子串
  • Gradle 介绍
  • 短视频矩阵:批量发布的秘密揭秘
  • 基于 Nginx + Spring Boot + Vue + JPA 的网站安全防护指南