@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
@@ -672,16 +672,16 @@ routing: {
672
672
 
673
673
  কুকিতে স্টোরেজ ব্যবহার করার সময় অতিরিক্ত বৈশিষ্ট্য সেট করা যেতে পারে:
674
674
 
675
- | ফিল্ড | বর্ণনা | টাইপ |
676
- | ---------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
677
- | `name` | কুকির নাম। ডিফল্ট: `'INTLAYER_LOCALE'` | `string` |
678
- | `domain` | কুকি ডোমেইন। ডিফল্ট: `undefined` | `string` |
679
- | `path` | কুকি পাথ। ডিফল্ট: `undefined` | `string` |
680
- | `secure` | HTTPS প্রয়োজন। ডিফল্ট: `undefined` | `boolean` |
681
- | `httpOnly` | HTTP-only ফ্ল্যাগ। ডিফল্ট: `undefined` | `boolean` |
682
- | `sameSite` | SameSite পলিসি। | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
683
- | `expires` | মেয়াদের তারিখ বা দিনের সংখ্যা। ডিফল্ট: `undefined` | `Date` &#124; <br/> `number` |
684
- | `maxAge` | তৈরি করার পর থেকে সেকেন্ডে জীবনকাল। এটি `expires` এর চেয়ে বেশি অগ্রাধিকার পায়। ডিফল্ট: `undefined` | `number` |
675
+ | ফিল্ড | বর্ণনা | টাইপ |
676
+ | ---------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
677
+ | `name` | কুকির নাম। ডিফল্ট: `'INTLAYER_LOCALE'` | `string` |
678
+ | `domain` | কুকি ডোমেইন। ডিফল্ট: `undefined` | `string` |
679
+ | `path` | কুকি পাথ। ডিফল্ট: `undefined` | `string` |
680
+ | `secure` | HTTPS প্রয়োজন। ডিফল্ট: `undefined` | `boolean` |
681
+ | `httpOnly` | HTTP-only ফ্ল্যাগ। ডিফল্ট: `undefined` | `boolean` |
682
+ | `sameSite` | SameSite পলিসি। | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
683
+ | `expires` | একটি `number` হলো তৈরি করার পর থেকে দিনের সংখ্যা; একটি `Date` (বা ISO তারিখ স্ট্রিং) হলো একটি পরম মেয়াদ শেষ। ডিফল্ট: `undefined` | `Date` &#124; <br/> `number` &#124; <br/> `string` |
684
+ | `maxAge` | তৈরি করার পর থেকে সেকেন্ডে জীবনকাল। এটি `expires` এর চেয়ে বেশি অগ্রাধিকার পায়। ডিফল্ট: `undefined` | `number` |
685
685
 
686
686
  #### স্টোরেজ বৈশিষ্ট্য (Storage Attributes)
687
687
 
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-04-08
4
- title: Optimalizace velikosti bundle i18n a výkonu
5
- description: Snižte velikost bundle vaší aplikace optimalizací obsahu internacionalizace (i18n). Naučte se využívat tree shaking a lazy loading pro slovníky s Intlayer.
3
+ updatedAt: 2026-06-07
4
+ title: Optimalizace Velikosti Bundle & Výkonu i18n
5
+ description: Zmenšete velikost svého aplikačního bundlu optimalizací obsahu pro internacionalizaci (i18n). Zjistěte, jak v Intlayer využít tree shaking a líné načítání (lazy loading) pro slovníky.
6
6
  keywords:
7
- - Optimalizace bundle
8
- - Automatizace obsahu
9
- - Dynamický obsah
7
+ - Optimalizace Bundlu
8
+ - Automatizace Obsahu
9
+ - Dynamický Obsah
10
10
  - Intlayer
11
11
  - Next.js
12
12
  - JavaScript
@@ -16,33 +16,36 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 8.12.0
20
+ date: 2026-06-07
21
+ changes: "Přidány `intlayerPurgeBabelPlugin` a `intlayerMinifyBabelPlugin` pro Babel/Webpack; vyjasnění fungování pipeline pluginů"
19
22
  - version: 8.7.0
20
23
  date: 2026-04-08
21
- changes: "Přidány volby `minify` a `purge` do konfigurace buildu"
24
+ changes: "Přidány možnosti `minify` a `purge` do konfigurace sestavení (build)"
22
25
  ---
23
26
 
24
- # Optimalizace velikosti bundle i18n a výkonu
27
+ # Optimalizace Velikosti Bundle & Výkonu i18n
25
28
 
26
- Jednou z nejčastějších výzev u tradičních řešení i18n spoléhajících na JSON soubory je správa velikosti obsahu. Pokud vývojáři ručně nerozdělí obsah do jmenných prostorů (namespaces), uživatelé často končí stahováním překladů pro každou stránku a potenciálně pro každý jazyk jen proto, aby si zobrazili jednu stránku.
29
+ Jednou z nejčastějších výzev u tradičních i18n řešení spoléhajících na JSON soubory je správa velikosti obsahu. Pokud vývojáři ručně nerozdělují obsah do jmenných prostorů (namespaces), uživatelé často skončí stahováním překladů pro každou stránku a potenciálně pro každý jazyk, jen aby si prohlédli jednu jedinou stránku.
27
30
 
28
- Například aplikace s 10 stránkami přeloženými do 10 jazyků může vést k tomu, že uživatel stahuje obsah 100 stránek, i když potřebuje pouze **jednu** (aktuální stránku v aktuálním jazyce). To vede k plýtvání šířkou pásma a pomalejšímu načítání.
31
+ Například aplikace s 10 stránkami přeloženými do 10 jazyků může vést k tomu, že si uživatel stáhne obsah v rozsahu 100 stránek, i když ve skutečnosti potřebuje pouze **jednu** (aktuální stránku v aktuálním jazyce). To vede k plýtvání šířkou pásma a delším časům načítání.
29
32
 
30
- **Intlayer řeší tento problém prostřednictvím optimalizace v době sestavení (build-time optimization).** Analyzuje váš kód, aby zjistil, které slovníky jsou skutečně použity pro jednotlivé komponenty, a do vašeho bundle znovu vloží pouze nezbytný obsah.
33
+ **Intlayer řeší tento problém pomocí optimalizace v čase sestavení (build-time).** Analyzuje váš kód, detekuje, které slovníky se skutečně používají u konkrétní komponenty, a vloží do vašeho bundlu pouze tento nezbytný obsah.
31
34
 
32
35
  ## Obsah
33
36
 
34
37
  <TOC />
35
38
 
36
- ## Skenování bundle
39
+ ## Analyzujte svůj bundle
37
40
 
38
- Analýza vašeho bundle je prvním krokem k identifikaci "těžkých" JSON souborů a příležitostí pro rozdělení kódu (code-splitting). Tyto nástroje generují vizuální mapu (treemap) zkompilovaného kódu vaší aplikace, což vám umožní přesně vidět, které knihovny zabírají nejvíce místa.
41
+ Analýza bundlu je prvním krokem k odhalení těžkých JSON souborů a příležitostí k rozdělení kódu (code-splitting). Tyto nástroje generují vizuální stromovou mapu kompilovaného kódu vaší aplikace, což vám umožňuje přesně vidět, které knihovny zabírají nejvíce místa.
39
42
 
40
43
  <Tabs>
41
44
  <Tab value="vite">
42
45
 
43
46
  ### Vite / Rollup
44
47
 
45
- Vite využívá Rollup pod kapotou. Plugin `rollup-plugin-visualizer` generuje interaktivní HTML soubor zobrazující velikost každého modulu ve vašem grafu.
48
+ Vite využívá Rollup na pozadí. Plugin `rollup-plugin-visualizer` vygeneruje interaktivní HTML soubor zobrazující velikost každého modulu ve vašem grafu.
46
49
 
47
50
  ```bash
48
51
  npm install -D rollup-plugin-visualizer
@@ -55,7 +58,7 @@ import { visualizer } from "rollup-plugin-visualizer";
55
58
  export default defineConfig({
56
59
  plugins: [
57
60
  visualizer({
58
- open: true, // Automaticky otevřít zprávu v prohlížeči
61
+ open: true, // Automaticky otevře report ve vašem prohlížeči
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
- Pokud v Next.js používáte výchozí bundler Webpack, použijte oficiální analyzátor bundle. Aktivujte jej nastavením proměnné prostředí během sestavení.
98
+ Pokud používáte výchozí Webpack bundler v Next.js, použijte oficiální bundle analyzer. Spustíte jej nastavením proměnné prostředí během sestavování.
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
  ### Standardní Webpack
133
136
 
134
- Pro Create React App (ejected), Angular nebo vlastní nastavení Webpacku použijte průmyslový standard `webpack-bundle-analyzer`.
137
+ Pro Create React App (ejected), Angular nebo vlastní konfigurace Webpack použijte průmyslový standard `webpack-bundle-analyzer`.
135
138
 
136
139
  ```bash packageManager='npm'
137
140
  npm install -D webpack-bundle-analyzer
@@ -168,27 +171,64 @@ export default {
168
171
 
169
172
  ## Jak to funguje
170
173
 
171
- Intlayer využívá **přístup na úrovni komponent**. Na rozdíl od globálních JSON souborů je váš obsah definován vedle vašich komponent nebo uvnitř nich. Během procesu sestavení Intlayer:
174
+ Intlayer používá **přístup na úrovni komponent (per-component)**. Na rozdíl od globálních JSON souborů se váš obsah definuje společně s komponentami nebo přímo v nich. Během procesu sestavování (build) Intlayer provede následující:
172
175
 
173
- 1. **Analyzuje** váš kód, aby našel volání `useIntlayer`.
174
- 2. **Sestaví** odpovídající obsah slovníku.
175
- 3. **Nahradí** volání `useIntlayer` optimalizovaným kódem na základě vaší konfigurace.
176
+ 1. **Analyzuje** váš kód, aby vyhledal volání `useIntlayer`.
177
+ 2. **Sestaví** (Build) příslušný obsah ze slovníků.
178
+ 3. **Nahradí** volání `useIntlayer` optimalizovaným kódem v závislosti na vaší konfiguraci.
176
179
 
177
- To zajišťuje, že:
180
+ Tím zajistí, že:
178
181
 
179
- - Pokud komponenta není importována, její obsah není zahrnut do bundle (Dead Code Elimination).
182
+ - Pokud komponenta není importována, její obsah se do bundlu nezahrne (Odstranění mrtvého kódu / Dead Code Elimination).
180
183
  - Pokud je komponenta načítána líně (lazy-loaded), její obsah je také načítán líně.
181
184
 
182
- ## Nastavení podle platformy
185
+ ## Referenční příručka k pluginům
186
+
187
+ Optimalizace sestavení pomocí Intlayer je rozdělena do několika samostatných pluginů, z nichž každý má jedinou zodpovědnost. Pochopení jejich funkcí zabrání zmatkům při jejich nastavování.
188
+
189
+ ### Babel pluginy (`@intlayer/babel`)
190
+
191
+ Tyto pluginy se používají přímo v `babel.config.js` pro sestavení založená na Webpacku (Next.js s Babelem, CRA, vlastní Webpack atd.).
192
+
193
+ | Plugin | K čemu slouží |
194
+ | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
195
+ | `intlayerExtractBabelPlugin` | Prohledá soubory `.content.ts` a zapíše zkompilované slovníky do složky `.intlayer/` |
196
+ | `intlayerOptimizeBabelPlugin` | Přepíše `useIntlayer('key')` na `useDictionary(hash)` a vloží odpovídající `import` slovníku |
197
+ | `intlayerPurgeBabelPlugin` | Prohledá všechny zdrojové soubory a odstraní **nepoužívaná pole obsahu** z kompilovaných slovníků `.intlayer/**/*.json` |
198
+ | `intlayerMinifyBabelPlugin` | **Přejmenuje klíče polí obsahu** na krátké abecední aliasy (např. `title` → `a`) jak v JSON souborech, tak ve zdrojovém kódu |
199
+
200
+ > **Záleží na pořadí pluginů.** Ve vašem `babel.config.js` musí pluginy pro purge a minify následovat **před** optimalizačním (optimize) pluginem. Krok optimalizace totiž nahrazuje volání `useIntlayer('key')` neprůhledným `useDictionary(hash)`, což odstraní informaci o klíči slovníku. Tuto informaci potřebují pluginy purge a minify k identifikaci použitých polí.
201
+
202
+ Každý Babel plugin má odpovídajícího pomocníka (options helper), který při načítání konfigurace jednou přečte váš soubor `intlayer.config.ts` a vrátí předem vyřešené hodnoty:
203
+
204
+ | Pomocník pro volby | Používá se s |
205
+ | :--------------------------- | :---------------------------- |
206
+ | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
207
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
208
+ | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
209
+ | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
210
+
211
+ ### Vite pluginy (`vite-intlayer`)
212
+
213
+ Uživatelé Vite **tyto pluginy nikdy nenastavují přímo**. Propojí se automaticky po volání `withIntlayer()` ve `vite.config.ts`. Příznaky (flags) `build.purge` a `build.minify` v konfiguraci `intlayer.config.ts` zajišťují odpovídající chování bez potřeby dodatečné registrace pluginů.
214
+
215
+ | Interní Vite plugin | Ekvivalentní chování |
216
+ | :------------------ | :----------------------------------------------------------------------------------------------------- |
217
+ | Usage analyzer | Stejné jako analytický průchod (analyse pass) `intlayerPurgeBabelPlugin` |
218
+ | Dictionary prune | Stejné jako zápis JSON pro `intlayerPurgeBabelPlugin` |
219
+ | Dictionary minify | Stejné jako zápis JSON pro `intlayerMinifyBabelPlugin` |
220
+ | Babel transform | Stejné jako přejmenování zdrojového kódu v `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
221
+
222
+ ## Nastavení podle platforem
183
223
 
184
224
  <Tabs>
185
225
  <Tab value="nextjs">
186
226
 
187
227
  ### Next.js
188
228
 
189
- Next.js vyžaduje plugin `@intlayer/swc` pro zpracování transformace, protože Next.js používá SWC pro sestavení.
229
+ Next.js využívá SWC pro sestavování, takže k průchodu pro optimalizaci (přepis importů) potřebuje plugin `@intlayer/swc`.
190
230
 
191
- > Tento plugin není nainstalován ve výchozím nastavení, protože SWC pluginy jsou pro Next.js stále experimentální. V budoucnu se to může změnit.
231
+ > Tento plugin se neinstaluje ve výchozím nastavení, jelikož SWC pluginy jsou pro Next.js zatím experimentální. V budoucnu se to může změnit.
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
- Po instalaci Intlayer automaticky rozpozná a použije plugin.
249
+ Po instalaci plugin Intlayer automaticky rozpozná a použije.
250
+
251
+ Pro **purge a minify** (odstranění polí a jejich přejmenování) nainstalujte ještě `@intlayer/babel` a přidejte Babel pluginy. Ačkoliv Next.js pro transformaci používá SWC, stále vyhodnocuje `babel.config.js` kvůli konfiguraci pluginů. Tím pádem Babel pluginy poběží jako přípravný krok před 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: odstraní nepoužívaná pole obsahu z .intlayer/**/*.json
269
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
270
+ // Minify: přejmenuje klíče polí v JSON + ve zdrojovém kódu
271
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
272
+ // Poznámka: intlayerOptimizeBabelPlugin zde NENÍ POTŘEBA, jelikož
273
+ // přepis useIntlayer → useDictionary řeší balíček @intlayer/swc.
274
+ ],
275
+ };
276
+ ```
210
277
 
211
278
  </Tab>
212
279
  <Tab value="vite">
213
280
 
214
281
  ### Vite
215
282
 
216
- Vite využívá plugin `@intlayer/babel`, který je součástí závislostí `vite-intlayer`. Optimalizace je ve výchozím nastavení povolena. Není třeba nic dalšího dělat.
283
+ Vite využívá plugin `@intlayer/babel`, který je zahrnut v závislostech u `vite-intlayer`. Kompletní pipeline optimalizace — přepis importů, purge a minify — je ve výchozím stavu aktivní a nevyžaduje žádnou další registraci pluginů.
284
+
285
+ Purge a minify zapnete nastavením odpovídajících příznaků v souboru `intlayer.config.ts`:
286
+
287
+ ```typescript fileName="intlayer.config.ts"
288
+ import type { IntlayerConfig } from "intlayer";
289
+
290
+ const config: IntlayerConfig = {
291
+ build: {
292
+ purge: true, // odstraní nepoužívaná pole obsahu z bundlovaného JSONu
293
+ minify: true, // přejmenuje klíče polí obsahu na krátké aliasy
294
+ },
295
+ };
296
+
297
+ export default config;
298
+ ```
217
299
 
218
300
  </Tab>
219
301
  <Tab value="webpack">
220
302
 
221
- ### Webpack
303
+ ### Webpack (a Next.js s Babelem)
222
304
 
223
- Chcete-li povolit optimalizaci bundle s Intlayer na Webpacku, musíte nainstalovat a nakonfigurovat příslušný plugin Babel (`@intlayer/babel`) nebo SWC (`@intlayer/swc`).
305
+ Nainstalujte `@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
+ Přidejte do `babel.config.js` všechny čtyři pluginy ve správném pořadí:
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: kompiluje .content.ts soubory → .intlayer/**/*.json
340
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
341
+
342
+ // Purge: odstraní nepoužívaná pole z .intlayer/**/*.json
343
+ // (čte hodnotu příznaku build.purge v intlayer.config.ts)
344
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
345
+
346
+ // Minify: přejmenuje klíče polí v JSON + zdrojovém kódu
347
+ // (čte hodnotu příznaku build.minify v intlayer.config.ts)
348
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
349
+
350
+ // Optimize: přepíše useIntlayer('key') → useDictionary(hash)
351
+ // Musí být poslední, protože vymaže klíč slovníku.
352
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
353
+ ],
249
354
  };
250
355
  ```
251
356
 
@@ -254,57 +359,62 @@ module.exports = {
254
359
 
255
360
  ## Konfigurace
256
361
 
257
- Způsob, jakým Intlayer optimalizuje váš bundle, můžete ovládat pomocí vlastnosti `build` ve vašem `intlayer.config.ts`.
362
+ Způsob optimalizace bundlu přes Intlayer můžete řídit pomocí vlastnosti `build` ve svém souboru `intlayer.config.ts`.
258
363
 
259
364
  ```typescript fileName="intlayer.config.ts"
260
365
  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.CZECH],
265
370
  defaultLocale: Locales.ENGLISH,
266
371
  },
267
372
  dictionary: {
268
373
  importMode: "dynamic",
269
374
  },
270
375
  build: {
271
- /**
272
- * Minifikovat slovníky pro snížení velikosti bundle.
273
- */
274
- minify: true;
275
-
276
- /**
277
- * Odstranit (purge) nepoužívané klíče ve slovnících
278
- */
279
- purge: true;
280
-
281
- /**
282
- * Indikuje, zda má build kontrolovat typy TypeScript
283
- */
284
- checkTypes: false;
376
+ // Nahrazuje volání useIntlayer() přímo importy slovníků během sestavení.
377
+ // undefined = auto (aktivní v produkci), true = vždy, false = nikdy.
378
+ optimize: undefined,
379
+
380
+ // Přejmenuje klíče polí v kompilovaných slovnících na krátké abecední
381
+ // aliasy (např. title → a). Snižuje velikost JSONu; vyžaduje optimize.
382
+ minify: true,
383
+
384
+ // Odstraní pole obsahu, ke kterým ve zdrojovém kódu není žádný přístup.
385
+ // Vyžaduje optimize.
386
+ purge: true,
285
387
  },
286
388
  };
287
389
 
288
390
  export default config;
289
391
  ```
290
392
 
291
- > Ponechání výchozí volby pro `optimize` je doporučeno ve většině případů.
393
+ > Ve většině případů se doporučuje ponechat výchozí hodnotu (`undefined`) u parametru `optimize`.
292
394
 
293
- > Podrobnosti naleznete v dokumentaci konfigurace: [Konfigurace](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/configuration.md)
395
+ > Přehled všech možností naleznete v referenční příručce: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/configuration.md)
294
396
 
295
- ### Možnosti buildu
397
+ ### Volby pro sestavení (Build Options)
296
398
 
297
- V objektu konfigurace `build` jsou k dispozici následující možnosti:
399
+ | Vlastnost | Typ | Výchozí | Popis |
400
+ | :------------- | :--------------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
401
+ | **`optimize`** | `boolean \| undefined` | `undefined` | Povolí průchod pro přepis importů. `undefined` = aktivní pouze v produkčním sestavení. `false` vypíná rovněž purge a minify. |
402
+ | **`minify`** | `boolean` | `false` | Přejmenuje klíče polí obsahu v kompilovaných JSON souborech na krátké abecední aliasy. Stejně tak přepíše odpovídající přístupy k vlastnostem ve zdrojovém kódu. Nefunguje, pokud je `optimize` nastaveno na `false`. |
403
+ | **`purge`** | `boolean` | `false` | Z kompilovaných JSON souborů odstraní obsahová pole, k nimž se ve zdrojovém kódu staticky nepřistupuje. Nefunguje, pokud je `optimize` nastaveno na `false`. |
298
404
 
299
- | Vlastnost | Typ | Výchozí | Popis |
300
- | :------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
301
- | **`optimize`** | `boolean` | `undefined` | Ovládá, zda je povolena optimalizace buildu. Pokud je `true`, Intlayer nahradí volání slovníku optimalizovanými injekcemi. Pokud je `false`, optimalizace je vypnuta. Ideálně nastaveno na `true` v produkci. |
302
- | **`minify`** | `boolean` | `false` | Zda se mají minifikovat slovníky pro snížení velikosti bundle. |
303
- | **`purge`** | `boolean` | `false` | Zda se mají odstranit nepoužívané klíče ve slovnících. |
405
+ ### Minifikace (přejmenování klíčů)
304
406
 
305
- ### Minifikace
407
+ Volba `build.minify` **neminifikuje** váš JavaScriptový bundle — to má na starosti váš bundler. Namísto toho zmenšuje velikost kompilovaných JSON slovníků tak, že nahradí všechny uživatelem definované klíče obsahových polí za krátké abecední aliasy:
306
408
 
307
- Minifikace slovníků odstraňuje nepotřebné bílé znaky, komentáře a snižuje velikost obsahu JSON. To je užitečné zejména u velkých slovníků.
409
+ ```
410
+ // Před minifikací
411
+ { "title": "Ahoj", "subtitle": "Světe" }
412
+
413
+ // Po minifikaci
414
+ { "a": "Ahoj", "b": "Světe" }
415
+ ```
416
+
417
+ Stejné přejmenování proběhne i u všech přístupů k vlastnostem ve zdrojovém kódu, takže v kompilovaném výstupu se z `content.title` stane `content.a`. Chování aplikace v reálném čase se tím nijak nezmění.
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
- > Poznámka: Minifikace je ignorována, pokud je `optimize` zakázáno nebo pokud je povolen Visual Editor (protože editor potřebuje úplný obsah pro umožnění úprav).
431
+ > K minifikaci nedojde, pokud je `optimize` nastaveno na `false` nebo pokud `editor.enabled` odpovídá hodnotě `true` (vizuální editor totiž potřebuje znát původní názvy polí, aby umožnil jejich editaci).
432
+
433
+ > Stejně tak se minifikace ignoruje u slovníků načítaných přes `importMode: 'fetch'`, protože takové JSON soubory pocházejí z externího API pod svými původními názvy polí — přejmenování klíčů na straně klienta by rozbilo vazbu server-klient.
322
434
 
323
- ### Purging (Čištění)
435
+ ### Purge (odstranění nepoužitých polí)
324
436
 
325
- Purging zajišťuje, že do finálního bundle slovníků budou zahrnuty pouze klíče skutečně použité ve vašem kódu. To může výrazně snížit velikost vašeho bundle, pokud máte velké slovníky s mnoha klíči, které nejsou použity v každé části vaší aplikace.
437
+ Volba `build.purge` analyzuje, ke kterým obsahovým polím se ve zdrojovém kódu skutečně přistupuje, a odstraní všechna ostatní pole z kompilovaných JSON souborů.
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
- > Poznámka: Purging je ignorován, pokud je `optimize` zakázáno.
451
+ **Příklad:** Pokud slovník pět polí, ale použita jsou pouze dvě:
452
+
453
+ ```
454
+ // Před provedením purge
455
+ { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
456
+
457
+ // Po provedení purge (ve zdrojovém kódu je přístup pouze na title + subtitle)
458
+ { "title": "…", "subtitle": "…" }
459
+ ```
460
+
461
+ > K purge nedojde, jestliže je `optimize` nastaveno na `false` nebo jestliže je `editor.enabled` `true`.
462
+
463
+ > Z bezpečnostních důvodů k purge nedojde ani tehdy, pokud nelze správně rozebrat (parse) nějaký zdrojový soubor. Dále se vynechá v situaci, kdy je výsledek z volání `useIntlayer` uložen do proměnné a předán dál způsobem, který statický analyzátor neumí sledovat (např. spread operátorem do objektu, nebo předáním přes properties (props) bez použití destrukce). V těchto případech zůstává celý slovník zachován.
464
+
465
+ ### Importovací režim (Import Mode)
340
466
 
341
- ### Režim importu (Import Mode)
467
+ V případě rozsáhlých aplikací zahrnujících mnoho stránek a jazyků se JSON soubory mohou stát velkou zátěží pro výslednou velikost vašeho bundlu. Intlayer vám prostřednictvím volby `importMode` dovoluje kontrolovat způsob, jakým se slovníky načítají.
342
468
 
343
- U velkých aplikací zahrnujících několik stránek a lokalit mohou vaše JSON soubory představovat významnou část velikosti vašeho bundle. Intlayer vám umožňuje kontrolovat, jak jsou slovníky načítány.
469
+ ### Globální definice
344
470
 
345
- Režim importu lze definovat výchozí globálně ve vašem souboru `intlayer.config.ts`.
471
+ Importovací režim lze globálně definovat v souboru `intlayer.config.ts`.
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", // Výchozí hodnota je 'static'
353
479
  },
354
480
  };
