pixelplanet/src/core/ttag.js
2022-09-11 01:31:26 +02:00

47 lines
1.1 KiB
JavaScript

/*
* Provide translation serverside
*/
import { TTag } from 'ttag';
import cookie from 'cookie';
import { languageFromLocalisation } from '../utils/location';
// eslint-disable-next-line max-len
const localeImports = require.context('../../i18n', false, /^\.[/\\]ssr-.+\.po$/);
const ttags = {
default: new TTag(),
};
(() => {
const langs = localeImports.keys();
for (let i = 0; i < langs.length; i += 1) {
const file = langs[i];
const ttag = new TTag();
// ./ssr-de.po
const lang = file.replace('./ssr-', '').replace('.po', '');
ttag.addLocale(lang, localeImports(file).default);
ttag.useLocale(lang);
ttags[lang] = ttag;
}
})();
export function getTTag(lang) {
return ttags[lang] || ttags.default;
}
/*
* express middleware for getting language
* It checks the lang cookie, and if not present,
* the Accept-Lanuage header
*/
export function expressTTag(req, res, next) {
const cookies = cookie.parse(req.headers.cookie || '');
const language = cookies.plang || req.headers['accept-language'];
req.lang = languageFromLocalisation(language);
req.ttag = getTTag(req.lang);
next();
}
export default ttags;