@intlayer/docs 6.1.4 → 6.1.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/next-i18next_vs_next-intl_vs_intlayer.md +1366 -75
- package/blog/ar/nextjs-multilingual-seo-comparison.md +364 -0
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +1288 -72
- package/blog/de/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/en/intlayer_with_next-i18next.mdx +431 -0
- package/blog/en/intlayer_with_next-intl.mdx +335 -0
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +583 -336
- package/blog/en/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1144 -37
- package/blog/en-GB/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1236 -64
- package/blog/es/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1142 -75
- package/blog/fr/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/hi/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1130 -55
- package/blog/it/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1150 -76
- package/blog/ja/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1139 -73
- package/blog/ko/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1143 -76
- package/blog/pt/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1150 -74
- package/blog/ru/nextjs-multilingual-seo-comparison.md +370 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1152 -75
- package/blog/zh/nextjs-multilingual-seo-comparison.md +394 -0
- package/dist/cjs/generated/blog.entry.cjs +16 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +16 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.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/component_i18n.md +186 -0
- package/docs/ar/vs_code_extension.md +48 -109
- package/docs/de/component_i18n.md +186 -0
- package/docs/de/vs_code_extension.md +46 -107
- package/docs/en/component_i18n.md +186 -0
- package/docs/en/interest_of_intlayer.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +18 -1
- package/docs/en/intlayer_with_nextjs_15.md +18 -1
- package/docs/en/vs_code_extension.md +24 -114
- package/docs/en-GB/component_i18n.md +186 -0
- package/docs/en-GB/vs_code_extension.md +42 -103
- package/docs/es/component_i18n.md +182 -0
- package/docs/es/vs_code_extension.md +53 -114
- package/docs/fr/component_i18n.md +186 -0
- package/docs/fr/vs_code_extension.md +50 -111
- package/docs/hi/component_i18n.md +186 -0
- package/docs/hi/vs_code_extension.md +49 -110
- package/docs/it/component_i18n.md +186 -0
- package/docs/it/vs_code_extension.md +50 -111
- package/docs/ja/component_i18n.md +186 -0
- package/docs/ja/vs_code_extension.md +50 -111
- package/docs/ko/component_i18n.md +186 -0
- package/docs/ko/vs_code_extension.md +48 -109
- package/docs/pt/component_i18n.md +186 -0
- package/docs/pt/vs_code_extension.md +46 -107
- package/docs/ru/component_i18n.md +186 -0
- package/docs/ru/vs_code_extension.md +48 -109
- package/docs/tr/component_i18n.md +186 -0
- package/docs/tr/vs_code_extension.md +54 -115
- package/docs/zh/component_i18n.md +186 -0
- package/docs/zh/vs_code_extension.md +51 -105
- package/package.json +11 -11
- package/src/generated/blog.entry.ts +16 -0
- package/src/generated/docs.entry.ts +16 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
4
|
title: Offizielle VS Code Erweiterung
|
|
5
5
|
description: Erfahren Sie, wie Sie die Intlayer-Erweiterung in VS Code verwenden, um Ihren Entwicklungsworkflow zu verbessern. Navigieren Sie schnell zwischen lokalisierten Inhalten und verwalten Sie Ihre Wörterbücher effizient.
|
|
6
6
|
keywords:
|
|
@@ -21,94 +21,38 @@ slugs:
|
|
|
21
21
|
|
|
22
22
|
## Übersicht
|
|
23
23
|
|
|
24
|
-
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) ist die offizielle Visual Studio Code Erweiterung für **Intlayer**, die
|
|
24
|
+
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) ist die offizielle Visual Studio Code Erweiterung für **Intlayer**, die entwickelt wurde, um die Entwicklererfahrung beim Arbeiten mit lokalisierten Inhalten in Ihren Projekten zu verbessern.
|
|
25
25
|
|
|
26
|
-

|
|
26
|
+