355
481
 
356
482
  export default config;
357
483
  ```
358
484
 
359
- Stejně jako pro každý slovník ve vašich souborech `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}`.
485
+ ### Definice pro konkrétní slovník
486
+
487
+ Importovací režim můžete upravit nezávisle pro každý jednotlivý slovník v odpovídajícím souboru `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}}`.
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", // Přepsat výchozí režim importu
494
+ importMode: "dynamic", // Přepíše výchozí hodnotu
367
495
  content: {
368
496
  // ...
369
497
  },
@@ -372,83 +500,103 @@ const appContent: Dictionary = {
372
500
  export default appContent;
373
501
  ```
374
502
 
375
- | Vlastnost | Typ | Výchozí | Popis |
376
- | :--------------- | :--------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------------------------- |
377
- | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Zastaralé**: Místo toho použijte `dictionary.importMode`. Určuje, jak jsou slovníky načítány (viz podrobnosti níže). |
503
+ | Vlastnost | Typ | Výchozí | Popis |
504
+ | :--------------- | :--------------------------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------- |
505
+ | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Zastaralé**: Použijte raději `dictionary.importMode`. Určuje, jakým způsobem se načítají slovníky (více informací níže). |
378
506
 
379
- Nastavení `importMode` určuje, jak je obsah slovníku vložen do vaší komponenty.
380
- Můžete jej definovat globálně v souboru `intlayer.config.ts` pod objektem `dictionary`, nebo jej můžete přepsat pro konkrétní slovník v jeho souboru `.content.ts`.
507
+ Nastavení `importMode` ovlivňuje způsob, jakým je obsah slovníku vkládán do vaší komponenty. Lze je nakonfigurovat globálně přes vlastnost `dictionary` v `intlayer.config.ts`, anebo lokálně u konkrétního slovníku v jeho `.content.ts` souboru.
381
508
 
