前端若依框架vue3+Element Plus实现i18n国际语言切换

鼠扑  金牌会员 | 2024-12-9 23:59:50 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 921|帖子 921|积分 2763

最近要完成一个国际化的背景管理系统,但是遇到了一个问题,就是我在切换语言的时间,element 组件不更新,主要是main.js里头的 locale 语言没有更新,也就是main.js 只能在项目启动的时间后走一遍,其他页面跳转都不会走main.js, 所以导致了element plus 组件的国际语言没有更新,只能每次退出大概手动强制刷新项目大概页面才可能有效果,如许的话不符合前端需求呀,
 
花了几天的时间终于把这个问题解决了, 1.每次登录成功后,刷新整个项目页面 location.reload()
2.每次切换语言也刷新整个项目 location.reload()
第一步 下载 i18n依靠
第二步 编写好中文,英文文件,封装并创建 i18n文件 

第三步. main.js中引入    
 

整个i18n前端设置内容就都已完成  主要注意的一点就 main.js中 app.use中element 中英切换后 main.js不会重新执行 我们就得用location.reload() 可刷新整个页面
第四步 登录页面中的中英切换  登录成功 location.reload() 刷新页面


第五步 封装切换语言的组件 可在内部页面需要的地方调用组件 (element中中英切换主要是分页是否中英文切换了,如果每次中英文切换  分页组件库酿成中文大概英文,那就成功了)
  1. <template>
  2.   <div class="language_title">
  3.     <el-dropdown @command="handleCommand" trigger="click">
  4.       <div class="language_wrapper">
  5.         <span class="svg">
  6.           <svg preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" width="1.2em" height="1.2em" data-v-12008bb2=""><path fill="currentColor" d="m18.5 10l4.4 11h-2.155l-1.201-3h-4.09l-1.199 3h-2.154L16.5 10h2zM10 2v2h6v2h-1.968a18.222 18.222 0 0 1-3.62 6.301a14.864 14.864 0 0 0 2.336 1.707l-.751 1.878A17.015 17.015 0 0 1 9 13.725a16.676 16.676 0 0 1-6.201 3.548l-.536-1.929a14.7 14.7 0 0 0 5.327-3.042A18.078 18.078 0 0 1 4.767 8h2.24A16.032 16.032 0 0 0 9 10.877a16.165 16.165 0 0 0 2.91-4.876L2 6V4h6V2h2zm7.5 10.885L16.253 16h2.492L17.5 12.885z"></path></svg>
  7.         </span>
  8.         <p>
  9.           <span v-if="proxy.$i18n.locale == 'zh-CN'">简体中文</span>
  10.           <span v-else>English</span>
  11.         </p>
  12.         <el-icon><caret-bottom /></el-icon>
  13.       </div>
  14.       <template #dropdown>
  15.         <el-dropdown-menu>
  16.           <el-dropdown-item command="zh-CN">
  17.             <span>简体中文</span>
  18.           </el-dropdown-item>
  19.           <el-dropdown-item divided command="en-US">
  20.             <span>English</span>
  21.           </el-dropdown-item>
  22.         </el-dropdown-menu>
  23.       </template>
  24.     </el-dropdown>
  25.   </div>
  26. </template>
  27. <script setup>
  28. const { proxy } = getCurrentInstance();
  29. const router = useRouter();
  30. const redirect = ref(undefined);
  31. // 切换语言
  32. const handleCommand = (command) => {
  33.   proxy.$i18n.locale = command
  34.   sessionStorage.setItem('language', command)
  35.   // 获取当前路由的路径
  36.   redirect.value = router.currentRoute.value.path;
  37.   //存本地
  38.   sessionStorage.setItem('redirect', redirect.value)
  39.   router.push({ path: redirect.value || "/index" });
  40.   //登录后再次刷新整个项目走main.js 解决element-plus 语言切换问题
  41.   location.reload()
  42. }
  43. </script>
  44. <style lang='scss' scoped>
  45. .language_title{
  46.   display: flex;
  47.   align-items: center;
  48.   justify-content: center;
  49.   .language_wrapper{
  50.     display: flex;
  51.     align-items: center;
  52.     justify-content: center;
  53.     span.svg{
  54.       font-size: 24px;
  55.       color:#333;
  56.     }
  57.     i.el-icon{
  58.       color:#333;
  59.     }
  60.     p{
  61.       color:#333;
  62.       margin: 0 10px;
  63.       font-size: 16px;
  64.     }
  65.   }
  66. }
  67. </style>
复制代码
切换语言解决后 下面就是每个页面怎么去使用啦
  1. html中使用
  2. <h2 class="title">{{ $t('title.name') }}</h2>
  3. script中使用
  4. //引入
  5. import { $t } from '@/lang/i18n'
  6. 定义data中使用
  7. const data = reactive({
  8.   loginRules:{
  9.     username: [{ required: true, trigger: "blur", message: $t('login.captcha.username') }],
  10.     password: [{ required: true, trigger: "blur", message: $t('login.captcha.password') }],
  11.     code: [{ required: true, trigger: "change", message: $t('login.captcha.code') }]
  12.   }
  13. })
  14. 方法中使用
  15. const handleCommand = (command) => {
  16.   proxy.$i18n.locale = command
  17.   sessionStorage.setItem('language', command)
  18.   loginRules.value.username[0].message = $t('login.captcha.username')
  19.   loginRules.value.password[0].message = $t('login.captcha.password')
  20.   loginRules.value.code[0].message = $t('login.captcha.code')
  21.   proxy.$modal.msgSuccess($t('language.message'));
  22. }
复制代码

下面就是若依框架中的菜单怎样中英切换,和 字典的中英切换,前端如那边理,缺点就是每次项目需要迭代添加字典大概菜单,前端需要调整, 最好的办法是 后端做处理返回给前端,前端在哀求头把语言发送给后端
可直接在菜单渲染在页面的时间做文章, 

 可直接在字典渲染在页面的时间做文章,
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表