UNPKG

express-intlayer

Version:

Manage internationalization i18n in a simple way for express application.

66 lines 2.09 kB
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