vue element plus多语言切换怎么实现
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要讲解了"vue element plus多语言切换怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"vue element plus多
千家信息网最后更新 2025年01月20日vue element plus多语言切换怎么实现
这篇文章主要讲解了"vue element plus多语言切换怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"vue element plus多语言切换怎么实现"吧!
解决一下问题:
如何实现多语言切换 ?
如何动态切换语言并更改elementUI语言 ?
更改完elementUI组件视图不更新?
如何全局使用 $t 函数 ?
如何在js文件里使用vue-i18n ?
如何实现多语言切换 ?
1、安装包vue-i18n
npm i vue-i18n --save
2、在src目录下新建如图:
en.js
const EN = { login: { title: 'User Login' },}export default EN
pl-pl.js
const PL_PL = { login: { title: 'Użytkownik jest zalogowany' },}export default PL_PL
zh-cn.js
const ZH_CN = { login: { title: '用户登录' },}export default ZH_CN
index.js
import { createI18n } from 'vue-i18n/index'import 'dayjs/locale/zh-cn'import zh from './zh-cn'import en from './en'import pl from './pl-pl'const messages = { 'zh-cn': zh, 'en': en, 'pl': pl}// Gets the current localeexport function getLanguage() { // Use the language of choice const chooselang = localStorage.getItem('locale') if (chooselang) return chooselang // if not shoose language const lang = (navigator.language || navigator.browserLanguage).toLowerCase() const locales = Object.keys(messages) return locales.includes(lang) ? lang : 'zh-cn'}const i18n = createI18n({ locale: getLanguage(), fallbackLocale: 'en', global: true, messages})export function $t(args) { return i18n.global.tc(args)}console.log($t('login.title'))export default (app) => { app.use(i18n)}
说明
getLanguage 函数 判断当前localStorage是否已有选择过语言如果没有则获取当前浏览器的语言;
封装 $t 函数并导出用在js文件中
3、 在main.js中
import language, { getLanguage, $t } from './language'language(app)
4、在vue文件中使用
//1.{{ $t('login.title') }}//2.
如何动态切换语言并更改elementUI语言 ?
1、利用vuex,在mutations中写一个方法更改element语言
// ----------------------- state -----------------------------import { getLanguage } from '@/language'const state = { lang: getLanguage()}export default state// ----------------------- mutations-----------------------------import * as Types from './types'import locale from 'element-plus/lib/locale'import localeZH from 'element-plus/lib/locale/lang/zh-cn'import localeEN from 'element-plus/lib/locale/lang/en'import localePL from 'element-plus/lib/locale/lang/pl'const element = { 'zh-cn': localeZH, 'en': localeEN, 'pl': localePL}const mutations = { // 切换语言 [Types.SET_LANG](state, lang) { state.lang = lang localStorage.setItem('locale', lang) locale.use(element[lang]) }}export default mutations// ----------------------- types-----------------------------export const SET_LANG = 'SET_LANG'
2、使用
import * as Types from '@/store/types'import { useI18n } from "vue-i18n";export default { setup(props,ctx) { const { locale: lang } = useI18n({ useScope: "global" }) let store = useStore() const handelLanguage = (name) => { lang.value = name store.commit(Types.SET_LANG, name) } return { handelLanguage } }}
更改完elementUI组件视图不更新?
这时你会发现就算我们提交commit去更改elementUI的语言 页面上也没有发生变化,因为视图组件并没有更新,如何刷新组件使之重新加载呢?
1、 在router-view上控制视图显示/隐藏
// ----------------------- template-----------------------------// ----------------------- script-----------------------------const reload = () => { state.isReloadRouter = false nextTick(() => { state.isReloadRouter = true })}provide("reload", reload)<-- 自行引入 provide nextTick ->
2、 在切换语言时调用reload
const handelLanguage = (name) => { lang.value = name store.commit(Types.SET_LANG, name) inject('reload')() }
3、需在main.js中调用一下commit,不然第一次进入elementUI 不会更改语言
import language, { getLanguage, $t } from './language'import '@/styles/elementDefault.scss'store.commit(Types.SET_LANG, getLanguage())
如何全局使用 $t 函数 ? 如何在js文件里使用vue-i18n ?
全局挂在 $t 函数 ,在js文件里直接使用 $t 函数。
方法一:通过app.config.globalProperties挂在到全局
方法二: 通过provide、inject来实现
import language, { getLanguage, $t } from './language'const app = createApp(App);// ----------------------- app.config.globalProperties -----------------------------app.config.globalProperties.$t = $t// 使用import { getCurrentInstance } from 'vue'const { proxy } = getCurrentInstance()proxy.$t()// ----------------------- provide、inject -----------------------------// main.js中app.provide('$t', $t)// 使用const $t = inject('$t')ElMessage.warning({ message: $t('login.warnMessage'), type: 'warning' });
vue3不推荐在原型链上挂载一些东西,而更推荐使用provide、inject,所以最好使用通过依赖和注入provide和inject的方式
在router.js中不能直接使用$t, 需自行引入该函数
import { $t } from '@/language'{ path: '/mainManage/device', name: 'device', hidden: false, meta: { icon: 'circle', title: $t('router.device') }, component: () => import(/* webpackChunkName: "device" */ '@/views/mainManage/device') },
感谢各位的阅读,以上就是"vue element plus多语言切换怎么实现"的内容了,经过本文的学习后,相信大家对vue element plus多语言切换怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
语言
切换
函数
多语
文件
全局
组件
视图
方法
学习
更新
内容
动态
问题
推荐
东西
原型
就是
思路
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
链接数据库代码
企业管理数据库设计
信息网络技术是学哪些
金蝶k3数据库可以安装吗
三级网络技术能用计算器么
名人数据库推荐艺术家
服务器固件有哪些作用
互联网科技平安保险
包头 网络安全保卫大
游戏老是连接服务器超时怎么回事
计算机软件开发公司行业类别
日滨系统服务器权限密码
poi数据库免费下载
电脑软件开发能干到多大岁数
软件开发有没有国家二级
最简单的软件开发模型
专注于银行影像应用软件开发
服务器如何增加电脑的使用
杭州蛮牛网络技术
山西商业软件开发
北京网络软件开发品质保障
三级的网络技术的破解版
肇庆专业软件开发厂家直销
csharp 数据库
机关网络安全法培训
网络安全推销
网络技术思科和华为哪个强
无线传感网络技术产品
关于网络安全海报的简介
微信小程序 数据库技术