|
|
27
27
|
|
|
28
28
|
Erweiterungslink: [https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension)
|
|
29
29
|
|
|
30
30
|
## Funktionen
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
**
|
|
35
|
-
**Nahtlose Integration** – Funktioniert mühelos mit **react-intlayer** und **next-intlayer** Projekten.
|
|
36
|
-
**Mehrsprachige Unterstützung** – Unterstützt lokalisierte Inhalte in verschiedenen Sprachen.
|
|
37
|
-
**VS Code Integration** – Integriert sich reibungslos in die Navigation und die Befehlspalette von VS Code.
|
|
38
|
-
|
|
39
|
-
### Befehle zur Verwaltung von Wörterbüchern
|
|
40
|
-
|
|
41
|
-
Verwalten Sie Ihre Inhaltswörterbücher direkt aus VS Code:
|
|
42
|
-
|
|
43
|
-
- **Wörterbücher erstellen** – Generieren Sie Inhaltsdateien basierend auf Ihrer Projektstruktur.
|
|
44
|
-
- **Wörterbücher hochladen** – Laden Sie die neuesten Wörterbuchinhalte in Ihr Repository hoch.
|
|
45
|
-
- **Wörterbücher herunterladen** – Synchronisieren Sie die neuesten Wörterbuchinhalte aus Ihrem Repository mit Ihrer lokalen Umgebung.
|
|
34
|
+
- **Sofortige Navigation** – Schneller Sprung zur richtigen Inhaltsdatei beim Klicken auf einen `useIntlayer`-Schlüssel.
|
|
46
35
|
- **Wörterbücher füllen** – Füllen Sie Wörterbücher mit Inhalten aus Ihrem Projekt.
|
|
47
|
-
- **Wörterbücher testen** – Erkennen Sie fehlende oder unvollständige Übersetzungen.
|
|
48
|
-
|
|
49
|
-
### Generator für Inhaltsdeklarationen
|
|
50
|
-
|
|
51
|
-
Erstellen Sie einfach strukturierte Wörterbuchdateien in verschiedenen Formaten:
|
|
52
36
|
|
|
53
|
-
|
|
37
|
+

|
|
54
38
|
|
|
55
|
-
|
|
39
|
+
- **Einfacher Zugriff auf Intlayer-Befehle** – Erstellen, pushen, pullen, füllen und testen Sie Inhaltswörterbücher mühelos.
|
|
56
40
|
|
|
57
|
-
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
41
|
+

|
|
60
42
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Generierte Datei im TypeScript-Format:
|
|
43
|
+
- **Generator für Inhaltsdeklarationen** – Erstellen Sie Wörterbuch-Inhaltsdateien in verschiedenen Formaten (`.ts`, `.esm`, `.cjs`, `.json`).
|
|
66
44
|
|
|
67
|
-
|
|
68
|
-
import { t, type Dictionary } from "intlayer";
|
|
45
|
+

