@intlayer/docs 9.2.0 → 9.3.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 (89) hide show
  1. package/blog/ar/index.md +1 -1
  2. package/blog/de/index.md +1 -1
  3. package/blog/en/index.md +1 -1
  4. package/blog/en-GB/index.md +1 -1
  5. package/blog/es/index.md +1 -1
  6. package/blog/fr/index.md +1 -1
  7. package/blog/hi/index.md +1 -1
  8. package/blog/id/index.md +1 -1
  9. package/blog/it/index.md +1 -1
  10. package/blog/ja/index.md +1 -1
  11. package/blog/ko/index.md +1 -1
  12. package/blog/pl/index.md +1 -1
  13. package/blog/pt/index.md +1 -1
  14. package/blog/ru/index.md +1 -1
  15. package/blog/uk/index.md +1 -1
  16. package/blog/vi/index.md +1 -1
  17. package/blog/zh/index.md +1 -1
  18. package/dist/cjs/common.cjs +24 -1
  19. package/dist/cjs/common.cjs.map +1 -1
  20. package/dist/cjs/generated/blog.entry.cjs +31 -4
  21. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  22. package/dist/cjs/generated/docs.entry.cjs +31 -4
  23. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  24. package/dist/cjs/generated/frequentQuestions.entry.cjs +31 -4
  25. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  26. package/dist/cjs/generated/legal.entry.cjs +31 -4
  27. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  28. package/dist/esm/common.mjs +24 -1
  29. package/dist/esm/common.mjs.map +1 -1
  30. package/dist/esm/generated/blog.entry.mjs +31 -4
  31. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  32. package/dist/esm/generated/docs.entry.mjs +31 -4
  33. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  34. package/dist/esm/generated/frequentQuestions.entry.mjs +31 -4
  35. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  36. package/dist/esm/generated/legal.entry.mjs +31 -4
  37. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  38. package/dist/types/common.d.ts.map +1 -1
  39. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  40. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  41. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  42. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  43. package/docs/ar/bundle_optimization.md +58 -25
  44. package/docs/ar/live-sync.md +4 -0
  45. package/docs/bn/bundle_optimization.md +58 -25
  46. package/docs/cs/bundle_optimization.md +58 -25
  47. package/docs/de/bundle_optimization.md +58 -25
  48. package/docs/de/live-sync.md +4 -0
  49. package/docs/en/bundle_optimization.md +51 -23
  50. package/docs/en/live-sync.md +4 -0
  51. package/docs/en-GB/bundle_optimization.md +58 -25
  52. package/docs/en-GB/live-sync.md +4 -0
  53. package/docs/es/bundle_optimization.md +58 -25
  54. package/docs/es/live-sync.md +4 -0
  55. package/docs/fr/bundle_optimization.md +58 -25
  56. package/docs/fr/live-sync.md +4 -0
  57. package/docs/hi/bundle_optimization.md +58 -25
  58. package/docs/hi/live-sync.md +4 -0
  59. package/docs/id/bundle_optimization.md +58 -25
  60. package/docs/id/live-sync.md +4 -0
  61. package/docs/it/bundle_optimization.md +58 -25
  62. package/docs/it/live-sync.md +4 -0
  63. package/docs/ja/bundle_optimization.md +58 -25
  64. package/docs/ja/live-sync.md +4 -0
  65. package/docs/ko/bundle_optimization.md +58 -25
  66. package/docs/ko/live-sync.md +4 -0
  67. package/docs/nl/bundle_optimization.md +58 -25
  68. package/docs/pl/bundle_optimization.md +58 -25
  69. package/docs/pl/live-sync.md +4 -0
  70. package/docs/pt/bundle_optimization.md +58 -24
  71. package/docs/pt/live-sync.md +4 -0
  72. package/docs/ru/bundle_optimization.md +58 -25
  73. package/docs/ru/live-sync.md +4 -0
  74. package/docs/tr/bundle_optimization.md +58 -25
  75. package/docs/tr/live-sync.md +4 -0
  76. package/docs/uk/bundle_optimization.md +58 -25
  77. package/docs/uk/live-sync.md +4 -0
  78. package/docs/ur/bundle_optimization.md +58 -25
  79. package/docs/vi/bundle_optimization.md +58 -25
  80. package/docs/vi/live-sync.md +4 -0
  81. package/docs/zh/bundle_optimization.md +58 -25
  82. package/docs/zh/live-sync.md +4 -0
  83. package/docs/zh-TW/bundle_optimization.md +58 -25
  84. package/package.json +7 -7
  85. package/src/common.ts +39 -2
  86. package/src/generated/blog.entry.ts +39 -7
  87. package/src/generated/docs.entry.ts +39 -7
  88. package/src/generated/frequentQuestions.entry.ts +39 -7
  89. package/src/generated/legal.entry.ts +39 -7
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: Optimisation de la taille et des performances du bundle i18n
5
5
  description: Réduisez la taille du bundle de votre application en optimisant le contenu d'internationalisation (i18n). Apprenez à exploiter le tree shaking et le lazy loading pour les dictionnaires avec Intlayer.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` et `minify` fonctionnent désormais sur Next.js via `@intlayer/swc` — aucun `babel.config.js` requis"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "Liste des plugins Babel dans l'ordre de pipeline requis (extract → purge → minify → optimize) dans les tableaux de référence"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Ajout de `intlayerPurgeBabelPlugin` et `intlayerMinifyBabelPlugin` pour Babel/Webpack; clarification du pipeline de plugins"
