tify
Version:
A slim and mobile-friendly IIIF document viewer
80 lines (61 loc) • 2.14 kB
JavaScript
import chalk from 'chalk';
import {
checkTranslationFiles,
findTranslatedStrings,
rootDir,
} from './i18n.js'; // eslint-disable-line import/extensions
function wrapText(text) {
const words = text.split(' ');
let line = '';
let output = '';
words.forEach((word) => {
// Strip out invisible control characters
// eslint-disable-next-line no-control-regex
if ((line + word).replace(/\x1b\[[0-9;]*m/g, '').length > process.stdout.columns) {
output += `${line.trimEnd()}\n`;
line = '';
}
line += `${word} `;
});
output += line.trimEnd();
return output;
}
const translatedStrings = findTranslatedStrings().map((result) => result.key);
if (!translatedStrings.length) {
console.log('No translated strings found');
process.exit(1);
}
translatedStrings.unshift('$language');
const options = {
addMissing: process.argv.includes('--add'),
removeUnused: process.argv.includes('--remove'),
sort: process.argv.includes('--sort'),
};
const translationsDir = `${rootDir}public/translations`;
const results = checkTranslationFiles(translationsDir, translatedStrings, options);
let translationsWithIssuesCount = 0;
results.forEach((result) => {
console.log(`${chalk.dim('file://')}${translationsDir}/${chalk.bold(result.langCode)}.json · ${result.langName}`);
['empty', 'missing', 'unused'].forEach((type) => {
const issues = result.issues.filter((issue) => issue.type === type);
if (issues.length) {
const label = chalk.bold(`${type.charAt(0).toUpperCase() + type.slice(1)} keys:`);
console.log(wrapText(`${label} ${chalk.redBright(issues.map((issue) => issue.key).join(chalk.grey(', ')))}`));
}
});
result.notes.forEach((note) => {
console.log(chalk.cyanBright(note));
});
if (result.notes.length || result.issues.length) {
translationsWithIssuesCount += 1;
} else {
console.log(chalk.greenBright('Shiny!'));
}
console.log();
});
console.log(`Checked ${results.length} languages, ${
translationsWithIssuesCount
? chalk.redBright(`found issues with ${translationsWithIssuesCount}.`)
: chalk.greenBright('found no issues.')
}`);
process.exit(translationsWithIssuesCount ? 1 : 0);