@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: Nový Intlayer v9 - Co je nového?
5
+ description: Zjistěte, co je nového v Intlayer v9. Představujeme drop-in balíčky kompatibility pro oblíbené i18n knihovny, podporu pro Kolekce a Varianty a vlastní hostování přes 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
+ # Nový Intlayer v9 - Co je nového?
26
+
27
+ Vítejte v Intlayer v9! Toto hlavní vydání představuje obrovský milník ve zjednodušení migrace na Intlayer díky **balíčkům compat adaptérů** pro hlavní i18n knihovny (`react-i18next`, `next-intl`, `vue-i18n` atd.) a přidává podporu pro bohaté struktury obsahu: **Kolekce** a **Varianty**.
28
+
29
+ ## Obsah
30
+
31
+ <TOC levels={[2]} maxDepth={1} />
32
+
33
+ ---
34
+
35
+ ## Balíčky compat adaptérů
36
+
37
+ Migrace na Intlayer z oblíbených i18n knihoven je nyní snazší než kdykoli předtím. Vytvořili jsme pět balíčků kompatibility, které vystavují **přesně stejná veřejná API** jako standardní i18n knihovny, ale při běhu delegují veškerou překladovou práci na Intlayer.
38
+
39
+ ### Vystavení stejného veřejného API se striktním typováním
40
+
41
+ Nahrazením importů získáte všechny výhody Intlayeru (včetně typové bezpečnosti v době kompilace vůči vašim skutečným slovníkům) s minimálními změnami kódu:
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
+ Jednoduše například změňte:
52
+
53
+ ```ts
54
+ import { useTranslation } from "react-i18next";
55
+ ```
56
+
57
+ na:
58
+
59
+ ```ts
60
+ import { useTranslation } from "@intlayer/react-i18next";
61
+ ```
62
+
63
+ Vaše klíče budou nyní **striktně typovány** vůči vašim Intlayer slovníkům a nabídnou plné automatické doplňování tečkových cest ve vašem IDE!
64
+
65
+ ### Pluginy pro aliasy bundlerů (Vite, Next.js, Turbopack)
66
+
67
+ Aby bylo možné migrovat bez ručního přepisování všech importů, každý balíček compat adaptéru obsahuje **vlastní plugin pro bundler** (Vite nebo Next.js) pod subcestou `/plugin`.
68
+
69
+ Tyto pluginy automaticky přepisují stávající importy (např. `react-i18next` nebo `next-intl`) na jejich ekvivalenty `@intlayer/*` v době sestavení.
70
+
71
+ #### Příklad Next.js (Webpack / Turbopack)
72
+
73
+ Místo `withIntlayer` zabalte konfiguraci Next.js pomocí pluginu kompatibility:
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
+ #### Příklad Vite (React, Vue, Solid, Svelte)
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
+ ## Sdílený runtime resolver
98
+
99
+ Všechny compat adaptéry nyní směrují rozlišení překladů přes jeden vysoce optimalizovaný runtime parser: `@intlayer/core/messageFormat`.
100
+
101
+ - **Interpolace zpráv**: Zpracovává standardní `{{var}}` (bílé znaky a tečkové cesty), argumenty ve formátu ICU (`{v, number, percent}` atd.) a holé šablony `{var}`.
102
+ - **Resolver uzlů zpráv**: Zpracovává vnořené uzly: `insert()`, `plural()` (pravidla CLDR pro množné číslo), `enu()` (výčet), `gender()`, HTML tagy, pole a volatelné funkční uzly.
103
+ - **Tokenizovaný parser tagů**: Podporuje vložené XML/HTML tagy a číslované tagy (např. `<1>children</1>`) pro vykreslování formátovaného textu přímo z krabice.
104
+
105
+ ---
106
+
107
+ ## Specifikace funkcí: Kolekce a varianty
108
+
109
+ Intlayer v9 jde za hranice statických objektů klíč–hodnota a umožňuje slovníkům deklarovat dynamické rozložení struktur, které jsou plně typovány end-to-end.
110
+
111
+ ### 1. Kolekce
112
+
113
+ Definujte seznam seřazených položek spravovaných CMS (např. FAQ, produkty nebo seznamy blogů). Každá položka žije ve vlastním souboru `.content.ts` se stejným `key` a číslem `item`:
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
+ #### Použití:
142
+
143
+ ```ts
144
+ // Načíst všechny položky jako pole
145
+ const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
146
+
147
+ // Načíst jednu položku podle indexu
148
+ const faq = useIntlayer("faq", { item: 2 }); // -> { question: string, answer: string }
149
+ ```
150
+
151
+ ### 2. Varianty
152
+
153
+ Poskytujte A/B testy, sezónní záhlaví, příznaky funkcí nebo vlastní vstupní stránky:
154
+
155
+ #### Textové varianty (např. A/B testování)
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
+ #### Použití:
171
+
172
+ ```ts
173
+ const banner = useIntlayer("hero-banner", { variant: "black_friday" });
174
+ ```
175
+
176
+ #### Objektové varianty (např. Dynamické záznamy)
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
+ #### Použití:
194
+
195
+ ```ts
196
+ // Načte pouze požadovaný záznam dynamicky (vyžaduje Suspense)
197
+ const product = useIntlayer("product-copy", {
198
+ variant: { id: "prod_123", category: "books" },
199
+ });
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Dynamické načítání a optimalizace velikosti bundlu
205
+
206
+ Aby byly bundly extrémně malé, Intlayer v9 podporuje dynamické líné načítání.
207
+
208
+ Ve své konfiguraci nastavte `importMode` na `'dynamic'` nebo `'fetch'`:
209
+
210
+ ```ts fileName="intlayer.config.ts"
211
+ export default {
212
+ dictionary: {
213
+ importMode: "dynamic", // "static" | "dynamic" | "fetch"
214
+ },
215
+ };
216
+ ```
217
+
218
+ V době sestavení `@intlayer/swc` a `@intlayer/babel` prohledají vaše soubory a nahradí volání `useIntlayer`/`getIntlayer` wrappers tree-shakeable (`useDictionary`/`useDictionaryDynamic`). Načítá se pouze obsah potřebný pro vybranou položku kolekce, variantu nebo jazyk, čímž se zabrání tomu, aby váš produkční bundle obsahoval nevyužité překlady.
219
+
220
+ ---
221
+
222
+ ## Vite plugin: zabudovaný kompilátor a proxy
223
+
224
+ Plugin Vite `intlayer()` nyní přímo sdružuje **kompilátor** a **proxy pro směrování jazyků**, takže většina projektů potřebuje pouze jeden plugin v `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
+ - **Kompilátor**: Aktivuje se automaticky, když je `compiler.enabled` nastaveno na `true` a je nakonfigurována cesta `compiler.output`. `intlayerCompiler()` již není třeba registrovat samostatně.
236
+ - **Proxy**: Aktivuje se automaticky na základě nové možnosti `routing.enableProxy` (výchozí hodnota `true`). Propojuje middleware pro detekci jazyka, přesměrování a přepisování ve vývoji, náhledu a produkčním SSR. `intlayerProxy()` již není třeba registrovat samostatně.
237
+
238
+ ### Možnost `routing.enableProxy`
239
+
240
+ Nová možnost `routing.enableProxy` řídí, zda je proxy pro směrování jazyků zapojena. Výchozí hodnota je `true`. Vypněte ji, když chcete směrování jazyků zpracovávat sami:
241
+
242
+ ```ts fileName="intlayer.config.ts"
243
+ import type { IntlayerConfig } from "intlayer";
244
+
245
+ const config: IntlayerConfig = {
246
+ routing: {
247
+ enableProxy: false, // Výchozí: true
248
+ },
249
+ };
250
+
251
+ export default config;
252
+ ```
253
+
254
+ Samostatné pluginy `intlayerCompiler()` a `intlayerProxy()` zůstávají exportovány pro pokročilá nastavení. Jejich registrace společně s `intlayer()` je bezpečná — každý plugin se deduplikuje a spustí se pouze jednou.
255
+
256
+ ---
257
+
258
+ ## Kompilátor je ve výchozím nastavení zakázán
259
+
260
+ Počínaje Intlayer v9 je **kompilátor ve výchozím nastavení zakázán** (`compiler.enabled` nyní výchozí hodnota je `false`). Chcete-li zapnout extrakci vašich souborů `.content.ts` v době sestavení, nastavte `compiler.enabled: true` ve své konfiguraci:
261
+
262
+ ```ts fileName="intlayer.config.ts"
263
+ import type { IntlayerConfig } from "intlayer";
264
+
265
+ const config: IntlayerConfig = {
266
+ compiler: {
267
+ enabled: true, // Výchozí: false — vyžadováno pro povolení kompilátoru od v9
268
+ output: ({ fileName }) => `./${fileName}.content.ts`,
269
+ },
270
+ };
271
+
272
+ export default config;
273
+ ```
274
+
275
+ Když je kompilátor zakázán, Intlayer přeskočí krok extrakce v době sestavení a spoléhá na vaše již deklarované slovníky. Povolte jej pouze tehdy, když chcete, aby plugin bundleru (`@intlayer/swc`, `@intlayer/babel` nebo plugin Vite `intlayer()`) automaticky extrahoval obsah.
276
+
277
+ ---
278
+
279
+ ## React Native: importy z jednoho balíčku
280
+
281
+ V aplikaci React Native nebo Expo již nemusíte žonglovat s `react-intlayer` i `react-native-intlayer`. Balíček `react-native-intlayer` nyní **znovu exportuje celé API `react-intlayer`** (hooks, utility a subcesty `/format`, `/html` a `/markdown`) a jeho `IntlayerProvider` automaticky aplikuje polyfilly React Native.
282
+
283
+ Importujte vše z jediného balíčku `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
+ > Import z `react-intlayer` nadále funguje, ale `react-native-intlayer` je nyní doporučeným jediným vstupním bodem pro React Native — jeho provider dodává polyfilly, které webově orientovaný provider `react-intlayer` nemá.
298
+
299
+ ---
300
+
301
+ ## CMS SDK: použijte Intlayer jako headless databázi obsahu
302
+
303
+ Intlayer v9 dodává přehledné, automaticky autentizující SDK v `@intlayer/api` pro programatickou interakci s CMS — načítejte projekty, načítejte slovníky a odesílejte nebo aktualizujte je z vlastního serveru, skriptů nebo CI. Autentizace (OAuth2 `client_credentials`) je spravována a obnovována za vás.
304
+
305
+ SDK je rozděleno do **dvou samostatných importů**, aby váš bundle obsahoval pouze domény, které skutečně používáte:
306
+
307
+ 1. `createIntlayerCMS` — lehký **autentizátor** uchovávající přihlašovací údaje a spravovaný token (žádný klientský bundle domény není součástí).
308
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … — **binery endpointů** pro jednotlivé domény, každý importovaný z vlastní subcesty.
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
+ // Čtení
317
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
318
+
319
+ // Zápis — použijte CMS jako databázi
320
+ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
321
+ ```
322
+
323
+ > Zabezpečení: přihlašovací údaje CMS udělují oprávnění k zápisu vašeho obsahu. Autentizátor vytvářejte vždy pouze **na straně serveru** — nikdy neodesílejte `clientId`/`clientSecret` do prohlížeče.
324
+
325
+ ---
326
+
327
+ ## Vlastní hostování
328
+
329
+ Intlayer v9 poskytuje prvotřídní podporu pro provozování vlastní instance Intlayeru jediným příkazem — bez nutnosti účtu Intlayer Cloud.
330
+
331
+ ```sh
332
+ curl -fsSL https://intlayer.org/install.sh | sh
333
+ ```
334
+
335
+ Instalátor stáhne `docker-compose.yml` a `.env`, automaticky vygeneruje požadovaná tajemství a spustí `docker compose up -d`. Vše — dashboard, API, databáze, objektové úložiště a transakční e-mail — běží lokálně v kontejnerech.
336
+
337
+ ---
338
+
339
+ ## Poznámky k migraci z v8
340
+
341
+ Pokud provádíte upgrade z v8, vezměte na vědomí, že v9 neobsahuje žádné zlomové změny. Zde jsou však klíčové změny:
342
+
343
+ - **Kompilátor ve výchozím nastavení zakázán**: `compiler.enabled` nyní výchozí hodnota je `false`. Pokud se spoléháte na extrakci souborů `.content.ts` v době sestavení, nastavte `compiler.enabled: true` v `intlayer.config.ts`.
344
+ - **Plugin Vite**: Kompilátor a proxy pro směrování jazyků jsou nyní součástí `intlayer()`. Pokud jste dříve ručně registrovali `intlayerCompiler()` nebo `intlayerProxy()`, můžete je odstranit — jsou automaticky deduplikovány, takže jejich ponechání je neškodné. Použijte `routing.enableProxy: false` pro vypnutí proxy.
345
+ - **Jazyky a dialekty**: Pokud používáte externí závislosti i18n, přidejte příslušné compat adaptérové pluginy do vaší konfigurace nebo nastavení bundleru pro automatické přepisování importů.
346
+ - **Vlastní selektory**: Při volání `useIntlayer` je druhý parametr nyní vyhrazen pro objekt možností obsahující `{ locale, item, variant }`. Pokud jste dříve předávali řetězec jazyka přímo, stále to lze, ale použití objektu možností je doporučeno pro pokročilé výběry.
347
+ - **React Native**: `react-native-intlayer` nyní znovu exportuje celé API `react-intlayer`. V aplikaci React Native importujte vše z `react-native-intlayer` a odeberte přímou závislost na `react-intlayer`. Stávající importy z `react-intlayer` nadále fungují.
348
+
349
+ ---
350
+
351
+ ## Užitečné odkazy
352
+
353
+ - [Průvodce balíčky compat adaptérů](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/compat/index.md)
354
+ - [Dynamické slovníky - Kolekce a varianty](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/dynamic_dictionaries/index.md)
355
+ - [Reference konfigurace](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/configuration.md)
356
+ - [Průvodce React Native a Expo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/intlayer_with_react_native+expo.md)
357
+ - [CMS SDK - Programatický přístup s @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/intlayer_CMS.md)
358
+ - [Průvodce vlastním hostováním](https://github.com/aymericzip/intlayer/blob/main/docs/docs/cs/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 | Externalisieren Sie Ihre Inhalte in das Intlayer CMS
5
5
  description: Externalisieren Sie Ihre Inhalte in das Intlayer CMS, um die Verwaltung Ihrer Inhalte an Ihr Team zu delegieren.
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: "Self-Hosting-Abschnitt hinzugefügt: Docker Compose Bootstrap, Service-Inventar, SDK-Konfiguration, optionale Funktionen und Upgrade-Hinweise"
21
24
  - version: 6.0.1
22
25
  date: 2025-09-22
23
26
  changes: "Live-Sync-Dokumentation hinzugefügt"
@@ -380,6 +383,119 @@ Hinweise und Einschränkungen:
380
383
  - Das `live`-Flag wird für jedes Wörterbuch zur Build-Zeit ausgewertet. Wenn der entfernte Inhalt während des Builds nicht mit `live=true` gekennzeichnet war, müssen Sie neu bauen, um Live Sync für dieses Wörterbuch zu aktivieren.
381
384
  - Der Live-Sync-Server muss in der Lage sein, in `.intlayer` zu schreiben. In Containern stellen Sie sicher, dass Schreibzugriff auf `/.intlayer` besteht.
382
385
 
386
+ ## Self-Hosting
387
+
388
+ Intlayer kann vollständig auf Ihrer eigenen Infrastruktur betrieben werden – kein Intlayer Cloud-Konto erforderlich. Ein einziger Befehl bootstrappt den gesamten Stack (Dashboard, API, Datenbank, Objektspeicher und E-Mail) mit Docker Compose:
389
+
390
+ ```sh
391
+ curl -fsSL https://intlayer.org/install.sh | sh
392
+ ```
393
+
394
+ Dies lädt eine `docker-compose.yml` und eine `.env` herunter, generiert automatisch die erforderlichen Secrets (`BETTER_AUTH_SECRET`, MinIO-Anmeldedaten) und startet alle Container mit `docker compose up -d`. Ein erneutes Ausführen desselben Befehls auf einer bestehenden Installation führt ein Rolling Upgrade ohne Datenverlust durch.
395
+
396
+ ### Gestartete Dienste
397
+
398
+ | Dienst | Port(s) | Zweck |
399
+ | ------------------- | ------------------------------ | ------------------------------------------- |
400
+ | **app** (Dashboard) | `3000` | TanStack Start CMS-Oberfläche |
401
+ | **backend** (API) | `3100` | Fastify REST API |
402
+ | **MongoDB 7** | intern | Primäre Datenbank (single-node replica set) |
403
+ | **Redis 7** | intern | Job-Warteschlangen und Caching |
404
+ | **MinIO** | `9000` (S3), `9001` (Konsole) | S3-kompatibler Objektspeicher |
405
+ | **Mailpit** | `1025` (SMTP), `8025` (Web-UI) | Lokale transaktionale E-Mail-Senke |
406
+
407
+ Chromium (für die Puppeteer-Screenshot-Generierung) ist im Backend-Image gebündelt – kein separater Container erforderlich.
408
+
409
+ ### Ihr Projekt mit einer selbst gehosteten Instanz verbinden
410
+
411
+ Richten Sie Ihre Intlayer-Konfiguration auf Ihr eigenes Backend und Dashboard statt auf `intlayer.org` aus:
412
+
413
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
414
+ import type { IntlayerConfig } from "intlayer";
415
+
416
+ const config: IntlayerConfig = {
417
+ editor: {
418
+ clientId: process.env.INTLAYER_CLIENT_ID,
419
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
420
+
421
+ /**
422
+ * URL des selbst gehosteten CMS-Dashboards.
423
+ * Standard: https://app.intlayer.org
424
+ */
425
+ cmsURL: process.env.INTLAYER_CMS_URL, // z.B. http://localhost:3000
426
+
427
+ /**
428
+ * URL der selbst gehosteten Backend-API.
429
+ * Standard: https://back.intlayer.org
430
+ */
431
+ backendURL: process.env.INTLAYER_BACKEND_URL, // z.B. http://localhost:3100
432
+ },
433
+ };
434
+
435
+ export default config;
436
+ ```
437
+
438
+ Setzen Sie die passenden Umgebungsvariablen in Ihrem Projekt:
439
+
440
+ ```sh
441
+ INTLAYER_CMS_URL=http://localhost:3000
442
+ INTLAYER_BACKEND_URL=http://localhost:3100
443
+ INTLAYER_CLIENT_ID=<your-client-id>
444
+ INTLAYER_CLIENT_SECRET=<your-client-secret>
445
+ ```
446
+
447
+ Erstellen Sie Zugangsdaten in Ihrem selbst gehosteten Dashboard unter `http://localhost:3000/projects`.
448
+
449
+ ### `@intlayer/api` SDK: auf ein selbst gehostetes Backend verweisen
450
+
451
+ Bei programmatischer Verwendung des SDK übergeben Sie `backendURL` explizit an `createIntlayerCMS`:
452
+
453
+ ```typescript fileName="cms.ts" codeFormat="typescript"
454
+ import { createIntlayerCMS } from "@intlayer/api";
455
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
456
+
457
+ const cms = createIntlayerCMS({
458
+ editor: {
459
+ clientId: process.env.INTLAYER_CLIENT_ID,
460
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
461
+ backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100
462
+ },
463
+ });
464
+
465
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
466
+ ```
467
+
468
+ ### Optionale Funktionen
469
+
470
+ Diese Funktionen erfordern externe Konten und funktionieren weiterhin ohne ihre Schlüssel in der selbst gehosteten `.env`:
471
+
472
+ | Funktion | Umgebungsvariable(n) |
473
+ | ----------------------------------- | ----------------------------------------------- |
474
+ | KI-Übersetzung / Audit | `OPENAI_API_KEY` |
475
+ | Abrechnung | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, … |
476
+ | GitHub OAuth | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` |
477
+ | Google OAuth | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` |
478
+ | GitLab / Microsoft / LinkedIn OAuth | `GITLAB_*`, `MICROSOFT_*`, `LINKEDIN_*` |
479
+ | Transaktionale E-Mail via Resend | `RESEND_API_KEY` (Standard: Mailpit SMTP) |
480
+
481
+ ### Datenpersistenz und Upgrades
482
+
483
+ Drei Docker-Volumes halten alle dauerhaften Daten: `mongo-data`, `redis-data` und `minio-data`. Sie überleben Container-Neustarts und Upgrades. Ein erneutes Ausführen des Installers lädt die neuesten Images herunter und führt ein Rolling `docker compose up -d` durch.
484
+
485
+ Auf dem Host verfügbare Ports:
486
+
487
+ | Port | Dienst |
488
+ | ------ | --------------------------------------------------- |
489
+ | `3000` | Dashboard |
490
+ | `3100` | Backend-API |
491
+ | `8025` | Mailpit E-Mail-Web-UI |
492
+ | `9000` | MinIO S3 API (erforderlich für Browser-Asset-Laden) |
493
+ | `9001` | MinIO-Konsole |
494
+
495
+ Eine vollständige Referenz aller verfügbaren Umgebungsvariablen und erweiterten Optionen (Reverse Proxy, benutzerdefinierte Domains, Sicherung/Wiederherstellung) finden Sie im [Self-Hosting-Leitfaden](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/self_hosting.md).
496
+
497
+ ---
498
+
383
499
  ## Debug
384
500
 
385
501
  Wenn Sie Probleme mit dem CMS haben, überprüfen Sie Folgendes:
@@ -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: Neues Intlayer v9 – Was ist neu?
5
5
  description: Entdecken Sie die Neuerungen in Intlayer v9. Einführung von Drop-in-Kompatibilitätspaketen für beliebte i18n-Bibliotheken und Unterstützung für Collections und Variants.
6
6
  keywords:
@@ -9,6 +9,9 @@ keywords:
9
9
  - Migration
10
10
  - Collections
11
11
  - Variants
12
+ - CMS SDK
13
+ - Self-Hosting
14
+ - Docker
12
15
  - i18next
13
16
  - next-intl
14
17
  - vue-i18n
@@ -299,13 +302,68 @@ npm install intlayer react-native-intlayer
299
302
 
300
303
  ---
301
304
 
305
+ ## CMS SDK: Intlayer als Headless-Content-Datenbank nutzen
306
+
307
+ Intlayer v9 enthält ein sauberes, sich selbst authentifizierendes SDK in `@intlayer/api`, um programmgesteuert mit dem CMS zu interagieren – Projekte abrufen, Dictionaries abrufen sowie diese von Ihrem eigenen Server, Skripten oder CI aus pushen oder aktualisieren. Die Authentifizierung (OAuth2 `client_credentials`) wird für Sie übernommen und erneuert.
308
+
309
+ Das SDK ist in **zwei getrennte Importe** aufgeteilt, sodass Ihr Bundle nur die Domänen enthält, die Sie tatsächlich verwenden:
310
+
311
+ 1. `createIntlayerCMS` – ein leichtgewichtiger **Authentifikator**, der die Anmeldedaten und das verwaltete Token hält (kein Domänen-Client gebündelt).
312
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … – **Endpoint-Binder** pro Domäne, jeweils aus ihrem eigenen Unterpfad importiert.
313
+
314
+ ```ts fileName="cms.ts"
315
+ import { createIntlayerCMS } from "@intlayer/api";
316
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
317
+
318
+ // Konfiguration ist optional: Anmeldedaten fallen auf INTLAYER_CLIENT_ID /
319
+ // INTLAYER_CLIENT_SECRET zurück, aufgelöst durch `@intlayer/config/built`.
320
+ const cms = createIntlayerCMS();
321
+
322
+ // Lesen
323
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
324
+
325
+ // Schreiben – nutze das CMS wie eine Datenbank
326
+ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
327
+ ```
328
+
329
+ > Sicherheit: Die CMS-Anmeldedaten gewähren Schreibzugriff auf Ihre Inhalte. Erstellen Sie den Authentifikator immer nur **serverseitig** – senden Sie `clientId` / `clientSecret` niemals an den Browser.
330
+
331
+ ---
332
+
333
+ ## Self-Hosting
334
+
335
+ Intlayer v9 bietet erstklassige Unterstützung für den Betrieb Ihrer eigenen Intlayer-Instanz mit einem einzigen Befehl – kein Intlayer Cloud-Konto erforderlich.
336
+
337
+ ```sh
338
+ curl -fsSL https://intlayer.org/install.sh | sh
339
+ ```
340
+
341
+ Das Installationsprogramm lädt eine `docker-compose.yml` und eine `.env` herunter, generiert automatisch die erforderlichen Secrets und führt `docker compose up -d` aus. Alles – das Dashboard, die API, die Datenbank, der Objektspeicher und die transaktionale E-Mail – läuft lokal in Containern.
342
+
343
+ ### Enthaltene Dienste
344
+
345
+ | Dienst | Zweck |
346
+ | --------------------------------------- | --------------------------------------------------------------------- |
347
+ | **app** (TanStack Start) | Dashboard-Oberfläche auf Port `3000` |
348
+ | **backend** (Fastify/Bun) | REST API auf Port `3100` |
349
+ | **MongoDB 7** (single-node replica set) | Primäre Datenbank |
350
+ | **Redis 7** | Job-Warteschlangen und Caching |
351
+ | **MinIO** | S3-kompatibler Objektspeicher (Avatare, Screenshots) |
352
+ | **Mailpit** | Lokale SMTP-Senke + Web-UI für transaktionale E-Mails auf Port `8025` |
353
+
354
+ Chromium (für die Puppeteer-Screenshot-Generierung verwendet) ist im Backend-Image gebündelt – kein zusätzlicher Container erforderlich.
355
+
356
+ ---
357
+
302
358
  ## Migrationshinweise von v8
303
359
 
304
360
  Wenn Sie von v8 upgraden, beachten Sie, dass v9 keine Breaking Changes enthält. Hier sind jedoch die wichtigsten Änderungen:
305
361
 
306
362
  - **Compiler standardmäßig deaktiviert**: `compiler.enabled` ist jetzt standardmäßig `false`. Wenn Sie auf die Extraktion Ihrer `.content.ts`-Dateien zur Build-Zeit angewiesen sind, setzen Sie `compiler.enabled: true` in Ihrer `intlayer.config.ts`.
363
+ - **Vite-Plugin**: Der Compiler und der Locale-Routing-Proxy sind nun in `intlayer()` gebündelt. Falls Sie zuvor `intlayerCompiler()` oder `intlayerProxy()` manuell registriert haben, können Sie diese entfernen – sie werden automatisch dedupliziert, sodass das Beibehalten harmlos ist. Verwenden Sie `routing.enableProxy: false`, um den Proxy zu deaktivieren.
307
364
  - **Locales & Dialects**: Wenn Sie externe i18n-Abhängigkeiten verwenden, fügen Sie deren entsprechende Kompatibilitätsadapter-Plugins in Ihrer Konfiguration oder Ihrem Bundler-Setup hinzu, um Imports automatisch umzuschreiben.
308
365
  - **Custom Selectors**: Beim Aufruf von `useIntlayer` ist der zweite Parameter nun für ein Options-Objekt reserviert, das `{ locale, item, variant }` enthält. Wenn Sie zuvor direkt einen Locale-String übergeben haben, können Sie dies weiterhin tun, aber die Verwendung des Options-Objekts wird für erweiterte Auswahlen empfohlen.
366
+ - **React Native**: `react-native-intlayer` re-exportiert nun die gesamte `react-intlayer` API. Importieren Sie in einer React Native App alles aus `react-native-intlayer` und entfernen Sie die direkte `react-intlayer`-Abhängigkeit. Bestehende `react-intlayer`-Imports funktionieren weiterhin.
309
367
 
310
368
  ---
311
369
 
@@ -314,3 +372,5 @@ Wenn Sie von v8 upgraden, beachten Sie, dass v9 keine Breaking Changes enthält.
314
372
  - [Leitfaden für Compat Adapter Packages](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/compat/index.md)
315
373
  - [Dynamische Dictionaries – Collections & Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dynamic_dictionaries/index.md)
316
374
  - [Konfigurationsreferenz](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md)
375
+ - [CMS SDK – Programmatischer Zugriff mit @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_CMS.md)
376
+ - [Self-Hosting-Leitfaden](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/self_hosting.md)