在某些项目中,需要将一些返回信息进行其他语言的翻译,可以为不同语言用户提供不同的语言版本。下面是一个实现:
/** * @class Translate * @description 查询字典,翻译成相应的语言 * @author jerishi * @2016.6.15 */ var mapObj = { 'test01': '测试01', 'test02': '测试02', 'test03': '测试03', 'test04': '测试04' }; var targetObj = { '1': 'test01', '2': 'test02', '3': undefined, '4': { '4': 'test04', '3': 'test03', '2': 'test02' }, '5': { '1': 'test01', '2': 'test02', '3': 'test03', '4': { '4': 123, '3': 'test03', 'G': ['test03', 'test02', 3] } } }; var Translate = { /** * 克隆对象 * @param {object} obj * @return {object} */ clone: function(obj) { var _self = this; // 简单数据类型直接返回 if (obj == null) { return obj; } if (typeof obj != 'object') { return obj; } // 复制复杂对象 var result = new obj.constructor(); for (var prop in obj) { result[prop] = _self.clone(obj[prop]); } return result; }, /** * 从字典里寻找目标词汇翻译 * @param {object} mapTest 字典对象 * @param {string} target 目标词汇 * @return {string} 返回目标词汇查询结果 */ mapStr: function(mapObj, target) { // 默认值 var result = target; // 查询字典 $.each(mapObj, function(key, value) { if (key === target) { result = value; } }); return result; }, /** * 翻译对象属性值(深层遍历) * @param {object} dictionaryObj 字典对象 * @param {object} targetObj 目标对象 * @return {object} 翻译结果 */ mapObj: function(dictionaryObj, targetObj) { var _self = this; for (var prop in targetObj) { var target = targetObj[prop]; if (typeof target == 'string') { targetObj[prop] = _self.mapStr(dictionaryObj, target); } else { _self.mapObj(dictionaryObj, target); } } return targetObj; }, /** * 克隆目标对象,并翻译 * @param {object} dictionaryObj 字典对象 * @param {object} targetObj 目标对象 * @return {object} 翻译结果 */ translate: function(dictionaryObj, targetObj) { var _self = this; // 克隆目标对象,不影响原对象 var _targetObj = _self.clone(targetObj); // 翻译对象属性值 var result = _self.mapObj(dictionaryObj, _targetObj); return result; } } console.log(Translate.translate(mapObj, targetObj)); console.log(targetObj);