(function (module) { "use strict"; /*global RELATIVE_PATH, config*/ var translator = {}, files = { loaded: {}, loading: {}, callbacks: {} // could be combined with "loading" in future. }; module.exports = translator; // Use this in plugins to add your own translation files. translator.addTranslation = function(filename, translations) { files.loaded[filename] = translations; }; translator.getLanguage = function() { return config.defaultLang; }; translator.prepareDOM = function() { // Load the appropriate timeago locale file if (config.defaultLang !== 'en_GB') { // Correct NodeBB language codes to timeago codes, if necessary var languageCode; switch(config.defaultLang) { case 'cs': languageCode = 'cz'; break; case 'fa_IR': languageCode = 'fa'; break; case 'pt_BR': languageCode = 'pt-br'; break; case 'zh_TW': languageCode = 'zh-TW'; break; case 'zh_CN': languageCode = 'zh-CN'; break; default: languageCode = config.defaultLang; break; } $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { $('span.timeago').timeago(); }).fail(function() { $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en.js'); }); // Add directional code if necessary translator.get('language:dir', function(value) { if (value) { $('html').css('direction', value).attr('data-dir', value); } }); } }; translator.get = function (key, callback) { var parsedKey = key.split(':'), languageFile = parsedKey[0]; parsedKey = parsedKey[1]; translator.load(languageFile, function (languageData) { if (callback) { callback(languageData[parsedKey]); } return languageData[parsedKey]; }); }; translator.mget = function (keys, callback) { var async = require('async'); function getKey(key, callback) { translator.get(key, function(value) { callback(null, value); }); } async.map(keys, getKey, callback); }; translator.translate = function (data, callback) { if (!data) { return callback(data); } function insertLanguage(text, key, value, variables) { if (value) { for (var i = 1, ii = variables.length; i < ii; i++) { var variable = variables[i].replace(']]', ''); value = value.replace('%' + i, variable); } text = text.replace(key, value); } else { var string = key.split(':'); text = text.replace(key, string[string.length-1].replace(/\]+$/, '')); } return text; } var keys = data.match(/\[\[.*?\]\]/g), loading = 0; if (!keys) { return callback(data); } for (var i=0; i