[improvement] optimize locale (#2725)

This commit is contained in:
neverland
2019-02-12 21:09:44 +08:00
committed by GitHub
parent ba811b50b0
commit a08666947f
7 changed files with 164 additions and 175 deletions
-1
View File
@@ -108,7 +108,6 @@ const components = [
Info,
List,
Loading,
Locale,
NavBar,
NoticeBar,
Notify,
-33
View File
@@ -1,33 +0,0 @@
/* eslint-disable import/no-mutable-exports */
import Vue from 'vue';
import deepAssign from '../utils/deep-assign';
import defaultMessages from './lang/zh-CN';
let lang = 'zh-CN';
const proto = Vue.prototype;
const messages = { [lang]: defaultMessages };
const locale = {
install() {
if (proto.$vantLang) {
return;
}
Vue.util.defineReactive(proto, '$vantLang', lang);
Vue.util.defineReactive(proto, '$vantMessages', messages);
},
use(newLang, messages) {
lang = newLang;
proto.$vantLang = lang;
this.add({ [lang]: messages });
},
add(messages = {}) {
deepAssign(proto.$vantMessages, messages);
}
};
locale.install();
export default locale;
export { lang, messages };
+34
View File
@@ -0,0 +1,34 @@
import Vue from 'vue';
import deepAssign from '../utils/deep-assign';
import defaultMessages from './lang/zh-CN';
declare module 'vue' {
interface VueConstructor {
util: {
defineReactive(obj: object, key: string, value: any): void;
};
}
}
const proto = Vue.prototype;
const { defineReactive } = Vue.util;
defineReactive(proto, '$vantLang', 'zh-CN');
defineReactive(proto, '$vantMessages', {
'zh-CN': defaultMessages
});
export default {
messages() {
return proto.$vantMessages[proto.$vantLang];
},
use(lang: string, messages?: object) {
proto.$vantLang = lang;
this.add({ [lang]: messages });
},
add(messages = {}) {
deepAssign(proto.$vantMessages, messages);
}
};
+2 -2
View File
@@ -1,10 +1,10 @@
import { get, camelize } from '..';
import { lang, messages } from '../../locale';
import locale from '../../locale';
export default (name: string) => {
const prefix = camelize(name) + '.';
return (path: string, ...args: any[]): string => {
const message = get(messages[lang], prefix + path) || get(messages[lang], path);
const message = get(locale.messages(), prefix + path) || get(locale.messages(), path);
return typeof message === 'function' ? message(...args) : message;
};
};