@intlayer/docs 9.2.0 → 9.3.1

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 (233) hide show
  1. package/README.md +24 -24
  2. package/blog/ar/index.md +1 -1
  3. package/blog/ar/rag_powered_documentation_assistant.md +1 -1
  4. package/blog/de/index.md +1 -1
  5. package/blog/en/index.md +1 -1
  6. package/blog/en-GB/index.md +1 -1
  7. package/blog/es/index.md +1 -1
  8. package/blog/fr/index.md +1 -1
  9. package/blog/hi/index.md +1 -1
  10. package/blog/id/index.md +1 -1
  11. package/blog/it/index.md +1 -1
  12. package/blog/ja/index.md +1 -1
  13. package/blog/ko/index.md +1 -1
  14. package/blog/pl/index.md +1 -1
  15. package/blog/pl/rag_powered_documentation_assistant.md +1 -1
  16. package/blog/pt/index.md +1 -1
  17. package/blog/ru/index.md +1 -1
  18. package/blog/uk/index.md +1 -1
  19. package/blog/vi/index.md +1 -1
  20. package/blog/zh/index.md +1 -1
  21. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
  22. package/dist/cjs/authors2.cjs +0 -1
  23. package/dist/cjs/common.cjs +24 -1
  24. package/dist/cjs/common.cjs.map +1 -1
  25. package/dist/cjs/generated/blog.entry.cjs +35 -6
  26. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  27. package/dist/cjs/generated/docs.entry.cjs +35 -6
  28. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  29. package/dist/cjs/generated/frequentQuestions.entry.cjs +35 -6
  30. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  31. package/dist/cjs/generated/legal.entry.cjs +35 -6
  32. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  33. package/dist/esm/common.mjs +24 -1
  34. package/dist/esm/common.mjs.map +1 -1
  35. package/dist/esm/generated/blog.entry.mjs +35 -6
  36. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  37. package/dist/esm/generated/docs.entry.mjs +35 -6
  38. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  39. package/dist/esm/generated/frequentQuestions.entry.mjs +35 -6
  40. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  41. package/dist/esm/generated/legal.entry.mjs +35 -6
  42. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  43. package/dist/types/common.d.ts.map +1 -1
  44. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  45. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  46. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  47. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  48. package/docs/ar/bundle_optimization.md +58 -25
  49. package/docs/ar/configuration.md +10 -10
  50. package/docs/ar/interest_of_intlayer.md +24 -22
  51. package/docs/ar/intlayer_with_express.md +1 -1
  52. package/docs/ar/intlayer_with_svelte_kit.md +1 -1
  53. package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
  54. package/docs/ar/intlayer_with_tanstack.md +5 -3
  55. package/docs/ar/live-sync.md +4 -0
  56. package/docs/ar/lsp.md +114 -175
  57. package/docs/ar/readme.md +25 -25
  58. package/docs/bn/bundle_optimization.md +58 -25
  59. package/docs/bn/configuration.md +10 -10
  60. package/docs/bn/interest_of_intlayer.md +24 -22
  61. package/docs/cs/bundle_optimization.md +58 -25
  62. package/docs/cs/configuration.md +10 -10
  63. package/docs/cs/interest_of_intlayer.md +24 -22
  64. package/docs/de/bundle_optimization.md +58 -25
  65. package/docs/de/configuration.md +10 -10
  66. package/docs/de/interest_of_intlayer.md +24 -22
  67. package/docs/de/intlayer_with_svelte_kit.md +1 -1
  68. package/docs/de/intlayer_with_tanstack+solid.md +5 -3
  69. package/docs/de/intlayer_with_tanstack.md +5 -3
  70. package/docs/de/live-sync.md +4 -0
  71. package/docs/de/lsp.md +111 -172
  72. package/docs/de/readme.md +24 -24
  73. package/docs/en/bundle_optimization.md +51 -23
  74. package/docs/en/configuration.md +10 -10
  75. package/docs/en/interest_of_intlayer.md +24 -22
  76. package/docs/en/intlayer_with_svelte_kit.md +1 -1
  77. package/docs/en/intlayer_with_tanstack+solid.md +5 -3
  78. package/docs/en/intlayer_with_tanstack.md +5 -3
  79. package/docs/en/live-sync.md +4 -0
  80. package/docs/en/lsp.md +109 -170
  81. package/docs/en/readme.md +24 -24
  82. package/docs/en-GB/bundle_optimization.md +58 -25
  83. package/docs/en-GB/configuration.md +10 -10
  84. package/docs/en-GB/interest_of_intlayer.md +24 -22
  85. package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
  86. package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
  87. package/docs/en-GB/intlayer_with_tanstack.md +5 -3
  88. package/docs/en-GB/live-sync.md +4 -0
  89. package/docs/en-GB/lsp.md +109 -170
  90. package/docs/en-GB/readme.md +24 -24
  91. package/docs/es/bundle_optimization.md +58 -25
  92. package/docs/es/configuration.md +10 -10
  93. package/docs/es/interest_of_intlayer.md +24 -22
  94. package/docs/es/intlayer_with_svelte_kit.md +1 -1
  95. package/docs/es/intlayer_with_tanstack+solid.md +5 -3
  96. package/docs/es/intlayer_with_tanstack.md +5 -3
  97. package/docs/es/live-sync.md +4 -0
  98. package/docs/es/lsp.md +114 -175
  99. package/docs/es/readme.md +24 -24
  100. package/docs/fr/bundle_optimization.md +58 -25
  101. package/docs/fr/configuration.md +10 -10
  102. package/docs/fr/interest_of_intlayer.md +24 -22
  103. package/docs/fr/intlayer_with_svelte_kit.md +1 -1
  104. package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
  105. package/docs/fr/intlayer_with_tanstack.md +5 -3
  106. package/docs/fr/live-sync.md +4 -0
  107. package/docs/fr/lsp.md +110 -171
  108. package/docs/fr/readme.md +24 -24
  109. package/docs/hi/bundle_optimization.md +58 -25
  110. package/docs/hi/configuration.md +10 -10
  111. package/docs/hi/interest_of_intlayer.md +24 -22
  112. package/docs/hi/intlayer_with_express.md +1 -1
  113. package/docs/hi/intlayer_with_svelte_kit.md +1 -1
  114. package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
  115. package/docs/hi/intlayer_with_tanstack.md +5 -3
  116. package/docs/hi/live-sync.md +4 -0
  117. package/docs/hi/lsp.md +113 -174
  118. package/docs/hi/readme.md +24 -24
  119. package/docs/id/bundle_optimization.md +58 -25
  120. package/docs/id/configuration.md +10 -10
  121. package/docs/id/interest_of_intlayer.md +24 -22
  122. package/docs/id/intlayer_with_svelte_kit.md +1 -1
  123. package/docs/id/intlayer_with_tanstack+solid.md +5 -3
  124. package/docs/id/intlayer_with_tanstack.md +5 -3
  125. package/docs/id/live-sync.md +4 -0
  126. package/docs/id/lsp.md +113 -174
  127. package/docs/id/readme.md +24 -24
  128. package/docs/it/bundle_optimization.md +58 -25
  129. package/docs/it/configuration.md +10 -10
  130. package/docs/it/interest_of_intlayer.md +24 -22
  131. package/docs/it/intlayer_with_svelte_kit.md +1 -1
  132. package/docs/it/intlayer_with_tanstack+solid.md +5 -3
  133. package/docs/it/intlayer_with_tanstack.md +5 -3
  134. package/docs/it/live-sync.md +4 -0
  135. package/docs/it/lsp.md +115 -176
  136. package/docs/it/readme.md +24 -24
  137. package/docs/ja/bundle_optimization.md +58 -25
  138. package/docs/ja/configuration.md +10 -10
  139. package/docs/ja/interest_of_intlayer.md +24 -22
  140. package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
  141. package/docs/ja/intlayer_with_tanstack.md +5 -3
  142. package/docs/ja/live-sync.md +4 -0
  143. package/docs/ja/lsp.md +113 -174
  144. package/docs/ja/readme.md +24 -24
  145. package/docs/ko/bundle_optimization.md +58 -25
  146. package/docs/ko/configuration.md +10 -10
  147. package/docs/ko/interest_of_intlayer.md +24 -22
  148. package/docs/ko/intlayer_with_svelte_kit.md +1 -1
  149. package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
  150. package/docs/ko/intlayer_with_tanstack.md +5 -3
  151. package/docs/ko/live-sync.md +4 -0
  152. package/docs/ko/lsp.md +112 -173
  153. package/docs/ko/readme.md +24 -24
  154. package/docs/nl/bundle_optimization.md +58 -25
  155. package/docs/nl/configuration.md +10 -10
  156. package/docs/nl/interest_of_intlayer.md +24 -22
  157. package/docs/pl/bundle_optimization.md +58 -25
  158. package/docs/pl/configuration.md +10 -10
  159. package/docs/pl/interest_of_intlayer.md +4 -2
  160. package/docs/pl/intlayer_with_svelte_kit.md +1 -1
  161. package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
  162. package/docs/pl/intlayer_with_tanstack.md +5 -3
  163. package/docs/pl/live-sync.md +4 -0
  164. package/docs/pl/lsp.md +115 -176
  165. package/docs/pl/readme.md +24 -24
  166. package/docs/pt/bundle_optimization.md +58 -24
  167. package/docs/pt/configuration.md +10 -10
  168. package/docs/pt/interest_of_intlayer.md +24 -22
  169. package/docs/pt/intlayer_with_svelte_kit.md +1 -1
  170. package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
  171. package/docs/pt/intlayer_with_tanstack.md +5 -3
  172. package/docs/pt/live-sync.md +4 -0
  173. package/docs/pt/lsp.md +113 -174
  174. package/docs/pt/readme.md +24 -24
  175. package/docs/ru/bundle_optimization.md +58 -25
  176. package/docs/ru/configuration.md +10 -10
  177. package/docs/ru/interest_of_intlayer.md +24 -22
  178. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  179. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  180. package/docs/ru/intlayer_with_svelte_kit.md +1 -1
  181. package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
  182. package/docs/ru/intlayer_with_tanstack.md +5 -3
  183. package/docs/ru/live-sync.md +4 -0
  184. package/docs/ru/lsp.md +112 -173
  185. package/docs/ru/readme.md +24 -24
  186. package/docs/tr/bundle_optimization.md +58 -25
  187. package/docs/tr/configuration.md +10 -10
  188. package/docs/tr/interest_of_intlayer.md +24 -22
  189. package/docs/tr/intlayer_with_svelte_kit.md +1 -1
  190. package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
  191. package/docs/tr/intlayer_with_tanstack.md +5 -3
  192. package/docs/tr/live-sync.md +4 -0
  193. package/docs/tr/lsp.md +113 -174
  194. package/docs/tr/readme.md +24 -24
  195. package/docs/uk/bundle_optimization.md +58 -25
  196. package/docs/uk/configuration.md +10 -10
  197. package/docs/uk/interest_of_intlayer.md +4 -2
  198. package/docs/uk/intlayer_with_svelte_kit.md +1 -1
  199. package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
  200. package/docs/uk/intlayer_with_tanstack.md +5 -3
  201. package/docs/uk/live-sync.md +4 -0
  202. package/docs/uk/lsp.md +113 -174
  203. package/docs/uk/per_locale_file.md +1 -1
  204. package/docs/uk/readme.md +24 -24
  205. package/docs/ur/bundle_optimization.md +58 -25
  206. package/docs/ur/configuration.md +10 -10
  207. package/docs/ur/interest_of_intlayer.md +24 -22
  208. package/docs/vi/bundle_optimization.md +58 -25
  209. package/docs/vi/configuration.md +10 -10
  210. package/docs/vi/interest_of_intlayer.md +24 -22
  211. package/docs/vi/intlayer_with_svelte_kit.md +1 -1
  212. package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
  213. package/docs/vi/intlayer_with_tanstack.md +5 -3
  214. package/docs/vi/live-sync.md +4 -0
  215. package/docs/vi/lsp.md +115 -176
  216. package/docs/vi/readme.md +24 -24
  217. package/docs/zh/bundle_optimization.md +58 -25
  218. package/docs/zh/configuration.md +10 -10
  219. package/docs/zh/interest_of_intlayer.md +24 -22
  220. package/docs/zh/intlayer_with_svelte_kit.md +1 -1
  221. package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
  222. package/docs/zh/intlayer_with_tanstack.md +5 -3
  223. package/docs/zh/live-sync.md +4 -0
  224. package/docs/zh/lsp.md +113 -174
  225. package/docs/zh/readme.md +21 -21
  226. package/docs/zh-TW/bundle_optimization.md +58 -25
  227. package/docs/zh-TW/interest_of_intlayer.md +24 -22
  228. package/package.json +7 -7
  229. package/src/common.ts +39 -2
  230. package/src/generated/blog.entry.ts +39 -7
  231. package/src/generated/docs.entry.ts +39 -7
  232. package/src/generated/frequentQuestions.entry.ts +39 -7
  233. 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: Оптимізація розміру бандлу та продуктивності i18n
