1 | import defaultLang from './lang/zh-CN';
|
2 | import Vue from 'vue';
|
3 | import deepmerge from 'deepmerge';
|
4 | import Format from './format';
|
5 |
|
6 | const format = Format(Vue);
|
7 | let lang = defaultLang;
|
8 | let merged = false;
|
9 | let 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 |
|
23 | export 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 |
|
40 | export const use = function(l) {
|
41 | lang = l || lang;
|
42 | };
|
43 |
|
44 | export const i18n = function(fn) {
|
45 | i18nHandler = fn || i18nHandler;
|
46 | };
|
47 |
|
48 | export default { use, k, i18n };
|