0


web全局实现文字的中英文的切换

该项目框架为Vite+Vue+TS,该demo的页面布局基于上一篇博客,由一个导航栏与两个页面组成。上一篇博客详细描述了导航栏下路由跳转的实现,查看文章可点击:路由跳转demo

页面效果为:

一、准备工作

模块下载

在该项目终端下安装相关的模块,输入:(缺少哪个下载哪个)

  1. npm install vue-router --save
  2. npm install element-plus --save
  3. npm install js-cookie
  4. npm install vue-i18n

项目结构

locale文件夹下放中/英文的变量配置,router文件夹用于路由配置,views文件夹下为所有的页面vue文件,大致结构如图所示:

二、配置

入口main.ts文件

在main.ts文件里,我们需要引入相应的模块,配置中英文:

  1. // main.ts
  2. import { createApp } from 'vue'
  3. import { createI18n } from 'vue-i18n'
  4. import router from "./router"
  5. import ElementPlus from 'element-plus'
  6. import en from "element-plus/es/locale/lang/en";
  7. import zhCn from 'element-plus/es/locale/lang/zh-cn';
  8. import Cookies from "js-cookie";
  9. import 'element-plus/dist/index.css'
  10. import App from './App.vue'
  11. import enLocale from "./locale/en";
  12. import zhLocale from "./locale/zh";
  13. const messages={
  14. en:enLocale,
  15. zh:zhLocale
  16. }
  17. const locale=Cookies.get("locale")||"zh";
  18. Cookies.set("locale",locale,{expires:30});
  19. document.documentElement.lang=locale==="en"?"en":"zh-CN";
  20. const i18n=createI18n({
  21. legacy:false,
  22. locale:locale,
  23. messages
  24. })
  25. const app = createApp(App)
  26. app.use(ElementPlus)
  27. app.use(router);
  28. app.use(ElementPlus,{
  29. locale:locale==="en"?en:zhCn
  30. });
  31. app.use(i18n);
  32. app.mount('#app')

en.ts/zh.ts文件

在这两个文件里,为方便之后的配置,可注意格式,常常保持两个文件变量位置的一致性。

比如:实现导航栏文字“菜单1”“菜单2”--->“menu1”“menu2”的转变,在en.ts、zh.ts两个文件中对应位置,也就是commonLayout:下的 menu1:与menu2: 后接上不同的属性值。

en.ts

  1. export default{
  2. commonLayout:{
  3. menu1:"menu1",
  4. menu2:"menu2"
  5. },
  6. menu1:{
  7. username:"username",
  8. password:"password"
  9. }
  10. }

zh.ts

  1. export default{
  2. commonLayout:{
  3. menu1:"菜单1",
  4. menu2:"菜单2"
  5. },
  6. menu1:{
  7. username:"用户名",
  8. password:"密码"
  9. }
  10. }

在该两文件中,格式并不是唯一的,数据是可以嵌套的、多级的,打个比方:

  1. export default{
  2. commonLayout:{
  3. menu1:{
  4. username:"用户名",
  5. password:"密码"
  6. },
  7. menu:"菜单",
  8. menu2:"菜单2"
  9. },
  10. }

common_layout.vue 启动切换

在导航栏中,设置一个开关按钮 ,关时为中文,开时为英文:(<el-switch>具体属性可去elementui官网搜索)

  1. <el-switch v-model="isEn" active-text="English" inactive-text="中文" @change="onchangeLocale"></el-switch>

实现某文字可中英文转换,则该文字将会变成一个变量,例如导航栏的“菜单1”与“menu1”的转换,找到zh.ts/zh.ts中的配置,一级一级对应,template下写法为{{ t('commonLayout.menu1') }}进行显现。

script

  1. import { useRouter } from 'vue-router';
  2. import { ref } from 'vue';
  3. import Cookies from "js-cookie";
  4. import { useI18n } from "vue-i18n"

变量申明

  1. const locale=Cookies.get("locale")||"zh";
  2. const isEn=ref("en"===locale);
  3. const { t } =useI18n();

点击事件

点击开关,window重新加载刷新,整个项目的语言都得以切换。

  1. const onchangeLocale=(en:boolean)=>{
  2. const newLocale=en?"en":"zh";
  3. Cookies.set("locale",newLocale,{expires:30});
  4. window.location.reload();
  5. }

源码

  1. <template>
  2. <el-container class="container">
  3. <el-header style="background-color: cadetblue;">
  4. <div style="display: flex;align-items: center;;margin-left: 20px;">
  5. <el-menu :default-active="$route.path" mode="horizontal" router text-color="gray" :ellipsis="false">
  6. <el-menu-item index="/menu1" title="菜单1" @click="change1">{{ t('commonLayout.menu1') }}</el-menu-item>
  7. <el-menu-item index="/menu2" title="菜单2" @click="change2">{{ t('commonLayout.menu2') }}</el-menu-item>
  8. <el-menu-item>
  9. <el-switch v-model="isEn" active-text="English" inactive-text="中文" @change="onchangeLocale"></el-switch>
  10. </el-menu-item>
  11. </el-menu>
  12. </div>
  13. </el-header>
  14. <el-main style="display: flex;padding: 0;">
  15. <router-view/>
  16. </el-main>
  17. </el-container>
  18. </template>
  19. <script setup lang="ts">
  20. import { useRouter } from 'vue-router';
  21. import { ref } from 'vue';
  22. import Cookies from "js-cookie";
  23. import { useI18n } from "vue-i18n"
  24. const locale=Cookies.get("locale")||"zh";
  25. const isEn=ref("en"===locale);
  26. const { t } =useI18n();
  27. const router=useRouter();
  28. const change1=()=>{
  29. router.push("/menu1")
  30. }
  31. const change2=()=>{
  32. router.push("/menu2")
  33. }
  34. const onchangeLocale=(en:boolean)=>{
  35. const newLocale=en?"en":"zh";
  36. Cookies.set("locale",newLocale,{expires:30});
  37. window.location.reload();
  38. }
  39. </script>
  40. <style>
  41. .layout-container{
  42. height: 100%;
  43. }
  44. </style>

例子:menu1.vue被语言切换开关所影响

在这个页面里,需要“用户名”与“密码”的中英文切换,也已经在locale文件夹下的两个ts文件中进行了配置(前文有zh.ts/en.ts源码)。

menu1.vue:

  1. <template>
  2. <div>
  3. <span>{{ t("menu1.username") }}:</span><el-input></el-input>
  4. <span>{{ t("menu1.password") }}:</span><el-input></el-input>
  5. </div>
  6. </template>
  7. <script setup lang="ts">
  8. import { useI18n } from "vue-i18n"
  9. const { t } =useI18n();
  10. </script>
  11. <style>
  12. </style>

三、页面效果

点击切换按钮:

keep coding


本文转载自: https://blog.csdn.net/m0_74355933/article/details/141019757
版权归原作者 不看月亮2.0 所有, 如有侵权,请联系我们删除。

“web全局实现文字的中英文的切换”的评论:

还没有评论