@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.
Files changed (107) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +40 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +40 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +2 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/cli/index.md +1 -1
  8. package/docs/ar/configuration.md +42 -1
  9. package/docs/ar/intlayer_CMS.md +5 -128
  10. package/docs/ar/live-sync.md +174 -0
  11. package/docs/ar/releases/v9.md +45 -1
  12. package/docs/bn/cli/index.md +1 -1
  13. package/docs/bn/configuration.md +45 -1
  14. package/docs/cs/cli/index.md +1 -1
  15. package/docs/cs/configuration.md +45 -1
  16. package/docs/de/cli/index.md +1 -1
  17. package/docs/de/configuration.md +42 -1
  18. package/docs/de/intlayer_CMS.md +5 -135
  19. package/docs/de/live-sync.md +174 -0
  20. package/docs/de/releases/v9.md +45 -1
  21. package/docs/en/analytics.md +222 -0
  22. package/docs/en/cli/index.md +1 -1
  23. package/docs/en/configuration.md +42 -1
  24. package/docs/en/intlayer_CMS.md +6 -140
  25. package/docs/en/live-sync.md +184 -0
  26. package/docs/en/releases/v9.md +53 -3
  27. package/docs/en-GB/cli/index.md +1 -1
  28. package/docs/en-GB/configuration.md +42 -1
  29. package/docs/en-GB/intlayer_CMS.md +5 -128
  30. package/docs/en-GB/live-sync.md +173 -0
  31. package/docs/en-GB/releases/v9.md +45 -1
  32. package/docs/es/cli/index.md +1 -1
  33. package/docs/es/configuration.md +42 -1
  34. package/docs/es/intlayer_CMS.md +5 -140
  35. package/docs/es/live-sync.md +176 -0
  36. package/docs/es/releases/v9.md +45 -1
  37. package/docs/fr/cli/index.md +1 -1
  38. package/docs/fr/configuration.md +42 -1
  39. package/docs/fr/intlayer_CMS.md +5 -135
  40. package/docs/fr/live-sync.md +174 -0
  41. package/docs/fr/releases/v9.md +45 -1
  42. package/docs/hi/cli/index.md +1 -1
  43. package/docs/hi/configuration.md +42 -1
  44. package/docs/hi/intlayer_CMS.md +5 -128
  45. package/docs/hi/live-sync.md +174 -0
  46. package/docs/hi/releases/v9.md +45 -1
  47. package/docs/id/cli/index.md +1 -1
  48. package/docs/id/configuration.md +42 -1
  49. package/docs/id/intlayer_CMS.md +5 -139
  50. package/docs/id/live-sync.md +185 -0
  51. package/docs/id/releases/v9.md +45 -1
  52. package/docs/it/cli/index.md +1 -1
  53. package/docs/it/configuration.md +42 -1
  54. package/docs/it/intlayer_CMS.md +5 -128
  55. package/docs/it/live-sync.md +174 -0
  56. package/docs/it/releases/v9.md +45 -1
  57. package/docs/ja/cli/index.md +1 -1
  58. package/docs/ja/configuration.md +42 -1
  59. package/docs/ja/intlayer_CMS.md +5 -139
  60. package/docs/ja/live-sync.md +185 -0
  61. package/docs/ja/releases/v9.md +45 -1
  62. package/docs/ko/cli/index.md +1 -1
  63. package/docs/ko/configuration.md +42 -1
  64. package/docs/ko/intlayer_CMS.md +5 -141
  65. package/docs/ko/live-sync.md +187 -0
  66. package/docs/ko/releases/v9.md +45 -1
  67. package/docs/nl/cli/index.md +1 -1
  68. package/docs/nl/configuration.md +45 -1
  69. package/docs/pl/cli/index.md +1 -1
  70. package/docs/pl/configuration.md +45 -1
  71. package/docs/pl/intlayer_CMS.md +5 -139
  72. package/docs/pl/live-sync.md +185 -0
  73. package/docs/pl/releases/v9.md +45 -1
  74. package/docs/pt/cli/index.md +1 -1
  75. package/docs/pt/configuration.md +45 -1
  76. package/docs/pt/intlayer_CMS.md +5 -143
  77. package/docs/pt/live-sync.md +174 -0
  78. package/docs/pt/releases/v9.md +45 -1
  79. package/docs/ru/cli/index.md +1 -1
  80. package/docs/ru/configuration.md +42 -1
  81. package/docs/ru/intlayer_CMS.md +5 -139
  82. package/docs/ru/live-sync.md +185 -0
  83. package/docs/ru/releases/v9.md +45 -1
  84. package/docs/tr/cli/index.md +1 -1
  85. package/docs/tr/configuration.md +42 -1
  86. package/docs/tr/intlayer_CMS.md +5 -127
  87. package/docs/tr/live-sync.md +173 -0
  88. package/docs/tr/releases/v9.md +45 -1
  89. package/docs/uk/cli/index.md +1 -1
  90. package/docs/uk/configuration.md +42 -1
  91. package/docs/uk/intlayer_CMS.md +5 -139
  92. package/docs/uk/live-sync.md +185 -0
  93. package/docs/uk/releases/v9.md +45 -1
  94. package/docs/ur/cli/index.md +1 -1
  95. package/docs/ur/configuration.md +45 -1
  96. package/docs/vi/cli/index.md +1 -1
  97. package/docs/vi/configuration.md +42 -1
  98. package/docs/vi/intlayer_CMS.md +5 -139
  99. package/docs/vi/live-sync.md +185 -0
  100. package/docs/vi/releases/v9.md +45 -1
  101. package/docs/zh/cli/index.md +1 -1
  102. package/docs/zh/configuration.md +42 -1
  103. package/docs/zh/intlayer_CMS.md +5 -129
  104. package/docs/zh/live-sync.md +175 -0
  105. package/docs/zh/releases/v9.md +45 -1
  106. package/package.json +7 -7
  107. 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
+ ![Esquema Lógico do Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
117
+
118
+ Como funciona:
119
+
120
+ ![Fluxo Live Sync CMS/Backend/Servidor Live Sync/Servidor de Aplicação/Frontend](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
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)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-30
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)
@@ -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
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-06-23
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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2026-06-30
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
- Включите живую синхронизацию, обновив конфигурацию Intlayer:
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
- ![Схема потока Live Sync CMS/Backend/Live Sync Server/Application Server/Frontend](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
493
-
494
- Как это работает:
495
-
496
- ![Схема логики Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
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