From 557426c1c9c8bf222386185b8e230e942356af0d Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sun, 13 Apr 2014 16:24:12 -0400 Subject: [PATCH] translator refactor no longer loads all language files on startup --- app.js | 2 -- public/src/translator.js | 70 ++++++++++++++++++---------------------- src/meta.js | 2 +- 3 files changed, 32 insertions(+), 42 deletions(-) diff --git a/app.js b/app.js index c72096d116..5d336a44fd 100644 --- a/app.js +++ b/app.js @@ -119,7 +119,6 @@ function start() { require('./src/database').init(function(err) { meta.configs.init(function () { var templates = require('./public/src/templates'), - translator = require('./public/src/translator'), webserver = require('./src/webserver'), sockets = require('./src/socket.io'), plugins = require('./src/plugins'), @@ -131,7 +130,6 @@ function start() { if (schema_ok || nconf.get('check-schema') === false) { sockets.init(webserver.server); plugins.init(); - translator.loadServer(); nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path')); nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates')); diff --git a/public/src/translator.js b/public/src/translator.js index 230e3c349e..4fad01e31a 100644 --- a/public/src/translator.js +++ b/public/src/translator.js @@ -2,18 +2,13 @@ "use strict"; /*global RELATIVE_PATH, config*/ - /* - * TODO: - * user side settings for preferred language - */ var translator = {}, files = { loaded: {}, loading: {}, callbacks: {} // could be combined with "loading" in future. - }, - isServer = false; + }; module.exports = translator; @@ -102,7 +97,7 @@ translator.translate = function (data, callback) { if (!data) { - return callback(data); + return callback(data); } function insertLanguage(text, key, value, variables) { @@ -148,7 +143,6 @@ checkComplete(); }); }(keys[key], parsedKey, languageFile, variables)); - } } } @@ -163,14 +157,12 @@ }; - translator.load = function (filename, callback) { - if (isServer === true) { - if (callback) { - callback(files.loaded[filename]); - } + translator.clearLoadedFiles = function() { + files.loaded = {}; + files.loading = {}; + }; - return files.loaded[filename]; - } + translator.load = function (filename, callback) { if (files.loaded[filename] && !files.loading[filename]) { if (callback) { @@ -182,11 +174,10 @@ files.callbacks[filename].push(callback); } } else { - var timestamp = new Date().getTime(); //debug files.loading[filename] = true; - $.getJSON(RELATIVE_PATH + '/language/' + config.defaultLang + '/' + filename + '.json?v=' + timestamp, function (language) { + load(filename, function(language) { files.loaded[filename] = language; if (callback) { @@ -202,38 +193,39 @@ } }; - translator.loadServer = function () { - isServer = true; + function load(filename, callback) { + if ('undefined' !== typeof window) { + loadClient(filename, callback); + } else { + loadServer(filename, callback); + } + } + + function loadClient(filename, callback) { + var timestamp = new Date().getTime(); + $.getJSON(config.relative_path + '/language/' + config.defaultLang + '/' + filename + '.json?v=' + timestamp, callback); + } - var utils = require('./utils.js'), - Meta = require('../../src/meta'), + function loadServer(filename, callback) { + var fs = require('fs'), path = require('path'), - fs = require('fs'), winston = require('winston'), - language = Meta.config.defaultLang || 'en_GB'; - + meta = require('../../src/meta'), + language = meta.config.defaultLang || 'en_GB'; if (!fs.existsSync(path.join(__dirname, '../language', language))) { - winston.warn('[translator] Language \'' + Meta.config.defaultLang + '\' not found. Defaulting to \'en_GB\''); + winston.warn('[translator] Language \'' + meta.config.defaultLang + '\' not found. Defaulting to \'en_GB\''); language = 'en_GB'; } - utils.walk(path.join(__dirname, '../language', language), function (err, data) { - - for (var d in data) { - if (data.hasOwnProperty(d)) { - // Only load .json files - if (path.extname(data[d]) === '.json') { - files.loaded[path.basename(data[d]).replace('.json', '')] = require(data[d]); - } else { - if (process.env.NODE_ENV === 'development') { - winston.warn('[translator] Skipping language file: ' + path.relative(path.join(__dirname, '../language'), data[d])); - } - } - } + fs.readFile(path.join(__dirname, '../language', language, filename + '.json'), function(err, data) { + if (err) { + return winston.error(err.message); } + + callback(JSON.parse(data.toString())); }); - }; + } if ('undefined' !== typeof window) { window.translator = module.exports; diff --git a/src/meta.js b/src/meta.js index 835bbc5f60..63dfb6629e 100644 --- a/src/meta.js +++ b/src/meta.js @@ -66,7 +66,7 @@ var fs = require('fs'), // this might be a good spot to add a hook if (field === 'defaultLang') { - translator.loadServer(); + translator.clearLoadedFiles(); } }); },