From 6ba10b1a2fe07b6f885ec751883ecb4bd8ca6216 Mon Sep 17 00:00:00 2001
From: wang_fan_w <2547096351@qq.com>
Date: Sat, 27 Apr 2024 19:18:49 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E5=8C=96i18n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 1 +
pnpm-lock.yaml | 44 +++++++++++++++++--
src/assets/icons/earth.svg | 1 +
src/components/lang-provider/index.vue | 10 +++--
src/lang/index.ts | 22 ++++++++++
src/lang/modules/enUS.ts | 33 ++++++++++++++
src/lang/modules/zhCN.ts | 33 ++++++++++++++
.../Header/components/Breadcrumb/index.vue | 4 +-
src/layout/components/Header/index.vue | 24 ++++++++--
src/layout/components/Main/index.vue | 4 +-
src/layout/components/Menu/menu-item.vue | 4 +-
src/layout/components/Tabs/index.vue | 19 +++++---
src/layout/index.vue | 4 +-
src/main.ts | 4 +-
src/router/route.ts | 25 ++++++++---
src/store/theme-config.ts | 10 ++++-
src/store/user-info.ts | 3 +-
src/utils/index.ts | 12 +++++
.../form-component/form-component.vue | 2 +-
.../internationalization.vue | 10 +++++
.../second-menu/second-menu-1.vue | 2 +-
.../third-menu/third-menu-1.vue | 2 +-
.../third-menu/third-menu-2.vue | 2 +-
23 files changed, 235 insertions(+), 40 deletions(-)
create mode 100644 src/assets/icons/earth.svg
create mode 100644 src/lang/index.ts
create mode 100644 src/lang/modules/enUS.ts
create mode 100644 src/lang/modules/zhCN.ts
create mode 100644 src/views/internationalization/internationalization.vue
diff --git a/package.json b/package.json
index 4c09caa..525ff8f 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,7 @@
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
"vue": "^3.4.21",
+ "vue-i18n": "10.0.0-alpha.2",
"vue-router": "^4.3.0"
},
"devDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b894fe5..d6cbe80 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,5 +1,9 @@
lockfileVersion: '6.0'
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
dependencies:
dc-admin:
specifier: 'link:'
@@ -16,6 +20,9 @@ dependencies:
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.3)
+ vue-i18n:
+ specifier: 10.0.0-alpha.2
+ version: 10.0.0-alpha.2(vue@3.4.21)
vue-router:
specifier: ^4.3.0
version: 4.3.0(vue@3.4.21)
@@ -1119,6 +1126,27 @@ packages:
resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
dev: true
+ /@intlify/core-base@10.0.0-alpha.2:
+ resolution: {integrity: sha512-bT+RwQtJ2BOwpt/lLlDtJM8+lfNG9TdWWGRYphDsV8123SiGb4Qm6iEjBN3/RKC/9hX+EHl2ENslURfioov3dQ==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/message-compiler': 10.0.0-alpha.2
+ '@intlify/shared': 10.0.0-alpha.2
+ dev: false
+
+ /@intlify/message-compiler@10.0.0-alpha.2:
+ resolution: {integrity: sha512-OGwttsMwB2BUzhZLraoAfAqcza5UyLMEU013ort3LbmdE6ke/pFONFyxjNQdmFWzW2K868AIVgwx4zo8lbmhjg==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/shared': 10.0.0-alpha.2
+ source-map-js: 1.2.0
+ dev: false
+
+ /@intlify/shared@10.0.0-alpha.2:
+ resolution: {integrity: sha512-pWlpsC3IqkDuIH/5bNlyyiUbAXYymeNXkznORzPWT3qpAe8MazPOm14wMHGn/wESCdB5b9txQson4+CH0ym1hQ==}
+ engines: {node: '>= 16'}
+ dev: false
+
/@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -5161,6 +5189,18 @@ packages:
- supports-color
dev: true
+ /vue-i18n@10.0.0-alpha.2(vue@3.4.21):
+ resolution: {integrity: sha512-wP3+3k0TbdqvYDUn5lS5v7dtAsX0lP9J+CRcoP7mTQXsmkGurfruyd0rvw+DBnW+mULsoP/oygtj75HZFPp6YQ==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@intlify/core-base': 10.0.0-alpha.2
+ '@intlify/shared': 10.0.0-alpha.2
+ '@vue/devtools-api': 6.6.1
+ vue: 3.4.21(typescript@5.4.3)
+ dev: false
+
/vue-router@4.3.0(vue@3.4.21):
resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==}
peerDependencies:
@@ -5289,7 +5329,3 @@ packages:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
dev: true
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
diff --git a/src/assets/icons/earth.svg b/src/assets/icons/earth.svg
new file mode 100644
index 0000000..b3de0e2
--- /dev/null
+++ b/src/assets/icons/earth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/lang-provider/index.vue b/src/components/lang-provider/index.vue
index d62ac81..6fca0fc 100644
--- a/src/components/lang-provider/index.vue
+++ b/src/components/lang-provider/index.vue
@@ -1,6 +1,6 @@
@@ -9,6 +9,10 @@
diff --git a/src/lang/index.ts b/src/lang/index.ts
new file mode 100644
index 0000000..e031316
--- /dev/null
+++ b/src/lang/index.ts
@@ -0,0 +1,22 @@
+import { createI18n } from "vue-i18n";
+import zhCN from "@/lang/modules/zhCN";
+import enUS from "@/lang/modules/enUS";
+import pinia from "@/store/index";
+import { storeToRefs } from "pinia";
+import { useThemeConfig } from "@/store/theme-config";
+const themeStore = useThemeConfig(pinia);
+const { language } = storeToRefs(themeStore);
+/* 这里必须是messages名称 */
+const messages = {
+ "zh-CN": zhCN,
+ "en-US": enUS
+};
+
+const i18n = createI18n({
+ legacy: false, // Composition API模式需要设为false
+ globalInjection: true, // 全局生效: $
+ locale: language.value, // 默认语言
+ messages // 数据源
+});
+
+export default i18n;
diff --git a/src/lang/modules/enUS.ts b/src/lang/modules/enUS.ts
new file mode 100644
index 0000000..2a13749
--- /dev/null
+++ b/src/lang/modules/enUS.ts
@@ -0,0 +1,33 @@
+export default {
+ language: {
+ ["login"]: "login",
+ ["home"]: "home",
+ ["common-components"]: "common components",
+ ["form-component"]: "form components",
+ ["dynamic-form"]: "dynamic form",
+ ["multilevel-menu"]: "multilevel menu",
+ ["second-menu-1"]: "second-menu-1",
+ ["second-menu-2"]: "second-menu-2",
+ ["third-menu-1"]: "third-menu-1",
+ ["third-menu-2"]: "third-menu-2",
+ ["third-menu-3"]: "third-menu-3",
+ ["third-menu-4"]: "third-menu-4",
+ ["third-menu-5"]: "third-menu-5",
+ ["third-menu-6"]: "third-menu-6",
+ ["third-menu-7"]: "third-menu-7",
+ ["third-menu-8"]: "third-menu-8",
+ ["third-menu-9"]: "third-menu-9",
+ ["about-project"]: "about project",
+ ["not-power"]: "No permission",
+ ["not-found"]: "Page not found",
+ ["zh-CN"]: "Chinese",
+ ["en-US"]: "English",
+ ["refresh"]: "refresh",
+ ["close-current"]: "close current",
+ ["close-left-side"]: "close left side",
+ ["close-right-side"]: "close right side",
+ ["close-other"]: "close other",
+ ["close-all"]: "close all",
+ ["internationalization"]: "internationalization"
+ }
+};
diff --git a/src/lang/modules/zhCN.ts b/src/lang/modules/zhCN.ts
new file mode 100644
index 0000000..7d0577e
--- /dev/null
+++ b/src/lang/modules/zhCN.ts
@@ -0,0 +1,33 @@
+export default {
+ language: {
+ ["login"]: "登录",
+ ["home"]: "首页",
+ ["common-components"]: "常用组件",
+ ["form-component"]: "表单组件",
+ ["dynamic-form"]: "动态表单",
+ ["multilevel-menu"]: "多级菜单",
+ ["second-menu-1"]: "二级菜单-1",
+ ["second-menu-2"]: "二级菜单-2",
+ ["third-menu-1"]: "三级菜单-1",
+ ["third-menu-2"]: "三级菜单-2",
+ ["third-menu-3"]: "三级菜单-3",
+ ["third-menu-4"]: "三级菜单-4",
+ ["third-menu-5"]: "三级菜单-5",
+ ["third-menu-6"]: "三级菜单-6",
+ ["third-menu-7"]: "三级菜单-7",
+ ["third-menu-8"]: "三级菜单-8",
+ ["third-menu-9"]: "三级菜单-9",
+ ["about-project"]: "关于项目",
+ ["not-power"]: "没有权限",
+ ["not-found"]: "未找到页面",
+ ["zh-CN"]: "中文",
+ ["en-US"]: "English",
+ ["refresh"]: "刷新",
+ ["close-current"]: "关闭当前",
+ ["close-left-side"]: "关闭左侧",
+ ["close-right-side"]: "关闭右侧",
+ ["close-other"]: "关闭其它",
+ ["close-all"]: "关闭全部",
+ ["internationalization"]: "国际化"
+ }
+};
diff --git a/src/layout/components/Header/components/Breadcrumb/index.vue b/src/layout/components/Header/components/Breadcrumb/index.vue
index 040d7cf..0ca3ade 100644
--- a/src/layout/components/Header/components/Breadcrumb/index.vue
+++ b/src/layout/components/Header/components/Breadcrumb/index.vue
@@ -3,9 +3,9 @@
- {{ item?.meta?.title || "" }}
+ {{ $t(`language.${item?.meta?.title || ""}`) }}
{{
- item?.meta?.title || ""
+ $t(`language.${item?.meta?.title || ""}`)
}}
diff --git a/src/layout/components/Header/index.vue b/src/layout/components/Header/index.vue
index 06dd8b6..029aa08 100644
--- a/src/layout/components/Header/index.vue
+++ b/src/layout/components/Header/index.vue
@@ -14,13 +14,17 @@