@intlayer/docs 9.0.0-canary.10 → 9.0.0-canary.11

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 (63) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/intlayer_CMS.md +16 -1
  8. package/docs/ar/releases/v9.md +58 -1
  9. package/docs/ar/self_hosting.md +349 -0
  10. package/docs/bn/intlayer_CMS.md +570 -0
  11. package/docs/bn/releases/v9.md +358 -0
  12. package/docs/cs/releases/v9.md +358 -0
  13. package/docs/de/intlayer_CMS.md +117 -1
  14. package/docs/de/releases/v9.md +61 -1
  15. package/docs/de/self_hosting.md +349 -0
  16. package/docs/en/intlayer_CMS.md +171 -1
  17. package/docs/en/releases/v9.md +45 -2
  18. package/docs/en/self_hosting.md +349 -0
  19. package/docs/en-GB/intlayer_CMS.md +16 -1
  20. package/docs/en-GB/releases/v9.md +47 -2
  21. package/docs/en-GB/self_hosting.md +349 -0
  22. package/docs/es/intlayer_CMS.md +117 -1
  23. package/docs/es/releases/v9.md +61 -1
  24. package/docs/es/self_hosting.md +349 -0
  25. package/docs/fr/intlayer_CMS.md +117 -1
  26. package/docs/fr/releases/v9.md +61 -1
  27. package/docs/fr/self_hosting.md +349 -0
  28. package/docs/hi/intlayer_CMS.md +16 -1
  29. package/docs/hi/releases/v9.md +59 -1
  30. package/docs/hi/self_hosting.md +349 -0
  31. package/docs/id/releases/v9.md +31 -1
  32. package/docs/id/self_hosting.md +349 -0
  33. package/docs/it/intlayer_CMS.md +117 -1
  34. package/docs/it/releases/v9.md +61 -1
  35. package/docs/it/self_hosting.md +349 -0
  36. package/docs/ja/intlayer_CMS.md +191 -10
  37. package/docs/ja/releases/v9.md +31 -1
  38. package/docs/ja/self_hosting.md +349 -0
  39. package/docs/ko/intlayer_CMS.md +189 -6
  40. package/docs/ko/releases/v9.md +30 -1
  41. package/docs/ko/self_hosting.md +349 -0
  42. package/docs/nl/releases/v9.md +358 -0
  43. package/docs/pl/intlayer_CMS.md +16 -1
  44. package/docs/pl/releases/v9.md +58 -1
  45. package/docs/pl/self_hosting.md +349 -0
  46. package/docs/pt/intlayer_CMS.md +117 -1
  47. package/docs/pt/releases/v9.md +61 -1
  48. package/docs/pt/self_hosting.md +349 -0
  49. package/docs/ru/intlayer_CMS.md +196 -15
  50. package/docs/ru/releases/v9.md +59 -1
  51. package/docs/ru/self_hosting.md +349 -0
  52. package/docs/tr/intlayer_CMS.md +16 -1
  53. package/docs/tr/releases/v9.md +46 -1
  54. package/docs/tr/self_hosting.md +349 -0
  55. package/docs/uk/intlayer_CMS.md +16 -1
  56. package/docs/uk/releases/v9.md +58 -1
  57. package/docs/uk/self_hosting.md +349 -0
  58. package/docs/vi/releases/v9.md +31 -1
  59. package/docs/vi/self_hosting.md +349 -0
  60. package/docs/zh/releases/v9.md +31 -1
  61. package/docs/zh/self_hosting.md +349 -0
  62. package/package.json +6 -6
  63. package/src/generated/docs.entry.ts +20 -0
