diff --git a/package-lock.json b/package-lock.json index dbfe85c..b8dc2fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "pinia": "^3.0.3", "qwebchannel": "^6.2.0", "vue": "^3.2.13", + "vue-i18n": "^11.1.11", "vue-router": "^4.0.3", "vuex": "^4.0.0" }, @@ -2873,6 +2874,50 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@intlify/core-base": { + "version": "11.1.11", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.11.tgz", + "integrity": "sha512-1Z0N8jTfkcD2Luq9HNZt+GmjpFe4/4PpZF3AOzoO1u5PTtSuXZcfhwBatywbfE2ieB/B5QHIoOFmCXY2jqVKEQ==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.1.11", + "@intlify/shared": "11.1.11" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.11", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.11.tgz", + "integrity": "sha512-7PC6neomoc/z7a8JRjPBbu0T2TzR2MQuY5kn2e049MP7+o32Ve7O8husylkA7K9fQRe4iNXZWTPnDJ6vZdtS1Q==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.1.11", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.11", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.11.tgz", + "integrity": "sha512-RIBFTIqxZSsxUqlcyoR7iiC632bq7kkOwYvZlvcVObHfrF4NhuKc4FKvu8iPCrEO+e3XsY7/UVpfgzg+M7ETzA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", @@ -13299,6 +13344,26 @@ "dev": true, "license": "MIT" }, + "node_modules/vue-i18n": { + "version": "11.1.11", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.11.tgz", + "integrity": "sha512-LvyteQoXeQiuILbzqv13LbyBna/TEv2Ha+4ZWK2AwGHUzZ8+IBaZS0TJkCgn5izSPLcgZwXy9yyTrewCb2u/MA==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.1.11", + "@intlify/shared": "11.1.11", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/vue-loader": { "version": "17.4.2", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", diff --git a/package.json b/package.json index 58c1815..98ccfe9 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "pinia": "^3.0.3", "qwebchannel": "^6.2.0", "vue": "^3.2.13", + "vue-i18n": "^11.1.11", "vue-router": "^4.0.3", "vuex": "^4.0.0" }, diff --git a/src/components/LanguageSwitcher.vue b/src/components/LanguageSwitcher.vue new file mode 100644 index 0000000..7946f72 --- /dev/null +++ b/src/components/LanguageSwitcher.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/i18n/en/index.js b/src/i18n/en/index.js new file mode 100644 index 0000000..6612cfc --- /dev/null +++ b/src/i18n/en/index.js @@ -0,0 +1,9 @@ +import login from './login.json' +const global = { + logout: 'Logout', +} + +export default { + ...global, + ...login +} diff --git a/src/i18n/en/login.json b/src/i18n/en/login.json new file mode 100644 index 0000000..d709b0b --- /dev/null +++ b/src/i18n/en/login.json @@ -0,0 +1,6 @@ +{ + "login": "Login", + "Welcome_to_login": "Welcome to login", + "PleaseEnterEmailOrUsername": "Please enter email or username", + "PleaseEnterPassword": "Please enter password" + } \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js new file mode 100644 index 0000000..274dc97 --- /dev/null +++ b/src/i18n/index.js @@ -0,0 +1,25 @@ +//语言 +// import { lang } from '@/settings/designSetting' +import { createI18n } from 'vue-i18n' //引入vue-i18n组件 +import zh from './zh/index' +import en from './en/index' + +const i18n = createI18n({ + legacy: false, + globalInjection:true, + locale: "ZH", // Default language + fallbackLocale: "EN", // Fallback to English if translation missing + messages: { + ZH: zh, + EN: en + } +}) + +// Export function to change language +export function setLocale(lang) { + if (['ZH', 'EN'].includes(lang)) { + i18n.global.locale.value = lang + } +} + +export default i18n \ No newline at end of file diff --git a/src/i18n/zh/index.js b/src/i18n/zh/index.js new file mode 100644 index 0000000..9acc261 --- /dev/null +++ b/src/i18n/zh/index.js @@ -0,0 +1,9 @@ +import login from './login.json' +const global = { + logout: '退出登录', +} + +export default { + ...global, + ...login +} \ No newline at end of file diff --git a/src/i18n/zh/login.json b/src/i18n/zh/login.json new file mode 100644 index 0000000..7bfc3ae --- /dev/null +++ b/src/i18n/zh/login.json @@ -0,0 +1,6 @@ +{ + "login": "登录", + "Welcome_to_login": "欢迎登录", + "PleaseEnterEmailOrUsername": "请输入邮箱或用户名", + "PleaseEnterPassword": "请输入密码" +} \ No newline at end of file diff --git a/src/main.js b/src/main.js index 81608a0..cfa3272 100644 --- a/src/main.js +++ b/src/main.js @@ -8,6 +8,7 @@ import 'element-plus/dist/index.css' import zhCn from 'element-plus/dist/locale/zh-cn.mjs'; // 引入中文语言包 import * as ElementPlusIconsVue from '@element-plus/icons-vue' import GoEasy from 'goeasy' +import i18n from '../src/i18n/index' const goeasy = GoEasy.getInstance({ host:"hangzhou.goeasy.io", //若是新加坡区域:singapore.goeasy.io @@ -27,5 +28,6 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.use(ElementPlus) // 注册 ElementPlus app.use(createPinia()); // 注册 Pinia app.use(store); // 注册 store +app.use(i18n); // 注册 i18n app.use(router); // 注册 router app.mount('#app'); \ No newline at end of file diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 0671f0c..7993e44 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -1,5 +1,6 @@