@@ -191,12 +197,14 @@ L'optimisation de build d'Intlayer est divisée en plusieurs plugins distincts,
191
197
 
192
198
  Ceux-ci sont utilisés directement dans `babel.config.js` pour les configurations basées sur Webpack (Next.js avec Babel, CRA, Webpack personnalisé, etc.).
193
199
 
200
+ Le tableau ci-dessous les liste dans leur ordre de pipeline requis (le même ordre dans lequel ils doivent apparaître dans `babel.config.js`) :
201
+
194
202
  | Plugin | Ce qu'il fait |
195
203
  | :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Analyse les fichiers `.content.ts` et écrit les dictionnaires compilés dans `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte l'`import` du dictionnaire correspondant |
198
205
  | `intlayerPurgeBabelPlugin` | Analyse tous les fichiers sources, supprime les **champs de contenu inutilisés** des fichiers de dictionnaire compilés `.intlayer/**/*.json` |
199
206
  | `intlayerMinifyBabelPlugin` | **Renomme les clés des champs de contenu** par de courts alias alphabétiques (`title` → `a`) dans les fichiers JSON et le code source |
207
+ | `intlayerOptimizeBabelPlugin` | Réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte l'`import` du dictionnaire correspondant |
200
208
 
201
209
  > **L'ordre des plugins a de l'importance.** Dans votre `babel.config.js`, les plugins de purge et de minification doivent apparaître **avant** le plugin d'optimisation. La passe d'optimisation remplace `useIntlayer('key')` par un appel opaque `useDictionary(hash)`, effaçant l'information de la clé du dictionnaire dont les passes de purge et de minification ont besoin pour identifier les champs utilisés.
202
210
 
@@ -205,9 +213,9 @@ Chaque plugin Babel dispose d'un helper d'options correspondant qui lit votre `i
205
213
  | Helper d'options | Utilisé avec |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Plugins Vite (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Les utilisateurs de Vite **ne configurent jamais ceux-ci directement**. Ils sont
220
228
  | Minification de dict. | Identique à la passe d'écriture JSON de `intlayerMinifyBabelPlugin` |
