35 lines
860 B
JavaScript
35 lines
860 B
JavaScript
|
|
const fs = require('fs');
|
||
|
|
const path = require('path');
|
||
|
|
|
||
|
|
const cache = {};
|
||
|
|
|
||
|
|
function loadLocale(lang) {
|
||
|
|
if (cache[lang]) return cache[lang];
|
||
|
|
try {
|
||
|
|
const filePath = path.join(__dirname, lang + '.json');
|
||
|
|
if (fs.existsSync(filePath)) {
|
||
|
|
cache[lang] = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
||
|
|
return cache[lang];
|
||
|
|
}
|
||
|
|
} catch (e) {}
|
||
|
|
return loadLocale('nl');
|
||
|
|
}
|
||
|
|
|
||
|
|
function t(lang, key, ...args) {
|
||
|
|
const dict = loadLocale(lang || 'nl');
|
||
|
|
let val = dict[key] || key;
|
||
|
|
if (args.length > 0) {
|
||
|
|
args.forEach((a, i) => { val = val.replace(`{${i}}`, a); });
|
||
|
|
}
|
||
|
|
return val;
|
||
|
|
}
|
||
|
|
|
||
|
|
function localeMiddleware(req, res, next) {
|
||
|
|
const lang = (req.session && req.session.lang) || 'nl';
|
||
|
|
res.locals.__ = (key, ...args) => t(lang, key, ...args);
|
||
|
|
res.locals.lang = lang;
|
||
|
|
next();
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = { t, loadLocale, localeMiddleware };
|