vue3项目中使用i18n

一、elementplus国际化

创建仓库用来管理语言包

src/stort/lang.js

import { defineStore } from "pinia"; //引入pinia
// 导入 Element Plus 中英文语言包
import zhCn from "element-plus/es/locale/lang/zh-cn";
import en from "element-plus/es/locale/lang/en";

export const useAppStore = defineStore({
  id: "",
  state: () => {
    return { language: "zhCn" };
  },
  // 计算属性
  getters: {
    locale(state) {
      return state.language == "en" ? en : zhCn;
    },
  },
  // 更改函数
  actions: {
    changeLanguage(val) {
      this.language = val;
    },
  },
});

在app.vue中使用elementplus的ElConfigProvider组件实现elementplus国际化

app.vue

<script setup>
import { ElConfigProvider } from "element-plus";
// 自定义国际化
import { useI18n } from "vue-i18n";

const { locale } = useI18n();
const changeLanguage = (val) => {
  locale.value = val;
};
</script>

<template>
  <!--设置默认语言和大小-->
  <el-config-provider :locale="appStore.locale" :size="appStore.size">
    <el-pagination layout="total, sizes, jumper" :total="40" />
    <el-button @click="changeLanguage('en')">切换英文</el-button>
    <el-button @click="changeLanguage('zhCn')">切换中文</el-button>
  </el-config-provider>
</template>

二、vue-i18n国际化

1.下载vue-i18n依赖

npm i vue-i18n

2.创建语言包

src/store/package/en.js

export default {
  // 登录页面
    title: "vue3-element-admin",
    username: "Username",
    password: "Password",
    login: "Login",
    verifyCode: "Verify Code",
  },
  // 导航栏
  navbar: {
    dashboard: "Dashboard",
    logout: "Logout",
    document: "Document",
    gitee: "Gitee",
  },
};

src/store/package/zhCn.js

export default {
  // 登录页面
  login: {
    title: "vue3-element-admin",
    username: "用户名",
    password: "密码",
    login: "登 录",
    verifyCode: "验证码",
  },
  // 导航栏
  navbar: {
    dashboard: "首页",
    logout: "注销",
    document: "项目文档",
    gitee: "码云",
  },
};

 3.在项目中创建实例

src/lang/index.js

import { createI18n } from "vue-i18n";
import { useAppStore } from "@/store/app";
import { store } from "@/store/index";
// 本地语言包
import enLocale from "./package/en";
import zhCnLocale from "./package/zhCn";

const appStore = useAppStore(store);
const messages = {
  zhCn: {
    ...zhCnLocale,
  },
  en: {
    ...enLocale,
  },
};
// 创建 i18n 实例
const i18n = createI18n({
  legacy: false,
  locale: appStore.language,
  messages: messages,
  globalInjection: true,
});
// 导出 i18n 实例
export default i18n;

4.在main.js引入实例

main.js

import { createApp } from "vue";
import App from "./App.vue";
import router from "@/router";

// 国际化
import i18n from "@/lang/index";

const app = createApp(App);
app.use(router).use(i18n).mount("#app");

5.在页面中使用i18n

app.vue

<script setup>
import { ElConfigProvider } from "element-plus";
import { useAppStore } from "@/store/app.js";
// 自定义国际化
import { useI18n } from "vue-i18n";

const appStore = useAppStore();

const { locale } = useI18n();
const changeLanguage = (val) => {
  locale.value = val;
  appStore.changeLanguage(val);
};
</script>

<template>
  <el-config-provider :locale="appStore.locale" :size="appStore.size">
    {{ appStore.language }}
    <el-pagination layout="total, sizes, jumper" :total="40" />
    <el-button @click="changeLanguage('en')">切换英文</el-button>
    <el-button @click="changeLanguage('zhCn')">切换中文</el-button>
  </el-config-provider>
</template>

最终效果

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值