ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

vue3.0 + ts + element-plus + i18n 中英文切换

2021-05-31 12:32:40  阅读:1135  来源: 互联网

标签:lang zh locale ts value element vue3.0 i18n import


1、安装i18n:

npm install vue-i18n@next 

 

 

 

2、main.ts 引入:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import ElementPlus from 'element-plus';
import 'element-plus/lib/theme-chalk/index.css';
import ZhLocale from 'element-plus/lib/locale/lang/zh-cn'; // 中文
import EhLocale from 'element-plus/lib/locale/lang/en'; // 英文
import I18n from "@/lang/index"; //引入i18n组件

let locale = '';
//控制 element-plus 组件语言 if(I18n.global.fallbackLocale == 'zh') { locale = ZhLocale as unknown as string; } else { locale = EhLocale as unknown as string; } createApp(App).use(store).use(router).use(ElementPlus, { locale }).use(I18n).mount('#app');

3、src 新建 lang 文件:

 

 

index.js:

import { createI18n } from 'vue-i18n'
const i18n = createI18n({
    locale: localStorage.getItem('lang') || 'zh',        //默认显示的语言 
    messages: {
        zh: require('./zh.js'),    //引入语言文件
        en: require('./en.js')
    }
})
export default i18n;

zh.js:

module.exports = {
    header_menu: {
        login:'登录',
        register:'注册',
        logout:'退出登录',
    }
}

en.js:

module.exports = {
    header_menu: {
        login: 'Login',
        register: 'Register',
        logout: 'Log out',
    }
}

4、中英文切换组件:

<el-dropdown trigger="click" @command="handleSetLanguage" class="languages">
  <div style="font-size: 15px;">
    <span>{{langName}}</span>
    <i class="el-icon-arrow-down el-icon--right"/>
  </div>
  <template #dropdown>
    <el-dropdown-menu>
      <el-dropdown-item :disabled="language==='zh'" command="zh">中文</el-dropdown-item>
      <el-dropdown-item :disabled="language==='en'" command="en">English</el-dropdown-item>
    </el-dropdown-menu>
  </template>
</el-dropdown>

//  setup:
const langName = ref('');
const language = ref('');

// 切换事件:
const handleSetLanguage = (lang: string) => {
  if(lang === 'zh') {
    langName.value = '中文';
  } else {
    langName.value = 'English';
  }
  language.value = lang;
  localStorage.setItem('lang', lang);
  ElMessage.success('语言切换成功');
  location.reload();
};

//页面加载判断语言
onMounted(()=>{
  if(localStorage.getItem('lang') == undefined) {      langName.value = '中文';      language.value = 'zh';   }   if(localStorage.getItem('lang') == 'zh') {     langName.value = '中文';     language.value = 'zh';   } else {     langName.value = 'English';      language.value = 'en';   } })

 

 

 

 

标签:lang,zh,locale,ts,value,element,vue3.0,i18n,import
来源: https://www.cnblogs.com/moguzi12345/p/14830877.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有