express-intlayer
Version:
Manage internationalization i18n in a simple way for express application.
66 lines • 2.09 kB
JavaScript
import { createModuleAugmentation } from "@intlayer/chokidar";
import { getConfiguration } from "@intlayer/config";
import {
getTranslation,
localeDetector
} from "@intlayer/core";
import { createNamespace } from "cls-hooked";
const { middleware, internationalization } = getConfiguration({
verbose: true
});
const { headerName, cookieName } = middleware;
const appNamespace = createNamespace("app");
createModuleAugmentation();
const translateFunction = (_req, res, _next) => (content, locale) => {
const { locale: currentLocale, defaultLocale } = res.locals;
const targetLocale = locale ?? currentLocale;
if (typeof content === "undefined") {
return "";
}
if (typeof content === "string") {
return content;
}
if (typeof content?.[targetLocale] === "undefined") {
if (typeof content?.[defaultLocale] === "undefined") {
return content;
} else {
return getTranslation(content, defaultLocale);
}
}
return getTranslation(content, targetLocale);
};
const intlayer = () => (req, res, next) => {
const localeCookie = req.cookies?.[cookieName];
const localeHeader = req.headers?.[headerName];
const negotiatorHeaders = {};
if (req && typeof req.headers === "object") {
for (const key in req.headers) {
if (typeof req.headers[key] === "string") {
negotiatorHeaders[key] = req.headers[key];
}
}
}
const localeDetected = localeDetector(
negotiatorHeaders,
internationalization.locales,
internationalization.defaultLocale
);
res.locals.locale_header = localeHeader;
res.locals.locale_cookie = localeCookie;
res.locals.locale_detected = localeDetected;
res.locals.locale = localeCookie ?? localeHeader ?? localeDetected;
res.locals.defaultLocale = internationalization.defaultLocale;
const t2 = translateFunction(req, res, next);
res.locals.t = t2;
appNamespace.run(() => {
appNamespace.set("t", t2);
next();
});
};
const t = (content, locale) => appNamespace.get("t")(content, locale);
export {
intlayer,
t,
translateFunction
};
//# sourceMappingURL=index.mjs.map