@intlayer/docs 7.1.0-canary.2 → 7.1.1-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/internationalization_and_SEO.md +0 -4
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/de/internationalization_and_SEO.md +0 -2
- package/blog/en/internationalization_and_SEO.md +0 -2
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/en-GB/internationalization_and_SEO.md +0 -2
- package/blog/es/internationalization_and_SEO.md +0 -4
- package/blog/fr/internationalization_and_SEO.md +0 -2
- package/blog/hi/internationalization_and_SEO.md +0 -2
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/it/internationalization_and_SEO.md +0 -2
- package/blog/ja/internationalization_and_SEO.md +0 -2
- package/blog/ko/internationalization_and_SEO.md +0 -2
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/pt/internationalization_and_SEO.md +0 -4
- package/blog/ru/internationalization_and_SEO.md +0 -4
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/zh/internationalization_and_SEO.md +0 -4
- package/docs/ar/intlayer_with_nextjs_14.md +9 -9
- package/docs/ar/intlayer_with_nextjs_15.md +9 -8
- package/docs/ar/intlayer_with_nextjs_16.md +2 -56
- package/docs/ar/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/ar/intlayer_with_react_router_v7.md +6 -6
- package/docs/ar/intlayer_with_tanstack.md +46 -31
- package/docs/ar/intlayer_with_vite+preact.md +7 -7
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/de/intlayer_with_nextjs_14.md +9 -9
- package/docs/de/intlayer_with_nextjs_15.md +9 -8
- package/docs/de/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/de/intlayer_with_react_router_v7.md +6 -6
- package/docs/de/intlayer_with_tanstack.md +46 -31
- package/docs/de/intlayer_with_vite+preact.md +7 -7
- package/docs/de/intlayer_with_vite+react.md +7 -7
- package/docs/de/intlayer_with_vite+vue.md +9 -9
- package/docs/en/interest_of_intlayer.md +1 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/en/intlayer_with_react_router_v7.md +6 -6
- package/docs/en/intlayer_with_tanstack.md +57 -33
- package/docs/en/intlayer_with_vite+preact.md +8 -8
- package/docs/en/intlayer_with_vite+react.md +8 -8
- package/docs/en/intlayer_with_vite+vue.md +8 -8
- package/docs/en/releases/v6.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_14.md +9 -9
- package/docs/en-GB/intlayer_with_nextjs_15.md +9 -8
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/en-GB/intlayer_with_react_router_v7.md +6 -6
- package/docs/en-GB/intlayer_with_tanstack.md +46 -31
- package/docs/en-GB/intlayer_with_vite+preact.md +7 -7
- package/docs/en-GB/intlayer_with_vite+react.md +7 -7
- package/docs/en-GB/intlayer_with_vite+vue.md +9 -9
- package/docs/es/intlayer_with_nextjs_14.md +9 -9
- package/docs/es/intlayer_with_nextjs_15.md +9 -8
- package/docs/es/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/es/intlayer_with_react_router_v7.md +6 -6
- package/docs/es/intlayer_with_tanstack.md +15 -10
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/intlayer_with_nextjs_14.md +9 -9
- package/docs/fr/intlayer_with_nextjs_15.md +9 -8
- package/docs/fr/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/fr/intlayer_with_react_router_v7.md +6 -6
- package/docs/fr/intlayer_with_tanstack.md +46 -31
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/intlayer_with_nextjs_14.md +9 -9
- package/docs/hi/intlayer_with_nextjs_15.md +9 -8
- package/docs/hi/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/hi/intlayer_with_react_router_v7.md +6 -6
- package/docs/hi/intlayer_with_tanstack.md +15 -10
- package/docs/hi/intlayer_with_vite+preact.md +7 -7
- package/docs/hi/intlayer_with_vite+react.md +7 -7
- package/docs/hi/intlayer_with_vite+vue.md +9 -9
- package/docs/id/interest_of_intlayer.md +1 -1
- package/docs/id/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/id/intlayer_with_react_router_v7.md +6 -6
- package/docs/id/intlayer_with_tanstack.md +15 -10
- package/docs/id/intlayer_with_vite+preact.md +9 -9
- package/docs/id/intlayer_with_vite+react.md +8 -8
- package/docs/id/intlayer_with_vite+vue.md +8 -8
- package/docs/id/releases/v6.md +1 -1
- package/docs/it/intlayer_with_nextjs_14.md +9 -9
- package/docs/it/intlayer_with_nextjs_15.md +9 -8
- package/docs/it/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/it/intlayer_with_react_router_v7.md +6 -6
- package/docs/it/intlayer_with_tanstack.md +46 -31
- package/docs/it/intlayer_with_vite+preact.md +7 -7
- package/docs/it/intlayer_with_vite+react.md +7 -7
- package/docs/it/intlayer_with_vite+vue.md +9 -9
- package/docs/ja/intlayer_with_nextjs_14.md +9 -9
- package/docs/ja/intlayer_with_nextjs_15.md +9 -8
- package/docs/ja/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/ja/intlayer_with_react_router_v7.md +6 -6
- package/docs/ja/intlayer_with_tanstack.md +16 -10
- package/docs/ja/intlayer_with_vite+preact.md +7 -7
- package/docs/ja/intlayer_with_vite+react.md +7 -7
- package/docs/ja/intlayer_with_vite+vue.md +9 -9
- package/docs/ko/intlayer_with_nextjs_14.md +9 -9
- package/docs/ko/intlayer_with_nextjs_15.md +9 -8
- package/docs/ko/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/ko/intlayer_with_react_router_v7.md +6 -6
- package/docs/ko/intlayer_with_tanstack.md +46 -31
- package/docs/ko/intlayer_with_vite+preact.md +7 -7
- package/docs/ko/intlayer_with_vite+react.md +7 -7
- package/docs/ko/intlayer_with_vite+vue.md +9 -9
- package/docs/pl/interest_of_intlayer.md +1 -1
- package/docs/pl/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/pl/intlayer_with_react_router_v7.md +6 -6
- package/docs/pl/intlayer_with_tanstack.md +15 -10
- package/docs/pl/intlayer_with_vite+preact.md +10 -10
- package/docs/pl/intlayer_with_vite+react.md +8 -8
- package/docs/pl/intlayer_with_vite+vue.md +8 -8
- package/docs/pl/releases/v6.md +1 -1
- package/docs/pt/intlayer_with_nextjs_14.md +9 -9
- package/docs/pt/intlayer_with_nextjs_15.md +9 -8
- package/docs/pt/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/pt/intlayer_with_react_router_v7.md +2 -2
- package/docs/pt/intlayer_with_tanstack.md +46 -31
- package/docs/pt/intlayer_with_vite+preact.md +7 -7
- package/docs/pt/intlayer_with_vite+react.md +7 -7
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/intlayer_with_nextjs_14.md +9 -9
- package/docs/ru/intlayer_with_nextjs_15.md +9 -8
- package/docs/ru/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/ru/intlayer_with_react_router_v7.md +6 -6
- package/docs/ru/intlayer_with_tanstack.md +15 -10
- package/docs/ru/intlayer_with_vite+preact.md +7 -7
- package/docs/ru/intlayer_with_vite+react.md +7 -7
- package/docs/ru/intlayer_with_vite+vue.md +9 -9
- package/docs/tr/interest_of_intlayer.md +1 -1
- package/docs/tr/intlayer_with_nextjs_15.md +9 -8
- package/docs/tr/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/tr/intlayer_with_react_router_v7.md +6 -6
- package/docs/tr/intlayer_with_tanstack.md +46 -31
- package/docs/tr/intlayer_with_vite+preact.md +8 -8
- package/docs/tr/intlayer_with_vite+react.md +8 -8
- package/docs/tr/intlayer_with_vite+vue.md +8 -8
- package/docs/vi/interest_of_intlayer.md +1 -1
- package/docs/vi/intlayer_with_nextjs_15.md +1 -0
- package/docs/vi/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/vi/intlayer_with_react_router_v7.md +6 -6
- package/docs/vi/intlayer_with_tanstack.md +46 -31
- package/docs/vi/intlayer_with_vite+preact.md +9 -9
- package/docs/vi/intlayer_with_vite+react.md +8 -8
- package/docs/vi/intlayer_with_vite+vue.md +8 -8
- package/docs/vi/releases/v6.md +1 -1
- package/docs/zh/intlayer_with_nextjs_14.md +9 -9
- package/docs/zh/intlayer_with_nextjs_15.md +9 -8
- package/docs/zh/intlayer_with_nextjs_page_router.md +7 -10
- package/docs/zh/intlayer_with_react_router_v7.md +6 -6
- package/docs/zh/intlayer_with_tanstack.md +14 -8
- package/docs/zh/intlayer_with_vite+preact.md +7 -7
- package/docs/zh/intlayer_with_vite+react.md +7 -7
- package/docs/zh/intlayer_with_vite+vue.md +7 -7
- package/frequent_questions/ar/domain_routing.md +1 -1
- package/frequent_questions/de/domain_routing.md +1 -1
- package/frequent_questions/en/domain_routing.md +1 -1
- package/frequent_questions/en/package_version_error.md +29 -1
- package/frequent_questions/en-GB/domain_routing.md +1 -1
- package/frequent_questions/es/domain_routing.md +1 -1
- package/frequent_questions/fr/domain_routing.md +1 -1
- package/frequent_questions/hi/domain_routing.md +1 -1
- package/frequent_questions/id/domain_routing.md +1 -1
- package/frequent_questions/it/domain_routing.md +1 -1
- package/frequent_questions/it/package_version_error.md +4 -4
- package/frequent_questions/ja/domain_routing.md +1 -1
- package/frequent_questions/ko/domain_routing.md +1 -1
- package/frequent_questions/pl/domain_routing.md +1 -1
- package/frequent_questions/pt/domain_routing.md +1 -1
- package/frequent_questions/ru/domain_routing.md +1 -1
- package/frequent_questions/tr/domain_routing.md +1 -1
- package/frequent_questions/vi/domain_routing.md +1 -1
- package/frequent_questions/zh/domain_routing.md +1 -1
- package/package.json +7 -14
|
@@ -204,6 +204,7 @@ import type { FC } from "react";
|
|
|
204
204
|
|
|
205
205
|
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
206
206
|
import { useLocale } from "react-intlayer";
|
|
207
|
+
import { getPrefix } from "intlayer";
|
|
207
208
|
|
|
208
209
|
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
209
210
|
|
|
@@ -233,12 +234,13 @@ type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
|
233
234
|
|
|
234
235
|
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
235
236
|
const { locale } = useLocale();
|
|
237
|
+
const { localePrefix } = getPrefix(locale);
|
|
236
238
|
|
|
237
239
|
return (
|
|
238
240
|
<Link
|
|
239
241
|
{...props}
|
|
240
242
|
params={{
|
|
241
|
-
locale,
|
|
243
|
+
locale: localePrefix,
|
|
242
244
|
...(typeof props?.params === "object" ? props?.params : {}),
|
|
243
245
|
}}
|
|
244
246
|
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
@@ -255,43 +257,52 @@ Diese Komponente verfolgt zwei Ziele:
|
|
|
255
257
|
Anschließend können wir einen `useLocalizedNavigate`-Hook für die programmatische Navigation erstellen:
|
|
256
258
|
|
|
257
259
|
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
258
|
-
import { useLocale } from "react-intlayer";
|
|
259
260
|
import { useNavigate } from "@tanstack/react-router";
|
|
261
|
+
import { getPrefix } from "intlayer";
|
|
262
|
+
import { useLocale } from "react-intlayer";
|
|
260
263
|
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
261
264
|
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
262
265
|
|
|
266
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
267
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
268
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
269
|
+
? "/"
|
|
270
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
271
|
+
? `/${Rest}`
|
|
272
|
+
: never;
|
|
273
|
+
|
|
274
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
275
|
+
|
|
276
|
+
type LocalizedNavigate = {
|
|
277
|
+
(to: LocalizedTo): ReturnType<ReturnType<typeof useNavigate>>;
|
|
278
|
+
(
|
|
279
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
280
|
+
): ReturnType<ReturnType<typeof useNavigate>>;
|
|
281
|
+
};
|
|
282
|
+
|
|
263
283
|
export const useLocalizedNavigate = () => {
|
|
264
284
|
const navigate = useNavigate();
|
|
265
285
|
|
|
266
286
|
const { locale } = useLocale();
|
|
267
287
|
|
|
268
|
-
type StripLocalePrefix<T extends string> = T extends
|
|
269
|
-
| `/${typeof LOCALE_ROUTE}`
|
|
270
|
-
| `/${typeof LOCALE_ROUTE}/`
|
|
271
|
-
? "/"
|
|
272
|
-
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
273
|
-
? `/${Rest}`
|
|
274
|
-
: never;
|
|
275
|
-
|
|
276
|
-
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
277
|
-
|
|
278
|
-
interface LocalizedNavigate {
|
|
279
|
-
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
280
|
-
(
|
|
281
|
-
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
282
|
-
): ReturnType<typeof navigate>;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
288
|
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
289
|
+
const { localePrefix } = getPrefix(locale);
|
|
290
|
+
|
|
286
291
|
if (typeof args === "string") {
|
|
287
|
-
return navigate({
|
|
292
|
+
return navigate({
|
|
293
|
+
to: `/${LOCALE_ROUTE}${args}`,
|
|
294
|
+
params: { locale: localePrefix },
|
|
295
|
+
});
|
|
288
296
|
}
|
|
289
297
|
|
|
290
298
|
const { to, ...rest } = args;
|
|
291
299
|
|
|
292
|
-
const
|
|
300
|
+
const localizedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
293
301
|
|
|
294
|
-
return navigate({
|
|
302
|
+
return navigate({
|
|
303
|
+
to: localizedTo,
|
|
304
|
+
params: { locale: localePrefix, ...rest } as any,
|
|
305
|
+
});
|
|
295
306
|
};
|
|
296
307
|
|
|
297
308
|
return localizedNavigate;
|
|
@@ -365,8 +376,13 @@ Erstellen Sie eine Komponente, die es Benutzern ermöglicht, die Sprache zu wech
|
|
|
365
376
|
import type { FC } from "react";
|
|
366
377
|
|
|
367
378
|
import { useLocation } from "@tanstack/react-router";
|
|
368
|
-
import {
|
|
369
|
-
|
|
379
|
+
import {
|
|
380
|
+
getHTMLTextDir,
|
|
381
|
+
getLocaleName,
|
|
382
|
+
getPathWithoutLocale,
|
|
383
|
+
getPrefix,
|
|
384
|
+
} from "intlayer";
|
|
385
|
+
import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
|
|
370
386
|
|
|
371
387
|
import { LocalizedLink, To } from "./localized-link";
|
|
372
388
|
|
|
@@ -385,9 +401,8 @@ export const LocaleSwitcher: FC = () => {
|
|
|
385
401
|
<LocalizedLink
|
|
386
402
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
387
403
|
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
388
|
-
onClick={() =>
|
|
389
|
-
params={{ locale: localeEl }}
|
|
390
|
-
to={pathWithoutLocale as To}
|
|
404
|
+
onClick={() => setLocaleInStorage(localeEl)}
|
|
405
|
+
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
391
406
|
>
|
|
392
407
|
<span>
|
|
393
408
|
{/* Gebietsschema - z.B. FR */}
|
|
@@ -465,15 +480,15 @@ function LayoutComponent() {
|
|
|
465
480
|
|
|
466
481
|
### Schritt 11: Middleware hinzufügen (Optional)
|
|
467
482
|
|
|
468
|
-
Sie können auch das `
|
|
483
|
+
Sie können auch das `intlayerProxy` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
469
484
|
|
|
470
|
-
> Beachten Sie, dass Sie, um das `
|
|
485
|
+
> Beachten Sie, dass Sie, um das `intlayerProxy` in der Produktion zu verwenden, das `vite-intlayer`-Paket von `devDependencies` zu `dependencies` wechseln müssen.
|
|
471
486
|
|
|
472
487
|
```typescript {3,7} fileName="vite.config.ts"
|
|
473
488
|
import { reactRouter } from "@react-router/dev/vite";
|
|
474
489
|
import tailwindcss from "@tailwindcss/vite";
|
|
475
490
|
import { defineConfig } from "vite";
|
|
476
|
-
import { intlayer,
|
|
491
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
477
492
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
478
493
|
|
|
479
494
|
export default defineConfig({
|
|
@@ -482,7 +497,7 @@ export default defineConfig({
|
|
|
482
497
|
reactRouter(),
|
|
483
498
|
tsconfigPaths(),
|
|
484
499
|
intlayer(),
|
|
485
|
-
|
|
500
|
+
intlayerProxy(),
|
|
486
501
|
],
|
|
487
502
|
});
|
|
488
503
|
```
|
|
@@ -1054,38 +1054,38 @@ const App = () => (
|
|
|
1054
1054
|
module.exports = App;
|
|
1055
1055
|
```
|
|
1056
1056
|
|
|
1057
|
-
Parallel dazu können Sie auch das `
|
|
1057
|
+
Parallel dazu können Sie auch das `intlayerProxy` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
1058
1058
|
|
|
1059
1059
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1060
1060
|
import { defineConfig } from "vite";
|
|
1061
1061
|
import preact from "@preact/preset-vite";
|
|
1062
|
-
import { intlayer,
|
|
1062
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
1063
1063
|
|
|
1064
1064
|
// https://vitejs.dev/config/
|
|
1065
1065
|
export default defineConfig({
|
|
1066
|
-
plugins: [preact(), intlayer(),
|
|
1066
|
+
plugins: [preact(), intlayer(), intlayerProxy()],
|
|
1067
1067
|
});
|
|
1068
1068
|
```
|
|
1069
1069
|
|
|
1070
1070
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1071
1071
|
import { defineConfig } from "vite";
|
|
1072
1072
|
import preact from "@preact/preset-vite";
|
|
1073
|
-
import { intlayer,
|
|
1073
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
1074
1074
|
|
|
1075
1075
|
// https://vitejs.dev/config/
|
|
1076
1076
|
export default defineConfig({
|
|
1077
|
-
plugins: [preact(), intlayer(),
|
|
1077
|
+
plugins: [preact(), intlayer(), intlayerProxy()],
|
|
1078
1078
|
});
|
|
1079
1079
|
```
|
|
1080
1080
|
|
|
1081
1081
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1082
1082
|
const { defineConfig } = require("vite");
|
|
1083
1083
|
const preact = require("@preact/preset-vite");
|
|
1084
|
-
const { intlayer,
|
|
1084
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
1085
1085
|
|
|
1086
1086
|
// https://vitejs.dev/config/
|
|
1087
1087
|
module.exports = defineConfig({
|
|
1088
|
-
plugins: [preact(), intlayer(),
|
|
1088
|
+
plugins: [preact(), intlayer(), intlayerProxy()],
|
|
1089
1089
|
});
|
|
1090
1090
|
```
|
|
1091
1091
|
|
|
@@ -1025,38 +1025,38 @@ const App = () => (
|
|
|
1025
1025
|
);
|
|
1026
1026
|
```
|
|
1027
1027
|
|
|
1028
|
-
Parallel dazu können Sie auch das `
|
|
1028
|
+
Parallel dazu können Sie auch das `intlayerProxy` verwenden, um serverseitiges Routing in Ihre Anwendung zu integrieren. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die passendste Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wird keine Locale erkannt, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
1029
1029
|
|
|
1030
1030
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1031
1031
|
import { defineConfig } from "vite";
|
|
1032
1032
|
import react from "@vitejs/plugin-react-swc";
|
|
1033
|
-
import { intlayer,
|
|
1033
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
1034
1034
|
|
|
1035
1035
|
// https://vitejs.dev/config/
|
|
1036
1036
|
export default defineConfig({
|
|
1037
|
-
plugins: [react(), intlayer(),
|
|
1037
|
+
plugins: [react(), intlayer(), intlayerProxy()],
|
|
1038
1038
|
});
|
|
1039
1039
|
```
|
|
1040
1040
|
|
|
1041
1041
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
1042
1042
|
import { defineConfig } from "vite";
|
|
1043
1043
|
import react from "@vitejs/plugin-react-swc";
|
|
1044
|
-
import { intlayer,
|
|
1044
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
1045
1045
|
|
|
1046
1046
|
// https://vitejs.dev/config/
|
|
1047
1047
|
export default defineConfig({
|
|
1048
|
-
plugins: [react(), intlayer(),
|
|
1048
|
+
plugins: [react(), intlayer(), intlayerProxy()],
|
|
1049
1049
|
});
|
|
1050
1050
|
```
|
|
1051
1051
|
|
|
1052
1052
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
1053
1053
|
const { defineConfig } = require("vite");
|
|
1054
1054
|
const react = require("@vitejs/plugin-react-swc");
|
|
1055
|
-
const { intlayer,
|
|
1055
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
1056
1056
|
|
|
1057
1057
|
// https://vitejs.dev/config/
|
|
1058
1058
|
module.exports = defineConfig({
|
|
1059
|
-
plugins: [react(), intlayer(),
|
|
1059
|
+
plugins: [react(), intlayer(), intlayerProxy()],
|
|
1060
1060
|
});
|
|
1061
1061
|
```
|
|
1062
1062
|
|
|
@@ -702,46 +702,46 @@ import LocaleSwitcher from "@components/LocaleSwitcher.vue";
|
|
|
702
702
|
</template>
|
|
703
703
|
```
|
|
704
704
|
|
|
705
|
-
Parallel dazu können Sie auch das `
|
|
705
|
+
Parallel dazu können Sie auch das `intlayerProxy` verwenden, um serverseitiges Routing zu Ihrer Anwendung hinzuzufügen. Dieses Plugin erkennt automatisch die aktuelle Locale basierend auf der URL und setzt das entsprechende Locale-Cookie. Wenn keine Locale angegeben ist, bestimmt das Plugin die am besten geeignete Locale basierend auf den Spracheinstellungen des Browsers des Benutzers. Wenn keine Locale erkannt wird, erfolgt eine Weiterleitung zur Standard-Locale.
|
|
706
706
|
|
|
707
707
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
708
708
|
import { defineConfig } from "vite";
|
|
709
709
|
import vue from "@vitejs/plugin-vue";
|
|
710
|
-
import { intlayer,
|
|
710
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
711
711
|
|
|
712
712
|
// https://vitejs.dev/config/
|
|
713
713
|
export default defineConfig({
|
|
714
|
-
plugins: [vue(), intlayer(),
|
|
714
|
+
plugins: [vue(), intlayer(), intlayerProxy()],
|
|
715
715
|
});
|
|
716
716
|
```
|
|
717
717
|
|
|
718
718
|
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
719
719
|
import { defineConfig } from "vite";
|
|
720
720
|
import vue from "@vitejs/plugin-vue";
|
|
721
|
-
import { intlayer,
|
|
721
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
722
722
|
|
|
723
723
|
// https://vitejs.dev/config/
|
|
724
724
|
export default defineConfig({
|
|
725
|
-
plugins: [vue(), intlayer(),
|
|
725
|
+
plugins: [vue(), intlayer(), intlayerProxy()],
|
|
726
726
|
});
|
|
727
727
|
```
|
|
728
728
|
|
|
729
729
|
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
730
730
|
const { defineConfig } = require("vite");
|
|
731
731
|
const vue = require("@vitejs/plugin-vue");
|
|
732
|
-
const { intlayer,
|
|
732
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
733
733
|
|
|
734
734
|
// https://vitejs.dev/config/
|
|
735
735
|
module.exports = defineConfig({
|
|
736
|
-
plugins: [vue(), intlayer(),
|
|
736
|
+
plugins: [vue(), intlayer(), intlayerProxy()],
|
|
737
737
|
});
|
|
738
738
|
const { defineConfig } = require("vite");
|
|
739
739
|
const vue = require("@vitejs/plugin-vue");
|
|
740
|
-
const { intlayer,
|
|
740
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
741
741
|
|
|
742
742
|
// https://vitejs.dev/config/
|
|
743
743
|
module.exports = defineConfig({
|
|
744
|
-
plugins: [vue(), intlayer(),
|
|
744
|
+
plugins: [vue(), intlayer(), intlayerProxy()],
|
|
745
745
|
});
|
|
746
746
|
```
|
|
747
747
|
|
|
@@ -276,7 +276,7 @@ This approach allows you to:
|
|
|
276
276
|
|
|
277
277
|
GitHub stars are a strong indicator of a project's popularity, community trust, and long-term relevance. While not a direct measure of technical quality, they reflect how many developers find the project useful, follow its progress, and are likely to adopt it. For estimating the value of a project, stars help compare traction across alternatives and provide insights into ecosystem growth.
|
|
278
278
|
|
|
279
|
-
[](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&i18next/i18next&i18next/next-i18next&lingui/js-lingui&amannn/next-intl&intlify/vue-i18n&aymericzip/intlayer)
|
|
279
|
+
[](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&i18next/i18next&i18next/next-i18next&lingui/js-lingui&amannn/next-intl&intlify/vue-i18n&opral/monorepo&aymericzip/intlayer)
|
|
280
280
|
|
|
281
281
|
---
|
|
282
282
|
|
|
@@ -165,7 +165,7 @@ export default withIntlayer(nextConfig);
|
|
|
165
165
|
Set up middleware to automatically detect and handle the user's preferred locale:
|
|
166
166
|
|
|
167
167
|
```typescript fileName="src/middleware.ts" codeFormat="typescript"
|
|
168
|
-
export {
|
|
168
|
+
export { intlayerProxy as middleware } from "next-intlayer/middleware";
|
|
169
169
|
|
|
170
170
|
export const config = {
|
|
171
171
|
matcher:
|
|
@@ -174,7 +174,7 @@ export const config = {
|
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
```javascript fileName="src/middleware.mjs" codeFormat="esm"
|
|
177
|
-
export {
|
|
177
|
+
export { intlayerProxy as middleware } from "next-intlayer/middleware";
|
|
178
178
|
|
|
179
179
|
export const config = {
|
|
180
180
|
matcher:
|
|
@@ -183,14 +183,14 @@ export const config = {
|
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
```javascript fileName="src/middleware.cjs" codeFormat="commonjs"
|
|
186
|
-
const {
|
|
186
|
+
const { intlayerProxy } = require("next-intlayer/middleware");
|
|
187
187
|
|
|
188
188
|
const config = {
|
|
189
189
|
matcher:
|
|
190
190
|
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
191
191
|
};
|
|
192
192
|
|
|
193
|
-
module.exports = { middleware:
|
|
193
|
+
module.exports = { middleware: intlayerProxy, config };
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
> Adapt the `matcher` parameter to match the routes of your application. For more details, refer to the [Next.js documentation on configuring the matcher](https://nextjs.org/docs/app/building-your-application/routing/middleware).
|
|
@@ -1106,7 +1106,6 @@ import Link from "next/link";
|
|
|
1106
1106
|
|
|
1107
1107
|
const LocaleSwitcher: FC = () => {
|
|
1108
1108
|
const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
|
|
1109
|
-
const { setLocaleCookie } = useLocaleCookie();
|
|
1110
1109
|
|
|
1111
1110
|
return (
|
|
1112
1111
|
<div>
|
|
@@ -1118,7 +1117,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
1118
1117
|
hrefLang={localeItem}
|
|
1119
1118
|
key={localeItem}
|
|
1120
1119
|
aria-current={locale === localeItem ? "page" : undefined}
|
|
1121
|
-
onClick={() =>
|
|
1120
|
+
onClick={() => setLocale(localeItem)}
|
|
1122
1121
|
>
|
|
1123
1122
|
<span>
|
|
1124
1123
|
{/* Locale - e.g. FR */}
|
|
@@ -1156,7 +1155,6 @@ import Link from "next/link";
|
|
|
1156
1155
|
|
|
1157
1156
|
const LocaleSwitcher = () => {
|
|
1158
1157
|
const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
|
|
1159
|
-
const { setLocaleCookie } = useLocaleCookie();
|
|
1160
1158
|
|
|
1161
1159
|
return (
|
|
1162
1160
|
<div>
|
|
@@ -1168,7 +1166,7 @@ const LocaleSwitcher = () => {
|
|
|
1168
1166
|
hrefLang={localeItem}
|
|
1169
1167
|
key={localeItem}
|
|
1170
1168
|
aria-current={locale === localeItem ? "page" : undefined}
|
|
1171
|
-
onClick={() =>
|
|
1169
|
+
onClick={() => setLocale(localeItem)}
|
|
1172
1170
|
>
|
|
1173
1171
|
<span>
|
|
1174
1172
|
{/* Locale - e.g. FR */}
|
|
@@ -1206,7 +1204,6 @@ const Link = require("next/link");
|
|
|
1206
1204
|
|
|
1207
1205
|
const LocaleSwitcher = () => {
|
|
1208
1206
|
const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
|
|
1209
|
-
const { setLocaleCookie } = useLocaleCookie();
|
|
1210
1207
|
|
|
1211
1208
|
return (
|
|
1212
1209
|
<select>
|
|
@@ -1216,7 +1213,7 @@ const LocaleSwitcher = () => {
|
|
|
1216
1213
|
href={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
1217
1214
|
hrefLang={localeItem}
|
|
1218
1215
|
aria-current={locale === localeItem ? "page" : undefined}
|
|
1219
|
-
onClick={() =>
|
|
1216
|
+
onClick={() => setLocale(localeItem)}
|
|
1220
1217
|
>
|
|
1221
1218
|
<span>
|
|
1222
1219
|
{/* Locale - e.g. FR */}
|
|
@@ -326,7 +326,7 @@ import {
|
|
|
326
326
|
getLocalizedUrl,
|
|
327
327
|
getPathWithoutLocale,
|
|
328
328
|
} from "intlayer";
|
|
329
|
-
import {
|
|
329
|
+
import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
|
|
330
330
|
import { Link, useLocation } from "react-router";
|
|
331
331
|
|
|
332
332
|
export const LocaleSwitcher: FC = () => {
|
|
@@ -344,7 +344,7 @@ export const LocaleSwitcher: FC = () => {
|
|
|
344
344
|
<Link
|
|
345
345
|
aria-current={localeItem === locale ? "page" : undefined}
|
|
346
346
|
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
|
|
347
|
-
onClick={() =>
|
|
347
|
+
onClick={() => setLocale(localeItem)}
|
|
348
348
|
to={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
349
349
|
>
|
|
350
350
|
<span>
|
|
@@ -413,18 +413,18 @@ export default function RootLayout() {
|
|
|
413
413
|
|
|
414
414
|
### Step 11: Add middleware (Optional)
|
|
415
415
|
|
|
416
|
-
You can also use the `
|
|
416
|
+
You can also use the `intlayerProxy` to add server-side routing to your application. This plugin will automatically detect the current locale based on the URL and set the appropriate locale cookie. If no locale is specified, the plugin will determine the most appropriate locale based on the user's browser language preferences. If no locale is detected, it will redirect to the default locale.
|
|
417
417
|
|
|
418
|
-
> Note that to use the `
|
|
418
|
+
> Note that to use the `intlayerProxy` in production, you need to switch the `vite-intlayer` package from `devDependencies` to `dependencies`.
|
|
419
419
|
|
|
420
420
|
```typescript {3,7} fileName="vite.config.ts"
|
|
421
421
|
import { defineConfig } from "vite";
|
|
422
422
|
import react from "@vitejs/plugin-react-swc";
|
|
423
|
-
import { intlayer,
|
|
423
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
424
424
|
|
|
425
425
|
// https://vitejs.dev/config/
|
|
426
426
|
export default defineConfig({
|
|
427
|
-
plugins: [react(), intlayer(),
|
|
427
|
+
plugins: [react(), intlayer(), intlayerProxy()],
|
|
428
428
|
});
|
|
429
429
|
```
|
|
430
430
|
|
|
@@ -18,6 +18,9 @@ slugs:
|
|
|
18
18
|
- tanstack-start
|
|
19
19
|
applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
|
|
20
20
|
history:
|
|
21
|
+
- version: 7.1.0
|
|
22
|
+
date: 2025-11-17
|
|
23
|
+
changes: Fix prefix default by adding getPrefix function useLocalizedNavigate, LocaleSwitcher and LocalizedLink.
|
|
21
24
|
- version: 6.5.2
|
|
22
25
|
date: 2025-10-03
|
|
23
26
|
changes: Update doc
|
|
@@ -154,6 +157,12 @@ function LayoutComponent() {
|
|
|
154
157
|
}
|
|
155
158
|
```
|
|
156
159
|
|
|
160
|
+
> Here, `{-$locale}` is a dynamic route parameter that gets replaced with the current locale. This notation makes the slot optional, allowing it to work with routing modes such as `'prefix-no-default'` etc.
|
|
161
|
+
|
|
162
|
+
> Be aware that this slot may cause issues if you use multiple dynamic segments in the same route (e.g., `/{-$locale}/other-path/$anotherDynamicPath/...`).
|
|
163
|
+
> For the `'prefix-all'` mode, you may prefer switching the slot to `$locale` instead.
|
|
164
|
+
> For the `'no-prefix'` or `'search-params'` mode, you can remove the slot entirely.
|
|
165
|
+
|
|
157
166
|
### Step 6: Declare Your Content
|
|
158
167
|
|
|
159
168
|
Create and manage your content declarations to store translations:
|
|
@@ -209,6 +218,7 @@ import type { FC } from "react";
|
|
|
209
218
|
|
|
210
219
|
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
211
220
|
import { useLocale } from "react-intlayer";
|
|
221
|
+
import { getPrefix } from "intlayer";
|
|
212
222
|
|
|
213
223
|
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
214
224
|
|
|
@@ -238,12 +248,13 @@ type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
|
238
248
|
|
|
239
249
|
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
240
250
|
const { locale } = useLocale();
|
|
251
|
+
const { localePrefix } = getPrefix(locale);
|
|
241
252
|
|
|
242
253
|
return (
|
|
243
254
|
<Link
|
|
244
255
|
{...props}
|
|
245
256
|
params={{
|
|
246
|
-
locale,
|
|
257
|
+
locale: localePrefix,
|
|
247
258
|
...(typeof props?.params === "object" ? props?.params : {}),
|
|
248
259
|
}}
|
|
249
260
|
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
@@ -260,43 +271,52 @@ This component has two objectives:
|
|
|
260
271
|
Then we can create a `useLocalizedNavigate` hook for programmatic navigation:
|
|
261
272
|
|
|
262
273
|
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
263
|
-
import { useLocale } from "react-intlayer";
|
|
264
274
|
import { useNavigate } from "@tanstack/react-router";
|
|
275
|
+
import { getPrefix } from "intlayer";
|
|
276
|
+
import { useLocale } from "react-intlayer";
|
|
265
277
|
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
266
278
|
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
267
279
|
|
|
280
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
281
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
282
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
283
|
+
? "/"
|
|
284
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
285
|
+
? `/${Rest}`
|
|
286
|
+
: never;
|
|
287
|
+
|
|
288
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
289
|
+
|
|
290
|
+
type LocalizedNavigate = {
|
|
291
|
+
(to: LocalizedTo): ReturnType<ReturnType<typeof useNavigate>>;
|
|
292
|
+
(
|
|
293
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
294
|
+
): ReturnType<ReturnType<typeof useNavigate>>;
|
|
295
|
+
};
|
|
296
|
+
|
|
268
297
|
export const useLocalizedNavigate = () => {
|
|
269
298
|
const navigate = useNavigate();
|
|
270
299
|
|
|
271
300
|
const { locale } = useLocale();
|
|
272
301
|
|
|
273
|
-
type StripLocalePrefix<T extends string> = T extends
|
|
274
|
-
| `/${typeof LOCALE_ROUTE}`
|
|
275
|
-
| `/${typeof LOCALE_ROUTE}/`
|
|
276
|
-
? "/"
|
|
277
|
-
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
278
|
-
? `/${Rest}`
|
|
279
|
-
: never;
|
|
280
|
-
|
|
281
|
-
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
282
|
-
|
|
283
|
-
interface LocalizedNavigate {
|
|
284
|
-
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
285
|
-
(
|
|
286
|
-
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
287
|
-
): ReturnType<typeof navigate>;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
302
|
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
303
|
+
const { localePrefix } = getPrefix(locale);
|
|
304
|
+
|
|
291
305
|
if (typeof args === "string") {
|
|
292
|
-
return navigate({
|
|
306
|
+
return navigate({
|
|
307
|
+
to: `/${LOCALE_ROUTE}${args}`,
|
|
308
|
+
params: { locale: localePrefix },
|
|
309
|
+
});
|
|
293
310
|
}
|
|
294
311
|
|
|
295
312
|
const { to, ...rest } = args;
|
|
296
313
|
|
|
297
|
-
const
|
|
314
|
+
const localizedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
298
315
|
|
|
299
|
-
return navigate({
|
|
316
|
+
return navigate({
|
|
317
|
+
to: localizedTo,
|
|
318
|
+
params: { locale: localePrefix, ...rest } as any,
|
|
319
|
+
});
|
|
300
320
|
};
|
|
301
321
|
|
|
302
322
|
return localizedNavigate;
|
|
@@ -367,13 +387,17 @@ function RouteComponent() {
|
|
|
367
387
|
Create a component to allow users to change languages:
|
|
368
388
|
|
|
369
389
|
```tsx fileName="src/components/locale-switcher.tsx"
|
|
370
|
-
import type { FC } from "react";
|
|
371
|
-
|
|
372
390
|
import { useLocation } from "@tanstack/react-router";
|
|
373
|
-
import {
|
|
374
|
-
|
|
391
|
+
import {
|
|
392
|
+
getHTMLTextDir,
|
|
393
|
+
getLocaleName,
|
|
394
|
+
getPathWithoutLocale,
|
|
395
|
+
getPrefix,
|
|
396
|
+
} from "intlayer";
|
|
397
|
+
import type { FC } from "react";
|
|
398
|
+
import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
|
|
375
399
|
|
|
376
|
-
import { LocalizedLink, To } from "./localized-link";
|
|
400
|
+
import { LocalizedLink, type To } from "./localized-link";
|
|
377
401
|
|
|
378
402
|
export const LocaleSwitcher: FC = () => {
|
|
379
403
|
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
@@ -390,8 +414,8 @@ export const LocaleSwitcher: FC = () => {
|
|
|
390
414
|
<LocalizedLink
|
|
391
415
|
aria-current={localeEl === locale ? "page" : undefined}
|
|
392
416
|
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
393
|
-
onClick={() =>
|
|
394
|
-
params={{ locale: localeEl }}
|
|
417
|
+
onClick={() => setLocaleInStorage(localeEl)}
|
|
418
|
+
params={{ locale: getPrefix(localeEl).localePrefix }}
|
|
395
419
|
to={pathWithoutLocale as To}
|
|
396
420
|
>
|
|
397
421
|
<span>
|
|
@@ -470,15 +494,15 @@ function LayoutComponent() {
|
|
|
470
494
|
|
|
471
495
|
### Step 11: Add middleware (Optional)
|
|
472
496
|
|
|
473
|
-
You can also use the `
|
|
497
|
+
You can also use the `intlayerProxy` to add server-side routing to your application. This plugin will automatically detect the current locale based on the URL and set the appropriate locale cookie. If no locale is specified, the plugin will determine the most appropriate locale based on the user's browser language preferences. If no locale is detected, it will redirect to the default locale.
|
|
474
498
|
|
|
475
|
-
> Note that to use the `
|
|
499
|
+
> Note that to use the `intlayerProxy` in production, you need to switch the `vite-intlayer` package from `devDependencies` to `dependencies`.
|
|
476
500
|
|
|
477
501
|
```typescript {3,7} fileName="vite.config.ts"
|
|
478
502
|
import { reactRouter } from "@react-router/dev/vite";
|
|
479
503
|
import tailwindcss from "@tailwindcss/vite";
|
|
480
504
|
import { defineConfig } from "vite";
|
|
481
|
-
import { intlayer,
|
|
505
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
482
506
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
483
507
|
|
|
484
508
|
export default defineConfig({
|
|
@@ -487,7 +511,7 @@ export default defineConfig({
|
|
|
487
511
|
reactRouter(),
|
|
488
512
|
tsconfigPaths(),
|
|
489
513
|
intlayer(),
|
|
490
|
-
|
|
514
|
+
intlayerProxy(),
|
|
491
515
|
],
|
|
492
516
|
});
|
|
493
517
|
```
|