5
5
  description: Зменште розмір бандлу вашого застосунку завдяки оптимізації контенту інтернаціоналізації (i18n). Дізнайтеся, як використовувати tree shaking та ліниве завантаження (lazy loading) для словників за допомогою 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` та `minify` тепер працюють у Next.js через `@intlayer/swc` — файл `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: "Додано `intlayerPurgeBabelPlugin` та `intlayerMinifyBabelPlugin` для Babel/Webpack; уточнено порядок конвеєра плагінів"
@@ -191,12 +197,14 @@ Intlayer використовує **підхід на рівні компоне
191
197
 
192
198
  Ці плагіни використовуються безпосередньо в `babel.config.js` для налаштувань на базі Webpack (Next.js із Babel, CRA, кастомний Webpack тощо).
193
199
 
200
+ Таблиця нижче перелічує їх у потрібному порядку конвеєра (у тому самому порядку, в якому вони мають бути в `babel.config.js`):
201
+
194
202
  | Плагін | Що він робить |
195
203
  | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Сканує файли `.content.ts` та записує зібрані словники до папки `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Переписує `useIntlayer('key')` на `useDictionary(hash)` та інжектить (вставляє) відповідний `import` словника |
198
205
  | `intlayerPurgeBabelPlugin` | Сканує всі файли з кодом та видаляє **невикористані поля контенту** зі скомпільованих словників `.intlayer/**/*.json` |
199
206
  | `intlayerMinifyBabelPlugin` | **Перейменовує ключі полів контенту** на короткі алфавітні псевдоніми (наприклад, `title` → `a`) у JSON-файлах та у вихідному коді |
207
+ | `intlayerOptimizeBabelPlugin` | Переписує `useIntlayer('key')` на `useDictionary(hash)` та інжектить (вставляє) відповідний `import` словника |
200
208
 
201
209
  > **Порядок плагінів має значення.** У файлі `babel.config.js` плагіни `purge` та `minify` мають з'являтися **перед** плагіном `optimize`. Оскільки `optimize` замінює `useIntlayer('key')` на непрозорий (opaque) виклик `useDictionary(hash)`, він стирає інформацію про ключ словника. Але саме ця інформація потрібна на етапах `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 @@ Intlayer використовує **підхід на рівні компоне