382
- ### 1. Statický režim (`default`)
509
+ ### 1. Statický režim (Static Mode - `default`)
383
510
 
384
- V statickém režimu Intlayer nahradí `useIntlayer` za `useDictionary` a vloží slovník přímo do JavaScript bundle.
511
+ Při použití statického režimu Intlayer převede volání `useIntlayer` na `useDictionary` a obsah slovníku je vložen přímo do JavaScriptového bundlu.
385
512
 
386
- - **Klady:** Okamžité vykreslení (synchronní), nulové dodatečné síťové požadavky během hydratace.
387
- - **Zápory:** Bundle obsahuje překlady pro **všechny** dostupné jazyky pro danou konkrétní komponentu.
388
- - **Nejlepší pro:** Single Page Applications (SPA).
513
+ - **Výhody:** Okamžité vykreslování (synchronní krok), během hydratace nevznikají žádné další síťové požadavky.
514
+ - **Nevýhody:** Bundle obsahuje překlady pro **všechny** dostupné jazyky dané komponenty.
515
+ - **Vhodné pro:** Single Page Aplikace (SPA).
389
516
 
390
- **Příklad transformovaného kódu:**
517
+ **Ukázka transformovaného kódu:**
391
518
 
392
519
  ```tsx
393
520
  // Váš kód
394
521
  const content = useIntlayer("my-key");
395
522
 
396
- // Optimalizovaný kód (Statický)
523
+ // Příklad optimalizovaného kódu po transformaci (Static)
524
+ // Toto je pouze ilustrativní příklad, skutečný kód se kvůli dalším optimalizacím liší
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
+ cs: "Můj nadpis",
404
532
  },
405
533
  },
406
534
  });
407
535
  ```
