vue3中通过vue-i18n实现国际化

效果图

请添加图片描述

前言

突然想在vue3项目中使用国际化功能,查阅相关资料后发现和vue2的用法有些出入,记录一下

使用

  1. 下载vue-i18n
npm i vue-i18n

2、准备语言文件
目前我的项目只支持中英文切换,故准备一份中文文件和一份对应的英译文件
创建langurage文件夹,里面存放zh.ts和en.ts文件
在这里插入图片描述
zh.ts文件

export default {
  home: {
    title: "本地抠图工具",
    operateMethod: "选择图片",
    orginImg: "原图",
    result: "抠图结果",
    export: "导出",
  },
};

en.ts文件

export default {
  home: {
    title: "Local image editing tool",
    operateMethod: "choose img",
    orginImg: "original image",
    result: "result image",
    export: "export",
  },
};

3、统一暴露。
创建index.ts文件,将实例绑定语言包后暴露出去,方便后续挂载

import { createI18n } from "vue-i18n";
// 从语言包文件中导入语言包对象
import cn from "./zh";
import en from "./en";
const messages = {
  中文: cn,
  English: en,
};
const i18n = createI18n({
  messages,
  legacy: false,
  globalInjection: true,
  locale: "English",
});
export default i18n;

legacy: false,//在vue3中一定要置为false,不然无法运行
globalInjection: true,//是否全局注入,开启,方便后续使用

注意这俩配置,
4、挂载
在main.ts注入

import i18n from '@/assets/langurage/index';
createApp(App).use(i18n).mount('#app')

5、模板使用

<h1>{{ $t("home.title") }}</h1>
  <h2>{{ $t("home.operateMethod") }}</h2>
  <el-button @click="changeLanguage">{{ $i18n.locale }}</el-button>
  <el-upload
    action="#"
    :auto-upload="false"
    :on-change="uploadImg"
    list-type="picture-card"
    accept=".png,.jpg,.webp"
  >
    <el-icon><Plus /></el-icon>
  </el-upload>
  <el-row :gutter="20">
    <el-col :span="12" v-if="orginImg">
      <h2 ref="text">{{ $t("home.orginImg") }}</h2>
      <el-image :src="orginImg" fit="contain" />
    </el-col>
    <el-col :span="12" v-loading="loading">
      <h2>{{ $t("home.result") }}</h2>
      <el-image v-if="feedBackImg" :src="feedBackImg" fit="contain" />
    </el-col>
  </el-row>
  <el-button @click="getPdfLocal">{{ $t("home.export") }}</el-button>

直接通过***$t()***使用

通过**$i18n.locale**来在模板获取当前语言

切换语言

我将changeLanguage封装到ts文件,所以需要借用实例来获取

import { useI18n } from "vue-i18n";
export default function utils() {
  const { locale } = useI18n();
  const changeLanguage = () => {
    //先获取当前语言是什么
	if (locale.value === "English") {
	//取反
      locale.value = "中文";
    } else {
      locale.value = "English";
    }
  };
  return {
    changeLanguage,
  };
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue 3使用vue-i18n进行国际化配置的步骤如下: 1. 安装vue-i18n包: ```shell npm install vue-i18n ``` 2. 创建i18n实例: 在项目的根目录下创建一个`i18n.js`文件,并在其导入`vue-i18n`包,然后创建一个新的`VueI18n`实例并导出它。可以根据需要配置语言包和其他选项。 ```javascript // i18n.js import { createI18n } from 'vue-i18n' const i18n = createI18n({ locale: 'en', // 默认语言 messages: { en: { // 英文语言包 // ... }, zh: { // 文语言包 // ... } } }) export default i18n ``` 3. 在main.js配置i18n使用: 在`main.js`文件导入刚刚创建的`i18n`实例,并将其作为Vue应用的插件进行注册。 ```javascript // main.js import { createApp } from 'vue' import App from './App.vue' import i18n from './i18n' createApp(App).use(i18n).mount('#app') ``` 4. 在HTML使用国际化文本: 在Vue组件的模板,可以使用`$t`方法来获取国际化文本。例如: ```html <template> <div> <p>{{ $t('message') }}</p> </div> </template> ``` 5. 在JS使用国际化文本: 在Vue组件的JavaScript代码,可以使用`$t`方法来获取国际化文本。例如: ```javascript export default { methods: { showMessage() { console.log(this.$t('message')) } } } ``` 6. 修改语言(和获取当前语言): 可以使用`$i18n.locale`来获取或设置当前的语言。例如: ```javascript // 获取当前语言 console.log(this.$i18n.locale) // 修改语言为文 this.$i18n.locale = 'zh' ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值