@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: 2026-06-14
3
- updatedAt: 2026-06-30
3
+ updatedAt: 2026-07-08
4
4
  title: Yeni Intlayer v9 - Yenilikler Neler?
5
5
  description: Intlayer v9'daki yenilikleri keşfedin. Popüler i18n kütüphaneleri için doğrudan uyumlu paketler ve Koleksiyonlar ve Varyantlar desteği sunuluyor.
6
6
  keywords:
@@ -205,6 +205,49 @@ const product = useIntlayer("product-copy", {
205
205
 
206
206
  ---
207
207
 
208
+ ## `@intlayer/analytics`: içerik gösterim takibi ve A/B testi
209
+
210
+ Yeni bir isteğe bağlı paket olan [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md), ziyaretçilerinize gerçekte hangi içeriğin gösterildiğini bildirir — ve içerik üzerinde A/B testi yapmanıza ve varyant başına dönüşümleri ölçmenize olanak tanıyarak **Collections & Variants** döngüsünü tamamlar.
211
+
212
+ - **Provider düzeyinde takip**: `IntlayerProvider` (React / Next.js / React Native) yükleme, rota değişikliği ve dil değişikliğinde otomatik olarak `page_view` olayları kaydeder.
213
+ - **Node düzeyinde takip**: her `useIntlayer` çözümlemesi bir `content_exposure` olayı bildirir — hangi sözlük anahtarı, anahtar yolu, dil ve (varsa) hangi A/B **varyantı** gösterildiği. Bir flush penceresi içinde aynı düğümün tekrarlanan gösterimleri tek bir olayda birleştirilir.
214
+ - **Deterministik A/B ataması**: `getVariant(experimentKey, variants)`, **sunucuya gidiş-dönüş olmadan** her oturuma bir varyant atar, bu nedenle ilk render öncesinde titreme olmaz.
215
+ - **`useConversion()`**: bir hedefi (kayıt, tıklama, satın alma…) oturumun maruz kaldığı varyanta atfeder.
216
+ - **Kurulu değilse sıfır maliyet**: `@intlayer/editor` ile aynı tree-shakeable desen — `try/catch` içine sarılmış dinamik `import()`, artı bunu etkinleştirmeyen uygulamalar için tüm entegrasyonu ölü kod olarak kaldıran bir derleme zamanı ortam değişkeni (`INTLAYER_ANALYTICS_ENABLED`).
217
+ - **Yeni bir yapılandırma şeması yok**: mevcut `editor.backendURL` (gönderim uç noktası / kendi sunucunuzda barındırma) ve `editor.clientId` (proje anahtarı, aynı zamanda etkinleştirme anahtarı) yeniden kullanılır.
218
+ - **Gizliliğe saygılı**: anonim oturum hashleme (SHA-256, ham kimlikler saklanmaz), IP saklanmaz, yalnızca kaba ülke düzeyinde konum, istekler yaklaşık her 20 saniyede bir toplu olarak gönderilir.
219
+ - **Kontrol paneli**: bir proje seçildikten sonra kenar çubuğunda görünen yeni bir **Analytics** sayfası; aktif kullanıcıları, bugünkü kullanıcıları, son 7/30/90 gündeki kullanıcıları, bir ziyaretçi gelişim grafiğini ve Yerel Ayar/Konum dağılımlarını gösterir.
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
+ Bugün React, Next.js ve React Native (`react-intlayer` üzerinden) için kullanılabilir; diğer framework bağlamaları (Vue, Svelte, Angular, …) `@intlayer/editor` ile aynı yayılma desenini izleyerek planlanmaktadır. Tam kılavuz için [Analytics belgelerine](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md) bakın.
248
+
249
+ ---
250
+
208
251
  ## Vite Plugin: Bundled Compiler & Proxy
209
252
 
210
253
  `intlayer()` Vite eklentisi artık **compiler** ve **locale-routing proxy**'i doğrudan içeriyor, bu nedenle çoğu proje `vite.config.ts` içinde yalnızca tek bir eklentiye ihtiyaç duyuyor:
@@ -338,6 +381,7 @@ v8'den yükseltme yapıyorsanız, v9'un yıkıcı değişiklikler (breaking chan
338
381
 
339
382
  - [Compat Adapter Paketleri Kılavuzu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/compat/index.md)
340
383
  - [Dinamik Sözlükler - Koleksiyonlar ve Varyantlar](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dynamic_dictionaries/index.md)
384
+ - [Analytics - İçerik gösterim takibi ve A/B testi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
341
385
  - [Yapılandırma Referansı](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md)
342
386
  - [CMS SDK - @intlayer/api ile programatik erişim](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_CMS.md)
343
387
  - [Kendi Sunucuda Barındırma Kılavuzu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/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/uk/login.md)** - Автентифікація в Intlayer CMS та отримання облікових даних доступу
128
+ - **[Login](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/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: Конфігурація
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
  * Налаштування для перекладів та генерації за допомогою AI.
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, зберігання локалі та керування проміжним ПЗ.
@@ -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» перенесено на окрему сторінку (live-sync.md), тут залишено короткий вступ і посилання"
21
24
  - version: 9.0.0
22
25
  date: 2026-06-30
23
26
  changes: "Додано розділ «Самостійне розгортання»"
@@ -248,144 +251,7 @@ bun x intlayer dictionary push -d my-first-dictionary-key --env production
248
251
 
249
252
  Live Sync дозволяє вашому застосунку відображати зміни контенту з CMS під час виконання. Немає потреби у перебудові або повторному розгортанні. Коли увімкнено, оновлення передаються на сервер Live Sync, який оновлює словники, які читає ваш застосунок.
250
253
 
251
- Увімкніть Live Sync, оновивши конфігурацію Intlayer:
252
-
253
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
254
- import type { IntlayerConfig } from "intlayer";
255
-
256
- const config: IntlayerConfig = {
257
- // ... other configuration settings
258
- editor: {
259
- /**
260
- * Увімкнення гарячого перезавантаження конфігурацій локалей при виявленні змін.
261
- * Наприклад, коли словник додається або оновлюється, застосунок оновлює
262
- * вміст, що відображається на сторінці.
263
- *
264
- * Оскільки гаряче перезавантаження вимагає постійного з'єднання з сервером,
265
- * воно доступне лише клієнтам плану `enterprise`.
266
- *
267
- * За замовчуванням: false
268
- */
269
- liveSync: true,
270
- },
271
- dictionary: {
272
- /**
273
- * Керує способом імпорту словників:
274
- *
275
- * - "live": словники завантажуються динамічно за допомогою Live Sync API.
276
- * Замінює useIntlayer на useDictionaryDynamic.
277
- *
278
- * Примітка: режим live використовує Live Sync API для отримання словників. Якщо виклик API
279
- * не вдасться, словники імпортуються динамічно.
280
- * Примітка: режим live використовується лише для словників з віддаленим контентом і прапорцем "live".
281
- * Інші використовують динамічний режим для кращої продуктивності.
282
- */
283
- importMode: "fetch",
284
- },
285
- };
286
-
287
- export default config;
288
- ```
289
-
290
- Запустіть Live Sync сервер, щоб обгорнути ваш додаток:
291
-
292
- Приклад із окремим (standalone) сервером:
293
-
294
- ```json5 fileName="package.json"
295
- {
296
- "scripts": {
297
- // ... інші скрипти
298
- "live:start": "npx intlayer live",
299
- },
300
- }
301
- ```
302
-
303
- Ви також можете запустити сервер вашого додатку паралельно, використовуючи аргумент `--process`.
304
-
305
- Приклад із Next.js:
306
-
307
- ```json5 fileName="package.json"
308
- {
309
- "scripts": {
310
- // ... інші скрипти
311
- "build": "next build",
312
- "dev": "next dev",
313
- "start": "npx intlayer live --with 'next start'",
314
- },
315
- }
316
- ```
317
-
318
- Приклад із Vite:
319
-
320
- ```json5 fileName="package.json"
321
- {
322
- "scripts": {
323
- // ... інші скрипти
324
- "build": "vite build",
325
- "dev": "vite dev",
326
- "start": "npx intlayer live --with 'vite start'",
327
- },
328
- }
329
- ```
330
-
331
- Live Sync-сервер обгортає ваш додаток і автоматично застосовує оновлений контент у міру його надходження.
332
-
333
- Щоб отримувати сповіщення про зміни з CMS, Live Sync-сервер підтримує SSE-з'єднання з бекендом. Коли вміст у CMS змінюється, бекенд пересилає оновлення до Live Sync-сервера, який записує нові словники. Ваш додаток відобразить оновлення при наступній навігації або перезавантаженні браузера, без необхідності перебудови.
334
-
335
- Схема потоку (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
336
-
337
- ![Схема потоку Live Sync (CMS/Backend -> Live Sync Server -> Application Server -> Frontend)](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
338
-
339
- Як це працює:
340
-
341
- ![Схема логіки Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
342
-
343
- ### Робочий процес розробки (локально)
344
-
345
- - Під час розробки всі віддалені словники завантажуються при запуску застосунку, тож ви можете швидко тестувати оновлення.
346
- - Щоб протестувати Live Sync локально з Next.js, обгорніть ваш dev-сервер:
347
-
348
- ```json5 fileName="package.json"
349
- {
350
- "scripts": {
351
- // ... інші скрипти
352
- "dev": "npx intlayer live --with 'next dev'",
353
- // "dev": "npx intlayer live --with 'vite dev'", // Для Vite
354
- },
355
- }
356
- ```
357
-
358
- Увімкніть оптимізацію, щоб Intlayer застосовував трансформації Live import під час розробки:
359
-
360
- ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
361
- import type { IntlayerConfig } from "intlayer";
362
-
363
- const config: IntlayerConfig = {
364
- editor: {
365
- applicationURL: "http://localhost:5173",
366
- liveSyncURL: "http://localhost:4000",
367
- liveSync: true,
368
- },
369
- dictionary: {
370
- importMode: "fetch",
371
- },
372
- build: {
373
- optimize: true,
374
- },
375
- };
376
-
377
- export default config;
378
- ```
379
-
380
- Ця конфігурація обгортає ваш dev-сервер Live Sync-сервером, завантажує віддалені словники при старті та передає оновлення з CMS через SSE. Оновіть сторінку, щоб побачити зміни.
381
-
382
- Примітки та обмеження:
383
-
384
- - Додайте origin Live Sync до політики безпеки вашого сайту (CSP). Переконайтеся, що URL Live Sync дозволений у `connect-src` (і в `frame-ancestors`, якщо це доречно).
385
- - Live Sync не працює зі статичним виводом. Для Next.js сторінка має бути динамічною, щоб отримувати оновлення під час виконання (наприклад, використовуйте `generateStaticParams`, `generateMetadata`, `getServerSideProps` або `getStaticProps` відповідно, щоб уникнути повного обмеження лише статикою).
386
- - У CMS кожний словник має прапорець `live`. Лише словники з `live=true` завантажуються через API live sync; інші імпортуються динамічно і залишаються незмінними під час виконання.
387
- - Прапорець `live` оцінюється для кожного словника під час збірки. Якщо віддалений контент не мав `live=true` під час збірки, потрібно перебудувати проект, щоб увімкнути Live Sync для цього словника.
388
- - Сервер live sync має мати можливість записувати в `.intlayer`. У контейнерах переконайтеся, що є права запису до `/.intlayer`.
254
+ Повний посібник з налаштування (увімкнення, запуск сервера Live Sync, локальний робочий процес розробки та обмеження) наведено в [документації Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/live-sync.md).
389
255
 
390
256
  ## Самостійне розгортання (Self-Hosting)
391
257
 
@@ -0,0 +1,185 @@
1
+ ---
2
+ createdAt: 2026-07-08
3
+ updatedAt: 2026-07-08
4
+ title: Live Sync | Відображення змін контенту CMS у реальному часі
5
+ description: Дозвольте вашому застосунку відображати зміни контенту Intlayer CMS у реальному часі — без пересборки чи повторного розгортання.
6
+ keywords:
7
+ - Live Sync
8
+ - Жива синхронізація
9
+ - CMS
10
+ - Візуальний редактор
11
+ - Інтернаціоналізація
12
+ - Документація
13
+ - Intlayer
14
+ - Next.js
15
+ - Vite
16
+ history:
17
+ - version: 9.0.0
18
+ date: 2026-07-08
19
+ changes: "Перенесено з документації Intlayer CMS на окрему сторінку"
20
+ - version: 6.0.1
21
+ date: 2025-09-22
22
+ changes: "Додано документацію `liveSync`"
23
+ - version: 6.0.0
24
+ date: 2025-09-04
25
+ changes: "Замінено поле `hotReload` на `liveSync`"
26
+ author: aymericzip
27
+ ---
28
+
29
+ # Live Sync
30
+
31
+ Live Sync дозволяє вашому застосунку відображати зміни контенту з CMS під час виконання. Немає потреби у перебудові або повторному розгортанні. Коли увімкнено, оновлення передаються на сервер Live Sync, який оновлює словники, які читає ваш застосунок.
32
+
33
+ ## Зміст
34
+
35
+ <TOC/>
36
+
37
+ ---
38
+
39
+ ## Увімкнення Live Sync
40
+
41
+ Увімкніть Live Sync, оновивши конфігурацію Intlayer:
42
+
43
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
44
+ import type { IntlayerConfig } from "intlayer";
45
+
46
+ const config: IntlayerConfig = {
47
+ // ... other configuration settings
48
+ editor: {
49
+ /**
50
+ * Увімкнення гарячого перезавантаження конфігурацій локалей при виявленні змін.
51
+ * Наприклад, коли словник додається або оновлюється, застосунок оновлює
52
+ * вміст, що відображається на сторінці.
53
+ *
54
+ * Оскільки гаряче перезавантаження вимагає постійного з'єднання з сервером,
55
+ * воно доступне лише клієнтам плану `enterprise`.
56
+ *
57
+ * За замовчуванням: false
58
+ */
59
+ liveSync: true,
60
+ },
61
+ dictionary: {
62
+ /**
63
+ * Керує способом імпорту словників:
64
+ *
65
+ * - "live": словники завантажуються динамічно за допомогою Live Sync API.
66
+ * Замінює useIntlayer на useDictionaryDynamic.
67
+ *
68
+ * Примітка: режим live використовує Live Sync API для отримання словників. Якщо виклик API
69
+ * не вдасться, словники імпортуються динамічно.
70
+ * Примітка: режим live використовується лише для словників з віддаленим контентом і прапорцем "live".
71
+ * Інші використовують динамічний режим для кращої продуктивності.
72
+ */
73
+ importMode: "fetch",
74
+ },
75
+ };
76
+
77
+ export default config;
78
+ ```
79
+
80
+ Запустіть Live Sync сервер, щоб обгорнути ваш додаток:
81
+
82
+ Приклад із окремим (standalone) сервером:
83
+
84
+ ```json5 fileName="package.json"
85
+ {
86
+ "scripts": {
87
+ // ... інші скрипти
88
+ "live:start": "npx intlayer live",
89
+ },
90
+ }
91
+ ```
92
+
93
+ Ви також можете запустити сервер вашого додатку паралельно, використовуючи аргумент `--process`.
94
+
95
+ Приклад із Next.js:
96
+
97
+ ```json5 fileName="package.json"
98
+ {
99
+ "scripts": {
100
+ // ... інші скрипти
101
+ "build": "next build",
102
+ "dev": "next dev",
103
+ "start": "npx intlayer live --with 'next start'",
104
+ },
105
+ }
106
+ ```
107
+
108
+ Приклад із Vite:
109
+
110
+ ```json5 fileName="package.json"
111
+ {
112
+ "scripts": {
113
+ // ... інші скрипти
114
+ "build": "vite build",
115
+ "dev": "vite dev",
116
+ "start": "npx intlayer live --with 'vite start'",
117
+ },
118
+ }
119
+ ```
120
+
121
+ Live Sync-сервер обгортає ваш додаток і автоматично застосовує оновлений контент у міру його надходження.
122
+
123
+ Щоб отримувати сповіщення про зміни з CMS, Live Sync-сервер підтримує SSE-з'єднання з бекендом. Коли вміст у CMS змінюється, бекенд пересилає оновлення до Live Sync-сервера, який записує нові словники. Ваш додаток відобразить оновлення при наступній навігації або перезавантаженні браузера, без необхідності перебудови.
124
+
125
+ Схема потоку (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
126
+
127
+ ![Схема потоку Live Sync (CMS/Backend -> Live Sync Server -> Application Server -> Frontend)](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
128
+
129
+ Як це працює:
130
+
131
+ ![Схема логіки Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
132
+
133
+ ## Робочий процес розробки (локально)
134
+
135
+ - Під час розробки всі віддалені словники завантажуються при запуску застосунку, тож ви можете швидко тестувати оновлення.
136
+ - Щоб протестувати Live Sync локально з Next.js, обгорніть ваш dev-сервер:
137
+
138
+ ```json5 fileName="package.json"
139
+ {
140
+ "scripts": {
141
+ // ... інші скрипти
142
+ "dev": "npx intlayer live --with 'next dev'",
143
+ // "dev": "npx intlayer live --with 'vite dev'", // Для Vite
144
+ },
145
+ }
146
+ ```
147
+
148
+ Увімкніть оптимізацію, щоб Intlayer застосовував трансформації Live import під час розробки:
149
+
150
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
151
+ import type { IntlayerConfig } from "intlayer";
152
+
153
+ const config: IntlayerConfig = {
154
+ editor: {
155
+ applicationURL: "http://localhost:5173",
156
+ liveSyncURL: "http://localhost:4000",
157
+ liveSync: true,
158
+ },
159
+ dictionary: {
160
+ importMode: "fetch",
161
+ },
162
+ build: {
163
+ optimize: true,
164
+ },
165
+ };
166
+
167
+ export default config;
168
+ ```
169
+
170
+ Ця конфігурація обгортає ваш dev-сервер Live Sync-сервером, завантажує віддалені словники при старті та передає оновлення з CMS через SSE. Оновіть сторінку, щоб побачити зміни.
171
+
172
+ ## Примітки та обмеження
173
+
174
+ - Додайте origin Live Sync до політики безпеки вашого сайту (CSP). Переконайтеся, що URL Live Sync дозволений у `connect-src` (і в `frame-ancestors`, якщо це доречно).
175
+ - Live Sync не працює зі статичним виводом. Для Next.js сторінка має бути динамічною, щоб отримувати оновлення під час виконання (наприклад, використовуйте `generateStaticParams`, `generateMetadata`, `getServerSideProps` або `getStaticProps` відповідно, щоб уникнути повного обмеження лише статикою).
176
+ - У CMS кожний словник має прапорець `live`. Лише словники з `live=true` завантажуються через API live sync; інші імпортуються динамічно і залишаються незмінними під час виконання.
177
+ - Прапорець `live` оцінюється для кожного словника під час збірки. Якщо віддалений контент не мав `live=true` під час збірки, потрібно перебудувати проект, щоб увімкнути Live Sync для цього словника.
178
+ - Сервер live sync має мати можливість записувати в `.intlayer`. У контейнерах переконайтеся, що є права запису до `/.intlayer`.
179
+
180
+ ## Корисні посилання
181
+
182
+ - [Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)
183
+ - [Візуальний редактор Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md)
184
+ - [Довідник з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
185
+ - [Посібник із самостійного розгортання](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/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: Новий Intlayer v9 - Що нового?
5
5
  description: Дізнайтеся, що нового в Intlayer v9. Представляємо сумісні пакети швидкої заміни (drop-in) для популярних бібліотек i18n та підтримку Collections та Variants.
6
6
  keywords:
@@ -204,6 +204,49 @@ const product = useIntlayer("product-copy", {
204
204
 
205
205
  ---
206
206
 
207
+ ## `@intlayer/analytics`: відстеження показів контенту та A/B-тестування
208
+
209
+ Новий необов'язковий пакет [`@intlayer/analytics`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md) показує, який контент насправді бачать ваші відвідувачі — і замикає цикл із **Collections & Variants**, дозволяючи проводити A/B-тестування контенту та вимірювати конверсії по кожному варіанту.
210
+
211
+ - **Відстеження на рівні провайдера**: `IntlayerProvider` (React / Next.js / React Native) автоматично фіксує події `page_view` під час завантаження, зміни маршруту та зміни локалі.
212
+ - **Відстеження на рівні вузла**: кожне розв'язання `useIntlayer` надсилає подію `content_exposure` — який ключ словника, шлях ключа, локаль і (якщо застосовно) який A/B-**варіант** було показано. Повторні покази того самого вузла в межах вікна відправки об'єднуються в одну подію.
213
+ - **Детерміноване призначення A/B**: `getVariant(experimentKey, variants)` призначає варіант кожній сесії **без звернення до сервера**, тому перед першим рендером не виникає мерехтіння.
214
+ - **`useConversion()`**: прив'язує ціль (реєстрація, клік, покупка…) до варіанту, який бачила сесія.
215
+ - **Нульова вартість без встановлення**: той самий tree-shakeable підхід, що й у `@intlayer/editor` — динамічний `import()`, обгорнутий у `try/catch`, плюс змінна середовища часу збірки (`INTLAYER_ANALYTICS_ENABLED`), яка повністю видаляє інтеграцію з бандла для застосунків, що її не увімкнули.
216
+ - **Без нової схеми конфігурації**: повторно використовує `editor.backendURL` (кінцева точка відправки / самостійне розгортання) та `editor.clientId` (ключ проєкту, який також є перемикачем увімкнення).
217
+ - **З повагою до приватності**: анонімне хешування сесії (SHA-256, без зберігання вихідних id), без зберігання IP, лише приблизна геолокація на рівні країни, запити надсилаються пакетами приблизно кожні 20 секунд.
218
+ - **Дашборд**: нова сторінка **Analytics** (з'являється в бічній панелі після вибору проєкту) показує активних користувачів, користувачів за сьогодні, за останні 7/30/90 днів, графік динаміки відвідувачів і розподіл за локалями та розташуванням.
219
+
220
+ ```tsx fileName="CTAButton.tsx" codeFormat="tsx"
221
+ import { useConversion } from "react-intlayer";
222
+
223
+ const CTAButton = () => {
224
+ const trackConversion = useConversion();
225
+
226
+ return (
227
+ <button
228
+ onClick={() =>
229
+ trackConversion({
230
+ experimentKey: "homepage-hero",
231
+ variant: "black_friday",
232
+ goal: "cta_click",
233
+ })
234
+ }
235
+ >
236
+ Get started
237
+ </button>
238
+ );
239
+ };
240
+ ```
241
+
242
+ ```bash packageManager="npm"
243
+ npm install @intlayer/analytics
244
+ ```
245
+
246
+ Вже доступно для React, Next.js і React Native (через `react-intlayer`); інші прив'язки для фреймворків (Vue, Svelte, Angular, …) заплановані за тією ж моделлю впровадження, що й `@intlayer/editor`. Повний посібник дивіться в [документації Analytics](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md).
247
+
248
+ ---
249
+
207
250
  ## Vite Plugin: Bundled Compiler & Proxy
208
251
 
209
252
  Плагін Vite `intlayer()` тепер об'єднує **компілятор** та **проксі для маршрутизації локалей** безпосередньо, тому більшості проектів потрібен лише один плагін у `vite.config.ts`:
@@ -350,6 +393,7 @@ Chromium (що використовується для генерації зні
350
393
 
351
394
  - [Посібник з пакетів адаптерів сумісності (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/index.md)
352
395
  - [Динамічні словники - Collections та Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/index.md)
396
+ - [Analytics - Відстеження показів контенту та A/B-тестування](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/analytics.md)
353
397
  - [Довідник з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
354
398
  - [CMS SDK — програмний доступ через @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)
355
399
  - [Посібник із самостійного розгортання](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/self_hosting.md)
@@ -125,7 +125,7 @@ Intlayer کئی کنفیگریشن فائل فارمیٹس قبول کرتا ہ
125
125
 
126
126
  ### توثیق (Authentication)
127
127
 
128
- - **[لاگ ان](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/login.md)** - Intlayer CMS سے توثیق کریں اور رسائی کی اسناد حاصل کریں
128
+ - **[لاگ ان](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/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-17
3
+ updatedAt: 2026-07-11
4
4
  title: ترتیب (Configuration)
5
5
  description: سیکھیں کہ اپنی ایپلیکیشن کے لیے Intlayer کو کیسے ترتیب دینا ہے۔ اپنی ضروریات کے مطابق Intlayer کو اپنی مرضی کے مطابق بنانے کے لیے دستیاب مختلف ترتیبات اور اختیارات کو سمجھیں۔
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - configuration
18
18
  history:
19
+ - version: 9.0.0
20
+ date: 2026-07-11
21
+ changes: "`analytics` کنفیگریشن شامل کی گئی"
22
+ - version: 9.0.0
23
+ date: 2026-06-24
24
+ changes: "Add `enableProxy` option to the routing configuration"
19
25
  - version: 8.10.0
20
26
  date: 2026-06-17
21
27
  changes: "ڈکشنری کی ترتیب میں `format` کا اختیار شامل کیا گیا"
@@ -354,6 +360,30 @@ const config: IntlayerConfig = {
354
360
  liveSync: true,
355
361
  },
356
362
 
363
+ /**
364
+ * اینالیٹکس (analytics) کنفیگریشن۔
365
+ */
366
+ analytics: {
367
+ /**
368
+ * کیا اینالیٹکس ڈیٹا اکٹھا کرنا فعال ہے (پیج ویوز، کنٹینٹ ایکسپوژر، A/B ایونٹس)۔
369
+ * ایٹریبیوشن کے لیے `editor.clientId` سیٹ ہونا ضروری ہے۔
370
+ * ڈیفالٹ: false
371
+ */
372
+ enabled: true,
373
+
374
+ /**
375
+ * بیک اینڈ کو خودکار بیچ ارسال کے درمیان ملی سیکنڈز۔
376
+ * ڈیفالٹ: 20000
377
+ */
378
+ flushInterval: 20000,
379
+
380
+ /**
381
+ * ریکارڈ کیے جانے والے سیشنز کا تناسب، 0 (کوئی نہیں) سے 1 (تمام) تک۔
382
+ * ڈیفالٹ: 1
383
+ */
384
+ sampleRate: 1,
385
+ },
386
+
357
387
  /**
358
388
  * AI کے ذریعے ترجمہ اور تیاری کی ترتیبات۔
359
389
  */
@@ -667,6 +697,20 @@ export default config;
667
697
 
668
698
  ---
669
699
 
700
+ ### اینالیٹکس کنفیگریشن (Analytics)
701
+
702
+ Intlayer اینالیٹکس سے متعلق ترتیبات کی وضاحت کرتا ہے: صارفین کو حقیقت میں دکھائے جانے والے مواد (پیج ویوز، کنٹینٹ ایکسپوژر) کو اکٹھا کرنا اور مواد پر A/B ٹیسٹنگ کو فعال بنانا۔
703
+
704
+ اینالیٹکس مکمل طور پر اختیاری (opt-in) ہے: جب تک `analytics.enabled` کو واضح طور پر `true` پر سیٹ نہ کیا جائے **اور** ایٹریبیوشن کے لیے پراجیکٹ کی (`editor.clientId`) کنفیگر نہ کی جائے، کچھ بھی اکٹھا نہیں کیا جاتا۔ غیر فعال ہونے کی صورت میں (ڈیفالٹ)، پورا اینالیٹکس انٹیگریشن آپ کے ایپلیکیشن بنڈل سے ہٹا دیا جاتا ہے (ڈیڈ کوڈ ایلیمینیشن)۔
705
+
706
+ | فیلڈ | تفصیل | قسم | ڈیفالٹ | مثال | نوٹ |
707
+ | --------------- | ---------------------------------------------------------------------------------- | --------- | ------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
708
+ | `enabled` | اینالیٹکس ڈیٹا اکٹھا کرنے کو فعال کرتا ہے (پیج ویوز، کنٹینٹ ایکسپوژر، A/B ایونٹس)۔ | `boolean` | `false` | `true` | ایٹریبیوشن کے لیے `editor.clientId` سیٹ ہونا ضروری ہے؛ ورنہ `enabled` کے `true` ہونے کے باوجود اینالیٹکس غیر فعال رہتا ہے۔ |
709
+ | `flushInterval` | بیک اینڈ کو خودکار بیچ ارسال کے درمیان ملی سیکنڈز۔ | `number` | `20000` | `10000` | |
710
+ | `sampleRate` | ریکارڈ کیے جانے والے سیشنز کا تناسب، `0` (کوئی نہیں) سے `1` (تمام) تک۔ | `number` | `1` | `0.5` | سیمپلنگ فی سیشن یقینی (deterministic) ہے، اس لیے ایک ریکارڈ شدہ سیشن اپنے تمام ایونٹس کی رپورٹ کرتا ہے۔ |
711
+
712
+ ---
713
+
670
714
  ### راؤٹنگ کنفیگریشن (Routing)
671
715
 
672
716
  ترتیبات جو راؤٹنگ کے رویے کو کنٹرول کرتی ہیں، بشمول URL کا ڈھانچہ، لوکل اسٹوریج، اور مڈل ویئر ہینڈلنگ۔