|
|
69
46
|
|
|
70
|
-
|
|
71
|
-
key: "my-component",
|
|
72
|
-
content: {
|
|
73
|
-
myTranslatedContent: t({
|
|
74
|
-
en: "Hello World",
|
|
75
|
-
es: "Hola Mundo",
|
|
76
|
-
fr: "Bonjour le monde",
|
|
77
|
-
}),
|
|
78
|
-
},
|
|
79
|
-
};
|
|
47
|
+
- **Wörterbücher testen** – Testen Sie Wörterbücher auf fehlende Übersetzungen.
|
|
80
48
|
|
|
81
|
-
|
|
82
|
-
```
|
|
49
|
+

|
|
83
50
|
|
|
84
|
-
|
|
51
|
+
- **Halten Sie Ihre Wörterbücher aktuell** – Halten Sie Ihre Wörterbücher mit den neuesten Inhalten aus Ihrem Projekt auf dem neuesten Stand.
|
|
85
52
|
|
|
86
|
-
-
|
|
87
|
-
- **ES Modul (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
90
|
-
|
|
91
|
-
### Intlayer-Tab (Aktivitätsleiste)
|
|
53
|
+

|
|
92
54
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **Suche**: Eine Live-Suchleiste, um Wörterbücher und deren Inhalte schnell zu filtern. Das Tippen aktualisiert die Ergebnisse sofort.
|
|
96
|
-
- **Wörterbücher**: Eine Baumansicht Ihrer Umgebungen/Projekte, Wörterbuchschlüssel und der Dateien, die Einträge beitragen. Sie können:
|
|
97
|
-
- Auf eine Datei klicken, um sie im Editor zu öffnen.
|
|
98
|
-
- Die Symbolleiste verwenden, um Aktionen auszuführen: Build, Pull, Push, Fill, Refresh, Test und Create Dictionary File.
|
|
99
|
-
- Das Kontextmenü für spezifische Aktionen verwenden:
|
|
100
|
-
- Auf einem Wörterbuch: Pull oder Push
|
|
101
|
-
- Auf einer Datei: Wörterbuch füllen
|
|
102
|
-
- Beim Wechseln der Editoren zeigt der Baum die passende Datei an, wenn sie zu einem Wörterbuch gehört.
|
|
103
|
-
|
|
104
|
-
## Installation
|
|
105
|
-
|
|
106
|
-
Sie können **Intlayer** direkt aus dem VS Code Marketplace installieren:
|
|
107
|
-
|
|
108
|
-
1. Öffnen Sie **VS Code**.
|
|
109
|
-
2. Gehen Sie zum **Extensions Marketplace**.
|
|
110
|
-
3. Suchen Sie nach **"Intlayer"**.
|
|
111
|
-
4. Klicken Sie auf **Installieren**.
|
|
55
|
+
- **Intlayer-Tab (Aktivitätsleiste)** – Durchsuchen und durchsuchen Sie Wörterbücher über einen dedizierten Seiten-Tab mit Symbolleiste und Kontextaktionen (Build, Pull, Push, Fill, Refresh, Test, Create File).
|
|
112
56
|
|
|
113
57
|
## Verwendung
|
|
114
58
|
|
|
@@ -121,63 +65,58 @@ Sie können **Intlayer** direkt aus dem VS Code Marketplace installieren:
|
|
|
121
65
|
const content = useIntlayer("app");
|
|
122
66
|
```
|
|
123
67
|
|
|
124
|
-
3. **
|
|
68
|
+
3. **Befehl-Klick** (`⌘+Klick` auf macOS) oder **Strg-Klick** (auf Windows/Linux) auf den Schlüssel (z. B. `"app"`).
|
|
125
69
|
4. VS Code öffnet automatisch die entsprechende Wörterbuchdatei, z. B. `src/app.content.ts`.
|
|
126
70
|
|
|
127
|
-
### Verwaltung von Inhaltswörterbüchern
|
|
128
|
-
|
|
129
71
|
### Intlayer-Tab (Aktivitätsleiste)
|
|
130
72
|
|
|
131
|
-
Verwenden Sie den
|
|
73
|
+
Verwenden Sie den Seiten-Tab, um Wörterbücher zu durchsuchen und zu verwalten:
|
|
132
74
|
|
|
133
75
|
- Öffnen Sie das Intlayer-Symbol in der Aktivitätsleiste.
|
|
134
76
|
- Geben Sie in **Suche** ein, um Wörterbücher und Einträge in Echtzeit zu filtern.
|
|
135
|
-
- Durchsuchen Sie in **Wörterbücher** Umgebungen, Wörterbücher und Dateien. Verwenden Sie die Symbolleiste für Erstellen, Abrufen,
|
|
77
|
+
- Durchsuchen Sie in **Wörterbücher** Umgebungen, Wörterbücher und Dateien. Verwenden Sie die Symbolleiste für Erstellen, Abrufen, Senden, Füllen, Aktualisieren, Testen und Wörterbuchdatei erstellen. Rechtsklick für Kontextaktionen (Abrufen/Senden bei Wörterbüchern, Füllen bei Dateien). Die aktuelle Editor-Datei wird bei Bedarf automatisch im Baum angezeigt.
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### Zugriff auf die Befehle
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
Sie können auf die Befehle über die **Befehlspalette** zugreifen.
|
|
140
82
|
|
|
141
83
|
```sh
|
|
142
84
|
Cmd + Shift + P (macOS) / Ctrl + Shift + P (Windows/Linux)
|
|
143
85
|
```
|
|
144
86
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
1. Öffnen Sie die **Befehls-Palette**.
|
|
152
|
-
2. Suchen Sie nach **Wörterbücher hochladen**.
|
|
153
|
-
3. Wählen Sie die hochzuladenden Wörterbücher aus und bestätigen Sie.
|
|
154
|
-
|
|
155
|
-
#### Wörterbücher abrufen
|
|
87
|
+
- **Wörterbücher erstellen**
|
|
88
|
+
- **Wörterbücher hochladen**
|
|
89
|
+
- **Wörterbücher herunterladen**
|
|
90
|
+
- **Wörterbücher füllen**
|
|
91
|
+
- **Wörterbücher testen**
|
|
92
|
+
- **Wörterbuchdatei erstellen**
|
|
156
93
|
|
|
157
|
-
|
|
94
|
+
### Laden von Umgebungsvariablen
|
|
158
95
|
|
|
159
|
-
|
|
160
|
-
2. Suchen Sie nach **Wörterbücher abrufen**.
|
|
161
|
-
3. Wählen Sie die Wörterbücher aus, die abgerufen werden sollen.
|
|
96
|
+
Intlayer empfiehlt, Ihre AI-API-Schlüssel sowie die Intlayer-Client-ID und das Secret in Umgebungsvariablen zu speichern.
|
|
162
97
|
|
|
163
|
-
|
|
98
|
+
Die Erweiterung kann Umgebungsvariablen aus Ihrem Arbeitsbereich laden, um Intlayer-Befehle im richtigen Kontext auszuführen.
|
|
164
99
|
|
|
165
|
-
|
|
100
|
+
- **Ladereihenfolge (nach Priorität)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **Nicht destruktiv**: vorhandene `process.env`-Werte werden nicht überschrieben.
|
|
102
|
+
- **Geltungsbereich**: Dateien werden vom konfigurierten Basisverzeichnis aus aufgelöst (standardmäßig das Stammverzeichnis des Arbeitsbereichs).
|
|
166
103
|
|
|
167
|
-
|
|
168
|
-
2. Suchen Sie nach **Wörterbücher füllen**.
|
|
169
|
-
3. Führen Sie den Befehl aus, um die Wörterbücher zu befüllen.
|
|
104
|
+
#### Auswahl der aktiven Umgebung
|
|
170
105
|
|
|
171
|
-
|
|
106
|
+
- **Befehls-Palette**: Öffnen Sie die Palette und führen Sie `Intlayer: Select Environment` aus, wählen Sie dann die Umgebung aus (z. B. `development`, `staging`, `production`). Die Erweiterung versucht, die erste verfügbare Datei in der oben genannten Prioritätsliste zu laden und zeigt eine Benachrichtigung wie „Env geladen von .env.<env>.local“ an.
|
|
107
|
+
- **Einstellungen**: Gehen Sie zu `Einstellungen → Erweiterungen → Intlayer` und setzen Sie:
|
|
108
|
+
- **Umgebung**: der Umgebungsname, der zur Auflösung von `.env.<env>*` Dateien verwendet wird.
|
|
109
|
+
- (Optional) **Env-Datei**: ein expliziter Pfad zu einer `.env`-Datei. Wenn angegeben, hat dieser Vorrang vor der ermittelten Liste.
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
#### Monorepos und benutzerdefinierte Verzeichnisse
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
2. Suchen Sie nach **Wörterbücher testen**.
|
|
177
|
-
3. Überprüfen Sie die gemeldeten Probleme und beheben Sie diese bei Bedarf.
|
|
113
|
+
Wenn sich Ihre `.env`-Dateien außerhalb des Arbeitsbereichs-Stammverzeichnisses befinden, legen Sie das **Basisverzeichnis** unter `Einstellungen → Erweiterungen → Intlayer` fest. Der Loader sucht dann nach `.env`-Dateien relativ zu diesem Verzeichnis.
|
|
178
114
|
|
|
179
|
-
##
|
|
115
|
+
## Dokumentationshistorie
|
|
180
116
|
|
|
181
|
-
| Version | Datum | Änderungen
|
|
182
|
-
| ------- | ---------- |
|
|
183
|
-
|
|
|
117
|
+
| Version | Datum | Änderungen |
|
|
118
|
+
| ------- | ---------- | --------------------------------------------- |
|
|
119
|
+
| 6.1.5 | 2025-09-30 | Demo-GIF hinzugefügt |
|
|
120
|
+
| 6.1.0 | 2025-09-24 | Abschnitt zur Umgebungs-Auswahl hinzugefügt |
|
|
121
|
+
| 6.0.0 | 2025-09-22 | Intlayer-Tab / Befehle zum Ausfüllen & Testen |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | Historie initialisiert |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Make a component multilingual (i18n library) in React and Next.js
|
|
5
|
+
description: Learn how to declare and retrieve localized content to build a multilingual React or Next.js component with Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- component
|
|
9
|
+
- react
|
|
10
|
+
- multilingual
|
|
11
|
+
- next.js
|
|
12
|
+
- intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- component
|
|
16
|
+
- i18n
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# How to make a component multilingual (i18n) with Intlayer
|
|
22
|
+
|
|
23
|
+
This guide shows the minimal steps to make a UI component multilingual in two common setups:
|
|
24
|
+
|
|
25
|
+
- React (Vite/SPA)
|
|
26
|
+
- Next.js (App Router)
|
|
27
|
+
|
|
28
|
+
You will first declare your content, then retrieve it in your component.
|
|
29
|
+
|
|
30
|
+
## 1) Declare your content (shared for React and Next.js)
|
|
31
|
+
|
|
32
|
+
Create a content declaration file near your component. This keeps translations close to where they are used and enables type safety.
|
|
33
|
+
|
|
34
|
+
```ts fileName="component.content.ts"
|
|
35
|
+
import { t, type Dictionary } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const componentContent = {
|
|
38
|
+
key: "component-example",
|
|
39
|
+
content: {
|
|
40
|
+
title: t({
|
|
41
|
+
en: "Hello",
|
|
42
|
+
fr: "Bonjour",
|
|
43
|
+
es: "Hola",
|
|
44
|
+
}),
|
|
45
|
+
description: t({
|
|
46
|
+
en: "A multilingual React component",
|
|
47
|
+
fr: "Un composant React multilingue",
|
|
48
|
+
es: "Un componente React multilingüe",
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
} satisfies Dictionary;
|
|
52
|
+
|
|
53
|
+
export default componentContent;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
JSON is also supported if you prefer configuration files.
|
|
57
|
+
|
|
58
|
+
```json fileName="component.content.json"
|
|
59
|
+
{
|
|
60
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
61
|
+
"key": "component-example",
|
|
62
|
+
"content": {
|
|
63
|
+
"title": {
|
|
64
|
+
"nodeType": "translation",
|
|
65
|
+
"translation": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }
|
|
66
|
+
},
|
|
67
|
+
"description": {
|
|
68
|
+
"nodeType": "translation",
|
|
69
|
+
"translation": {
|
|
70
|
+
"en": "A multilingual React component",
|
|
71
|
+
"fr": "Un composant React multilingue",
|
|
72
|
+
"es": "Un componente React multilingüe"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 2) Retrieve your content
|
|
80
|
+
|
|
81
|
+
### Case A — React app (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
Default approach: use `useIntlayer` to retrieve by key. This keeps components lean and typed.
|
|
84
|
+
|
|
85
|
+
```tsx fileName="ComponentExample.tsx"
|
|
86
|
+
import { useIntlayer } from "react-intlayer";
|
|
87
|
+
|
|
88
|
+
export function ComponentExample() {
|
|
89
|
+
const content = useIntlayer("component-example");
|
|
90
|
+
return (
|
|
91
|
+
<div>
|
|
92
|
+
<h1>{content.title}</h1>
|
|
93
|
+
<p>{content.description}</p>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Server-side rendering or outside provider: use `react-intlayer/server` and pass an explicit `locale` when needed.
|
|
100
|
+
|
|
101
|
+
```tsx fileName="ServerRenderedExample.tsx"
|
|
102
|
+
import { useIntlayer } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
export function ServerRenderedExample({ locale }: { locale: string }) {
|
|
105
|
+
const content = useIntlayer("component-example", locale);
|
|
106
|
+
return (
|
|
107
|
+
<>
|
|
108
|
+
<h1>{content.title}</h1>
|
|
109
|
+
<p>{content.description}</p>
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Alternative: `useDictionary` can read a whole declared object if you prefer collocating structure at call site.
|
|
116
|
+
|
|
117
|
+
```tsx fileName="ComponentWithDictionary.tsx"
|
|
118
|
+
import { useDictionary } from "react-intlayer";
|
|
119
|
+
import componentContent from "./component.content";
|
|
120
|
+
|
|
121
|
+
export function ComponentWithDictionary() {
|
|
122
|
+
const { title, description } = useDictionary(componentContent);
|
|
123
|
+
return (
|
|
124
|
+
<div>
|
|
125
|
+
<h1>{title}</h1>
|
|
126
|
+
<p>{description}</p>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Case B — Next.js (App Router)
|
|
133
|
+
|
|
134
|
+
Prefer server components for data safety and performance. Use `useIntlayer` from `next-intlayer/server` in server files, and `useIntlayer` from `next-intlayer` in client components.
|
|
135
|
+
|
|
136
|
+
```tsx fileName="app/[locale]/example/ServerComponent.tsx"
|
|
137
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
138
|
+
|
|
139
|
+
export default function ServerComponent() {
|
|
140
|
+
const content = useIntlayer("component-example");
|
|
141
|
+
return (
|
|
142
|
+
<>
|
|
143
|
+
<h1>{content.title}</h1>
|
|
144
|
+
<p>{content.description}</p>
|
|
145
|
+
</>
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```tsx fileName="app/[locale]/example/ClientComponent.tsx"
|
|
151
|
+
"use client";
|
|
152
|
+
|
|
153
|
+
import { useIntlayer } from "next-intlayer";
|
|
154
|
+
|
|
155
|
+
export function ClientComponent() {
|
|
156
|
+
const content = useIntlayer("component-example");
|
|
157
|
+
return (
|
|
158
|
+
<div>
|
|
159
|
+
<h1>{content.title}</h1>
|
|
160
|
+
<p>{content.description}</p>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Tip: For page metadata and SEO, you can also fetch content using `getIntlayer` and generate multilingual URLs via `getMultilingualUrls`.
|
|
167
|
+
|
|
168
|
+
## Why Intlayer’s component approach is best
|
|
169
|
+
|
|
170
|
+
- **Collocation**: Content declarations live near components, reducing drift and improving reuse across design systems.
|
|
171
|
+
- **Type safety**: Keys and structures are strongly typed; missing translations surface at build-time rather than at runtime.
|
|
172
|
+
- **Server-first**: Works natively in server components for better security and performance; client hooks remain ergonomic.
|
|
173
|
+
- **Tree-shaking**: Only content used by the component is bundled, keeping payloads small in large apps.
|
|
174
|
+
- **DX & tooling**: Built-in middleware, SEO helpers, and optional Visual Editor/AI translations streamline everyday work.
|
|
175
|
+
|
|
176
|
+
See the comparisons and patterns in the Next.js-focused roundup: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## Related guides and references
|
|
179
|
+
|
|
180
|
+
- React setup (Vite): https://intlayer.org/doc/environment/vite-and-react
|
|
181
|
+
- React Router v7: https://intlayer.org/doc/environment/vite-and-react/react-router-v7
|
|
182
|
+
- TanStack Start: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Next.js setup: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Why Intlayer vs. next-intl vs. next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
These pages include end-to-end setup, providers, routing, and SEO helpers.
|
|
@@ -219,7 +219,7 @@ This approach allows you to:
|
|
|
219
219
|
## Additional features of Intlayer
|
|
220
220
|
|
|
221
221
|
| Feature | Description |
|
|
222
|
-
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
222
|
+
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
223
223
|
|  | **Cross-Frameworks Support**<br><br>Intlayer is compatible with all major frameworks and libraries, including Next.js, React, Vite, Vue.js, Nuxt, Preact, Express, and more. |
|
|
224
224
|
|  | **JavaScript-Powered Content Management**<br><br>Harness the flexibility of JavaScript to define and manage your content efficiently. <br><br> - [Content declaration](https://intlayer.org/doc/concept/content) |
|
|
225
225
|
|  | **Per-Locale Content Declaration File**<br><br>Speed up your development by declaring your content once, before auto generation.<br><br> - [Per-Locale Content Declaration File](https://intlayer.org/doc/concept/per-locale-file) |
|
|
@@ -237,7 +237,7 @@ This approach allows you to:
|
|
|
237
237
|
|  | **MCP Server Integration**<br><br>Provides an MCP (Model Context Protocol) server for IDE automation, enabling seamless content management and i18n workflows directly within your development environment. <br><br> - [MCP Server](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/mcp_server.md) |
|
|
238
238
|
|  | **VSCode Extension**<br><br>Intlayer provides a VSCode extension to help you manage your content and translations, building your dictionaries, translating your content, and more. <br><br> - [VSCode Extension](https://intlayer.org/doc/vs-code-extension) |
|
|
239
239
|
|  | **Interoperability**<br><br>Allows interoperability with react-i18next, next-i18next, next-intl, and react-intl. <br><br> - [Intlayer and react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer and next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer and next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
|
|
240
|
-
| Testing Missing Translations (CLI/CI) | ✅ CLI: npx intlayer content test (CI-friendly audit) |
|
|
240
|
+
| Testing Missing Translations (CLI/CI) | ✅ CLI: npx intlayer content test (CI-friendly audit) |
|
|
241
241
|
|
|
242
242
|
## Comparison of Intlayer with other solutions
|
|
243
243
|
|
|
@@ -1398,7 +1398,23 @@ Link.displayName = 'Link';
|
|
|
1398
1398
|
|
|
1399
1399
|
By integrating this `Link` component across your application, you maintain a coherent and language-aware user experience while also benefitting from improved SEO and usability.
|
|
1400
1400
|
|
|
1401
|
-
### (Optional) Step 12:
|
|
1401
|
+
### (Optional) Step 12: Get the current locale in Server Actions
|
|
1402
|
+
|
|
1403
|
+
If you need the active locale inside a Server Action (e.g., to localize emails or run locale-aware logic), call `getLocale` from `next-intlayer/server`:
|
|
1404
|
+
|
|
1405
|
+
```tsx fileName="src/app/actions/getLocale.ts" codeFormat="typescript"
|
|
1406
|
+
"use server";
|
|
1407
|
+
|
|
1408
|
+
import { getLocale } from "next-intlayer/server";
|
|
1409
|
+
|
|
1410
|
+
export const myServerAction = async () => {
|
|
1411
|
+
const locale = await getLocale();
|
|
1412
|
+
|
|
1413
|
+
// Do something with the locale
|
|
1414
|
+
};
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
### (Optional) Step 13: Optmize your bundle size
|
|
1402
1418
|
|
|
1403
1419
|
When using `next-intlayer`, dictionaries are included in the bundle for every page by default. To optimize bundle size, Intlayer provides an optional SWC plugin that intelligently replace `useIntlayer` calls using macros. This ensures dictionaries are only included in bundles for pages that actually use them.
|
|
1404
1420
|
|
|
@@ -1474,6 +1490,7 @@ To go further, you can implement the [visual editor](https://github.com/aymericz
|
|
|
1474
1490
|
|
|
1475
1491
|
| Version | Date | Changes |
|
|
1476
1492
|
| ------- | ---------- | --------------------------------------------------------------- |
|
|
1493
|
+
| 5.6.6 | 2025-10-02 | Added docs for `getLocale` function on server actions |
|
|
1477
1494
|
| 5.6.2 | 2025-09-22 | Added docs for `multipleMiddlewares` helper |
|
|
1478
1495
|
| 5.6.0 | 2025-07-06 | Transform `withIntlayer()` function to a promise based function |
|
|
1479
1496
|
| 5.5.10 | 2025-06-29 | Init history |
|
|
@@ -1445,7 +1445,23 @@ const Link = ({ href, children, ...props }) => {
|
|
|
1445
1445
|
|
|
1446
1446
|
By integrating this `Link` component across your application, you maintain a coherent and language-aware user experience while also benefitting from improved SEO and usability.
|
|
1447
1447
|
|
|
1448
|
-
### (Optional) Step 12:
|
|
1448
|
+
### (Optional) Step 12: Get the current locale in Server Actions
|
|
1449
|
+
|
|
1450
|
+
If you need the active locale inside a Server Action (e.g., to localize emails or run locale-aware logic), call `getLocale` from `next-intlayer/server`:
|
|
1451
|
+
|
|
1452
|
+
```tsx fileName="src/app/actions/getLocale.ts" codeFormat="typescript"
|
|
1453
|
+
"use server";
|
|
1454
|
+
|
|
1455
|
+
import { getLocale } from "next-intlayer/server";
|
|
1456
|
+
|
|
1457
|
+
export const myServerAction = async () => {
|
|
1458
|
+
const locale = await getLocale();
|
|
1459
|
+
|
|
1460
|
+
// Do something with the locale
|
|
1461
|
+
};
|
|
1462
|
+
```
|
|
1463
|
+
|
|
1464
|
+
### (Optional) Step 13: Optmize your bundle size
|
|
1449
1465
|
|
|
1450
1466
|
When using `next-intlayer`, dictionaries are included in the bundle for every page by default. To optimize bundle size, Intlayer provides an optional SWC plugin that intelligently replace `useIntlayer` calls using macros. This ensures dictionaries are only included in bundles for pages that actually use them.
|
|
1451
1467
|
|
|
@@ -1537,6 +1553,7 @@ To go further, you can implement the [visual editor](https://github.com/aymericz
|
|
|
1537
1553
|
|
|
1538
1554
|
| Version | Date | Changes |
|
|
1539
1555
|
| ------- | ---------- | --------------------------------------------------------------- |
|
|
1556
|
+
| 5.6.6 | 2025-10-02 | Added docs for `getLocale` function on server actions |
|
|
1540
1557
|
| 5.6.2 | 2025-09-23 | Added docs for watch dictionaries changes on Turbopack |
|
|
1541
1558
|
| 5.6.2 | 2025-09-22 | Added docs for `multipleMiddlewares` helper |
|
|
1542
1559
|
| 5.6.0 | 2025-07-06 | Transform `withIntlayer()` function to a promise based function |
|