diff --git a/js/package.json b/js/package.json index c0a6df879..799948443 100644 --- a/js/package.json +++ b/js/package.json @@ -53,6 +53,7 @@ "lint:cached": "npm run lint:css && npm run lint:js:cached", "lint:css": "stylelint ./src/**/*.css", "lint:fix": "npm run lint:js:fix", + "lint:i18n": "babel-node ./scripts/lint-i18n.js", "lint:js": "eslint --ignore-path .gitignore ./src/", "lint:js:cached": "eslint --cache --ignore-path .gitignore ./src/", "lint:js:fix": "eslint --fix --ignore-path .gitignore ./src/", diff --git a/js/scripts/lint-i18n.js b/js/scripts/lint-i18n.js new file mode 100644 index 000000000..d392353d0 --- /dev/null +++ b/js/scripts/lint-i18n.js @@ -0,0 +1,53 @@ +// Copyright 2015-2017 Parity Technologies (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import flatten from 'flat'; + +import * as defaults from '../src/i18n/_default'; +import { LANGUAGES, MESSAGES } from '../src/i18n/store'; + +const SKIP_LANG = ['en']; +const defaultKeys = Object.keys(flatten(Object.assign({}, defaults, LANGUAGES))); + +Object + .keys(MESSAGES) + .filter((lang) => !SKIP_LANG.includes(lang)) + .forEach((lang) => { + const messageKeys = Object.keys(MESSAGES[lang]); + let extra = 0; + let found = 0; + let missing = 0; + + console.log(`*** Checking translations for ${lang}`); + + defaultKeys.forEach((key) => { + if (messageKeys.includes(key)) { + found++; + } else { + missing++; + console.log(` Missing ${key}`); + } + }); + + messageKeys.forEach((key) => { + if (!defaultKeys.includes(key)) { + extra++; + console.log(` Extra ${key}`); + } + }); + + console.log(`Found ${found} keys, missing ${missing} keys, ${extra} extraneous keys\n`); + }); diff --git a/js/src/i18n/store.js b/js/src/i18n/store.js index e9666c8c0..fdceb6beb 100644 --- a/js/src/i18n/store.js +++ b/js/src/i18n/store.js @@ -73,3 +73,8 @@ export default class Store { return instance; } } + +export { + LANGUAGES, + MESSAGES +};