From 88f1f8bd5b85d890f7f2b251a93708e74f8b6bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=96=B0=E5=AE=87?= Date: Sat, 18 Sep 2021 15:33:33 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0i8n=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E6=8F=92=E4=BB=B6=EF=BC=9B=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD=EF=BC=9B?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=A4=BA=E4=BE=8B=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=9A=E7=99=BB=E5=BD=95=E3=80=81=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 1 + .../src/components/LanguageSelect/index.vue | 53 +++++ ruoyi-ui/src/i18n/i18n.js | 40 ++++ ruoyi-ui/src/i18n/langs/en.js | 50 +++++ ruoyi-ui/src/i18n/langs/zh.js | 50 +++++ ruoyi-ui/src/layout/components/Navbar.vue | 9 +- ruoyi-ui/src/main.js | 3 +- ruoyi-ui/src/store/getters.js | 1 + ruoyi-ui/src/store/modules/app.js | 12 +- ruoyi-ui/src/views/login.vue | 206 ++++++++++++------ ruoyi-ui/src/views/system/user/index.vue | 58 ++--- 11 files changed, 388 insertions(+), 95 deletions(-) create mode 100644 ruoyi-ui/src/components/LanguageSelect/index.vue create mode 100644 ruoyi-ui/src/i18n/i18n.js create mode 100644 ruoyi-ui/src/i18n/langs/en.js create mode 100644 ruoyi-ui/src/i18n/langs/zh.js diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 9048f5a4d..73538403b 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -55,6 +55,7 @@ "vue": "2.6.12", "vue-count-to": "1.0.13", "vue-cropper": "0.5.5", + "vue-i18n": "^8.25.0", "vue-meta": "^2.4.0", "vue-router": "3.4.9", "vuedraggable": "2.24.3", diff --git a/ruoyi-ui/src/components/LanguageSelect/index.vue b/ruoyi-ui/src/components/LanguageSelect/index.vue new file mode 100644 index 000000000..e17601a6e --- /dev/null +++ b/ruoyi-ui/src/components/LanguageSelect/index.vue @@ -0,0 +1,53 @@ + + + diff --git a/ruoyi-ui/src/i18n/i18n.js b/ruoyi-ui/src/i18n/i18n.js new file mode 100644 index 000000000..c7f647d24 --- /dev/null +++ b/ruoyi-ui/src/i18n/i18n.js @@ -0,0 +1,40 @@ +import Vue from 'vue' +import Cookies from 'js-cookie' +import VueI18n from 'vue-i18n' +import locale from 'element-ui/lib/locale'; +import zh from './langs/zh' +import en from './langs/en' +import enLocale from 'element-ui/lib/locale/lang/en' +import zhLocale from 'element-ui/lib/locale/lang/zh-CN' + + +Vue.use(VueI18n) + +const messages = { + en: Object.assign(en, enLocale), + zh: Object.assign(zh, zhLocale) +} + +export function getLanguage() { + const chooseLanguage = Cookies.get('lang') + if (chooseLanguage) return chooseLanguage + + const language = (navigator.language || navigator.browserLanguage).toLowerCase() + const locales = Object.keys(messages) + for (const locale of locales) { + if (language.indexOf(locale) > -1) { + return locale + } + } + return 'en' +} + +const i18n = new VueI18n({ + locale: getLanguage(), + messages +}) + + +locale.i18n((key, value) => i18n.t(key, value)) //为了实现element插件的多语言切换 + +export default i18n diff --git a/ruoyi-ui/src/i18n/langs/en.js b/ruoyi-ui/src/i18n/langs/en.js new file mode 100644 index 000000000..189abb6af --- /dev/null +++ b/ruoyi-ui/src/i18n/langs/en.js @@ -0,0 +1,50 @@ +const bt = { + search: 'Search', + reset: 'Reset', + create: 'Create', + edit: 'Edit', + delete: 'Delete', + import: 'Import', + export: 'Export', + more: 'More', + resetPassWord: 'ResetPassWord', + assigningRoles: 'AssigningRoles', + register: 'Register' +} + +const hint = { + inputDeptName: 'Please enter the department name', + inputUserName: 'Please enter the user name', + inputPhonenumber: 'Please enter the phone number', + selectUserStatus: 'UserStatus', + startDate: 'StartDate', + endDate: 'EndDate', + operate: 'Operate', + inputPassword: 'Please enter the password', + inputCode: 'Please enter the verification code' +} + +const system = { + user: { + managementSystem: 'RuoYi Management System', + userId: 'UserId', + userName: 'UserName', + passWord: 'PassWord', + checkCode: 'CheckCode', + rememberMe: 'Remember Me', + login: 'Login', + loggingIn: 'Logging in', + phonenumber: 'Phonenumber', + status: 'Status', + createDate: 'CreateDate', + nickName: 'NickName', + deptName: 'DeptName', + createTime: 'CreateTime' + } +} + +module.exports = { + bt, + hint, + system, +} diff --git a/ruoyi-ui/src/i18n/langs/zh.js b/ruoyi-ui/src/i18n/langs/zh.js new file mode 100644 index 000000000..3d5c49981 --- /dev/null +++ b/ruoyi-ui/src/i18n/langs/zh.js @@ -0,0 +1,50 @@ +const bt = { + search: '搜索', + reset: '重置', + create: '新增', + edit: '修改', + delete: '删除', + import: '导入', + export: '导出', + more: '更多', + resetPassWord: '重置密码', + assigningRoles: '分配角色', + register: '注册' +} + +const hint = { + inputDeptName: '请输入部门名称', + inputUserName: '请输入用户名', + inputPhonenumber: '请输入手机号码', + selectUserStatus: '用户状态', + startDate: '开始日期', + endDate: '结束日期', + operate: '操作', + inputPassword: '请输入密码', + inputCode: '请输入验证码' +} + +const system = { + user: { + managementSystem: '若依后台管理系统', + userId: '用户编号', + userName: '用户名', + passWord: '密码', + checkCode: '验证码', + rememberMe: '记住我', + login: '登 录', + loggingIn: '登 录 中...', + phonenumber: '手机号码', + status: '状态', + createDate: '创建日期', + nickName: '用户昵称', + deptName: '部门', + createTime: '创建时间' + } +} + +module.exports = { + bt, + hint, + system, +} diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue index 67a53ab67..e0b8128ac 100644 --- a/ruoyi-ui/src/layout/components/Navbar.vue +++ b/ruoyi-ui/src/layout/components/Navbar.vue @@ -22,7 +22,10 @@ - + @@ -56,6 +59,7 @@ import SizeSelect from '@/components/SizeSelect' import Search from '@/components/HeaderSearch' import RuoYiGit from '@/components/RuoYi/Git' import RuoYiDoc from '@/components/RuoYi/Doc' +import LanguageSelect from '@/components/LanguageSelect' export default { components: { @@ -66,7 +70,8 @@ export default { SizeSelect, Search, RuoYiGit, - RuoYiDoc + RuoYiDoc, + LanguageSelect }, computed: { ...mapGetters([ diff --git a/ruoyi-ui/src/main.js b/ruoyi-ui/src/main.js index e055dd411..6c04bde59 100644 --- a/ruoyi-ui/src/main.js +++ b/ruoyi-ui/src/main.js @@ -1,7 +1,7 @@ import Vue from 'vue' import Cookies from 'js-cookie' - +import i18n from './i18n/i18n' import Element from 'element-ui' import './assets/styles/element-variables.scss' @@ -87,5 +87,6 @@ new Vue({ el: '#app', router, store, + i18n, render: h => h(App) }) diff --git a/ruoyi-ui/src/store/getters.js b/ruoyi-ui/src/store/getters.js index 8d723813b..9011818ab 100644 --- a/ruoyi-ui/src/store/getters.js +++ b/ruoyi-ui/src/store/getters.js @@ -1,6 +1,7 @@ const getters = { sidebar: state => state.app.sidebar, size: state => state.app.size, + lang: state => state.app.lang, device: state => state.app.device, visitedViews: state => state.tagsView.visitedViews, cachedViews: state => state.tagsView.cachedViews, diff --git a/ruoyi-ui/src/store/modules/app.js b/ruoyi-ui/src/store/modules/app.js index c8d8ee91e..35d4b5916 100644 --- a/ruoyi-ui/src/store/modules/app.js +++ b/ruoyi-ui/src/store/modules/app.js @@ -6,7 +6,8 @@ const state = { withoutAnimation: false }, device: 'desktop', - size: Cookies.get('size') || 'medium' + size: Cookies.get('size') || 'medium', + lang: Cookies.get('lang') || 'zh' } const mutations = { @@ -30,6 +31,10 @@ const mutations = { SET_SIZE: (state, size) => { state.size = size Cookies.set('size', size) + }, + SET_LANG: (state, lang) => { + state.lang = lang + Cookies.set('lang', lang) } } @@ -45,6 +50,11 @@ const actions = { }, setSize({ commit }, size) { commit('SET_SIZE', size) + }, + setLang({ + commit + }, lang) { + commit('SET_LANG', lang) } } diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index 255eafca0..023bb0685 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -1,10 +1,32 @@