next-intl 3.0.0-beta.3 → 3.0.0-beta.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/dist/client/next-intl.esm2.js +3 -1
- package/dist/client/next-intl.esm2.js.map +1 -1
- package/dist/next-intl.cjs.development.js +6 -1
- package/dist/next-intl.cjs.development.js.map +1 -1
- package/dist/next-intl.cjs.production.min.js +1 -1
- package/dist/next-intl.cjs.production.min.js.map +1 -1
- package/dist/server/getConfig.d.ts +1 -1
- package/dist/server/getFormatter.d.ts +9 -1
- package/dist/server/getLocale.d.ts +1 -2
- package/dist/server/getLocaleFromHeader.d.ts +2 -0
- package/dist/server/getNow.d.ts +3 -1
- package/dist/server/getTimeZone.d.ts +3 -1
- package/dist/server/getTranslator.d.ts +41 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/shared/next-intl.esm3.js +3 -0
- package/dist/shared/next-intl.esm3.js.map +1 -1
- package/dist/src/client/useClientLocale.js +3 -1
- package/dist/src/client/useClientLocale.js.map +1 -1
- package/dist/src/client/usePathname.js +4 -0
- package/dist/src/client/usePathname.js.map +1 -1
- package/dist/src/react-server/useFormatter.js +3 -1
- package/dist/src/react-server/useFormatter.js.map +1 -1
- package/dist/src/react-server/useLocale.js +2 -2
- package/dist/src/react-server/useLocale.js.map +1 -1
- package/dist/src/react-server/useNow.js +3 -1
- package/dist/src/react-server/useNow.js.map +1 -1
- package/dist/src/react-server/useTimeZone.js +3 -1
- package/dist/src/react-server/useTimeZone.js.map +1 -1
- package/dist/src/react-server/useTranslations.js +4 -2
- package/dist/src/react-server/useTranslations.js.map +1 -1
- package/dist/src/server/getConfig.d.ts +1 -1
- package/dist/src/server/getConfig.js +4 -5
- package/dist/src/server/getConfig.js.map +1 -1
- package/dist/src/server/getFormatter.d.ts +9 -1
- package/dist/src/server/getFormatter.js +27 -3
- package/dist/src/server/getFormatter.js.map +1 -1
- package/dist/src/server/getIntl.js +8 -2
- package/dist/src/server/getIntl.js.map +1 -1
- package/dist/src/server/getLocale.d.ts +1 -2
- package/dist/src/server/getLocale.js +17 -31
- package/dist/src/server/getLocale.js.map +1 -1
- package/dist/src/server/getLocaleFromHeader.d.ts +2 -0
- package/dist/src/server/getLocaleFromHeader.js +33 -0
- package/dist/src/server/getLocaleFromHeader.js.map +1 -0
- package/dist/src/server/getNow.d.ts +3 -1
- package/dist/src/server/getNow.js +20 -2
- package/dist/src/server/getNow.js.map +1 -1
- package/dist/src/server/getTimeZone.d.ts +3 -1
- package/dist/src/server/getTimeZone.js +20 -2
- package/dist/src/server/getTimeZone.js.map +1 -1
- package/dist/src/server/getTranslations.js +12 -1
- package/dist/src/server/getTranslations.js.map +1 -1
- package/dist/src/server/getTranslator.d.ts +41 -0
- package/dist/src/server/getTranslator.js +23 -0
- package/dist/src/server/getTranslator.js.map +1 -0
- package/dist/src/server/index.d.ts +1 -0
- package/dist/src/server/index.js +1 -0
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/redirect.js +2 -2
- package/dist/src/server/redirect.js.map +1 -1
- package/dist/src/shared/BaseLink.js +4 -0
- package/dist/src/shared/BaseLink.js.map +1 -1
- package/package.json +2 -2
- package/src/client/useClientLocale.tsx +5 -2
- package/src/client/usePathname.tsx +8 -1
- package/src/react-server/useFormatter.tsx +3 -1
- package/src/react-server/useLocale.tsx +2 -2
- package/src/react-server/useNow.tsx +3 -1
- package/src/react-server/useTimeZone.tsx +3 -1
- package/src/react-server/useTranslations.tsx +4 -2
- package/src/server/getConfig.tsx +5 -5
- package/src/server/getFormatter.tsx +29 -3
- package/src/server/getIntl.tsx +8 -2
- package/src/server/getLocale.tsx +16 -35
- package/src/server/getLocaleFromHeader.tsx +40 -0
- package/src/server/getNow.tsx +22 -2
- package/src/server/getTimeZone.tsx +22 -2
- package/src/server/getTranslations.tsx +14 -1
- package/src/server/getTranslator.tsx +103 -0
- package/src/server/index.tsx +1 -0
- package/src/server/redirect.tsx +2 -2
- package/src/shared/BaseLink.tsx +6 -1
|
@@ -4,8 +4,10 @@ import { LOCALE_SEGMENT_NAME } from '../shared/next-intl.esm4.js';
|
|
|
4
4
|
|
|
5
5
|
function useClientLocale() {
|
|
6
6
|
var locale;
|
|
7
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
8
|
+
// `useParams` can be called, but the return type is `null`.
|
|
7
9
|
var params = useParams();
|
|
8
|
-
if (params[LOCALE_SEGMENT_NAME]) {
|
|
10
|
+
if (params != null && params[LOCALE_SEGMENT_NAME]) {
|
|
9
11
|
locale = params[LOCALE_SEGMENT_NAME];
|
|
10
12
|
} else {
|
|
11
13
|
// eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-intl.esm2.js","sources":["../../src/client/useClientLocale.tsx"],"sourcesContent":["import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n const params = useParams();\n if (params[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n"],"names":["useClientLocale","locale","params","useParams","LOCALE_SEGMENT_NAME","useLocale"],"mappings":";;;;AAIc,SAAUA,eAAeA,GAAA;AACrC,EAAA,IAAIC,MAAM,CAAA;AAEV,EAAA,IAAMC,MAAM,GAAGC,SAAS,
|
|
1
|
+
{"version":3,"file":"next-intl.esm2.js","sources":["../../src/client/useClientLocale.tsx"],"sourcesContent":["import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const params = useParams() as ReturnType<typeof useParams> | null;\n\n if (params?.[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n"],"names":["useClientLocale","locale","params","useParams","LOCALE_SEGMENT_NAME","useLocale"],"mappings":";;;;AAIc,SAAUA,eAAeA,GAAA;AACrC,EAAA,IAAIC,MAAM,CAAA;AAEV;AACA;AACA,EAAA,IAAMC,MAAM,GAAGC,SAAS,EAAyC,CAAA;AAEjE,EAAA,IAAID,MAAM,IAANA,IAAAA,IAAAA,MAAM,CAAGE,mBAAmB,CAAC,EAAE;AACjCH,IAAAA,MAAM,GAAGC,MAAM,CAACE,mBAAmB,CAAC,CAAA;AACrC,GAAA,MAAM;AACL;IACAH,MAAM,GAAGI,SAAS,EAAE,CAAA;AACrB,GAAA;AAED,EAAA,OAAOJ,MAAM,CAAA;AACf;;;;"}
|
|
@@ -46,8 +46,10 @@ var LOCALE_SEGMENT_NAME = 'locale';
|
|
|
46
46
|
|
|
47
47
|
function useClientLocale() {
|
|
48
48
|
var locale;
|
|
49
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
50
|
+
// `useParams` can be called, but the return type is `null`.
|
|
49
51
|
var params = navigation.useParams();
|
|
50
|
-
if (params[LOCALE_SEGMENT_NAME]) {
|
|
52
|
+
if (params != null && params[LOCALE_SEGMENT_NAME]) {
|
|
51
53
|
locale = params[LOCALE_SEGMENT_NAME];
|
|
52
54
|
} else {
|
|
53
55
|
// eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine
|
|
@@ -113,6 +115,8 @@ function BaseLink(_ref, ref) {
|
|
|
113
115
|
locale = _ref.locale,
|
|
114
116
|
prefetch = _ref.prefetch,
|
|
115
117
|
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
118
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
119
|
+
// `useParams` can be called, but the return type is `null`.
|
|
116
120
|
var pathname = navigation.usePathname();
|
|
117
121
|
var defaultLocale = useClientLocale();
|
|
118
122
|
var isChangingLocale = locale !== defaultLocale;
|
|
@@ -131,6 +135,7 @@ function BaseLink(_ref, ref) {
|
|
|
131
135
|
localizedHref = _useState[0],
|
|
132
136
|
setLocalizedHref = _useState[1];
|
|
133
137
|
React.useEffect(function () {
|
|
138
|
+
if (!pathname) return;
|
|
134
139
|
setLocalizedHref(localizeHref(href, locale, defaultLocale, pathname != null ? pathname : undefined));
|
|
135
140
|
}, [defaultLocale, href, locale, pathname]);
|
|
136
141
|
if (isChangingLocale) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-intl.cjs.development.js","sources":["../src/shared/constants.tsx","../src/client/useClientLocale.tsx","../src/shared/utils.tsx","../src/shared/BaseLink.tsx","../src/link/Link.tsx","../src/react-client/Link.tsx","../src/shared/NextIntlClientProvider.tsx","../src/client/useRouter.tsx","../src/react-client/useLocalizedRouter.tsx","../src/react-client/index.tsx"],"sourcesContent":["// Reuse the legacy cookie name\n// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie\nexport const COOKIE_LOCALE_NAME = 'NEXT_LOCALE';\n\n// Should take precedence over the cookie\nexport const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE';\n\n// In a URL like \"/en-US/about\", the locale segment is \"en-US\"\nexport const LOCALE_SEGMENT_NAME = 'locale';\n","import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n const params = useParams();\n if (params[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n","import {UrlObject} from 'url';\nimport NextLink from 'next/link';\nimport {ComponentProps} from 'react';\n\ntype Href = ComponentProps<typeof NextLink>['href'];\n\nexport function isRelativeHref(href: Href) {\n const pathname = typeof href === 'object' ? href.pathname : href;\n return pathname != null && !pathname.startsWith('/');\n}\n\nexport function isLocalHref(href: Href) {\n if (typeof href === 'object') {\n return href.host == null && href.hostname == null;\n } else {\n const hasProtocol = /^[a-z]+:/i.test(href);\n return !hasProtocol;\n }\n}\n\nexport function localizeHref(\n href: string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): UrlObject | string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string = locale,\n pathname: string\n) {\n if (!isLocalHref(href) || isRelativeHref(href)) {\n return href;\n }\n\n const isSwitchingLocale = locale !== defaultLocale;\n const isPathnamePrefixed =\n locale == null || hasPathnamePrefixed(locale, pathname);\n const shouldPrefix = isPathnamePrefixed || isSwitchingLocale;\n\n if (shouldPrefix && locale != null) {\n return prefixHref(href, locale);\n }\n\n return href;\n}\n\nexport function prefixHref(href: string, locale: string): string;\nexport function prefixHref(\n href: UrlObject | string,\n locale: string\n): UrlObject | string;\nexport function prefixHref(href: UrlObject | string, locale: string) {\n let prefixedHref;\n if (typeof href === 'string') {\n prefixedHref = localizePathname(locale, href);\n } else {\n prefixedHref = {...href};\n if (href.pathname) {\n prefixedHref.pathname = localizePathname(locale, href.pathname);\n }\n }\n\n return prefixedHref;\n}\n\nexport function unlocalizePathname(pathname: string, locale: string) {\n return pathname.replace(new RegExp(`^/${locale}`), '') || '/';\n}\n\nexport function localizePathname(locale: string, pathname: string) {\n let localizedHref = '/' + locale;\n\n if (pathname !== '/') {\n localizedHref += pathname;\n }\n\n return localizedHref;\n}\n\nexport function hasPathnamePrefixed(locale: string, pathname: string) {\n const prefix = `/${locale}`;\n return pathname === prefix || pathname.startsWith(`${prefix}/`);\n}\n","'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n const pathname = usePathname();\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n","import React, {ComponentProps, forwardRef} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport BaseLink from '../shared/BaseLink';\n\ntype Props = Omit<ComponentProps<typeof BaseLink>, 'locale'> & {\n locale?: string;\n};\n\nfunction Link({locale, ...rest}: Props, ref: Props['ref']) {\n const defaultLocale = useClientLocale();\n return <BaseLink ref={ref} locale={locale || defaultLocale} {...rest} />;\n}\n\n/**\n * Wraps `next/link` and prefixes the `href` with the current locale if\n * necessary.\n *\n * @example\n * ```tsx\n * import {Link} from 'next-intl';\n *\n * // When the user is on `/en`, the link will point to `/en/about`\n * <Link href=\"/about\">About</Link>\n *\n * // You can override the `locale` to switch to another language\n * <Link href=\"/\" locale=\"de\">Switch to German</Link>\n * ```\n *\n * Note that when a `locale` prop is passed to switch the locale, the `prefetch`\n * prop is not supported. This is because Next.js would prefetch the page and\n * the `set-cookie` response header would cause the locale cookie on the current\n * page to be overwritten before the user even decides to change the locale.\n */\nexport default forwardRef(Link);\n","import React, {ComponentProps} from 'react';\nimport Link from '../link';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport default function LinkDeprecated(props: ComponentProps<typeof Link>) {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The import for \\`Link\\` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\\n\\n`\n );\n hasWarned = true;\n }\n\n return <Link {...props} />;\n}\n","'use client';\n\nimport {useRouter} from 'next/router';\nimport React, {ComponentProps} from 'react';\nimport {IntlProvider} from 'use-intl';\n\ntype Props = Omit<ComponentProps<typeof IntlProvider>, 'locale' | 'now'> & {\n locale?: string;\n /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */\n now?: Date | string;\n};\n\nexport default function NextIntlClientProvider({\n children,\n locale,\n now,\n ...rest\n}: Props) {\n let router;\n try {\n // Reading from context is practically ok to do conditionally\n // eslint-disable-next-line react-hooks/rules-of-hooks\n router = useRouter();\n } catch (error) {\n // Calling `useRouter` is not supported in the app folder\n }\n\n // The router can be undefined if used in a context outside\n // of Next.js (e.g. unit tests, Storybook, ...)\n if (!locale && router) {\n locale = router.locale;\n }\n\n // Currently RSC serialize dates to strings, therefore make sure we have\n // a date object. We might be able to remove this once more types have\n // first-class serialization support (https://github.com/facebook/react/issues/25687)\n if (typeof now === 'string') {\n now = new Date(now);\n }\n\n if (!locale) {\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? \"Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing).\"\n : undefined\n );\n }\n\n return (\n <IntlProvider locale={locale} now={now} {...rest}>\n {children}\n </IntlProvider>\n );\n}\n","import {useRouter as useNextRouter} from 'next/navigation';\nimport {useMemo} from 'react';\nimport {localizeHref} from '../shared/utils';\nimport useClientLocale from './useClientLocale';\n\n/**\n * Returns a wrapped instance of `useRouter` from `next/navigation` that\n * will automatically localize the `href` parameters it receives.\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import {useRouter} from 'next-intl/client';\n *\n * const router = useRouter();\n *\n * // When the user is on `/en`, the router will navigate to `/en/about`\n * router.push('/about');\n * ```\n */\nexport default function useRouter() {\n const router = useNextRouter();\n const locale = useClientLocale();\n\n return useMemo(() => {\n function localize(href: string) {\n return localizeHref(href, locale, locale, window.location.pathname);\n }\n\n return {\n ...router,\n push(href: string) {\n return router.push(localize(href));\n },\n replace(href: string) {\n return router.replace(localize(href));\n },\n prefetch(href: string) {\n return router.prefetch(localize(href));\n }\n };\n }, [locale, router]);\n}\n","import useRouter from '../client/useRouter';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\nexport default function useLocalizedRouterDeprecated() {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The \\`useLocalizedRouter\\` import from \\`next-intl\\` is deprecated and will be removed in the stable release of next-intl. Please import \\`useLocalizedRouter\\` from \\`next-intl/client\\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\\n\\n`\n );\n hasWarned = true;\n }\n\n return useRouter();\n}\n","/**\n * This is the main entry file when non-'react-server'\n * environments import from 'next-intl'.\n *\n * Maintainer notes:\n * - Make sure this mirrors the API from 'react-server'.\n * - Make sure everything exported from this module is\n * supported in all Next.js versions that are supported.\n */\n\nimport Link from './Link';\n\nexport * from 'use-intl';\nexport {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider';\n\n// Legacy export (TBD if we'll deprecate this in favour of `NextIntlClientProvider`)\nexport {default as NextIntlProvider} from '../shared/NextIntlClientProvider';\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport const LocalizedLink = Link;\nexport {default as Link} from './Link';\n\nexport {default as useLocalizedRouter} from './useLocalizedRouter';\n"],"names":["LOCALE_SEGMENT_NAME","useClientLocale","locale","params","useParams","useLocale","isRelativeHref","href","pathname","startsWith","isLocalHref","host","hostname","hasProtocol","test","localizeHref","defaultLocale","isSwitchingLocale","isPathnamePrefixed","hasPathnamePrefixed","shouldPrefix","prefixHref","prefixedHref","localizePathname","_extends","localizedHref","prefix","_excluded","BaseLink","_ref","ref","prefetch","rest","_objectWithoutPropertiesLoose","usePathname","isChangingLocale","_useState","useState","setLocalizedHref","useEffect","undefined","process","console","error","React","createElement","NextLink","forwardRef","Link","hasWarned","LinkDeprecated","props","warn","NextIntlClientProvider","children","now","router","useRouter","Date","Error","IntlProvider","useNextRouter","useMemo","localize","window","location","push","replace","useLocalizedRouterDeprecated","LocalizedLink"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"next-intl.cjs.development.js","sources":["../src/shared/constants.tsx","../src/client/useClientLocale.tsx","../src/shared/utils.tsx","../src/shared/BaseLink.tsx","../src/link/Link.tsx","../src/react-client/Link.tsx","../src/shared/NextIntlClientProvider.tsx","../src/client/useRouter.tsx","../src/react-client/useLocalizedRouter.tsx","../src/react-client/index.tsx"],"sourcesContent":["// Reuse the legacy cookie name\n// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie\nexport const COOKIE_LOCALE_NAME = 'NEXT_LOCALE';\n\n// Should take precedence over the cookie\nexport const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE';\n\n// In a URL like \"/en-US/about\", the locale segment is \"en-US\"\nexport const LOCALE_SEGMENT_NAME = 'locale';\n","import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const params = useParams() as ReturnType<typeof useParams> | null;\n\n if (params?.[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n","import {UrlObject} from 'url';\nimport NextLink from 'next/link';\nimport {ComponentProps} from 'react';\n\ntype Href = ComponentProps<typeof NextLink>['href'];\n\nexport function isRelativeHref(href: Href) {\n const pathname = typeof href === 'object' ? href.pathname : href;\n return pathname != null && !pathname.startsWith('/');\n}\n\nexport function isLocalHref(href: Href) {\n if (typeof href === 'object') {\n return href.host == null && href.hostname == null;\n } else {\n const hasProtocol = /^[a-z]+:/i.test(href);\n return !hasProtocol;\n }\n}\n\nexport function localizeHref(\n href: string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): UrlObject | string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string = locale,\n pathname: string\n) {\n if (!isLocalHref(href) || isRelativeHref(href)) {\n return href;\n }\n\n const isSwitchingLocale = locale !== defaultLocale;\n const isPathnamePrefixed =\n locale == null || hasPathnamePrefixed(locale, pathname);\n const shouldPrefix = isPathnamePrefixed || isSwitchingLocale;\n\n if (shouldPrefix && locale != null) {\n return prefixHref(href, locale);\n }\n\n return href;\n}\n\nexport function prefixHref(href: string, locale: string): string;\nexport function prefixHref(\n href: UrlObject | string,\n locale: string\n): UrlObject | string;\nexport function prefixHref(href: UrlObject | string, locale: string) {\n let prefixedHref;\n if (typeof href === 'string') {\n prefixedHref = localizePathname(locale, href);\n } else {\n prefixedHref = {...href};\n if (href.pathname) {\n prefixedHref.pathname = localizePathname(locale, href.pathname);\n }\n }\n\n return prefixedHref;\n}\n\nexport function unlocalizePathname(pathname: string, locale: string) {\n return pathname.replace(new RegExp(`^/${locale}`), '') || '/';\n}\n\nexport function localizePathname(locale: string, pathname: string) {\n let localizedHref = '/' + locale;\n\n if (pathname !== '/') {\n localizedHref += pathname;\n }\n\n return localizedHref;\n}\n\nexport function hasPathnamePrefixed(locale: string, pathname: string) {\n const prefix = `/${locale}`;\n return pathname === prefix || pathname.startsWith(`${prefix}/`);\n}\n","'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const pathname = usePathname() as ReturnType<typeof usePathname> | null;\n\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n if (!pathname) return;\n\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n","import React, {ComponentProps, forwardRef} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport BaseLink from '../shared/BaseLink';\n\ntype Props = Omit<ComponentProps<typeof BaseLink>, 'locale'> & {\n locale?: string;\n};\n\nfunction Link({locale, ...rest}: Props, ref: Props['ref']) {\n const defaultLocale = useClientLocale();\n return <BaseLink ref={ref} locale={locale || defaultLocale} {...rest} />;\n}\n\n/**\n * Wraps `next/link` and prefixes the `href` with the current locale if\n * necessary.\n *\n * @example\n * ```tsx\n * import {Link} from 'next-intl';\n *\n * // When the user is on `/en`, the link will point to `/en/about`\n * <Link href=\"/about\">About</Link>\n *\n * // You can override the `locale` to switch to another language\n * <Link href=\"/\" locale=\"de\">Switch to German</Link>\n * ```\n *\n * Note that when a `locale` prop is passed to switch the locale, the `prefetch`\n * prop is not supported. This is because Next.js would prefetch the page and\n * the `set-cookie` response header would cause the locale cookie on the current\n * page to be overwritten before the user even decides to change the locale.\n */\nexport default forwardRef(Link);\n","import React, {ComponentProps} from 'react';\nimport Link from '../link';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport default function LinkDeprecated(props: ComponentProps<typeof Link>) {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The import for \\`Link\\` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\\n\\n`\n );\n hasWarned = true;\n }\n\n return <Link {...props} />;\n}\n","'use client';\n\nimport {useRouter} from 'next/router';\nimport React, {ComponentProps} from 'react';\nimport {IntlProvider} from 'use-intl';\n\ntype Props = Omit<ComponentProps<typeof IntlProvider>, 'locale' | 'now'> & {\n locale?: string;\n /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */\n now?: Date | string;\n};\n\nexport default function NextIntlClientProvider({\n children,\n locale,\n now,\n ...rest\n}: Props) {\n let router;\n try {\n // Reading from context is practically ok to do conditionally\n // eslint-disable-next-line react-hooks/rules-of-hooks\n router = useRouter();\n } catch (error) {\n // Calling `useRouter` is not supported in the app folder\n }\n\n // The router can be undefined if used in a context outside\n // of Next.js (e.g. unit tests, Storybook, ...)\n if (!locale && router) {\n locale = router.locale;\n }\n\n // Currently RSC serialize dates to strings, therefore make sure we have\n // a date object. We might be able to remove this once more types have\n // first-class serialization support (https://github.com/facebook/react/issues/25687)\n if (typeof now === 'string') {\n now = new Date(now);\n }\n\n if (!locale) {\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? \"Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing).\"\n : undefined\n );\n }\n\n return (\n <IntlProvider locale={locale} now={now} {...rest}>\n {children}\n </IntlProvider>\n );\n}\n","import {useRouter as useNextRouter} from 'next/navigation';\nimport {useMemo} from 'react';\nimport {localizeHref} from '../shared/utils';\nimport useClientLocale from './useClientLocale';\n\n/**\n * Returns a wrapped instance of `useRouter` from `next/navigation` that\n * will automatically localize the `href` parameters it receives.\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import {useRouter} from 'next-intl/client';\n *\n * const router = useRouter();\n *\n * // When the user is on `/en`, the router will navigate to `/en/about`\n * router.push('/about');\n * ```\n */\nexport default function useRouter() {\n const router = useNextRouter();\n const locale = useClientLocale();\n\n return useMemo(() => {\n function localize(href: string) {\n return localizeHref(href, locale, locale, window.location.pathname);\n }\n\n return {\n ...router,\n push(href: string) {\n return router.push(localize(href));\n },\n replace(href: string) {\n return router.replace(localize(href));\n },\n prefetch(href: string) {\n return router.prefetch(localize(href));\n }\n };\n }, [locale, router]);\n}\n","import useRouter from '../client/useRouter';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\nexport default function useLocalizedRouterDeprecated() {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The \\`useLocalizedRouter\\` import from \\`next-intl\\` is deprecated and will be removed in the stable release of next-intl. Please import \\`useLocalizedRouter\\` from \\`next-intl/client\\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\\n\\n`\n );\n hasWarned = true;\n }\n\n return useRouter();\n}\n","/**\n * This is the main entry file when non-'react-server'\n * environments import from 'next-intl'.\n *\n * Maintainer notes:\n * - Make sure this mirrors the API from 'react-server'.\n * - Make sure everything exported from this module is\n * supported in all Next.js versions that are supported.\n */\n\nimport Link from './Link';\n\nexport * from 'use-intl';\nexport {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider';\n\n// Legacy export (TBD if we'll deprecate this in favour of `NextIntlClientProvider`)\nexport {default as NextIntlProvider} from '../shared/NextIntlClientProvider';\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport const LocalizedLink = Link;\nexport {default as Link} from './Link';\n\nexport {default as useLocalizedRouter} from './useLocalizedRouter';\n"],"names":["LOCALE_SEGMENT_NAME","useClientLocale","locale","params","useParams","useLocale","isRelativeHref","href","pathname","startsWith","isLocalHref","host","hostname","hasProtocol","test","localizeHref","defaultLocale","isSwitchingLocale","isPathnamePrefixed","hasPathnamePrefixed","shouldPrefix","prefixHref","prefixedHref","localizePathname","_extends","localizedHref","prefix","_excluded","BaseLink","_ref","ref","prefetch","rest","_objectWithoutPropertiesLoose","usePathname","isChangingLocale","_useState","useState","setLocalizedHref","useEffect","undefined","process","console","error","React","createElement","NextLink","forwardRef","Link","hasWarned","LinkDeprecated","props","warn","NextIntlClientProvider","children","now","router","useRouter","Date","Error","IntlProvider","useNextRouter","useMemo","localize","window","location","push","replace","useLocalizedRouterDeprecated","LocalizedLink"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("next/navigation"),n=require("use-intl"),r=require("next/link"),o=require("next/router");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=a(e),i=a(r);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}function c(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var f="locale";function s(){var e=t.useParams();return e[f]?e[f]:n.useLocale()}function p(e){return"object"==typeof e?null==e.host&&null==e.hostname:!/^[a-z]+:/i.test(e)}function d(e,t,n,r){if(void 0===n&&(n=t),!p(e)||function(e){var t="object"==typeof e?e.pathname:e;return null!=t&&!t.startsWith("/")}(e))return e;var o=t!==n,a=null==t||function(e,t){var n="/"+e;return t===n||t.startsWith(n+"/")}(t,r);return(a||o)&&null!=t?h(e,t):e}function h(e,t){var n;return"string"==typeof e?n=v(t,e):(n=l({},e),e.pathname&&(n.pathname=v(t,e.pathname))),n}function v(e,t){var n="/"+e;return"/"!==t&&(n+=t),n}var m=["href","locale","prefetch"];function x(n,r){var o=n.href,a=n.locale,f=n.prefetch,v=c(n,m),x=t.usePathname(),y=s(),w=a!==y,b=e.useState((function(){return p(o)&&a?h(o,a):o})),P=b[0],g=b[1];return e.useEffect((function(){g(d(o,a,y,null!=x?x:void 0))}),[y,o,a,x]),w&&(f=!1),u.default.createElement(i.default,l({ref:r,href:P,prefetch:f},v))}var y=e.forwardRef(x),w=["locale"];function b(e,t){var n=e.locale,r=c(e,w),o=s();return u.default.createElement(y,l({ref:t,locale:n||o},r))}var P=e.forwardRef(b),g=!1;function O(e){return g||(console.warn("\n\nDEPRECATION WARNING: The import for `Link` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\n\n"),g=!0),u.default.createElement(P,l({},e))}var E=["children","locale","now"];function R(e){var t,r=e.children,a=e.locale,i=e.now,f=c(e,E);try{t=o.useRouter()}catch(e){}if(!a&&t&&(a=t.locale),"string"==typeof i&&(i=new Date(i)),!a)throw new Error(void 0);return u.default.createElement(n.IntlProvider,l({locale:a,now:i},f),r)}var j=!1,k=O;exports.Link=O,exports.LocalizedLink=k,exports.NextIntlClientProvider=R,exports.NextIntlProvider=R,exports.useLocalizedRouter=function(){return j||(console.warn("\n\nDEPRECATION WARNING: The `useLocalizedRouter` import from `next-intl` is deprecated and will be removed in the stable release of next-intl. Please import `useLocalizedRouter` from `next-intl/client` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n"),j=!0),function(){var n=t.useRouter(),r=s();return e.useMemo((function(){function e(e){return d(e,r,r,window.location.pathname)}return l({},n,{push:function(t){return n.push(e(t))},replace:function(t){return n.replace(e(t))},prefetch:function(t){return n.prefetch(e(t))}})}),[r,n])}()},Object.keys(n).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})}));
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("next/navigation"),n=require("use-intl"),r=require("next/link"),o=require("next/router");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=a(e),i=a(r);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}function c(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var f="locale";function s(){var e=t.useParams();return null!=e&&e[f]?e[f]:n.useLocale()}function p(e){return"object"==typeof e?null==e.host&&null==e.hostname:!/^[a-z]+:/i.test(e)}function d(e,t,n,r){if(void 0===n&&(n=t),!p(e)||function(e){var t="object"==typeof e?e.pathname:e;return null!=t&&!t.startsWith("/")}(e))return e;var o=t!==n,a=null==t||function(e,t){var n="/"+e;return t===n||t.startsWith(n+"/")}(t,r);return(a||o)&&null!=t?h(e,t):e}function h(e,t){var n;return"string"==typeof e?n=v(t,e):(n=l({},e),e.pathname&&(n.pathname=v(t,e.pathname))),n}function v(e,t){var n="/"+e;return"/"!==t&&(n+=t),n}var m=["href","locale","prefetch"];function x(n,r){var o=n.href,a=n.locale,f=n.prefetch,v=c(n,m),x=t.usePathname(),y=s(),w=a!==y,b=e.useState((function(){return p(o)&&a?h(o,a):o})),P=b[0],g=b[1];return e.useEffect((function(){x&&g(d(o,a,y,null!=x?x:void 0))}),[y,o,a,x]),w&&(f=!1),u.default.createElement(i.default,l({ref:r,href:P,prefetch:f},v))}var y=e.forwardRef(x),w=["locale"];function b(e,t){var n=e.locale,r=c(e,w),o=s();return u.default.createElement(y,l({ref:t,locale:n||o},r))}var P=e.forwardRef(b),g=!1;function O(e){return g||(console.warn("\n\nDEPRECATION WARNING: The import for `Link` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\n\n"),g=!0),u.default.createElement(P,l({},e))}var E=["children","locale","now"];function R(e){var t,r=e.children,a=e.locale,i=e.now,f=c(e,E);try{t=o.useRouter()}catch(e){}if(!a&&t&&(a=t.locale),"string"==typeof i&&(i=new Date(i)),!a)throw new Error(void 0);return u.default.createElement(n.IntlProvider,l({locale:a,now:i},f),r)}var j=!1,k=O;exports.Link=O,exports.LocalizedLink=k,exports.NextIntlClientProvider=R,exports.NextIntlProvider=R,exports.useLocalizedRouter=function(){return j||(console.warn("\n\nDEPRECATION WARNING: The `useLocalizedRouter` import from `next-intl` is deprecated and will be removed in the stable release of next-intl. Please import `useLocalizedRouter` from `next-intl/client` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n"),j=!0),function(){var n=t.useRouter(),r=s();return e.useMemo((function(){function e(e){return d(e,r,r,window.location.pathname)}return l({},n,{push:function(t){return n.push(e(t))},replace:function(t){return n.replace(e(t))},prefetch:function(t){return n.prefetch(e(t))}})}),[r,n])}()},Object.keys(n).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})}));
|
|
2
2
|
//# sourceMappingURL=next-intl.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-intl.cjs.production.min.js","sources":["../src/shared/constants.tsx","../src/client/useClientLocale.tsx","../src/shared/utils.tsx","../src/shared/BaseLink.tsx","../src/link/Link.tsx","../src/react-client/Link.tsx","../src/shared/NextIntlClientProvider.tsx","../src/react-client/useLocalizedRouter.tsx","../src/react-client/index.tsx","../src/client/useRouter.tsx"],"sourcesContent":["// Reuse the legacy cookie name\n// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie\nexport const COOKIE_LOCALE_NAME = 'NEXT_LOCALE';\n\n// Should take precedence over the cookie\nexport const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE';\n\n// In a URL like \"/en-US/about\", the locale segment is \"en-US\"\nexport const LOCALE_SEGMENT_NAME = 'locale';\n","import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n const params = useParams();\n if (params[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n","import {UrlObject} from 'url';\nimport NextLink from 'next/link';\nimport {ComponentProps} from 'react';\n\ntype Href = ComponentProps<typeof NextLink>['href'];\n\nexport function isRelativeHref(href: Href) {\n const pathname = typeof href === 'object' ? href.pathname : href;\n return pathname != null && !pathname.startsWith('/');\n}\n\nexport function isLocalHref(href: Href) {\n if (typeof href === 'object') {\n return href.host == null && href.hostname == null;\n } else {\n const hasProtocol = /^[a-z]+:/i.test(href);\n return !hasProtocol;\n }\n}\n\nexport function localizeHref(\n href: string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): UrlObject | string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string = locale,\n pathname: string\n) {\n if (!isLocalHref(href) || isRelativeHref(href)) {\n return href;\n }\n\n const isSwitchingLocale = locale !== defaultLocale;\n const isPathnamePrefixed =\n locale == null || hasPathnamePrefixed(locale, pathname);\n const shouldPrefix = isPathnamePrefixed || isSwitchingLocale;\n\n if (shouldPrefix && locale != null) {\n return prefixHref(href, locale);\n }\n\n return href;\n}\n\nexport function prefixHref(href: string, locale: string): string;\nexport function prefixHref(\n href: UrlObject | string,\n locale: string\n): UrlObject | string;\nexport function prefixHref(href: UrlObject | string, locale: string) {\n let prefixedHref;\n if (typeof href === 'string') {\n prefixedHref = localizePathname(locale, href);\n } else {\n prefixedHref = {...href};\n if (href.pathname) {\n prefixedHref.pathname = localizePathname(locale, href.pathname);\n }\n }\n\n return prefixedHref;\n}\n\nexport function unlocalizePathname(pathname: string, locale: string) {\n return pathname.replace(new RegExp(`^/${locale}`), '') || '/';\n}\n\nexport function localizePathname(locale: string, pathname: string) {\n let localizedHref = '/' + locale;\n\n if (pathname !== '/') {\n localizedHref += pathname;\n }\n\n return localizedHref;\n}\n\nexport function hasPathnamePrefixed(locale: string, pathname: string) {\n const prefix = `/${locale}`;\n return pathname === prefix || pathname.startsWith(`${prefix}/`);\n}\n","'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n const pathname = usePathname();\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n","import React, {ComponentProps, forwardRef} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport BaseLink from '../shared/BaseLink';\n\ntype Props = Omit<ComponentProps<typeof BaseLink>, 'locale'> & {\n locale?: string;\n};\n\nfunction Link({locale, ...rest}: Props, ref: Props['ref']) {\n const defaultLocale = useClientLocale();\n return <BaseLink ref={ref} locale={locale || defaultLocale} {...rest} />;\n}\n\n/**\n * Wraps `next/link` and prefixes the `href` with the current locale if\n * necessary.\n *\n * @example\n * ```tsx\n * import {Link} from 'next-intl';\n *\n * // When the user is on `/en`, the link will point to `/en/about`\n * <Link href=\"/about\">About</Link>\n *\n * // You can override the `locale` to switch to another language\n * <Link href=\"/\" locale=\"de\">Switch to German</Link>\n * ```\n *\n * Note that when a `locale` prop is passed to switch the locale, the `prefetch`\n * prop is not supported. This is because Next.js would prefetch the page and\n * the `set-cookie` response header would cause the locale cookie on the current\n * page to be overwritten before the user even decides to change the locale.\n */\nexport default forwardRef(Link);\n","import React, {ComponentProps} from 'react';\nimport Link from '../link';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport default function LinkDeprecated(props: ComponentProps<typeof Link>) {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The import for \\`Link\\` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\\n\\n`\n );\n hasWarned = true;\n }\n\n return <Link {...props} />;\n}\n","'use client';\n\nimport {useRouter} from 'next/router';\nimport React, {ComponentProps} from 'react';\nimport {IntlProvider} from 'use-intl';\n\ntype Props = Omit<ComponentProps<typeof IntlProvider>, 'locale' | 'now'> & {\n locale?: string;\n /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */\n now?: Date | string;\n};\n\nexport default function NextIntlClientProvider({\n children,\n locale,\n now,\n ...rest\n}: Props) {\n let router;\n try {\n // Reading from context is practically ok to do conditionally\n // eslint-disable-next-line react-hooks/rules-of-hooks\n router = useRouter();\n } catch (error) {\n // Calling `useRouter` is not supported in the app folder\n }\n\n // The router can be undefined if used in a context outside\n // of Next.js (e.g. unit tests, Storybook, ...)\n if (!locale && router) {\n locale = router.locale;\n }\n\n // Currently RSC serialize dates to strings, therefore make sure we have\n // a date object. We might be able to remove this once more types have\n // first-class serialization support (https://github.com/facebook/react/issues/25687)\n if (typeof now === 'string') {\n now = new Date(now);\n }\n\n if (!locale) {\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? \"Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing).\"\n : undefined\n );\n }\n\n return (\n <IntlProvider locale={locale} now={now} {...rest}>\n {children}\n </IntlProvider>\n );\n}\n","import useRouter from '../client/useRouter';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\nexport default function useLocalizedRouterDeprecated() {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The \\`useLocalizedRouter\\` import from \\`next-intl\\` is deprecated and will be removed in the stable release of next-intl. Please import \\`useLocalizedRouter\\` from \\`next-intl/client\\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\\n\\n`\n );\n hasWarned = true;\n }\n\n return useRouter();\n}\n","/**\n * This is the main entry file when non-'react-server'\n * environments import from 'next-intl'.\n *\n * Maintainer notes:\n * - Make sure this mirrors the API from 'react-server'.\n * - Make sure everything exported from this module is\n * supported in all Next.js versions that are supported.\n */\n\nimport Link from './Link';\n\nexport * from 'use-intl';\nexport {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider';\n\n// Legacy export (TBD if we'll deprecate this in favour of `NextIntlClientProvider`)\nexport {default as NextIntlProvider} from '../shared/NextIntlClientProvider';\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport const LocalizedLink = Link;\nexport {default as Link} from './Link';\n\nexport {default as useLocalizedRouter} from './useLocalizedRouter';\n","import {useRouter as useNextRouter} from 'next/navigation';\nimport {useMemo} from 'react';\nimport {localizeHref} from '../shared/utils';\nimport useClientLocale from './useClientLocale';\n\n/**\n * Returns a wrapped instance of `useRouter` from `next/navigation` that\n * will automatically localize the `href` parameters it receives.\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import {useRouter} from 'next-intl/client';\n *\n * const router = useRouter();\n *\n * // When the user is on `/en`, the router will navigate to `/en/about`\n * router.push('/about');\n * ```\n */\nexport default function useRouter() {\n const router = useNextRouter();\n const locale = useClientLocale();\n\n return useMemo(() => {\n function localize(href: string) {\n return localizeHref(href, locale, locale, window.location.pathname);\n }\n\n return {\n ...router,\n push(href: string) {\n return router.push(localize(href));\n },\n replace(href: string) {\n return router.replace(localize(href));\n },\n prefetch(href: string) {\n return router.prefetch(localize(href));\n }\n };\n }, [locale, router]);\n}\n"],"names":["LOCALE_SEGMENT_NAME","useClientLocale","params","useParams","useLocale","isLocalHref","href","host","hostname","test","localizeHref","locale","defaultLocale","pathname","startsWith","isRelativeHref","isSwitchingLocale","isPathnamePrefixed","prefix","hasPathnamePrefixed","prefixHref","prefixedHref","localizePathname","_extends","localizedHref","_excluded","BaseLink","_ref","ref","prefetch","rest","_objectWithoutPropertiesLoose","usePathname","isChangingLocale","_useState","useState","setLocalizedHref","useEffect","undefined","React","createElement","NextLink","BaseLink$1","forwardRef","Link","Link$1","hasWarned","LinkDeprecated","props","console","warn","NextIntlClientProvider","router","children","now","useRouter","error","Date","Error","IntlProvider","LocalizedLink","useNextRouter","useMemo","localize","window","location","push","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"next-intl.cjs.production.min.js","sources":["../src/shared/constants.tsx","../src/client/useClientLocale.tsx","../src/shared/utils.tsx","../src/shared/BaseLink.tsx","../src/link/Link.tsx","../src/react-client/Link.tsx","../src/shared/NextIntlClientProvider.tsx","../src/react-client/useLocalizedRouter.tsx","../src/react-client/index.tsx","../src/client/useRouter.tsx"],"sourcesContent":["// Reuse the legacy cookie name\n// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie\nexport const COOKIE_LOCALE_NAME = 'NEXT_LOCALE';\n\n// Should take precedence over the cookie\nexport const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE';\n\n// In a URL like \"/en-US/about\", the locale segment is \"en-US\"\nexport const LOCALE_SEGMENT_NAME = 'locale';\n","import {useParams} from 'next/navigation';\nimport {useLocale} from 'use-intl';\nimport {LOCALE_SEGMENT_NAME} from '../shared/constants';\n\nexport default function useClientLocale(): string {\n let locale;\n\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const params = useParams() as ReturnType<typeof useParams> | null;\n\n if (params?.[LOCALE_SEGMENT_NAME]) {\n locale = params[LOCALE_SEGMENT_NAME];\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine\n locale = useLocale();\n }\n\n return locale;\n}\n","import {UrlObject} from 'url';\nimport NextLink from 'next/link';\nimport {ComponentProps} from 'react';\n\ntype Href = ComponentProps<typeof NextLink>['href'];\n\nexport function isRelativeHref(href: Href) {\n const pathname = typeof href === 'object' ? href.pathname : href;\n return pathname != null && !pathname.startsWith('/');\n}\n\nexport function isLocalHref(href: Href) {\n if (typeof href === 'object') {\n return href.host == null && href.hostname == null;\n } else {\n const hasProtocol = /^[a-z]+:/i.test(href);\n return !hasProtocol;\n }\n}\n\nexport function localizeHref(\n href: string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string,\n pathname: string\n): UrlObject | string;\nexport function localizeHref(\n href: UrlObject | string,\n locale: string,\n defaultLocale: string = locale,\n pathname: string\n) {\n if (!isLocalHref(href) || isRelativeHref(href)) {\n return href;\n }\n\n const isSwitchingLocale = locale !== defaultLocale;\n const isPathnamePrefixed =\n locale == null || hasPathnamePrefixed(locale, pathname);\n const shouldPrefix = isPathnamePrefixed || isSwitchingLocale;\n\n if (shouldPrefix && locale != null) {\n return prefixHref(href, locale);\n }\n\n return href;\n}\n\nexport function prefixHref(href: string, locale: string): string;\nexport function prefixHref(\n href: UrlObject | string,\n locale: string\n): UrlObject | string;\nexport function prefixHref(href: UrlObject | string, locale: string) {\n let prefixedHref;\n if (typeof href === 'string') {\n prefixedHref = localizePathname(locale, href);\n } else {\n prefixedHref = {...href};\n if (href.pathname) {\n prefixedHref.pathname = localizePathname(locale, href.pathname);\n }\n }\n\n return prefixedHref;\n}\n\nexport function unlocalizePathname(pathname: string, locale: string) {\n return pathname.replace(new RegExp(`^/${locale}`), '') || '/';\n}\n\nexport function localizePathname(locale: string, pathname: string) {\n let localizedHref = '/' + locale;\n\n if (pathname !== '/') {\n localizedHref += pathname;\n }\n\n return localizedHref;\n}\n\nexport function hasPathnamePrefixed(locale: string, pathname: string) {\n const prefix = `/${locale}`;\n return pathname === prefix || pathname.startsWith(`${prefix}/`);\n}\n","'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const pathname = usePathname() as ReturnType<typeof usePathname> | null;\n\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n if (!pathname) return;\n\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n","import React, {ComponentProps, forwardRef} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport BaseLink from '../shared/BaseLink';\n\ntype Props = Omit<ComponentProps<typeof BaseLink>, 'locale'> & {\n locale?: string;\n};\n\nfunction Link({locale, ...rest}: Props, ref: Props['ref']) {\n const defaultLocale = useClientLocale();\n return <BaseLink ref={ref} locale={locale || defaultLocale} {...rest} />;\n}\n\n/**\n * Wraps `next/link` and prefixes the `href` with the current locale if\n * necessary.\n *\n * @example\n * ```tsx\n * import {Link} from 'next-intl';\n *\n * // When the user is on `/en`, the link will point to `/en/about`\n * <Link href=\"/about\">About</Link>\n *\n * // You can override the `locale` to switch to another language\n * <Link href=\"/\" locale=\"de\">Switch to German</Link>\n * ```\n *\n * Note that when a `locale` prop is passed to switch the locale, the `prefetch`\n * prop is not supported. This is because Next.js would prefetch the page and\n * the `set-cookie` response header would cause the locale cookie on the current\n * page to be overwritten before the user even decides to change the locale.\n */\nexport default forwardRef(Link);\n","import React, {ComponentProps} from 'react';\nimport Link from '../link';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport default function LinkDeprecated(props: ComponentProps<typeof Link>) {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The import for \\`Link\\` from next-intl has changed.\n\nPreviously: import {Link} from 'next-intl';\nNow: import Link from 'next-intl/link';\n\nPlease upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\\n\\n`\n );\n hasWarned = true;\n }\n\n return <Link {...props} />;\n}\n","'use client';\n\nimport {useRouter} from 'next/router';\nimport React, {ComponentProps} from 'react';\nimport {IntlProvider} from 'use-intl';\n\ntype Props = Omit<ComponentProps<typeof IntlProvider>, 'locale' | 'now'> & {\n locale?: string;\n /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */\n now?: Date | string;\n};\n\nexport default function NextIntlClientProvider({\n children,\n locale,\n now,\n ...rest\n}: Props) {\n let router;\n try {\n // Reading from context is practically ok to do conditionally\n // eslint-disable-next-line react-hooks/rules-of-hooks\n router = useRouter();\n } catch (error) {\n // Calling `useRouter` is not supported in the app folder\n }\n\n // The router can be undefined if used in a context outside\n // of Next.js (e.g. unit tests, Storybook, ...)\n if (!locale && router) {\n locale = router.locale;\n }\n\n // Currently RSC serialize dates to strings, therefore make sure we have\n // a date object. We might be able to remove this once more types have\n // first-class serialization support (https://github.com/facebook/react/issues/25687)\n if (typeof now === 'string') {\n now = new Date(now);\n }\n\n if (!locale) {\n throw new Error(\n process.env.NODE_ENV !== 'production'\n ? \"Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing).\"\n : undefined\n );\n }\n\n return (\n <IntlProvider locale={locale} now={now} {...rest}>\n {children}\n </IntlProvider>\n );\n}\n","import useRouter from '../client/useRouter';\n\n// TODO: Only available for backwards compatibility\n// during the beta, remove for stable release\n\nlet hasWarned = false;\n\nexport default function useLocalizedRouterDeprecated() {\n if (!hasWarned) {\n console.warn(\n `\\n\\nDEPRECATION WARNING: The \\`useLocalizedRouter\\` import from \\`next-intl\\` is deprecated and will be removed in the stable release of next-intl. Please import \\`useLocalizedRouter\\` from \\`next-intl/client\\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\\n\\n`\n );\n hasWarned = true;\n }\n\n return useRouter();\n}\n","/**\n * This is the main entry file when non-'react-server'\n * environments import from 'next-intl'.\n *\n * Maintainer notes:\n * - Make sure this mirrors the API from 'react-server'.\n * - Make sure everything exported from this module is\n * supported in all Next.js versions that are supported.\n */\n\nimport Link from './Link';\n\nexport * from 'use-intl';\nexport {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider';\n\n// Legacy export (TBD if we'll deprecate this in favour of `NextIntlClientProvider`)\nexport {default as NextIntlProvider} from '../shared/NextIntlClientProvider';\n\n/** @deprecated Is available as `import Link from 'next-intl/link'` now. */\nexport const LocalizedLink = Link;\nexport {default as Link} from './Link';\n\nexport {default as useLocalizedRouter} from './useLocalizedRouter';\n","import {useRouter as useNextRouter} from 'next/navigation';\nimport {useMemo} from 'react';\nimport {localizeHref} from '../shared/utils';\nimport useClientLocale from './useClientLocale';\n\n/**\n * Returns a wrapped instance of `useRouter` from `next/navigation` that\n * will automatically localize the `href` parameters it receives.\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import {useRouter} from 'next-intl/client';\n *\n * const router = useRouter();\n *\n * // When the user is on `/en`, the router will navigate to `/en/about`\n * router.push('/about');\n * ```\n */\nexport default function useRouter() {\n const router = useNextRouter();\n const locale = useClientLocale();\n\n return useMemo(() => {\n function localize(href: string) {\n return localizeHref(href, locale, locale, window.location.pathname);\n }\n\n return {\n ...router,\n push(href: string) {\n return router.push(localize(href));\n },\n replace(href: string) {\n return router.replace(localize(href));\n },\n prefetch(href: string) {\n return router.prefetch(localize(href));\n }\n };\n }, [locale, router]);\n}\n"],"names":["LOCALE_SEGMENT_NAME","useClientLocale","params","useParams","useLocale","isLocalHref","href","host","hostname","test","localizeHref","locale","defaultLocale","pathname","startsWith","isRelativeHref","isSwitchingLocale","isPathnamePrefixed","prefix","hasPathnamePrefixed","prefixHref","prefixedHref","localizePathname","_extends","localizedHref","_excluded","BaseLink","_ref","ref","prefetch","rest","_objectWithoutPropertiesLoose","usePathname","isChangingLocale","_useState","useState","setLocalizedHref","useEffect","undefined","React","createElement","NextLink","BaseLink$1","forwardRef","Link","Link$1","hasWarned","LinkDeprecated","props","console","warn","NextIntlClientProvider","router","children","now","useRouter","error","Date","Error","IntlProvider","LocalizedLink","useNextRouter","useMemo","localize","window","location","push","replace"],"mappings":"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"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Returns a formatter based on the given locale.
|
|
3
|
+
*
|
|
4
|
+
* The formatter automatically receives the request config, but
|
|
5
|
+
* you can override it by passing in additional options.
|
|
6
|
+
*/
|
|
7
|
+
declare const getFormatter: (opts?: {
|
|
8
|
+
locale: string;
|
|
9
|
+
}) => Promise<{
|
|
2
10
|
dateTime: (value: number | Date, formatOrOptions?: string | import("use-intl/dist/src/core/DateTimeFormatOptions").default | undefined) => string;
|
|
3
11
|
number: (value: number | bigint, formatOrOptions?: string | import("use-intl/dist/src/core").NumberFormatOptions | undefined) => string;
|
|
4
12
|
relativeTime: (date: number | Date, now?: number | Date | undefined) => string;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export default getLocale;
|
|
1
|
+
export default function getLocale(): string;
|
package/dist/server/getNow.d.ts
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type Formats from 'use-intl/dist/src/core/Formats';
|
|
2
|
+
import type TranslationValues from 'use-intl/dist/src/core/TranslationValues';
|
|
3
|
+
import { CoreRichTranslationValues } from 'use-intl/dist/src/core/createTranslatorImpl';
|
|
4
|
+
import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys';
|
|
5
|
+
import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys';
|
|
6
|
+
import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf';
|
|
7
|
+
import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf';
|
|
8
|
+
declare function getTranslatorImpl<NestedKey extends NamespaceKeys<IntlMessages, NestedKeyOf<IntlMessages>> = never>(opts: {
|
|
9
|
+
namespace?: NestedKey;
|
|
10
|
+
locale: string;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
<TargetKey extends MessageKeys<NestedValueOf<{
|
|
13
|
+
'!': IntlMessages;
|
|
14
|
+
}, [
|
|
15
|
+
NestedKey
|
|
16
|
+
] extends [never] ? '!' : `!.${NestedKey}`>, NestedKeyOf<NestedValueOf<{
|
|
17
|
+
'!': IntlMessages;
|
|
18
|
+
}, [
|
|
19
|
+
NestedKey
|
|
20
|
+
] extends [never] ? '!' : `!.${NestedKey}`>>>>(key: TargetKey, values?: TranslationValues, formats?: Partial<Formats>): string;
|
|
21
|
+
rich<TargetKey extends MessageKeys<NestedValueOf<{
|
|
22
|
+
'!': IntlMessages;
|
|
23
|
+
}, [
|
|
24
|
+
NestedKey
|
|
25
|
+
] extends [never] ? '!' : `!.${NestedKey}`>, NestedKeyOf<NestedValueOf<{
|
|
26
|
+
'!': IntlMessages;
|
|
27
|
+
}, [
|
|
28
|
+
NestedKey
|
|
29
|
+
] extends [never] ? '!' : `!.${NestedKey}`>>>>(key: TargetKey, values?: CoreRichTranslationValues, formats?: Partial<Formats>): string;
|
|
30
|
+
raw<TargetKey extends MessageKeys<NestedValueOf<{
|
|
31
|
+
'!': IntlMessages;
|
|
32
|
+
}, [
|
|
33
|
+
NestedKey
|
|
34
|
+
] extends [never] ? '!' : `!.${NestedKey}`>, NestedKeyOf<NestedValueOf<{
|
|
35
|
+
'!': IntlMessages;
|
|
36
|
+
}, [
|
|
37
|
+
NestedKey
|
|
38
|
+
] extends [never] ? '!' : `!.${NestedKey}`>>>>(key: TargetKey): any;
|
|
39
|
+
}>;
|
|
40
|
+
declare const _default: typeof getTranslatorImpl;
|
|
41
|
+
export default _default;
|
package/dist/server/index.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export { default as getLocale } from './getLocale';
|
|
|
11
11
|
export { default as getNow } from './getNow';
|
|
12
12
|
export { default as getTimeZone } from './getTimeZone';
|
|
13
13
|
export { default as getTranslations } from './getTranslations';
|
|
14
|
+
export { default as getTranslator } from './getTranslator';
|
|
14
15
|
export { default as redirect } from './redirect';
|
|
@@ -11,6 +11,8 @@ function BaseLink(_ref, ref) {
|
|
|
11
11
|
locale = _ref.locale,
|
|
12
12
|
prefetch = _ref.prefetch,
|
|
13
13
|
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
14
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
15
|
+
// `useParams` can be called, but the return type is `null`.
|
|
14
16
|
var pathname = usePathname();
|
|
15
17
|
var defaultLocale = useClientLocale();
|
|
16
18
|
var isChangingLocale = locale !== defaultLocale;
|
|
@@ -29,6 +31,7 @@ function BaseLink(_ref, ref) {
|
|
|
29
31
|
localizedHref = _useState[0],
|
|
30
32
|
setLocalizedHref = _useState[1];
|
|
31
33
|
useEffect(function () {
|
|
34
|
+
if (!pathname) return;
|
|
32
35
|
setLocalizedHref(localizeHref(href, locale, defaultLocale, pathname != null ? pathname : undefined));
|
|
33
36
|
}, [defaultLocale, href, locale, pathname]);
|
|
34
37
|
if (isChangingLocale) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-intl.esm3.js","sources":["../../src/shared/BaseLink.tsx"],"sourcesContent":["'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n const pathname = usePathname();\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n"],"names":["_excluded","BaseLink","_ref","ref","href","locale","prefetch","rest","_objectWithoutPropertiesLoose","pathname","usePathname","defaultLocale","useClientLocale","isChangingLocale","_useState","useState","isLocalHref","prefixHref","localizedHref","setLocalizedHref","useEffect","localizeHref","undefined","process","env","NODE_ENV","console","error","React","createElement","NextLink","_extends","forwardRef"],"mappings":";;;;;;;AAAa,IAAAA,SAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,CAAA,CAAA;AAYb,SAASC,QAAQA,CAAAC,IAAA,EAA2CC,GAAiB,EAAA;AAAA,EAAA,IAA1DC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,MAAM,GAAAH,IAAA,CAANG,MAAM;IAAEC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;AAAKC,IAAAA,IAAI,GAAAC,6BAAA,CAAAN,IAAA,EAAAF,SAAA,CAAA,CAAA;AAChD,EAAA,IAAMS,QAAQ,GAAGC,WAAW,
|
|
1
|
+
{"version":3,"file":"next-intl.esm3.js","sources":["../../src/shared/BaseLink.tsx"],"sourcesContent":["'use client';\n\nimport NextLink from 'next/link';\nimport {usePathname} from 'next/navigation';\nimport React, {ComponentProps, forwardRef, useEffect, useState} from 'react';\nimport useClientLocale from '../client/useClientLocale';\nimport {isLocalHref, localizeHref, prefixHref} from './utils';\n\ntype Props = Omit<ComponentProps<typeof NextLink>, 'locale'> & {\n locale: string;\n};\n\nfunction BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) {\n // The types aren't entirely correct here. Outside of Next.js\n // `useParams` can be called, but the return type is `null`.\n const pathname = usePathname() as ReturnType<typeof usePathname> | null;\n\n const defaultLocale = useClientLocale();\n const isChangingLocale = locale !== defaultLocale;\n\n const [localizedHref, setLocalizedHref] = useState<typeof href>(() =>\n isLocalHref(href) && locale\n ? // Potentially the href shouldn't be prefixed, but to determine this we\n // need a) the default locale and b) the information if we use prefixed\n // routing. During the server side render (both in RSC as well as SSR),\n // we don't have this information. Therefore we always prefix the href\n // since this will always result in a valid URL, even if it might cause\n // a redirect. This is better than pointing to a non-localized href\n // during the server render, which would potentially be wrong. The final\n // href is determined in the effect below.\n prefixHref(href, locale)\n : href\n );\n\n useEffect(() => {\n if (!pathname) return;\n\n setLocalizedHref(\n localizeHref(href, locale, defaultLocale, pathname ?? undefined)\n );\n }, [defaultLocale, href, locale, pathname]);\n\n if (isChangingLocale) {\n if (prefetch && process.env.NODE_ENV !== 'production') {\n console.error(\n 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`'\n );\n }\n prefetch = false;\n }\n\n return (\n <NextLink ref={ref} href={localizedHref} prefetch={prefetch} {...rest} />\n );\n}\n\nexport default forwardRef(BaseLink);\n"],"names":["_excluded","BaseLink","_ref","ref","href","locale","prefetch","rest","_objectWithoutPropertiesLoose","pathname","usePathname","defaultLocale","useClientLocale","isChangingLocale","_useState","useState","isLocalHref","prefixHref","localizedHref","setLocalizedHref","useEffect","localizeHref","undefined","process","env","NODE_ENV","console","error","React","createElement","NextLink","_extends","forwardRef"],"mappings":";;;;;;;AAAa,IAAAA,SAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,CAAA,CAAA;AAYb,SAASC,QAAQA,CAAAC,IAAA,EAA2CC,GAAiB,EAAA;AAAA,EAAA,IAA1DC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,MAAM,GAAAH,IAAA,CAANG,MAAM;IAAEC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;AAAKC,IAAAA,IAAI,GAAAC,6BAAA,CAAAN,IAAA,EAAAF,SAAA,CAAA,CAAA;AAChD;AACA;AACA,EAAA,IAAMS,QAAQ,GAAGC,WAAW,EAA2C,CAAA;AAEvE,EAAA,IAAMC,aAAa,GAAGC,eAAe,EAAE,CAAA;AACvC,EAAA,IAAMC,gBAAgB,GAAGR,MAAM,KAAKM,aAAa,CAAA;EAEjD,IAAAG,SAAA,GAA0CC,QAAQ,CAAc,YAAA;AAAA,MAAA,OAC9DC,WAAW,CAACZ,IAAI,CAAC,IAAIC,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAY,MAAAA,UAAU,CAACb,IAAI,EAAEC,MAAM,CAAC,GACxBD,IAAI,CAAA;KACT,CAAA;AAZMc,IAAAA,aAAa,GAAAJ,SAAA,CAAA,CAAA,CAAA;AAAEK,IAAAA,gBAAgB,GAAAL,SAAA,CAAA,CAAA,CAAA,CAAA;AActCM,EAAAA,SAAS,CAAC,YAAK;IACb,IAAI,CAACX,QAAQ,EAAE,OAAA;AAEfU,IAAAA,gBAAgB,CACdE,YAAY,CAACjB,IAAI,EAAEC,MAAM,EAAEM,aAAa,EAAEF,QAAQ,IAARA,IAAAA,GAAAA,QAAQ,GAAIa,SAAS,CAAC,CACjE,CAAA;GACF,EAAE,CAACX,aAAa,EAAEP,IAAI,EAAEC,MAAM,EAAEI,QAAQ,CAAC,CAAC,CAAA;AAE3C,EAAA,IAAII,gBAAgB,EAAE;IACpB,IAAIP,QAAQ,IAAIiB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;AACrDC,MAAAA,OAAO,CAACC,KAAK,CACX,8GAA8G,CAC/G,CAAA;AACF,KAAA;AACDrB,IAAAA,QAAQ,GAAG,KAAK,CAAA;AACjB,GAAA;AAED,EAAA,OACEsB,KAAC,CAAAC,aAAA,CAAAC,QAAQ,EAAAC,QAAA,CAAA;AAAC5B,IAAAA,GAAG,EAAEA,GAAG;AAAEC,IAAAA,IAAI,EAAEc,aAAa;AAAEZ,IAAAA,QAAQ,EAAEA,QAAAA;GAAcC,EAAAA,IAAI,CAAA,CAAI,CAAA;AAE7E,CAAA;AAEA,iBAAeyB,aAAAA,UAAU,CAAC/B,QAAQ,CAAC;;;;"}
|
|
@@ -3,8 +3,10 @@ import { useLocale } from 'use-intl';
|
|
|
3
3
|
import { LOCALE_SEGMENT_NAME } from '../shared/constants';
|
|
4
4
|
export default function useClientLocale() {
|
|
5
5
|
let locale;
|
|
6
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
7
|
+
// `useParams` can be called, but the return type is `null`.
|
|
6
8
|
const params = useParams();
|
|
7
|
-
if (params[LOCALE_SEGMENT_NAME]) {
|
|
9
|
+
if (params === null || params === void 0 ? void 0 : params[LOCALE_SEGMENT_NAME]) {
|
|
8
10
|
locale = params[LOCALE_SEGMENT_NAME];
|
|
9
11
|
}
|
|
10
12
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClientLocale.js","sourceRoot":"","sources":["../../../src/client/useClientLocale.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAC;AACnC,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,eAAe;IACrC,IAAI,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"useClientLocale.js","sourceRoot":"","sources":["../../../src/client/useClientLocale.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAC;AACnC,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,eAAe;IACrC,IAAI,MAAM,CAAC;IAEX,6DAA6D;IAC7D,4DAA4D;IAC5D,MAAM,MAAM,GAAG,SAAS,EAAyC,CAAC;IAElE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,mBAAmB,CAAC,EAAE;QACjC,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;KACtC;SAAM;QACL,oGAAoG;QACpG,MAAM,GAAG,SAAS,EAAE,CAAC;KACtB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -17,9 +17,13 @@ import useClientLocale from './useClientLocale';
|
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
19
|
export default function usePathname() {
|
|
20
|
+
// The types aren't entirely correct here. Outside of Next.js
|
|
21
|
+
// `useParams` can be called, but the return type is `null`.
|
|
20
22
|
const pathname = useNextPathname();
|
|
21
23
|
const locale = useClientLocale();
|
|
22
24
|
return useMemo(() => {
|
|
25
|
+
if (!pathname)
|
|
26
|
+
return pathname;
|
|
23
27
|
const isPathnamePrefixed = hasPathnamePrefixed(locale, pathname);
|
|
24
28
|
const unlocalizedPathname = isPathnamePrefixed
|
|
25
29
|
? unlocalizePathname(pathname, locale)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePathname.js","sourceRoot":"","sources":["../../../src/client/usePathname.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACxE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,MAAM,QAAQ,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"usePathname.js","sourceRoot":"","sources":["../../../src/client/usePathname.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACxE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,6DAA6D;IAC7D,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,eAAe,EAExB,CAAC;IAET,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,QAAQ;YAAE,OAAO,QAA8C,CAAC;QAErE,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,mBAAmB,GAAG,kBAAkB;YAC5C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC;QAEb,OAAO,mBAAmB,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import getFormatter from '../server/getFormatter';
|
|
2
2
|
import useHook from './useHook';
|
|
3
|
+
import useLocale from './useLocale';
|
|
3
4
|
export default function useFormatter(
|
|
4
5
|
// eslint-disable-next-line no-empty-pattern
|
|
5
6
|
...[]) {
|
|
6
|
-
|
|
7
|
+
const locale = useLocale();
|
|
8
|
+
return useHook('useFormatter', getFormatter({ locale }));
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=useFormatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormatter.js","sourceRoot":"","sources":["../../../src/react-server/useFormatter.tsx"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"useFormatter.js","sourceRoot":"","sources":["../../../src/react-server/useFormatter.tsx"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,OAAO,UAAU,YAAY;AAClC,4CAA4C;AAC5C,GAAG,EAAuC;IAE1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import getLocaleFromHeader from '../server/getLocaleFromHeader';
|
|
2
2
|
export default function useLocale(
|
|
3
3
|
// eslint-disable-next-line no-empty-pattern
|
|
4
4
|
...[]) {
|
|
5
|
-
return
|
|
5
|
+
return getLocaleFromHeader();
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=useLocale.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocale.js","sourceRoot":"","sources":["../../../src/react-server/useLocale.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useLocale.js","sourceRoot":"","sources":["../../../src/react-server/useLocale.tsx"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAEhE,MAAM,CAAC,OAAO,UAAU,SAAS;AAC/B,4CAA4C;AAC5C,GAAG,EAAoC;IAEvC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import getNow from '../server/getNow';
|
|
2
2
|
import useHook from './useHook';
|
|
3
|
+
import useLocale from './useLocale';
|
|
3
4
|
export default function useNow(...[options]) {
|
|
4
5
|
if ((options === null || options === void 0 ? void 0 : options.updateInterval) != null) {
|
|
5
6
|
console.error("`useNow` doesn't support the `updateInterval` option in Server Components, the value will be ignored. If you need the value to update, you can convert the component to a Client Component.");
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
+
const locale = useLocale();
|
|
9
|
+
return useHook('useNow', getNow({ locale }));
|
|
8
10
|
}
|
|
9
11
|
//# sourceMappingURL=useNow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNow.js","sourceRoot":"","sources":["../../../src/react-server/useNow.tsx"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,OAAO,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"useNow.js","sourceRoot":"","sources":["../../../src/react-server/useNow.tsx"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,GAAG,CAAC,OAAO,CAAgC;IAE3C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,KAAI,IAAI,EAAE;QACnC,OAAO,CAAC,KAAK,CACX,6LAA6L,CAC9L,CAAC;KACH;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import getTimeZone from '../server/getTimeZone';
|
|
2
2
|
import useHook from './useHook';
|
|
3
|
+
import useLocale from './useLocale';
|
|
3
4
|
export default function useTimeZone(
|
|
4
5
|
// eslint-disable-next-line no-empty-pattern
|
|
5
6
|
...[]) {
|
|
6
|
-
|
|
7
|
+
const locale = useLocale();
|
|
8
|
+
return useHook('useTimeZone', getTimeZone({ locale }));
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=useTimeZone.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTimeZone.js","sourceRoot":"","sources":["../../../src/react-server/useTimeZone.tsx"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,OAAO,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"useTimeZone.js","sourceRoot":"","sources":["../../../src/react-server/useTimeZone.tsx"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,OAAO,UAAU,WAAW;AACjC,4CAA4C;AAC5C,GAAG,EAAsC;IAEzC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import getTranslator from '../server/getTranslator';
|
|
2
2
|
import useHook from './useHook';
|
|
3
|
+
import useLocale from './useLocale';
|
|
3
4
|
export default function useTranslations(...[namespace]) {
|
|
4
|
-
const
|
|
5
|
+
const locale = useLocale();
|
|
6
|
+
const result = useHook('useTranslations', getTranslator({ namespace, locale }));
|
|
5
7
|
// The types are slightly off here and indicate that rich text formatting
|
|
6
8
|
// doesn't integrate with React - this is not the case.
|
|
7
9
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslations.js","sourceRoot":"","sources":["../../../src/react-server/useTranslations.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useTranslations.js","sourceRoot":"","sources":["../../../src/react-server/useTranslations.tsx"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,GAAG,CAAC,SAAS,CAAyC;IAEtD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;IAE9E,yEAAyE;IACzE,uDAAuD;IACvD,OAAO,MAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { cache } from 'react';
|
|
2
2
|
import getInitializedConfig from 'use-intl/dist/src/react/getInitializedConfig';
|
|
3
3
|
import createRequestConfig from '../server/createRequestConfig';
|
|
4
|
-
|
|
4
|
+
// Make sure `now` is consistent across the request in case none was configured
|
|
5
|
+
const getDefaultNow = cache(() => new Date());
|
|
5
6
|
const receiveRuntimeConfig = cache(async (locale, getConfig) => {
|
|
6
7
|
let result = getConfig === null || getConfig === void 0 ? void 0 : getConfig({ locale });
|
|
7
8
|
if (result instanceof Promise) {
|
|
@@ -9,12 +10,10 @@ const receiveRuntimeConfig = cache(async (locale, getConfig) => {
|
|
|
9
10
|
}
|
|
10
11
|
return {
|
|
11
12
|
...result,
|
|
12
|
-
|
|
13
|
-
now: (result === null || result === void 0 ? void 0 : result.now) || new Date()
|
|
13
|
+
now: (result === null || result === void 0 ? void 0 : result.now) || getDefaultNow()
|
|
14
14
|
};
|
|
15
15
|
});
|
|
16
|
-
const getConfig = cache(async () => {
|
|
17
|
-
const locale = getLocale();
|
|
16
|
+
const getConfig = cache(async (locale) => {
|
|
18
17
|
const runtimeConfig = await receiveRuntimeConfig(locale, createRequestConfig);
|
|
19
18
|
const opts = { ...runtimeConfig, locale };
|
|
20
19
|
return getInitializedConfig(opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getConfig.js","sourceRoot":"","sources":["../../../src/server/getConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,OAAO,CAAC;AAC5B,OAAO,oBAAoB,MAAM,8CAA8C,CAAC;AAChF,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"getConfig.js","sourceRoot":"","sources":["../../../src/server/getConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,OAAO,CAAC;AAC5B,OAAO,oBAAoB,MAAM,8CAA8C,CAAC;AAChF,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAEhE,+EAA+E;AAC/E,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAE9C,MAAM,oBAAoB,GAAG,KAAK,CAChC,KAAK,EAAE,MAAc,EAAE,SAAsC,EAAE,EAAE;IAC/D,IAAI,MAAM,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,EAAC,MAAM,EAAC,CAAC,CAAC;IACnC,IAAI,MAAM,YAAY,OAAO,EAAE;QAC7B,MAAM,GAAG,MAAM,MAAM,CAAC;KACvB;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,KAAI,aAAa,EAAE;KACpC,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;IAC/C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,EAAC,GAAG,aAAa,EAAE,MAAM,EAAC,CAAC;IACxC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Returns a formatter based on the given locale.
|
|
3
|
+
*
|
|
4
|
+
* The formatter automatically receives the request config, but
|
|
5
|
+
* you can override it by passing in additional options.
|
|
6
|
+
*/
|
|
7
|
+
declare const getFormatter: (opts?: {
|
|
8
|
+
locale: string;
|
|
9
|
+
}) => Promise<{
|
|
2
10
|
dateTime: (value: number | Date, formatOrOptions?: string | import("use-intl/dist/src/core/DateTimeFormatOptions").default | undefined) => string;
|
|
3
11
|
number: (value: number | bigint, formatOrOptions?: string | import("use-intl/dist/src/core").NumberFormatOptions | undefined) => string;
|
|
4
12
|
relativeTime: (date: number | Date, now?: number | Date | undefined) => string;
|