去掉vue-i18n包,换成更简单的实现。

master
vdpAdmin 2021-12-14 16:46:54 +08:00
parent 8eb136174d
commit fac7e43faf
5 changed files with 9541 additions and 15 deletions

View File

@ -16,7 +16,6 @@
"element-ui": "^2.15.1", "element-ui": "^2.15.1",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-i18n": "^8.24.5",
"vue2-editor": "^2.10.2", "vue2-editor": "^2.10.2",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },

View File

@ -1,5 +1,5 @@
import Vue from 'vue' import Vue from 'vue'
import VueI18n from 'vue-i18n' import si18n from './smart-vue-i18n/index'
import enLocaleElement from "element-ui/lib/locale/lang/en"; import enLocaleElement from "element-ui/lib/locale/lang/en";
import zhLocaleElement from "element-ui/lib/locale/lang/zh-CN"; import zhLocaleElement from "element-ui/lib/locale/lang/zh-CN";
@ -34,37 +34,32 @@ const langResources = {
} }
} }
Vue.use(VueI18n) Vue.use(si18n, {
lang: localStorage.getItem('v_form_locale') || 'zh-CN',
const i18n = new VueI18n({ messages: langResources
locale: localStorage.getItem('v_form_locale') || 'zh-CN',
//locale: 'en-US',
messages: langResources,
}) })
locale.i18n((key, value) => i18n.t(key, value)) locale.i18n((key, value) => Vue.prototype.$st(key))
export const changeLocale = function(langName) { export const changeLocale = function(langName) {
i18n.locale = langName Vue.prototype.$si18n.setLang(langName)
localStorage.setItem('v_form_locale', langName) localStorage.setItem('v_form_locale', langName)
} }
export const translate = function(key) { export const translate = function(key) {
return i18n._t(key, i18n.locale, i18n._getMessages()) return Vue.prototype.$st(key)
} }
export default { export default {
methods: { methods: {
i18nt(key) { i18nt(key) {
return i18n._t(key, i18n.locale, i18n._getMessages()) return this.$st(key)
}, },
/* 如果key1不存在则查找key2 */ /* 如果key1不存在则查找key2 */
i18n2t(key1, key2) { i18n2t(key1, key2) {
return i18n.te(key1) ? i18n._t(key1, i18n.locale, i18n._getMessages()) : return this.$st2(key1, key2)
i18n._t(key2, i18n.locale, i18n._getMessages())
}, },
} }
} }

View File

@ -0,0 +1,56 @@
import {deepAssign, get} from './utils'
const install = (Vue, options) => {
const proto = Vue.prototype
proto.$si18n = proto.$si18n || {}
// 初始化多语言
deepAssign(proto.$si18n, options)
const _vm = new Vue({
data: options
})
Object.defineProperty(Vue.prototype.$si18n, 'lang', {
get() {
return _vm.lang
}
})
proto.$st = (path, ...args) => {
let messages = _vm.messages[_vm.lang]
if (!proto.$si18n.messages) {
if (process.env.NODE_ENV !== 'production') {
console.error('[yxI18n] Locale not correctly registered')
}
return () => path
}
//const message = get(messages, path) || get(messages, path)
const message = get(messages, path)
return typeof message === 'function'
? message(...args)
: message || path
}
proto.$st2 = (path, path2) => {
let messages = _vm.messages[_vm.lang]
const message = get(messages, path)
return (message !== '') ? message : get(messages, path2)
}
proto.$si18n.add = (messages = {}) => {
deepAssign(proto.$si18n.messages, messages)
}
proto.$si18n.setLang = lang => {
_vm.lang = lang
}
Vue.mixin({
beforeCreate() {
this.$options.i18n && this.$si18n.add(this.$options.i18n)
}
})
}
export default {
install
}

View File

@ -0,0 +1,47 @@
// 值存在
export function isDef(value) {
return value !== undefined && value !== null
}
// 对象映射 'a.b' {a: {b: 'val'}}
export function get(object, path) {
const keys = path.split('.')
let result = object
keys.forEach(key => {
result = isDef(result[key]) ? result[key] : ''
})
return result
}
// 是否是对象
export function isObj(x) {
const type = typeof x
return x !== null && (type === 'object' || type === 'function')
}
// 深拷贝
const { hasOwnProperty } = Object.prototype
function assignKey(to, from, key) {
const val = from[key]
if (!isDef(val)) {
return
}
if (!hasOwnProperty.call(to, key) || !isObj(val)) {
to[key] = val
} else {
to[key] = deepAssign(Object(to[key]), from[key])
}
}
export function deepAssign(to, from) {
Object.keys(from).forEach(key => {
assignKey(to, from, key)
})
return to
}

9429
yarn.lock Normal file

File diff suppressed because it is too large Load Diff