@intlayer/docs 8.12.2 → 8.12.4-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.
Files changed (73) hide show
  1. package/dist/cjs/blog.cjs.map +1 -1
  2. package/dist/cjs/common.cjs.map +1 -1
  3. package/dist/cjs/doc.cjs.map +1 -1
  4. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  5. package/dist/cjs/generated/blog.entry.cjs +1 -0
  6. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  7. package/dist/cjs/generated/docs.entry.cjs +1 -0
  8. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  9. package/dist/cjs/generated/frequentQuestions.entry.cjs +1 -0
  10. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  11. package/dist/cjs/generated/legal.entry.cjs +1 -0
  12. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  13. package/dist/cjs/legal.cjs.map +1 -1
  14. package/dist/esm/blog.mjs.map +1 -1
  15. package/dist/esm/common.mjs.map +1 -1
  16. package/dist/esm/doc.mjs.map +1 -1
  17. package/dist/esm/frequentQuestions.mjs.map +1 -1
  18. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  19. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  20. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  21. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  22. package/dist/esm/legal.mjs.map +1 -1
  23. package/dist/types/blog.d.ts.map +1 -1
  24. package/dist/types/common.d.ts.map +1 -1
  25. package/dist/types/doc.d.ts.map +1 -1
  26. package/dist/types/frequentQuestions.d.ts.map +1 -1
  27. package/dist/types/legal.d.ts.map +1 -1
  28. package/docs/ar/bundle_optimization.md +250 -102
  29. package/docs/ar/configuration.md +10 -10
  30. package/docs/bn/bundle_optimization.md +252 -104
  31. package/docs/bn/configuration.md +10 -10
  32. package/docs/cs/bundle_optimization.md +253 -105
  33. package/docs/cs/configuration.md +10 -10
  34. package/docs/de/bundle_optimization.md +245 -97
  35. package/docs/de/configuration.md +10 -10
  36. package/docs/en/bundle_optimization.md +172 -49
  37. package/docs/en/configuration.md +10 -10
  38. package/docs/en-GB/bundle_optimization.md +230 -82
  39. package/docs/en-GB/configuration.md +10 -10
  40. package/docs/es/bundle_optimization.md +250 -102
  41. package/docs/es/configuration.md +10 -10
  42. package/docs/fr/bundle_optimization.md +223 -75
  43. package/docs/fr/configuration.md +10 -10
  44. package/docs/hi/bundle_optimization.md +253 -105
  45. package/docs/hi/configuration.md +10 -10
  46. package/docs/id/bundle_optimization.md +258 -110
  47. package/docs/id/configuration.md +10 -10
  48. package/docs/it/bundle_optimization.md +249 -103
  49. package/docs/it/configuration.md +10 -10
  50. package/docs/ja/bundle_optimization.md +245 -97
  51. package/docs/ja/configuration.md +10 -10
  52. package/docs/ko/bundle_optimization.md +253 -105
  53. package/docs/ko/configuration.md +10 -10
  54. package/docs/nl/bundle_optimization.md +249 -101
  55. package/docs/nl/configuration.md +10 -10
  56. package/docs/pl/bundle_optimization.md +258 -111
  57. package/docs/pl/configuration.md +10 -10
  58. package/docs/pt/bundle_optimization.md +256 -115
  59. package/docs/pt/configuration.md +10 -10
  60. package/docs/ru/bundle_optimization.md +253 -105
  61. package/docs/ru/configuration.md +10 -10
  62. package/docs/tr/bundle_optimization.md +255 -107
  63. package/docs/tr/configuration.md +10 -10
  64. package/docs/uk/bundle_optimization.md +250 -102
  65. package/docs/uk/configuration.md +10 -10
  66. package/docs/ur/bundle_optimization.md +257 -109
  67. package/docs/ur/configuration.md +10 -10
  68. package/docs/vi/bundle_optimization.md +259 -111
  69. package/docs/vi/configuration.md +10 -10
  70. package/docs/zh/bundle_optimization.md +260 -112
  71. package/docs/zh/configuration.md +10 -10
  72. package/docs/zh-TW/bundle_optimization.md +602 -0
  73. package/package.json +8 -8
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-04-08
4
- title: Optimalisatie van i18n-bundelgrootte en prestaties
5
- description: Verminder de bundelgrootte van uw applicatie door internationaliseringsinhoud (i18n) te optimaliseren. Leer hoe u tree shaking en lazy loading kunt inzetten voor woordenboeken met Intlayer.
3
+ updatedAt: 2026-06-07
4
+ title: i18n Bundelgrootte & Prestatie-optimalisatie
5
+ description: Verklein de bundelgrootte van uw applicatie door internationalisatie (i18n) content te optimaliseren. Leer hoe u tree shaking en lazy loading kunt inzetten voor woordenboeken met Intlayer.
6
6
  keywords:
7
- - Bundeloptimalisatie
8
- - Inhoudsautomatisering
9
- - Dynamische inhoud
7
+ - Bundel optimalisatie
8
+ - Content automatisering
9
+ - Dynamische content
10
10
  - Intlayer
11
11
  - Next.js
12
12
  - JavaScript
@@ -16,26 +16,29 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 8.12.0
20
+ date: 2026-06-07
21
+ changes: "Toevoeging van `intlayerPurgeBabelPlugin` en `intlayerMinifyBabelPlugin` voor Babel/Webpack; verduidelijking van de plugin-pipeline"
19
22
  - version: 8.7.0
20
23
  date: 2026-04-08
21
- changes: "Opties `minify` en `purge` toegevoegd aan de build-configuratie"
24
+ changes: "Toevoeging van de `minify` en `purge` opties aan de buildconfiguratie"
22
25
  ---
23
26
 
24
- # Optimalisatie van i18n-bundelgrootte en prestaties
27
+ # i18n Bundelgrootte & Prestatie-optimalisatie
25
28
 
26
- Een van de meest voorkomende uitdagingen bij traditionele i18n-oplossingen die afhankelijk zijn van JSON-bestanden, is het beheren van de omvang van de inhoud. Als ontwikkelaars de inhoud niet handmatig scheiden in namespaces, downloaden gebruikers vaak vertalingen voor elke pagina en mogelijk elke taal, alleen maar om een enkele pagina te bekijken.
29
+ Een van de meest voorkomende uitdagingen bij traditionele i18n-oplossingen die op JSON-bestanden vertrouwen, is het beheren van de contentgrootte. Als ontwikkelaars de content niet handmatig scheiden in namespaces, downloaden gebruikers vaak vertalingen voor elke pagina en mogelijk voor elke taal, alleen maar om één enkele pagina te bekijken.
27
30
 
28
- Bijvoorbeeld, een applicatie met 10 pagina's vertaald in 10 talen kan ertoe leiden dat een gebruiker de inhoud van 100 pagina's downloadt, ook al hebben ze er maar **één** nodig (de huidige pagina in de huidige taal). Dit leidt tot verspilling van bandbreedte en langzamere laadtijden.
31
+ Bijvoorbeeld, een applicatie met 10 pagina's die in 10 talen zijn vertaald, kan ertoe leiden dat een gebruiker de content van 100 pagina's downloadt, terwijl ze er maar **één** nodig hebben (de huidige pagina in de huidige taal). Dit leidt tot verspilde bandbreedte en tragere laadtijden.
29
32
 
30
- **Intlayer lost dit probleem op via optimalisatie tijdens de build.** Het analyseert uw code om te detecteren welke woordenboeken daadwerkelijk per component worden gebruikt en injecteert alleen de noodzakelijke inhoud opnieuw in uw bundel.
33
+ **Intlayer lost dit probleem op door build-time optimalisatie.** Het analyseert uw code om te detecteren welke woordenboeken daadwerkelijk per component worden gebruikt en voegt alleen de benodigde content weer in uw bundel in.
31
34
 
32
35
  ## Inhoudsopgave
33
36
 
34
37
  <TOC />
35
38
 
36
- ## Scan uw bundel
39
+ ## Analyseer uw bundel
37
40
 
38
- Het analyseren van uw bundel is de eerste stap bij het identificeren van "zware" JSON-bestanden en mogelijkheden voor code-splitting. Deze tools genereren een visuele treemap van de gecompileerde code van uw applicatie, zodat u precies kunt zien welke bibliotheken de meeste ruimte in beslag nemen.
41
+ Het analyseren van uw bundel is de eerste stap bij het identificeren van "zware" JSON-bestanden en mogelijkheden voor code-splitting. Deze tools genereren een visuele treemap van de gecompileerde code van uw applicatie, zodat u precies kunt zien welke bibliotheken de meeste ruimte innemen.
39
42
 
40
43
  <Tabs>
41
44
  <Tab value="vite">
