mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Add HAPI API to get all plugins translation files
This commit is contained in:
parent
66d051bed3
commit
c3403e7530
6 changed files with 135 additions and 15 deletions
|
@ -121,6 +121,49 @@ var getAllRegisteredPluginsLanguageTranslations = function (language, callback)
|
|||
});
|
||||
};
|
||||
|
||||
var getAllRegisteredPluginsCommonSupportedLanguages = function (callback) {
|
||||
var registeredPlugins = [];
|
||||
var allPluginsLanguages = [];
|
||||
var firstRun = true;
|
||||
|
||||
try {
|
||||
registeredPlugins = getAllRegisteredPlugins();
|
||||
} catch (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
async.each(registeredPlugins, function (pluginName, eachCB) {
|
||||
getRegisteredPluginLanguages(pluginName, function (err, pluginLangs) {
|
||||
if (err) {
|
||||
return eachCB(err);
|
||||
} else {
|
||||
var tmpCommonLangs = [];
|
||||
var tmpIndx = 0;
|
||||
var allLangLength = allPluginsLanguages.length;
|
||||
for (var i = 0; i < allLangLength; i++) {
|
||||
if (pluginLangs.indexOf(allPluginsLanguages[i]) !== -1) {
|
||||
tmpCommonLangs[tmpIndx++] = allPluginsLanguages[i];
|
||||
}
|
||||
}
|
||||
if (firstRun) {
|
||||
allPluginsLanguages = pluginLangs;
|
||||
firstRun = false;
|
||||
} else {
|
||||
allPluginsLanguages = tmpCommonLangs;
|
||||
}
|
||||
return eachCB(null);
|
||||
}
|
||||
});
|
||||
}, function (eachErr) {
|
||||
if (eachErr) {
|
||||
return callback(eachErr);
|
||||
} else {
|
||||
return callback(null, allPluginsLanguages);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function saveTranslationToFile(translationFullFileName, translationJson) {
|
||||
var jsonToWrite = [];
|
||||
if (fs.existsSync(translationFullFileName)) {
|
||||
|
@ -199,3 +242,4 @@ module.exports.getAllRegisteredPluginsLanguageTranslations = getAllRegisteredPlu
|
|||
module.exports.getPluginTranslationDetails = getPluginTranslationDetails;
|
||||
module.exports.getRegisteredPluginStoragePath = getRegisteredPluginStoragePath;
|
||||
module.exports.getRegisteredPluginLanguages = getRegisteredPluginLanguages;
|
||||
module.exports.getAllRegisteredPluginsCommonSupportedLanguages = getAllRegisteredPluginsCommonSupportedLanguages;
|
||||
|
|
|
@ -8,14 +8,13 @@ const DEFAULT_LANGUAGE = 'en';
|
|||
export default function (server) {
|
||||
|
||||
server.route({
|
||||
path: '/api/i18n/translations/{plugin}',
|
||||
path: '/api/i18n/translations',
|
||||
method: 'GET',
|
||||
handler(req, reply) {
|
||||
var pluginName = req.params.plugin;
|
||||
var acceptLanguage = req.headers['accept-language'];
|
||||
var languages = langParser.parse(acceptLanguage);
|
||||
|
||||
getPluginLanguageTranslations(pluginName, languages, function (err, translations) {
|
||||
getAllPluginsLanguageTranslations(languages, function (err, translations) {
|
||||
if (err) {
|
||||
reply(Boom.internal(err));
|
||||
return;
|
||||
|
@ -27,27 +26,29 @@ export default function (server) {
|
|||
|
||||
};
|
||||
|
||||
function getPluginLanguageTranslations(pluginName, acceptLanguages, cb) {
|
||||
function getAllPluginsLanguageTranslations(acceptLanguages, cb) {
|
||||
|
||||
getPluginSupportedLanguage(pluginName, acceptLanguages, function (err, language) {
|
||||
getAllPluginsSupportedLanguage(acceptLanguages, function (err, language) {
|
||||
if (err) {
|
||||
return cb (err);
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
i18n.getRegisteredPluginLanguageTranslations(pluginName, language, function (err, translationJson) {
|
||||
i18n.getAllRegisteredPluginsLanguageTranslations(language, function (err, translationsJson) {
|
||||
if (err) {
|
||||
return cb (err);
|
||||
return cb(err);
|
||||
} else {
|
||||
return cb (null, translationJson);
|
||||
return cb(null, translationsJson);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getPluginSupportedLanguage(pluginName, acceptLanguages, cb) {
|
||||
i18n.getRegisteredPluginLanguages(pluginName, function (err, languages) {
|
||||
function getAllPluginsSupportedLanguage(acceptLanguages, cb) {
|
||||
var langStr = DEFAULT_LANGUAGE;
|
||||
|
||||
i18n.getAllRegisteredPluginsCommonSupportedLanguages(function (err, pluginCommonLanguages) {
|
||||
if (err) {
|
||||
return cb (err);
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
var foundLang = false;
|
||||
|
@ -58,7 +59,7 @@ function getPluginSupportedLanguage(pluginName, acceptLanguages, cb) {
|
|||
} else {
|
||||
langStr = language.code;
|
||||
}
|
||||
if (languages.indexOf(langStr) > -1) {
|
||||
if (pluginCommonLanguages.indexOf(langStr) > -1) {
|
||||
foundLang = true;
|
||||
return true;
|
||||
} else {
|
||||
|
@ -71,7 +72,7 @@ function getPluginSupportedLanguage(pluginName, acceptLanguages, cb) {
|
|||
|
||||
acceptLanguages.some(function partialMatch(language) {
|
||||
langStr = language.code;
|
||||
languages.some(function (lang) {
|
||||
pluginCommonLanguages.some(function (lang) {
|
||||
if (lang.match('^' + langStr)) {
|
||||
langStr = lang;
|
||||
foundLang = true;
|
||||
|
@ -93,5 +94,4 @@ function getPluginSupportedLanguage(pluginName, acceptLanguages, cb) {
|
|||
|
||||
return cb (null, DEFAULT_LANGUAGE);
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
@ -254,6 +254,34 @@ describe('Test registering and retrieving all translations for test_plugin_1 and
|
|||
});
|
||||
});
|
||||
|
||||
it('Common supported plugin languages for test_plugin_1 and test_plugin_2' , function (done) {
|
||||
var result = true;
|
||||
var expectedCommonLanguages = ['en'];
|
||||
|
||||
i18n.getAllRegisteredPluginsCommonSupportedLanguages(function (err, actualCommonLanguages) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
result = false;
|
||||
}
|
||||
|
||||
if (actualCommonLanguages.length !== expectedCommonLanguages.length) {
|
||||
result = false;
|
||||
} else {
|
||||
var index = actualCommonLanguages.length;
|
||||
actualCommonLanguages.sort();
|
||||
expectedCommonLanguages.sort();
|
||||
while (index--) {
|
||||
if (actualCommonLanguages[index] !== expectedCommonLanguages[index]) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
expect(result).to.be(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
var translationPluginStorePath = i18n.getRegisteredPluginStoragePath('test_plugin_1');
|
||||
process.execSync('rm -rf ' + translationPluginStorePath);
|
||||
|
|
|
@ -3,6 +3,7 @@ define({
|
|||
'test/unit/api/ingest/index',
|
||||
'test/unit/api/search/index',
|
||||
'test/unit/api/scripts/index'
|
||||
'test/unit/api/i18n/index'
|
||||
],
|
||||
excludeInstrumentation: /(fixtures|node_modules)\//,
|
||||
loaderOptions: {
|
||||
|
|
21
test/unit/api/i18n/_get.js
Normal file
21
test/unit/api/i18n/_get.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
define(function (require) {
|
||||
var Promise = require('bluebird');
|
||||
var expect = require('intern/dojo/node!expect.js');
|
||||
|
||||
return function (bdd, scenarioManager, request) {
|
||||
bdd.describe('GET translations', function postIngest() {
|
||||
|
||||
bdd.beforeEach(function () {
|
||||
return scenarioManager.reload('emptyKibana');
|
||||
});
|
||||
|
||||
bdd.it('should return 200 for an valid payload', function validPayload() {
|
||||
return Promise.all([
|
||||
request.get('/i18n/translations').expect(200),
|
||||
]);
|
||||
});
|
||||
//TODO (hickeyma): Extend test cases once I have refactored the module and hapi APIs after feedback on removeing plugin namd and language from API
|
||||
|
||||
});
|
||||
};
|
||||
});
|
26
test/unit/api/i18n/index.js
Normal file
26
test/unit/api/i18n/index.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
define(function (require) {
|
||||
var bdd = require('intern!bdd');
|
||||
var serverConfig = require('intern/dojo/node!../../../server_config');
|
||||
var ScenarioManager = require('intern/dojo/node!../../../fixtures/scenario_manager');
|
||||
var request = require('intern/dojo/node!supertest-as-promised');
|
||||
var url = require('intern/dojo/node!url');
|
||||
var _ = require('intern/dojo/node!lodash');
|
||||
var expect = require('intern/dojo/node!expect.js');
|
||||
var get = require('./_get');
|
||||
|
||||
bdd.describe('i18n API', function () {
|
||||
var scenarioManager = new ScenarioManager(url.format(serverConfig.servers.elasticsearch));
|
||||
request = request(url.format(serverConfig.servers.kibana) + '/api');
|
||||
console.log('i18n bdd request: ', request);
|
||||
|
||||
bdd.before(function () {
|
||||
return scenarioManager.load('emptyKibana');
|
||||
});
|
||||
|
||||
bdd.after(function () {
|
||||
return scenarioManager.unload('emptyKibana');
|
||||
});
|
||||
|
||||
get(bdd, scenarioManager, request);
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue