@things-factory/i18n-base 7.0.75 → 7.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -118,7 +118,11 @@ function setLanguage(context, lng, options = {}) {
|
|
|
118
118
|
context.language = context.lng = lng;
|
|
119
119
|
context.set('content-language', lng);
|
|
120
120
|
if (lookupCookie) {
|
|
121
|
-
context.cookies.set(lookupCookie, lng, {
|
|
121
|
+
context.cookies.set(lookupCookie, lng, {
|
|
122
|
+
httpOnly: false,
|
|
123
|
+
signed: false,
|
|
124
|
+
sameSite: 'strict'
|
|
125
|
+
});
|
|
122
126
|
}
|
|
123
127
|
if (lookupSession && context.session) {
|
|
124
128
|
context.session[lookupSession] = lng;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/middlewares/koa-i18next/index.ts"],"names":[],"mappings":"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","sourcesContent":["import detect from './detect'\n\nimport { config } from '@things-factory/env'\n\nconst disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)\nconst defaultLanguage = config.get('i18n/defaultLanguage', 'en-US')\n\nexport default function koaI18next(i18next, options = {} as any) {\n return async function i18nextMiddleware(ctx, next) {\n ctx.i18next = i18next\n\n let lng = disableUserFavoredLanguage ? defaultLanguage : detect(ctx, options)\n lng && setLanguage(ctx, lng, options)\n\n ctx.t = function (...args) {\n // do detect path\n if (!lng && isDetectPath(options.order)) {\n lng = detect(ctx, Object.assign(options, { order: ['path'] }))\n lng && setLanguage(ctx, lng, options)\n }\n\n if (args.length === 1) {\n args.push({})\n }\n\n for (let i = 0, len = args.length; i < len; i++) {\n let arg = args[i]\n if (typeof arg === 'object' && !Array.isArray(arg)) {\n arg.lng = lng\n }\n }\n return i18next.t.apply(i18next, args)\n }\n\n await next()\n }\n}\n\nfunction setPath(object, path, newValue) {\n let stack\n if (typeof path !== 'string') stack = [].concat(path)\n if (typeof path === 'string') stack = path.split('.')\n\n while (stack.length > 1) {\n let key = stack.shift()\n if (key.indexOf('###') > -1) key = key.replace(/###/g, '.')\n if (!object[key]) object[key] = {}\n object = object[key]\n }\n\n let key = stack.shift()\n if (key.indexOf('###') > -1) key = key.replace(/###/g, '.')\n object[key] = newValue\n}\n\nkoaI18next.getResourcesHandler = function (i18next, options) {\n options = options || {}\n let maxAge = options.maxAge || 60 * 60 * 24 * 30\n const propertyParam = options.propertyParam || 'query'\n\n return async function (ctx, next) {\n if (options.path && ctx.path !== options.path) {\n return await next()\n }\n if (!i18next.services.backendConnector) return ctx.throw(404, 'koa-i18next-middleware:: no backend configured')\n\n let resources = {}\n\n ctx.type = 'json'\n if (options.cache !== undefined ? options.cache : process.env.NODE_ENV === 'production') {\n ctx.set('Cache-Control', 'public, max-age=' + maxAge)\n ctx.set('Expires', new Date(new Date().getTime() + maxAge * 1000).toUTCString())\n } else {\n ctx.set('Pragma', 'no-cache')\n ctx.set('Cache-Control', 'no-cache')\n }\n\n let languages = ctx[propertyParam][options.lngParam || 'lng']\n ? ctx[propertyParam][options.lngParam || 'lng'].split(' ')\n : []\n let namespaces = ctx[propertyParam][options.nsParam || 'ns']\n ? ctx[propertyParam][options.nsParam || 'ns'].split(' ')\n : []\n\n // extend ns\n namespaces.forEach(ns => {\n if (i18next.options.ns && i18next.options.ns.indexOf(ns) < 0) i18next.options.ns.push(ns)\n })\n\n i18next.services.backendConnector.load(languages, namespaces, function () {\n languages.forEach(lng => {\n namespaces.forEach(ns => {\n setPath(resources, [lng, ns], i18next.getResourceBundle(lng, ns))\n })\n })\n ctx.body = resources\n })\n }\n}\n\nkoaI18next.getMissingKeyHandler = function (i18next, options) {\n options = options || {}\n const propertyParam = options.propertyParam || 'query'\n\n return async function (ctx, next) {\n if (options.path && ctx.path !== options.path) {\n return await next()\n }\n let lng = ctx[propertyParam][options.lngParam || 'lng']\n let ns = ctx[propertyParam][options.nsParam || 'ns']\n\n if (!i18next.services.backendConnector) return ctx.throw(404, 'koa-i18next-middleware:: no backend configured')\n\n for (var m in ctx.request.body) {\n i18next.services.backendConnector.saveMissing([lng], ns, m, ctx.request.body[m])\n }\n ctx.body = 'ok'\n }\n}\n\nfunction isDetectPath(order = []) {\n return order.indexOf('path') !== -1\n}\n\nfunction setLanguage(context, lng, options = {} as any) {\n const { lookupCookie, lookupPath, lookupSession } = options\n context.locals = Object.assign(context.locals || {}, { lng })\n context.state = Object.assign(context.state || {}, { lng })\n context.language = context.lng = lng\n context.set('content-language', lng)\n if (lookupCookie) {\n context.cookies.set(lookupCookie, lng, { httpOnly: false, signed: false })\n }\n if (lookupSession && context.session) {\n context.session[lookupSession] = lng\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/middlewares/koa-i18next/index.ts"],"names":[],"mappings":"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","sourcesContent":["import detect from './detect'\n\nimport { config } from '@things-factory/env'\n\nconst disableUserFavoredLanguage = config.get('i18n/disableUserFavoredLanguage', false)\nconst defaultLanguage = config.get('i18n/defaultLanguage', 'en-US')\n\nexport default function koaI18next(i18next, options = {} as any) {\n return async function i18nextMiddleware(ctx, next) {\n ctx.i18next = i18next\n\n let lng = disableUserFavoredLanguage ? defaultLanguage : detect(ctx, options)\n lng && setLanguage(ctx, lng, options)\n\n ctx.t = function (...args) {\n // do detect path\n if (!lng && isDetectPath(options.order)) {\n lng = detect(ctx, Object.assign(options, { order: ['path'] }))\n lng && setLanguage(ctx, lng, options)\n }\n\n if (args.length === 1) {\n args.push({})\n }\n\n for (let i = 0, len = args.length; i < len; i++) {\n let arg = args[i]\n if (typeof arg === 'object' && !Array.isArray(arg)) {\n arg.lng = lng\n }\n }\n return i18next.t.apply(i18next, args)\n }\n\n await next()\n }\n}\n\nfunction setPath(object, path, newValue) {\n let stack\n if (typeof path !== 'string') stack = [].concat(path)\n if (typeof path === 'string') stack = path.split('.')\n\n while (stack.length > 1) {\n let key = stack.shift()\n if (key.indexOf('###') > -1) key = key.replace(/###/g, '.')\n if (!object[key]) object[key] = {}\n object = object[key]\n }\n\n let key = stack.shift()\n if (key.indexOf('###') > -1) key = key.replace(/###/g, '.')\n object[key] = newValue\n}\n\nkoaI18next.getResourcesHandler = function (i18next, options) {\n options = options || {}\n let maxAge = options.maxAge || 60 * 60 * 24 * 30\n const propertyParam = options.propertyParam || 'query'\n\n return async function (ctx, next) {\n if (options.path && ctx.path !== options.path) {\n return await next()\n }\n if (!i18next.services.backendConnector) return ctx.throw(404, 'koa-i18next-middleware:: no backend configured')\n\n let resources = {}\n\n ctx.type = 'json'\n if (options.cache !== undefined ? options.cache : process.env.NODE_ENV === 'production') {\n ctx.set('Cache-Control', 'public, max-age=' + maxAge)\n ctx.set('Expires', new Date(new Date().getTime() + maxAge * 1000).toUTCString())\n } else {\n ctx.set('Pragma', 'no-cache')\n ctx.set('Cache-Control', 'no-cache')\n }\n\n let languages = ctx[propertyParam][options.lngParam || 'lng']\n ? ctx[propertyParam][options.lngParam || 'lng'].split(' ')\n : []\n let namespaces = ctx[propertyParam][options.nsParam || 'ns']\n ? ctx[propertyParam][options.nsParam || 'ns'].split(' ')\n : []\n\n // extend ns\n namespaces.forEach(ns => {\n if (i18next.options.ns && i18next.options.ns.indexOf(ns) < 0) i18next.options.ns.push(ns)\n })\n\n i18next.services.backendConnector.load(languages, namespaces, function () {\n languages.forEach(lng => {\n namespaces.forEach(ns => {\n setPath(resources, [lng, ns], i18next.getResourceBundle(lng, ns))\n })\n })\n ctx.body = resources\n })\n }\n}\n\nkoaI18next.getMissingKeyHandler = function (i18next, options) {\n options = options || {}\n const propertyParam = options.propertyParam || 'query'\n\n return async function (ctx, next) {\n if (options.path && ctx.path !== options.path) {\n return await next()\n }\n let lng = ctx[propertyParam][options.lngParam || 'lng']\n let ns = ctx[propertyParam][options.nsParam || 'ns']\n\n if (!i18next.services.backendConnector) return ctx.throw(404, 'koa-i18next-middleware:: no backend configured')\n\n for (var m in ctx.request.body) {\n i18next.services.backendConnector.saveMissing([lng], ns, m, ctx.request.body[m])\n }\n ctx.body = 'ok'\n }\n}\n\nfunction isDetectPath(order = []) {\n return order.indexOf('path') !== -1\n}\n\nfunction setLanguage(context, lng, options = {} as any) {\n const { lookupCookie, lookupPath, lookupSession } = options\n context.locals = Object.assign(context.locals || {}, { lng })\n context.state = Object.assign(context.state || {}, { lng })\n context.language = context.lng = lng\n context.set('content-language', lng)\n\n if (lookupCookie) {\n context.cookies.set(lookupCookie, lng, {\n httpOnly: false,\n signed: false,\n sameSite: 'strict'\n })\n }\n if (lookupSession && context.session) {\n context.session[lookupSession] = lng\n }\n}\n"]}
|