221
229
  | Transformation Babel | Identique au renommage de code source de `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Plugin SWC (`@intlayer/swc`)
232
+
233
+ Les utilisateurs de Next.js **ne configurent jamais ceux-ci directement** non plus. Depuis la **v9.2.1**, `withIntlayer()` dans `next.config.ts` exécute l'ensemble du pipeline — purge, minification et réécriture des imports — à partir des seuls drapeaux `build.purge` et `build.minify`.
234
+
235
+ Le travail est réparti en deux, car un plugin SWC Wasm transforme un fichier à la fois, sans accès au système de fichiers :
236
+
237
+ | Passe | Où elle s'exécute | Ce qu'elle fait |
238
+ | :-------------------------------------------- | :-------------------------- | :----------------------------------------------------------------------------------------------------- |
239
+ | Analyse d'usage + purge/minification JSON | Node, dans `withIntlayer()` | Lit chaque fichier source de composant, réécrit `.intlayer/**/*.json`, produit les tables de renommage |
240
+ | Réécriture du source (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Applique les tables de renommage aux accès de propriétés correspondants dans votre code |
241
+ | Réécriture des imports (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Identique à `intlayerOptimizeBabelPlugin` |
242
+
243
+ Déterminer _quels_ champs sont inutilisés et _quel_ alias attribuer à chacun nécessite un état inter-fichiers et des E/S fichier ; cette moitié s'exécute donc dans Node, et le plugin SWC ne reçoit que les tables résultantes.
244
+
223
245
  ## Configuration par plateforme
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Les utilisateurs de Vite **ne configurent jamais ceux-ci directement**. Ils sont
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js nécessite le plugin `@intlayer/swc` pour la passe d'optimisation (réécriture d'import), car Next.js utilise SWC pour les builds.
252
+ Next.js nécessite le plugin `@intlayer/swc`, car Next.js utilise SWC pour les builds. Depuis la **v9.2.1**, ce seul paquet couvre tout le pipeline — optimisation (réécriture des imports), purge et minification.
231
253
 
232
254
  > Ce plugin n'est pas installé par défaut car les plugins SWC sont encore expérimentaux pour Next.js. Cela pourrait changer à l'avenir.
233
255
 
256
+ > **Next.js 16.1.0 est la version minimale.** C'est la première version construite sur l'ABI de plugin Wasm de SWC compatible en avant ; les versions antérieures rejettent le plugin. `withIntlayer` lit votre version de Next.js et n'enregistre tout simplement pas le plugin en dessous de 16.1.0 — ces builds réussissent quand même, ils s'exécutent simplement sans l'optimisation du bundle.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  Une fois installé, Intlayer détectera et utilisera automatiquement le plugin.
267
291
 
268
- Pour les passes de **purge et de minification** (suppression de champs et renommage de champs), installez `@intlayer/babel` en parallèle et ajoutez les plugins Babel. Parce que Next.js utilise SWC pour la transformation mais évalue toujours `babel.config.js` pour la configuration des plugins, les plugins Babel s'exécutent en tant que pré-passe avant SWC.
292
+ Les passes de **purge et de minification** (suppression et renommage de champs) ne nécessitent aucun paquet supplémentaire ni `babel.config.js`. Enveloppez votre configuration avec `withIntlayer` et activez les drapeaux dans `intlayer.config.ts` :
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* votre configuration */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge : supprime les champs de contenu inutilisés de .intlayer/**/*.json
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify : renomme les clés de champ de contenu dans le JSON + code source
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Note : intlayerOptimizeBabelPlugin n'est PAS nécessaire ici car
290
- // @intlayer/swc gère la réécriture useIntlayer → useDictionary.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // supprime les champs de contenu inutilisés des JSON groupés
309
+ minify: true, // renomme les clés de champs avec de courts alias
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ Pendant `next build`, `withIntlayer` analyse vos sources, réécrit les dictionnaires compilés et transmet les tables de renommage de champs résultantes à `@intlayer/swc`, qui met à jour les accès de propriétés correspondants dans votre code.
317
+
318
+ > Utilisez la version asynchrone `withIntlayer`, pas `withIntlayerSync`. La variante synchrone n'exécute pas le pipeline d'analyse : la purge et la minification n'ont donc aucun effet avec elle.
319
+
320
+ > La purge et la minification ne s'exécutent que lors de `next build` — le pipeline d'optimisation est désactivé pendant `next dev`.
321
+
322
+ > Elles sont également désactivées lorsque des appelants d'adaptateurs de compatibilité sont configurés (`swcExtraCallers`, définis par les paquets de compatibilité tels que `@intlayer/next-intl` ou `@intlayer/react-i18next`) : ces sites d'appel sont invisibles pour l'analyseur d'usage, et purger supprimerait donc des champs que le code lit encore. La réécriture des imports reste active.
323
+
324
+ **Les versions antérieures (avant 9.2.1)** nécessitaient `@intlayer/babel` et un `babel.config.js` déclarant `intlayerPurgeBabelPlugin` et `intlayerMinifyBabelPlugin`. Ce fichier n'est plus nécessaire et peut être supprimé.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > La minification est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true` (l'éditeur visuel requiert les noms de champs originaux pour permettre l'édition).
449
480
 
481
+ > Sur Next.js, la minification est également ignorée lorsque `@intlayer/swc` n'est pas installé ou ne peut pas être chargé (Next.js inférieur à 16.1.0). Le plugin est la moitié qui réécrit les accès dans le source : renommer les dictionnaires sans lui laisserait votre code lire des noms de champs qui n'existent plus.
482
+
450
483
  > La minification est également ignorée pour les dictionnaires chargés via `importMode: 'fetch'` car leur JSON est servi depuis une API distante en utilisant les noms de champs originaux — renommer les clés côté client briserait le contrat serveur/client.
451
484
 
452
485
  ### Purge (suppression des champs inutilisés)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > La purge est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true`.
