UNPKG

express-mesh

Version:

A Gentics Mesh frontend for Express.

98 lines (97 loc) 3.2 kB
'use strict'; var u = require('./meshUtil'); var path = require('path'); var fs = require('fs'); /** * Cache object, where the language JSONs will be stored. * @type {{}} */ var langCache = {}; // TODO: This is a hack for now, we net to properly access the current language var actLang; var initialized = false; /** * Read the language files from the configured language folder and populate the langCache object. * @param config MeshConfiguration */ function readLanguageFiles(config) { var langFilePath = config.languageDirectory; if (u.isDefined(langFilePath) && langFilePath !== '' && (!initialized || config.development)) { langCache = {}; config.languages.forEach(function (lang) { var parsedLang; try { parsedLang = JSON.parse(fs.readFileSync(path.join(langFilePath, 'lang-' + lang + '.json'), 'utf8')); if (u.isDefined(parsedLang)) { langCache[lang] = parsedLang; } } catch (e) { console.error('Could not read language', lang, e); } }); initialized = true; } if (!u.isDefined(actLang)) { // set default for actLang actLang = config.languages[0]; } } exports.readLanguageFiles = readLanguageFiles; /** * Get the active language form the MeshRequest. * @param req The MeshRequest * @returns {string} The current language or default language if none is set. */ function getActiveLanguage(req) { var active = req.meshConfig.languages[0]; if (u.isDefined(req.session) && u.isDefined(req.session['language'])) { active = req.session['language']; } return active; } exports.getActiveLanguage = getActiveLanguage; /** * Set the active language. * @param req The MeshRequest * @param lang The language code, that should be set as the current language. */ function setActiveLanguage(req, lang) { var configuredLanguages = req.meshConfig.languages; if (u.isDefined(req.session) && configuredLanguages.indexOf(lang) > -1) { req.session['language'] = lang; } } exports.setActiveLanguage = setActiveLanguage; /** * Get the language array sorted for language fallback with the Mesh backend. * @param req The MeshRequest. * @returns {string[]} The language array, where the current language is the first element. */ function getLanguageArray(req) { var configuredLanguages = req.meshConfig.languages, activeLanguage = getActiveLanguage(req); actLang = activeLanguage; return configuredLanguages.sort(function (a, b) { if (a === activeLanguage) { return -1; } else if (b === activeLanguage) { return 1; } else { return 0; } }); } exports.getLanguageArray = getLanguageArray; function translateFilter(input, language) { if (!language) { language = actLang; } var replacement; replacement = u.isDefined(input) && u.isDefined(langCache[language]) && u.isDefined(langCache[language][input]) ? langCache[language][input] : input; return replacement; } exports.translateFilter = translateFilter;