vue3使用vue-i18n实现国际化

本文详细介绍了如何在Vue3项目中安装并配置vue-i18n,创建多语言文件,注册i18n实例,以及在组件和JavaScript中使用国际化。同时涵盖了如何通过改变locale.value实现语言切换,以及处理ref中国际化值未生效的问题。
摘要由CSDN通过智能技术生成


请添加图片描述

1. 安装 vue-i18n

cnpm i --save vue-i18n

2. 创建文件存储翻译的语言

src/lang/en.json

export default {
  login: 'login'
};

src/lang/zh.json

export default {
  login: '登录'
};

3. 注册i18n实例

src/lang/index.ts

import { createI18n } from "vue-i18n";
import zh from "./zh.json";
import en from "./en.json";
import vantZhCN from 'vant/lib/locale/lang/zh-CN';//vant组件库的国际化中文
import vantEnUS from 'vant/lib/locale/lang/en-US';//vant组件库的国际化英文
import { localStorage } from "@/utils/local-storage";

const i18n: any = createI18n({
  locale: localStorage.get("lang") || "zh",
  legacy: false,
  globalInjection: true,
  messages: {
    zh: {
      ...zh,
      ...vantZhCN
    },
    en: {
      ...en,
      ...vantEnUS
    },
  }
});
export { i18n };

4. 在main.ts中引入vue-i18n实例

src/main.ts

import { i18n } from '@/lang/index';
app.use(i18n).mount("#app");

5. 在组件模板中使用

直接使用 $t('login')

<div class="title">
  {{ $t('login') }}
</div>

6. 在js中使用

需要导入 i18n 在使用 i18n.global.t('login')

import { i18n } from '@/lang/index';
showDialog({
     confirmButtonText: i18n.global.t('confirm'),
     message: i18n.global.t('pleaseWalletBrowser'),
 }).then(() => {
 });

7. locale.value 实现国际化语言切换

核心代码:
import { useI18n } from “vue-i18n”;
const { locale } = useI18n();
locale.value = lang;

<template>
  <view class="tab">
    <view
      class="item"
      :class="{ active: active == 'zh' }"
      @click="changeActive('zh')"
      ></view
    >
    <view
      class="item"
      :class="{ active: active == 'en' }"
      @click="changeActive('en')"
      >EN</view
    >
  </view>
</template>
<script setup lang="ts">
import { localStorage } from "@/utils/local-storage";
import { useI18n } from "vue-i18n";
const { locale } = useI18n();
const active = ref(locale.value || localStorage.get("lang"));
const changeActive = lang => {
  locale.value = lang;
  active.value = lang;
  localStorage.set("lang", lang);
};
</script>
<style scoped lang="scss">
.tab {
  height: 100%;
  margin: auto;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
  border-radius: 4px;
  background: rgba(37, 44, 66);
  padding: 3px;
  .item {
    text-align: center;
    padding: 0px 15px;
    height: 100%;
    position: relative;
    border-radius: 4px;
    color: #fff;
    font-size: 14px;
  }
  .active {
    background: #f0b90b;
    color: #fff;
  }
}
</style>

8. vue3 中ref里面的国际化值没生效问题

如在ts中使用 ref声明 的默认文字国际化,当我们切换国际化的时候发现并不能生效

const menuList = ref([
  {
    key: 1,
    menuName: t("menu1"),
  }
]);

需要使用 computed 处理即可

const menuList = computed(() => {
  return [
    {
      key: 1,
      menuName: t("menu1"),
    },
  ];
});
Vue3 Element Plus 是一个基于 Vue3 的 UI 组件库,提供了丰富的组件和功能,用于开发 Web 应用程序。国际化是一个重要的功能,它允许用户在不同的语言环境下使用应用程序。 Vue3 Element Plus 提供了国际化的支持,使开发者能够轻松地将应用程序本地化为不同的语言。具体使用步骤如下: 首先,需要安装 Element Plus 和其相关的国际化依赖。 然后,在 Vue3 的入口文件中,使用 `createApp` 函数创建 Vue3 实例,并将国际化插件引入。例如,可以使用 `createI18n` 函数创建一个国际化实例: ``` import { createApp } from 'vue' import { createI18n } from 'vue-i18n' import ElementPlus from 'element-plus' const app = createApp(App) const i18n = createI18n({ locale: 'zh', messages: { // 导入各种语言的翻译文件 zh: require('./locales/zh.json'), en: require('./locales/en.json') } }) app.use(ElementPlus) app.use(i18n) app.mount('#app') ``` 在上面的代码中,`locale` 属性指定了默认的语言环境,`messages` 属性指定了各种语言对应的翻译文件。 接下来,在组件中使用 Element Plus 的国际化功能。例如,可以使用 `el-button` 组件的 `i18n` 属性来实现按钮的国际化: ``` <template> <el-button :i18n="t('button.text')"></el-button> </template> <script> import { useI18n } from 'vue-i18n' export default { setup() { const { t } = useI18n() return { t } } } </script> ``` 在上面的代码中,`t` 函数用于获取翻译后的文本内容,并将其赋值给按钮的 `i18n` 属性。 总而言之,Vue3 Element Plus 的国际化使用起来非常简便,只需要配置好相应的翻译文件,并在组件中使用相应的国际化函数即可实现界面的国际化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Q_Q 忙里偷闲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值