220
228
  | Dictionary minify | Аналогічно до етапу запису JSON плагіна `intlayerMinifyBabelPlugin` |
221
229
  | Babel transform | Аналогічно до перейменування у вихідному коді плагіном `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Плагін SWC (`@intlayer/swc`)
232
+
233
+ Користувачі Next.js **також ніколи не налаштовують це напряму**. Починаючи з **v9.2.1**, `withIntlayer()` у `next.config.ts` виконує весь конвеєр — purge, мініфікацію та переписування імпортів — спираючись лише на прапорці `build.purge` і `build.minify`.
234
+
235
+ Роботу поділено на дві частини, бо Wasm-плагін SWC перетворює по одному файлу за раз і не має доступу до файлової системи:
236
+
237
+ | Прохід | Де виконується | Що робить |
238
+ | :---------------------------------------------------- | :------------------------------- | :--------------------------------------------------------------------------------------------------- |
239
+ | Аналіз використання + purge/мініфікація JSON | Node, усередині `withIntlayer()` | Читає кожен вихідний файл компонента, переписує `.intlayer/**/*.json`, формує таблиці перейменування |
240
+ | Переписування вихідного коду (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Застосовує таблиці перейменування до відповідних звернень до властивостей у вашому коді |
241
+ | Переписування імпортів (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Те саме, що `intlayerOptimizeBabelPlugin` |
242
+
243
+ Визначення того, _які_ поля не використовуються і _який_ псевдонім отримає кожне з них, потребує стану між файлами та файлового вводу-виводу, тож ця половина виконується в Node; плагін SWC отримує лише готові таблиці.
244
+
223
245
  ## Налаштування за платформами
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Intlayer використовує **підхід на рівні компоне
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js потребує плагіна `@intlayer/swc` для етапу оптимізації (перезапису імпорту), оскільки Next.js використовує SWC для збірки.
252
+ Next.js потребує плагіна `@intlayer/swc`, оскільки Next.js використовує SWC для збірок. Починаючи з **v9.2.1** цей єдиний пакет охоплює весь конвеєр — оптимізацію (переписування імпортів), purge та мініфікацію.
231
253
 
232
254
  > Цей плагін не встановлюється автоматично, адже плагіни SWC для Next.js ще мають експериментальний статус. У майбутньому це може змінитися.
233
255
 
256
+ > **Next.js 16.1.0 — мінімальна версія.** Це перший реліз, побудований на прямо сумісному ABI Wasm-плагінів SWC; більш ранні релізи відхиляють плагін. `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` під час збирання налаштувань плагінів, Babel-плагіни запускатимуться як пре-пас (попередня обробка) перед SWC.
292
+ Проходи **purge та мініфікації** (видалення й перейменування полів) не потребують ані додаткового пакета, ані `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-файлах та вихідному коді
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Примітка: intlayerOptimizeBabelPlugin тут НЕ потрібен, тому що
290
- // @intlayer/swc вже відповідає за переписування useIntlayer → useDictionary.
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
+ > Використовуйте асинхронний `withIntlayer`, а не `withIntlayerSync`. Синхронний варіант не запускає конвеєр аналізу, тож purge і мініфікація з ним не діють.
319
+
320
+ > Purge і мініфікація виконуються лише під час `next build` — конвеєр оптимізації вимкнено під час `next dev`.
321
+
322
+ > Вони також вимикаються, коли налаштовано викликачів з адаптерів сумісності (`swcExtraCallers`, які задають пакети сумісності, як-от `@intlayer/next-intl` чи `@intlayer/react-i18next`): ці місця виклику невидимі для аналізатора використання, тож purge видалив би поля, які код усе ще читає. Переписування імпортів залишається активним.
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
  > Мініфікація пропускається (skipped), коли `optimize` становить `false`, або коли `editor.enabled` становить `true` (візуальний редактор потребує оригінальних імен полів для їх редагування).
