mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Add API to return all registered plugin language translations
This commit is contained in:
parent
a75faaea1c
commit
66d051bed3
6 changed files with 180 additions and 2 deletions
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
]
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
[
|
||||
{
|
||||
"XXXXXX": "This is XXXXXX string",
|
||||
"YYYY_PPPP": "This is YYYY_PPPP string"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,6 @@
|
|||
[
|
||||
{
|
||||
"FFFFFFFFFFFF": "This is FFFFFFFFFFFF string",
|
||||
"ZZZ": "This is ZZZ string"
|
||||
}
|
||||
]
|
Loading…
Add table
Add a link
Reference in a new issue