| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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 };
|