vue3_ts_el-plus配置i18n完成语言切换国际化

1. 安装依赖

npm install vue-i18n

2. 新建i18n文件夹 

创建i18n的配置文件index.ts

3. 配置文件

// 创建语言列表,不同语言的内容
const messages = {
  en: {
    msg: {
      // showeara
      showtext: 'hello world',
      // menu
      menu_userinfo: 'user infomation',
    },
  },
  zh: {
    msg: {
      // 显示区域
      showtext: '你好世界',
      // 菜单
      menu_userinfo: '用户信息',
    },
  },
};

const locale = 'zh'; // 创建本地标识,通过修改它来控制全文的语言环境

import { createI18n } from 'vue-i18n'; // 导入createI18n方法

const i18n = createI18n({
  // 使用 Composition API 模式,则需要将其设置为false
  legacy: false,
  // 全局注入 $t 函数
  globalInjection: true,
  locale,
  messages, // 这是定义好的语言表
});

export default i18n; // 导出 i18n

4. 在main.ts导入并挂载

// i18n
import i18n from '@/i18n';

app.use(i18n).mount('#app');

 5. Vue组件实现

1. 在 html 中使用比较简单使用 $t() 的全局方法就行

2. 在 script 中使用需要导入

// script 中
const { t } = i18n.global;
const active_text = computed(() => {
  return t('msg.nav_light_color');
});

语言切换vue组件: 

代码如下: 

<template>
  <el-dropdown class="langselect" triggle="click" @command="handleSelect">
    <div class="langbox">
      <span :style="{ color: textcolor }">{{ $t('msg.nav_langselect') }} </span>
      <img class="langicon" src="../../public/lang.png" alt="" />
    </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>
</template>

<script setup lang="ts">
import store from '@/store/index';
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { ElMessage } from 'element-plus';
import vars from '@/scss/vars/index.module.scss';

const language = computed(() => {
  return store.state.language;
});

// 文字样式
// const textbg: any = computed(() => {
//   store.state.textbg;
// });
const textcolor = vars.elpricol;

// 切换语言的方法
const i18n = useI18n();
const handleSelect = function (lang: string) {
  // 切换local
  i18n.locale.value = lang;
  // vuex
  store.commit('setLanguage', lang);
  // 提示
  ElMessage.success('切换成功!');
};
</script>

<style lang="scss" scoped>
.langselect {
  .langbox {
    display: flex;
    align-items: center;
    .langicon {
      width: 26px;
      margin-left: 5px;
    }
  }
}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

John Rivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值