449
480
 
481
+ > У Next.js мініфікація також пропускається, коли `@intlayer/swc` не встановлено або його неможливо завантажити (Next.js нижче 16.1.0). Плагін — це та половина, що переписує звернення у вихідному коді, тож перейменування словників без нього залишило б ваш код таким, що читає імена полів, яких більше немає.
482
+
450
483
  > Мініфікація також пропускається для словників, що завантажуються з `importMode: 'fetch'`, оскільки їхні JSON-дані постачаються з віддаленого API з оригінальними іменами полів — перейменування ключів на боці клієнта порушить зв'язок сервер/клієнт.
451
484
 
452
485
  ### Очищення (видалення невикористаних полів)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > Очищення пропускається, коли `optimize` становить `false`, або коли `editor.enabled` становить `true`.
511
+ > Очищення пропускається, коли `optimize` становить `false`, або коли `editor.enabled` становить `true`. У Next.js його додатково пропускають, коли `@intlayer/swc` недоступний і коли налаштовано викликачів з адаптерів сумісності.
479
512
 
480
513
  > Очищення також консервативно пропускається, коли вихідний файл не може бути розпарсений, або коли результат виклику `useIntlayer` присвоюється змінній і далі передається способами, які статичний аналізатор не може відстежити (наприклад, поширюється у вигляді spread-об'єкта чи передається як prop без деструктуризації). В таких випадках весь словник зберігається повністю.
481
514
 
@@ -404,7 +404,7 @@ const config: IntlayerConfig = {
404
404
  ai: {
405
405
  /**
406
406
  * Використовуваний провайдер AI.
407
- * Варіанти: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
407
+ * Варіанти: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
408
408
  * За замовчуванням: 'openai'
409
409
  */
410
410
  provider: "openai",
@@ -1032,15 +1032,15 @@ Intlayer підтримує широкий спектр провайдерів A
1032
1032
  - **Together.ai**
1033
1033
  - **LM Studio**
1034
1034
 
1035
- | Поле | Опис | Тип | За замовчуванням | Приклад | Примітки |
1036
- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1037
- | `provider` | Провайдер, який використовуватиметься для функцій AI в Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | Різні провайдери вимагають різних API-ключів та мають різні ціни. |
1038
- | `model` | Модель AI, яка використовуватиметься для функцій AI. | `string` | Немає | `'gpt-4o-2024-11-20'` | Конкретні моделі залежать від провайдера. |
1039
- | `temperature` | Контролює випадковість відповідей AI. | `number` | Немає | `0.1` | Вища температура = креативніші та менш надійні відповіді. |
1040
- | `apiKey` | Ваш API-ключ для вибраного провайдера. | `string` | Немає | `process.env.OPENAI_API_KEY` | Повинно зберігатися в секреті; використовуйте змінні середовища. |
1041
- | `applicationContext` | Додатковий контекст про ваш додаток, щоб допомогти AI генерувати точніші переклади (домен, цільова аудиторія, тон, термінологія). | `string` | Немає | `'мій власний контекст додатка'` | Може використовуватися для додавання правил (наприклад: `"Ви не повинні перекладати свої URL"` ). |
1042
- | `baseURL` | Базовий URL для AI API. | `string` | Немає | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Може вказувати на локальні або власні кінцеві точки AI API. |
1043
- | `dataSerialization` | Формат серіалізації даних для функцій AI. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: за замовчуванням, надійний; використовує більше токенів.<br/>• `'toon'`: менше токенів, менш стабільно.<br/>• Передає моделі контекст як додатковий параметр (reasoning effort тощо). |
1035
+ | Поле | Опис | Тип | За замовчуванням | Приклад | Примітки |
1036
+ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1037
+ | `provider` | Провайдер, який використовуватиметься для функцій AI в Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` &#124; <br/> `'moonshotai'` | `undefined` | `'anthropic'` | Різні провайдери вимагають різних API-ключів та мають різні ціни. |
1038
+ | `model` | Модель AI, яка використовуватиметься для функцій AI. | `string` | Немає | `'gpt-4o-2024-11-20'` | Конкретні моделі залежать від провайдера. |
1039
+ | `temperature` | Контролює випадковість відповідей AI. | `number` | Немає | `0.1` | Вища температура = креативніші та менш надійні відповіді. |
1040
+ | `apiKey` | Ваш API-ключ для вибраного провайдера. | `string` | Немає | `process.env.OPENAI_API_KEY` | Повинно зберігатися в секреті; використовуйте змінні середовища. |
1041
+ | `applicationContext` | Додатковий контекст про ваш додаток, щоб допомогти AI генерувати точніші переклади (домен, цільова аудиторія, тон, термінологія). | `string` | Немає | `'мій власний контекст додатка'` | Може використовуватися для додавання правил (наприклад: `"Ви не повинні перекладати свої URL"` ). |
1042
+ | `baseURL` | Базовий URL для AI API. | `string` | Немає | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Може вказувати на локальні або власні кінцеві точки AI API. |
1043
+ | `dataSerialization` | Формат серіалізації даних для функцій AI. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: за замовчуванням, надійний; використовує більше токенів.<br/>• `'toon'`: менше токенів, менш стабільно.<br/>• Передає моделі контекст як додатковий параметр (reasoning effort тощо). |
1044
1044
 
1045
1045
  ---
1046
1046
 
@@ -211,7 +211,7 @@ export const ComponentExample = () => {
211
211
  Цей підхід дозволяє вам:
212
212
 
213
213
  1. **Підвищити швидкість розробки**
214
- - `.content.{{ts|mjs|cjs|json}}` файли можна створити за допомогою розширення VSCode
214
+ - `.content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml}` файли можна створити за допомогою розширення VSCode
215
215
  - Інструменти автодоповнення AI в вашій IDE (такі як GitHub Copilot) можуть допомогти вам оголосити ваш контент, зменшуючи копіювання/вставлення
216
216
 
217
217
  2. **Очистити ваш codebase**
@@ -254,7 +254,7 @@ export const ComponentExample = () => {
254
254
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **Переклад на основі штучного інтелекту**<br><br>Перетворіть ваш веб-сайт на 231 мову одним кліком, використовуючи розширені інструменти перекладу на основі штучного інтелекту Intlayer з вашим власним постачальником штучного інтелекту/ключем API. <br><br> - [Інтеграція CI/CD](https://intlayer.org/doc/concept/ci-cd) <br> - [CLI Intlayer](https://intlayer.org/doc/concept/cli) <br> - [Автоматичне заповнення](https://intlayer.org/doc/concept/auto-fill) |
255
255
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **Інтеграція MCP Server**<br><br>Надає MCP (Model Context Protocol) сервер для автоматизації IDE, що дозволяє безперешкодне управління контентом та робочі процеси i18n безпосередньо в вашому середовищі розробки. <br><br> - [MCP Server](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/mcp_server.md) |
256
256
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **Розширення VSCode**<br><br>Intlayer надає розширення VSCode для допомоги в управлінні контентом та перекладами, побудові ваших словників, перекладі контенту та багато іншого. <br><br> - [Розширення VSCode](https://intlayer.org/doc/vs-code-extension) |
257
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **Взаємосумісність**<br><br>Дозволяє взаємосумісність з react-i18next, next-i18next, next-intl та react-intl. <br><br> - [Intlayer та react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer та next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer та next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
257
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **Взаємосумісність**<br><br>Дозволяє взаємосумісність з react-i18next, next-i18next, next-intl та react-intl. <br><br> - [Intlayer та react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer та next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer та next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) <br> - [Адаптери сумісності Intlayer](https://intlayer.org/doc/compatibility) |
258
258
  | Тестування відсутніх перекладів (CLI/CI) | ✅ CLI: npx intlayer content test (дружній до CI аудит) |
259
259
 
260
260
  ## Порівняння Intlayer з іншими рішеннями
@@ -294,3 +294,5 @@ export const ComponentExample = () => {
294
294
  `intlayer` також може допомогти в управлінні просторами назв `react-intl`, `react-i18next`, `next-intl`, `next-i18next` та `vue-i18n`.
295
295
 
296
296
  За допомогою `intlayer` ви можете оголосити свій вміст у форматі вашої улюбленої бібліотеки i18n, і intlayer згенерує простори назв у вибраному вами місці (наприклад: `/messages/{{locale}}/{{namespace}}.json`).
297
+
298
+ Якщо ви хочете й надалі використовувати API вашої поточної бібліотеки i18n, `intlayer` також надає **адаптери сумісності (compat adapters)**: пакети, що надають точно такий самий API, як `react-i18next`, `next-intl`, `react-intl`, `vue-i18n` та інші, але з вмістом зі словників Intlayer. Це дозволяє мігрувати поступово, не переписуючи код. Див. [документацію адаптерів сумісності](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md).
@@ -409,7 +409,7 @@ export const getLocale = (event: RequestEvent): Locale => {
409
409
  };
410
410
  ```
411
411
 
412
- > `getLocaleFromStorage` перевірятиме локаль у заголовку або cookie залежно від вашої конфігурації. Див. розділ [Configuration](https://intlayer.org/doc/configuration) для детальнішої інформації.
412
+ > `getLocaleFromStorage` перевірятиме локаль у заголовку або cookie залежно від вашої конфігурації. Див. розділ [Configuration](https://intlayer.org/doc/concept/configuration) для детальнішої інформації.
413
413
 
414
414
  > Функція `localeDetector` обробляє заголовок `Accept-Language` і повертає найкраще співпадіння.
415
415
 
@@ -253,19 +253,21 @@ import {
253
253
  HeadContent,
254
254
  Scripts,
255
255
  createRootRouteWithContext,
256
+ getRouteApi,
256
257
  } from "@tanstack/solid-router";
257
258
  import { HydrationScript } from "solid-js/web";
258
259
  import { Suspense, type ParentComponent } from "solid-js";
259
260
  import { IntlayerProvider } from "solid-intlayer";
260
261
  import { defaultLocale, getHTMLTextDir } from "intlayer";
261
- import { Route as LocaleRoute } from "./{-$locale}/route";
262
+
263
+ const localeRoute = getRouteApi("/{-$locale}");
262
264
 
263
265
  export const Route = createRootRouteWithContext()({
264
266
  shellComponent: RootComponent,
265
267
  });
266
268
 
267
269
  const RootComponent: ParentComponent = (props) => {
268
- const params = LocaleRoute.useParams();
270
+ const params = localeRoute.useParams();
269
271
  const locale = params()?.locale ?? defaultLocale;
270
272
 
271
273
  return (
@@ -550,7 +552,7 @@ export default LocaleSwitcher;
550
552
 
551
553
  ```tsx fileName="src/routes/__root.tsx"
552
554
  const RootComponent: ParentComponent = (props) => {
553
- const params = LocaleRoute.useParams();
555
+ const params = localeRoute.useParams();
554
556
  const locale = params()?.locale ?? defaultLocale;
555
557
 
556
558
  return (
@@ -270,13 +270,15 @@ export default config;
270
270
  ```tsx fileName="src/routes/__root.tsx"
271
271
  import {
272
272
  createRootRouteWithContext,
273
+ getRouteApi,
273
274
  HeadContent,
274
275
  Scripts,
275
276
  } from "@tanstack/react-router";
276
277
  import { defaultLocale, getHTMLTextDir } from "intlayer";
277
278
  import { type ReactNode } from "react";
278
279
  import { IntlayerProvider } from "react-intlayer";
279
- import { Route as LocaleRoute } from "./{-$locale}/route";
280
+
281
+ const localeRoute = getRouteApi("/{-$locale}");
280
282
 
281
283
  export const Route = createRootRouteWithContext<{}>()({
282
284
  head: () => ({
@@ -298,7 +300,7 @@ export const Route = createRootRouteWithContext<{}>()({
298
300
  });
299
301
 
300
302
  function RootDocument({ children }: { children: ReactNode }) {
301
- const params = LocaleRoute.useParams();
303
+ const params = localeRoute.useParams();
302
304
  const locale = params?.locale ?? defaultLocale;
303
305
 
304
306
  return (
@@ -631,7 +633,7 @@ export const LocaleSwitcher: FC = () => {
631
633
 
632
634
  ```tsx fileName="src/routes/__root.tsx"
633
635
  function RootDocument({ children }: { children: ReactNode }) {
634
- const params = LocaleRoute.useParams();
636
+ const params = localeRoute.useParams();
635
637
  const locale = params?.locale ?? defaultLocale;
636
638
 
637
639
  return (
@@ -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