diff --git a/src/plugins.js b/src/plugins.js index 3bb303e3d7..138948374c 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -364,6 +364,15 @@ var fs = require('fs'), translator.addTranslation(language, filename, lang.file); }); + var fallbackPath; + for(var resource in Plugins.customLanguageFallbacks) { + fallbackPath = Plugins.customLanguageFallbacks[resource]; + params.router.get('/language/:lang/' + resource + '.json', function(req, res, next) { + winston.verbose('[translator] No resource file found for ' + req.params.lang + '/' + resource + ', using provided fallback language file'); + res.sendFile(fallbackPath); + }); + } + callback(null); } diff --git a/src/plugins/load.js b/src/plugins/load.js index d0f94c019a..569880bb0c 100644 --- a/src/plugins/load.js +++ b/src/plugins/load.js @@ -159,7 +159,8 @@ module.exports = function(Plugins) { return callback(); } - var pathToFolder = path.join(__dirname, '../../node_modules/', pluginData.id, pluginData.languages); + var pathToFolder = path.join(__dirname, '../../node_modules/', pluginData.id, pluginData.languages), + fallbackMap = {}; utils.walk(pathToFolder, function(err, languages) { var arr = []; @@ -183,13 +184,20 @@ module.exports = function(Plugins) { route: pathToLang.replace(pathToFolder, '') }); + if (pluginData.defaultLang) { + fallbackMap[path.basename(pathToLang, '.json')] = path.join(pathToFolder, pluginData.defaultLang, path.basename(pathToLang)); + } + next(); }); }, function(err) { if (err) { return callback(err); } + Plugins.customLanguages = Plugins.customLanguages.concat(arr); + Plugins.customLanguageFallbacks = fallbackMap; + callback(); }); });