@foreverrbum/ethsign
Version:
This package will allow you to electronically sign documents within your application
94 lines (82 loc) • 2.47 kB
JavaScript
const i18nFiles = ['zh', 'en', 'jp'];
const loadI18nResources = () => {
return i18nFiles.map(item => {
console.log(`Loading ../src/lib/message/${item}.json`);
try {
const data = require(`../src/lib/message/${item}.json`);
return {data, i18n: item};
} catch (e) {
console.error(`Failed to load ../src/lib/message/${item}.json`)
}
});
};
const checkTheKeyLeanEqual = (resources) => {
let isEqual = true;
const map = {};
for (const {i18n, data} of resources) {
map[i18n] = Object.keys(data).length;
}
try {
Object.keys(map).reduce((pre, cur, index) => {
if (index === 0) return cur;
if (map[pre] !== map[cur]) isEqual = false;
return cur;
},0);
if (!isEqual) {
let message = '';
Object.keys(map).forEach(item => {
message = message + `${item}.json contains ${map[item]} key(s); `
});
throw new Error(message);
}
} catch (e) {
console.error(e);
}
}
const compareSource = (resources) => {
const {data} = resources[0];
const keys = Object.keys(data);
let count = 0;
for (const { data } of resources) {
while (keys.length >= count) {
delete data[keys[count]];
count++;
}
count = 0;
}
const ishasExtraKey = checkHasExtraKey(resources);
if (ishasExtraKey) {
const message = getErrorMsg(resources);
throw new Error(message);
}
console.log("Successfully validated all i18n files.\n")
}
const checkHasExtraKey = (resources) => {
let result = false;
for (const {data} of resources) {
if (Object.keys(data).length > 0) {
console.log(data);
}
if (Object.keys(data).length !== 0) {
result = true;
break;
}
}
return result;
}
const getErrorMsg = (resources) => {
let message = '';
for (const {i18n, data} of resources) {
if (Object.keys(data).length !== 0) {
message = message + `${i18n}.json contains ${JSON.stringify(data)}, but this is missing in other i18n files;`;
}
}
return message;
}
const startCheck = () => {
console.log("Starting i18n validation...");
const resources = loadI18nResources();
checkTheKeyLeanEqual(resources);
compareSource(resources);
};
startCheck();