Vue3 + ts + element-plus + i18n 国际化配置

前言

本文主要记录下在 Vue3 + ts + element-plus + i18n 项目中的国际化配置以及动态语言切换。

一、安装 vue-i18n 依赖

npm install vue-i18n@next

 

二、准备语言包

创建 src/i18n/lang 语言包目录,中文语言包为 zh-cn.ts,英文语言包为 en.ts。

// 中文语言包:\src\i18n\lang\zh-cn.ts
export default {
  home: {
    name: "首页",
  },
};
// 英文语言包:\src\i18n\lang\en.ts
export default {
  home: {
    name: "home",
  },
};

三、创建 i18n 实例

// \src\i18n\index.ts
import { createI18n } from "vue-i18n";
// 语言包
import zhCn from "./lang/zh-cn";
import en from "./lang/en";

const i18n = createI18n({
  locale: sessionStorage.getItem("localeLang") || "zhCn",
  messages: {
    zhCn,
    en,
  },
});

export default i18n;

四、i18n 全局注册

// \src\main.ts
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
// i18n
import i18n from "@/i18n/index";

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

五、页面使用

<template>
  <div class="home">vue3-app {{ $t("home.name") }}</div>
</template>

<script lang="ts" setup name="HomeView"></script>

六、切换语言

// \src\store\state.ts
export type State = {
  language: string;
};

export const state: State = {
  language: sessionStorage.getItem("localeLang") || "zhCn",
};
// \src\store\mutations.ts
import { MutationTree } from "vuex";
import { State } from "./state";

export const mutations: MutationTree<State> = {
  // 修改语言
  CHANGE_LANGUAGE(state, value: string) {
    state.language = value;
    sessionStorage.setItem("localeLang", value);
  },
};

 页面头部切换语言按钮。

<!-- \src\components\MyHeader.vue -->
<template>
  <div class="header">
    <el-dropdown @command="handleCommand">
      <span class="el-dropdown-link">
        {{ langType[language] }}
        <el-icon class="el-icon--right">
          <arrow-down />
        </el-icon>
      </span>
      <template #dropdown>
        <el-dropdown-menu>
          <el-dropdown-item command="zhCn">中文</el-dropdown-item>
          <el-dropdown-item command="en">English</el-dropdown-item>
        </el-dropdown-menu>
      </template>
    </el-dropdown>
  </div>
</template>

<script lang="ts" setup name="MyHeader">
import { computed } from "@vue/runtime-core";
import { useStore } from "vuex";
import { langType } from "@/enum/options";
import { useI18n } from "vue-i18n";

const store = useStore();
// 改变语言
const language = computed(() => store.state.language);
const { locale } = useI18n();
const handleCommand = (value: string) => {
  locale.value = value;
  store.commit("CHANGE_LANGUAGE", value);
};
</script>

<style lang="less">
.header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}
</style>

七、Element-Plus 国际化配置

Element-Plus 官方提供全局配置 Config Provider 实现国际化。

<!-- \src\App.vue -->
<template>
  <el-config-provider :locale="locale">
    <router-view />
  </el-config-provider>
</template>

<script lang="ts" setup name="App">
import { computed } from "vue";
import { useStore } from "vuex";
// 导入 Element Plus 语言包
import zhCn from "element-plus/lib/locale/lang/zh-cn";
import en from "element-plus/lib/locale/lang/en";

const store = useStore();
const language = computed(() => store.state.language);
const lang = {
  zhCn,
  en,
};
const locale = computed(() => lang[language.value]);
</script>

<style lang="less"></style>

 效果如下:

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先你需要在项目中安装 `element-plus`,可以通过以下命令进行安装: ``` npm install element-plus --save ``` 然后在你的 Vue 项目中引入 `element-plus` 的 `Table` 组件,以及需要使用的相关样式: ```js import { defineComponent } from 'vue'; import { ElTable, ElTableColumn } from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; export default defineComponent({ components: { ElTable, ElTableColumn }, data() { return { tableData: [], // 后台获取的数据 }; }, mounted() { // 在这里调用后台接口获取数据,并将返回的数据赋值给 tableData }, render() { return ( <div> <el-table data={this.tableData}> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> ); }, }); ``` 在上面的代码中,我们使用了 `ElTable` 和 `ElTableColumn` 组件来渲染表格,其中 `data` 属性绑定了从后台获取的数据 `tableData`,每个 `el-table-column` 标签的 `prop` 属性绑定了对应数据对象的属性名,`label` 属性则是表格列的标题。 当然,你还需要在项目中引入 `element-plus` 的样式,这里我们直接引入了整个 `index.css` 文件来覆盖默认样式。如果你只需要使用部分组件,可以按需引入对应的样式文件。 以上就是使用 `element-plus` 的 `Table` 组件渲染后台数据的基本方法,你可以根据具体需求进行进一步的定制和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值