408
536
 
409
- ### 2. Dynamický režim
537
+ ### 2. Dynamický režim (Dynamic Mode)
410
538
 
411
- V dynamickém režimu Intlayer nahradí `useIntlayer` za `useDictionaryAsync`. To využívá `import()` (mechanismus podobný Suspense) k línému načítání konkrétně JSON pro aktuální lokalitu.
539
+ V dynamickém režimu Intlayer nahradí `useIntlayer` voláním `useDictionaryAsync`. Využije přitom mechanismu `import()` (podobné použití jako React Suspense) k asynchronnímu (lazy) stažení pouze těch JSON souborů, které odpovídají aktuálnímu jazyku.
412
540
 
413
- - **Klady:** **Tree shaking na úrovni lokality.** Uživatel prohlížející anglickou verzi stáhne _pouze_ anglický slovník. Francouzský slovník se nikdy nenačte.
414
- - **Zápory:** Vyvolá síťový požadavek (stažení assetu) na komponentu během hydratace.
415
- - **Nejlepší pro:** Velké bloky textu, články nebo aplikace podporující mnoho jazyků, kde je velikost bundle kritická.
541
+ - **Výhody:** **Tree shaking na úrovni jazyků (locale).** Pokud si uživatel otevře anglickou verzi, stáhne si _pouze_ anglický slovník. Český slovník se nikdy nenačte.
542
+ - **Nevýhody:** Během hydratace dojde k jednomu síťovému požadavku na danou komponentu (asset fetch).
543
+ - **Vhodné pro:** Velké textové bloky, dlouhé články nebo multijazyčné aplikace, u nichž je nezbytně nutné omezit velikost bundlu na absolutní minimum.
416
544
 
