需求
在做多语言的项目的时候,需要对当前不同语言的key的差异进行对比并且找出缺少key的语言和具体的语言key
通过node的文件读取能力进行需求的实现
const fs = require('fs')
const path = require('path');
const lodash = require('lodash');
// 目的是找出多语言文件中跟简体中文相比,不同的语言json文件中缺少的不同的语言key
// 读取简体中文的所有的keyconst allKeys = {}
const resultObj= {}
const SIMPLE = 'ZH' // 目标语言为中文简体
const filePath = path.resolve(__dirname,'../locales') // 文件夹路径function compareKeys(){// 读取src/locales的所有的json文件const files = fs.readdirSync(filePath) || []// 遍历读取文件的内容files.map((file)=>{const data = fs.readFileSync(path.resolve(filePath,file), 'utf8')const result = JSON.parse(data)allKeys[result['lang']] = Object.keys(result)})// 开始比较每种key对应的长度,当有长度不同的语言key的时候,找出对应的语言并且找出keyconst length = allKeys[SIMPLE].lengthfor (const key in allKeys) {if (Object.hasOwnProperty.call(allKeys, key)) {const elementArr = allKeys[key] || [];if(elementArr.length !== length){// 找出两个数组中的差异项目const sourceArr = allKeys[SIMPLE]const different = sourceArr.filter(item=>!elementArr.includes(item))resultObj[key] = different}}}// 如果resultObj不为空。那么禁止eslint提交代码if(!lodash.isEmpty(resultObj)){throw new Error(`*****国际化缺少的语言key*****${JSON.stringify(resultObj)}`)}else{console.log('*****国际化语言key检测完成*****',resultObj)}
}
compareKeys()
package.json文件的执行
"compare":"node ./src/utils/compare_keys.js",