Add API to return all registered plugin language translations

This commit is contained in:
Martin Hickey 2016-06-29 18:02:34 +01:00
parent a75faaea1c
commit 66d051bed3
6 changed files with 180 additions and 2 deletions

View file

@ -15,6 +15,7 @@
"@elastic/eslint-config-kibana": "0.0.2",
"@elastic/plugin-helpers": "5.0.0-beta1",
"accept-language-parser": "^1.1.2",
"async": "^2.0.0-rc.6",
"babel-eslint": "4.1.8",
"bluebird": "^3.4.0",
"boom": "^3.2.1",

View file

@ -1,3 +1,4 @@
var async = require('async');
var fs = require('fs');
var kibanaPackage = require('../../../utils/package_json');
var mkdirp = require('mkdirp');
@ -92,6 +93,34 @@ var getRegisteredPluginLanguageTranslations = function (pluginName, language, ca
});
};
var getAllRegisteredPluginsLanguageTranslations = function (language, callback) {
var registeredPlugins = [];
var allPluginsTranslationsJson = [];
try {
registeredPlugins = getAllRegisteredPlugins();
} catch (err) {
return callback(err);
}
async.each(registeredPlugins, function (pluginName, eachCB) {
getRegisteredPluginLanguageTranslations(pluginName, language, function (err, translationJson) {
if (err) {
return eachCB(err);
} else {
allPluginsTranslationsJson = allPluginsTranslationsJson.concat(translationJson);
return eachCB(null);
}
});
}, function (eachErr) {
if (eachErr) {
return callback(eachErr);
} else {
return callback(null, allPluginsTranslationsJson);
}
});
};
function saveTranslationToFile(translationFullFileName, translationJson) {
var jsonToWrite = [];
if (fs.existsSync(translationFullFileName)) {
@ -149,8 +178,24 @@ function getFileName(fullPath) {
return fullPath.replace(/^.*[\\\/]/, '');
}
function getAllRegisteredPlugins() {
var pluginNamesList = [];
var topDir = TRANSLATION_STORE_PATH;
var dirs = fs.readdirSync(topDir);
for (var i in dirs) {
if (!dirs.hasOwnProperty(i)) continue;
var name = topDir + '/' + dirs[i];
if (fs.statSync(name).isDirectory()) {
pluginNamesList.push(dirs[i]);
}
}
return pluginNamesList;
}
module.exports.registerPluginLanguageTranslations = registerPluginLanguageTranslations;
module.exports.getRegisteredPluginLanguageTranslations = getRegisteredPluginLanguageTranslations;
module.exports.getAllRegisteredPluginsLanguageTranslations = getAllRegisteredPluginsLanguageTranslations;
module.exports.getPluginTranslationDetails = getPluginTranslationDetails;
module.exports.getRegisteredPluginStoragePath = getRegisteredPluginStoragePath;
module.exports.getRegisteredPluginLanguages = getRegisteredPluginLanguages;

View file

@ -0,0 +1,10 @@
[
{
"XXXXXX": "This is XXXXXX string",
"YYYY_PPPP": "This is YYYY_PPPP string"
},
{
"FFFFFFFFFFFF": "This is FFFFFFFFFFFF string",
"ZZZ": "This is ZZZ string"
}
]

View file

@ -136,8 +136,6 @@ describe('Test registering translations for test_plugin_1', function () {
result = false;
}
console.log('Expected langs: ' + expectedLanguages);
console.log('Actual langs: ' + actualLanguages);
if (actualLanguages.length !== expectedLanguages.length) {
result = false;
} else {
@ -163,6 +161,108 @@ describe('Test registering translations for test_plugin_1', function () {
});
});
describe('Test registering and retrieving all translations for test_plugin_1 and test_plugin_2', function () {
it('Translation English bundle for test_plugin_1' , function (done) {
var result = true;
var language = 'en';
var pluginName = 'test_plugin_1';
var pluginTranslationPath = __dirname + '/' + pluginName + '/translations';
i18n.registerPluginLanguageTranslations(pluginName, pluginTranslationPath, language, function (err) {
if (err) {
console.log(err);
result = false;
} else {
var expectedTranslationJsonFile = __dirname + '/data/reference/' + pluginName + '/' + language + '.json';
var expectedTranslationJson = require(expectedTranslationJsonFile);
expectedTranslationJson = JSON.stringify(expectedTranslationJson);
i18n.getRegisteredPluginLanguageTranslations(pluginName, language, function (err, actualTranslationJson) {
if (err) {
console.log(err);
result = false;
} else {
actualTranslationJson = JSON.stringify(actualTranslationJson);
if (actualTranslationJson !== expectedTranslationJson) {
result = false;
}
}
});
}
expect(result).to.be(true);
done();
});
});
it('Translation English bundle for test_plugin_2' , function (done) {
var result = true;
var language = 'en';
var pluginName = 'test_plugin_2';
var pluginTranslationPath = __dirname + '/' + pluginName + '/translations';
i18n.registerPluginLanguageTranslations(pluginName, pluginTranslationPath, language, function (err) {
if (err) {
console.log(err);
result = false;
} else {
var expectedTranslationJsonFile = __dirname + '/data/reference/' + pluginName + '/' + language + '.json';
var expectedTranslationJson = require(expectedTranslationJsonFile);
expectedTranslationJson = JSON.stringify(expectedTranslationJson);
i18n.getRegisteredPluginLanguageTranslations(pluginName, language, function (err, actualTranslationJson) {
if (err) {
console.log(err);
result = false;
} else {
actualTranslationJson = JSON.stringify(actualTranslationJson);
if (actualTranslationJson !== expectedTranslationJson) {
result = false;
}
}
});
}
expect(result).to.be(true);
done();
});
});
it('Compare registerd translations for test_plugin_1 and test_plugin_2' , function (done) {
var result = true;
var language = 'en';
var expectedTranslationJson = [
{'NO_SSL':'Dont run the dev server using HTTPS',
'DEV':'Run the server with development mode defaults'},
{'NO_RUN_SERVER':'Dont run the dev server',
'HOME':'Run along home now!'},
{'XXXXXX':'This is XXXXXX string',
'YYYY_PPPP':'This is YYYY_PPPP string'},
{'FFFFFFFFFFFF':'This is FFFFFFFFFFFF string',
'ZZZ':'This is ZZZ string'}];
i18n.getAllRegisteredPluginsLanguageTranslations(language, function (err, actualTranslationJson) {
if (err) {
console.log(err);
result = false;
} else {
actualTranslationJson = actualTranslationJson.sort(compareLists);
expectedTranslationJson = expectedTranslationJson.sort(compareLists);
if (JSON.stringify(actualTranslationJson) !== JSON.stringify(expectedTranslationJson)) {
result = false;
}
}
expect(result).to.be(true);
done();
});
});
after(function (done) {
var translationPluginStorePath = i18n.getRegisteredPluginStoragePath('test_plugin_1');
process.execSync('rm -rf ' + translationPluginStorePath);
translationPluginStorePath = i18n.getRegisteredPluginStoragePath('test_plugin_2');
process.execSync('rm -rf ' + translationPluginStorePath);
done();
});
});
function getPluginTranslationLanguages(pluginName, pluginTranslationPath, cb) {
var translationFiles = [];
var languageList = [];
@ -180,3 +280,13 @@ function getPluginTranslationFiles(pluginName, pluginTranslationPath, cb) {
return cb(null, translationFiles);
});
}
function compareLists(a, b) {
if (Object.keys(a)[0] > Object.keys(b)[0]) {
return 1;
}
if (Object.keys(a)[0] < Object.keys(b)[0]) {
return -1;
}
return 0;
}

View file

@ -0,0 +1,6 @@
[
{
"XXXXXX": "This is XXXXXX string",
"YYYY_PPPP": "This is YYYY_PPPP string"
}
]

View file

@ -0,0 +1,6 @@
[
{
"FFFFFFFFFFFF": "This is FFFFFFFFFFFF string",
"ZZZ": "This is ZZZ string"
}
]