@voltro/i18n 0.69.1 → 0.71.0
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.
- package/CHANGELOG.md +1369 -111
- package/dist/server.d.ts +6 -2
- package/dist/server.js +19 -16
- package/package.json +1 -1
package/dist/server.d.ts
CHANGED
|
@@ -22,14 +22,14 @@ export declare const isSupportedTimeZone: (name: string | null | undefined) => n
|
|
|
22
22
|
export declare const LOCALE_COOKIE = "voltro:locale";
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Build the per-request resolver: cookie > Accept-Language > default, then the
|
|
25
|
+
* Build the per-request resolver: route locale > cookie > Accept-Language > default, then the
|
|
26
26
|
* matching wrapper.
|
|
27
27
|
*
|
|
28
28
|
* Returns `undefined` when the app ships no usable catalog, so a caller can
|
|
29
29
|
* spread the result and omit `outerWrap` entirely rather than passing an
|
|
30
30
|
* identity wrap — an app without locales must render exactly as before.
|
|
31
31
|
*/
|
|
32
|
-
export declare const makeSsrI18nResolver: (args: SsrI18nResolverArgs) => ((cookieHeader?: string | null, acceptLanguageHeader?: string | null) => ResolvedSsrI18n | undefined);
|
|
32
|
+
export declare const makeSsrI18nResolver: (args: SsrI18nResolverArgs) => ((cookieHeader?: string | null, acceptLanguageHeader?: string | null, routeLocale?: string | null) => ResolvedSsrI18n | undefined);
|
|
33
33
|
|
|
34
34
|
/** What a renderer needs to render one request in the right locale. */
|
|
35
35
|
export declare interface ResolvedSsrI18n {
|
|
@@ -48,6 +48,10 @@ export declare interface ResolvedSsrI18n {
|
|
|
48
48
|
export declare const resolveLocale: (args: ResolveLocaleArgs) => string;
|
|
49
49
|
|
|
50
50
|
export declare interface ResolveLocaleArgs {
|
|
51
|
+
/** The matched `[locale]` route parameter, not a guessed pathname prefix.
|
|
52
|
+
* Wins only on an EXACT supported spelling; unknown route values fall
|
|
53
|
+
* through to request preferences. Does not validate or redirect a route. */
|
|
54
|
+
readonly routeLocale?: string | null | undefined;
|
|
51
55
|
/** Raw `Cookie:` request header, or null/undefined when absent. */
|
|
52
56
|
readonly cookieHeader?: string | null;
|
|
53
57
|
/** Raw `Accept-Language:` request header, or null/undefined when
|
package/dist/server.js
CHANGED
|
@@ -29,16 +29,18 @@ var o = a, s = (e) => RegExp(`(?:^|;\\s*)${e.replace(/[.*+?^${}()|[\]\\]/g, "\\$
|
|
|
29
29
|
q: r
|
|
30
30
|
};
|
|
31
31
|
}).filter((e) => e !== null).sort((e, t) => t.q - e.q) : [], d = (e) => {
|
|
32
|
-
let {
|
|
33
|
-
if (
|
|
34
|
-
|
|
32
|
+
let { routeLocale: t, cookieHeader: n, acceptLanguageHeader: r, supported: i, defaultLocale: a } = e;
|
|
33
|
+
if (t && i.includes(t)) return t;
|
|
34
|
+
let s = c(n, o);
|
|
35
|
+
if (s) {
|
|
36
|
+
let e = l(s, i);
|
|
35
37
|
if (e) return e;
|
|
36
38
|
}
|
|
37
|
-
for (let e of u(
|
|
38
|
-
let t = l(e.tag,
|
|
39
|
+
for (let e of u(r)) {
|
|
40
|
+
let t = l(e.tag, i);
|
|
39
41
|
if (t) return t;
|
|
40
42
|
}
|
|
41
|
-
return
|
|
43
|
+
return a;
|
|
42
44
|
}, f = (e) => {
|
|
43
45
|
let { cookieHeader: t, configured: n, defaultTimeZone: a } = e;
|
|
44
46
|
if (!n) return;
|
|
@@ -47,23 +49,24 @@ var o = a, s = (e) => RegExp(`(?:^|;\\s*)${e.replace(/[.*+?^${}()|[\]\\]/g, "\\$
|
|
|
47
49
|
return r(o) ? o : r(a) ? a : "UTC";
|
|
48
50
|
}, p = (e) => {
|
|
49
51
|
let { wraps: t, supported: n, defaultLocale: r } = e;
|
|
50
|
-
return Object.keys(t).length === 0 ? () => void 0 : (i, a) => {
|
|
51
|
-
let
|
|
52
|
+
return Object.keys(t).length === 0 ? () => void 0 : (i, a, o) => {
|
|
53
|
+
let s = d({
|
|
54
|
+
routeLocale: o ?? null,
|
|
52
55
|
cookieHeader: i ?? null,
|
|
53
56
|
acceptLanguageHeader: a ?? null,
|
|
54
57
|
supported: n,
|
|
55
58
|
defaultLocale: r
|
|
56
|
-
}),
|
|
59
|
+
}), c = f({
|
|
57
60
|
cookieHeader: i ?? null,
|
|
58
61
|
configured: e.timeZone ?? null,
|
|
59
62
|
defaultTimeZone: e.defaultTimeZone ?? null
|
|
60
|
-
}),
|
|
61
|
-
if (
|
|
62
|
-
locale:
|
|
63
|
-
timeZone:
|
|
64
|
-
outerWrap: (e) =>
|
|
65
|
-
timeZone:
|
|
66
|
-
renderedAt:
|
|
63
|
+
}), l = (e.now ?? Date.now)(), u = t[s] ?? t[r];
|
|
64
|
+
if (u !== void 0) return {
|
|
65
|
+
locale: s,
|
|
66
|
+
timeZone: c,
|
|
67
|
+
outerWrap: (e) => u(e, {
|
|
68
|
+
timeZone: c,
|
|
69
|
+
renderedAt: l
|
|
67
70
|
})
|
|
68
71
|
};
|
|
69
72
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/i18n",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"description": "Voltro's i18n layer — thin opinionated wrap over react-intl. Provides the framework's locale-resolution conventions (voltro:locale cookie + Accept-Language fallback), a typed message-catalog helper, and a slim provider component. Power users can import directly from react-intl for advanced APIs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|