vue element plus多语言切换怎么实现
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要讲解了"vue element plus多语言切换怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"vue element plus多
千家信息网最后更新 2024年12月13日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安全错误
数据库的锁怎样保障安全
转移数据库给新用户
万网域名解析服务器
生存小镇服务器推荐
cmdb 数据库设计
php医院数据库设计
带信息网络安全专业的导师
网络安全管理的技术控制
云服务器能挂网络吗
oracle数据库goto
软件开发去那里自学
数据库约束控制怎么弄
怎么给数据库插入数据
软件开发示范文本
南京助力智慧工地软件开发
企业信息网络安全系统组建
网络安全的电子小报
服务器突然异常关机和自动重启
电脑用公用网络安全码
珠海汽车软件开发哪家好
广义网络安全吗
网络安全反诈防骗手抄报8K
网络安全法相关的报道
禁止服务器管理自启
咸宁信息网络安全
tpshop 数据库表
网络安全前沿
软件开发买什么苹果笔记本
考勤机数据库如何与内网连接
服务器主板超频
无线网络技术导论期末