in src/translationsValidator.ts [24:104]
public static Run() {
let jsonPaths: { [visual: string]: { [key: string]: string } } = {};
console.log("All jsons paths building started.")
for (let visualName in visualNames) {
if (visualNames[visualName]) {
let visualResourcesPath: string = path.join(__dirname, "..", visualName);
let localeFolders: string[] = fs.readdirSync(visualResourcesPath);
jsonPaths[visualName] = {};
for (let i in localeFolders) {
let folder: string = localeFolders[i];
let pathToFile: string = path.join(visualResourcesPath, folder);
if (!fs.lstatSync(pathToFile).isDirectory()) {
continue;
}
jsonPaths[visualName][folder] = path.join(pathToFile, TranslationsValidator.resjsonFileName);
}
}
}
let brokenFilesCount: number = 0;
let results: string[] = [];
console.log("Validation process started");
for (let visual in jsonPaths) {
let visualLocales: { [key: string]: string } = jsonPaths[visual];
let engStringsPath: string = visualLocales["en-US"];
if (!engStringsPath) {
++brokenFilesCount;
continue;
}
let engStrings: { [key: string]: string } = {};
let fileString: string = fs.readFileSync(engStringsPath, "utf8");
try {
engStrings = JSON.parse(fileString);
} catch (err) {
++brokenFilesCount;
continue;
}
for (let locale in visualLocales) {
if (locale === "en-US") {
continue;
}
let jsonPath: string = visualLocales[locale];
let fileString: string = fs.readFileSync(jsonPath, "utf8");
let obj: any = {};
try {
obj = JSON.parse(fileString);
} catch (err) {
++brokenFilesCount;
}
let index: number = 1;
for (let str in engStrings) {
index++;
if (!obj[str]) {
++brokenFilesCount;
} else if (engStrings[str] === obj[str]) {
results.push(`${str},${engStrings[str]},${visual},${locale},${obj[str]}, https://github.com/Microsoft/powerbi-visuals-utils-localizationutils/blob/Loc/${visual}/${locale}/resources.resjson#L${index}`);
}
}
}
}
if (brokenFilesCount) {
throw "Error has been occured: " + brokenFilesCount + (brokenFilesCount > 1 ? " files are" : " file is") + " not valid";
}
this.export(results);
}