511
+ > La purge est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true`. Sur Next.js, elle est en outre ignorée lorsque `@intlayer/swc` est indisponible, ainsi que lorsque des appelants d'adaptateurs de compatibilité sont configurés.
479
512
 
480
513
  > La purge est également ignorée de manière conservative lorsqu'un fichier source ne peut pas être analysé, ou lorsque le résultat de `useIntlayer` est assigné à une variable et transmis de manières que l'analyseur statique ne peut pas suivre (par ex. propagation dans un objet, passé en tant que prop sans déstructuration). Dans ces cas, le dictionnaire complet est conservé.
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: i18n बंडल साइज़ और परफॉरमेंस ऑप्टिमाइज़ेशन
5
5
  description: अंतर्राष्ट्रीयकरण (i18n) कंटेंट को ऑप्टिमाइज़ करके अपने एप्लिकेशन के बंडल साइज़ को कम करें। जानें कि Intlayer के साथ डिक्शनरी के लिए ट्री शेकिंग (tree shaking) और लेज़ी लोडिंग (lazy loading) का उपयोग कैसे करें।
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` और `minify` अब `@intlayer/swc` के माध्यम से Next.js पर काम करते हैं — `babel.config.js` की आवश्यकता नहीं"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "संदर्भ तालिकाओं में Babel प्लगइन्स को आवश्यक पाइपलाइन क्रम में सूचीबद्ध करें (extract → purge → minify → optimize)"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Babel/Webpack के लिए `intlayerPurgeBabelPlugin` और `intlayerMinifyBabelPlugin` जोड़ा गया; प्लगइन पाइपलाइन को स्पष्ट किया गया"
@@ -191,12 +197,14 @@ Intlayer का बिल्ड ऑप्टिमाइज़ेशन कई
191
197
 
192
198
  इनका उपयोग सीधे तौर पर Webpack-आधारित सेटअप (Babel के साथ Next.js, CRA, कस्टम Webpack, आदि) के लिए `babel.config.js` में किया जाता है।
193
199
 
200
+ नीचे दी गई तालिका उन्हें आवश्यक पाइपलाइन क्रम में सूचीबद्ध करती है (वही क्रम जिसमें उन्हें `babel.config.js` में आना चाहिए):
201
+
194
202
  | प्लगइन | यह क्या करता है |
195
203
  | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | `.content.ts` फ़ाइलों को स्कैन करता है और कंपाइल की गई डिक्शनरी को `.intlayer/` में लिखता है |
197
- | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` को `useDictionary(hash)` में फिर से लिखता है (rewrite) और मिलान वाली डिक्शनरी का `import` इंजेक्ट करता है |
198
205
  | `intlayerPurgeBabelPlugin` | सभी स्रोत (source) फ़ाइलों को स्कैन करता है, संकलित (compiled) `.intlayer/**/*.json` डिक्शनरी फ़ाइलों से **अप्रयुक्त कंटेंट फ़ील्ड** को हटा देता है |
199
206
  | `intlayerMinifyBabelPlugin` | JSON फ़ाइलों और स्रोत कोड दोनों में **कंटेंट फ़ील्ड कीज़ (keys) का नाम बदलकर** छोटे अल्फाबेटिकल उपनाम (alias) कर देता है (जैसे `title` → `a`) |
207
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` को `useDictionary(hash)` में फिर से लिखता है (rewrite) और मिलान वाली डिक्शनरी का `import` इंजेक्ट करता है |
200
208
 
201
209
  > **प्लगइन का क्रम महत्वपूर्ण है।** आपके `babel.config.js` में purge और minify प्लगइन ऑप्टिमाइज़ (optimize) प्लगइन से **पहले** आने चाहिए। ऑप्टिमाइज़ पास `useIntlayer('key')` को एक अपारदर्शी (opaque) `useDictionary(hash)` कॉल से बदल देता है, जिससे डिक्शनरी की-की (key) जानकारी मिट जाती है, जिसकी आवश्यकता purge और minify पास को यह पहचानने के लिए होती है कि किन फ़ील्ड्स का उपयोग किया जा रहा है।
202
210
 