417
- **Příklad transformovaného kódu:**
545
+ **Ukázka transformovaného kódu:**
418
546
 
419
547
  ```tsx
420
548
  // Váš kód
421
549
  const content = useIntlayer("my-key");
422
550
 
423
- // Optimalizovaný kód (Dynamický)
551
+ // Příklad optimalizovaného kódu po transformaci (Dynamic)
552
+ // Toto je pouze ilustrativní příklad, skutečný kód se kvůli dalším optimalizacím liší
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
+ cs: () =>
559
+ import(".intlayer/dynamic_dictionary/my-key/cs.json").then(
431
560
  (mod) => mod.default
432
561
  ),
433
562
  });
434
563
  ```
435
564
 
436
- > Při použití `importMode: 'dynamic'`, pokud máte na jedné stránce 100 komponent využívajících `useIntlayer`, prohlížeč se pokusí o 100 samostatných stažení. Chcete-li se vyhnout tomuto "vodopádu" požadavků, seskupte obsah do menšího počtu souborů `.content` (např. jeden slovník na sekci stránky) namísto jednoho na komponentu.
565
+ > Při použití `importMode: 'dynamic'` pamatujte, že pokud na jedné stránce máte např. 100 komponent volajících `useIntlayer`, prohlížeč vyvolá hned 100 oddělených stahování. Abyste předešli takovému zahlcení (tzv. "waterfall"), pokuste se seskupit obsah do méně souborů `.content` (např. jeden slovník pro celou sekci), namísto abyste dělali samostatný slovník pro úplně každou malou součástku na stránce. Stejně tak platí, že si můžete připravit i více `.content` souborů majících stejný klíč – Intlayer je sám sloučí do jedné velké struktury (jediného slovníku).
566
+
567
+ ### 3. Fetch režim (Fetch Mode)
437
568
 
