diff --git a/tasks/build/verify_translations.js b/tasks/build/verify_translations.js index d739b134f6e9d0..fa991c065e2819 100644 --- a/tasks/build/verify_translations.js +++ b/tasks/build/verify_translations.js @@ -8,7 +8,6 @@ import * as i18nVerify from '../utils/i18n_verify_keys'; export default function (grunt) { grunt.registerTask('_build:verifyTranslations', function () { const done = this.async(); - const parsePaths = [fromRoot('/src/ui/views/*.jade'), fromRoot('/src/core_plugins/kibana/public/management/sections/indices/*.html')]; const serverConfig = { env: 'production', @@ -35,7 +34,7 @@ export default function (grunt) { const kbnServer = new KbnServer(serverConfig); kbnServer.ready() - .then(() => verifyTranslations(kbnServer.uiI18n, parsePaths)) + .then(() => verifyTranslations(kbnServer.uiI18n)) .then(() => kbnServer.close()) .then(done) .catch((err) => { @@ -45,12 +44,30 @@ export default function (grunt) { }); } -function verifyTranslations(uiI18nObj, parsePaths) +function verifyTranslations(uiI18nObj) { - return uiI18nObj.getAllTranslations() - .then(function (translations) { - return i18nVerify.getTranslationKeys(parsePaths) - .then(function (translationKeys) { + const translationPatterns = [ + { regEx: 'translate=\"([^\"]+)\"', + parsePaths: [fromRoot('/src/core_plugins/kibana/*.html')] }, + { regEx: 'i18n\\(\'(.*)\'\\)', + parsePaths: [fromRoot('/src/ui/views/*.jade')] } + ]; + const translationKeys = []; + + const keyPromises = _.map(translationPatterns, (pattern) => { + return i18nVerify.getTranslationKeys(pattern.regEx, pattern.parsePaths) + .then(function (keys) { + const arrayLength = keys.length; + for (let i = 0; i < arrayLength; i++) { + translationKeys.push(keys[i]); + } + }); + }); + + return Promise.all(keyPromises) + .then(function () { + return uiI18nObj.getAllTranslations() + .then(function (translations) { const keysNotTranslatedPerLocale = i18nVerify.getNonTranslatedKeys(translationKeys, translations); if (!_.isEmpty(keysNotTranslatedPerLocale)) { const str = JSON.stringify(keysNotTranslatedPerLocale); diff --git a/tasks/utils/i18n_verify_keys.js b/tasks/utils/i18n_verify_keys.js index 86312dae349f88..d6760289a9b555 100644 --- a/tasks/utils/i18n_verify_keys.js +++ b/tasks/utils/i18n_verify_keys.js @@ -9,15 +9,15 @@ const globProm = Promise.promisify(glob); /** * Return all the translation keys found for the file pattern + * @param {String} translationPattern - regEx pattern for translations * @param {Array} filesPatterns - List of file patterns to be checkd for translation keys - * @param {Array} translations - List of translations keys * @return {Promise} - A Promise object which will return a String Array of the translation keys * not translated then the Object will contain all non translated translation keys with value of file the key is from */ -export function getTranslationKeys(filesPatterns) { +export function getTranslationKeys(translationPattern, filesPatterns) { return getFilesToVerify(filesPatterns) .then(function (filesToVerify) { - return getKeys(filesToVerify); + return getKeys(translationPattern, filesToVerify); }); } @@ -44,7 +44,7 @@ function getFilesToVerify(verifyFilesPatterns) { return Promise.map(verifyFilesPatterns, (verifyFilesPattern) => { const baseSearchDir = path.dirname(verifyFilesPattern); - const pattern = path.basename(verifyFilesPattern); + const pattern = path.join('**', path.basename(verifyFilesPattern)); return globProm(pattern, { cwd: baseSearchDir, matchBase: true }) .then(function (files) { for (const file of files) { @@ -57,9 +57,8 @@ function getFilesToVerify(verifyFilesPatterns) { }); } -function getKeys(filesToVerify) { +function getKeys(translationPattern, filesToVerify) { const translationKeys = []; - const translationPattern = 'i18n\\(\'(.*)\'\\)|translate="(.*)"'; const translationRegEx = new RegExp(translationPattern, 'g'); const filePromises = _.map(filesToVerify, (file) => {