nuxt-i18n-micro 3.18.2 → 3.18.3
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/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/c5d2004e-f981-4363-a9ec-4d72cf7f4a8f.json +1 -0
- package/dist/client/index.html +1 -1
- package/dist/module.json +1 -1
- package/dist/runtime/plugins/06.redirect.js +11 -33
- package/dist/runtime/server/middleware/i18n.global.js +14 -32
- package/dist/runtime/utils/accept-language.d.ts +3 -0
- package/dist/runtime/utils/accept-language.js +21 -0
- package/dist/runtime/utils/resolve-server-locale.d.ts +21 -0
- package/dist/runtime/utils/resolve-server-locale.js +30 -0
- package/package.json +3 -3
- package/dist/client/_nuxt/builds/meta/a653a17d-86f7-440a-a09c-9871b01bc761.json +0 -1
package/dist/client/200.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696441,false]</script></body></html>
|
package/dist/client/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696442,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f","timestamp":1781272693310}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f","timestamp":1781272693310,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|
package/dist/client/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696442,false]</script></body></html>
|
package/dist/module.json
CHANGED
|
@@ -4,6 +4,7 @@ import { createError, defineNuxtPlugin, navigateTo, useRequestEvent, useRoute, u
|
|
|
4
4
|
import { useI18nLocale } from "../composables/useI18nLocale.js";
|
|
5
5
|
import { getEnabledLocaleCodes } from "../utils/active-locales.js";
|
|
6
6
|
import { getLocaleCookieName, getLocaleCookieOptions } from "../utils/cookie.js";
|
|
7
|
+
import { resolvePreferredLocale } from "../utils/resolve-server-locale.js";
|
|
7
8
|
import { resolveI18nConfigWithRuntimeOverrides } from "../utils/runtime-i18n-config.js";
|
|
8
9
|
const DEBUG = process.env.NUXT_I18N_DEBUG_REDIRECT === "1";
|
|
9
10
|
const DEFAULT_STATIC_PATTERNS = [
|
|
@@ -42,13 +43,6 @@ function isInternalPath(path, excludePatterns) {
|
|
|
42
43
|
}
|
|
43
44
|
return false;
|
|
44
45
|
}
|
|
45
|
-
function parseAcceptLanguage(header) {
|
|
46
|
-
if (!header) return [];
|
|
47
|
-
return header.split(",").map((entry) => {
|
|
48
|
-
const [lang] = entry.split(";");
|
|
49
|
-
return (lang ?? "").trim();
|
|
50
|
-
}).filter((s) => s.length > 0);
|
|
51
|
-
}
|
|
52
46
|
export default defineNuxtPlugin({
|
|
53
47
|
name: "i18n-redirect",
|
|
54
48
|
enforce: "pre",
|
|
@@ -107,32 +101,16 @@ export default defineNuxtPlugin({
|
|
|
107
101
|
const isPrerenderOrBot = !!(prerenderHeader || userAgent.includes("Nitro") || !userAgent);
|
|
108
102
|
const skipRedirect = !isRootPath && autoDetectPath !== "*" && isPrerenderOrBot;
|
|
109
103
|
if (!skipRedirect) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
preferredLocale = cookieVal;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (i18nConfig.autoDetectLanguage && preferredLocale === defaultLocale) {
|
|
124
|
-
const acceptHeader = getHeader(event, "accept-language");
|
|
125
|
-
const langs = parseAcceptLanguage(acceptHeader);
|
|
126
|
-
for (const lang of langs) {
|
|
127
|
-
const lowerCaseLanguage = lang.toLowerCase();
|
|
128
|
-
const primaryLanguage = lowerCaseLanguage.split("-")[0];
|
|
129
|
-
const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
|
|
130
|
-
if (found) {
|
|
131
|
-
preferredLocale = found;
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
104
|
+
const localeState = autoDetectPath !== "*" ? useState("i18n-locale", () => null) : null;
|
|
105
|
+
let preferredLocale = resolvePreferredLocale({
|
|
106
|
+
defaultLocale,
|
|
107
|
+
validLocales,
|
|
108
|
+
autoDetectLanguage: i18nConfig.autoDetectLanguage,
|
|
109
|
+
stateLocale: localeState?.value ?? null,
|
|
110
|
+
cookieLocale: cookieName ? getCookie(event, cookieName) : null,
|
|
111
|
+
acceptLanguageHeader: getHeader(event, "accept-language"),
|
|
112
|
+
ignoreStateLocale: autoDetectPath === "*"
|
|
113
|
+
});
|
|
136
114
|
if (autoDetectPath === "*" && !hasLocalePrefix) {
|
|
137
115
|
preferredLocale = defaultLocale;
|
|
138
116
|
}
|
|
@@ -3,14 +3,8 @@ import { getI18nConfig } from "#i18n-internal/strategy";
|
|
|
3
3
|
import { useRuntimeConfig } from "#imports";
|
|
4
4
|
import { getEnabledLocaleCodes } from "../../utils/active-locales.js";
|
|
5
5
|
import { getLocaleCookieName } from "../../utils/cookie.js";
|
|
6
|
+
import { resolveServerLocale } from "../../utils/resolve-server-locale.js";
|
|
6
7
|
import { resolveI18nConfigWithRuntimeOverrides } from "../../utils/runtime-i18n-config.js";
|
|
7
|
-
function parseAcceptLanguage(header) {
|
|
8
|
-
if (!header) return [];
|
|
9
|
-
return header.split(",").map((entry) => {
|
|
10
|
-
const [lang] = entry.split(";");
|
|
11
|
-
return (lang ?? "").trim();
|
|
12
|
-
}).filter((s) => s.length > 0);
|
|
13
|
-
}
|
|
14
8
|
export default defineEventHandler(async (event) => {
|
|
15
9
|
const path = event.path || getRequestURL(event).pathname;
|
|
16
10
|
if (path.startsWith("/api") || path.startsWith("/_nuxt") || path.startsWith("/_locales") || path.startsWith("/__")) return;
|
|
@@ -24,31 +18,19 @@ export default defineEventHandler(async (event) => {
|
|
|
24
18
|
const pathSegments = path.split("/").filter(Boolean);
|
|
25
19
|
const firstSegment = pathSegments[0];
|
|
26
20
|
const hasLocaleInUrl = Boolean(firstSegment && validLocales.includes(firstSegment));
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const acceptHeader = getHeader(event, "accept-language");
|
|
41
|
-
const langs = parseAcceptLanguage(acceptHeader);
|
|
42
|
-
for (const lang of langs) {
|
|
43
|
-
const lowerCaseLanguage = lang.toLowerCase();
|
|
44
|
-
const primaryLanguage = lowerCaseLanguage.split("-")[0];
|
|
45
|
-
const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
|
|
46
|
-
if (found) {
|
|
47
|
-
locale = found;
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
21
|
+
const cookieName = getLocaleCookieName(config);
|
|
22
|
+
const queryLocale = getQuery(event).locale ? String(getQuery(event).locale) : null;
|
|
23
|
+
const cookieLocale = cookieName ? getCookie(event, cookieName) : null;
|
|
24
|
+
const locale = resolveServerLocale({
|
|
25
|
+
defaultLocale,
|
|
26
|
+
validLocales,
|
|
27
|
+
autoDetectLanguage: config.autoDetectLanguage,
|
|
28
|
+
hasLocaleInUrl,
|
|
29
|
+
urlLocale: firstSegment ?? null,
|
|
30
|
+
queryLocale,
|
|
31
|
+
cookieLocale,
|
|
32
|
+
acceptLanguageHeader: getHeader(event, "accept-language")
|
|
33
|
+
});
|
|
52
34
|
event.context.i18n = {
|
|
53
35
|
locale,
|
|
54
36
|
translations: {}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function parseAcceptLanguage(header: string | undefined): string[];
|
|
2
|
+
export declare function detectLocaleFromAcceptLanguage(header: string | undefined, validLocales: string[]): string | null;
|
|
3
|
+
export declare function applyAutoDetectLanguage(locale: string, hasExplicitPreference: boolean, autoDetectLanguage: boolean | undefined, acceptLanguageHeader: string | undefined, validLocales: string[]): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function parseAcceptLanguage(header) {
|
|
2
|
+
if (!header) return [];
|
|
3
|
+
return header.split(",").map((entry) => {
|
|
4
|
+
const [lang] = entry.split(";");
|
|
5
|
+
return (lang ?? "").trim();
|
|
6
|
+
}).filter((s) => s.length > 0);
|
|
7
|
+
}
|
|
8
|
+
export function detectLocaleFromAcceptLanguage(header, validLocales) {
|
|
9
|
+
const langs = parseAcceptLanguage(header);
|
|
10
|
+
for (const lang of langs) {
|
|
11
|
+
const lowerCaseLanguage = lang.toLowerCase();
|
|
12
|
+
const primaryLanguage = lowerCaseLanguage.split("-")[0];
|
|
13
|
+
const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
|
|
14
|
+
if (found) return found;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
export function applyAutoDetectLanguage(locale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader, validLocales) {
|
|
19
|
+
if (!autoDetectLanguage || hasExplicitPreference) return locale;
|
|
20
|
+
return detectLocaleFromAcceptLanguage(acceptLanguageHeader, validLocales) ?? locale;
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ResolveServerLocaleInput {
|
|
2
|
+
defaultLocale: string;
|
|
3
|
+
validLocales: string[];
|
|
4
|
+
autoDetectLanguage?: boolean;
|
|
5
|
+
hasLocaleInUrl: boolean;
|
|
6
|
+
urlLocale?: string | null;
|
|
7
|
+
queryLocale?: string | null;
|
|
8
|
+
cookieLocale?: string | null;
|
|
9
|
+
acceptLanguageHeader?: string | null;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolveServerLocale(input: ResolveServerLocaleInput): string;
|
|
12
|
+
export interface ResolvePreferredLocaleInput {
|
|
13
|
+
defaultLocale: string;
|
|
14
|
+
validLocales: string[];
|
|
15
|
+
autoDetectLanguage?: boolean;
|
|
16
|
+
stateLocale?: string | null;
|
|
17
|
+
cookieLocale?: string | null;
|
|
18
|
+
acceptLanguageHeader?: string | null;
|
|
19
|
+
ignoreStateLocale?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function resolvePreferredLocale(input: ResolvePreferredLocaleInput): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { applyAutoDetectLanguage } from "./accept-language.js";
|
|
2
|
+
export function resolveServerLocale(input) {
|
|
3
|
+
const { defaultLocale, validLocales, autoDetectLanguage, hasLocaleInUrl, urlLocale, queryLocale, cookieLocale, acceptLanguageHeader } = input;
|
|
4
|
+
let locale = defaultLocale;
|
|
5
|
+
let hasExplicitPreference = false;
|
|
6
|
+
if (hasLocaleInUrl && urlLocale && validLocales.includes(urlLocale)) {
|
|
7
|
+
locale = urlLocale;
|
|
8
|
+
hasExplicitPreference = true;
|
|
9
|
+
} else if (queryLocale && validLocales.includes(queryLocale)) {
|
|
10
|
+
locale = queryLocale;
|
|
11
|
+
hasExplicitPreference = true;
|
|
12
|
+
} else if (cookieLocale && validLocales.includes(cookieLocale)) {
|
|
13
|
+
locale = cookieLocale;
|
|
14
|
+
hasExplicitPreference = true;
|
|
15
|
+
}
|
|
16
|
+
return applyAutoDetectLanguage(locale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader ?? void 0, validLocales);
|
|
17
|
+
}
|
|
18
|
+
export function resolvePreferredLocale(input) {
|
|
19
|
+
const { defaultLocale, validLocales, autoDetectLanguage, stateLocale, cookieLocale, acceptLanguageHeader, ignoreStateLocale = false } = input;
|
|
20
|
+
let preferredLocale = defaultLocale;
|
|
21
|
+
let hasExplicitPreference = false;
|
|
22
|
+
if (!ignoreStateLocale && stateLocale && validLocales.includes(stateLocale)) {
|
|
23
|
+
preferredLocale = stateLocale;
|
|
24
|
+
hasExplicitPreference = true;
|
|
25
|
+
} else if (cookieLocale && validLocales.includes(cookieLocale)) {
|
|
26
|
+
preferredLocale = cookieLocale;
|
|
27
|
+
hasExplicitPreference = true;
|
|
28
|
+
}
|
|
29
|
+
return applyAutoDetectLanguage(preferredLocale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader ?? void 0, validLocales);
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-i18n-micro",
|
|
3
|
-
"version": "3.18.
|
|
3
|
+
"version": "3.18.3",
|
|
4
4
|
"description": "Nuxt I18n Micro is a lightweight, high-performance internationalization module for Nuxt, designed to handle multi-language support with minimal overhead, fast build times, and efficient runtime performance.",
|
|
5
5
|
"repository": "s00d/nuxt-i18n-micro",
|
|
6
6
|
"license": "MIT",
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"@i18n-micro/core": "1.3.1",
|
|
78
78
|
"@i18n-micro/route-strategy": "1.1.7",
|
|
79
79
|
"@i18n-micro/test-utils": "1.2.1",
|
|
80
|
-
"@i18n-micro/
|
|
81
|
-
"@i18n-micro/
|
|
80
|
+
"@i18n-micro/path-strategy": "1.3.2",
|
|
81
|
+
"@i18n-micro/types": "1.2.2"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@biomejs/biome": "^2.3.14",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"a653a17d-86f7-440a-a09c-9871b01bc761","timestamp":1779781934227,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|