对实现i18n前端国际化的核心原理做一个浅剖析,只造轮子不造车,省去天花乱坠的描述直接上代码
//创建语言包对象
const zh = {
page: {
login: {
loginButton: '登录'
},
},
};
/**
* 解析层级对象
* @param obj {*} {obj: {a: 'xxx',}}
* @param value obj.a
*/
const getlanguageValue = (obj = {}, value = '') => {
if (Object.prototype.toString.call(obj) !== '[object Object]') {
return obj;
}
const toArray = value.split('.');
return toArray.reduce((preVal, currVal) => {
if (!preVal) return null;
return preVal[currVal];
}, obj);
};
//调用
console.log(getlanguageValue(zh, 'page.login.loginButton'));