@intlayer/docs 7.3.10 → 7.3.12

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.
Files changed (90) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +19 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +19 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/intlayer_with_nuxt.md +305 -421
  8. package/docs/ar/intlayer_with_react_router_v7.md +33 -4
  9. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +516 -0
  10. package/docs/ar/intlayer_with_tanstack.md +2 -12
  11. package/docs/ar/intlayer_with_vite+vue.md +1 -0
  12. package/docs/de/intlayer_with_nuxt.md +296 -394
  13. package/docs/de/intlayer_with_react_router_v7.md +33 -4
  14. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +573 -0
  15. package/docs/de/intlayer_with_tanstack.md +1 -0
  16. package/docs/de/intlayer_with_vite+vue.md +1 -0
  17. package/docs/en/intlayer_with_nuxt.md +242 -321
  18. package/docs/en/intlayer_with_react_router_v7.md +24 -0
  19. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +570 -0
  20. package/docs/en/intlayer_with_tanstack.md +2 -12
  21. package/docs/en/intlayer_with_vite+vue.md +49 -48
  22. package/docs/en-GB/intlayer_with_nuxt.md +262 -358
  23. package/docs/en-GB/intlayer_with_react_router_v7.md +33 -4
  24. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +513 -0
  25. package/docs/en-GB/intlayer_with_tanstack.md +2 -12
  26. package/docs/en-GB/intlayer_with_vite+vue.md +1 -0
  27. package/docs/es/intlayer_with_nuxt.md +284 -375
  28. package/docs/es/intlayer_with_react_router_v7.md +33 -4
  29. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +575 -0
  30. package/docs/es/intlayer_with_tanstack.md +1 -0
  31. package/docs/es/intlayer_with_vite+vue.md +1 -2
  32. package/docs/fr/intlayer_with_nuxt.md +288 -387
  33. package/docs/fr/intlayer_with_react_router_v7.md +34 -5
  34. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +574 -0
  35. package/docs/fr/intlayer_with_tanstack.md +1 -0
  36. package/docs/fr/intlayer_with_vite+vue.md +1 -0
  37. package/docs/hi/intlayer_with_nuxt.md +318 -434
  38. package/docs/hi/intlayer_with_react_router_v7.md +33 -4
  39. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +518 -0
  40. package/docs/hi/intlayer_with_tanstack.md +2 -12
  41. package/docs/hi/intlayer_with_vite+vue.md +1 -0
  42. package/docs/id/intlayer_with_nuxt.md +275 -376
  43. package/docs/id/intlayer_with_react_router_v7.md +29 -4
  44. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +521 -0
  45. package/docs/id/intlayer_with_tanstack.md +2 -12
  46. package/docs/id/intlayer_with_vite+vue.md +1 -0
  47. package/docs/it/intlayer_with_nuxt.md +312 -408
  48. package/docs/it/intlayer_with_react_router_v7.md +33 -4
  49. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +574 -0
  50. package/docs/it/intlayer_with_tanstack.md +1 -0
  51. package/docs/ja/intlayer_with_nuxt.md +319 -414
  52. package/docs/ja/intlayer_with_react_router_v7.md +33 -4
  53. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +574 -0
  54. package/docs/ja/intlayer_with_tanstack.md +2 -12
  55. package/docs/ja/intlayer_with_vite+vue.md +1 -0
  56. package/docs/ko/intlayer_with_nuxt.md +307 -406
  57. package/docs/ko/intlayer_with_react_router_v7.md +33 -4
  58. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +515 -0
  59. package/docs/ko/intlayer_with_tanstack.md +2 -12
  60. package/docs/ko/intlayer_with_vite+vue.md +1 -0
  61. package/docs/pl/intlayer_with_nuxt.md +282 -457
  62. package/docs/pl/intlayer_with_react_router_v7.md +32 -5
  63. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +615 -0
  64. package/docs/pl/intlayer_with_tanstack.md +2 -12
  65. package/docs/pl/intlayer_with_vite+vue.md +1 -0
  66. package/docs/pt/intlayer_with_nuxt.md +288 -403
  67. package/docs/pt/intlayer_with_react_router_v7.md +28 -0
  68. package/docs/pt/intlayer_with_tanstack.md +1 -0
  69. package/docs/ru/intlayer_with_nuxt.md +300 -410
  70. package/docs/ru/intlayer_with_react_router_v7.md +33 -4
  71. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +574 -0
  72. package/docs/ru/intlayer_with_tanstack.md +1 -0
  73. package/docs/ru/intlayer_with_vite+vue.md +1 -0
  74. package/docs/tr/intlayer_with_nuxt.md +327 -392
  75. package/docs/tr/intlayer_with_react_router_v7.md +33 -4
  76. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +572 -0
  77. package/docs/tr/intlayer_with_tanstack.md +2 -12
  78. package/docs/tr/intlayer_with_vite+vue.md +1 -0
  79. package/docs/vi/intlayer_with_nuxt.md +282 -399
  80. package/docs/vi/intlayer_with_react_router_v7.md +29 -4
  81. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +523 -0
  82. package/docs/vi/intlayer_with_tanstack.md +2 -12
  83. package/docs/vi/intlayer_with_vite+vue.md +1 -0
  84. package/docs/zh/intlayer_with_nuxt.md +311 -444
  85. package/docs/zh/intlayer_with_react_router_v7.md +33 -4
  86. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +516 -0
  87. package/docs/zh/intlayer_with_tanstack.md +2 -12
  88. package/docs/zh/intlayer_with_vite+vue.md +1 -0
  89. package/package.json +6 -6
  90. package/src/generated/docs.entry.ts +19 -0
