w-vue-middle
Version:
统一公共服务组件
82 lines (76 loc) • 2.49 kB
JavaScript
/*
* @Author: Jason Liu
* @Date: 2023-12-21 15:15:20
* @Desc: 多语言服务
*/
;
var multilingualService = {
_keyName: "LocationData",
_locationData: undefined,
useed: false,//是否加载过
/**
* @Author: Jason Liu
* @description: 保存内容
*/
saveStorage(data) {
localStorage.setItem(this._keyName, data);
multilingualService.reloadLanguage();
},
/**
* @Author: Jason Liu
* @description: 刷新本地存储的语言内容
*/
reloadLanguage() {
var locationData = localStorage.getItem(this._keyName);
try {
multilingualService._locationData = JSON.parse(locationData) || {};
} catch (error) {
multilingualService._locationData = {};
}
},
/**
* @Author: Jason Liu
* @description: 获取语言内容
*/
getLanguage(code, ref = undefined) {
if (!multilingualService._locationData) {
multilingualService.reloadLanguage();
}
return multilingualService._locationData[code] || ref;
},
};
window.$getLanguage = multilingualService.getLanguage;
window.$languageService = multilingualService;
(function ($) {
if (typeof $ !== 'undefined' && typeof $.fn !== 'undefined') {
$(document).ready(function () {
$("[v-lan]").each(function (i, el) {
let code = $(el).attr("v-lan");
const text = multilingualService.getLanguage(code);
if (text) {
$(el).text(text)
}
})
})
} else {
module.exports = {
/**
* @Author: Jason Liu
* @description: vue版本初始化
*/
install(Vue) {
if (!multilingualService.useed) {
multilingualService.useed = true;
Vue.prototype.$getLanguage = multilingualService.getLanguage;
Vue.prototype.$languageService = multilingualService;
Vue.directive('lan', (el, binding) => {
const text = multilingualService.getLanguage(binding.value);
if (text) {
el.innerText = text;
}
});
}
}
};
}
})(window.jQuery || window.Zepto)