当前位置:   article > 正文

Vue3 + ts + element-plus + i18n 国际化配置_i18n ally 配置 ts 后缀

i18n ally 配置 ts 后缀

前言

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

一、安装 vue-i18n 依赖

npm install vue-i18n@next

 

二、准备语言包

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

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

三、创建 i18n 实例

  1. // \src\i18n\index.ts
  2. import { createI18n } from "vue-i18n";
  3. // 语言包
  4. import zhCn from "./lang/zh-cn";
  5. import en from "./lang/en";
  6. const i18n = createI18n({
  7. locale: sessionStorage.getItem("localeLang") || "zhCn",
  8. messages: {
  9. zhCn,
  10. en,
  11. },
  12. });
  13. export default i18n;

四、i18n 全局注册

  1. // \src\main.ts
  2. import { createApp } from "vue";
  3. import App from "./App.vue";
  4. import router from "./router";
  5. import store from "./store";
  6. // i18n
  7. import i18n from "@/i18n/index";
  8. const app = createApp(App);
  9. app.use(i18n);
  10. app.use(store).use(router).mount("#app");

五、页面使用

  1. <template>
  2. <div class="home">vue3-app {{ $t("home.name") }}</div>
  3. </template>
  4. <script lang="ts" setup name="HomeView"></script>

六、切换语言

  1. // \src\store\state.ts
  2. export type State = {
  3. language: string;
  4. };
  5. export const state: State = {
  6. language: sessionStorage.getItem("localeLang") || "zhCn",
  7. };
  1. // \src\store\mutations.ts
  2. import { MutationTree } from "vuex";
  3. import { State } from "./state";
  4. export const mutations: MutationTree<State> = {
  5. // 修改语言
  6. CHANGE_LANGUAGE(state, value: string) {
  7. state.language = value;
  8. sessionStorage.setItem("localeLang", value);
  9. },
  10. };

 页面头部切换语言按钮。

  1. <!-- \src\components\MyHeader.vue -->
  2. <template>
  3. <div class="header">
  4. <el-dropdown @command="handleCommand">
  5. <span class="el-dropdown-link">
  6. {{ langType[language] }}
  7. <el-icon class="el-icon--right">
  8. <arrow-down />
  9. </el-icon>
  10. </span>
  11. <template #dropdown>
  12. <el-dropdown-menu>
  13. <el-dropdown-item command="zhCn">中文</el-dropdown-item>
  14. <el-dropdown-item command="en">English</el-dropdown-item>
  15. </el-dropdown-menu>
  16. </template>
  17. </el-dropdown>
  18. </div>
  19. </template>
  20. <script lang="ts" setup name="MyHeader">
  21. import { computed } from "@vue/runtime-core";
  22. import { useStore } from "vuex";
  23. import { langType } from "@/enum/options";
  24. import { useI18n } from "vue-i18n";
  25. const store = useStore();
  26. // 改变语言
  27. const language = computed(() => store.state.language);
  28. const { locale } = useI18n();
  29. const handleCommand = (value: string) => {
  30. locale.value = value;
  31. store.commit("CHANGE_LANGUAGE", value);
  32. };
  33. </script>
  34. <style lang="less">
  35. .header {
  36. display: flex;
  37. align-items: center;
  38. justify-content: space-between;
  39. width: 100%;
  40. }
  41. </style>

七、Element-Plus 国际化配置

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

  1. <!-- \src\App.vue -->
  2. <template>
  3. <el-config-provider :locale="locale">
  4. <router-view />
  5. </el-config-provider>
  6. </template>
  7. <script lang="ts" setup name="App">
  8. import { computed } from "vue";
  9. import { useStore } from "vuex";
  10. // 导入 Element Plus 语言包
  11. import zhCn from "element-plus/lib/locale/lang/zh-cn";
  12. import en from "element-plus/lib/locale/lang/en";
  13. const store = useStore();
  14. const language = computed(() => store.state.language);
  15. const lang = {
  16. zhCn,
  17. en,
  18. };
  19. const locale = computed(() => lang[language.value]);
  20. </script>
  21. <style lang="less"></style>

 效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/392366
推荐阅读
相关标签
  

闽ICP备14008679号