Update after review comments

Updated write function to be asynchronous
This commit is contained in:
Martin Hickey 2016-07-19 12:03:45 +01:00
parent e17653dd04
commit eaf35ab392
2 changed files with 56 additions and 27 deletions

View file

@ -6,9 +6,12 @@ import path from 'path';
import process from 'child_process';
import Promise from 'bluebird';
const join = Promise.join;
const readdir = Promise.promisify(fs.readdir);
const readFile = Promise.promisify(fs.readFile);
const stat = Promise.promisify(fs.stat);
const writeFile = Promise.promisify(fs.writeFile);
const mkdirpAsync = Promise.promisify(mkdirp);
const TRANSLATION_FILE_EXTENSION = 'json';
const TRANSLATION_STORE_PATH = kibanaPackage.__dirname + '/fixtures/translations';
@ -37,24 +40,18 @@ const registerTranslations = function (pluginTranslationPath) {
let languageList = [];
const translationStorePath = getTranslationStoragePath();
return getPluginTranslationDetails(pluginTranslationPath, translationFiles, languageList).then(function () {
try {
if (!fs.existsSync(translationStorePath)) {
mkdirp.sync(translationStorePath);
}
for (let fileIndx in translationFiles) {
if (!translationFiles.hasOwnProperty(fileIndx)) continue;
const translationFile = translationFiles[fileIndx];
return join(createTranslationDirectory(translationStorePath),
getPluginTranslationDetails(pluginTranslationPath, translationFiles, languageList),
function () {
return Promise.map(translationFiles, (translationFile) => {
const translationFileName = getFileName(translationFile);
const translationJson = require(translationFile);
const fileToWrite = translationStorePath + '/' + translationFileName;
saveTranslationToFile(fileToWrite, translationJson);
}
} catch (err) {
throw err;
}
});
return getTranslationJsonToWrite(fileToWrite, translationJson).then((jsonToWrite) => {
return writeFile(fileToWrite, JSON.stringify(jsonToWrite));
});
});
});
};
const getRegisteredLanguageTranslations = function (language) {
@ -76,8 +73,14 @@ const getRegisteredLanguageTranslations = function (language) {
};
function saveTranslationToFile(translationFullFileName, translationToAddJson) {
let jsonToWrite = [];
if (fs.existsSync(translationFullFileName)) {
return getTranslationJsonToWrite(translationFullFileName).then(function (jsonToWrite) {
return writeFile(translationFullFileName, JSON.stringify(jsonToWrite));
});
}
function getTranslationJsonToWrite(translationFullFileName, translationToAddJson) {
return stat(translationFullFileName).then((stats) => {
let jsonToWrite = [];
const currentTranslationJson = require(translationFullFileName);
jsonToWrite = currentTranslationJson;
for (let key in translationToAddJson) {
@ -87,10 +90,17 @@ function saveTranslationToFile(translationFullFileName, translationToAddJson) {
jsonToWrite[attrName] = attrValue;
}
}
} else {
jsonToWrite = translationToAddJson;
}
fs.writeFileSync(translationFullFileName, JSON.stringify(jsonToWrite));
return jsonToWrite;
}).catch(function (e) {
return translationToAddJson;
});
}
function createTranslationDirectory(translationStorePath) {
return stat(translationStorePath).then((stats) => {
}).catch(function (e) {
return mkdirpAsync(translationStorePath);
});
}
function getFilesRecursivelyFromTopDir(topDir, translationFiles, languageList) {
@ -124,6 +134,7 @@ function getTranslationDetailsFromDirectory(dir, translationFiles, languageList)
function getTranslationDetailsFromFile(fullFileName, translationFiles, languageList) {
const fileName = getFileName(fullFileName);
const fileExt = fileName.split('.').pop();
if (fileName === fileExt) return;
if (fileExt !== TRANSLATION_FILE_EXTENSION) return;
translationFiles.push(fullFileName);

View file

@ -1,15 +1,33 @@
import { i18n } from './i18n';
let registerTranslations = function (pluginTranslationPath, cb) {
i18n.registerTranslations(pluginTranslationPath, cb);
/*
Manages the language translations for Kibana. Responsible for loading translated content per language.
API:
Register translations:
registerTranslations(<path_to_where_translations_are>)
The path specified and its sub-directories will be traversed and all translations files will be bundled into one translation file per language and stored in the Kibana data directory. Returns a Promise object.
Fetch the list of currently supported languages:
Promise getRegisteredTranslationLanguages()
Returns a Promise object which will contain on resolve a list of all languages as language codes for which translations are registered
Fetch a specific language translated content bundle:
Promise getRegisteredLanguageTranslations(<language_code>)
Returns a Promise object which will contain on resolve a JSON object of all registered translations for the language code specified
*/
let registerTranslations = function (pluginTranslationPath) {
return i18n.registerTranslations(pluginTranslationPath);
};
let getRegisteredLanguageTranslations = function (language, cb) {
i18n.getRegisteredLanguageTranslations(language, cb);
let getRegisteredLanguageTranslations = function (language) {
return i18n.getRegisteredLanguageTranslations(language);
};
let getRegisteredTranslationLanguages = function (cb) {
i18n.getRegisteredTranslationLanguages(cb);
let getRegisteredTranslationLanguages = function () {
return i18n.getRegisteredTranslationLanguages();
};
module.exports.registerTranslations = registerTranslations;