@@ -18,6 +18,7 @@ slugs:
18
18
  - vite-and-react
19
19
  - react-router-v7
20
20
  applicationTemplate: https://github.com/aymericzip/intlayer-react-router-v7-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
21
22
  history:
22
23
  - version: 6.1.5
23
24
  date: 2025-10-03
@@ -31,7 +32,9 @@ history:
31
32
 
32
33
  Ten przewodnik pokazuje, jak zintegrować **Intlayer** dla płynnej internacjonalizacji w projektach React Router v7 z routingiem uwzględniającym lokalizację, wsparciem TypeScript oraz nowoczesnymi praktykami programistycznymi.
33
34
 
34
- ## Spis treści
35
+ ## Table of Contents
36
+
37
+ <TOC/>
35
38
 
36
39
  <TOC/>
37
40
 
@@ -85,6 +88,29 @@ pnpm add vite-intlayer --save-dev
85
88
 
86
89
  ### Krok 2: Konfiguracja Twojego projektu
87
90
 
91
+ ## Przewodnik krok po kroku dotyczący konfiguracji Intlayer w aplikacji React Router v7 z trasami opartymi na systemie plików
92
+
93
+ <Tab defaultTab="video">
94
+ <TabItem label="Video" value="video">
95
+
96
+ <iframe title="How to translate your React Router v7 app using Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
97
+
98
+ </TabItem>
99
+ <TabItem label="Code" value="code">
100
+
101
+ <iframe
102
+ src="https://stackblitz.com/github/aymericzip/intlayer-react-router-v7-template?embed=1&ctl=1&file=intlayer.config.ts"
103
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
104
+ title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
105
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
106
+ loading="lazy"
107
+ />
108
+
109
+ </TabItem>
110
+ </Tab>
111
+
112
+ See [Application Template](https://github.com/aymericzip/intlayer-react-router-v7-template) on GitHub.
113
+
88
114
  Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
89
115
 
90
116
  ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
@@ -274,7 +300,7 @@ export const LocalizedLink: FC<LinkProps> = (props) => {
274
300
  W przypadku, gdy chcesz nawigować do lokalizowanych tras, możesz użyć hooka `useLocalizedNavigate`:
275
301
 
276
302
  ```tsx fileName="app/hooks/useLocalizedNavigate.ts"
277
- import { useLocale } from "intlayer";
303
+ import { useLocale } from "react-intlayer";
278
304
  import { type NavigateOptions, type To, useNavigate } from "react-router";
279
305
 
280
306
  import { locacalizeTo } from "~/components/localized-link";
@@ -332,6 +358,7 @@ import {
332
358
  getLocaleName,
333
359
  getLocalizedUrl,
334
360
  getPathWithoutLocale,
361
+ Locales,
335
362
  } from "intlayer";
336
363
  import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
337
364
  import { Link, useLocation } from "react-router";
@@ -425,13 +452,13 @@ Możesz również użyć `intlayerProxy`, aby dodać routing po stronie serwera
425
452
  > Zauważ, że aby używać `intlayerProxy` w produkcji, musisz przenieść pakiet `vite-intlayer` z `devDependencies` do `dependencies`.
426
453
 
427
454
  ```typescript {3,7} fileName="vite.config.ts"
455
+ import { reactRouter } from "@react-router/dev/vite";
428
456
  import { defineConfig } from "vite";
429
- import react from "@vitejs/plugin-react-swc";
430
457
  import { intlayer, intlayerProxy } from "vite-intlayer";
458
+ import tsconfigPaths from "vite-tsconfig-paths";
431
459
 
432
- // https://vitejs.dev/config/
433
460
  export default defineConfig({
434
- plugins: [react(), intlayer(), intlayerProxy()],
461
+ plugins: [reactRouter(), tsconfigPaths(), intlayer(), intlayerProxy()],
435
462
  });
436
463
  ```
437
464
 
@@ -0,0 +1,615 @@
1
+ ---
2
+ createdAt: 2025-12-07
3
+ updatedAt: 2025-12-07
4
+ title: Jak przetłumaczyć aplikację React Router v7 (File-System Routes) – przewodnik i18n 2025
5
+ description: Dowiedz się, jak dodać internacjonalizację (i18n) do swojej aplikacji React Router v7 za pomocą Intlayer z routingiem opartym na systemie plików. Postępuj zgodnie z tym kompleksowym przewodnikiem, aby uczynić swoją aplikację wielojęzyczną z routingiem uwzględniającym lokalizację.
6
+ keywords:
7
+ - Internacjonalizacja
8
+ - Dokumentacja
9
+ - Intlayer
10
+ - React Router v7
11
+ - fs-routes
12
+ - Trasy oparte na systemie plików
13
+ - React
14
+ - i18n
15
+ - TypeScript
16
+ - Routing lokalizacji
17
+ slugs:
18
+ - doc
19
+ - environment
20
+ - vite-and-react
21
+ - react-router-v7-fs-routes
22
+ applicationTemplate: https://github.com/aymericzip/intlayer-react-router-v7-template-fs-routes
23
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
24
+ history:
25
+ - version: 7.3.4
26
+ date: 2025-12-08
27
+ changes: Init history
28
+ ---
29
+
30
+ # Przetłumacz swoją stronę React Router v7 (File-System Routes) za pomocą Intlayer | Internacjonalizacja (i18n)
31
+
32
+ Ten przewodnik pokazuje, jak zintegrować **Intlayer** dla płynnej internacjonalizacji w projektach React Router v7 używając **routingu opartego na systemie plików** (`@react-router/fs-routes`) z routingiem uwzględniającym lokalizację, wsparciem TypeScript oraz nowoczesnymi praktykami programistycznymi.
33
+
34
+ ## Table of Contents
35
+
36
+ <TOC/>
37
+
38
+ <TOC/>
39
+
40
+ ## Czym jest Intlayer?
41
+
42
+ **Intlayer** to innowacyjna, otwartoźródłowa biblioteka do internacjonalizacji (i18n), zaprojektowana, aby uprościć wsparcie wielojęzyczne w nowoczesnych aplikacjach webowych.
43
+
44
+ Dzięki Intlayer możesz:
45
+
46
+ - **Łatwo zarządzać tłumaczeniami** za pomocą deklaratywnych słowników na poziomie komponentów.
47
+ - **Dynamicznie lokalizować metadane**, trasy i zawartość.
48
+ - **Zapewnić wsparcie TypeScript** dzięki automatycznie generowanym typom, co poprawia autouzupełnianie i wykrywanie błędów.
49
+ - **Korzystaj z zaawansowanych funkcji**, takich jak dynamiczne wykrywanie i przełączanie lokalizacji.
50
+ - **Włącz routing uwzględniający lokalizację** za pomocą systemu routingu opartego na systemie plików w React Router v7.
51
+
52
+ ---
53
+
54
+ ## Przewodnik krok po kroku dotyczący konfiguracji Intlayer w aplikacji React Router v7 z trasami opartymi na systemie plików
55
+
56
+ <Tab defaultTab="video">
57
+ <TabItem label="Video" value="video">
58
+
59
+ <iframe title="How to translate your React Router v7 (File-System Routes) app using Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
60
+
61
+ </TabItem>
62
+ <TabItem label="Code" value="code">
63
+
64
+ <iframe
65
+ src="https://stackblitz.com/github/aymericzip/intlayer-react-router-v7-template-fs-routes?embed=1&ctl=1&file=intlayer.config.ts"
66
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
67
+ title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
68
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
69
+ loading="lazy"
70
+ />
71
+
72
+ </TabItem>
73
+ </Tab>
74
+
75
+ See [Application Template](https://github.com/aymericzip/intlayer-react-router-v7-template-fs-routes) on GitHub.
76
+
77
+ ### Krok 1: Zainstaluj zależności
78
+
79
+ Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:
80
+
81
+ ```bash packageManager="npm"
82
+ npm install intlayer react-intlayer
83
+ npm install vite-intlayer --save-dev
84
+ npm install @react-router/fs-routes --save-dev
85
+ ```
86
+
87
+ ```bash packageManager="pnpm"
88
+ pnpm add intlayer react-intlayer
89
+ pnpm add vite-intlayer --save-dev
90
+ pnpm add @react-router/fs-routes --save-dev
91
+ ```
92
+
93
+ - **intlayer**
94
+
95
+ Główny pakiet, który dostarcza narzędzia do internacjonalizacji, zarządzania konfiguracją, tłumaczeń, [deklaracji treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md), transpilecji oraz [poleceń CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_cli.md).
96
+
97
+ - **react-intlayer**
98
+ Pakiet integrujący Intlayer z aplikacją React. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w React.
99
+
100
+ - **vite-intlayer**
101
+ Zawiera wtyczkę Vite do integracji Intlayer z [bundlerem Vite](https://vite.dev/guide/why.html#why-bundle-for-production), a także middleware do wykrywania preferowanego języka użytkownika, zarządzania ciasteczkami oraz obsługi przekierowań URL.
102
+
103
+ - **@react-router/fs-routes**
104
+ Pakiet, który umożliwia routing oparty na systemie plików dla React Router v7.
105
+
106
+ ### Krok 2: Konfiguracja Twojego projektu
107
+
108
+ <Tab defaultTab="video">
109
+ <TabItem label="Video" value="video">
110
+
111
+ <iframe title="How to translate your React Router v7 (File-System Routes) app using Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
112
+
113
+ </TabItem>
114
+ <TabItem label="Code" value="code">
115
+
116
+ <iframe
117
+ src="https://stackblitz.com/github/aymericzip/intlayer-react-router-v7-template?embed=1&ctl=1&file=intlayer.config.ts"
118
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
119
+ title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
120
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
121
+ loading="lazy"
122
+ />
123
+
124
+ </TabItem>
125
+ </Tab>
126
+
127
+ See [Application Template](https://github.com/aymericzip/intlayer-react-router-v7-template) on GitHub.
128
+
129
+ Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
130
+
131
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
132
+ import { type IntlayerConfig, Locales } from "intlayer";
133
+
134
+ const config: IntlayerConfig = {
135
+ internationalization: {
136
+ defaultLocale: Locales.ENGLISH,
137
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
138
+ },
139
+ };
140
+
141
+ export default config;
142
+ ```
143
+
144
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
145
+ import { Locales } from "intlayer";
146
+
147
+ /** @type {import('intlayer').IntlayerConfig} */
148
+ // Konfiguracja międzynarodowa
149
+ const config = {
150
+ internationalization: {
151
+ defaultLocale: Locales.ENGLISH, // Domyślny język
152
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Obsługiwane języki
153
+ },
154
+ };
155
+
156
+ export default config;
157
+ ```
158
+
159
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
160
+ const { Locales } = require("intlayer");
161
+
162
+ /** @type {import('intlayer').IntlayerConfig} */
163
+ // Konfiguracja międzynarodowa
164
+ const config = {
165
+ internationalization: {
166
+ defaultLocale: Locales.ENGLISH, // Domyślny język
167
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Obsługiwane języki
168
+ },
169
+ };
170
+
171
+ module.exports = config;
172
+ ```
173
+
174
+ > Za pomocą tego pliku konfiguracyjnego możesz ustawić lokalizowane adresy URL, przekierowania w middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji zawartości, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w [dokumentacji konfiguracyjnej](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md).
175
+
176
+ ### Krok 3: Integracja Intlayer w konfiguracji Vite
177
+
178
+ Dodaj wtyczkę intlayer do swojej konfiguracji:
179
+
180
+ ```typescript fileName="vite.config.ts"
181
+ import { reactRouter } from "@react-router/dev/vite";
182
+ import { defineConfig } from "vite";
183
+ import { intlayer } from "vite-intlayer";
184
+ import tsconfigPaths from "vite-tsconfig-paths";
185
+
186
+ export default defineConfig({
187
+ plugins: [reactRouter(), tsconfigPaths(), intlayer()],
188
+ });
189
+ ```
190
+
191
+ > Wtyczka Vite `intlayer()` służy do integracji Intlayer z Vite. Zapewnia budowanie plików deklaracji zawartości i monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w aplikacji Vite. Dodatkowo dostarcza aliasy w celu optymalizacji wydajności.
192
+
193
+ ### Krok 4: Konfiguracja tras opartych na systemie plików React Router v7
194
+
195
+ Skonfiguruj routing, aby używać tras opartych na systemie plików z `flatRoutes`:
196
+
197
+ ```typescript fileName="app/routes.ts"
198
+ import type { RouteConfig } from "@react-router/dev/routes";
199
+ import { flatRoutes } from "@react-router/fs-routes";
200
+ import { configuration } from "intlayer";
201
+
202
+ const routes: RouteConfig = flatRoutes({
203
+ // Ignoruj pliki deklaracji treści, aby nie były traktowane jako trasy
204
+ ignoredRouteFiles: configuration.content.fileExtensions.map(
205
+ (fileExtension) => `**/*${fileExtension}`
206
+ ),
207
+ });
208
+
209
+ export default routes;
210
+ ```
211
+
212
+ > Funkcja `flatRoutes` z `@react-router/fs-routes` umożliwia routing oparty na systemie plików, gdzie struktura plików w katalogu `routes/` określa trasy Twojej aplikacji. Opcja `ignoredRouteFiles` zapewnia, że pliki deklaracji treści Intlayer (`.content.ts`, itp.) nie są traktowane jako pliki tras.
213
+
214
+ ### Krok 5: Utwórz pliki tras z konwencjami systemu plików
215
+
216
+ Przy routingu opartym na systemie plików używasz płaskiej konwencji nazewnictwa, gdzie kropki (`.`) reprezentują segmenty ścieżki, a nawiasy `()` oznaczają opcjonalne segmenty.
217
+
218
+ Utwórz następujące pliki w katalogu `app/routes/`:
219
+
220
+ #### Struktura plików
221
+
222
+ ```bash
223
+ app/routes/
224
+ ├── ($locale)._layout.tsx # Opakowanie layoutu dla tras lokalizacji
225
+ ├── ($locale)._index.tsx # Strona główna (/:locale?)
226
+ ├── ($locale)._index.content.ts # Zawartość strony głównej
227
+ ├── ($locale).about.tsx # Strona O nas (/:locale?/about)
228
+ └── ($locale).about.content.ts # Zawartość strony O nas
229
+ ```
230
+
231
+ Konwencje nazewnictwa:
232
+
233
+ - `($locale)` - Opcjonalny dynamiczny segment dla parametru lokalizacji
234
+ - `_layout` - Trasa layoutu, która opakowuje trasy potomne
235
+ - `_index` - Trasa indeksowa (renderuje się na ścieżce nadrzędnej)
236
+ - `.` (kropka) - Oddziela segmenty ścieżki (np. `($locale).about` → `/:locale?/about`)
237
+
238
+ #### Komponent Layoutu
239
+
240
+ ```tsx fileName="app/routes/($locale)._layout.tsx"
241
+ import { IntlayerProvider } from "react-intlayer";
242
+ import { Outlet } from "react-router";
243
+
244
+ import { useI18nHTMLAttributes } from "~/hooks/useI18nHTMLAttributes";
245
+
246
+ import type { Route } from "./+types/($locale)._layout";
247
+
248
+ export default function RootLayout({ params }: Route.ComponentProps) {
249
+ useI18nHTMLAttributes();
250
+
251
+ const { locale } = params;
252
+
253
+ return (
254
+ <IntlayerProvider locale={locale}>
255
+ <Outlet />
256
+ </IntlayerProvider>
257
+ );
258
+ }
259
+ ```
260
+
261
+ #### Strona indeksowa
262
+
263
+ ```tsx fileName="app/routes/($locale)._index.tsx"
264
+ import { useIntlayer } from "react-intlayer";
265
+ import { LocalizedLink } from "~/components/localized-link";
266
+
267
+ import type { Route } from "./+types/($locale)._index";
268
+
269
+ export default function Page() {
270
+ const { title, description, aboutLink } = useIntlayer("page");
271
+
272
+ return (
273
+ <div>
274
+ <h1>{title}</h1>
275
+ <p>{description}</p>
276
+ <nav>
277
+ <LocalizedLink to="/about">{aboutLink}</LocalizedLink>
278
+ </nav>
279
+ </div>
280
+ );
281
+ }
282
+ ```
283
+
284
+ #### Strona O nas
285
+
286
+ ```tsx fileName="app/routes/($locale).about.tsx"
287
+ import { useIntlayer } from "react-intlayer";
288
+ import { LocalizedLink } from "~/components/localized-link";
289
+
290
+ import type { Route } from "./+types/($locale).about";
291
+
292
+ export default function AboutPage() {
293
+ const { title, content, homeLink } = useIntlayer("about");
294
+
295
+ return (
296
+ <div>
297
+ <h1>{title}</h1>
298
+ <p>{content}</p>
299
+ <nav>
300
+ <LocalizedLink to="/">{homeLink}</LocalizedLink>
301
+ </nav>
302
+ </div>
303
+ );
304
+ }
305
+ ```
306
+
307
+ ### Krok 6: Zadeklaruj swoją zawartość
308
+
309
+ Utwórz i zarządzaj deklaracjami zawartości, aby przechowywać tłumaczenia. Umieść pliki zawartości obok plików tras:
310
+
311
+ ```tsx fileName="app/routes/($locale)._index.content.ts"
312
+ import { t, type Dictionary } from "intlayer";
313
+
314
+ const pageContent = {
315
+ key: "page",
316
+ content: {
317
+ title: t({
318
+ en: "Welcome to React Router v7 + Intlayer",
319
+ es: "Bienvenido a React Router v7 + Intlayer",
320
+ fr: "Bienvenue sur React Router v7 + Intlayer",
321
+ }),
322
+ description: t({
323
+ en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
324
+ pl: "Twórz wielojęzyczne aplikacje z łatwością, korzystając z React Router v7 i Intlayer.",
325
+ es: "Cree aplicaciones multilingües fácilmente usando React Router v7 y Intlayer.",
326
+ fr: "Créez des applications multilingues facilement avec React Router v7 et Intlayer.",
327
+ }),
328
+ aboutLink: t({
329
+ en: "Learn About Us",
330
+ es: "Aprender Sobre Nosotros",
331
+ fr: "En savoir plus sur nous",
332
+ }),
333
+ },
334
+ } satisfies Dictionary;
335
+
336
+ export default pageContent;
337
+ ```
338
+
339
+ ```tsx fileName="app/routes/($locale).about.content.ts"
340
+ import { t, type Dictionary } from "intlayer";
341
+
342
+ const aboutContent = {
343
+ key: "about",
344
+ content: {
345
+ title: t({
346
+ en: "About Us",
347
+ es: "Sobre Nosotros",
348
+ fr: "À propos de nous",
349
+ }),
350
+ content: t({
351
+ en: "This is the about page content.",
352
+ es: "Este es el contenido de la página de información.",
353
+ fr: "Ceci est le contenu de la page à propos.",
354
+ }),
355
+ homeLink: t({
356
+ en: "Home",
357
+ es: "Inicio",
358
+ fr: "Accueil",
359
+ }),
360
+ },
361
+ } satisfies Dictionary;
362
+
363
+ export default aboutContent;
364
+ ```
365
+
366
+ > Twoje deklaracje treści mogą być zdefiniowane w dowolnym miejscu w aplikacji, pod warunkiem, że zostaną umieszczone w katalogu `contentDir` (domyślnie `./app`). I muszą odpowiadać rozszerzeniu pliku deklaracji treści (domyślnie `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
367
+
368
+ > Po więcej szczegółów odsyłamy do [dokumentacji deklaracji treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md).
369
+
370
+ ### Krok 7: Tworzenie komponentów uwzględniających lokalizację
371
+
372
+ Utwórz komponent `LocalizedLink` do nawigacji uwzględniającej lokalizację:
373
+
374
+ ```tsx fileName="app/components/localized-link.tsx"
375
+ import type { FC } from "react";
376
+
377
+ import { getLocalizedUrl, type LocalesValues } from "intlayer";
378
+ import { useLocale } from "react-intlayer";
379
+ import { Link, type LinkProps, type To } from "react-router";
380
+
381
+ const isExternalLink = (to: string) => /^(https?:)?\/\//.test(to);
382
+
383
+ // Funkcja lokalizująca ścieżkę na podstawie podanego locale
384
+ export const locacalizeTo = (to: To, locale: LocalesValues): To => {
385
+ if (typeof to === "string") {
386
+ if (isExternalLink(to)) {
387
+ return to; // Zwraca link zewnętrzny bez zmian
388
+ }
389
+
390
+ return getLocalizedUrl(to, locale); // Zwraca lokalizowany URL
391
+ }
392
+
393
+ if (isExternalLink(to.pathname ?? "")) {
394
+ return to; // Zwraca link zewnętrzny bez zmian
395
+ }
396
+
397
+ return {
398
+ ...to,
399
+ pathname: getLocalizedUrl(to.pathname ?? "", locale), // Lokalizuje pathname
400
+ };
401
+ };
402
+
403
+ // Komponent linku lokalizowanego
404
+ export const LocalizedLink: FC<LinkProps> = (props) => {
405
+ const { locale } = useLocale();
406
+
407
+ return <Link {...props} to={locacalizeTo(props.to, locale)} />;
408
+ };
409
+ ```
410
+
411
+ W przypadku, gdy chcesz nawigować do lokalizowanych tras, możesz użyć hooka `useLocalizedNavigate`:
412
+
413
+ ```tsx fileName="app/hooks/useLocalizedNavigate.ts"
414
+ import { useLocale } from "react-intlayer";
415
+ import { type NavigateOptions, type To, useNavigate } from "react-router";
416
+
417
+ import { locacalizeTo } from "~/components/localized-link";
418
+
419
+ export const useLocalizedNavigate = () => {
420
+ const navigate = useNavigate();
421
+ const { locale } = useLocale();
422
+
423
+ const localizedNavigate = (to: To, options?: NavigateOptions) => {
424
+ const localedTo = locacalizeTo(to, locale);
425
+
426
+ navigate(localedTo, options);
427
+ };
428
+
429
+ return localizedNavigate;
430
+ };
431
+ ```
432
+
433
+ ### Krok 8: Utwórz komponent przełącznika języka
434
+
435
+ Utwórz komponent, który pozwoli użytkownikom zmieniać języki:
436
+
437
+ ```tsx fileName="app/components/locale-switcher.tsx"
438
+ import type { FC } from "react";
439
+
440
+ import {
441
+ getHTMLTextDir,
442
+ getLocaleName,
443
+ getLocalizedUrl,
444
+ getPathWithoutLocale,
445
+ Locales,
446
+ } from "intlayer";
447
+ import { useIntlayer, useLocale } from "react-intlayer";
448
+ import { Link, useLocation } from "react-router";
449
+
450
+ export const LocaleSwitcher: FC = () => {
451
+ const { localeSwitcherLabel } = useIntlayer("locale-switcher");
452
+ const { pathname } = useLocation();
453
+
454
+ const { availableLocales, locale } = useLocale();
455
+
456
+ const pathWithoutLocale = getPathWithoutLocale(pathname);
457
+
458
+ return (
459
+ <ol>
460
+ {availableLocales.map((localeItem) => (
461
+ <li key={localeItem}>
462
+ <Link
463
+ aria-current={localeItem === locale ? "page" : undefined}
464
+ aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
465
+ reloadDocument // Przeładuj stronę, aby zastosować nową lokalizację
466
+ to={getLocalizedUrl(pathWithoutLocale, localeItem)}
467
+ >
468
+ <span>
469
+ {/* Lokalizacja - np. FR */}
470
+ {localeItem}
471
+ </span>
472
+ <span>
473
+ {/* Język w jego własnej lokalizacji - np. Français */}
474
+ {getLocaleName(localeItem, locale)}
475
+ </span>
476
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
477
+ {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
478
+ {getLocaleName(localeItem)}
479
+ </span>
480
+ <span dir="ltr" lang={Locales.ENGLISH}>
481
+ {/* Język po angielsku - np. French */}
482
+ {getLocaleName(localeItem, Locales.ENGLISH)}
483
+ </span>
484
+ </Link>
485
+ </li>
486
+ ))}
487
+ </ol>
488
+ );
489
+ };
490
+ ```
491
+
492
+ > Aby dowiedzieć się więcej o hooku `useLocale`, zapoznaj się z [dokumentacją](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/react-intlayer/useLocale.md).
493
+
494
+ ### Krok 10: Dodaj zarządzanie atrybutami HTML (opcjonalnie)
495
+
496
+ Utwórz hook do zarządzania atrybutami lang i dir w HTML:
497
+
498
+ ```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
499
+ import { getHTMLTextDir } from "intlayer";
500
+ import { useEffect } from "react";
501
+ import { useLocale } from "react-intlayer";
502
+
503
+ export const useI18nHTMLAttributes = () => {
504
+ const { locale } = useLocale();
505
+
506
+ useEffect(() => {
507
+ document.documentElement.lang = locale;
508
+ document.documentElement.dir = getHTMLTextDir(locale);
509
+ }, [locale]);
510
+ };
511
+ ```
512
+
513
+ Następnie użyj go w swoim komponencie root:
514
+
515
+ ```tsx fileName="app/routes/layout.tsx"
516
+ import { Outlet } from "react-router";
517
+ import { IntlayerProvider } from "react-intlayer";
518
+
519
+ import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // importuj hook
520
+
521
+ export default function RootLayout() {
522
+ useI18nHTMLAttributes(); // wywołaj hook
523
+
524
+ return (
525
+ <IntlayerProvider>
526
+ <Outlet />
527
+ </IntlayerProvider>
528
+ );
529
+ }
530
+ ```
531
+
532
+ ### Krok 10: Dodaj middleware (opcjonalnie)
533
+
534
+ Możesz również użyć `intlayerProxy`, aby dodać routing po stronie serwera do swojej aplikacji. Ten plugin automatycznie wykryje aktualny locale na podstawie URL i ustawi odpowiedni cookie locale. Jeśli locale nie jest określone, plugin wybierze najbardziej odpowiedni locale na podstawie preferencji językowych przeglądarki użytkownika. Jeśli nie zostanie wykryty żaden locale, nastąpi przekierowanie do domyślnego locale.
535
+
536
+ > Zauważ, że aby używać `intlayerProxy` w produkcji, musisz przenieść pakiet `vite-intlayer` z `devDependencies` do `dependencies`.
537
+
538
+ ```typescript {3,7} fileName="vite.config.ts"
539
+ import { reactRouter } from "@react-router/dev/vite";
540
+ import { defineConfig } from "vite";
541
+ import { intlayer, intlayerProxy } from "vite-intlayer";
542
+ import tsconfigPaths from "vite-tsconfig-paths";
543
+
544
+ export default defineConfig({
545
+ plugins: [reactRouter(), tsconfigPaths(), intlayer(), intlayerProxy()],
546
+ });
547
+ ```
548
+
549
+ ---
550
+
551
+ ## Konfiguracja TypeScript
552
+
553
+ Intlayer wykorzystuje rozszerzanie modułów (module augmentation), aby korzystać z zalet TypeScript i wzmocnić Twoją bazę kodu.
554
+
555
+ Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy:
556
+
557
+ ```json5 fileName="tsconfig.json"
558
+ {
559
+ // ... twoje istniejące konfiguracje
560
+ include: [
561
+ // ... twoje istniejące dołączenia
562
+ ".intlayer/**/*.ts", // Uwzględnij automatycznie generowane typy
563
+ ],
564
+ }
565
+ ```
566
+
567
+ ---
568
+
569
+ ## Konfiguracja Git
570
+
571
+ Zaleca się ignorowanie plików generowanych przez Intlayer. Pozwala to uniknąć ich zatwierdzania do repozytorium Git.
572
+
573
+ Aby to zrobić, możesz dodać następujące instrukcje do pliku `.gitignore`:
574
+
575
+ ```plaintext fileName=".gitignore"
576
+ # Ignoruj pliki generowane przez Intlayer
577
+ .intlayer
578
+ ```
579
+
580
+ ---
581
+
582
+ ## Rozszerzenie VS Code
583
+
584
+ Aby poprawić doświadczenie programistyczne z Intlayer, możesz zainstalować oficjalne **rozszerzenie Intlayer dla VS Code**.
585
+
586
+ [Zainstaluj z VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
587
+
588
+ To rozszerzenie oferuje:
589
+
590
+ - **Autouzupełnianie** kluczy tłumaczeń.
591
+ - **Wykrywanie błędów w czasie rzeczywistym** dla brakujących tłumaczeń.
592
+ - **Podglądy w linii** przetłumaczonej zawartości.
593
+ - **Szybkie akcje** umożliwiające łatwe tworzenie i aktualizację tłumaczeń.
594
+
595
+ Aby uzyskać więcej informacji na temat korzystania z rozszerzenia, zapoznaj się z [dokumentacją rozszerzenia Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
596
+
597
+ ---
598
+
599
+ ## Idź dalej
600
+
601
+ Aby pójść dalej, możesz zaimplementować [edytor wizualny](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_visual_editor.md) lub wyodrębnić swoją zawartość, korzystając z [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_CMS.md).
602
+
603
+ ---
604
+
605
+ ## Odnośniki do dokumentacji
606
+
607
+ - [Dokumentacja Intlayer](https://intlayer.org)
608
+ - [Dokumentacja React Router v7](https://reactrouter.com/)
609
+ - [Dokumentacja React Router fs-routes](https://reactrouter.com/how-to/file-route-conventions)
610
+ - [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/react-intlayer/useIntlayer.md)
611
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/react-intlayer/useLocale.md)
612
+ - [Deklaracja treści](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dictionary/content_file.md)
613
+ - [Konfiguracja](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md)
614
+
615
+ Ten kompleksowy przewodnik zawiera wszystko, co potrzebne do integracji Intlayer z React Router v7 używając routingu opartego na systemie plików, aby uzyskać w pełni zinternacjonalizowaną aplikację z trasowaniem uwzględniającym lokalizację oraz wsparciem dla TypeScript.