From 5effeb16d1eaf4bc327a4d28af0d7f1a1cf341e6 Mon Sep 17 00:00:00 2001 From: Peter deHaan Date: Mon, 31 Jul 2017 14:34:28 -0700 Subject: [PATCH] Generate production locales using 'compare-locales' --- package.json | 22 +++++++++---------- scripts/get-prod-locales.js | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 12 deletions(-) create mode 100755 scripts/get-prod-locales.js diff --git a/package.json b/package.json index ff012aae..3698a880 100644 --- a/package.json +++ b/package.json @@ -46,13 +46,15 @@ "license": "MPL-2.0", "repository": "mozilla/send", "availableLanguages": [ - "en-US", - "zh-TW", - "zh-CN", "cs", + "cy", + "de", + "dsb", + "en-US", + "es-MX", "fr", "fy-NL", - "de", + "hsb", "hu", "it", "ja", @@ -60,19 +62,14 @@ "ms", "nb-NO", "nn-NO", - "pt-PT", "pt-BR", + "pt-PT", "ru", "sk", "sl", - "dsb", - "hsb", - "es-CL", - "es-ES", - "es-MX", "sv-SE", - "tr", - "cy" + "zh-CN", + "zh-TW" ], "scripts": { "build": "npm-run-all build:*", @@ -80,6 +77,7 @@ "build:download": "browserify frontend/src/download.js -g uglifyify -o public/download.js", "build:version": "node scripts/version", "build:l10n": "cp node_modules/l20n/dist/web/l20n.min.js public", + "get-prod-locales": "node scripts/get-prod-locales", "dev": "npm run build && npm start", "format": "prettier '{frontend/src/,scripts/,server/,test/**/!(bundle)}*.js' 'public/*.css' --single-quote --write", "lint": "npm-run-all lint:*", diff --git a/scripts/get-prod-locales.js b/scripts/get-prod-locales.js new file mode 100755 index 00000000..1056a978 --- /dev/null +++ b/scripts/get-prod-locales.js @@ -0,0 +1,43 @@ +const { exec } = require('child_process'); +const fs = require('fs'); + +const pkg = require('../package.json'); +const availableLanguages = pkg.availableLanguages.sort(); + +const compareLocales = + 'compare-locales l10n.toml . `ls public/locales` --data=json'; + +exec(compareLocales, (err, stdout, stderr) => { + if (err) { + console.error(err); + process.exit(1); + } + const missingLocales = (current, package) => + current.filter(locale => !package.includes(locale)); + const { summary } = JSON.parse(stdout); + const locales = Object.keys(summary) + .filter(locale => { + const loc = summary[locale]; + const hasMissing = loc.hasOwnProperty('missing'); + const hasErrors = loc.hasOwnProperty('errors'); + return !hasMissing && !hasErrors; + }) + .sort(); + + if (locales.join(',') !== availableLanguages.join(',')) { + const missingLocales = missingLocales(locales, availableLanguages); + console.log('current 100%:', JSON.stringify(locales)); + console.log('package.json:', JSON.stringify(availableLanguages)); + console.log('missing prod:', JSON.stringify(missingLocales)); + + if (process.argv.includes('--write')) { + const pkgPath = require.resolve('../package.json'); + pkg.availableLanguages = locales; + const str = JSON.stringify(pkg, null, 2) + '\n'; + console.log('Updating /package.json availableLanguages'); + fs.writeFileSync(pkgPath, str, 'utf-8'); + } + } else { + console.log('Production locales are up to date!'); + } +});