438
- ### 3. Režim Fetch
569
+ Z pohledu chování jde o něco velice podobného dynamickému režimu, avšak nejdříve se vždy zkusí stáhnout slovníky přímo z Intlayer Live Sync API. Jestliže API spojení selže, nebo jestliže příslušný obsah není označen k živé aktualizaci (live updates), vrátí se aplikace automaticky ke stažení přes dynamický import.
439
570
 
440
- Chová se podobně jako dynamický režim, ale nejprve se pokusí načíst slovníky z API Intlayer Live Sync. Pokud volání API selže nebo obsah není označen pro živé aktualizace, vrátí se k dynamickému importu.
571
+ **Ukázka transformovaného kódu:**
572
+
573
+ ```tsx
574
+ // Váš kód
575
+ const content = useIntlayer("my-key");
576
+
577
+ // Příklad optimalizovaného kódu (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
+ cs: () =>
584
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/cs").then((res) =>
585
+ res.json()
586
+ ),
587
+ });
588
+ ```
441
589
 
442
- > Podrobnosti naleznete v dokumentaci CMS: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/intlayer_CMS.md)
590
+ > Další informace hledejte přímo v dokumentaci k CMS: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/intlayer_CMS.md)
443
591
 
444
- > V režimu fetch nelze použít purge a minifikaci.
592
+ > Při zapnutém Fetch režimu neprobíhá žádný purge (čištění) ani minifikace, jelikož JSON poskytuje samotné externí API pod jeho původními názvy atributů.
445
593
 