@@ -55,7 +58,7 @@ import { visualizer } from "rollup-plugin-visualizer";
55
58
  export default defineConfig({
56
59
  plugins: [
57
60
  visualizer({
58
- open: true, // Open het rapport automatisch in je browser
61
+ open: true, // Open het rapport automatisch in uw browser
59
62
  filename: "stats.html",
60
63
  gzipSize: true,
61
64
  brotliSize: true,
@@ -92,7 +95,7 @@ bun next experimental-analyze
92
95
 
93
96
  ### Next.js (Webpack)
94
97
 
95
- Als u de standaard Webpack-bundler in Next.js gebruikt, gebruik dan de officiële bundel-analyzer. Activeer deze door een omgevingsvariabele in te stellen tijdens uw build.
98
+ Als u de standaard Webpack-bundler in Next.js gebruikt, gebruik dan de officiële bundle analyzer. Activeer deze door een omgevingsvariabele in te stellen tijdens uw build.
96
99
 
97
100
  ```bash packageManager='npm'
98
101
  npm install -D @next/bundle-analyzer
@@ -131,7 +134,7 @@ ANALYZE=true npm run build
131
134
 
132
135
  ### Standaard Webpack
133
136
 
134
- Voor Create React App (ejected), Angular of aangepaste Webpack-setups, gebruikt u de industriestandaard `webpack-bundle-analyzer`.
137
+ Voor Create React App (ejected), Angular, of aangepaste Webpack setups, gebruik de industriestandaard `webpack-bundle-analyzer`.
135
138
 
136
139
  ```bash packageManager='npm'
137
140
  npm install -D webpack-bundle-analyzer
@@ -149,7 +152,7 @@ pnpm add -D webpack-bundle-analyzer
149
152
  bun add -d webpack-bundle-analyzer
150
153
  ```
151
154
 
152
- ```typescript fileName="webpack.config.ts
155
+ ```typescript fileName="webpack.config.ts"
153
156
  import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
154
157
 
155
158
  export default {
@@ -168,27 +171,64 @@ export default {
168
171
 
169
172
  ## Hoe het werkt
170
173
 
171
- Intlayer gebruikt een **per-component aanpak**. In tegenstelling tot globale JSON-bestanden, wordt uw inhoud gedefinieerd naast of binnen uw componenten. Tijdens het build-proces zal Intlayer:
174
+ Intlayer gebruikt een **per-component benadering**. In tegenstelling tot globale JSON-bestanden wordt uw content gedefinieerd naast of binnen uw componenten. Tijdens het build-proces zal Intlayer:
172
175
 
173
- 1. Uw code **analyseren** om `useIntlayer`-aanroepen te vinden.
174
- 2. De bijbehorende woordenboekinhoud **bouwen**.
175
- 3. De `useIntlayer`-aanroep **vervangen** door geoptimaliseerde code op basis van uw configuratie.
176
+ 1. Uw code **analyseren** om `useIntlayer`-aanroepen te vinden.
177
+ 2. De corresponderende woordenboekcontent **bouwen**.
178
+ 3. De `useIntlayer`-aanroep **vervangen** door geoptimaliseerde code op basis van uw configuratie.
176
179
 
177
180
  Dit zorgt ervoor dat:
178
181
 
179
- - Als een component niet wordt geïmporteerd, de inhoud ervan niet in de bundel wordt opgenomen (Dead Code Elimination).
180
- - Als een component lazy-loaded is, de inhoud ervan ook lazy-loaded is.
182
+ - Als een component niet is geïmporteerd, de content ervan niet in de bundel wordt opgenomen (Dead Code Elimination).
183
+ - Als een component lazy-loaded is, de content ervan ook lazy-loaded is.
181
184
 
182
- ## Installatie per platform
185
+ ## Plugin Referentie
186
+
187
+ De build-optimalisatie van Intlayer is opgesplitst in verschillende discrete plugins, elk met één enkele verantwoordelijkheid. Begrijpen wat elke plugin doet voorkomt verwarring bij het instellen.
188
+
189
+ ### Babel plugins (`@intlayer/babel`)
190
+
191
+ Deze worden direct in `babel.config.js` gebruikt voor Webpack-gebaseerde setups (Next.js met Babel, CRA, aangepaste Webpack, enz.).
192
+
193
+ | Plugin | Wat het doet |
194
+ | :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- |
195
+ | `intlayerExtractBabelPlugin` | Scant `.content.ts`-bestanden en schrijft gecompileerde woordenboeken naar `.intlayer/` |
196
+ | `intlayerOptimizeBabelPlugin` | Herschrijft `useIntlayer('key')` → `useDictionary(hash)` en voegt de bijpassende woordenboek `import` in |
197
+ | `intlayerPurgeBabelPlugin` | Scant alle bronbestanden en verwijdert **ongebruikte contentvelden** uit de gecompileerde `.intlayer/**/*.json`-woordenboekbestanden |
198
+ | `intlayerMinifyBabelPlugin` | **Hernoemt contentveld-sleutels** naar korte alfabetische aliassen (`title` → `a`) in zowel JSON-bestanden als de broncode |
199
+
200
+ > **De volgorde van plugins is belangrijk.** In uw `babel.config.js` moeten de purge- en minify-plugins **vóór** de optimize-plugin staan. De optimize-stap vervangt `useIntlayer('key')` door een ondoorzichtige `useDictionary(hash)` aanroep, waardoor de woordenboeksleutelinformatie wordt gewist die de purge- en minify-stappen nodig hebben om te bepalen welke velden worden gebruikt.
201
+
202
+ Elke Babel-plugin heeft een bijpassende optie-helper die uw `intlayer.config.ts` één keer leest tijdens het laden van de configuratie en vooraf opgeloste waarden retourneert:
203
+
204
+ | Optie helper | Gebruikt met |
205
+ | :--------------------------- | :---------------------------- |
206
+ | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
207
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
208
+ | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
209
+ | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
210
+
211
+ ### Vite plugins (`vite-intlayer`)
212
+
213
+ Vite gebruikers **configureren deze nooit direct**. Ze worden automatisch gekoppeld wanneer u `withIntlayer()` aanroept in `vite.config.ts`. De `build.purge` en `build.minify` vlaggen in `intlayer.config.ts` schakelen het corresponderende gedrag in of uit zonder extra pluginregistratie.
214
+
215
+ | Interne Vite plugin | Equivalent gedrag |
216
+ | :------------------ | :---------------------------------------------------------------------------------------- |
217
+ | Usage analyzer | Zelfde als `intlayerPurgeBabelPlugin` analyse-stap |
218
+ | Dictionary prune | Zelfde als `intlayerPurgeBabelPlugin` JSON-schrijfstap |
219
+ | Dictionary minify | Zelfde als `intlayerMinifyBabelPlugin` JSON-schrijfstap |
220
+ | Babel transform | Zelfde als `intlayerMinifyBabelPlugin` broncode hernoemen + `intlayerOptimizeBabelPlugin` |
221
+
222
+ ## Setup per platform
183
223
 
184
224
  <Tabs>
185
225
  <Tab value="nextjs">
186
226
 
187
227
  ### Next.js
188
228
 
189
- Next.js vereist de `@intlayer/swc` plugin om de transformatie af te handelen, aangezien Next.js SWC gebruikt voor builds.
229
+ Next.js vereist de `@intlayer/swc` plugin voor de optimize-stap (import-herschrijving), omdat Next.js SWC gebruikt voor builds.
190
230
 
191
- > Deze plugin is niet standaard geïnstalleerd omdat SWC-plugins nog experimenteel zijn voor Next.js. Dit kan in de toekomst veranderen.
231
+ > Deze plugin is niet standaard geïnstalleerd omdat SWC plugins nog experimenteel zijn voor Next.js. Dit kan in de toekomst veranderen.
192
232
 
193
233
  ```bash packageManager="npm"
194
234
  npm install -D @intlayer/swc
@@ -206,21 +246,63 @@ pnpm add -D @intlayer/swc
206
246
  bun add -d @intlayer/swc
207
247
  ```
208
248
 
209
- Eenmaal geïnstalleerd, zal Intlayer de plugin automatisch detecteren en gebruiken.
249
+ Zodra geïnstalleerd, zal Intlayer de plugin automatisch detecteren en gebruiken.
250
+
251
+ Voor de **purge en minify** stappen (veldverwijdering en veldhernoeming), installeert u `@intlayer/babel` en voegt u de Babel-plugins toe. Omdat Next.js SWC gebruikt voor transformatie maar nog steeds `babel.config.js` evalueert voor pluginconfiguratie, draaien de Babel-plugins als een pre-stap voor SWC.
252
+
253
+ ```bash packageManager="npm"
254
+ npm install -D @intlayer/babel
255
+ ```
256
+
257
+ ```javascript fileName="babel.config.js"
258
+ const {
259
+ intlayerPurgeBabelPlugin,
260
+ intlayerMinifyBabelPlugin,
261
+ getPurgePluginOptions,
262
+ getMinifyPluginOptions,
263
+ } = require("@intlayer/babel");
264
+
265
+ module.exports = {
266
+ presets: ["next/babel"],
267
+ plugins: [
268
+ // Purge: verwijder ongebruikte contentvelden uit .intlayer/**/*.json
269
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
270
+ // Minify: hernoem contentveld-sleutels in JSON + broncode
271
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
272
+ // Let op: intlayerOptimizeBabelPlugin is hier NIET nodig omdat
273
+ // @intlayer/swc de useIntlayer → useDictionary herschrijving afhandelt.
274
+ ],
275
+ };
276
+ ```
210
277
 
211
278
  </Tab>
212
279
  <Tab value="vite">
213
280
 
214
281
  ### Vite
215
282
 
216
- Vite gebruikt de `@intlayer/babel` plugin die als afhankelijkheid van `vite-intlayer` is opgenomen. De optimalisatie is standaard ingeschakeld. Verder hoeft u niets te doen.
283
+ Vite gebruikt de `@intlayer/babel` plugin, die is opgenomen als een afhankelijkheid van `vite-intlayer`. De volledige optimalisatie-pipeline — import herschrijven, purgen en minificeren — is standaard ingeschakeld en vereist geen extra pluginregistratie.
284
+
285
+ Schakel purge en minify in door de corresponderende vlaggen in `intlayer.config.ts` in te stellen:
286
+
287
+ ```typescript fileName="intlayer.config.ts"
288
+ import type { IntlayerConfig } from "intlayer";
289
+
290
+ const config: IntlayerConfig = {
291
+ build: {
292
+ purge: true, // verwijder ongebruikte contentvelden uit gebundelde JSON
293
+ minify: true, // hernoem contentveld-sleutels naar korte aliassen
294
+ },
295
+ };
296
+
297
+ export default config;
298
+ ```
217
299
 
218
300
  </Tab>
219
301
  <Tab value="webpack">
220
302
 
221
- ### Webpack
303
+ ### Webpack (en Next.js met Babel)
222
304
 
223
- Om bundeloptimalisatie met Intlayer op Webpack in te schakelen, moet u de juiste Babel (`@intlayer/babel`) of SWC (`@intlayer/swc`) plugin installeren en configureren.
305
+ Installeer `@intlayer/babel`:
224
306
 
225
307
  ```bash packageManager="npm"
226
308
  npm install -D @intlayer/babel
@@ -238,14 +320,37 @@ pnpm add -D @intlayer/babel
238
320
  bun add -d @intlayer/babel
239
321
  ```
240
322
 
241
- ```typescript fileName="babel.config.js"
323
+ Voeg alle vier de plugins toe aan `babel.config.js` in de juiste volgorde:
324
+
325
+ ```javascript fileName="babel.config.js"
242
326
  const {
243
- getOptimizePluginOptions,
327
+ intlayerExtractBabelPlugin,
328
+ intlayerPurgeBabelPlugin,
329
+ intlayerMinifyBabelPlugin,
244
330
  intlayerOptimizeBabelPlugin,
331
+ getExtractPluginOptions,
332
+ getPurgePluginOptions,
333
+ getMinifyPluginOptions,
334
+ getOptimizePluginOptions,
245
335
  } = require("@intlayer/babel");
246
336
 
247
337
  module.exports = {
248
- plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],
338
+ plugins: [
339
+ // Extract: compileer .content.ts bestanden → .intlayer/**/*.json
340
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
341
+
342
+ // Purge: verwijder ongebruikte velden uit .intlayer/**/*.json
343
+ // (leest de intlayer.config.ts build.purge vlag)
344
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
345
+
346
+ // Minify: hernoem veldsleutels in JSON + broncode
347
+ // (leest de intlayer.config.ts build.minify vlag)
348
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
349
+
350
+ // Optimize: herschrijf useIntlayer('key') → useDictionary(hash)
351
+ // Moet als laatste komen omdat dit de woordenboeksleutel wist.
352
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
353
+ ],
249
354
  };
250
355
  ```
251
356
 
@@ -261,50 +366,55 @@ import { Locales, type IntlayerConfig } from "intlayer";
261
366
 
262
367
  const config: IntlayerConfig = {
263
368
  internationalization: {
264
- locales: [Locales.ENGLISH, Locales.FRENCH],
369
+ locales: [Locales.ENGLISH, Locales.DUTCH],
265
370
  defaultLocale: Locales.ENGLISH,
266
371
  },
267
372
  dictionary: {
268
373
  importMode: "dynamic",
269
374
  },
270
375
  build: {
271
- /**
272
- * Minificeer de woordenboeken om de bundelgrootte te verkleinen.
273
- */
274
- minify: true;
275
-
276
- /**
277
- * Verwijder ongebruikte sleutels in woordenboeken (purge)
278
- */
279
- purge: true;
280
-
281
- /**
282
- * Geeft aan of de build TypeScript-typen moet controleren
283
- */
284
- checkTypes: false;
376
+ // Vervang useIntlayer() aanroepen door directe woordenboek-imports tijdens build-time.
377
+ // undefined = automatisch (ingeschakeld in productie), true = altijd, false = nooit.
378
+ optimize: undefined,
379
+
380
+ // Hernoem contentveld-sleutels in gecompileerde woordenboeken naar korte
381
+ // alfabetische aliassen (bijv. title → a). Verkleint de JSON-grootte; vereist optimize.
382
+ minify: true,
383
+
384
+ // Verwijder contentvelden die nooit worden aangesproken in de broncode.
385
+ // Vereist optimize.
386
+ purge: true,
285
387
  },
286
388
  };
287
389
 
288
390
  export default config;
289
391
  ```
290
392
 
291
- > Het wordt in de meeste gevallen aanbevolen om de standaardoptie voor `optimize` te behouden.
393
+ > Het wordt in de meeste gevallen aanbevolen om de standaardwaarde (`undefined`) voor `optimize` te behouden.
292
394
 
293
- > Zie de configuratie-doc voor meer details: [Configuratie](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/configuration.md)
395
+ > Zie de configuratie-referentie voor alle opties: [Configuratie](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/configuration.md)
294
396
 
295
- ### Build-opties
397
+ ### Build Opties
296
398
 
297
- De volgende opties zijn beschikbaar onder het `build` configuratie-object:
399
+ | Eigenschap | Type | Standaardwaarde | Beschrijving |
400
+ | :------------- | :--------------------- | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
401
+ | **`optimize`** | `boolean \| undefined` | `undefined` | Schakelt de import-herschrijvingstap in. `undefined` = alleen actief in productiebuilds. `false` schakelt purge en minify ook uit. |
402
+ | **`minify`** | `boolean` | `false` | Hernoemt contentveld-sleutels in gecompileerde JSON-bestanden naar korte alfabetische aliassen. Herschrijft ook de bijbehorende eigendomsaanroepen in de broncode. Heeft geen effect wanneer `optimize` `false` is. |
403
+ | **`purge`** | `boolean` | `false` | Verwijdert contentvelden die in de broncode nooit statisch worden aangesproken uit gecompileerde JSON-bestanden. Heeft geen effect wanneer `optimize` `false` is. |
298
404
 
299
- | Eigenschap | Type | Standaard | Beschrijving |
300
- | :------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
301
- | **`optimize`** | `boolean` | `undefined` | Bepaalt of build-optimalisatie is ingeschakeld. Indien `true`, vervangt Intlayer woordenboekaanroepen door geoptimaliseerde injecties. Indien `false`, is optimalisatie uitgeschakeld. Ideaal ingesteld op `true` in prod. |
302
- | **`minify`** | `boolean` | `false` | Of de woordenboeken moeten worden geminificeerd om de bundelgrootte te verkleinen. |
303
- | **`purge`** | `boolean` | `false` | Of de ongebruikte sleutels in woordenboeken moeten worden verwijderd. |
405
+ ### Minificatie (veld-sleutel hernoemen)
304
406
 
305
- ### Minificatie
407
+ `build.minify` minificeert uw JavaScript bundel **niet** — uw bundler doet dat. In plaats daarvan verkleint het de gecompileerde woordenboek JSON-bestanden door elke door de gebruiker gedefinieerde contentveld-sleutel te vervangen door een korte alfabetische alias:
306
408
 
307
- Het minificeren van woordenboeken verwijdert onnodige witruimte, opmerkingen en vermindert de omvang van de JSON-inhoud. Dit is vooral handig voor grote woordenboeken.
409
+ ```
410
+ // Voor minificatie
411
+ { "title": "Hallo", "subtitle": "Wereld" }
412
+
413
+ // Na minificatie
414
+ { "a": "Hallo", "b": "Wereld" }
415
+ ```
416
+
417
+ Dezelfde hernoeming wordt toegepast op alle eigendomsaanroepen in uw broncode, dus `content.title` wordt `content.a` in de gecompileerde uitvoer. Het runtime gedrag is identiek.
308
418
 
309
419
  ```typescript fileName="intlayer.config.ts"
310
420
  import type { IntlayerConfig } from "intlayer";
@@ -318,11 +428,13 @@ const config: IntlayerConfig = {
318
428
  export default config;
319
429
  ```
320
430
 
321
- > Opmerking: Minificatie wordt genegeerd als `optimize` is uitgeschakeld of als de Visual Editor is ingeschakeld (omdat de editor de volledige inhoud nodig heeft om bewerkingen toe te staan).
431
+ > Minificatie wordt overgeslagen wanneer `optimize` `false` is of wanneer `editor.enabled` `true` is (de visuele editor vereist de originele veldnamen om bewerken mogelijk te maken).
432
+
433
+ > Minificatie wordt ook overgeslagen voor woordenboeken die geladen worden via `importMode: 'fetch'` omdat hun JSON wordt geserveerd vanuit een externe API met de originele veldnamen — het hernoemen van de client-side sleutels zou het server/client contract verbreken.
322
434
 
323
- ### Purging (Opschonen)
435
+ ### Purging (verwijderen van ongebruikte velden)
324
436
 
325
- Purging zorgt ervoor dat alleen de sleutels die daadwerkelijk in uw code worden gebruikt, worden opgenomen in de uiteindelijke woordenboekbundel. Dit kan de omvang van uw bundel aanzienlijk verkleinen als u grote woordenboeken heeft met veel sleutels die niet in elk deel van uw applicatie worden gebruikt.
437
+ `build.purge` analyseert welke contentvelden daadwerkelijk in uw broncode worden aangesproken en verwijdert alle overige uit de gecompileerde JSON-bestanden.
326
438
 
327
439
  ```typescript fileName="intlayer.config.ts"
328
440
  import type { IntlayerConfig } from "intlayer";
@@ -336,34 +448,50 @@ const config: IntlayerConfig = {
336
448
  export default config;
337
449
  ```
338
450
 
339
- > Opmerking: Purging wordt genegeerd als `optimize` is uitgeschakeld.
451
+ **Voorbeeld:** een woordenboek met vijf velden waarvan er slechts twee worden gebruikt:
452
+
453
+ ```
454
+ // Voor purge
455
+ { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
456
+
457
+ // Na purge (alleen title + subtitle aangesproken in broncode)
458
+ { "title": "…", "subtitle": "…" }
459
+ ```
460
+
461
+ > Purge wordt overgeslagen wanneer `optimize` `false` is of wanneer `editor.enabled` `true` is.
462
+
463
+ > Purge wordt ook conservatief overgeslagen wanneer een bronbestand niet geparseerd kan worden, of wanneer het resultaat van `useIntlayer` wordt toegewezen aan een variabele en wordt doorgegeven op manieren die de statische analyzer niet kan volgen (bijv. uitgespreid in een object, doorgegeven als een prop zonder destructuring). In dergelijke gevallen wordt het volledige woordenboek behouden.
464
+
465
+ ### Import Modus
340
466
 
341
- ### Import Mode
467
+ Voor grote applicaties, inclusief verschillende pagina's en locales, kan uw JSON een aanzienlijk deel van uw bundelgrootte uitmaken. Intlayer stelt u in staat om te bepalen hoe woordenboeken worden geladen met behulp van de `importMode` optie.
342
468
 
343
- Voor grote applicaties met meerdere pagina's en locales kunnen uw JSON-bestanden een aanzienlijk deel van uw bundelgrootte uitmaken. Met Intlayer kunt u bepalen hoe woordenboeken worden geladen.
469
+ ### Globale definitie
344
470
 
345
- De import mode kan standaard globaal worden gedefinieerd in uw `intlayer.config.ts` bestand.
471
+ De import modus kan globaal worden gedefinieerd in uw `intlayer.config.ts` bestand.
346
472
 
347
473
  ```typescript fileName="intlayer.config.ts"
348
474
  import type { IntlayerConfig } from "intlayer";
349
475
 
350
476
  const config: IntlayerConfig = {
351
- build: {
352
- minify: true,
477
+ dictionary: {
478
+ importMode: "dynamic", // Standaard is 'static'
353
479
  },
354
480
  };
355
481
 
356
482
  export default config;
357
483
  ```
358
484
 
359
- Evenals voor elk woordenboek in uw `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}` bestanden.
485
+ ### Per-woordenboek definitie
486
+
487
+ U kunt de import modus voor individuele woordenboeken overschrijven in hun `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}}` bestanden.
360
488
 
361
489
  ```ts
362
490
  import { type Dictionary, t } from "intlayer";
363
491
 
364
492
  const appContent: Dictionary = {
365
493
  key: "app",
366
- importMode: "dynamic", // Overschrijf de standaard import mode
494
+ importMode: "dynamic", // Overschrijf de standaard import modus
367
495
  content: {
368
496
  // ...
369
497
  },
@@ -372,35 +500,35 @@ const appContent: Dictionary = {
372
500
  export default appContent;
373
501
  ```
374
502
 
375
- | Eigenschap | Type | Standaard | Beschrijving |
376
- | :--------------- | :--------------------------------- | :--------- | :---------------------------------------------------------------------------------------------------------------------------------- |
377
- | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Verouderd**: Gebruik in plaats daarvan `dictionary.importMode`. Bepaalt hoe woordenboeken worden geladen (zie details hieronder). |
503
+ | Eigenschap | Type | Standaardwaarde | Beschrijving |
504
+ | :--------------- | :--------------------------------- | :-------------- | :---------------------------------------------------------------------------------------------------------- |
505
+ | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Verouderd**: Gebruik in plaats daarvan `dictionary.importMode`. Bepaalt hoe woordenboeken worden geladen. |
378
506
 
379
- De `importMode` instelling bepaalt hoe de woordenboekinhoud in uw component wordt geïnjecteerd.
380
- U kunt dit globaal definiëren in het `intlayer.config.ts` bestand onder het `dictionary` object, of u kunt het overschrijven voor een specifiek woordenboek in het bijbehorende `.content.ts` bestand.
507
+ De instelling `importMode` bepaalt hoe de content van het woordenboek in uw component wordt geïnjecteerd. U kunt het globaal definiëren in `intlayer.config.ts` onder het object `dictionary`, of u kunt het overschrijven per woordenboek in het betreffende `.content.ts` bestand.
381
508
 
382
509
  ### 1. Statische Modus (`default`)
383
510
 
384
- In de statische modus vervangt Intlayer `useIntlayer` door `useDictionary` en injecteert het woordenboek rechtstreeks in de JavaScript-bundel.
511
+ In de statische modus vervangt Intlayer `useIntlayer` door `useDictionary` en injecteert het woordenboek direct in de JavaScript-bundel.
385
512
 
386
- - **Voordelen:** Directe rendering (synchroon), nul extra netwerkverzoeken tijdens hydratatie.
387
- - **Nadelen:** De bundel bevat vertalingen voor **alle** beschikbare talen voor dat specifieke component.
513
+ - **Voordelen:** Directe rendering (synchroon), geen extra netwerkverzoeken tijdens hydratatie.
514
+ - **Nadelen:** De bundel bevat vertalingen voor **alle** beschikbare talen voor die specifieke component.
388
515
  - **Beste voor:** Single Page Applications (SPA).
389
516
 
390
- **Voorbeeld van getransformeerde code:**
517
+ **Getransformeerd codevoorbeeld:**
391
518
 
392
519
  ```tsx
393
520
  // Uw code
394
521
  const content = useIntlayer("my-key");
395
522
 
396
- // Geoptimaliseerde code (Statisch)
523
+ // Geoptimaliseerd code-illustratie na transformatie (Static)
524
+ // Dit is alleen ter illustratie, de daadwerkelijke code zal om optimalisatieredenen afwijken
397
525
  const content = useDictionary({
398
526
  key: "my-key",
399
527
  content: {
400
528
  nodeType: "translation",
401
529
  translation: {
402
530
  en: "My title",
403
- fr: "Mon titre",
531
+ nl: "Mijn titel",
404
532
  },
405
533
  },
406
534
  });
@@ -408,47 +536,67 @@ const content = useDictionary({
408
536
 
409
537
  ### 2. Dynamische Modus
410
538
 
411
- In de dynamische modus vervangt Intlayer `useIntlayer` door `useDictionaryAsync`. Dit maakt gebruik van `import()` (Suspense-achtig mechanisme) om specifiek de JSON voor de huidige locale lazy te laden.
539
+ In de dynamische modus vervangt Intlayer `useIntlayer` door `useDictionaryAsync`. Dit maakt gebruik van `import()` (Suspense-achtig mechanisme) om specifiek de JSON voor de huidige locale lazy-loaded binnen te halen.
412
540
 
413
- - **Voordelen:** **Tree shaking op locale-niveau.** Een gebruiker die de Engelse versie bekijkt, downloadt _alleen_ het Engelse woordenboek. Het Franse woordenboek wordt nooit geladen.
414
- - **Nadelen:** Activeert een netwerkverzoek (asset fetch) per component tijdens hydratatie.
415
- - **Beste voor:** Grote tekstblokken, artikelen of applicaties die veel talen ondersteunen waarbij bundelgrootte kritiek is.
541
+ - **Voordelen:** **Tree shaking op locale-niveau.** Een gebruiker die de Engelse versie bekijkt, zal _alleen_ het Engelse woordenboek downloaden. Het Nederlandse woordenboek wordt nooit geladen.
542
+ - **Nadelen:** Triggered een netwerkverzoek (asset fetch) per component tijdens hydratatie.
543
+ - **Beste voor:** Grote tekstblokken, artikelen of applicaties die veel talen ondersteunen waarbij de bundelgrootte cruciaal is.
416
544
 
417
- **Voorbeeld van getransformeerde code:**
545
+ **Getransformeerd codevoorbeeld:**
418
546
 
419
547
  ```tsx
420
548
  // Uw code
421
549
  const content = useIntlayer("my-key");
422
550
 
423
- // Geoptimaliseerde code (Dynamisch)
551
+ // Geoptimaliseerd code-illustratie na transformatie (Dynamic)
552
+ // Dit is alleen ter illustratie, de daadwerkelijke code zal om optimalisatieredenen afwijken
424
553
  const content = useDictionaryAsync({
425
554
  en: () =>
426
555
  import(".intlayer/dynamic_dictionary/my-key/en.json").then(
427
556
  (mod) => mod.default
428
557
  ),
429
- fr: () =>
430
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
558
+ nl: () =>
559
+ import(".intlayer/dynamic_dictionary/my-key/nl.json").then(
431
560
  (mod) => mod.default
432
561
  ),
433
562
  });
434
563
  ```
435
564
 
436
- > Wanneer u `importMode: 'dynamic'` gebruikt en u heeft 100 componenten die `useIntlayer` op een enkele pagina gebruiken, zal de browser 100 afzonderlijke fetches proberen. Om deze "waterval" van verzoeken te vermijden, groepeert u de inhoud in minder `.content` bestanden (bijv. één woordenboek per paginasectie) in plaats van één per atoomcomponent.
565
+ > Bij het gebruik van `importMode: 'dynamic'`, en u heeft 100 componenten die `useIntlayer` gebruiken op een enkele pagina, zal de browser 100 aparte fetches proberen uit te voeren. Om deze "waterval" van verzoeken te voorkomen, groepeer content in minder `.content`-bestanden (bijv. één woordenboek per paginasectie) in plaats van één per atoom-component. U kunt ook meerdere `.content`-bestanden met dezelfde sleutel gebruiken. Intlayer voegt deze samen tot één enkel woordenboek.
566
+
567
+ ### 3. Fetch Modus
437
568
 
438
- ### 3. Fetch Mode
569
+ Gedraagt zich vergelijkbaar met de Dynamische modus maar probeert eerst woordenboeken op te halen via de Intlayer Live Sync API. Als de API-aanroep mislukt of de content niet is gemarkeerd voor live updates, valt deze terug op de dynamische import.
439
570
 
440
- Gedraagt zich vergelijkbaar met de dynamische modus, maar probeert eerst woordenboeken op te halen uit de Intlayer Live Sync API. Als de API-aanroep mislukt of de inhoud niet is gemarkeerd voor live updates, valt het terug op de dynamische import.
571
+ **Getransformeerd codevoorbeeld:**
572
+
573
+ ```tsx
574
+ // Uw code
575
+ const content = useIntlayer("my-key");
576
+
577
+ // Geoptimaliseerde code-illustratie (Fetch)
578
+ const content = useDictionaryAsync({
579
+ en: () =>
580
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) =>
581
+ res.json()
582
+ ),
583
+ nl: () =>
584
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/nl").then((res) =>
585
+ res.json()
586
+ ),
587
+ });
588
+ ```
441
589
 
442
- > Zie CMS-documentatie voor meer details: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/intlayer_CMS.md)
590
+ > Zie CMS documentatie voor meer details: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/intlayer_CMS.md)
443
591
 
444
- > In fetch mode kunnen purging en minificatie niet worden gebruikt.
592
+ > In de fetch modus worden purge en minificatie niet toegepast omdat de JSON wordt geserveerd vanuit een externe API die de originele veldnamen gebruikt.
445
593
 
446
594
  ## Samenvatting: Statisch vs Dynamisch
447
595
 
448
- | Functie | Statische Modus | Dynamische Modus |
449
- | :------------------- | :------------------------------------------- | :---------------------------------- |
450
- | **JS-bundelgrootte** | Groter (bevat alle talen voor het component) | Kleinste (alleen code, geen inhoud) |
451
- | **Initiële Load** | Direct (inhoud zit in bundel) | Lichte vertraging (haalt JSON op) |
452
- | **Netwerkverzoeken** | 0 extra verzoeken | 1 verzoek per woordenboek |
453
- | **Tree Shaking** | Component-niveau | Component-niveau + Locale-niveau |
454
- | **Beste Use Case** | UI-componenten, kleine apps | Pagina's met veel tekst, veel talen |
596
+ | Functie | Statische Modus | Dynamische Modus |
597
+ | :-------------------- | :------------------------------------------ | :---------------------------------- |
598
+ | **JS Bundelgrootte** | Groter (bevat alle talen voor de component) | Kleinst (alleen code, geen content) |
599
+ | **Initiële Laadtijd** | Direct (Content zit in bundel) | Lichte vertraging (Haalt JSON op) |
600
+ | **Netwerkverzoeken** | 0 extra verzoeken | 1 verzoek per woordenboeksleutel |
601
+ | **Tree Shaking** | Component-niveau | Component-niveau + Locale-niveau |
602
+ | **Beste Use Case** | UI Componenten, Kleine Apps | Tekstzware pagina's, Veel Talen |
@@ -679,16 +679,16 @@ routing: {
679
679
 
680
680
  Bij gebruik van opslag in cookies kunnen extra attributen worden ingesteld:
681
681
 
682
- | Veld | Beschrijving | Type |
683
- | ---------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------- |
684
- | `name` | Naam van de cookie. Standaard: `'INTLAYER_LOCALE'` | `string` |
685
- | `domain` | Domein van de cookie. Standaard: `undefined` | `string` |
686
- | `path` | Pad van de cookie. Standaard: `undefined` | `string` |
687
- | `secure` | HTTPS vereisen. Standaard: `undefined` | `boolean` |
688
- | `httpOnly` | Vlag HTTP-only. Standaard: `undefined` | `boolean` |
689
- | `sameSite` | Beleid voor SameSite. | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
690
- | `expires` | Vervaldatum of aantal dagen. Standaard: `undefined` | `Date` &#124; <br/> `number` |
691
- | `maxAge` | Levensduur in seconden vanaf aanmaak. Heeft voorrang op `expires`. Standaard: `undefined` | `number` |
682
+ | Veld | Beschrijving | Type |
683
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
684
+ | `name` | Naam van de cookie. Standaard: `'INTLAYER_LOCALE'` | `string` |
685
+ | `domain` | Domein van de cookie. Standaard: `undefined` | `string` |
686
+ | `path` | Pad van de cookie. Standaard: `undefined` | `string` |
687
+ | `secure` | HTTPS vereisen. Standaard: `undefined` | `boolean` |
688
+ | `httpOnly` | Vlag HTTP-only. Standaard: `undefined` | `boolean` |
689
+ | `sameSite` | Beleid voor SameSite. | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
690
+ | `expires` | Een getal staat voor dagen na aanmaak; een datum (of ISO-datumstring) is een absolute vervaldatum. Standaard: `undefined` | `Date` &#124; <br/> `number` &#124; <br/> `string` |
691
+ | `maxAge` | Levensduur in seconden vanaf aanmaak. Heeft voorrang op `expires`. Standaard: `undefined` | `number` |
692
692
 
693
693
  #### Opslagattributen (Storage Attributes)
694
694