| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import Vue from 'vue'
- import znCH from './lang/zn-CH'
- let defaultMessages = {};
- let merged = false;
- const vueI18nHandler = function() {
- const vuei18n = Object.getPrototypeOf(this || Vue).$t;
- if (typeof vuei18n === 'function' && !!Vue.locale) {
- if (!merged) {
- merged = true;
- Vue.locale(
- Vue.config.lang,
- Object.assign(Vue.config.lang === 'zn-CH'? znCH: {}, Vue.locale(Vue.config.lang) || {}, defaultMessages)
- );
- }
- return vuei18n.apply(this, arguments);
- }
- };
- function i18n(keysStr, params) {
- let value = vueI18nHandler.apply(this, arguments);
- if (value !== null && value !== undefined) return value;
- let message = Object.assign({}, Vue.config.lang === 'zn-CH'? znCH: {}, defaultMessages);
- let keys = keysStr && keysStr.split('.') || [];
- let result = null;
-
- if(keys.length) {
- for(let i=0;i<keys.length;i++) {
- let key = keys[i];
- if(key && message[key]) {
- message = message[key];
- result = message;
- }else{
- result = null;
- break;
- }
- }
- }
- return simpleTemplate(result, params);
- }
- function locale(lang, messages) {
- if(typeof lang === 'object') {
- messages = lang;
- lang = Vue.config.lang;
- }
- Vue.config.lang = lang;
- Object.assign(defaultMessages, messages);
- }
- function getArgType(arg) {
- return Object.prototype.toString.call(arg).toLowerCase().match(/\s(\w+)/)[1];
- }
- function simpleTemplate(templ, conf) {
- let pars = templ && templ.match(/{.+?}/g);
- if (pars && conf) {
- pars = pars.map(p => p.replace(/\{\s*(\w+|\d+).*?\}/, '$1'));
- pars.forEach((c, i) => {
- let reg = new RegExp('{\\s*'+c+'\\s*(?:=\\s*(\\S*?))?\\s*?}', 'g');
- templ = templ.replace(reg, (a, b) => {
- return getArgType(conf[c]) == 'function'? conf[c](): (conf[c] !== undefined? conf[c]: (b? b: a));
- });
- });
- }
- return templ;
- }
- export {
- i18n,
- locale
- }
|