Provide single endpoint to load all node message catalogs

Replaces potentially dozens of http requests with one or two.
This commit is contained in:
Nick O'Leary
2017-04-21 11:49:35 +01:00
parent bb2649d063
commit 7bd0943412
5 changed files with 46 additions and 22 deletions

View File

@@ -147,6 +147,7 @@ function init(_server,_runtime) {
adminApp.get('/credentials/:type/:id', needsPermission("credentials.read"),credentials.get,errorHandler);
adminApp.get('/locales/nodes',locales.getAllNodes,errorHandler);
adminApp.get(/locales\/(.+)\/?$/,locales.get,errorHandler);
// Library

View File

@@ -16,6 +16,7 @@
var fs = require('fs');
var path = require('path');
var i18n;
var redNodes;
function determineLangFromHeaders(acceptedLanguages){
var lang = i18n.defaultLang;
@@ -25,21 +26,35 @@ function determineLangFromHeaders(acceptedLanguages){
}
return lang;
}
module.exports = {
init: function(runtime) {
i18n = runtime.i18n;
redNodes = runtime.nodes;
},
get: function(req,res) {
var namespace = req.params[0];
var lngs = req.query.lng;
namespace = namespace.replace(/\.json$/,"");
var lang = determineLangFromHeaders(req.acceptsLanguages() || []);
var lang = req.query.lng; //determineLangFromHeaders(req.acceptsLanguages() || []);
var prevLang = i18n.i.lng();
// Trigger a load from disk of the language if it is not the default
i18n.i.setLng(lang, function(){
var catalog = i18n.catalog(namespace,lang);
res.json(catalog||{});
});
i18n.i.setLng(prevLang);
},
getAllNodes: function(req,res) {
var lngs = req.query.lng;
var nodeList = redNodes.getNodeList();
var result = {};
nodeList.forEach(function(n) {
if (n.module !== "node-red") {
result[n.id] = i18n.catalog(n.id,lngs)||{};
}
});
res.json(result);
},
determineLangFromHeaders: determineLangFromHeaders
}