@@ -205,9 +213,9 @@ Intlayer का बिल्ड ऑप्टिमाइज़ेशन कई
205
213
  | Options helper | किसके साथ उपयोग किया जाता है |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Vite प्लगइन्स (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Vite उपयोगकर्ता **इन्हें कभी भी सी
220
228
  | Dictionary minify | `intlayerMinifyBabelPlugin` के JSON राइट पास के समान |
221
229
  | Babel transform | `intlayerMinifyBabelPlugin` के स्रोत कोड का नाम बदलने और `intlayerOptimizeBabelPlugin` के समान |
222
230
 
231
+ ### SWC प्लगइन (`@intlayer/swc`)
232
+
233
+ Next.js उपयोगकर्ता भी **इन्हें कभी सीधे कॉन्फ़िगर नहीं करते**। **v9.2.1** से, `next.config.ts` में `withIntlayer()` केवल `build.purge` और `build.minify` फ़्लैग्स के आधार पर पूरी पाइपलाइन चलाता है — purge, minify और import पुनर्लेखन।
234
+
235
+ काम दो हिस्सों में बँटा है, क्योंकि एक SWC Wasm प्लगइन एक बार में एक ही फ़ाइल रूपांतरित करता है और उसके पास फ़ाइल सिस्टम तक पहुँच नहीं होती:
236
+
237
+ | चरण | कहाँ चलता है | क्या करता है |
238
+ | :--------------------------------------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------- |
239
+ | उपयोग विश्लेषण + JSON purge/minify | Node, `withIntlayer()` के भीतर | हर कंपोनेंट स्रोत फ़ाइल पढ़ता है, `.intlayer/**/*.json` को पुनः लिखता है, और पुनर्नामकरण तालिकाएँ बनाता है |
240
+ | स्रोत पुनर्लेखन (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | पुनर्नामकरण तालिकाओं को आपके कोड में संबंधित प्रॉपर्टी एक्सेस पर लागू करता है |
241
+ | Import पुनर्लेखन (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | `intlayerOptimizeBabelPlugin` के समान |
242
+
243
+ यह तय करना कि _कौन-से_ फ़ील्ड अप्रयुक्त हैं और प्रत्येक को _कौन-सा_ उपनाम मिलेगा, इसके लिए फ़ाइलों के बीच स्थिति और फ़ाइल I/O चाहिए; इसलिए वह आधा हिस्सा Node में चलता है और SWC प्लगइन को केवल परिणामी तालिकाएँ मिलती हैं।
244
+
223
245
  ## प्लेटफ़ॉर्म के अनुसार सेटअप
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Vite उपयोगकर्ता **इन्हें कभी भी सी
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js को ऑप्टिमाइज़ (import rewrite) पास के लिए `@intlayer/swc` प्लगइन की आवश्यकता होती है, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है।
252
+ Next.js को `@intlayer/swc` प्लगइन चाहिए, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है। **v9.2.1** से यह अकेला पैकेज पूरी पाइपलाइन को कवर करता है — ऑप्टिमाइज़ (import पुनर्लेखन), purge और minify।
231
253
 
232
254
  > यह प्लगइन डिफ़ॉल्ट रूप से इंस्टॉल नहीं होता है क्योंकि SWC प्लगइन्स अभी भी Next.js के लिए प्रायोगिक (experimental) हैं। भविष्य में यह बदल सकता है।
233
255
 
256
+ > **Next.js 16.1.0 न्यूनतम संस्करण है।** यह SWC के फ़ॉरवर्ड-संगत Wasm प्लगइन ABI पर बना पहला रिलीज़ है; इससे पुराने रिलीज़ प्लगइन को अस्वीकार कर देते हैं। `withIntlayer` आपके प्रोजेक्ट का Next.js संस्करण पढ़ता है और 16.1.0 से नीचे प्लगइन को पंजीकृत ही नहीं करता — वे बिल्ड फिर भी सफल होते हैं, बस बंडल ऑप्टिमाइज़ेशन के बिना चलते हैं।
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  एक बार इंस्टॉल हो जाने पर, Intlayer स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा।
267
291
 
268
- **purge और minify** पास (फ़ील्ड हटाना और फ़ील्ड का नाम बदलना) के लिए, इसके साथ `@intlayer/babel` इंस्टॉल करें और Babel प्लगइन्स जोड़ें। क्योंकि Next.js ट्रांसफ़ॉर्मेशन के लिए SWC का उपयोग करता है लेकिन फिर भी प्लगइन कॉन्फ़िगरेशन के लिए `babel.config.js` का मूल्यांकन (evaluates) करता है, Babel प्लगइन्स SWC से पहले एक प्री-पास के रूप में चलते हैं।
292
+ **Purge और minify** चरणों (फ़ील्ड हटाना और फ़ील्ड का नाम बदलना) के लिए किसी अतिरिक्त पैकेज या `babel.config.js` की आवश्यकता नहीं है। अपने कॉन्फ़िग को `withIntlayer` से लपेटें और `intlayer.config.ts` में फ़्लैग्स चालू करें:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* आपका कॉन्फ़िग */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: .intlayer/**/*.json से अप्रयुक्त कंटेंट फ़ील्ड हटाएँ
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: JSON + स्रोत कोड में कंटेंट फ़ील्ड कीज़ (keys) का नाम बदलें
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // नोट: यहाँ intlayerOptimizeBabelPlugin की आवश्यकता नहीं है क्योंकि
290
- // @intlayer/swc ही useIntlayer → useDictionary रीराइट (rewrite) को संभालता है।
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // बंडल किए गए JSON से अप्रयुक्त कंटेंट फ़ील्ड हटाता है
309
+ minify: true, // कंटेंट फ़ील्ड कुंजियों का नाम छोटे उपनामों में बदलता है
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ `next build` के दौरान, `withIntlayer` आपके स्रोतों का विश्लेषण करता है, संकलित शब्दकोशों को पुनः लिखता है, और परिणामी फ़ील्ड-पुनर्नामकरण तालिकाएँ `@intlayer/swc` को भेजता है, जो आपके कोड में संबंधित प्रॉपर्टी एक्सेस को अपडेट करता है।
317
+
318
+ > `withIntlayerSync` नहीं, बल्कि एसिंक्रोनस `withIntlayer` का उपयोग करें। सिंक्रोनस संस्करण विश्लेषण पाइपलाइन नहीं चलाता, इसलिए उसके साथ purge और minify का कोई प्रभाव नहीं होता।
319
+
320
+ > Purge और minify केवल `next build` पर चलते हैं — ऑप्टिमाइज़ पाइपलाइन `next dev` के दौरान बंद रहती है।
321
+
322
+ > जब कम्पैट-अडैप्टर कॉलर्स कॉन्फ़िगर किए जाते हैं तब भी ये अक्षम हो जाते हैं (`swcExtraCallers`, जिन्हें `@intlayer/next-intl` या `@intlayer/react-i18next` जैसे कम्पैट पैकेज सेट करते हैं): वे कॉल साइट्स उपयोग विश्लेषक को दिखाई नहीं देतीं, इसलिए purge उन फ़ील्ड्स को हटा देगा जिन्हें कोड अब भी पढ़ता है। Import पुनर्लेखन सक्रिय रहता है।
323
+
324
+ **पुराने संस्करणों (9.2.1 से पहले)** में `@intlayer/babel` और एक `babel.config.js` की आवश्यकता होती थी जो `intlayerPurgeBabelPlugin` और `intlayerMinifyBabelPlugin` घोषित करे। अब उस फ़ाइल की आवश्यकता नहीं है और उसे हटाया जा सकता है।
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है (विज़ुअल एडिटर को संपादन (editing) की अनुमति देने के लिए मूल फ़ील्ड नामों की आवश्यकता होती है) तो मिनिफिकेशन छोड़ दिया जाता है (skipped)।
449
480
 
481
+ > Next.js पर, minification तब भी छोड़ दिया जाता है जब `@intlayer/swc` इंस्टॉल न हो या लोड न हो सके (16.1.0 से नीचे का Next.js)। स्रोत एक्सेस को पुनः लिखने वाला आधा हिस्सा यही प्लगइन है, इसलिए इसके बिना शब्दकोशों का नाम बदलने पर आपका कोड ऐसे फ़ील्ड नाम पढ़ता रह जाएगा जो अब मौजूद नहीं हैं।
482
+
450
483
  > `importMode: 'fetch'` के माध्यम से लोड की गई डिक्शनरी के लिए भी मिनिफिकेशन छोड़ दिया जाता है क्योंकि उनका JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है — क्लाइंट-साइड कीज़ का नाम बदलने से सर्वर/क्लाइंट अनुबंध (contract) टूट जाएगा।
451
484
 
452
485
  ### Purging (अप्रयुक्त फ़ील्ड हटाना)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है तो पर्ज (Purge) छोड़ दिया जाता है (skipped)।
511
+ > जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है तो पर्ज (Purge) छोड़ दिया जाता है (skipped)। Next.js पर यह तब भी छोड़ दिया जाता है जब `@intlayer/swc` उपलब्ध न हो, और जब कम्पैट-अडैप्टर कॉलर्स कॉन्फ़िगर किए गए हों।
479
512
 
480
513
  > पर्ज (Purge) को उस समय भी सुरक्षित (conservatively) रूप से छोड़ दिया जाता है जब किसी स्रोत फ़ाइल को पार्स (parse) नहीं किया जा सकता है, या जब `useIntlayer` के परिणाम को किसी वेरिएबल को सौंपा (assigned) जाता है और उन तरीकों से पास किया जाता है जिन्हें स्टेटिक एनालाइज़र ट्रैक नहीं कर सकता है (जैसे किसी ऑब्जेक्ट में स्प्रेड (spread) करना, डिस्ट्रक्चरिंग के बिना प्रोप (prop) के रूप में पास करना)। उन मामलों में, पूरी डिक्शनरी सुरक्षित (preserved) रखी जाती है।
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: Optimasi Ukuran Bundle & Performa i18n
5
5
  description: Kurangi ukuran bundle aplikasi Anda dengan mengoptimalkan konten internasionalisasi (i18n). Pelajari cara memanfaatkan tree shaking dan lazy loading untuk kamus menggunakan Intlayer.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` dan `minify` kini bekerja di Next.js melalui `@intlayer/swc` — tidak perlu `babel.config.js`"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "Mencantumkan plugin Babel dalam urutan pipeline yang diperlukan (extract → purge → minify → optimize) pada tabel referensi"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Menambahkan `intlayerPurgeBabelPlugin` dan `intlayerMinifyBabelPlugin` untuk Babel/Webpack; menjelaskan pipeline plugin"
@@ -191,12 +197,14 @@ Optimasi build dari Intlayer terbagi menjadi beberapa plugin terpisah yang masin
191
197
 
192
198
  Plugin-plugin ini digunakan secara langsung di dalam `babel.config.js` untuk setup berbasis Webpack (Next.js dengan Babel, CRA, kustom Webpack, dll).
193
199
 
200
+ Tabel di bawah ini mencantumkannya dalam urutan pipeline yang diperlukan (urutan yang sama seperti yang harus muncul di `babel.config.js`):
201
+
194
202
  | Plugin | Apa yang dilakukannya |
195
203
  | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Memindai file `.content.ts` dan menulis kamus yang telah dikompilasi ke direktori `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Menulis ulang `useIntlayer('key')` menjadi `useDictionary(hash)` dan menyuntikkan (injects) `import` kamus yang sesuai |
198
205
  | `intlayerPurgeBabelPlugin` | Memindai semua file source, menghapus **field konten yang tidak terpakai** dari file kamus `.intlayer/**/*.json` |
199
206
  | `intlayerMinifyBabelPlugin` | **Mengganti nama kunci (keys) konten** menjadi alias alfabet yang pendek (`title` → `a`) di file JSON maupun source |
207
+ | `intlayerOptimizeBabelPlugin` | Menulis ulang `useIntlayer('key')` menjadi `useDictionary(hash)` dan menyuntikkan (injects) `import` kamus yang sesuai |
200
208
 
201
209
  > **Urutan plugin sangat penting.** Di dalam `babel.config.js`, plugin purge dan minify harus ditempatkan **sebelum** plugin optimize. Langkah optimize menggantikan `useIntlayer('key')` dengan pemanggilan `useDictionary(hash)` yang menyembunyikan informasi 'key' dari kamus. Informasi 'key' ini sangat diperlukan oleh tahap purge dan minify untuk mengidentifikasi field mana yang dipakai.
202
210
 
@@ -205,9 +213,9 @@ Setiap plugin Babel memiliki "options helper" yang berhubungan untuk membaca `in
205
213
  | Options helper | Digunakan dengan |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Plugin Vite (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Pengguna Vite **tidak pernah mengonfigurasi ini secara langsung**. Plugin ini te
220
228
  | Dictionary minify | Sama seperti pass penulisan JSON dari `intlayerMinifyBabelPlugin` |
221
229
  | Babel transform | Sama seperti penggantian nama kode dari `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Plugin SWC (`@intlayer/swc`)
232
+
233
+ Pengguna Next.js juga **tidak pernah mengonfigurasi ini secara langsung**. Sejak **v9.2.1**, `withIntlayer()` di `next.config.ts` menjalankan seluruh pipeline — purge, minify, dan penulisan ulang import — hanya berdasarkan flag `build.purge` dan `build.minify`.
234
+
235
+ Pekerjaan dibagi menjadi dua, karena plugin Wasm SWC mentransformasi satu berkas dalam satu waktu dan tidak memiliki akses ke sistem berkas:
236
+
237
+ | Tahap | Di mana dijalankan | Apa yang dilakukan |
238
+ | :---------------------------------------------- | :------------------------------ | :-------------------------------------------------------------------------------------------------------------- |
239
+ | Analisis penggunaan + purge/minify JSON | Node, di dalam `withIntlayer()` | Membaca setiap berkas sumber komponen, menulis ulang `.intlayer/**/*.json`, menghasilkan tabel penggantian nama |
240
+ | Penulisan ulang sumber (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Menerapkan tabel penggantian nama pada akses properti yang sesuai di kode Anda |
241
+ | Penulisan ulang import (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Sama seperti `intlayerOptimizeBabelPlugin` |
242
+
243
+ Menentukan _bidang mana_ yang tidak terpakai dan _alias apa_ yang diterima masing-masing memerlukan status lintas berkas dan I/O berkas, sehingga separuh itu berjalan di Node; plugin SWC hanya menerima tabel hasilnya.
244
+
223
245
  ## Setup berdasarkan Platform
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Pengguna Vite **tidak pernah mengonfigurasi ini secara langsung**. Plugin ini te
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js memerlukan plugin `@intlayer/swc` untuk optimasi pass (menulis ulang import), karena Next.js menggunakan SWC untuk proses build-nya.
252
+ Next.js memerlukan plugin `@intlayer/swc`, karena Next.js menggunakan SWC untuk build. Sejak **v9.2.1**, satu paket ini mencakup seluruh pipeline — optimasi (penulisan ulang import), purge, dan minify.
231
253
 
232
254
  > Plugin ini tidak terpasang secara default karena plugin SWC masih berada pada tahap eksperimental untuk Next.js. Hal ini dapat berubah di masa yang akan datang.
233
255
 
256
+ > **Next.js 16.1.0 adalah versi minimum.** Ini adalah rilis pertama yang dibangun di atas ABI plugin Wasm SWC yang kompatibel ke depan; rilis sebelumnya menolak plugin tersebut. `withIntlayer` membaca versi Next.js proyek Anda dan tidak mendaftarkan plugin sama sekali di bawah 16.1.0 — build tersebut tetap berhasil, hanya saja berjalan tanpa optimasi bundle.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  Setelah dipasang, Intlayer akan mendeteksi dan menggunakan plugin ini secara otomatis.
267
291
 
268
- Untuk langkah **purge dan minify** (menghapus field dan mengganti nama field), instal `@intlayer/babel` bersamanya dan tambahkan plugin Babel tersebut. Walaupun Next.js menggunakan SWC untuk proses transformasi namun ia tetap mengevaluasi `babel.config.js` untuk plugin config, jadi plugin Babel ini berjalan sebagai pra-langkah sebelum SWC dieksekusi.
292
+ Tahap **purge dan minify** (penghapusan dan penggantian nama bidang) tidak memerlukan paket tambahan maupun `babel.config.js`. Bungkus konfigurasi Anda dengan `withIntlayer` dan aktifkan flag di `intlayer.config.ts`:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* konfigurasi Anda */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: menghapus field konten yang tidak digunakan dari .intlayer/**/*.json
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: mengubah nama field konten di JSON + source code
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Catatan: intlayerOptimizeBabelPlugin TIDAK DIBUTUHKAN di sini karena
290
- // @intlayer/swc yang menangani penggantian useIntlayer → useDictionary.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // menghapus bidang konten yang tidak terpakai dari JSON yang dibundel
309
+ minify: true, // mengganti nama kunci bidang konten menjadi alias pendek
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ Selama `next build`, `withIntlayer` menganalisis sumber Anda, menulis ulang kamus yang telah dikompilasi, dan meneruskan tabel penggantian nama bidang yang dihasilkan ke `@intlayer/swc`, yang memperbarui akses properti yang sesuai di kode Anda.
317
+
318
+ > Gunakan `withIntlayer` yang asinkron, bukan `withIntlayerSync`. Varian sinkron tidak menjalankan pipeline analisis, jadi purge dan minify tidak berpengaruh dengannya.
319
+
320
+ > Purge dan minify hanya berjalan pada `next build` — pipeline optimasi dimatikan selama `next dev`.
321
+
322
+ > Keduanya juga dinonaktifkan ketika pemanggil adapter kompatibilitas dikonfigurasi (`swcExtraCallers`, disetel oleh paket kompatibilitas seperti `@intlayer/next-intl` atau `@intlayer/react-i18next`): titik panggilan tersebut tidak terlihat oleh penganalisis penggunaan, sehingga purge akan menghapus bidang yang masih dibaca oleh kode. Penulisan ulang import tetap aktif.
323
+
324
+ **Versi sebelumnya (sebelum 9.2.1)** memerlukan `@intlayer/babel` dan sebuah `babel.config.js` yang mendeklarasikan `intlayerPurgeBabelPlugin` dan `intlayerMinifyBabelPlugin`. Berkas itu tidak lagi diperlukan dan dapat dihapus.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > Minifikasi akan dilompati (skipped) bila `optimize` disetel menjadi `false` atau `editor.enabled` bernilai `true` (Visual editor sangat memerlukan nama field asli untuk mode pengeditan).
449
480
 
481
+ > Di Next.js, minifikasi juga dilewati ketika `@intlayer/swc` tidak terpasang atau tidak dapat dimuat (Next.js di bawah 16.1.0). Plugin inilah separuh yang menulis ulang akses di kode sumber, sehingga mengganti nama kamus tanpa plugin tersebut akan membuat kode Anda membaca nama bidang yang sudah tidak ada.
482
+
450
483
  > Proses minifikasi ini juga akan dihiraukan jika file kamus dipanggil lewat `importMode: 'fetch'` karena file JSON tersebut dikirim dari API terpencil menggunakan nama struktur kunci originalnya. Apabila client mencoba melakukan minifikasi maka jembatan kontrak server/client akan rusak.
451
484
 
452
485
  ### Purging (penghapusan field konten tak terpakai)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > Purge akan dilompati ketika `optimize` bernilai `false` atau `editor.enabled` adalah `true`.
511
+ > Purge akan dilompati ketika `optimize` bernilai `false` atau `editor.enabled` adalah `true`. Di Next.js, ia juga dilewati ketika `@intlayer/swc` tidak tersedia dan ketika pemanggil adapter kompatibilitas dikonfigurasi.
479
512
 
480
513
  > Secara konservatif, proses purge tidak akan dilaksanakan jika file asal (source file) gagal dipindai, atau pemanggilan `useIntlayer` disimpan di variabel untuk lalu disebarluaskan di mana proses pindaian statik tak mampu melacak jejaknya (contoh lewat spread function atau pengiriman prop secara untuh). Jika skenario ini terjadi, file kamus tak akan disentuh.
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08