intor 2.3.2 → 2.3.4
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/README.md +10 -0
- package/dist/export/config/index.d.ts +1 -0
- package/dist/export/config/index.js +1 -0
- package/dist/export/index.d.ts +4 -0
- package/dist/export/index.js +4 -0
- package/dist/export/internal/index.d.ts +1 -0
- package/dist/export/next/index.d.ts +1 -0
- package/dist/export/next/index.js +4 -0
- package/dist/export/next/proxy/index.d.ts +1 -0
- package/dist/{exports → export}/next/proxy/index.js +0 -1
- package/dist/export/next/server/index.d.ts +1 -0
- package/dist/export/next/server/index.js +2 -0
- package/dist/export/react/index.d.ts +1 -0
- package/dist/export/react/index.js +10 -0
- package/dist/export/server/index.d.ts +1 -0
- package/dist/export/server/index.js +7 -0
- package/dist/src/adapters/next/navigation/link.d.ts +17 -7
- package/dist/src/adapters/next/navigation/link.js +35 -9
- package/dist/src/adapters/next/navigation/redirect.d.ts +10 -8
- package/dist/src/adapters/next/navigation/redirect.js +19 -18
- package/dist/src/adapters/next/navigation/use-pathname.d.ts +5 -5
- package/dist/src/adapters/next/navigation/use-pathname.js +7 -20
- package/dist/src/adapters/next/navigation/use-router.d.ts +15 -10
- package/dist/src/adapters/next/navigation/use-router.js +51 -17
- package/dist/src/adapters/next/proxy/index.d.ts +0 -1
- package/dist/src/adapters/next/proxy/intor-proxy.d.ts +10 -3
- package/dist/src/adapters/next/proxy/intor-proxy.js +38 -16
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +2 -4
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.js +2 -7
- package/dist/src/adapters/next/server/get-locale.d.ts +6 -0
- package/dist/src/adapters/next/server/get-locale.js +25 -0
- package/dist/src/adapters/next/server/get-translator.d.ts +7 -5
- package/dist/src/adapters/next/server/get-translator.js +4 -4
- package/dist/src/adapters/next/server/index.d.ts +1 -1
- package/dist/src/client/helpers/get-client-locale.d.ts +11 -0
- package/dist/src/client/helpers/get-client-locale.js +24 -0
- package/dist/src/client/helpers/index.d.ts +1 -0
- package/dist/src/client/react/contexts/config/context.js +0 -1
- package/dist/src/client/react/contexts/config/hook.js +0 -1
- package/dist/src/client/react/contexts/config/provider.d.ts +1 -1
- package/dist/src/client/react/contexts/config/provider.js +5 -2
- package/dist/src/client/react/contexts/config/types.d.ts +6 -5
- package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +1 -1
- package/dist/src/client/react/contexts/intor-provider/intor-provider.js +3 -3
- package/dist/src/client/react/contexts/intor-provider/types.d.ts +1 -2
- package/dist/src/client/react/contexts/locale/context.js +0 -1
- package/dist/src/client/react/contexts/locale/hook.js +0 -1
- package/dist/src/client/react/contexts/locale/provider.js +16 -26
- package/dist/src/client/react/contexts/locale/types.d.ts +4 -4
- package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +14 -16
- package/dist/src/client/react/contexts/locale/utils/change-locale.js +18 -27
- package/dist/src/client/react/contexts/messages/context.js +1 -4
- package/dist/src/client/react/contexts/messages/hook.js +0 -1
- package/dist/src/client/react/contexts/messages/provider.js +18 -11
- package/dist/src/client/react/contexts/messages/types.d.ts +4 -7
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +10 -6
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +44 -31
- package/dist/src/client/react/contexts/translator/context.js +1 -4
- package/dist/src/client/react/contexts/translator/hook.d.ts +1 -2
- package/dist/src/client/react/contexts/translator/hook.js +0 -1
- package/dist/src/client/react/contexts/translator/provider.js +21 -24
- package/dist/src/client/react/contexts/translator/types.d.ts +5 -5
- package/dist/src/client/react/contexts/translator-runtime/context.d.ts +3 -0
- package/dist/src/client/react/contexts/translator-runtime/context.js +3 -0
- package/dist/src/client/react/contexts/translator-runtime/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/translator-runtime/hook.js +9 -0
- package/dist/src/client/react/contexts/translator-runtime/index.d.ts +3 -0
- package/dist/src/client/react/contexts/translator-runtime/provider.d.ts +2 -0
- package/dist/src/client/react/contexts/translator-runtime/provider.js +15 -0
- package/dist/src/client/react/contexts/translator-runtime/types.d.ts +13 -0
- package/dist/src/client/react/index.d.ts +4 -3
- package/dist/src/client/react/navigation/index.d.ts +2 -0
- package/dist/src/client/react/navigation/use-navigation-strategy.d.ts +22 -0
- package/dist/src/client/react/navigation/use-navigation-strategy.js +37 -0
- package/dist/src/client/react/navigation/use-navigation-target.d.ts +12 -0
- package/dist/src/client/react/navigation/use-navigation-target.js +27 -0
- package/dist/src/client/react/{hooks → translator}/use-translator.d.ts +4 -4
- package/dist/src/client/react/{hooks → translator}/use-translator.js +4 -9
- package/dist/src/client/shared/utils/build-cookie-string.d.ts +5 -0
- package/dist/src/client/shared/utils/build-cookie-string.js +30 -0
- package/dist/src/client/shared/utils/index.d.ts +1 -0
- package/dist/src/client/shared/utils/locale/detect-browser-locale.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
- package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
- package/dist/src/client/shared/utils/locale/index.d.ts +4 -0
- package/dist/src/client/shared/utils/locale/set-document-locale.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/set-document-locale.js +12 -0
- package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +7 -0
- package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
- package/dist/src/config/constants/cookie.constants.js +2 -2
- package/dist/src/config/constants/routing.constants.js +6 -0
- package/dist/src/config/define-intor-config.d.ts +16 -0
- package/dist/src/config/define-intor-config.js +18 -4
- package/dist/src/config/index.d.ts +0 -3
- package/dist/src/config/resolvers/resolve-cookie-options.d.ts +0 -9
- package/dist/src/config/resolvers/resolve-cookie-options.js +0 -9
- package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +18 -1
- package/dist/src/config/resolvers/resolve-fallback-locales.js +17 -0
- package/dist/src/config/resolvers/resolve-routing-options.d.ts +0 -11
- package/dist/src/config/resolvers/resolve-routing-options.js +5 -13
- package/dist/src/config/types/cache.types.d.ts +2 -2
- package/dist/src/config/types/cookie.types.d.ts +10 -10
- package/dist/src/config/types/intor-config.types.d.ts +2 -0
- package/dist/src/config/types/loader.types.d.ts +15 -19
- package/dist/src/config/types/logger.types.d.ts +7 -5
- package/dist/src/config/types/routing.types.d.ts +33 -9
- package/dist/src/config/types/translator.types.d.ts +5 -2
- package/dist/src/config/validators/validate-default-locale.d.ts +9 -0
- package/dist/src/config/validators/validate-default-locale.js +9 -0
- package/dist/src/config/validators/validate-supported-locales.d.ts +8 -3
- package/dist/src/config/validators/validate-supported-locales.js +8 -3
- package/dist/src/routing/index.d.ts +1 -0
- package/dist/src/routing/locale/index.d.ts +1 -0
- package/dist/src/routing/locale/resolve-locale.d.ts +16 -0
- package/dist/src/routing/locale/resolve-locale.js +32 -0
- package/dist/src/routing/locale/types.d.ts +36 -0
- package/dist/src/routing/pathname/index.d.ts +1 -0
- package/dist/src/routing/pathname/resolve-pathname.d.ts +19 -0
- package/dist/src/routing/pathname/resolve-pathname.js +53 -0
- package/dist/src/routing/pathname/strategies/all.d.ts +6 -0
- package/dist/src/routing/pathname/strategies/all.js +23 -0
- package/dist/src/routing/pathname/strategies/except-default.d.ts +6 -0
- package/dist/src/routing/pathname/strategies/except-default.js +33 -0
- package/dist/src/routing/pathname/strategies/index.d.ts +3 -0
- package/dist/src/routing/pathname/strategies/none.d.ts +5 -0
- package/dist/src/routing/pathname/strategies/none.js +14 -0
- package/dist/src/routing/pathname/types.d.ts +28 -0
- package/dist/src/routing/resolve-navigation-target.d.ts +20 -0
- package/dist/src/routing/resolve-navigation-target.js +28 -0
- package/dist/src/routing/resolve-routing.d.ts +30 -0
- package/dist/src/routing/resolve-routing.js +38 -0
- package/dist/src/server/helpers/index.d.ts +1 -0
- package/dist/src/server/helpers/local-messages-from-url.d.ts +21 -0
- package/dist/src/server/helpers/local-messages-from-url.js +48 -0
- package/dist/src/server/index.d.ts +4 -2
- package/dist/src/server/intor/index.d.ts +1 -1
- package/dist/src/server/intor/intor.d.ts +12 -6
- package/dist/src/server/intor/intor.js +21 -39
- package/dist/src/server/intor/types.d.ts +5 -10
- package/dist/src/server/messages/index.d.ts +1 -5
- package/dist/src/server/messages/load-local-messages/index.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +11 -7
- package/dist/src/server/messages/load-local-messages/load-local-messages.js +46 -38
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +5 -14
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +12 -29
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +2 -2
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +8 -5
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
- package/dist/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/types.d.ts +12 -11
- package/dist/src/server/messages/load-messages.d.ts +10 -7
- package/dist/src/server/messages/load-messages.js +21 -21
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +6 -1
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +1 -0
- package/dist/src/server/messages/load-remote-messages/index.d.ts +1 -1
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +10 -4
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +65 -34
- package/dist/src/server/messages/load-remote-messages/types.d.ts +4 -3
- package/dist/src/server/messages/types.d.ts +2 -3
- package/dist/src/server/shared/logger/get-logger.d.ts +1 -1
- package/dist/src/server/shared/logger/get-logger.js +10 -5
- package/dist/src/server/translator/get-translator.d.ts +9 -9
- package/dist/src/server/translator/get-translator.js +6 -10
- package/dist/src/shared/constants/index.d.ts +1 -0
- package/dist/src/shared/error/intor-error.d.ts +4 -4
- package/dist/src/shared/types/generated.d.ts +53 -0
- package/dist/src/shared/types/index.d.ts +2 -0
- package/dist/src/shared/types/routing.d.ts +6 -0
- package/dist/src/shared/types/{translator-instance.types.d.ts → translator-instance.d.ts} +17 -19
- package/dist/src/shared/utils/deep-merge.d.ts +8 -0
- package/dist/src/shared/utils/deep-merge.js +36 -0
- package/dist/src/shared/utils/index.d.ts +4 -8
- package/dist/src/shared/utils/is-external-destination.d.ts +7 -0
- package/dist/src/shared/utils/is-external-destination.js +11 -0
- package/dist/src/shared/utils/locale/get-locale-from-accept-language.d.ts +19 -0
- package/dist/src/shared/utils/locale/get-locale-from-accept-language.js +45 -0
- package/dist/src/shared/utils/locale/get-locale-from-host.d.ts +17 -0
- package/dist/src/shared/utils/locale/get-locale-from-host.js +31 -0
- package/dist/src/shared/utils/locale/get-locale-from-pathname.d.ts +31 -0
- package/dist/src/shared/utils/locale/get-locale-from-pathname.js +52 -0
- package/dist/src/shared/utils/locale/get-locale-from-query.d.ts +20 -0
- package/dist/src/shared/utils/locale/get-locale-from-query.js +33 -0
- package/dist/src/shared/utils/locale/index.d.ts +4 -0
- package/dist/src/shared/utils/normalizers/index.d.ts +3 -0
- package/dist/src/shared/utils/normalizers/normalize-cache-key.d.ts +14 -0
- package/dist/src/shared/utils/{normalize-cache-key.js → normalizers/normalize-cache-key.js} +17 -1
- package/dist/src/shared/utils/normalizers/normalize-locale.d.ts +22 -0
- package/dist/src/shared/utils/{locale → normalizers}/normalize-locale.js +21 -4
- package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.d.ts +1 -1
- package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.js +1 -1
- package/dist/src/shared/utils/pathname/get-unprefixed-pathname.d.ts +14 -0
- package/dist/src/shared/utils/pathname/get-unprefixed-pathname.js +39 -0
- package/dist/src/shared/utils/pathname/index.d.ts +1 -0
- package/dist/src/shared/utils/pathname/locale-prefix-pathname.d.ts +16 -0
- package/dist/src/{adapters/next/shared/utils → shared/utils/pathname}/locale-prefix-pathname.js +17 -12
- package/dist/src/shared/utils/pathname/localize-pathname.d.ts +23 -0
- package/dist/src/shared/utils/pathname/localize-pathname.js +36 -0
- package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +6 -11
- package/dist/src/shared/utils/pathname/standardize-pathname.js +8 -8
- package/package.json +74 -65
- package/dist/exports/config/index.d.ts +0 -2
- package/dist/exports/config/index.js +0 -4
- package/dist/exports/index.d.ts +0 -5
- package/dist/exports/index.js +0 -11
- package/dist/exports/next/index.d.ts +0 -3
- package/dist/exports/next/index.js +0 -9
- package/dist/exports/next/proxy/index.d.ts +0 -2
- package/dist/exports/next/server/index.d.ts +0 -2
- package/dist/exports/next/server/index.js +0 -2
- package/dist/exports/react/index.d.ts +0 -2
- package/dist/exports/react/index.js +0 -6
- package/dist/exports/server/index.d.ts +0 -2
- package/dist/exports/server/index.js +0 -7
- package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +0 -7
- package/dist/src/adapters/next/navigation/utils/should-full-reload.js +0 -19
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +0 -16
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +0 -58
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.d.ts +0 -12
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +0 -60
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +0 -16
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +0 -81
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +0 -10
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +0 -22
- package/dist/src/adapters/next/proxy/utils/create-response.d.ts +0 -17
- package/dist/src/adapters/next/proxy/utils/create-response.js +0 -42
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +0 -8
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +0 -28
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +0 -12
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +0 -13
- package/dist/src/adapters/next/server/get-i18n-context.d.ts +0 -9
- package/dist/src/adapters/next/server/get-i18n-context.js +0 -47
- package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +0 -1
- package/dist/src/adapters/next/shared/constants/pathname-header-name.js +0 -4
- package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +0 -16
- package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +0 -18
- package/dist/src/adapters/next/shared/utils/localize-pathname.js +0 -36
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +0 -8
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +0 -28
- package/dist/src/client/react/contexts/translate-handlers/context.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/context.js +0 -6
- package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/hook.js +0 -10
- package/dist/src/client/react/contexts/translate-handlers/index.d.ts +0 -3
- package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/provider.js +0 -11
- package/dist/src/client/react/contexts/translate-handlers/types.d.ts +0 -7
- package/dist/src/client/shared/utils/get-initial-locale.d.ts +0 -11
- package/dist/src/client/shared/utils/get-initial-locale.js +0 -21
- package/dist/src/shared/types/generated.types.d.ts +0 -30
- package/dist/src/shared/utils/client/build-cookie-string.d.ts +0 -9
- package/dist/src/shared/utils/client/build-cookie-string.js +0 -33
- package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +0 -13
- package/dist/src/shared/utils/client/set-locale-cookie-browser.js +0 -21
- package/dist/src/shared/utils/locale/normalize-locale.d.ts +0 -4
- package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +0 -5
- package/dist/src/shared/utils/locale/resolve-preferred-locale.js +0 -26
- package/dist/src/shared/utils/merge-messages.d.ts +0 -6
- package/dist/src/shared/utils/merge-messages.js +0 -13
- package/dist/src/shared/utils/normalize-cache-key.d.ts +0 -3
- package/dist/src/shared/utils/pathname/extract-pathname.d.ts +0 -28
- package/dist/src/shared/utils/pathname/extract-pathname.js +0 -58
- package/dist/src/shared/utils/resolve-namespaces.d.ts +0 -10
- package/dist/src/shared/utils/resolve-namespaces.js +0 -33
- /package/dist/src/server/{messages/shared → shared/messages}/global-messages-pool.d.ts +0 -0
- /package/dist/src/server/{messages/shared → shared/messages}/global-messages-pool.js +0 -0
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
-
import type { NextRequest } from "next/server";
|
|
3
|
-
/**
|
|
4
|
-
* Handle routing for "all" prefix.
|
|
5
|
-
*
|
|
6
|
-
* - If URL has locale prefix → use it and override cookie.
|
|
7
|
-
* - If no prefix and no cookie:
|
|
8
|
-
* - If redirect disabled → respond directly.
|
|
9
|
-
* - If redirect enabled → detect initial locale and redirect.
|
|
10
|
-
* - If no prefix but cookie exists → redirect using cookie locale.
|
|
11
|
-
*/
|
|
12
|
-
export declare const handlePrefixAll: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { createResponse } from '../utils/create-response.js';
|
|
2
|
-
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
-
import 'lodash.merge';
|
|
4
|
-
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Handle routing for "all" prefix.
|
|
8
|
-
*
|
|
9
|
-
* - If URL has locale prefix → use it and override cookie.
|
|
10
|
-
* - If no prefix and no cookie:
|
|
11
|
-
* - If redirect disabled → respond directly.
|
|
12
|
-
* - If redirect enabled → detect initial locale and redirect.
|
|
13
|
-
* - If no prefix but cookie exists → redirect using cookie locale.
|
|
14
|
-
*/
|
|
15
|
-
const handlePrefixAll = async (config, request) => {
|
|
16
|
-
const { cookie, routing } = config;
|
|
17
|
-
const { maybeLocale, isLocalePrefixed } = extractPathname({
|
|
18
|
-
config,
|
|
19
|
-
pathname: request.nextUrl.pathname,
|
|
20
|
-
});
|
|
21
|
-
const localeFromCookie = request.cookies.get(cookie.name)?.value;
|
|
22
|
-
// ▼ URL has a locale prefix, (e.g. https://example.com/en)
|
|
23
|
-
if (isLocalePrefixed) {
|
|
24
|
-
// ▶ Go directly and override cookie
|
|
25
|
-
return createResponse({
|
|
26
|
-
request,
|
|
27
|
-
config,
|
|
28
|
-
locale: maybeLocale,
|
|
29
|
-
setCookieOptions: { override: true },
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
// ▼ URL doesn't have a locale prefix, (e.g. https://example.com/)
|
|
33
|
-
// No cookie, so is first visit
|
|
34
|
-
if (!localeFromCookie) {
|
|
35
|
-
// Not using redirect (Do not set cookie)
|
|
36
|
-
if (!routing.firstVisit.redirect) {
|
|
37
|
-
// ▶ Go directly
|
|
38
|
-
return createResponse({ request, config });
|
|
39
|
-
}
|
|
40
|
-
// Decide to use locale from browser or defaultLocale
|
|
41
|
-
const initialLocale = await determineInitialLocale(config);
|
|
42
|
-
// Using redirect for the first visit
|
|
43
|
-
// ▶ Redirect to URL (set cookie for the first visit)
|
|
44
|
-
return createResponse({
|
|
45
|
-
request,
|
|
46
|
-
config,
|
|
47
|
-
locale: initialLocale, // Use locale from 'browser' | 'default'
|
|
48
|
-
responseType: "redirect",
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
// ▶ Redirect to URL
|
|
52
|
-
return createResponse({
|
|
53
|
-
request,
|
|
54
|
-
config,
|
|
55
|
-
locale: localeFromCookie, // Use locale from cookie
|
|
56
|
-
responseType: "redirect",
|
|
57
|
-
});
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export { handlePrefixAll };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
-
import type { NextRequest } from "next/server";
|
|
3
|
-
/**
|
|
4
|
-
* Handle routing for "except-default" prefix.
|
|
5
|
-
*
|
|
6
|
-
* - If URL has a non-default locale prefix → use it and override cookie.
|
|
7
|
-
* - If no prefix and no cookie:
|
|
8
|
-
* - If redirect disabled → respond directly.
|
|
9
|
-
* - If redirect enabled:
|
|
10
|
-
* - If resolved locale is default → respond directly.
|
|
11
|
-
* - Else → redirect to locale URL.
|
|
12
|
-
* - If no prefix but cookie exists:
|
|
13
|
-
* - If cookie locale is default → respond directly.
|
|
14
|
-
* - Else → redirect to locale URL.
|
|
15
|
-
*/
|
|
16
|
-
export declare const handlePrefixExceptDefault: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { createResponse } from '../utils/create-response.js';
|
|
2
|
-
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
-
import 'lodash.merge';
|
|
4
|
-
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Handle routing for "except-default" prefix.
|
|
8
|
-
*
|
|
9
|
-
* - If URL has a non-default locale prefix → use it and override cookie.
|
|
10
|
-
* - If no prefix and no cookie:
|
|
11
|
-
* - If redirect disabled → respond directly.
|
|
12
|
-
* - If redirect enabled:
|
|
13
|
-
* - If resolved locale is default → respond directly.
|
|
14
|
-
* - Else → redirect to locale URL.
|
|
15
|
-
* - If no prefix but cookie exists:
|
|
16
|
-
* - If cookie locale is default → respond directly.
|
|
17
|
-
* - Else → redirect to locale URL.
|
|
18
|
-
*/
|
|
19
|
-
const handlePrefixExceptDefault = async (config, request) => {
|
|
20
|
-
const { defaultLocale, cookie, routing } = config;
|
|
21
|
-
const { maybeLocale, isLocalePrefixed } = extractPathname({
|
|
22
|
-
config,
|
|
23
|
-
pathname: request.nextUrl.pathname,
|
|
24
|
-
});
|
|
25
|
-
const localeFromCookie = request.cookies.get(cookie.name)?.value;
|
|
26
|
-
// ▼ URL has a locale prefix, and it's not defaultLocale (e.g. https://example.com/zh)
|
|
27
|
-
if (isLocalePrefixed && maybeLocale !== defaultLocale) {
|
|
28
|
-
// ▶ Go directly and override cookie
|
|
29
|
-
return createResponse({
|
|
30
|
-
request,
|
|
31
|
-
config,
|
|
32
|
-
locale: maybeLocale,
|
|
33
|
-
setCookieOptions: { override: true },
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
// ▼ URL doesn't have a locale prefix, (e.g. https://example.com/)
|
|
37
|
-
// No cookie, so is first visit
|
|
38
|
-
if (!localeFromCookie) {
|
|
39
|
-
// Not using redirect (Do not set cookie)
|
|
40
|
-
if (!routing.firstVisit.redirect) {
|
|
41
|
-
// ▶ Go directly
|
|
42
|
-
return createResponse({ request, config });
|
|
43
|
-
}
|
|
44
|
-
// Using redirect for the first visit
|
|
45
|
-
// Decide to use locale from browser or defaultLocale
|
|
46
|
-
const initialLocale = await determineInitialLocale(config);
|
|
47
|
-
const isDefaultLocale = initialLocale === defaultLocale;
|
|
48
|
-
// Is defaultLocale
|
|
49
|
-
if (isDefaultLocale) {
|
|
50
|
-
// ▶ Go directly, no prefix (set cookie for the first visit)
|
|
51
|
-
return createResponse({
|
|
52
|
-
request,
|
|
53
|
-
config,
|
|
54
|
-
locale: defaultLocale,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
// Not defaultLocale
|
|
58
|
-
// ▶ Redirect to URL (set cookie for the first visit)
|
|
59
|
-
return createResponse({
|
|
60
|
-
request,
|
|
61
|
-
config,
|
|
62
|
-
locale: initialLocale, // Use locale from 'browser' | 'default'
|
|
63
|
-
responseType: "redirect",
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
// Cookie found (No need to set cookie)
|
|
67
|
-
const isDefaultLocale = localeFromCookie === defaultLocale;
|
|
68
|
-
if (isDefaultLocale) {
|
|
69
|
-
// ▶ Go directly
|
|
70
|
-
return createResponse({ request, config, locale: localeFromCookie });
|
|
71
|
-
}
|
|
72
|
-
// ▶ Redirect to URL
|
|
73
|
-
return createResponse({
|
|
74
|
-
request,
|
|
75
|
-
config,
|
|
76
|
-
locale: localeFromCookie, // Use locale from cookie
|
|
77
|
-
responseType: "redirect",
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export { handlePrefixExceptDefault };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
-
import type { NextRequest } from "next/server";
|
|
3
|
-
/**
|
|
4
|
-
* Handle routing for "none" prefix.
|
|
5
|
-
*
|
|
6
|
-
* Checks cookie for locale. If absent,
|
|
7
|
-
* determines initial locale via config.
|
|
8
|
-
* Returns response with locale.
|
|
9
|
-
*/
|
|
10
|
-
export declare const handlePrefixNone: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { createResponse } from '../utils/create-response.js';
|
|
2
|
-
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Handle routing for "none" prefix.
|
|
6
|
-
*
|
|
7
|
-
* Checks cookie for locale. If absent,
|
|
8
|
-
* determines initial locale via config.
|
|
9
|
-
* Returns response with locale.
|
|
10
|
-
*/
|
|
11
|
-
const handlePrefixNone = async (config, request) => {
|
|
12
|
-
let locale = request.cookies.get(config.cookie.name)?.value;
|
|
13
|
-
// No cookie, so is first visit
|
|
14
|
-
if (!locale) {
|
|
15
|
-
// Decide to use locale from browser or defaultLocale
|
|
16
|
-
locale = await determineInitialLocale(config);
|
|
17
|
-
}
|
|
18
|
-
// ▶ Go directly (set cookie only for the first time, no override)
|
|
19
|
-
return createResponse({ request, config, locale });
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export { handlePrefixNone };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
|
|
2
|
-
import type { NextRequest } from "next/server";
|
|
3
|
-
import { NextResponse } from "next/server";
|
|
4
|
-
interface CreateResponseOptions<Req extends NextRequest = NextRequest> {
|
|
5
|
-
request: Req;
|
|
6
|
-
config: IntorResolvedConfig;
|
|
7
|
-
locale?: string;
|
|
8
|
-
responseType?: "next" | "redirect";
|
|
9
|
-
setCookieOptions?: {
|
|
10
|
-
override?: boolean;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Create a Next.js response with locale handling.
|
|
15
|
-
*/
|
|
16
|
-
export declare const createResponse: <Req extends NextRequest = NextRequest, Res extends NextResponse = NextResponse>({ request, config, locale, responseType, setCookieOptions, }: CreateResponseOptions<Req>) => Response;
|
|
17
|
-
export {};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { NextResponse } from 'next/server';
|
|
2
|
-
import { setLocaleCookieEdge } from './set-locale-cookie-edge.js';
|
|
3
|
-
import { setPathnameHeader } from './set-pathname-header.js';
|
|
4
|
-
import { localizePathname } from '../../shared/utils/localize-pathname.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Create a Next.js response with locale handling.
|
|
8
|
-
*/
|
|
9
|
-
const createResponse = ({ request, config, locale, responseType = "next", setCookieOptions = { override: false }, }) => {
|
|
10
|
-
const { cookie } = config;
|
|
11
|
-
const { override } = setCookieOptions;
|
|
12
|
-
const url = request.nextUrl.clone(); // Clone URL to avoid mutating original
|
|
13
|
-
// Generate locale-prefixed pathname
|
|
14
|
-
const { localePrefixedPathname } = localizePathname({
|
|
15
|
-
config,
|
|
16
|
-
pathname: url.pathname,
|
|
17
|
-
locale,
|
|
18
|
-
});
|
|
19
|
-
url.pathname = localePrefixedPathname;
|
|
20
|
-
// Create response based on the responseType
|
|
21
|
-
const response = responseType === "redirect"
|
|
22
|
-
? NextResponse.redirect(url)
|
|
23
|
-
: NextResponse.next();
|
|
24
|
-
// Set locale cookie if locale is provided
|
|
25
|
-
if (locale) {
|
|
26
|
-
setLocaleCookieEdge({
|
|
27
|
-
request,
|
|
28
|
-
response,
|
|
29
|
-
locale,
|
|
30
|
-
cookie,
|
|
31
|
-
override,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
// Set pathname header
|
|
35
|
-
const finalResponse = setPathnameHeader({
|
|
36
|
-
request,
|
|
37
|
-
response: response,
|
|
38
|
-
});
|
|
39
|
-
return finalResponse;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export { createResponse };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
|
|
2
|
-
/**
|
|
3
|
-
* Determine the initial locale for the user.
|
|
4
|
-
*
|
|
5
|
-
* @param config - The resolved configuration object.
|
|
6
|
-
* @returns The initial locale string.
|
|
7
|
-
*/
|
|
8
|
-
export declare const determineInitialLocale: (config: IntorResolvedConfig) => Promise<string>;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { headers } from 'next/headers';
|
|
2
|
-
import 'lodash.merge';
|
|
3
|
-
import { normalizeLocale } from '../../../../shared/utils/locale/normalize-locale.js';
|
|
4
|
-
import { resolvePreferredLocale } from '../../../../shared/utils/locale/resolve-preferred-locale.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Determine the initial locale for the user.
|
|
8
|
-
*
|
|
9
|
-
* @param config - The resolved configuration object.
|
|
10
|
-
* @returns The initial locale string.
|
|
11
|
-
*/
|
|
12
|
-
const determineInitialLocale = async (config) => {
|
|
13
|
-
const { defaultLocale, supportedLocales, routing } = config;
|
|
14
|
-
let initialLocale = defaultLocale;
|
|
15
|
-
// If locale should be determined from browser on first visit
|
|
16
|
-
if (routing.firstVisit.localeSource === "browser") {
|
|
17
|
-
const headersStore = await headers();
|
|
18
|
-
const acceptLanguageHeader = headersStore.get("accept-language") || undefined;
|
|
19
|
-
// Find the best matching locale from the supported locales
|
|
20
|
-
const preferredLocale = resolvePreferredLocale(acceptLanguageHeader, supportedLocales);
|
|
21
|
-
// Normalize the preferred locale or fallback to default
|
|
22
|
-
initialLocale =
|
|
23
|
-
normalizeLocale(preferredLocale, supportedLocales) || defaultLocale;
|
|
24
|
-
}
|
|
25
|
-
return initialLocale;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { determineInitialLocale };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { NextRequest, NextResponse } from "next/server";
|
|
2
|
-
interface SetPathnameHeaderOptions<Req extends NextRequest = NextRequest, Res extends NextResponse = NextResponse> {
|
|
3
|
-
request: Req;
|
|
4
|
-
response: Res;
|
|
5
|
-
key?: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Set the pathname in the response header.
|
|
9
|
-
* - For Next.js proxy.
|
|
10
|
-
*/
|
|
11
|
-
export declare const setPathnameHeader: <Req extends NextRequest = NextRequest, Res extends NextResponse = NextResponse>({ request, response, key, }: SetPathnameHeaderOptions<Req, Res>) => Response;
|
|
12
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { PATHNAME_HEADER_NAME } from '../../shared/constants/pathname-header-name.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Set the pathname in the response header.
|
|
5
|
-
* - For Next.js proxy.
|
|
6
|
-
*/
|
|
7
|
-
const setPathnameHeader = ({ request, response, key = PATHNAME_HEADER_NAME, }) => {
|
|
8
|
-
const pathname = request.nextUrl.pathname;
|
|
9
|
-
response.headers.set(key, pathname);
|
|
10
|
-
return response;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export { setPathnameHeader };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
|
|
2
|
-
import type { I18nContext } from "../../../server/intor/types";
|
|
3
|
-
import type { GenConfigKeys } from "../../../shared/types/generated.types";
|
|
4
|
-
/**
|
|
5
|
-
* Retrieves the i18n context for the current request.
|
|
6
|
-
*
|
|
7
|
-
* Next.js adapter implementation: uses `next/headers` and `next/cookies`.
|
|
8
|
-
*/
|
|
9
|
-
export declare const getI18nContext: <CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig) => Promise<I18nContext>;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { cookies, headers } from 'next/headers';
|
|
2
|
-
import { PATHNAME_HEADER_NAME } from '../shared/constants/pathname-header-name.js';
|
|
3
|
-
import { getLogger } from '../../../server/shared/logger/get-logger.js';
|
|
4
|
-
import 'lodash.merge';
|
|
5
|
-
import { normalizeLocale } from '../../../shared/utils/locale/normalize-locale.js';
|
|
6
|
-
import { resolvePreferredLocale } from '../../../shared/utils/locale/resolve-preferred-locale.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Retrieves the i18n context for the current request.
|
|
10
|
-
*
|
|
11
|
-
* Next.js adapter implementation: uses `next/headers` and `next/cookies`.
|
|
12
|
-
*/
|
|
13
|
-
const getI18nContext = async (config) => {
|
|
14
|
-
const baseLogger = getLogger({ id: config.id, ...config.logger });
|
|
15
|
-
const logger = baseLogger.child({ scope: "next-adapter" });
|
|
16
|
-
const cookiesStore = await cookies();
|
|
17
|
-
const headersStore = await headers();
|
|
18
|
-
const { defaultLocale, supportedLocales = [], cookie, routing } = config;
|
|
19
|
-
let locale;
|
|
20
|
-
// Locale from cookie (if cookie is enabled)
|
|
21
|
-
if (cookie.enabled) {
|
|
22
|
-
const localeFromCookie = cookiesStore.get(cookie.name)?.value;
|
|
23
|
-
locale = normalizeLocale(localeFromCookie, supportedLocales);
|
|
24
|
-
if (locale) {
|
|
25
|
-
logger.trace("Locale retrieved from cookie.", { locale });
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//====== ▼ Locale from cookie not found ======
|
|
29
|
-
// Locale source set to "browser", retrieve from Accept-Language header
|
|
30
|
-
if (!locale && routing.firstVisit.localeSource === "browser") {
|
|
31
|
-
const aLHeader = headersStore.get("accept-language") || undefined;
|
|
32
|
-
const preferredLocale = resolvePreferredLocale(aLHeader, supportedLocales);
|
|
33
|
-
locale = normalizeLocale(preferredLocale, supportedLocales);
|
|
34
|
-
logger.trace("Locale retrieved from header.", { locale });
|
|
35
|
-
}
|
|
36
|
-
// Retrieve pathname from headers (next/headers)
|
|
37
|
-
const pathname = headersStore.get(PATHNAME_HEADER_NAME);
|
|
38
|
-
if (pathname) {
|
|
39
|
-
logger.trace("Pathname retrieved from header.", { pathname });
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
locale: (locale || defaultLocale),
|
|
43
|
-
pathname: pathname || "",
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export { getI18nContext };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const PATHNAME_HEADER_NAME = "x-intor-pathname";
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
|
|
2
|
-
interface LocalePrefixPathnameOptions {
|
|
3
|
-
pathname: string;
|
|
4
|
-
config: IntorResolvedConfig;
|
|
5
|
-
locale?: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Converts a standardized pathname by applying the locale prefix according to the configured strategy.
|
|
9
|
-
*
|
|
10
|
-
* Based on the `routing.prefix` setting in the config:
|
|
11
|
-
* - "all": Always add the locale prefix.
|
|
12
|
-
* - "except-default": Add the locale prefix unless the locale is the default.
|
|
13
|
-
* - "none": Remove the locale prefix entirely.
|
|
14
|
-
*/
|
|
15
|
-
export declare const localePrefixPathname: ({ config, pathname: standardizedPathname, locale, }: LocalePrefixPathnameOptions) => string;
|
|
16
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
|
|
2
|
-
interface LocalizePathnameOptions {
|
|
3
|
-
config: IntorResolvedConfig;
|
|
4
|
-
pathname: string;
|
|
5
|
-
locale?: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Localizes a given pathname by:
|
|
9
|
-
* 1. Removing the basePath and locale prefix (if necessary) using `extractPathname`.
|
|
10
|
-
* 2. Standardizing the pathname by appending basePath and the prefixPlaceholder using `standardizedPathname`.
|
|
11
|
-
* 3. Adding the correct locale prefix back to the standardized pathname using `localePrefixPathname`.
|
|
12
|
-
*/
|
|
13
|
-
export declare const localizePathname: ({ config, pathname: rawPathname, locale, }: LocalizePathnameOptions) => {
|
|
14
|
-
unprefixedPathname: string;
|
|
15
|
-
standardizedPathname: string;
|
|
16
|
-
localePrefixedPathname: string;
|
|
17
|
-
};
|
|
18
|
-
export {};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { localePrefixPathname } from './locale-prefix-pathname.js';
|
|
2
|
-
import 'lodash.merge';
|
|
3
|
-
import { standardizePathname } from '../../../../shared/utils/pathname/standardize-pathname.js';
|
|
4
|
-
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Localizes a given pathname by:
|
|
8
|
-
* 1. Removing the basePath and locale prefix (if necessary) using `extractPathname`.
|
|
9
|
-
* 2. Standardizing the pathname by appending basePath and the prefixPlaceholder using `standardizedPathname`.
|
|
10
|
-
* 3. Adding the correct locale prefix back to the standardized pathname using `localePrefixPathname`.
|
|
11
|
-
*/
|
|
12
|
-
const localizePathname = ({ config, pathname: rawPathname, locale, }) => {
|
|
13
|
-
// Remove the locale prefix if necessary
|
|
14
|
-
const { unprefixedPathname } = extractPathname({
|
|
15
|
-
config,
|
|
16
|
-
pathname: rawPathname,
|
|
17
|
-
});
|
|
18
|
-
// Standardize pathname
|
|
19
|
-
const standardizedPathname = standardizePathname({
|
|
20
|
-
config,
|
|
21
|
-
pathname: unprefixedPathname,
|
|
22
|
-
});
|
|
23
|
-
// Add locale prefix to pathname
|
|
24
|
-
const localePrefixedPathname = localePrefixPathname({
|
|
25
|
-
config,
|
|
26
|
-
pathname: standardizedPathname,
|
|
27
|
-
locale,
|
|
28
|
-
});
|
|
29
|
-
return {
|
|
30
|
-
unprefixedPathname,
|
|
31
|
-
standardizedPathname,
|
|
32
|
-
localePrefixedPathname,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export { localizePathname };
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { setLocaleCookieBrowser } from '../../../../../shared/utils/client/set-locale-cookie-browser.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Init locale cookie
|
|
6
|
-
*/
|
|
7
|
-
const useInitLocaleCookie = ({ config, locale, }) => {
|
|
8
|
-
React.useEffect(() => {
|
|
9
|
-
if (typeof document === "undefined")
|
|
10
|
-
return;
|
|
11
|
-
const { cookie, routing } = config;
|
|
12
|
-
const { firstVisit } = routing;
|
|
13
|
-
const cookies = document.cookie.split(";").map((c) => c.trim());
|
|
14
|
-
const isCookieExists = cookies.some((c) => c.startsWith(`${cookie.name}=`));
|
|
15
|
-
// Cookie already exists
|
|
16
|
-
if (isCookieExists)
|
|
17
|
-
return;
|
|
18
|
-
// If first visit is not using redirect, do not set cookie
|
|
19
|
-
if (!firstVisit.redirect)
|
|
20
|
-
return;
|
|
21
|
-
// Cookie is disabled or autoSetCookie is disabled
|
|
22
|
-
if (!cookie.enabled || !cookie.autoSetCookie)
|
|
23
|
-
return;
|
|
24
|
-
setLocaleCookieBrowser({ cookie, locale });
|
|
25
|
-
}, []); // Mount only once
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export { useInitLocaleCookie };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import 'react';
|
|
4
|
-
import { TranslateHandlersContext } from './context.js';
|
|
5
|
-
|
|
6
|
-
// provider
|
|
7
|
-
const TranslateHandlersProvider = ({ handlers, children, }) => {
|
|
8
|
-
return (jsx(TranslateHandlersContext.Provider, { value: handlers, children: children }));
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export { TranslateHandlersProvider };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { TranslateHandlers } from "intor-translator";
|
|
2
|
-
import type * as React from "react";
|
|
3
|
-
export type TranslateHandlersContextValue = TranslateHandlers;
|
|
4
|
-
export type TranslateHandlersProviderProps = {
|
|
5
|
-
handlers: TranslateHandlers;
|
|
6
|
-
children: React.ReactNode;
|
|
7
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../config";
|
|
2
|
-
/**
|
|
3
|
-
* Get the initial locale from cookie, browser, or default.
|
|
4
|
-
*
|
|
5
|
-
* - This function is intended for client-side use only.
|
|
6
|
-
*
|
|
7
|
-
* @param {IntorResolvedConfig} config - The intor configuration.
|
|
8
|
-
* @param {string} [cookieName=config.cookie.name] - Optional cookie name to check.
|
|
9
|
-
* @returns {string} The matched locale or the default locale.
|
|
10
|
-
*/
|
|
11
|
-
export declare function getInitialLocale(config: IntorResolvedConfig, cookieName?: string): string;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Get the initial locale from cookie, browser, or default.
|
|
3
|
-
*
|
|
4
|
-
* - This function is intended for client-side use only.
|
|
5
|
-
*
|
|
6
|
-
* @param {IntorResolvedConfig} config - The intor configuration.
|
|
7
|
-
* @param {string} [cookieName=config.cookie.name] - Optional cookie name to check.
|
|
8
|
-
* @returns {string} The matched locale or the default locale.
|
|
9
|
-
*/
|
|
10
|
-
function getInitialLocale(config, cookieName = config.cookie.name) {
|
|
11
|
-
const { defaultLocale, supportedLocales } = config;
|
|
12
|
-
const match = document.cookie.match(new RegExp(`(?:^|; )${cookieName.replaceAll(/([.$?*|{}()[\]\\/+^])/g, String.raw `\$1`)}=([^;]*)`));
|
|
13
|
-
const cookieLocale = match ? decodeURIComponent(match[1]) : null;
|
|
14
|
-
const browserLocale = navigator.languages?.[0] || navigator.language;
|
|
15
|
-
const locale = cookieLocale || browserLocale || defaultLocale;
|
|
16
|
-
const normalized = locale.toLowerCase();
|
|
17
|
-
const matched = supportedLocales.find((l) => l.toLowerCase() === normalized);
|
|
18
|
-
return matched ?? defaultLocale;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { getInitialLocale };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { PREFIX_PLACEHOLDER } from "../../shared/constants/prefix-placeholder";
|
|
2
|
-
import type { LocaleMessages } from "intor-translator";
|
|
3
|
-
/**
|
|
4
|
-
* Conditional type for generated types.
|
|
5
|
-
* - Returns `Then` if `IntorGeneratedTypes` exists, otherwise `Else`.
|
|
6
|
-
*/
|
|
7
|
-
export type IfGen<Then, Else = never> = IntorGeneratedTypes extends void ? Else : Then;
|
|
8
|
-
/**
|
|
9
|
-
* Union of all configuration keys.
|
|
10
|
-
* - Defaults to `string` if `IntorGeneratedTypes` does not exist.
|
|
11
|
-
*/
|
|
12
|
-
export type GenConfigKeys = IfGen<keyof IntorGeneratedTypes, string>;
|
|
13
|
-
/**
|
|
14
|
-
* Configuration shape for a given config key.
|
|
15
|
-
* - If `IntorGeneratedTypes` is not defined, falls back to default shape.
|
|
16
|
-
* Otherwise, picks `Locales` and `Messages` according to the key.
|
|
17
|
-
*/
|
|
18
|
-
export type GenConfig<CK extends GenConfigKeys = "__default__"> = IntorGeneratedTypes extends void ? {
|
|
19
|
-
Locales: string;
|
|
20
|
-
Messages: LocaleMessages;
|
|
21
|
-
} : CK extends keyof IntorGeneratedTypes ? {
|
|
22
|
-
Locales: IntorGeneratedTypes[CK]["Locales"];
|
|
23
|
-
Messages: {
|
|
24
|
-
[K in IntorGeneratedTypes[CK]["Locales"]]: IntorGeneratedTypes[CK]["Messages"][typeof PREFIX_PLACEHOLDER];
|
|
25
|
-
};
|
|
26
|
-
} : never;
|
|
27
|
-
/** Extracts messages for a given config key */
|
|
28
|
-
export type GenMessages<CK extends GenConfigKeys = "__default__"> = GenConfig<CK>["Messages"];
|
|
29
|
-
/** Extracts locales for a given config key */
|
|
30
|
-
export type GenLocale<CK extends GenConfigKeys = "__default__"> = GenConfig<CK>["Locales"];
|