@intlayer/docs 9.0.0-canary.14 → 9.0.0-canary.16
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 +40 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +40 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/cli/index.md +1 -1
- package/docs/ar/configuration.md +42 -1
- package/docs/ar/intlayer_CMS.md +5 -128
- package/docs/ar/live-sync.md +174 -0
- package/docs/ar/releases/v9.md +45 -1
- package/docs/bn/cli/index.md +1 -1
- package/docs/bn/configuration.md +45 -1
- package/docs/cs/cli/index.md +1 -1
- package/docs/cs/configuration.md +45 -1
- package/docs/de/cli/index.md +1 -1
- package/docs/de/configuration.md +42 -1
- package/docs/de/intlayer_CMS.md +5 -135
- package/docs/de/live-sync.md +174 -0
- package/docs/de/releases/v9.md +45 -1
- package/docs/en/analytics.md +222 -0
- package/docs/en/cli/index.md +1 -1
- package/docs/en/configuration.md +42 -1
- package/docs/en/intlayer_CMS.md +6 -140
- package/docs/en/live-sync.md +184 -0
- package/docs/en/releases/v9.md +53 -3
- package/docs/en-GB/cli/index.md +1 -1
- package/docs/en-GB/configuration.md +42 -1
- package/docs/en-GB/intlayer_CMS.md +5 -128
- package/docs/en-GB/live-sync.md +173 -0
- package/docs/en-GB/releases/v9.md +45 -1
- package/docs/es/cli/index.md +1 -1
- package/docs/es/configuration.md +42 -1
- package/docs/es/intlayer_CMS.md +5 -140
- package/docs/es/live-sync.md +176 -0
- package/docs/es/releases/v9.md +45 -1
- package/docs/fr/cli/index.md +1 -1
- package/docs/fr/configuration.md +42 -1
- package/docs/fr/intlayer_CMS.md +5 -135
- package/docs/fr/live-sync.md +174 -0
- package/docs/fr/releases/v9.md +45 -1
- package/docs/hi/cli/index.md +1 -1
- package/docs/hi/configuration.md +42 -1
- package/docs/hi/intlayer_CMS.md +5 -128
- package/docs/hi/live-sync.md +174 -0
- package/docs/hi/releases/v9.md +45 -1
- package/docs/id/cli/index.md +1 -1
- package/docs/id/configuration.md +42 -1
- package/docs/id/intlayer_CMS.md +5 -139
- package/docs/id/live-sync.md +185 -0
- package/docs/id/releases/v9.md +45 -1
- package/docs/it/cli/index.md +1 -1
- package/docs/it/configuration.md +42 -1
- package/docs/it/intlayer_CMS.md +5 -128
- package/docs/it/live-sync.md +174 -0
- package/docs/it/releases/v9.md +45 -1
- package/docs/ja/cli/index.md +1 -1
- package/docs/ja/configuration.md +42 -1
- package/docs/ja/intlayer_CMS.md +5 -139
- package/docs/ja/live-sync.md +185 -0
- package/docs/ja/releases/v9.md +45 -1
- package/docs/ko/cli/index.md +1 -1
- package/docs/ko/configuration.md +42 -1
- package/docs/ko/intlayer_CMS.md +5 -141
- package/docs/ko/live-sync.md +187 -0
- package/docs/ko/releases/v9.md +45 -1
- package/docs/nl/cli/index.md +1 -1
- package/docs/nl/configuration.md +45 -1
- package/docs/pl/cli/index.md +1 -1
- package/docs/pl/configuration.md +45 -1
- package/docs/pl/intlayer_CMS.md +5 -139
- package/docs/pl/live-sync.md +185 -0
- package/docs/pl/releases/v9.md +45 -1
- package/docs/pt/cli/index.md +1 -1
- package/docs/pt/configuration.md +45 -1
- package/docs/pt/intlayer_CMS.md +5 -143
- package/docs/pt/live-sync.md +174 -0
- package/docs/pt/releases/v9.md +45 -1
- package/docs/ru/cli/index.md +1 -1
- package/docs/ru/configuration.md +42 -1
- package/docs/ru/intlayer_CMS.md +5 -139
- package/docs/ru/live-sync.md +185 -0
- package/docs/ru/releases/v9.md +45 -1
- package/docs/tr/cli/index.md +1 -1
- package/docs/tr/configuration.md +42 -1
- package/docs/tr/intlayer_CMS.md +5 -127
- package/docs/tr/live-sync.md +173 -0
- package/docs/tr/releases/v9.md +45 -1
- package/docs/uk/cli/index.md +1 -1
- package/docs/uk/configuration.md +42 -1
- package/docs/uk/intlayer_CMS.md +5 -139
- package/docs/uk/live-sync.md +185 -0
- package/docs/uk/releases/v9.md +45 -1
- package/docs/ur/cli/index.md +1 -1
- package/docs/ur/configuration.md +45 -1
- package/docs/vi/cli/index.md +1 -1
- package/docs/vi/configuration.md +42 -1
- package/docs/vi/intlayer_CMS.md +5 -139
- package/docs/vi/live-sync.md +185 -0
- package/docs/vi/releases/v9.md +45 -1
- package/docs/zh/cli/index.md +1 -1
- package/docs/zh/configuration.md +42 -1
- package/docs/zh/intlayer_CMS.md +5 -129
- package/docs/zh/live-sync.md +175 -0
- package/docs/zh/releases/v9.md +45 -1
- package/package.json +7 -7
- package/src/generated/docs.entry.ts +40 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Sincronização ao vivo | Reflita as alterações de conteúdo do CMS em tempo real
|
|
5
|
+
description: Permita que sua aplicação reflita as alterações de conteúdo do CMS Intlayer em tempo de execução, sem necessidade de rebuild ou reimplantação.
|
|
6
|
+
keywords:
|
|
7
|
+
- Sincronização ao vivo
|
|
8
|
+
- Live Sync
|
|
9
|
+
- CMS
|
|
10
|
+
- Editor Visual
|
|
11
|
+
- Internacionalização
|
|
12
|
+
- Documentação
|
|
13
|
+
- Intlayer
|
|
14
|
+
- Next.js
|
|
15
|
+
- Vite
|
|
16
|
+
history:
|
|
17
|
+
- version: 9.0.0
|
|
18
|
+
date: 2026-07-08
|
|
19
|
+
changes: "Movido da documentação do CMS Intlayer para sua própria página"
|
|
20
|
+
- version: 6.0.1
|
|
21
|
+
date: 2025-09-22
|
|
22
|
+
changes: "Adiciona documentação sobre live sync"
|
|
23
|
+
- version: 6.0.0
|
|
24
|
+
date: 2025-09-04
|
|
25
|
+
changes: "Substitui o campo `hotReload` por `liveSync`"
|
|
26
|
+
author: aymericzip
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Sincronização ao vivo
|
|
30
|
+
|
|
31
|
+
A Sincronização ao Vivo permite que a sua aplicação reflita as alterações de conteúdo do CMS em tempo de execução. Não é necessário reconstruir ou reimplantar. Quando ativada, as atualizações são transmitidas para um servidor de Sincronização ao Vivo que atualiza os dicionários que a sua aplicação lê.
|
|
32
|
+
|
|
33
|
+
## Tabela de conteúdos
|
|
34
|
+
|
|
35
|
+
<TOC/>
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Ativar a sincronização ao vivo
|
|
40
|
+
|
|
41
|
+
> A Sincronização ao Vivo requer uma conexão contínua com o servidor e está disponível no plano enterprise.
|
|
42
|
+
|
|
43
|
+
Ative a Sincronização ao Vivo atualizando a sua configuração Intlayer:
|
|
44
|
+
|
|
45
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
46
|
+
import type { IntlayerConfig } from "intlayer";
|
|
47
|
+
|
|
48
|
+
const config: IntlayerConfig = {
|
|
49
|
+
// ... outras configurações
|
|
50
|
+
editor: {
|
|
51
|
+
/**
|
|
52
|
+
* Ativa o recarregamento a quente das configurações de localidade quando são detetadas alterações.
|
|
53
|
+
* Por exemplo, quando um dicionário é adicionado ou atualizado, a aplicação atualiza
|
|
54
|
+
* o conteúdo exibido na página.
|
|
55
|
+
*
|
|
56
|
+
* Como o recarregamento a quente requer uma conexão contínua com o servidor, está
|
|
57
|
+
* disponível apenas para clientes do plano `enterprise`.
|
|
58
|
+
*
|
|
59
|
+
* Padrão: false
|
|
60
|
+
*/
|
|
61
|
+
liveSync: true,
|
|
62
|
+
},
|
|
63
|
+
dictionary: {
|
|
64
|
+
/**
|
|
65
|
+
* Controla como os dicionários são importados:
|
|
66
|
+
*
|
|
67
|
+
* - "live": Os dicionários são buscados dinamicamente usando a API de Sincronização ao Vivo.
|
|
68
|
+
* Substitui useIntlayer por useDictionaryDynamic.
|
|
69
|
+
*
|
|
70
|
+
* Nota: O modo live usa a API de Sincronização ao Vivo para buscar os dicionários. Se a chamada da API
|
|
71
|
+
* falhar, os dicionários são importados dinamicamente.
|
|
72
|
+
* Nota: Apenas dicionários com conteúdo remoto e sinalizadores "live" usam o modo live.
|
|
73
|
+
* Outros usam o modo dinâmico para melhor desempenho.
|
|
74
|
+
*/
|
|
75
|
+
importMode: "fetch",
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export default config;
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Inicie o servidor Live Sync para envolver sua aplicação:
|
|
83
|
+
|
|
84
|
+
Exemplo usando Next.js:
|
|
85
|
+
|
|
86
|
+
```json5 fileName="package.json"
|
|
87
|
+
{
|
|
88
|
+
"scripts": {
|
|
89
|
+
// ... outros scripts
|
|
90
|
+
"build": "next build",
|
|
91
|
+
"dev": "next dev",
|
|
92
|
+
"start": "npx intlayer live --with 'next start'",
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Exemplo usando Vite:
|
|
98
|
+
|
|
99
|
+
```json5 fileName="package.json"
|
|
100
|
+
{
|
|
101
|
+
"scripts": {
|
|
102
|
+
// ... outros scripts
|
|
103
|
+
"build": "vite build",
|
|
104
|
+
"dev": "vite dev",
|
|
105
|
+
"start": "npx intlayer live --with 'vite start'",
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
O servidor Live Sync envolve sua aplicação e aplica automaticamente o conteúdo atualizado assim que ele chega.
|
|
111
|
+
|
|
112
|
+
Para receber notificações de alterações do CMS, o servidor Live Sync mantém uma conexão SSE com o backend. Quando o conteúdo muda no CMS, o backend encaminha a atualização para o servidor Live Sync, que grava os novos dicionários. Sua aplicação refletirá a atualização na próxima navegação ou recarregamento do navegador, sem necessidade de reconstrução.
|
|
113
|
+
|
|
114
|
+
Fluxograma (CMS/Backend -> Servidor Live Sync -> Servidor de Aplicação -> Frontend):
|
|
115
|
+
|
|
116
|
+

|
|
117
|
+
|
|
118
|
+
Como funciona:
|
|
119
|
+
|
|
120
|
+

|
|
121
|
+
|
|
122
|
+
## Fluxo de trabalho de desenvolvimento (local)
|
|
123
|
+
|
|
124
|
+
- Em desenvolvimento, todos os dicionários remotos são buscados quando a aplicação inicia, para que você possa testar atualizações rapidamente.
|
|
125
|
+
- Para testar o Live Sync localmente com Next.js, envolva seu servidor de desenvolvimento:
|
|
126
|
+
|
|
127
|
+
```json5 fileName="package.json"
|
|
128
|
+
{
|
|
129
|
+
"scripts": {
|
|
130
|
+
// ... outros scripts
|
|
131
|
+
"dev": "npx intlayer live --with 'next dev'",
|
|
132
|
+
// "dev": "npx intlayer live --with 'vite dev'", // Para Vite
|
|
133
|
+
},
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Habilite a otimização para que o Intlayer aplique as transformações de importação Live durante o desenvolvimento:
|
|
138
|
+
|
|
139
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
140
|
+
import type { IntlayerConfig } from "intlayer";
|
|
141
|
+
|
|
142
|
+
const config: IntlayerConfig = {
|
|
143
|
+
editor: {
|
|
144
|
+
applicationURL: "http://localhost:5173",
|
|
145
|
+
liveSyncURL: "http://localhost:4000",
|
|
146
|
+
liveSync: true,
|
|
147
|
+
},
|
|
148
|
+
dictionary: {
|
|
149
|
+
importMode: "fetch",
|
|
150
|
+
},
|
|
151
|
+
build: {
|
|
152
|
+
optimize: true,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export default config;
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Esta configuração envolve seu servidor de desenvolvimento com o servidor Live Sync, busca dicionários remotos na inicialização e transmite atualizações do CMS via SSE. Atualize a página para ver as mudanças.
|
|
160
|
+
|
|
161
|
+
## Notas e restrições
|
|
162
|
+
|
|
163
|
+
- Adicione a origem do live sync à política de segurança do seu site (CSP). Certifique-se de que a URL do live sync esteja permitida em `connect-src` (e `frame-ancestors`, se relevante).
|
|
164
|
+
- O Live Sync não funciona com saída estática. Para Next.js, a página deve ser dinâmica para receber atualizações em tempo de execução (por exemplo, use `generateStaticParams`, `generateMetadata`, `getServerSideProps` ou `getStaticProps` adequadamente para evitar restrições de somente estático).
|
|
165
|
+
- No CMS, cada dicionário possui uma flag `live`. Apenas dicionários com `live=true` são buscados via API de sincronização ao vivo; os demais são importados dinamicamente e permanecem inalterados em tempo de execução.
|
|
166
|
+
- A flag `live` é avaliada para cada dicionário no momento da compilação. Se o conteúdo remoto não foi marcado como `live=true` durante a compilação, você deve recompilar para habilitar a Sincronização ao Vivo para esse dicionário.
|
|
167
|
+
- O servidor de sincronização ao vivo deve ter permissão para escrever em `.intlayer`. Em contêineres, assegure o acesso de escrita a `/.intlayer`.
|
|
168
|
+
|
|
169
|
+
## Links úteis
|
|
170
|
+
|
|
171
|
+
- [CMS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md)
|
|
172
|
+
- [Editor Visual do Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md)
|
|
173
|
+
- [Referência de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md)
|
|
174
|
+
- [Guia de Auto-hospedagem](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/self_hosting.md)
|
package/docs/pt/releases/v9.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-14
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
4
|
title: Novo Intlayer v9 - O que há de novo?
|
|
5
5
|
description: Descubra o que há de novo no Intlayer v9. Apresentando pacotes de compatibilidade drop-in para bibliotecas i18n populares e suporte para Collections e Variants.
|
|
6
6
|
keywords:
|
|
@@ -205,6 +205,49 @@ const product = useIntlayer("product-copy", {
|
|
|
205
205
|
|
|
206
206
|
---
|
|
207
207
|
|
|
208
|
+
## `@intlayer/analytics`: rastreamento de exposição de conteúdo e testes A/B
|
|
209
|
+
|
|
210
|
+
Um novo pacote opcional, [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md), mostra qual conteúdo é realmente exibido aos seus visitantes — e fecha o ciclo com **Collections & Variants**, permitindo testar conteúdo em A/B e medir conversões por variante.
|
|
211
|
+
|
|
212
|
+
- **Rastreamento em nível de provider**: `IntlayerProvider` (React / Next.js / React Native) registra automaticamente eventos `page_view` no carregamento, na mudança de rota e na mudança de idioma.
|
|
213
|
+
- **Rastreamento em nível de nó**: cada resolução de `useIntlayer` reporta um evento `content_exposure` — qual chave de dicionário, caminho de chave, idioma e, quando aplicável, qual **variante** A/B foi exibida. Exposições repetidas do mesmo nó dentro de uma janela de envio são combinadas em um único evento.
|
|
214
|
+
- **Atribuição determinística de A/B**: `getVariant(experimentKey, variants)` atribui uma variante a cada sessão **sem ida e volta ao servidor**, portanto não há cintilação antes da primeira renderização.
|
|
215
|
+
- **`useConversion()`**: atribui uma meta (cadastro, clique, compra…) à variante à qual a sessão foi exposta.
|
|
216
|
+
- **Custo zero quando não instalado**: mesmo padrão tree-shakeable do `@intlayer/editor` — `import()` dinâmico envolto em `try/catch`, mais uma variável de ambiente em tempo de compilação (`INTLAYER_ANALYTICS_ENABLED`) que elimina completamente a integração do bundle para apps que não a ativam.
|
|
217
|
+
- **Sem novo esquema de configuração**: reutiliza `editor.backendURL` (endpoint de ingestão / auto-hospedagem) e `editor.clientId` (chave do projeto, também o interruptor de ativação).
|
|
218
|
+
- **Respeita a privacidade**: hash anônimo de sessão (SHA-256, sem armazenar ids brutos), sem armazenamento de IP, geolocalização aproximada apenas por país, requisições enviadas em lote a cada ~20 segundos.
|
|
219
|
+
- **Painel**: uma nova página **Analytics** (exibida na barra lateral assim que um projeto é selecionado) mostra usuários ativos, usuários de hoje, usuários dos últimos 7/30/90 dias, um gráfico de evolução de visitantes e a divisão por idioma e localização.
|
|
220
|
+
|
|
221
|
+
```tsx fileName="CTAButton.tsx" codeFormat="tsx"
|
|
222
|
+
import { useConversion } from "react-intlayer";
|
|
223
|
+
|
|
224
|
+
const CTAButton = () => {
|
|
225
|
+
const trackConversion = useConversion();
|
|
226
|
+
|
|
227
|
+
return (
|
|
228
|
+
<button
|
|
229
|
+
onClick={() =>
|
|
230
|
+
trackConversion({
|
|
231
|
+
experimentKey: "homepage-hero",
|
|
232
|
+
variant: "black_friday",
|
|
233
|
+
goal: "cta_click",
|
|
234
|
+
})
|
|
235
|
+
}
|
|
236
|
+
>
|
|
237
|
+
Get started
|
|
238
|
+
</button>
|
|
239
|
+
);
|
|
240
|
+
};
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
```bash packageManager="npm"
|
|
244
|
+
npm install @intlayer/analytics
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Já disponível para React, Next.js e React Native (via `react-intlayer`); outras integrações de frameworks (Vue, Svelte, Angular, …) estão planejadas, seguindo o mesmo padrão de lançamento do `@intlayer/editor`. Consulte a [documentação do Analytics](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md) para o guia completo.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
208
251
|
## Vite Plugin: Compilador Agrupado & Proxy
|
|
209
252
|
|
|
210
253
|
O plugin Vite `intlayer()` agora agrupa o **compilador** e o **proxy de roteamento de localidade** diretamente, então a maioria dos projetos precisa apenas de um único plugin em `vite.config.ts`:
|
|
@@ -353,6 +396,7 @@ Se você estiver atualizando da v8, observe que a v9 não inclui breaking change
|
|
|
353
396
|
|
|
354
397
|
- [Guia de Compat Adapter Packages](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/compat/index.md)
|
|
355
398
|
- [Dicionários Dinâmicos - Collections & Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dynamic_dictionaries/index.md)
|
|
399
|
+
- [Analytics - Rastreamento de exposição de conteúdo e testes A/B](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
|
|
356
400
|
- [Referência de Configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md)
|
|
357
401
|
- [SDK do CMS - Acesso programático com @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md)
|
|
358
402
|
- [Guia de Auto-hospedagem](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/self_hosting.md)
|
package/docs/ru/cli/index.md
CHANGED
|
@@ -125,7 +125,7 @@ Intlayer принимает несколько форматов файлов к
|
|
|
125
125
|
|
|
126
126
|
### Аутентификация
|
|
127
127
|
|
|
128
|
-
- **[Login](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/login.md)** - Аутентификация в Intlayer CMS и получение учетных данных для доступа
|
|
128
|
+
- **[Login](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/login.md)** - Аутентификация в Intlayer CMS и получение учетных данных для доступа
|
|
129
129
|
|
|
130
130
|
### Основные команды
|
|
131
131
|
|
package/docs/ru/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-11
|
|
4
4
|
title: Конфигурация (Configuration)
|
|
5
5
|
description: Узнайте, как настроить Intlayer для вашего приложения. Разберитесь в различных параметрах и опциях, доступных для настройки Intlayer в соответствии с вашими потребностями.
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.0.0
|
|
18
|
+
date: 2026-07-11
|
|
19
|
+
changes: "Добавлена конфигурация `analytics`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-06-24
|
|
19
22
|
changes: "Add `enableProxy` option to the routing configuration"
|
|
@@ -355,6 +358,30 @@ const config: IntlayerConfig = {
|
|
|
355
358
|
liveSync: true,
|
|
356
359
|
},
|
|
357
360
|
|
|
361
|
+
/**
|
|
362
|
+
* Конфигурация аналитики (analytics).
|
|
363
|
+
*/
|
|
364
|
+
analytics: {
|
|
365
|
+
/**
|
|
366
|
+
* Включён ли сбор аналитики (просмотры страниц, показы контента, события A/B).
|
|
367
|
+
* Требует, чтобы был задан `editor.clientId` для атрибуции.
|
|
368
|
+
* По умолчанию: false
|
|
369
|
+
*/
|
|
370
|
+
enabled: true,
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Миллисекунды между автоматическими пакетными отправками на бэкенд.
|
|
374
|
+
* По умолчанию: 20000
|
|
375
|
+
*/
|
|
376
|
+
flushInterval: 20000,
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Доля сессий для записи, от 0 (ни одной) до 1 (все).
|
|
380
|
+
* По умолчанию: 1
|
|
381
|
+
*/
|
|
382
|
+
sampleRate: 1,
|
|
383
|
+
},
|
|
384
|
+
|
|
358
385
|
/**
|
|
359
386
|
* Настройки переводов и генерации с помощью ИИ.
|
|
360
387
|
*/
|
|
@@ -668,6 +695,20 @@ export default config;
|
|
|
668
695
|
|
|
669
696
|
---
|
|
670
697
|
|
|
698
|
+
### Конфигурация аналитики (Analytics)
|
|
699
|
+
|
|
700
|
+
Определяет настройки, связанные с аналитикой Intlayer: сбор данных о том, какой контент действительно показывается пользователям (просмотры страниц, показы контента), и поддержку A/B-тестирования контента.
|
|
701
|
+
|
|
702
|
+
Аналитика строго опциональна (opt-in): ничего не собирается, если `analytics.enabled` явно не установлен в `true` **и** не настроен ключ проекта (`editor.clientId`) для атрибуции. При отключении (по умолчанию) вся интеграция аналитики удаляется из сборки вашего приложения (dead-code elimination).
|
|
703
|
+
|
|
704
|
+
| Поле | Описание | Тип | По умолчанию | Пример | Примечание |
|
|
705
|
+
| --------------- | -------------------------------------------------------------------------- | --------- | ------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
706
|
+
| `enabled` | Включает сбор аналитики (просмотры страниц, показы контента, события A/B). | `boolean` | `false` | `true` | Требует, чтобы был задан `editor.clientId` для атрибуции; иначе аналитика остаётся отключённой, даже если `enabled` равно `true`. |
|
|
707
|
+
| `flushInterval` | Миллисекунды между автоматическими пакетными отправками на бэкенд. | `number` | `20000` | `10000` | |
|
|
708
|
+
| `sampleRate` | Доля сессий для записи, от `0` (ни одной) до `1` (все). | `number` | `1` | `0.5` | Выборка детерминирована для каждой сессии, поэтому записанная сессия сообщает обо всех своих событиях (без частичных воронок). |
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
671
712
|
### Конфигурация маршрутизации (Routing)
|
|
672
713
|
|
|
673
714
|
Настройки, управляющие поведением маршрутизации, включая структуру URL, хранение языков и управление middleware.
|
package/docs/ru/intlayer_CMS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-08-23
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
4
|
title: Intlayer CMS | Внешнее управление контентом через Intlayer CMS
|
|
5
5
|
description: Внешнее управление вашим контентом через Intlayer CMS для делегирования управления контентом вашей команде.
|
|
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-07-08
|
|
23
|
+
changes: "Раздел «Живая синхронизация» перенесён на отдельную страницу (live-sync.md); здесь оставлено краткое введение со ссылкой"
|
|
21
24
|
- version: 9.0.0
|
|
22
25
|
date: 2026-06-30
|
|
23
26
|
changes: "Добавлен раздел «Самостоятельное размещение»: начальная загрузка Docker Compose, инвентаризация сервисов, конфигурация SDK, необязательные функции и примечания по обновлению"
|
|
@@ -403,144 +406,7 @@ await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
|
|
|
403
406
|
|
|
404
407
|
Живая синхронизация позволяет вашему приложению отражать изменения контента CMS в режиме реального времени. Пересборка или повторный деплой не требуются. Когда функция включена, обновления передаются на сервер живой синхронизации, который обновляет словари, используемые вашим приложением.
|
|
405
408
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
409
|
-
import type { IntlayerConfig } from "intlayer";
|
|
410
|
-
|
|
411
|
-
const config: IntlayerConfig = {
|
|
412
|
-
// ... другие настройки конфигурации
|
|
413
|
-
editor: {
|
|
414
|
-
/**
|
|
415
|
-
* Включает горячую перезагрузку конфигураций локалей при обнаружении изменений.
|
|
416
|
-
* Например, когда словарь добавляется или обновляется, приложение обновляет
|
|
417
|
-
* отображаемый на странице контент.
|
|
418
|
-
*
|
|
419
|
-
* Поскольку горячая перезагрузка требует постоянного подключения к серверу,
|
|
420
|
-
* она доступна только для клиентов с тарифным планом `enterprise`.
|
|
421
|
-
*
|
|
422
|
-
* По умолчанию: false
|
|
423
|
-
*/
|
|
424
|
-
liveSync: true,
|
|
425
|
-
},
|
|
426
|
-
dictionary: {
|
|
427
|
-
/**
|
|
428
|
-
* Управляет способом импорта словарей:
|
|
429
|
-
*
|
|
430
|
-
* - "fetch": словари загружаются динамически с использованием Live Sync API.
|
|
431
|
-
* Заменяет useIntlayer на useDictionaryDynamic.
|
|
432
|
-
*
|
|
433
|
-
* Примечание: Режим "fetch" использует Live Sync API для загрузки словарей. Если вызов API
|
|
434
|
-
* не удаётся, словари импортируются динамически.
|
|
435
|
-
* Примечание: Только словари с удалённым содержимым и флагом "live" используют режим "fetch".
|
|
436
|
-
* Остальные используют динамический режим для повышения производительности.
|
|
437
|
-
*/
|
|
438
|
-
importMode: "fetch",
|
|
439
|
-
},
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
export default config;
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
Запустите сервер Live Sync, чтобы обернуть ваше приложение:
|
|
446
|
-
|
|
447
|
-
Пример использования автономного сервера:
|
|
448
|
-
|
|
449
|
-
```json5 fileName="package.json"
|
|
450
|
-
{
|
|
451
|
-
"scripts": {
|
|
452
|
-
// ... other scripts
|
|
453
|
-
"live:start": "npx intlayer live",
|
|
454
|
-
},
|
|
455
|
-
}
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
Вы также можете использовать сервер вашего приложения параллельно, используя аргумент `--process`.
|
|
459
|
-
|
|
460
|
-
Пример с использованием Next.js:
|
|
461
|
-
|
|
462
|
-
```json5 fileName="package.json"
|
|
463
|
-
{
|
|
464
|
-
"scripts": {
|
|
465
|
-
// ... другие скрипты
|
|
466
|
-
"build": "next build",
|
|
467
|
-
"dev": "next dev",
|
|
468
|
-
"start": "npx intlayer live --with 'next start'",
|
|
469
|
-
},
|
|
470
|
-
}
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
Пример с использованием Vite:
|
|
474
|
-
|
|
475
|
-
```json5 fileName="package.json"
|
|
476
|
-
{
|
|
477
|
-
"scripts": {
|
|
478
|
-
// ... другие скрипты
|
|
479
|
-
"build": "vite build",
|
|
480
|
-
"dev": "vite dev",
|
|
481
|
-
"start": "npx intlayer live --with 'vite start'",
|
|
482
|
-
},
|
|
483
|
-
}
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
Сервер Live Sync оборачивает ваше приложение и автоматически применяет обновлённый контент по мере его поступления.
|
|
487
|
-
|
|
488
|
-
Чтобы получать уведомления об изменениях из CMS, сервер Live Sync поддерживает SSE-соединение с бэкендом. Когда контент в CMS изменяется, бэкенд пересылает обновление серверу Live Sync, который записывает новые словари. Ваше приложение отобразит обновление при следующей навигации или перезагрузке браузера, пересборка не требуется.
|
|
489
|
-
|
|
490
|
-
Блок-схема (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
|
|
491
|
-
|
|
492
|
-

|
|
493
|
-
|
|
494
|
-
Как это работает:
|
|
495
|
-
|
|
496
|
-

|
|
497
|
-
|
|
498
|
-
### Рабочий процесс разработки (локально)
|
|
499
|
-
|
|
500
|
-
- В процессе разработки все удалённые словари загружаются при запуске приложения, чтобы вы могли быстро тестировать обновления.
|
|
501
|
-
- Чтобы протестировать Live Sync локально с Next.js, оберните ваш dev-сервер:
|
|
502
|
-
|
|
503
|
-
```json5 fileName="package.json"
|
|
504
|
-
{
|
|
505
|
-
"scripts": {
|
|
506
|
-
// ... другие скрипты
|
|
507
|
-
"dev": "npx intlayer live --with 'next dev'",
|
|
508
|
-
// "dev": "npx intlayer live --with 'vite dev'", // Для Vite
|
|
509
|
-
},
|
|
510
|
-
}
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
Включите оптимизацию, чтобы Intlayer применял трансформации Live импорта во время разработки:
|
|
514
|
-
|
|
515
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
516
|
-
import type { IntlayerConfig } from "intlayer";
|
|
517
|
-
|
|
518
|
-
const config: IntlayerConfig = {
|
|
519
|
-
editor: {
|
|
520
|
-
applicationURL: "http://localhost:5173",
|
|
521
|
-
liveSyncURL: "http://localhost:4000",
|
|
522
|
-
liveSync: true,
|
|
523
|
-
},
|
|
524
|
-
dictionary: {
|
|
525
|
-
importMode: "fetch",
|
|
526
|
-
},
|
|
527
|
-
build: {
|
|
528
|
-
optimize: true, // default: process.env.NODE_ENV === 'production'
|
|
529
|
-
},
|
|
530
|
-
};
|
|
531
|
-
|
|
532
|
-
export default config;
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
Эта настройка оборачивает ваш dev-сервер сервером Live Sync, загружает удалённые словари при запуске и транслирует обновления из CMS через SSE. Обновите страницу, чтобы увидеть изменения.
|
|
536
|
-
|
|
537
|
-
Примечания и ограничения:
|
|
538
|
-
|
|
539
|
-
- Добавьте источник live sync в политику безопасности вашего сайта (CSP). Убедитесь, что URL live sync разрешён в `connect-src` (и в `frame-ancestors`, если это актуально).
|
|
540
|
-
- Live Sync не работает со статическим выводом. Для Next.js страница должна быть динамической, чтобы получать обновления во время выполнения (например, используйте `generateStaticParams`, `generateMetadata`, `getServerSideProps` или `getStaticProps` соответствующим образом, чтобы избежать ограничений полностью статического вывода).
|
|
541
|
-
- В CMS у каждого словаря есть флаг `live`. Только словари с `live=true` загружаются через API live sync; остальные импортируются динамически и остаются неизменными во время выполнения.
|
|
542
|
-
- Флаг `live` оценивается для каждого словаря во время сборки. Если удалённый контент не был помечен как `live=true` во время сборки, необходимо выполнить повторную сборку, чтобы включить Live Sync для этого словаря.
|
|
543
|
-
- Сервер live sync должен иметь возможность записывать в `.intlayer`. В контейнерах убедитесь, что есть права на запись в `/.intlayer`.
|
|
409
|
+
Полное руководство по настройке (включение, запуск сервера Live Sync, рабочий процесс локальной разработки и ограничения) см. в [документации Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/live-sync.md).
|
|
544
410
|
|
|
545
411
|
## Самостоятельное размещение (Self-Hosting)
|
|
546
412
|
|