@intlayer/docs 5.7.4 → 5.7.6-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/intlayer_with_i18next.md +1 -1
- package/dist/cjs/common.cjs +0 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +80 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +0 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +80 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/CI_CD.md +0 -1
- package/docs/ar/configuration.md +42 -5
- package/docs/ar/dictionary/enumeration.md +0 -1
- package/docs/ar/packages/react-intlayer/useI18n.md +250 -0
- package/docs/de/CI_CD.md +0 -1
- package/docs/de/configuration.md +42 -5
- package/docs/de/dictionary/gender.md +3 -3
- package/docs/de/packages/react-intlayer/useI18n.md +250 -0
- package/docs/en/configuration.md +44 -7
- package/docs/en/packages/react-intlayer/useI18n.md +250 -0
- package/docs/en-GB/configuration.md +42 -5
- package/docs/en-GB/packages/react-intlayer/useI18n.md +254 -0
- package/docs/es/configuration.md +42 -5
- package/docs/es/dictionary/enumeration.md +1 -2
- package/docs/es/dictionary/gender.md +3 -3
- package/docs/es/locale_mapper.md +1 -1
- package/docs/es/packages/react-intlayer/useI18n.md +250 -0
- package/docs/fr/configuration.md +44 -7
- package/docs/fr/intlayer_with_nextjs_15.md +0 -1
- package/docs/fr/intlayer_with_vite+preact.md +1 -1
- package/docs/fr/packages/react-intlayer/useI18n.md +250 -0
- package/docs/hi/configuration.md +42 -5
- package/docs/hi/dictionary/enumeration.md +0 -2
- package/docs/hi/packages/react-intlayer/useI18n.md +259 -0
- package/docs/it/configuration.md +42 -5
- package/docs/it/dictionary/enumeration.md +0 -1
- package/docs/it/packages/react-intlayer/useI18n.md +250 -0
- package/docs/it/vs_code_extension.md +0 -1
- package/docs/ja/configuration.md +43 -28
- package/docs/ja/dictionary/enumeration.md +0 -2
- package/docs/ja/packages/react-intlayer/useI18n.md +250 -0
- package/docs/ko/configuration.md +42 -5
- package/docs/ko/dictionary/enumeration.md +0 -2
- package/docs/ko/packages/react-intlayer/useI18n.md +250 -0
- package/docs/pt/configuration.md +42 -5
- package/docs/pt/packages/react-intlayer/useI18n.md +250 -0
- package/docs/ru/configuration.md +42 -5
- package/docs/ru/dictionary/enumeration.md +0 -2
- package/docs/ru/packages/react-intlayer/useI18n.md +250 -0
- package/docs/ru/vs_code_extension.md +0 -1
- package/docs/zh/configuration.md +42 -5
- package/docs/zh/dictionary/enumeration.md +0 -1
- package/docs/zh/packages/react-intlayer/useI18n.md +250 -0
- package/frequent_questions/ar/unknown_command.md +1 -1
- package/frequent_questions/de/array_as_content_declaration.md +1 -1
- package/frequent_questions/de/build_dictionaries.md +1 -1
- package/frequent_questions/de/build_error_CI_CD.md +1 -1
- package/frequent_questions/de/customized_locale_list.md +1 -1
- package/frequent_questions/de/esbuild_error.md +1 -1
- package/frequent_questions/de/intlayer_command_undefined.md +1 -1
- package/frequent_questions/de/locale_incorect_in_url.md +1 -1
- package/frequent_questions/de/static_rendering.md +1 -1
- package/frequent_questions/de/translated_path_url.md +1 -1
- package/frequent_questions/de/unknown_command.md +1 -1
- package/frequent_questions/en-GB/customized_locale_list.md +1 -1
- package/frequent_questions/es/array_as_content_declaration.md +1 -1
- package/frequent_questions/es/build_dictionaries.md +1 -1
- package/frequent_questions/es/customized_locale_list.md +1 -1
- package/frequent_questions/es/domain_routing.md +1 -1
- package/frequent_questions/es/get_locale_cookie.md +1 -1
- package/frequent_questions/es/intlayer_command_undefined.md +1 -1
- package/frequent_questions/es/locale_incorect_in_url.md +1 -1
- package/frequent_questions/es/static_rendering.md +1 -1
- package/frequent_questions/es/translated_path_url.md +1 -1
- package/frequent_questions/es/unknown_command.md +1 -1
- package/frequent_questions/fr/array_as_content_declaration.md +1 -1
- package/frequent_questions/fr/build_dictionaries.md +1 -1
- package/frequent_questions/fr/customized_locale_list.md +1 -1
- package/frequent_questions/fr/domain_routing.md +1 -1
- package/frequent_questions/fr/esbuild_error.md +1 -1
- package/frequent_questions/fr/intlayer_command_undefined.md +1 -1
- package/frequent_questions/fr/static_rendering.md +1 -1
- package/frequent_questions/fr/translated_path_url.md +1 -1
- package/frequent_questions/fr/unknown_command.md +1 -1
- package/frequent_questions/it/array_as_content_declaration.md +1 -1
- package/frequent_questions/it/build_dictionaries.md +1 -1
- package/frequent_questions/it/customized_locale_list.md +1 -1
- package/frequent_questions/it/esbuild_error.md +1 -1
- package/frequent_questions/it/intlayer_command_undefined.md +1 -1
- package/frequent_questions/it/locale_incorect_in_url.md +1 -1
- package/frequent_questions/it/static_rendering.md +1 -1
- package/frequent_questions/it/translated_path_url.md +1 -1
- package/frequent_questions/it/unknown_command.md +1 -1
- package/frequent_questions/ko/build_dictionaries.md +2 -2
- package/frequent_questions/ko/customized_locale_list.md +3 -3
- package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
- package/frequent_questions/pt/array_as_content_declaration.md +1 -1
- package/frequent_questions/pt/build_dictionaries.md +1 -1
- package/frequent_questions/pt/build_error_CI_CD.md +1 -1
- package/frequent_questions/pt/customized_locale_list.md +1 -1
- package/frequent_questions/pt/domain_routing.md +1 -1
- package/frequent_questions/pt/esbuild_error.md +1 -1
- package/frequent_questions/pt/intlayer_command_undefined.md +1 -1
- package/frequent_questions/pt/locale_incorect_in_url.md +1 -1
- package/frequent_questions/pt/static_rendering.md +1 -1
- package/frequent_questions/pt/translated_path_url.md +1 -1
- package/frequent_questions/pt/unknown_command.md +1 -1
- package/frequent_questions/zh/build_dictionaries.md +3 -3
- package/frequent_questions/zh/customized_locale_list.md +3 -3
- package/frequent_questions/zh/esbuild_error.md +3 -3
- package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
- package/frequent_questions/zh/translated_path_url.md +3 -3
- package/package.json +9 -9
- package/src/common.ts +0 -1
- package/src/generated/docs.entry.ts +80 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-11
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: useI18n Hook Dokumentation | react-intlayer
|
|
5
|
+
description: Erfahren Sie, wie Sie den useI18n Hook im react-intlayer Paket verwenden
|
|
6
|
+
keywords:
|
|
7
|
+
- useI18n
|
|
8
|
+
- i18n
|
|
9
|
+
- Übersetzung
|
|
10
|
+
- Wörterbuch
|
|
11
|
+
- Intlayer
|
|
12
|
+
- Internationalisierung
|
|
13
|
+
- Dokumentation
|
|
14
|
+
- Next.js
|
|
15
|
+
- JavaScript
|
|
16
|
+
- React
|
|
17
|
+
slugs:
|
|
18
|
+
- doc
|
|
19
|
+
- packages
|
|
20
|
+
- react-intlayer
|
|
21
|
+
- useI18n
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# React-Integration: `useI18n` Hook Dokumentation
|
|
25
|
+
|
|
26
|
+
Dieser Abschnitt bietet eine detaillierte Anleitung zur Verwendung des `useI18n` Hooks in React-Anwendungen, um eine effiziente Inhaltslokalisierung zu ermöglichen.
|
|
27
|
+
|
|
28
|
+
## Importieren von `useI18n` in React
|
|
29
|
+
|
|
30
|
+
Der `useI18n` Hook kann je nach Kontext wie folgt in React-Anwendungen importiert und integriert werden:
|
|
31
|
+
|
|
32
|
+
- **Client-Komponenten:**
|
|
33
|
+
|
|
34
|
+
```typescript codeFormat="typescript"
|
|
35
|
+
import { useI18n } from "react-intlayer"; // Verwendung in clientseitigen React-Komponenten
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```javascript codeFormat="esm"
|
|
39
|
+
import { useI18n } from "react-intlayer"; // Verwendung in clientseitigen React-Komponenten
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```javascript codeFormat="commonjs"
|
|
43
|
+
const { useI18n } = require("react-intlayer"); // Verwendung in clientseitigen React-Komponenten
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- **Server-Komponenten:**
|
|
47
|
+
|
|
48
|
+
```typescript codeFormat="commonjs"
|
|
49
|
+
import { useI18n } from "react-intlayer/server"; // Verwendung in serverseitigen React-Komponenten
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```javascript codeFormat="esm"
|
|
53
|
+
import { useI18n } from "react-intlayer/server"; // Verwendung in serverseitigen React-Komponenten
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```javascript codeFormat="commonjs"
|
|
57
|
+
const { useI18n } = require("react-intlayer/server"); // Verwendung in serverseitigen React-Komponenten
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Parameter
|
|
61
|
+
|
|
62
|
+
Dieser Hook akzeptiert zwei Parameter:
|
|
63
|
+
|
|
64
|
+
1. **`namespace`**: Ein Wörterbuch-Namespace zur Eingrenzung der Übersetzungsschlüssel.
|
|
65
|
+
2. **`locale`** (optional): Die gewünschte Locale. Wenn nicht angegeben, wird standardmäßig die Locale des Kontexts verwendet.
|
|
66
|
+
|
|
67
|
+
## Wörterbuch
|
|
68
|
+
|
|
69
|
+
Alle Wörterbuchschlüssel müssen in Inhaltsdeklarationsdateien deklariert werden, um die Typsicherheit zu erhöhen und Fehler zu vermeiden. [Konfigurationsanweisungen finden Sie hier](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dictionary/get_started.md).
|
|
70
|
+
|
|
71
|
+
## Anwendungsbeispiele in React
|
|
72
|
+
|
|
73
|
+
Beispiele für die Verwendung des `useI18n` Hooks innerhalb von React-Komponenten:
|
|
74
|
+
|
|
75
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
76
|
+
import type { FC } from "react";
|
|
77
|
+
import { ClientComponentExample, ServerComponentExample } from "@components";
|
|
78
|
+
import { IntlayerProvider } from "react.intlayer";
|
|
79
|
+
import { useI18n, IntlayerServerProvider } from "react-intlayer/server";
|
|
80
|
+
import { Locales } from "intlayer";
|
|
81
|
+
|
|
82
|
+
const App: FC<{ locale: Locales }> = ({ locale }) => {
|
|
83
|
+
const t = useI18n("home-page", locale);
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<>
|
|
87
|
+
<p>{t("introduction")}</p>
|
|
88
|
+
<IntlayerProvider locale={locale}>
|
|
89
|
+
<ClientComponentExample />
|
|
90
|
+
</IntlayerProvider>
|
|
91
|
+
<IntlayerServerProvider locale={locale}>
|
|
92
|
+
<ServerComponentExample />
|
|
93
|
+
</IntlayerServerProvider>
|
|
94
|
+
</>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```jsx fileName="src/app.jsx" codeFormat="esm"
|
|
100
|
+
import { ClientComponentExample, ServerComponentExample } from "@components";
|
|
101
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
102
|
+
import { IntlayerServerProvider, useI18n } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
const App = ({ locale }) => {
|
|
105
|
+
const t = useI18n("home-page", locale);
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<>
|
|
109
|
+
<p>{t("introduction")}</p>
|
|
110
|
+
<IntlayerProvider locale={locale}>
|
|
111
|
+
<ClientComponentExample />
|
|
112
|
+
</IntlayerProvider>
|
|
113
|
+
<IntlayerServerProvider locale={locale}>
|
|
114
|
+
<ServerComponentExample />
|
|
115
|
+
</IntlayerServerProvider>
|
|
116
|
+
</>
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```jsx fileName="src/app.cjs" codeFormat="commonjs"
|
|
122
|
+
const { IntlayerProvider } = require("react-intlayer");
|
|
123
|
+
const { IntlayerServerProvider, useI18n } = require("react-intlayer/server");
|
|
124
|
+
|
|
125
|
+
const App = ({ locale }) => {
|
|
126
|
+
const t = useI18n("home-page", locale);
|
|
127
|
+
|
|
128
|
+
return (
|
|
129
|
+
<>
|
|
130
|
+
<p>{t("introduction")}</p>
|
|
131
|
+
<IntlayerProvider locale={locale}>
|
|
132
|
+
<ClientComponentExample />
|
|
133
|
+
</IntlayerProvider>
|
|
134
|
+
<IntlayerServerProvider locale={locale}>
|
|
135
|
+
<ServerComponentExample />
|
|
136
|
+
</IntlayerServerProvider>
|
|
137
|
+
</>
|
|
138
|
+
);
|
|
139
|
+
};
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
143
|
+
import type { FC } from "react";
|
|
144
|
+
import { useI18n } from "react-intlayer";
|
|
145
|
+
|
|
146
|
+
const ComponentExample: FC = () => {
|
|
147
|
+
const t = useI18n("component-example");
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<div>
|
|
151
|
+
<h1>{t("title")}</h1> {/* Titel anzeigen */}
|
|
152
|
+
<p>{t("description")}</p> {/* Beschreibung anzeigen */}
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```jsx fileName="src/components/ComponentExample.jsx" codeFormat="esm"
|
|
159
|
+
import { useI18n } from "react-intlayer";
|
|
160
|
+
|
|
161
|
+
const ComponentExample = () => {
|
|
162
|
+
const t = useI18n("component-example");
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<div>
|
|
166
|
+
<h1>{t("title")}</h1> {/* Titel anzeigen */}
|
|
167
|
+
<p>{t("description")}</p> {/* Beschreibung anzeigen */}
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
```jsx fileName="src/components/ComponentExample.cjs" codeFormat="commonjs"
|
|
174
|
+
const { useI18n } = require("react-intlayer");
|
|
175
|
+
|
|
176
|
+
const ComponentExample = () => {
|
|
177
|
+
const t = useI18n("component-example");
|
|
178
|
+
|
|
179
|
+
return (
|
|
180
|
+
<div>
|
|
181
|
+
<h1>{t("title")}</h1> {/* Titel anzeigen */}
|
|
182
|
+
<p>{t("description")}</p> {/* Beschreibung anzeigen */}
|
|
183
|
+
</div>
|
|
184
|
+
);
|
|
185
|
+
};
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```tsx fileName="src/components/ServerComponentExample.tsx" codeFormat="typescript"
|
|
189
|
+
import { useI18n } from "react-intlayer/server";
|
|
190
|
+
|
|
191
|
+
const ServerComponentExample = () => {
|
|
192
|
+
const t = useI18n("server-component");
|
|
193
|
+
|
|
194
|
+
return (
|
|
195
|
+
<div>
|
|
196
|
+
<h1>{t("title")}</h1> {/* Titel anzeigen */}
|
|
197
|
+
<p>{t("description")}</p> {/* Beschreibung anzeigen */}
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```jsx fileName="src/components/ServerComponentExample.jsx" codeFormat="esm"
|
|
204
|
+
import { useI18n } from "react-intlayer/server";
|
|
205
|
+
|
|
206
|
+
const ServerComponentExample = () => {
|
|
207
|
+
const t = useI18n("server-component");
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<div>
|
|
211
|
+
<h1>{t("title")}</h1> {/* Titel anzeigen */}
|
|
212
|
+
<p>{t("description")}</p> {/* Beschreibung anzeigen */}
|
|
213
|
+
</div>
|
|
214
|
+
);
|
|
215
|
+
};
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
```jsx fileName="src/components/ServerComponentExample.cjs" codeFormat="commonjs"
|
|
219
|
+
const { useI18n } = require("react-intlayer/server");
|
|
220
|
+
|
|
221
|
+
const ServerComponentExample = () => {
|
|
222
|
+
const t = useI18n("server-component");
|
|
223
|
+
|
|
224
|
+
return (
|
|
225
|
+
<div>
|
|
226
|
+
<h1>{t("title")}</h1>
|
|
227
|
+
<p>{t("description")}</p>
|
|
228
|
+
</div>
|
|
229
|
+
);
|
|
230
|
+
};
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Attributbehandlung
|
|
234
|
+
|
|
235
|
+
Beim Lokalisieren von Attributen greifen Sie entsprechend auf die Übersetzungswerte zu:
|
|
236
|
+
|
|
237
|
+
```jsx
|
|
238
|
+
<!-- Für Barrierefreiheitsattribute (z. B. aria-label) verwenden Sie .value, da reine Strings erforderlich sind -->
|
|
239
|
+
<button aria-label={t("button.ariaLabel").value}>{t("button.text")}</button>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Zusätzliche Ressourcen
|
|
243
|
+
|
|
244
|
+
- **Intlayer Visual Editor**: Für eine intuitivere Verwaltung von Inhalten konsultieren Sie die Dokumentation des visuellen Editors [hier](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_visual_editor.md).
|
|
245
|
+
|
|
246
|
+
Dieser Abschnitt behandelt speziell die Integration des `useI18n`-Hooks in React-Anwendungen, vereinfacht den Lokalisierungsprozess und gewährleistet Konsistenz der Inhalte über verschiedene Sprachversionen hinweg.
|
|
247
|
+
|
|
248
|
+
## Dokumentationshistorie
|
|
249
|
+
|
|
250
|
+
- 6.0.0 - 2025-06-29: Erste Erstellung der Dokumentation zum `useI18n` Hook
|
package/docs/en/configuration.md
CHANGED
|
@@ -242,9 +242,9 @@ Defines settings related to the integrated editor, including server port and act
|
|
|
242
242
|
|
|
243
243
|
- _Type_: `boolean`
|
|
244
244
|
- _Default_: `false`
|
|
245
|
-
- _Description_: Indicates if the application should hot reload the locale configurations when a change is detected.
|
|
245
|
+
- _Description_: Indicates if the application server should hot reload the locale configurations when a change is detected.
|
|
246
246
|
- _Example_: `true`
|
|
247
|
-
- _Note_: For example, when a new dictionary is added or updated, the application will update the content
|
|
247
|
+
- _Note_: For example, when a new dictionary is added or updated, the application will update the content to display in the page.
|
|
248
248
|
- _Note_: Because the hot reloading needs an continuous connection to the server, it is only available for clients of the `enterprise` plan.
|
|
249
249
|
|
|
250
250
|
- **dictionaryPriorityStrategy**:
|
|
@@ -278,10 +278,12 @@ Settings that control middleware behavior, including how the application handles
|
|
|
278
278
|
- **prefixDefault**:
|
|
279
279
|
|
|
280
280
|
- _Type_: `boolean`
|
|
281
|
-
- _Default_: `
|
|
281
|
+
- _Default_: `false`
|
|
282
282
|
- _Description_: Whether to include the default locale in the URL.
|
|
283
|
-
- _Example_: `
|
|
284
|
-
- _Note_:
|
|
283
|
+
- _Example_: `true`
|
|
284
|
+
- _Note_:
|
|
285
|
+
- If `true` and `defaultLocale = 'en'`: path = `/en/dashboard` or `/fr/dashboard`
|
|
286
|
+
- If `false` and `defaultLocale = 'en'`: path = `/dashboard` or `/fr/dashboard`
|
|
285
287
|
|
|
286
288
|
- **basePath**:
|
|
287
289
|
|
|
@@ -289,7 +291,11 @@ Settings that control middleware behavior, including how the application handles
|
|
|
289
291
|
- _Default_: `''`
|
|
290
292
|
- _Description_: The base path for the application URLs.
|
|
291
293
|
- _Example_: `'/my-app'`
|
|
292
|
-
- _Note_:
|
|
294
|
+
- _Note_:
|
|
295
|
+
- If the application is hosted at `https://example.com/my-app`
|
|
296
|
+
- The base path is `'/my-app'`
|
|
297
|
+
- The URL will be `https://example.com/my-app/en`
|
|
298
|
+
- If the base path is not set, the URL will be `https://example.com/en`
|
|
293
299
|
|
|
294
300
|
- **serverSetCookie**:
|
|
295
301
|
|
|
@@ -301,11 +307,42 @@ Settings that control middleware behavior, including how the application handles
|
|
|
301
307
|
- _Note_: Controls whether the locale cookie is set on every request or never.
|
|
302
308
|
|
|
303
309
|
- **noPrefix**:
|
|
310
|
+
|
|
304
311
|
- _Type_: `boolean`
|
|
305
312
|
- _Default_: `false`
|
|
306
313
|
- _Description_: Whether to omit the locale prefix from URLs.
|
|
307
314
|
- _Example_: `true`
|
|
308
|
-
- _Note_:
|
|
315
|
+
- _Note_:
|
|
316
|
+
- If `true`: No prefix in the URL
|
|
317
|
+
- If `false`: Prefix in the URL
|
|
318
|
+
- Example with `basePath = '/my-app'`:
|
|
319
|
+
- If `noPrefix = false`: URL will be `https://example.com/my-app/en`
|
|
320
|
+
- If `noPrefix = true`: URL will be `https://example.com`
|
|
321
|
+
|
|
322
|
+
- **detectLocaleOnPrefetchNoPrefix**:
|
|
323
|
+
|
|
324
|
+
- _Type_: `boolean`
|
|
325
|
+
- _Default_: `false`
|
|
326
|
+
- _Description_: Controls whether locale detection occurs during Next.js prefetch requests.
|
|
327
|
+
- _Example_: `true`
|
|
328
|
+
- _Note_: This setting affects how Next.js handles locale prefetching:
|
|
329
|
+
- **Example scenario:**
|
|
330
|
+
- User's browser language is `'fr'`
|
|
331
|
+
- Current page is `/fr/about`
|
|
332
|
+
- Link prefetches `/about`
|
|
333
|
+
- **With `detectLocaleOnPrefetchNoPrefix: true`:**
|
|
334
|
+
- Prefetch detects `'fr'` locale from browser
|
|
335
|
+
- Redirects prefetch to `/fr/about`
|
|
336
|
+
- **With `detectLocaleOnPrefetchNoPrefix: false` (default):**
|
|
337
|
+
- Prefetch uses default locale
|
|
338
|
+
- Redirects prefetch to `/en/about` (assuming `'en'` is default)
|
|
339
|
+
- **When to use `true`:**
|
|
340
|
+
- Your app uses non-localized internal links (e.g. `<a href="/about">`)
|
|
341
|
+
- You want consistent locale detection behavior between regular and prefetch requests
|
|
342
|
+
- **When to use `false` (default):**
|
|
343
|
+
- Your app uses locale-prefixed links (e.g. `<a href="/fr/about">`)
|
|
344
|
+
- You want to optimize prefetching performance
|
|
345
|
+
- You want to avoid potential redirect loops
|
|
309
346
|
|
|
310
347
|
---
|
|
311
348
|
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-11
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: useI18n Hook Documentation | react-intlayer
|
|
5
|
+
description: Learn how to use the useI18n hook in the react-intlayer package
|
|
6
|
+
keywords:
|
|
7
|
+
- useI18n
|
|
8
|
+
- i18n
|
|
9
|
+
- translation
|
|
10
|
+
- dictionary
|
|
11
|
+
- Intlayer
|
|
12
|
+
- internationalization
|
|
13
|
+
- documentation
|
|
14
|
+
- Next.js
|
|
15
|
+
- JavaScript
|
|
16
|
+
- React
|
|
17
|
+
slugs:
|
|
18
|
+
- doc
|
|
19
|
+
- packages
|
|
20
|
+
- react-intlayer
|
|
21
|
+
- useI18n
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# React Integration: `useI18n` Hook Documentation
|
|
25
|
+
|
|
26
|
+
This section provides detailed guidance on how to use the `useI18n` hook within React applications, enabling efficient content localization.
|
|
27
|
+
|
|
28
|
+
## Importing `useI18n` in React
|
|
29
|
+
|
|
30
|
+
The `useI18n` hook can be imported and integrated into React applications according to the context as follows:
|
|
31
|
+
|
|
32
|
+
- **Client Components:**
|
|
33
|
+
|
|
34
|
+
```typescript codeFormat="typescript"
|
|
35
|
+
import { useI18n } from "react-intlayer"; // Use in client-side React components
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```javascript codeFormat="esm"
|
|
39
|
+
import { useI18n } from "react-intlayer"; // Use in client-side React components
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```javascript codeFormat="commonjs"
|
|
43
|
+
const { useI18n } = require("react-intlayer"); // Use in client-side React components
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- **Server Components:**
|
|
47
|
+
|
|
48
|
+
```typescript codeFormat="commonjs"
|
|
49
|
+
import { useI18n } from "react-intlayer/server"; // Use in server-side React components
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```javascript codeFormat="esm"
|
|
53
|
+
import { useI18n } from "react-intlayer/server"; // Use in server-side React components
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```javascript codeFormat="commonjs"
|
|
57
|
+
const { useI18n } = require("react-intlayer/server"); // Use in server-side React components
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Parameters
|
|
61
|
+
|
|
62
|
+
This hook accepts two parameters:
|
|
63
|
+
|
|
64
|
+
1. **`namespace`**: A dictionary namespace to scope the translation keys.
|
|
65
|
+
2. **`locale`** (optional): The desired locale. If not specified, the context's locale will be used as default.
|
|
66
|
+
|
|
67
|
+
## Dictionary
|
|
68
|
+
|
|
69
|
+
All dictionary keys must be declared within content declaration files to enhance type safety and prevent errors. [Configuration instructions can be found here](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/get_started.md).
|
|
70
|
+
|
|
71
|
+
## Usage Examples in React
|
|
72
|
+
|
|
73
|
+
Examples of using the `useI18n` hook within React components:
|
|
74
|
+
|
|
75
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
76
|
+
import type { FC } from "react";
|
|
77
|
+
import { ClientComponentExample, ServerComponentExample } from "@components";
|
|
78
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
79
|
+
import { useI18n, IntlayerServerProvider } from "react-intlayer/server";
|
|
80
|
+
import { Locales } from "intlayer";
|
|
81
|
+
|
|
82
|
+
const App: FC<{ locale: Locales }> = ({ locale }) => {
|
|
83
|
+
const t = useI18n("home-page", locale);
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<>
|
|
87
|
+
<p>{t("introduction")}</p>
|
|
88
|
+
<IntlayerProvider locale={locale}>
|
|
89
|
+
<ClientComponentExample />
|
|
90
|
+
</IntlayerProvider>
|
|
91
|
+
<IntlayerServerProvider locale={locale}>
|
|
92
|
+
<ServerComponentExample />
|
|
93
|
+
</IntlayerServerProvider>
|
|
94
|
+
</>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```jsx fileName="src/app.jsx" codeFormat="esm"
|
|
100
|
+
import { ClientComponentExample, ServerComponentExample } from "@components";
|
|
101
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
102
|
+
import { IntlayerServerProvider, useI18n } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
const App = ({ locale }) => {
|
|
105
|
+
const t = useI18n("home-page", locale);
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<>
|
|
109
|
+
<p>{t("introduction")}</p>
|
|
110
|
+
<IntlayerProvider locale={locale}>
|
|
111
|
+
<ClientComponentExample />
|
|
112
|
+
</IntlayerProvider>
|
|
113
|
+
<IntlayerServerProvider locale={locale}>
|
|
114
|
+
<ServerComponentExample />
|
|
115
|
+
</IntlayerServerProvider>
|
|
116
|
+
</>
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```jsx fileName="src/app.cjs" codeFormat="commonjs"
|
|
122
|
+
const { IntlayerProvider } = require("react-intlayer");
|
|
123
|
+
const { IntlayerServerProvider, useI18n } = require("react-intlayer/server");
|
|
124
|
+
|
|
125
|
+
const App = ({ locale }) => {
|
|
126
|
+
const t = useI18n("home-page", locale);
|
|
127
|
+
|
|
128
|
+
return (
|
|
129
|
+
<>
|
|
130
|
+
<p>{t("introduction")}</p>
|
|
131
|
+
<IntlayerProvider locale={locale}>
|
|
132
|
+
<ClientComponentExample />
|
|
133
|
+
</IntlayerProvider>
|
|
134
|
+
<IntlayerServerProvider locale={locale}>
|
|
135
|
+
<ServerComponentExample />
|
|
136
|
+
</IntlayerServerProvider>
|
|
137
|
+
</>
|
|
138
|
+
);
|
|
139
|
+
};
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
```tsx fileName="src/components/ComponentExample.tsx" codeFormat="typescript"
|
|
143
|
+
import type { FC } from "react";
|
|
144
|
+
import { useI18n } from "react-intlayer";
|
|
145
|
+
|
|
146
|
+
const ComponentExample: FC = () => {
|
|
147
|
+
const t = useI18n("component-example");
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<div>
|
|
151
|
+
<h1>{t("title")}</h1> {/* Display the title */}
|
|
152
|
+
<p>{t("description")}</p> {/* Display the description */}
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```jsx fileName="src/components/ComponentExample.jsx" codeFormat="esm"
|
|
159
|
+
import { useI18n } from "react-intlayer";
|
|
160
|
+
|
|
161
|
+
const ComponentExample = () => {
|
|
162
|
+
const t = useI18n("component-example");
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<div>
|
|
166
|
+
<h1>{t("title")}</h1> {/* Display the title */}
|
|
167
|
+
<p>{t("description")}</p> {/* Display the description */}
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
```jsx fileName="src/components/ComponentExample.cjs" codeFormat="commonjs"
|
|
174
|
+
const { useI18n } = require("react-intlayer");
|
|
175
|
+
|
|
176
|
+
const ComponentExample = () => {
|
|
177
|
+
const t = useI18n("component-example");
|
|
178
|
+
|
|
179
|
+
return (
|
|
180
|
+
<div>
|
|
181
|
+
<h1>{t("title")}</h1> {/* Display the title */}
|
|
182
|
+
<p>{t("description")}</p> {/* Display the description */}
|
|
183
|
+
</div>
|
|
184
|
+
);
|
|
185
|
+
};
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```tsx fileName="src/components/ServerComponentExample.tsx" codeFormat="typescript"
|
|
189
|
+
import { useI18n } from "react-intlayer/server";
|
|
190
|
+
|
|
191
|
+
const ServerComponentExample = () => {
|
|
192
|
+
const t = useI18n("server-component");
|
|
193
|
+
|
|
194
|
+
return (
|
|
195
|
+
<div>
|
|
196
|
+
<h1>{t("title")}</h1> {/* Display the title */}
|
|
197
|
+
<p>{t("description")}</p> {/* Display the description */}
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```jsx fileName="src/components/ServerComponentExample.jsx" codeFormat="esm"
|
|
204
|
+
import { useI18n } from "react-intlayer/server";
|
|
205
|
+
|
|
206
|
+
const ServerComponentExample = () => {
|
|
207
|
+
const t = useI18n("server-component");
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<div>
|
|
211
|
+
<h1>{t("title")}</h1> {/* Display the title */}
|
|
212
|
+
<p>{t("description")}</p> {/* Display the description */}
|
|
213
|
+
</div>
|
|
214
|
+
);
|
|
215
|
+
};
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
```jsx fileName="src/components/ServerComponentExample.cjs" codeFormat="commonjs"
|
|
219
|
+
const { useI18n } = require("react-intlayer/server");
|
|
220
|
+
|
|
221
|
+
const ServerComponentExample = () => {
|
|
222
|
+
const t = useI18n("server-component");
|
|
223
|
+
|
|
224
|
+
return (
|
|
225
|
+
<div>
|
|
226
|
+
<h1>{t("title")}</h1>
|
|
227
|
+
<p>{t("description")}</p>
|
|
228
|
+
</div>
|
|
229
|
+
);
|
|
230
|
+
};
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Attribute Handling
|
|
234
|
+
|
|
235
|
+
When localizing attributes, access the translation values appropriately:
|
|
236
|
+
|
|
237
|
+
```jsx
|
|
238
|
+
<!-- For accessibility attributes (e.g., aria-label), use .value since pure strings are required -->
|
|
239
|
+
<button aria-label={t("button.ariaLabel").value}>{t("button.text")}</button>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Additional Resources
|
|
243
|
+
|
|
244
|
+
- **Intlayer Visual Editor**: For a more intuitive content management experience, refer to the visual editor documentation [here](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md).
|
|
245
|
+
|
|
246
|
+
This section specifically covers the integration of the `useI18n` hook in React applications, simplifying the localization process and ensuring content consistency across different locales.
|
|
247
|
+
|
|
248
|
+
## Documentation History
|
|
249
|
+
|
|
250
|
+
- 6.0.0 - 2025-06-29: Initial writing of `useI18n` hook documentation
|
|
@@ -268,10 +268,12 @@ Settings that control middleware behaviour, including how the application handle
|
|
|
268
268
|
- **prefixDefault**:
|
|
269
269
|
|
|
270
270
|
- _Type_: `boolean`
|
|
271
|
-
- _Default_: `
|
|
271
|
+
- _Default_: `false`
|
|
272
272
|
- _Description_: Whether to include the default locale in the URL.
|
|
273
|
-
- _Example_: `
|
|
274
|
-
- _Note_:
|
|
273
|
+
- _Example_: `true`
|
|
274
|
+
- _Note_:
|
|
275
|
+
- If `true` and `defaultLocale = 'en'`: path = `/en/dashboard` or `/fr/dashboard`
|
|
276
|
+
- If `false` and `defaultLocale = 'en'`: path = `/dashboard` or `/fr/dashboard`
|
|
275
277
|
|
|
276
278
|
- **basePath**:
|
|
277
279
|
|
|
@@ -279,7 +281,11 @@ Settings that control middleware behaviour, including how the application handle
|
|
|
279
281
|
- _Default_: `''`
|
|
280
282
|
- _Description_: The base path for the application URLs.
|
|
281
283
|
- _Example_: `'/my-app'`
|
|
282
|
-
- _Note_:
|
|
284
|
+
- _Note_:
|
|
285
|
+
- If the application is hosted at `https://example.com/my-app`
|
|
286
|
+
- The base path is `'/my-app'`
|
|
287
|
+
- The URL will be `https://example.com/my-app/en`
|
|
288
|
+
- If the base path is not set, the URL will be `https://example.com/en`
|
|
283
289
|
|
|
284
290
|
- **serverSetCookie**:
|
|
285
291
|
|
|
@@ -291,11 +297,42 @@ Settings that control middleware behaviour, including how the application handle
|
|
|
291
297
|
- _Note_: Controls whether the locale cookie is set on every request or never.
|
|
292
298
|
|
|
293
299
|
- **noPrefix**:
|
|
300
|
+
|
|
294
301
|
- _Type_: `boolean`
|
|
295
302
|
- _Default_: `false`
|
|
296
303
|
- _Description_: Whether to omit the locale prefix from URLs.
|
|
297
304
|
- _Example_: `true`
|
|
298
|
-
- _Note_:
|
|
305
|
+
- _Note_:
|
|
306
|
+
- If `true`: No prefix in the URL
|
|
307
|
+
- If `false`: Prefix in the URL
|
|
308
|
+
- Example with `basePath = '/my-app'`:
|
|
309
|
+
- If `noPrefix = false`: URL will be `https://example.com/my-app/en`
|
|
310
|
+
- If `noPrefix = true`: URL will be `https://example.com`
|
|
311
|
+
|
|
312
|
+
- **detectLocaleOnPrefetchNoPrefix**:
|
|
313
|
+
|
|
314
|
+
- _Type_: `boolean`
|
|
315
|
+
- _Default_: `false`
|
|
316
|
+
- _Description_: Controls whether locale detection occurs during Next.js prefetch requests.
|
|
317
|
+
- _Example_: `true`
|
|
318
|
+
- _Note_: This setting affects how Next.js handles locale prefetching:
|
|
319
|
+
- **Example scenario:**
|
|
320
|
+
- User's browser language is `'fr'`
|
|
321
|
+
- Current page is `/fr/about`
|
|
322
|
+
- Link prefetches `/about`
|
|
323
|
+
- **With `detectLocaleOnPrefetchNoPrefix: true`:**
|
|
324
|
+
- Prefetch detects `'fr'` locale from browser
|
|
325
|
+
- Redirects prefetch to `/fr/about`
|
|
326
|
+
- **With `detectLocaleOnPrefetchNoPrefix: false` (default):**
|
|
327
|
+
- Prefetch uses default locale
|
|
328
|
+
- Redirects prefetch to `/en/about` (assuming `'en'` is default)
|
|
329
|
+
- **When to use `true`:**
|
|
330
|
+
- Your app uses non-localised internal links (e.g. `<a href="/about">`)
|
|
331
|
+
- You want consistent locale detection behaviour between regular and prefetch requests
|
|
332
|
+
- **When to use `false` (default):**
|
|
333
|
+
- Your app uses locale-prefixed links (e.g. `<a href="/fr/about">`)
|
|
334
|
+
- You want to optimise prefetching performance
|
|
335
|
+
- You want to avoid potential redirect loops
|
|
299
336
|
|
|
300
337
|
---
|
|
301
338
|
|