@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.
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +16 -1
- package/docs/ar/releases/v9.md +58 -1
- package/docs/ar/self_hosting.md +349 -0
- package/docs/bn/intlayer_CMS.md +570 -0
- package/docs/bn/releases/v9.md +358 -0
- package/docs/cs/releases/v9.md +358 -0
- package/docs/de/intlayer_CMS.md +117 -1
- package/docs/de/releases/v9.md +61 -1
- package/docs/de/self_hosting.md +349 -0
- package/docs/en/intlayer_CMS.md +171 -1
- package/docs/en/releases/v9.md +45 -2
- package/docs/en/self_hosting.md +349 -0
- package/docs/en-GB/intlayer_CMS.md +16 -1
- package/docs/en-GB/releases/v9.md +47 -2
- package/docs/en-GB/self_hosting.md +349 -0
- package/docs/es/intlayer_CMS.md +117 -1
- package/docs/es/releases/v9.md +61 -1
- package/docs/es/self_hosting.md +349 -0
- package/docs/fr/intlayer_CMS.md +117 -1
- package/docs/fr/releases/v9.md +61 -1
- package/docs/fr/self_hosting.md +349 -0
- package/docs/hi/intlayer_CMS.md +16 -1
- package/docs/hi/releases/v9.md +59 -1
- package/docs/hi/self_hosting.md +349 -0
- package/docs/id/releases/v9.md +31 -1
- package/docs/id/self_hosting.md +349 -0
- package/docs/it/intlayer_CMS.md +117 -1
- package/docs/it/releases/v9.md +61 -1
- package/docs/it/self_hosting.md +349 -0
- package/docs/ja/intlayer_CMS.md +191 -10
- package/docs/ja/releases/v9.md +31 -1
- package/docs/ja/self_hosting.md +349 -0
- package/docs/ko/intlayer_CMS.md +189 -6
- package/docs/ko/releases/v9.md +30 -1
- package/docs/ko/self_hosting.md +349 -0
- package/docs/nl/releases/v9.md +358 -0
- package/docs/pl/intlayer_CMS.md +16 -1
- package/docs/pl/releases/v9.md +58 -1
- package/docs/pl/self_hosting.md +349 -0
- package/docs/pt/intlayer_CMS.md +117 -1
- package/docs/pt/releases/v9.md +61 -1
- package/docs/pt/self_hosting.md +349 -0
- package/docs/ru/intlayer_CMS.md +196 -15
- package/docs/ru/releases/v9.md +59 -1
- package/docs/ru/self_hosting.md +349 -0
- package/docs/tr/intlayer_CMS.md +16 -1
- package/docs/tr/releases/v9.md +46 -1
- package/docs/tr/self_hosting.md +349 -0
- package/docs/uk/intlayer_CMS.md +16 -1
- package/docs/uk/releases/v9.md +58 -1
- package/docs/uk/self_hosting.md +349 -0
- package/docs/vi/releases/v9.md +31 -1
- package/docs/vi/self_hosting.md +349 -0
- package/docs/zh/releases/v9.md +31 -1
- package/docs/zh/self_hosting.md +349 -0
- package/package.json +6 -6
- 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)
|
package/docs/de/intlayer_CMS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-08-23
|
|
3
|
-
updatedAt:
|
|
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:
|
package/docs/de/releases/v9.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-14
|
|
3
|
-
updatedAt: 2026-06-
|
|
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)
|