446
594
  ## Shrnutí: Statický vs Dynamický
447
595
 
448
- | Funkce | Statický režim | Dynamický režim |
449
- | :--------------------- | :--------------------------------------------- | :----------------------------------- |
450
- | **Velikost JS bundle** | Větší (obsahuje všechny jazyky pro komponentu) | Nejmenší (pouze kód, žádný obsah) |
451
- | **Počáteční načtení** | Okamžité (Obsah je v bundle) | Mírné zpoždění (Načítá JSON) |
452
- | **Síťové požadavky** | 0 dodatečných požadavků | 1 požadavek na slovník |
453
- | **Tree Shaking** | Úroveň komponenty | Úroveň komponenty + Úroveň lokality |
454
- | **Nejlepší využití** | UI komponenty, malé aplikace | Stránky s hodně textem, mnoho jazyků |
596
+ | Vlastnost | Statický režim (Static Mode) | Dynamický režim (Dynamic Mode) |
597
+ | :--------------------- | :--------------------------------------------- | :------------------------------------------ |
598
+ | **Velikost JS Bundlu** | Větší (Zahrnuje všechny jazyky pro komponentu) | Nejmenší (Obsahuje pouze kód, žádný obsah) |
599
+ | **Při načtení** | Okamžitě (Obsah je rovnou součástí bundlu) | Mírná zpoždění (Sťahuje dodatečné JSON) |
600
+ | **Síťové požadavky** | 0 požadavků navíc | 1 požadavek pro každý klíč slovníku |
601
+ | **Tree Shaking** | Pouze na úrovni jednotlivých komponent | Na úrovni komponent i na úrovni jazyka |
602
+ | **Nejlepší scénář** | Uživatelské prvky UI, jednodušší malé aplikace | Rozsáhlé textové strany a vícejazyčné celky |