translator refactor

no longer loads all language files on startup
v1.18.x
barisusakli 11 years ago
parent 90540f64cf
commit 557426c1c9

@ -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'));

@ -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;

@ -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();
}
});
},

Loading…
Cancel
Save