vue3 使用vue-i18n实现国际化


请添加图片描述

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"),
    },
  ];
});

相关推荐

  1. uniapp 使用vue-i18n实现传入变量国际化

    2024-04-02 12:08:03       21 阅读
  2. VUE3i18n国际化组件动态获取字符串

    2024-04-02 12:08:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 12:08:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 12:08:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 12:08:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 12:08:03       18 阅读

热门阅读

  1. 音视频技术应用方向概述

    2024-04-02 12:08:03       10 阅读
  2. 4.1作业

    4.1作业

    2024-04-02 12:08:03      10 阅读
  3. ElasticSearch 实战:ElasticSearch文档多条件查询

    2024-04-02 12:08:03       11 阅读
  4. FIFO控制器设计——日常学习

    2024-04-02 12:08:03       10 阅读
  5. 关系型数据库与非关系型数据库、Redis数据库

    2024-04-02 12:08:03       17 阅读
  6. vue记事本渲染以及交互

    2024-04-02 12:08:03       15 阅读
  7. docker compose部署项目—踩坑记录

    2024-04-02 12:08:03       14 阅读
  8. Linux中的用户和组管理

    2024-04-02 12:08:03       12 阅读
  9. Go-Gin全局错误处理中间件

    2024-04-02 12:08:03       11 阅读
  10. C++ TCP 服务端和客户端通信的例子

    2024-04-02 12:08:03       12 阅读