@@ -0,0 +1,358 @@
1
+ ---
2
+ createdAt: 2026-06-14
3
+ updatedAt: 2026-06-30
4
+ title: Nieuwe Intlayer v9 - Wat is er nieuw?
5
+ description: Ontdek wat er nieuw is in Intlayer v9. Introductie van drop-in compatibiliteitspakketten voor populaire i18n-bibliotheken, ondersteuning voor Verzamelingen en Varianten, en zelf hosten via Docker Compose.
6
+ keywords:
7
+ - Intlayer
8
+ - Compatibility
9
+ - Migration
10
+ - Collections
11
+ - Variants
12
+ - CMS SDK
13
+ - Self-Hosting
14
+ - Docker
15
+ - i18next
16
+ - next-intl
17
+ - vue-i18n
18
+ slugs:
19
+ - doc
20
+ - releases
21
+ - v9
22
+ author: aymericzip
23
+ ---
24
+
25
+ # Nieuwe Intlayer v9 - Wat is er nieuw?
26
+
27
+ Welkom bij Intlayer v9! Deze grote release markeert een enorme mijlpaal in het vereenvoudigen van het migratiepad naar Intlayer met **Compat-adapterpakketten** voor grote i18n-bibliotheken (`react-i18next`, `next-intl`, `vue-i18n`, enz.) en voegt ondersteuning toe voor rijke inhoudsstructuren: **Verzamelingen** en **Varianten**.
28
+
29
+ ## Inhoudsopgave
30
+
31
+ <TOC levels={[2]} maxDepth={1} />
32
+
33
+ ---
34
+
35
+ ## Compat-adapterpakketten
36
+
37
+ Migreren naar Intlayer vanuit populaire i18n-bibliotheken is nu eenvoudiger dan ooit. We hebben vijf compatibiliteitspakketten gemaakt die exact dezelfde publieke API's blootstellen als standaard i18n-bibliotheken, maar al het vertaalwerk tijdens uitvoering delegeren aan Intlayer.
38
+
39
+ ### Dezelfde publieke API blootstellen met strikte typering
40
+
41
+ Door imports te vervangen, profiteert u van alle voordelen van Intlayer (inclusief compilatietijd type-veiligheid ten opzichte van uw werkelijke woordenboeken) met minimale codewijzigingen:
42
+
43
+ - `@intlayer/i18next`
44
+ - `@intlayer/react-i18next`
45
+ - `@intlayer/next-intl`
46
+ - `@intlayer/react-intl`
47
+ - `@intlayer/next-i18next`
48
+ - `@intlayer/vue-i18n`
49
+ - `@intlayer/lingui`
50
+
51
+ Wijzig bijvoorbeeld eenvoudig:
52
+
53
+ ```ts
54
+ import { useTranslation } from "react-i18next";
55
+ ```
56
+
57
+ naar:
58
+
59
+ ```ts
60
+ import { useTranslation } from "@intlayer/react-i18next";
61
+ ```
62
+
63
+ Uw sleutels worden nu **strikt getypeerd** op basis van uw Intlayer-woordenboeken, wat volledige dot-pad-autoaanvulling biedt in uw IDE!
64
+
65
+ ### Bundler-aliasplugins (Vite, Next.js, Turbopack)
66
+
67
+ Om te migreren zonder alle importstatements handmatig te herschrijven, bevat elk compat-adapterpakket een **aangepaste bundler-plugin** (Vite of Next.js) onder het `/plugin`-subpad.
68
+
69
+ Deze plugins herschrijven automatisch bestaande imports (bijv. `react-i18next` of `next-intl`) naar hun `@intlayer/*`-equivalenten tijdens het bouwen.
70
+
71
+ #### Next.js (Webpack / Turbopack) Voorbeeld
72
+
73
+ Gebruik in plaats van `withIntlayer` de compat-plugin om uw Next.js-configuratie te wikkelen:
74
+
75
+ ```ts fileName="next.config.ts"
76
+ import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
77
+ import type { NextConfig } from "next";
78
+
79
+ const withIntlayer = createNextI18nPlugin();
80
+ const nextConfig: NextConfig = {};
81
+
82
+ export default withIntlayer(nextConfig);
83
+ ```
84
+
85
+ #### Vite (React, Vue, Solid, Svelte) Voorbeeld
86
+
87
+ ```ts fileName="vite.config.ts"
88
+ import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
89
+
90
+ export default defineConfig({
91
+ plugins: [vueI18nVitePlugin()],
92
+ });
93
+ ```
94
+
95
+ ---
96
+
97
+ ## Gedeelde runtime-resolver
98
+
99
+ Alle compat-adapters routeren vertaalresolutie nu via één sterk geoptimaliseerde runtime-parser: `@intlayer/core/messageFormat`.
100
+
101
+ - **Berichtinterpolatie**: Verwerkt standaard `{{var}}` (witruimte & dot-paden), ICU-geformatteerde argumenten (`{v, number, percent}` enz.) en gewone `{var}`-sjablonen.
102
+ - **Berichtknooppuntresolver**: Verwerkt geneste knooppunten: `insert()`, `plural()` (CLDR meervoudsregels), `enu()` (opsomming), `gender()`, HTML-tags, arrays en aanroepbare functieknooppunten.
103
+ - **Getokeniseerde tagparser**: Ondersteunt inline XML/HTML-tags en genummerde tags (bijv. `<1>children</1>`) voor rijke-tekstweergave zonder extra configuratie.
104
+
105
+ ---
106
+
107
+ ## Functiespecificaties: Verzamelingen en varianten
108
+
109
+ Intlayer v9 gaat verder dan statische sleutel-waardeparen en stelt woordenboeken in staat dynamische layoutstructuren te declareren die end-to-end volledig getypeerd zijn.
110
+
111
+ ### 1. Verzamelingen
112
+
113
+ Definieer een door CMS beheerde lijst met geordende items (bijv. FAQ's, producten of bloglijsten). Elk item bevindt zich in een eigen `.content.ts`-bestand met dezelfde `key` en een `item`-nummer:
114
+
115
+ ```ts fileName="faq.1.content.ts"
116
+ import { t, type Dictionary } from "intlayer";
117
+
118
+ export default {
119
+ key: "faq",
120
+ item: 1,
121
+ content: {
122
+ question: t({ en: "What is Intlayer?", fr: "Qu'est-ce qu'Intlayer ?" }),
123
+ answer: t({ en: "An i18n toolkit.", fr: "Une boîte à outils i18n." }),
124
+ },
125
+ } satisfies Dictionary;
126
+ ```
127
+
128
+ ```ts fileName="faq.2.content.ts"
129
+ import { t, type Dictionary } from "intlayer";
130
+
131
+ export default {
132
+ key: "faq",
133
+ item: 2,
134
+ content: {
135
+ question: t({ en: "Is it free?", fr: "Est-ce gratuit ?" }),
136
+ answer: t({ en: "Yes, open-source.", fr: "Oui, open-source." }),
137
+ },
138
+ } satisfies Dictionary;
139
+ ```
140
+
141
+ #### Gebruik:
142
+
143
+ ```ts
144
+ // Alle items als array ophalen
145
+ const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
146
+
147
+ // Eén item ophalen op index
148
+ const faq = useIntlayer("faq", { item: 2 }); // -> { question: string, answer: string }
149
+ ```
150
+
151
+ ### 2. Varianten
152
+
153
+ Lever A/B-tests, seizoensgebonden koppen, functievlaggen of aangepaste landingspagina's:
154
+
155
+ #### Tekstvarianten (bijv. A/B-testen)
156
+
157
+ ```ts fileName="hero.content.ts"
158
+ import { t, type Dictionary } from "intlayer";
159
+
160
+ export default {
161
+ key: "hero-banner",
162
+ variant: "default",
163
+ content: {
164
+ control: t({ en: "Welcome", fr: "Bienvenue" }),
165
+ black_friday: t({ en: "Shop now", fr: "Acheter maintenant" }),
166
+ },
167
+ } satisfies Dictionary;
168
+ ```
169
+
170
+ #### Gebruik:
171
+
172
+ ```ts
173
+ const banner = useIntlayer("hero-banner", { variant: "black_friday" });
174
+ ```
175
+
176
+ #### Objectvarianten (bijv. Dynamische records)
177
+
178
+ ```ts fileName="product.content.ts"
179
+ import { t, type Dictionary } from "intlayer";
180
+
181
+ export default {
182
+ key: "product-copy",
183
+ variant: {
184
+ id: "prod_123",
185
+ category: "books",
186
+ },
187
+ content: {
188
+ title: t({ en: "Clean Code", fr: "Code Propre" }),
189
+ },
190
+ } satisfies Dictionary;
191
+ ```
192
+
193
+ #### Gebruik:
194
+
195
+ ```ts
196
+ // Haalt alleen het gevraagde record dynamisch op (vereist Suspense)
197
+ const product = useIntlayer("product-copy", {
198
+ variant: { id: "prod_123", category: "books" },
199
+ });
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Dynamisch laden en bundel-optimalisaties
205
+
206
+ Om bundels extreem klein te houden, ondersteunt Intlayer v9 dynamisch lui laden.
207
+
208
+ Stel `importMode` in op `'dynamic'` of `'fetch'` in uw configuratie:
209
+
210
+ ```ts fileName="intlayer.config.ts"
211
+ export default {
212
+ dictionary: {
213
+ importMode: "dynamic", // "static" | "dynamic" | "fetch"
214
+ },
215
+ };
216
+ ```
217
+
218
+ Tijdens het bouwen scannen `@intlayer/swc` en `@intlayer/babel` uw bestanden en vervangen `useIntlayer`/`getIntlayer`-aanroepen door tree-shakeable wrappers (`useDictionary`/`useDictionaryDynamic`). Alleen de inhoud die vereist is voor het geselecteerde verzamelingsitem, de variant of de taal wordt geladen, waardoor uw productiebundel geen ongebruikte vertalingen bevat.
219
+
220
+ ---
221
+
222
+ ## Vite-plugin: ingebouwde compiler en proxy
223
+
224
+ De `intlayer()` Vite-plugin bundelt nu de **compiler** en de **locale-routeringsproxy** rechtstreeks, zodat de meeste projecten slechts één plugin nodig hebben in `vite.config.ts`:
225
+
226
+ ```ts fileName="vite.config.ts"
227
+ import { defineConfig } from "vite";
228
+ import { intlayer } from "vite-intlayer";
229
+
230
+ export default defineConfig({
231
+ plugins: [intlayer()],
232
+ });
233
+ ```
234
+
235
+ - **Compiler**: Wordt automatisch geactiveerd wanneer `compiler.enabled` is ingesteld op `true` en een `compiler.output`-pad is geconfigureerd. U hoeft `intlayerCompiler()` niet langer afzonderlijk te registreren.
236
+ - **Proxy**: Wordt automatisch geactiveerd op basis van de nieuwe optie `routing.enableProxy` (standaard `true`). Het koppelt de middleware voor taaldetedering, omleiding en herschrijving in ontwikkeling, voorvertoning en productie-SSR. U hoeft `intlayerProxy()` niet langer afzonderlijk te registreren.
237
+
238
+ ### De optie `routing.enableProxy`
239
+
240
+ Een nieuwe optie `routing.enableProxy` bepaalt of de locale-routeringsproxy wordt gekoppeld. De standaardwaarde is `true`. Schakel deze uit wanneer u de taalroutering zelf wilt afhandelen:
241
+
242
+ ```ts fileName="intlayer.config.ts"
243
+ import type { IntlayerConfig } from "intlayer";
244
+
245
+ const config: IntlayerConfig = {
246
+ routing: {
247
+ enableProxy: false, // Standaard: true
248
+ },
249
+ };
250
+
251
+ export default config;
252
+ ```
253
+
254
+ De zelfstandige plugins `intlayerCompiler()` en `intlayerProxy()` blijven beschikbaar voor geavanceerde installaties. Het is veilig om ze samen met `intlayer()` te registreren — elke plugin dedupliceert zichzelf en wordt slechts één keer uitgevoerd.
255
+
256
+ ---
257
+
258
+ ## Compiler standaard uitgeschakeld
259
+
260
+ Vanaf Intlayer v9 is de **compiler standaard uitgeschakeld** (`compiler.enabled` is nu standaard `false`). Om build-tijdextractie van uw `.content.ts`-bestanden in te schakelen, stelt u `compiler.enabled: true` in uw configuratie in:
261
+
262
+ ```ts fileName="intlayer.config.ts"
263
+ import type { IntlayerConfig } from "intlayer";
264
+
265
+ const config: IntlayerConfig = {
266
+ compiler: {
267
+ enabled: true, // Standaard: false — vereist om de compiler in te schakelen sinds v9
268
+ output: ({ fileName }) => `./${fileName}.content.ts`,
269
+ },
270
+ };
271
+
272
+ export default config;
273
+ ```
274
+
275
+ Wanneer de compiler is uitgeschakeld, slaat Intlayer de build-tijdextractiestap over en vertrouwt op uw reeds gedeclareerde woordenboeken. Schakel deze alleen in wanneer u wilt dat de bundler-plugin (`@intlayer/swc`, `@intlayer/babel` of de `intlayer()` Vite-plugin) inhoud automatisch extraheert.
276
+
277
+ ---
278
+
279
+ ## React Native: importeren vanuit één pakket
280
+
281
+ In een React Native- of Expo-app hoeft u niet langer zowel `react-intlayer` als `react-native-intlayer` te beheren. Het pakket `react-native-intlayer` **herexporteert nu de volledige `react-intlayer`-API** (hooks, hulpprogramma's en de subpaden `/format`, `/html` en `/markdown`), en de `IntlayerProvider` past de React Native polyfills automatisch toe.
282
+
283
+ Importeer alles vanuit het enkele pakket `react-native-intlayer`:
284
+
285
+ ```tsx
286
+ import {
287
+ IntlayerProvider,
288
+ useIntlayer,
289
+ useLocale,
290
+ } from "react-native-intlayer";
291
+ ```
292
+
293
+ ```bash
294
+ npm install intlayer react-native-intlayer
295
+ ```
296
+
297
+ > Importeren vanuit `react-intlayer` blijft werken, maar `react-native-intlayer` is nu het aanbevolen enkelvoudige invoerpunt voor React Native — de provider bevat de polyfills die de webgerichte `react-intlayer`-provider niet heeft.
298
+
299
+ ---
300
+
301
+ ## CMS SDK: gebruik Intlayer als headless-contentdatabase
302
+
303
+ Intlayer v9 levert een overzichtelijke, automatisch authenticerende SDK in `@intlayer/api` om programmatisch met de CMS te communiceren — haal projecten op, haal woordenboeken op en duw of update ze vanuit uw eigen server, scripts of CI. Authenticatie (OAuth2 `client_credentials`) wordt voor u beheerd en vernieuwd.
304
+
305
+ De SDK is opgesplitst in **twee afzonderlijke imports** zodat uw bundel alleen de domeinen bevat die u daadwerkelijk gebruikt:
306
+
307
+ 1. `createIntlayerCMS` — een lichtgewicht **authenticator** die de referenties en het beheerde token bewaart (geen domein-client gebundeld).
308
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … — per-domein **endpoint-binders**, elk geïmporteerd vanuit hun eigen subpad.
309
+
310
+ ```ts fileName="cms.ts"
311
+ import { createIntlayerCMS } from "@intlayer/api";
312
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
313
+
314
+ const cms = createIntlayerCMS();
315
+
316
+ // Lezen
317
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
318
+
319
+ // Schrijven — gebruik de CMS als een database
320
+ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
321
+ ```
322
+
323
+ > Beveiliging: de CMS-referenties verlenen schrijftoegang tot uw inhoud. Maak de authenticator altijd alleen aan **aan de serverzijde** — stuur `clientId`/`clientSecret` nooit naar de browser.
324
+
325
+ ---
326
+
327
+ ## Zelf hosten
328
+
329
+ Intlayer v9 biedt eersteklas ondersteuning voor het uitvoeren van uw eigen Intlayer-instantie met één opdracht — geen Intlayer Cloud-account vereist.
330
+
331
+ ```sh
332
+ curl -fsSL https://intlayer.org/install.sh | sh
333
+ ```
334
+
335
+ Het installatieprogramma downloadt een `docker-compose.yml` en een `.env`, genereert automatisch de vereiste geheimen en voert `docker compose up -d` uit. Alles — het dashboard, de API, de database, objectopslag en transactionele e-mail — wordt lokaal in containers uitgevoerd.
336
+
337
+ ---
338
+
339
+ ## Migratienotities vanuit v8
340
+
341
+ Als u upgradet vanuit v8, let dan op dat v9 geen breaking changes bevat. Maar dit zijn de belangrijkste wijzigingen:
342
+
343
+ - **Compiler standaard uitgeschakeld**: `compiler.enabled` is nu standaard `false`. Als u afhankelijk bent van build-tijdextractie van uw `.content.ts`-bestanden, stelt u `compiler.enabled: true` in uw `intlayer.config.ts` in.
344
+ - **Vite-plugin**: De compiler en locale-routeringsproxy zijn nu gebundeld in `intlayer()`. Als u eerder `intlayerCompiler()` of `intlayerProxy()` handmatig registreerde, kunt u ze verwijderen — ze worden automatisch gededupliceerd, dus ze bewaren is onschadelijk. Gebruik `routing.enableProxy: false` om de proxy uit te schakelen.
345
+ - **Talen en dialecten**: Als u externe i18n-afhankelijkheden gebruikt, voeg dan de bijbehorende compat-adapterplugins toe in uw configuratie of bundler-installatie om imports automatisch te herschrijven.
346
+ - **Aangepaste selectors**: Bij het aanroepen van `useIntlayer` is de tweede parameter nu gereserveerd voor een optieobject met `{ locale, item, variant }`. Als u eerder een taalstring direct doorgaf, kunt u dat nog steeds doen, maar het gebruik van het optieobject wordt aanbevolen voor geavanceerde selecties.
347
+ - **React Native**: `react-native-intlayer` herexporteert nu de volledige `react-intlayer`-API. Importeer in een React Native-app alles vanuit `react-native-intlayer` en verwijder de directe `react-intlayer`-afhankelijkheid. Bestaande `react-intlayer`-imports blijven werken.
348
+
349
+ ---
350
+
351
+ ## Nuttige links
352
+
353
+ - [Handleiding voor compat-adapterpakketten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/compat/index.md)
354
+ - [Dynamische woordenboeken - Verzamelingen en varianten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/dynamic_dictionaries/index.md)
355
+ - [Configuratiereferentie](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/configuration.md)
356
+ - [Handleiding voor React Native en Expo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/intlayer_with_react_native+expo.md)
357
+ - [CMS SDK - Programmatische toegang met @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/intlayer_CMS.md)
358
+ - [Handleiding voor zelf hosten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/nl/self_hosting.md)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2025-08-23
3
+ updatedAt: 2026-06-30
4
4
  title: Intlayer CMS | Zewnętrzne zarządzanie treścią w Intlayer CMS
5
5
  description: Zewnętrzne zarządzanie treścią w Intlayer CMS, aby delegować zarządzanie treścią do Twojego zespołu.
6
6
  keywords:
@@ -18,6 +18,9 @@ slugs:
18
18
  - cms
19
19
  youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
20
20
  history:
21
+ - version: 9.0.0
22
+ date: 2026-06-30
23
+ changes: "Dodano sekcję samodzielnego hostowania"
21
24
  - version: 6.0.1
22
25
  date: 2025-09-22
23
26
  changes: "Dodano dokumentację synchronizacji na żywo"
@@ -384,6 +387,18 @@ Uwagi i ograniczenia:
384
387
  - Flaga `live` jest oceniana dla każdego słownika podczas budowania (build time). Jeśli zdalna zawartość nie była oznaczona jako `live=true` podczas budowania (build time), musisz przebudować projekt, aby włączyć Live Sync dla tego słownika.
385
388
  - Serwer live sync musi mieć możliwość zapisu do `.intlayer`. W kontenerach upewnij się, że masz dostęp do zapisu do `/.intlayer`.
386
389
 
390
+ ## Samodzielne hostowanie (Self-Hosting)
391
+
392
+ Intlayer może działać w całości na Twojej własnej infrastrukturze. Jedna komenda uruchamia pełny stos (panel, API, bazę danych, magazyn obiektów i pocztę e-mail) za pomocą Docker Compose:
393
+
394
+ ```sh
395
+ curl -fsSL https://intlayer.org/install.sh | sh
396
+ ```
397
+
398
+ Pełny przewodnik konfiguracji, dokumentację zmiennych środowiskowych, instrukcje aktualizacji oraz procedury tworzenia kopii zapasowych i przywracania znajdziesz w [Przewodniku po samodzielnym hostowaniu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/self_hosting.md).
399
+
400
+ ---
401
+
387
402
  ## Debug
388
403
 
389
404
  Jeśli napotkasz jakiekolwiek problemy z CMS, sprawdź następujące kwestie:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-26
3
+ updatedAt: 2026-06-30
4
4
  title: Nowy Intlayer v9 - Co nowego?
5
5
  description: Odkryj nowości w Intlayer v9. Przedstawiamy pakiety kompatybilności typu drop-in dla popularnych bibliotek i18n oraz wsparcie dla Kolekcji (Collections) i Wariantów (Variants).
6
6
  keywords:
@@ -9,6 +9,8 @@ keywords:
9
9
  - Migracja
10
10
  - Kolekcje
11
11
  - Warianty
12
+ - Self-Hosting
13
+ - Docker
12
14
  - i18next
13
15
  - next-intl
14
16
  - vue-i18n
@@ -299,6 +301,59 @@ npm install intlayer react-native-intlayer
299
301
 
300
302
  ---
301
303
 
304
+ ## SDK CMS: używaj Intlayer jako bezgłowej bazy danych treści
305
+
306
+ Intlayer v9 dostarcza przejrzysty, samodzielnie uwierzytelniający się SDK w `@intlayer/api` do programowej interakcji z CMS — pobieranie projektów, pobieranie słowników oraz wysyłanie lub aktualizowanie ich z własnego serwera, skryptów lub CI. Uwierzytelnianie (OAuth2 `client_credentials`) jest obsługiwane i odświeżane za Ciebie.
307
+
308
+ SDK jest podzielony na **dwa osobne importy**, dzięki czemu Twój bundle zawiera tylko te domeny, których faktycznie używasz:
309
+
310
+ 1. `createIntlayerCMS` — lekki **uwierzytelniacz** przechowujący poświadczenia i zarządzany token (bez dołączania klienta domeny).
311
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … — **łączniki endpointów** dla poszczególnych domen, każdy importowany z własnej podścieżki.
312
+
313
+ ```ts fileName="cms.ts"
314
+ import { createIntlayerCMS } from "@intlayer/api";
315
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
316
+
317
+ // Konfiguracja jest opcjonalna: poświadczenia są pobierane z INTLAYER_CLIENT_ID /
318
+ // INTLAYER_CLIENT_SECRET rozwiązywanych przez `@intlayer/config/built`.
319
+ const cms = createIntlayerCMS();
320
+
321
+ // Odczyt
322
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
323
+
324
+ // Zapis — używaj CMS jak bazy danych
325
+ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
326
+ ```
327
+
328
+ > Bezpieczeństwo: poświadczenia CMS dają dostęp do zapisu Twoich treści. Twórz uwierzytelniacz wyłącznie **po stronie serwera** — nigdy nie wysyłaj `clientId` / `clientSecret` do przeglądarki.
329
+
330
+ ---
331
+
332
+ ## Samodzielne hostowanie (Self-Hosting)
333
+
334
+ Intlayer v9 zapewnia pełne wsparcie dla uruchamiania własnej instancji Intlayer za pomocą jednej komendy — bez konieczności posiadania konta Intlayer Cloud.
335
+
336
+ ```sh
337
+ curl -fsSL https://intlayer.org/install.sh | sh
338
+ ```
339
+
340
+ Instalator pobiera `docker-compose.yml` i `.env`, automatycznie generuje wymagane sekrety i uruchamia `docker compose up -d`. Wszystko — panel, API, baza danych, magazyn obiektów oraz transakcyjne wiadomości e-mail — działa lokalnie w kontenerach.
341
+
342
+ ### Uwzględnione serwisy
343
+
344
+ | Serwis | Przeznaczenie |
345
+ | ------------------------------------------ | ---------------------------------------------------------------------------------- |
346
+ | **app** (TanStack Start) | Interfejs panelu na porcie `3000` |
347
+ | **backend** (Fastify/Bun) | REST API na porcie `3100` |
348
+ | **MongoDB 7** (jednowęzłowy zestaw replik) | Główna baza danych |
349
+ | **Redis 7** | Kolejki zadań i pamięć podręczna |
350
+ | **MinIO** | Magazyn obiektów zgodny z S3 (awatary, zrzuty ekranu) |
351
+ | **Mailpit** | Lokalny odbiorca SMTP + interfejs webowy dla poczty transakcyjnej na porcie `8025` |
352
+
353
+ Chromium (używany do generowania zrzutów ekranu przez Puppeteer) jest wbudowany w obraz backendu — żaden dodatkowy kontener nie jest potrzebny.
354
+
355
+ ---
356
+
302
357
  ## Uwagi dotyczące migracji z wersji v8
303
358
 
304
359
  Jeśli aktualizujesz aplikację z wersji v8, pamiętaj, że wersja v9 nie zawiera zmian wprowadzających niekompatybilność wsteczną (breaking changes). Oto jednak kluczowe zmiany:
@@ -314,3 +369,5 @@ Jeśli aktualizujesz aplikację z wersji v8, pamiętaj, że wersja v9 nie zawier
314
369
  - [Przewodnik po pakietach kompatybilności (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/compat/index.md)
315
370
  - [Dynamiczne słowniki - Kolekcje i Warianty](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dynamic_dictionaries/index.md)
316
371
  - [Dokumentacja konfiguracji](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md)
372
+ - [SDK CMS - Programowy dostęp z @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_CMS.md)
373
+ - [Przewodnik po samodzielnym hostowaniu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/self_hosting.md)