@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
@@ -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 | Externaliza tu contenido en el Intlayer CMS
5
5
  description: Externaliza tu contenido en el Intlayer CMS para delegar la gestión de tu contenido a tu equipo.
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: "Se trasladó la sección «Sincronización en vivo» a su propia página (live-sync.md), dejando aquí una breve introducción y un enlace"
21
24
  - version: 9.0.0
22
25
  date: 2026-06-30
23
26
  changes: "Añadida sección de Auto-alojamiento: bootstrap Docker Compose, inventario de servicios, configuración SDK, características opcionales y notas de actualización"
@@ -248,145 +251,7 @@ Luego podrás ver y gestionar tu diccionario en el [Intlayer CMS](https://app.in
248
251
 
249
252
  La sincronización en vivo permite que tu aplicación refleje los cambios de contenido del CMS en runtime. No se requiere reconstrucción ni redepliegue. Cuando está habilitada, las actualizaciones se transmiten a un servidor de sincronización en vivo que actualiza los diccionarios que tu aplicación lee.
250
253
 
251
- > Live Sync requiere una conexión continua al servidor y está disponible en el plan enterprise.
252
-
253
- Habilita Live Sync actualizando tu configuración de Intlayer:
254
-
255
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
256
- import type { IntlayerConfig } from "intlayer";
257
-
258
- const config: IntlayerConfig = {
259
- // ... otras configuraciones
260
- editor: {
261
- /**
262
- * Habilita la recarga en caliente de las configuraciones de localización cuando se detectan cambios.
263
- * Por ejemplo, cuando se añade o actualiza un diccionario, la aplicación actualiza
264
- * el contenido mostrado en la página.
265
- *
266
- * Debido a que la recarga en caliente requiere una conexión continua al servidor,
267
- * solo está disponible para clientes del plan `enterprise`.
268
- *
269
- * Por defecto: false
270
- */
271
- liveSync: true,
272
- },
273
- dictionary: {
274
- /**
275
- * Controla cómo se importan los diccionarios:
276
- *
277
- * - "live": Los diccionarios se obtienen dinámicamente usando la API de Live Sync.
278
- * Reemplaza useIntlayer por useDictionaryDynamic.
279
- *
280
- * Nota: El modo live usa la API de Live Sync para obtener los diccionarios. Si la llamada a la API
281
- * falla, los diccionarios se importan dinámicamente.
282
- * Nota: Solo los diccionarios con contenido remoto y la bandera "live" usan el modo live.
283
- * Los demás usan el modo dinámico para mejorar el rendimiento.
284
- */
285
- importMode: "fetch",
286
- },
287
- };
288
-
289
- export default config;
290
- ```
291
-
292
- Inicie el servidor Live Sync para envolver su aplicación:
293
-
294
- Ejemplo usando Next.js:
295
-
296
- ```json5 fileName="package.json"
297
- {
298
- "scripts": {
299
- // ... otros scripts
300
- "build": "next build",
301
- "dev": "next dev",
302
- "start": "npx intlayer live --with 'next start'",
303
- },
304
- }
305
- ```
306
-
307
- Ejemplo usando Vite:
308
-
309
- ```json5 fileName="package.json"
310
- {
311
- "scripts": {
312
- // ... otros scripts
313
- "build": "vite build",
314
- "dev": "vite dev",
315
- "start": "npx intlayer live --with 'vite start'",
316
- },
317
- }
318
- ```
319
-
320
- El servidor Live Sync envuelve su aplicación y aplica automáticamente el contenido actualizado a medida que llega.
321
-
322
- Para recibir notificaciones de cambios desde el CMS, el servidor Live Sync mantiene una conexión SSE con el backend. Cuando el contenido cambia en el CMS, el backend envía la actualización al servidor Live Sync, que escribe los nuevos diccionarios. Su aplicación reflejará la actualización en la siguiente navegación o recarga del navegador, sin necesidad de reconstrucción.
323
-
324
- Diagrama de flujo (CMS/Backend -> Servidor Live Sync -> Servidor de Aplicación -> Frontend):
325
-
326
- ![Esquema de lógica de Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
327
-
328
- Cómo funciona:
329
-
330
- ![Esquema de flujo Live Sync CMS/Backend/Servidor Live Sync/Servidor de Aplicación/Frontend](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
331
-
332
- ### Flujo de trabajo de desarrollo (local)
333
-
334
- docs/ko/intlayer_CMS.md
335
-
336
- - En desarrollo, todos los diccionarios remotos se obtienen cuando la aplicación se inicia, para que puedas probar actualizaciones rápidamente.
337
- - Para probar Live Sync localmente con Next.js, envuelve tu servidor de desarrollo:
338
-
339
- ```json5 fileName="package.json"
340
- {
341
- "scripts": {
342
- // ... otros scripts
343
- "dev": "npx intlayer live --with 'next dev'",
344
- // "dev": "npx intlayer live --with 'vite dev'", // Para Vite
345
- },
346
- }
347
- ```
348
-
349
- Habilita la optimización para que Intlayer aplique las transformaciones de importación en vivo durante el desarrollo:
350
-
351
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
352
- import type { IntlayerConfig } from "intlayer";
353
-
354
- const config: IntlayerConfig = {
355
- editor: {
356
- applicationURL: "http://localhost:5173",
357
- liveSyncURL: "http://localhost:4000",
358
- liveSync: true,
359
- },
360
- dictionary: {
361
- importMode: "fetch",
362
- },
363
- build: {
364
- optimize: true,
365
- },
366
- };
367
-
368
- export default config;
369
- ```
370
-
371
- Esta configuración envuelve tu servidor de desarrollo con el servidor Live Sync, obtiene los diccionarios remotos al iniciar y transmite actualizaciones desde el CMS vía SSE. Actualiza la página para ver los cambios.
372
-
373
- Notas y restricciones:
374
-
375
- - Añade el origen de live sync a la política de seguridad de tu sitio (CSP). Asegúrate de que la URL de live sync esté permitida en `connect-src` (y en `frame-ancestors` si es relevante).
376
- - Live Sync no funciona con salida estática. Para Next.js, la página debe ser dinámica para recibir actualizaciones en runtime (por ejemplo, usa `generateStaticParams`, `generateMetadata`, `getServerSideProps` o `getStaticProps` adecuadamente para evitar restricciones de solo estático).
377
-
378
- Esta configuración envuelve tu servidor de desarrollo con el servidor Live Sync, obtiene diccionarios remotos al iniciar y transmite actualizaciones desde el CMS vía SSE. Actualiza la página para ver los cambios.
379
-
380
- Notas y restricciones:
381
-
382
- - Añade el origen de live sync a la política de seguridad de tu sitio (CSP). Asegúrate de que la URL de live sync esté permitida en `connect-src` (y en `frame-ancestors` si es relevante).
383
- - Live Sync no funciona con salida estática. Para Next.js, la página debe ser dinámica para recibir actualizaciones en runtime (por ejemplo, usa `generateStaticParams`, `generateMetadata`, `getServerSideProps` o `getStaticProps` adecuadamente para evitar restricciones de solo estático).
384
- - La URL de la aplicación debe coincidir con la que configuraste en la configuración del editor (`applicationURL`).
385
- - La URL del CMS
386
-
387
- - Asegúrate de que la configuración del proyecto se haya enviado al CMS de Intlayer.
388
-
389
- - El editor visual utiliza un iframe para mostrar tu sitio web. Asegúrate de que la Política de Seguridad de Contenidos (CSP) de tu sitio web permita la URL del CMS como `frame-ancestors` ('https://app.intlayer.org' por defecto). Revisa la consola del editor para cualquier error.
254
+ Para la guía de configuración completa (activación, inicio del servidor Live Sync, flujo de trabajo de desarrollo local y restricciones), consulta la [documentación de Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/live-sync.md).
390
255
 
391
256
  ## Auto-alojamiento
392
257
 
@@ -0,0 +1,176 @@
1
+ ---
2
+ createdAt: 2026-07-08
3
+ updatedAt: 2026-07-08
4
+ title: Sincronización en vivo | Refleja los cambios de contenido del CMS en tiempo real
5
+ description: Permite que tu aplicación refleje los cambios de contenido del CMS de Intlayer en tiempo de ejecución, sin necesidad de reconstruir ni volver a implementar.
6
+ keywords:
7
+ - Sincronización en vivo
8
+ - Live Sync
9
+ - CMS
10
+ - Editor Visual
11
+ - Internacionalización
12
+ - Documentación
13
+ - Intlayer
14
+ - Next.js
15
+ - Vite
16
+ history:
17
+ - version: 9.0.0
18
+ date: 2026-07-08
19
+ changes: "Trasladado desde la documentación del CMS de Intlayer a su propia página"
20
+ - version: 6.0.1
21
+ date: 2025-09-22
22
+ changes: "Añadida documentación de sincronización en vivo"
23
+ - version: 6.0.0
24
+ date: 2025-09-04
25
+ changes: "Reemplazado el campo `hotReload` por `liveSync`"
26
+ author: aymericzip
27
+ ---
28
+
29
+ # Sincronización en vivo
30
+
31
+ La sincronización en vivo permite que tu aplicación refleje los cambios de contenido del CMS en runtime. No se requiere reconstrucción ni redepliegue. Cuando está habilitada, las actualizaciones se transmiten a un servidor de sincronización en vivo que actualiza los diccionarios que tu aplicación lee.
32
+
33
+ ## Tabla de contenidos
34
+
35
+ <TOC/>
36
+
37
+ ---
38
+
39
+ ## Activar la sincronización en vivo
40
+
41
+ > Live Sync requiere una conexión continua al servidor y está disponible en el plan enterprise.
42
+
43
+ Habilita Live Sync actualizando tu configuración de Intlayer:
44
+
45
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
46
+ import type { IntlayerConfig } from "intlayer";
47
+
48
+ const config: IntlayerConfig = {
49
+ // ... otras configuraciones
50
+ editor: {
51
+ /**
52
+ * Habilita la recarga en caliente de las configuraciones de localización cuando se detectan cambios.
53
+ * Por ejemplo, cuando se añade o actualiza un diccionario, la aplicación actualiza
54
+ * el contenido mostrado en la página.
55
+ *
56
+ * Debido a que la recarga en caliente requiere una conexión continua al servidor,
57
+ * solo está disponible para clientes del plan `enterprise`.
58
+ *
59
+ * Por defecto: false
60
+ */
61
+ liveSync: true,
62
+ },
63
+ dictionary: {
64
+ /**
65
+ * Controla cómo se importan los diccionarios:
66
+ *
67
+ * - "live": Los diccionarios se obtienen dinámicamente usando la API de Live Sync.
68
+ * Reemplaza useIntlayer por useDictionaryDynamic.
69
+ *
70
+ * Nota: El modo live usa la API de Live Sync para obtener los diccionarios. Si la llamada a la API
71
+ * falla, los diccionarios se importan dinámicamente.
72
+ * Nota: Solo los diccionarios con contenido remoto y la bandera "live" usan el modo live.
73
+ * Los demás usan el modo dinámico para mejorar el rendimiento.
74
+ */
75
+ importMode: "fetch",
76
+ },
77
+ };
78
+
79
+ export default config;
80
+ ```
81
+
82
+ Inicie el servidor Live Sync para envolver su aplicación:
83
+
84
+ Ejemplo usando Next.js:
85
+
86
+ ```json5 fileName="package.json"
87
+ {
88
+ "scripts": {
89
+ // ... otros scripts
90
+ "build": "next build",
91
+ "dev": "next dev",
92
+ "start": "npx intlayer live --with 'next start'",
93
+ },
94
+ }
95
+ ```
96
+
97
+ Ejemplo usando Vite:
98
+
99
+ ```json5 fileName="package.json"
100
+ {
101
+ "scripts": {
102
+ // ... otros scripts
103
+ "build": "vite build",
104
+ "dev": "vite dev",
105
+ "start": "npx intlayer live --with 'vite start'",
106
+ },
107
+ }
108
+ ```
109
+
110
+ El servidor Live Sync envuelve su aplicación y aplica automáticamente el contenido actualizado a medida que llega.
111
+
112
+ Para recibir notificaciones de cambios desde el CMS, el servidor Live Sync mantiene una conexión SSE con el backend. Cuando el contenido cambia en el CMS, el backend envía la actualización al servidor Live Sync, que escribe los nuevos diccionarios. Su aplicación reflejará la actualización en la siguiente navegación o recarga del navegador, sin necesidad de reconstrucción.
113
+
114
+ Diagrama de flujo (CMS/Backend -> Servidor Live Sync -> Servidor de Aplicación -> Frontend):
115
+
116
+ ![Esquema de lógica de Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
117
+
118
+ Cómo funciona:
119
+
120
+ ![Esquema de flujo Live Sync CMS/Backend/Servidor Live Sync/Servidor de Aplicación/Frontend](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
121
+
122
+ ## Flujo de trabajo de desarrollo (local)
123
+
124
+ docs/ko/intlayer_CMS.md
125
+
126
+ - En desarrollo, todos los diccionarios remotos se obtienen cuando la aplicación se inicia, para que puedas probar actualizaciones rápidamente.
127
+ - Para probar Live Sync localmente con Next.js, envuelve tu servidor de desarrollo:
128
+
129
+ ```json5 fileName="package.json"
130
+ {
131
+ "scripts": {
132
+ // ... otros scripts
133
+ "dev": "npx intlayer live --with 'next dev'",
134
+ // "dev": "npx intlayer live --with 'vite dev'", // Para Vite
135
+ },
136
+ }
137
+ ```
138
+
139
+ Habilita la optimización para que Intlayer aplique las transformaciones de importación en vivo durante el desarrollo:
140
+
141
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
142
+ import type { IntlayerConfig } from "intlayer";
143
+
144
+ const config: IntlayerConfig = {
145
+ editor: {
146
+ applicationURL: "http://localhost:5173",
147
+ liveSyncURL: "http://localhost:4000",
148
+ liveSync: true,
149
+ },
150
+ dictionary: {
151
+ importMode: "fetch",
152
+ },
153
+ build: {
154
+ optimize: true,
155
+ },
156
+ };
157
+
158
+ export default config;
159
+ ```
160
+
161
+ Esta configuración envuelve tu servidor de desarrollo con el servidor Live Sync, obtiene los diccionarios remotos al iniciar y transmite actualizaciones desde el CMS vía SSE. Actualiza la página para ver los cambios.
162
+
163
+ ## Notas y restricciones
164
+
165
+ - Añade el origen de live sync a la política de seguridad de tu sitio (CSP). Asegúrate de que la URL de live sync esté permitida en `connect-src` (y en `frame-ancestors` si es relevante).
166
+ - Live Sync no funciona con salida estática. Para Next.js, la página debe ser dinámica para recibir actualizaciones en runtime (por ejemplo, usa `generateStaticParams`, `generateMetadata`, `getServerSideProps` o `getStaticProps` adecuadamente para evitar restricciones de solo estático).
167
+ - En el CMS, cada diccionario tiene una bandera `live`. Solo los diccionarios con `live=true` se obtienen a través de la API de live sync; los demás se importan dinámicamente y permanecen sin cambios en tiempo de ejecución.
168
+ - La bandera `live` se evalúa para cada diccionario en el momento de la compilación. Si el contenido remoto no estaba marcado como `live=true` durante la compilación, debes recompilar para habilitar Live Sync para ese diccionario.
169
+ - El servidor de live sync debe poder escribir en `.intlayer`. En contenedores, asegura el acceso de escritura a `/.intlayer`.
170
+
171
+ ## Enlaces útiles
172
+
173
+ - [CMS de Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_CMS.md)
174
+ - [Editor Visual de Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_visual_editor.md)
175
+ - [Referencia de configuración](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md)
176
+ - [Guía de Auto-alojamiento](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/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: Nuevo Intlayer v9 - ¿Qué hay de nuevo?
5
5
  description: Descubre las novedades de Intlayer v9. Presentamos paquetes de compatibilidad directos para librerías i18n populares y soporte para Colecciones y Variantes.
6
6
  keywords:
@@ -201,6 +201,49 @@ const product = useIntlayer("product-copy", {
201
201
 
202
202
  ---
203
203
 
204
+ ## `@intlayer/analytics`: seguimiento de exposición de contenido y pruebas A/B
205
+
206
+ Un nuevo paquete opcional, [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md), te indica qué contenido ven realmente tus visitantes — y cierra el círculo con **Collections & Variants**, permitiéndote hacer pruebas A/B de contenido y medir conversiones por variante.
207
+
208
+ - **Seguimiento a nivel de provider**: `IntlayerProvider` (React / Next.js / React Native) registra automáticamente eventos `page_view` al cargar, al cambiar de ruta y al cambiar de idioma.
209
+ - **Seguimiento a nivel de nodo**: cada resolución de `useIntlayer` reporta un evento `content_exposure` — qué clave de diccionario, ruta de clave, idioma y, cuando aplica, qué **variante** A/B se mostró. Las exposiciones repetidas del mismo nodo dentro de una ventana de envío se combinan en un solo evento.
210
+ - **Asignación determinista de A/B**: `getVariant(experimentKey, variants)` asigna una variante a cada sesión **sin ida y vuelta al servidor**, por lo que no hay parpadeo antes del primer renderizado.
211
+ - **`useConversion()`**: atribuye un objetivo (registro, clic, compra…) a la variante a la que estuvo expuesta la sesión.
212
+ - **Coste cero si no está instalado**: mismo patrón tree-shakeable que `@intlayer/editor` — `import()` dinámico envuelto en `try/catch`, más una variable de entorno en tiempo de compilación (`INTLAYER_ANALYTICS_ENABLED`) que elimina por completo la integración del bundle para las apps que no la activan.
213
+ - **Sin nuevo esquema de configuración**: reutiliza `editor.backendURL` (endpoint de envío / auto-alojamiento) y `editor.clientId` (clave del proyecto, que también actúa como interruptor de activación).
214
+ - **Respetuoso con la privacidad**: hash anónimo de sesión (SHA-256, sin almacenar ids en bruto), sin almacenamiento de IP, geolocalización aproximada solo por país, solicitudes enviadas por lotes aproximadamente cada 20 segundos.
215
+ - **Panel**: una nueva página **Analytics** (visible en la barra lateral una vez seleccionado un proyecto) muestra usuarios activos, usuarios de hoy, usuarios de los últimos 7/30/90 días, un gráfico de evolución de visitantes y desgloses por idioma y ubicación.
216
+
217
+ ```tsx fileName="CTAButton.tsx" codeFormat="tsx"
218
+ import { useConversion } from "react-intlayer";
219
+
220
+ const CTAButton = () => {
221
+ const trackConversion = useConversion();
222
+
223
+ return (
224
+ <button
225
+ onClick={() =>
226
+ trackConversion({
227
+ experimentKey: "homepage-hero",
228
+ variant: "black_friday",
229
+ goal: "cta_click",
230
+ })
231
+ }
232
+ >
233
+ Get started
234
+ </button>
235
+ );
236
+ };
237
+ ```
238
+
239
+ ```bash packageManager="npm"
240
+ npm install @intlayer/analytics
241
+ ```
242
+
243
+ Disponible hoy para React, Next.js y React Native (a través de `react-intlayer`); otras integraciones de frameworks (Vue, Svelte, Angular, …) están planificadas, siguiendo el mismo patrón de despliegue que `@intlayer/editor`. Consulta la [documentación de Analytics](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md) para la guía completa.
244
+
245
+ ---
246
+
204
247
  ## Plugin de Vite: Compilador Integrado y Proxy
205
248
 
206
249
  El plugin de Vite `intlayer()` ahora integra el **compilador** y el **proxy de enrutamiento de locales** directamente, por lo que la mayoría de proyectos solo necesitan un único plugin en `vite.config.ts`:
@@ -349,6 +392,7 @@ Si estás actualizando desde v8, ten en cuenta que la v9 no incluye cambios disr
349
392
 
350
393
  - [Guía de Paquetes Adaptadores de Compatibilidad](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/compat/index.md)
351
394
  - [Diccionarios Dinámicos - Colecciones y Variantes](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dynamic_dictionaries/index.md)
395
+ - [Analytics - Seguimiento de exposición de contenido y pruebas A/B](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
352
396
  - [Referencia de Configuración](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md)
353
397
  - [SDK de CMS - Acceso programático con @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_CMS.md)
354
398
  - [Guía de Auto-alojamiento](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/self_hosting.md)
@@ -125,7 +125,7 @@ Pour voir comment configurer les locales disponibles ou d'autres paramètres, re
125
125
 
126
126
  ### Authentification
127
127
 
128
- - **[Connexion](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/login.md)** - S'authentifier auprès du CMS Intlayer et obtenir les identifiants d'accès
128
+ - **[Connexion](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/cli/login.md)** - S'authentifier auprès du CMS Intlayer et obtenir les identifiants d'accès
129
129
 
130
130
  ### Commandes principales
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: Apprenez à configurer Intlayer pour votre application. Comprenez les différents paramètres et options disponibles pour personnaliser Intlayer selon vos besoins.
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: "Ajout de la configuration `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
+ * Configuration des analytics.
363
+ */
364
+ analytics: {
365
+ /**
366
+ * Indique si la collecte des analytics est activée (pages vues, expositions de contenu, événements A/B).
367
+ * Nécessite que `editor.clientId` soit défini pour l'attribution.
368
+ * Par défaut : false
369
+ */
370
+ enabled: true,
371
+
372
+ /**
373
+ * Millisecondes entre les envois groupés automatiques vers le backend.
374
+ * Par défaut : 20000
375
+ */
376
+ flushInterval: 20000,
377
+
378
+ /**
379
+ * Fraction des sessions à enregistrer, de 0 (aucune) à 1 (toutes).
380
+ * Par défaut : 1
381
+ */
382
+ sampleRate: 1,
383
+ },
384
+
358
385
  /**
359
386
  * Paramètres de traduction et de construction basés sur l'IA.
360
387
  */
@@ -671,6 +698,20 @@ Définit les paramètres liés à l'éditeur intégré, y compris le port du ser
671
698
 
672
699
  ---
673
700
 
701
+ ### Configuration des Analytics (Analytics Configuration)
702
+
703
+ Définit les paramètres liés aux analytics Intlayer : la collecte du contenu réellement affiché aux utilisateurs (pages vues, expositions de contenu) et l'alimentation des tests A/B sur le contenu.
704
+
705
+ Les analytics sont strictement optionnelles (opt-in) : rien n'est collecté à moins que `analytics.enabled` soit explicitement défini sur `true` **et** qu'une clé de projet (`editor.clientId`) soit configurée pour l'attribution. Lorsqu'elles sont désactivées (par défaut), l'intégralité de l'intégration analytics est éliminée du bundle de votre application (dead-code elimination).
706
+
707
+ | Champ | Description | Type | Par défaut | Exemple | Note |
708
+ | --------------- | -------------------------------------------------------------------------------------- | --------- | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
709
+ | `enabled` | Active la collecte des analytics (pages vues, expositions de contenu, événements A/B). | `boolean` | `false` | `true` | Nécessite que `editor.clientId` soit défini pour l'attribution ; sinon les analytics restent désactivées même si `enabled` vaut `true`. |
710
+ | `flushInterval` | Millisecondes entre les envois groupés automatiques vers le backend. | `number` | `20000` | `10000` | |
711
+ | `sampleRate` | Fraction des sessions à enregistrer, de `0` (aucune) à `1` (toutes). | `number` | `1` | `0.5` | L'échantillonnage est déterministe par session, donc une session enregistrée rapporte tous ses événements (pas d'entonnoirs partiels). |
712
+
713
+ ---
714
+
674
715
  ### Configuration du Routage (Routing Configuration)
675
716
 
676
717
  Paramètres contrôlant le comportement du routage, y compris la structure des URL, le stockage des locales et la gestion du 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 | Externalisez votre contenu dans le CMS Intlayer
5
5
  description: Externalisez votre contenu dans le CMS Intlayer pour déléguer la gestion de votre contenu à votre équipe.
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: "Déplacement de la section « Synchronisation en direct » vers sa propre page (live-sync.md), conservation d'une courte introduction avec lien ici"
21
24
  - version: 9.0.0
22
25
  date: 2026-06-30
23
26
  changes: "Ajout de la section Auto-hébergement : bootstrap Docker Compose, inventaire des services, configuration SDK, fonctionnalités optionnelles et notes de mise à niveau"
@@ -248,140 +251,7 @@ Vous pourrez alors voir et gérer votre dictionnaire dans le [CMS Intlayer](http
248
251
 
249
252
  La synchronisation en direct permet à votre application de refléter les modifications du contenu CMS en temps réel. Aucune reconstruction ou redéploiement n'est nécessaire. Lorsqu'elle est activée, les mises à jour sont diffusées vers un serveur de synchronisation en direct qui actualise les dictionnaires que votre application utilise.
250
253
 
251
- > La synchronisation en direct nécessite une connexion continue au serveur et est disponible dans le plan entreprise.
252
-
253
- Activez la synchronisation en direct en mettant à jour votre configuration Intlayer :
254
-
255
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
256
- import type { IntlayerConfig } from "intlayer";
257
-
258
- const config: IntlayerConfig = {
259
- // ... autres paramètres de configuration
260
- editor: {
261
- /**
262
- * Active le rechargement à chaud des configurations de langue lorsque des modifications sont détectées.
263
- * Par exemple, lorsqu'un dictionnaire est ajouté ou mis à jour, l'application met à jour
264
- * le contenu affiché sur la page.
265
- *
266
- * Comme le rechargement à chaud nécessite une connexion continue au serveur,
267
- * il est uniquement disponible pour les clients du plan `enterprise`.
268
- *
269
- * Par défaut : false
270
- */
271
- liveSync: true,
272
- },
273
- dictionary: {
274
- /**
275
- * Contrôle la manière dont les dictionnaires sont importés :
276
- *
277
- * - "live" : Les dictionnaires sont récupérés dynamiquement via l'API Live Sync.
278
- * Remplace useIntlayer par useDictionaryDynamic.
279
- *
280
- * Remarque : Le mode live utilise l'API Live Sync pour récupérer les dictionnaires. Si l'appel API
281
- * échoue, les dictionnaires sont importés dynamiquement.
282
- * Remarque : Seuls les dictionnaires avec un contenu distant et le drapeau "live" utilisent le mode live.
283
- * Les autres utilisent le mode dynamique pour des raisons de performance.
284
- */
285
- importMode: "fetch",
286
- },
287
- };
288
-
289
- export default config;
290
- ```
291
-
292
- Démarrez le serveur Live Sync pour envelopper votre application :
293
-
294
- Exemple avec Next.js :
295
-
296
- ```json5 fileName="package.json"
297
- {
298
- "scripts": {
299
- // ... autres scripts
300
- "build": "next build",
301
- "dev": "next dev",
302
- "start": "npx intlayer live --with 'next start'",
303
- },
304
- }
305
- ```
306
-
307
- Exemple avec Vite :
308
-
309
- ```json5 fileName="package.json"
310
- {
311
- "scripts": {
312
- // ... autres scripts
313
- "build": "vite build",
314
- "dev": "vite dev",
315
- "start": "npx intlayer live --with 'vite start'",
316
- },
317
- }
318
- ```
319
-
320
- Le serveur Live Sync enveloppe votre application et applique automatiquement le contenu mis à jour dès son arrivée.
321
-
322
- Pour recevoir les notifications de changement depuis le CMS, le serveur Live Sync maintient une connexion SSE avec le backend. Lorsque le contenu change dans le CMS, le backend transmet la mise à jour au serveur Live Sync, qui écrit les nouveaux dictionnaires. Votre application reflétera la mise à jour lors de la prochaine navigation ou du rechargement du navigateur, aucune reconstruction n’est nécessaire.
323
-
324
- Organigramme (CMS/Backend -> Serveur Live Sync -> Serveur d’application -> Frontend) :
325
-
326
- ![Schéma logique Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
327
-
328
- Comment cela fonctionne :
329
-
330
- ![Schéma du flux Live Sync CMS/Backend/Serveur Live Sync/Serveur d’application/Frontend](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
331
-
332
- ### Flux de travail en développement (local)
333
-
334
- - En développement, tous les dictionnaires distants sont récupérés au démarrage de l'application, ce qui vous permet de tester rapidement les mises à jour.
335
- - Pour tester Live Sync localement avec Next.js, encapsulez votre serveur de développement :
336
-
337
- ```json5 fileName="package.json"
338
- {
339
- "scripts": {
340
- // ... autres scripts
341
- "dev": "npx intlayer live --with 'next dev'",
342
- // "dev": "npx intlayer live --with 'vite dev'", // Pour Vite
343
- },
344
- }
345
- ```
346
-
347
- Activez l'optimisation afin qu'Intlayer applique les transformations d'importation Live pendant le développement :
348
-
349
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
350
- import type { IntlayerConfig } from "intlayer";
351
-
352
- const config: IntlayerConfig = {
353
- editor: {
354
- applicationURL: "http://localhost:5173",
355
- liveSyncURL: "http://localhost:4000",
356
- liveSync: true,
357
- },
358
- dictionary: {
359
- importMode: "fetch",
360
- },
361
- build: {
362
- optimize: true,
363
- },
364
- };
365
-
366
- export default config;
367
- ```
368
-
369
- Cette configuration encapsule votre serveur de développement avec le serveur Live Sync, récupère les dictionnaires distants au démarrage et diffuse les mises à jour du CMS via SSE. Rafraîchissez la page pour voir les changements.
370
-
371
- Notes et contraintes :
372
-
373
- - Ajoutez l'origine de live sync à votre politique de sécurité du site (CSP). Assurez-vous que l'URL de live sync est autorisée dans `connect-src` (et `frame-ancestors` si pertinent).
374
- - Live Sync ne fonctionne pas avec une sortie statique. Pour Next.js, la page doit être dynamique pour recevoir les mises à jour à l'exécution (par exemple, utilisez `generateStaticParams`, `generateMetadata`, `getServerSideProps` ou `getStaticProps` de manière appropriée pour éviter les contraintes de statique complète).
375
-
376
- Cette configuration enveloppe votre serveur de développement avec le serveur Live Sync, récupère les dictionnaires distants au démarrage, et diffuse les mises à jour du CMS via SSE. Actualisez la page pour voir les changements.
377
-
378
- Notes et contraintes :
379
-
380
- - Ajoutez l'origine du live sync à la politique de sécurité de votre site (CSP). Assurez-vous que l'URL du live sync est autorisée dans `connect-src` (et `frame-ancestors` si pertinent).
381
- - Live Sync ne fonctionne pas avec une sortie statique. Pour Next.js, la page doit être dynamique pour recevoir les mises à jour à l'exécution (par exemple, utilisez `generateStaticParams`, `generateMetadata`, `getServerSideProps` ou `getStaticProps` de manière appropriée pour éviter les contraintes de statique complète).
382
- - Dans le CMS, chaque dictionnaire possède un indicateur `live`. Seuls les dictionnaires avec `live=true` sont récupérés via l'API de synchronisation en direct ; les autres sont importés dynamiquement et restent inchangés à l'exécution.
383
- - L'indicateur `live` est évalué pour chaque dictionnaire au moment de la compilation. Si le contenu distant n'était pas marqué `live=true` lors de la compilation, vous devez recompiler pour activer la synchronisation en direct pour ce dictionnaire.
384
- - Le serveur de synchronisation en direct doit pouvoir écrire dans `.intlayer`. Dans les conteneurs, assurez-vous d'avoir un accès en écriture à `/.intlayer`.
254
+ Pour le guide de configuration complet (activation, démarrage du serveur Live Sync, flux de travail en développement local et contraintes), consultez la [documentation Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/live-sync.md).
385
255
 
386
256
  ## Auto-hébergement
387
257