From 92adccfc153ba21f6c7fac715c6f678809942f40 Mon Sep 17 00:00:00 2001 From: brooklin Date: Fri, 13 Jan 2023 15:32:21 +0800 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=20#26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/package.json | 4 ++- src/frontend/src/Atom.vue | 13 +++++--- src/frontend/src/i18n/index.js | 46 ++++++++++++++++++++++++++ src/frontend/src/i18n/lang/cn.json | 3 ++ src/frontend/src/i18n/lang/en.json | 6 ++++ src/frontend/src/i18n/lang/messages.js | 6 ++++ src/frontend/src/main.js | 2 ++ 7 files changed, 75 insertions(+), 5 deletions(-) create mode 100755 src/frontend/src/i18n/index.js create mode 100755 src/frontend/src/i18n/lang/cn.json create mode 100755 src/frontend/src/i18n/lang/en.json create mode 100755 src/frontend/src/i18n/lang/messages.js diff --git a/src/frontend/package.json b/src/frontend/package.json index ea117cc..660f92d 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -8,11 +8,13 @@ "public": "rimraf dist && webpack --mode production" }, "dependencies": { + "axios": "^0.21.1", "bk-magic-vue": "^2.2.4", "bkci-atom-components": "^1.0.0", - "axios": "^0.21.1", + "js-cookie": "^3.0.1", "vee-validate": "^2.0.3", "vue": "^2.6.10", + "vue-i18n": "^8.10.0", "vue-router": "^2.8.1", "vuex": "^2.4.0" }, diff --git a/src/frontend/src/Atom.vue b/src/frontend/src/Atom.vue index 10be583..b270f41 100644 --- a/src/frontend/src/Atom.vue +++ b/src/frontend/src/Atom.vue @@ -38,10 +38,11 @@ + 国际化 @@ -52,6 +53,7 @@ import Scan from '@/components/Scan' import Shield from '@/components/Shield' import Async from '@/components/Async' + import { toggleLang } from './i18n' export default { name: 'atom', @@ -65,9 +67,9 @@ data () { return { panels: [ - { name: 'basic', label: '基础设置' }, - { name: 'scan', label: '扫描配置' }, - { name: 'shield', label: '路径屏蔽' } + { name: 'basic', label: this.$t('基础设置') }, + { name: 'scan', label: this.$t('扫描配置') }, + { name: 'shield', label: this.$t('路径屏蔽') } ], active: 'basic', tabRedTips: {} @@ -115,6 +117,9 @@ if (name === 'scan') { window.localStorage.setItem('mr-20200702', '1') } + }, + handleToggleLang() { + toggleLang() } } } diff --git a/src/frontend/src/i18n/index.js b/src/frontend/src/i18n/index.js new file mode 100755 index 0000000..4d30398 --- /dev/null +++ b/src/frontend/src/i18n/index.js @@ -0,0 +1,46 @@ +import Vue from 'vue'; +import VueI18n from 'vue-i18n'; +import Cookies from 'js-cookie'; +import langMessages from './lang/messages'; +import { locale, lang } from 'bk-magic-vue'; + +Vue.use(VueI18n); + +const languageMaps = { + zh_cn: 'zh-CN', + 'zh-cn': 'zh-CN', + zh: 'zh-CN', +}; + +const messages = { + 'zh-CN': Object.assign(lang.zhCN, langMessages['zh-CN']), + en: Object.assign(lang.enUS, langMessages.en), +}; + +let curLocale = Cookies.get('blueking_language') || 'zh-CN'; +curLocale = Object.prototype.hasOwnProperty.call(languageMaps, curLocale) ? languageMaps[curLocale] : curLocale; + +// console.log(locale, messages) + +const i18n = new VueI18n({ + locale: curLocale, + fallbackLocale: 'zh-CN', + messages, + silentTranslationWarn: true, // 取消本地化失败时输出的警告 + missing(locale, path) { + const parsedPath = i18n._path.parsePath(path) // eslint-disable-line + return parsedPath[parsedPath.length - 1]; + }, +}); + +locale.i18n((key, value) => i18n.t(key, value)); + +export const toggleLang = () => { + i18n.locale = i18n.locale === 'zh-CN' ? 'en' : 'zh-CN'; + + Cookies.set('blueking_language', i18n.locale); +}; + +export const language = i18n.locale; + +export default i18n; diff --git a/src/frontend/src/i18n/lang/cn.json b/src/frontend/src/i18n/lang/cn.json new file mode 100755 index 0000000..1797133 --- /dev/null +++ b/src/frontend/src/i18n/lang/cn.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/src/frontend/src/i18n/lang/en.json b/src/frontend/src/i18n/lang/en.json new file mode 100755 index 0000000..c5d62cf --- /dev/null +++ b/src/frontend/src/i18n/lang/en.json @@ -0,0 +1,6 @@ +{ + "前往CodeCC": "Go to CodeCC", + "基础设置": "Basic", + "扫描配置": "Scan", + "路径屏蔽": "Filter" +} diff --git a/src/frontend/src/i18n/lang/messages.js b/src/frontend/src/i18n/lang/messages.js new file mode 100755 index 0000000..faf83a2 --- /dev/null +++ b/src/frontend/src/i18n/lang/messages.js @@ -0,0 +1,6 @@ +import en from './en.json' +import cn from './cn.json' +export default { + en, + 'zh-CN': cn, +} diff --git a/src/frontend/src/main.js b/src/frontend/src/main.js index ea01187..95da479 100644 --- a/src/frontend/src/main.js +++ b/src/frontend/src/main.js @@ -12,6 +12,7 @@ import request from '@/utils/request' import validDictionary from './utils/validDictionary' import ExtendsCustomRules from './utils/customRules' import store from './store/index' +import i18n from './i18n'; // 全量引入 bk-magic-vue 样式 require('bk-magic-vue/dist/bk-magic-vue.min.css') @@ -35,6 +36,7 @@ ExtendsCustomRules(VeeValidate.Validator.extend) global.atomVue = new Vue({ el: '#pipeline-atom', + i18n, components: { PublicAtom, LocalAtom From 2e4c75d2ad915ad22d0cba27a814bba07ec104c9 Mon Sep 17 00:00:00 2001 From: RJ Date: Mon, 16 Jan 2023 18:00:50 +0800 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=20#26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/src/Atom.vue | 12 +++-- src/frontend/src/components/Async.vue | 2 +- .../src/components/AuthorTransfer.vue | 6 +-- src/frontend/src/components/Basic.vue | 8 +-- .../src/components/CodeccAccordion.vue | 2 +- src/frontend/src/components/ItemEdit.vue | 2 +- src/frontend/src/components/RuleSetDialog.vue | 36 ++++++------- src/frontend/src/components/RuleSetSelect.vue | 2 +- src/frontend/src/components/Shield.vue | 12 ++--- src/frontend/src/components/TaskSelect.vue | 2 +- src/frontend/src/i18n/index.js | 46 ++++++++++++++++ src/frontend/src/i18n/lang/cn.json | 4 ++ src/frontend/src/i18n/lang/en.json | 52 +++++++++++++++++++ src/frontend/src/i18n/lang/messages.js | 6 +++ src/frontend/src/main.js | 2 + 15 files changed, 154 insertions(+), 40 deletions(-) create mode 100644 src/frontend/src/i18n/index.js create mode 100644 src/frontend/src/i18n/lang/cn.json create mode 100644 src/frontend/src/i18n/lang/en.json create mode 100644 src/frontend/src/i18n/lang/messages.js diff --git a/src/frontend/src/Atom.vue b/src/frontend/src/Atom.vue index 10be583..d7b7da9 100644 --- a/src/frontend/src/Atom.vue +++ b/src/frontend/src/Atom.vue @@ -38,7 +38,7 @@ @@ -52,6 +52,7 @@ import Scan from '@/components/Scan' import Shield from '@/components/Shield' import Async from '@/components/Async' + import { toggleLang } from './i18n' export default { name: 'atom', @@ -65,9 +66,9 @@ data () { return { panels: [ - { name: 'basic', label: '基础设置' }, - { name: 'scan', label: '扫描配置' }, - { name: 'shield', label: '路径屏蔽' } + { name: 'basic', label: this.$t('基础设置') }, + { name: 'scan', label: this.$t('扫描配置') }, + { name: 'shield', label: this.$t('路径屏蔽') } ], active: 'basic', tabRedTips: {} @@ -115,6 +116,9 @@ if (name === 'scan') { window.localStorage.setItem('mr-20200702', '1') } + }, + handleToggleLang() { + toggleLang() } } } diff --git a/src/frontend/src/components/Async.vue b/src/frontend/src/components/Async.vue index 3751fd7..f5cba04 100644 --- a/src/frontend/src/components/Async.vue +++ b/src/frontend/src/components/Async.vue @@ -1,6 +1,6 @@