A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ciphermask/development/missing-locale-strings.js

79 lines
2.2 KiB

// //////////////////////////////////////////////////////////////////////////////
//
// Reports on missing localized strings
//
// usage:
//
// node app/scripts/missing-locale-strings.js [<locale>] [--verbose]
//
// This script will report on any missing localized strings. It will compare the
// chosen locale (or all locales, if none is chosen) with the `en` locale, and
// report the coverage percentage.
//
// The optional '--verbose' argument will print the key for each localized string
// to the console.
//
// //////////////////////////////////////////////////////////////////////////////
const log = require('loglevel')
const localeIndex = require('../app/_locales/index.json')
const { compareLocalesForMissingItems, getLocale } = require('./lib/locales')
log.setDefaultLevel('info')
let verbose = false
let specifiedLocale
for (const arg of process.argv.slice(2)) {
if (arg === '--verbose') {
verbose = true
} else {
specifiedLocale = arg
}
}
main().catch((error) => {
log.error(error)
process.exit(1)
})
async function main() {
if (specifiedLocale === 'en') {
throw new Error(
`Can't compare 'en' locale to itself to find missing messages`,
)
} else if (specifiedLocale) {
await reportMissingMessages(specifiedLocale)
} else {
const localeCodes = localeIndex
.filter((localeMeta) => localeMeta.code !== 'en')
.map((localeMeta) => localeMeta.code)
for (const code of localeCodes) {
await reportMissingMessages(code)
}
}
}
async function reportMissingMessages(code) {
const englishLocale = await getLocale('en')
const targetLocale = await getLocale(code)
const missingItems = compareLocalesForMissingItems({
base: englishLocale,
subject: targetLocale,
})
const englishEntryCount = Object.keys(englishLocale).length
const coveragePercent =
(100 * (englishEntryCount - missingItems.length)) / englishEntryCount
log.info(`**${code}**: ${coveragePercent.toFixed(2)}% coverage`)
if (missingItems.length && verbose) {
console.log(`**${code}**: ${missingItems.length} missing messages`)
log.info('Extra items that should not be localized:')
missingItems.forEach(function (key) {
log.info(` - [ ] ${key}`)
})
}
}