需求
在做多语言的项目的时候,需要对当前不同语言的key的差异进行对比并且找出缺少key的语言和具体的语言key
通过node的文件读取能力进行需求的实现
const fs = require('fs')
const path = require('path');
const lodash = require('lodash');
// 目的是找出多语言文件中跟简体中文相比,不同的语言json文件中缺少的不同的语言key
// 读取简体中文的所有的key
const 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的时候,找出对应的语言并且找出key
const length = allKeys[SIMPLE].length
for (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",