UNPKG

1.18 kBJavaScriptView Raw
1import defaultLang from './lang/zh-CN';
2import Vue from 'vue';
3import deepmerge from 'deepmerge';
4import Format from './format';
5
6const format = Format(Vue);
7let lang = defaultLang;
8let merged = false;
9let i18nHandler = function() {
10 const vuei18n = Object.getPrototypeOf(this || Vue).$k;
11 if (typeof vuei18n === 'function' && !!Vue.locale) {
12 if (!merged) {
13 merged = true;
14 Vue.locale(
15 Vue.config.lang,
16 deepmerge(lang, Vue.locale(Vue.config.lang) || {}, { clone: true })
17 );
18 }
19 return vuei18n.apply(this, arguments);
20 }
21};
22
23export const k = function(path, options) {
24 let value = i18nHandler.apply(this, arguments);
25 if (value !== null && value !== undefined) return value;
26
27 const array = path.split('.');
28 let current = lang;
29
30 for (let i = 0, j = array.length; i < j; i++) {
31 const property = array[i];
32 value = current[property];
33 if (i === j - 1) return format(value, options);
34 if (!value) return '';
35 current = value;
36 }
37 return '';
38};
39
40export const use = function(l) {
41 lang = l || lang;
42};
43
44export const i18n = function(fn) {
45 i18nHandler = fn || i18nHandler;
46};
47
48export default { use, k, i18n };