@intlayer/docs 7.5.12 → 7.5.13

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 (197) hide show
  1. package/blog/uk/compiler_vs_declarative_i18n.md +224 -0
  2. package/blog/uk/i18n_using_next-i18next.md +1086 -0
  3. package/blog/uk/i18n_using_next-intl.md +760 -0
  4. package/blog/uk/index.md +69 -0
  5. package/blog/uk/internationalization_and_SEO.md +273 -0
  6. package/blog/uk/intlayer_with_i18next.md +211 -0
  7. package/blog/uk/intlayer_with_next-i18next.md +202 -0
  8. package/blog/uk/intlayer_with_next-intl.md +203 -0
  9. package/blog/uk/intlayer_with_react-i18next.md +200 -0
  10. package/blog/uk/intlayer_with_react-intl.md +202 -0
  11. package/blog/uk/intlayer_with_vue-i18n.md +206 -0
  12. package/blog/uk/l10n_platform_alternative/Lokalise.md +80 -0
  13. package/blog/uk/l10n_platform_alternative/crowdin.md +80 -0
  14. package/blog/uk/l10n_platform_alternative/phrase.md +78 -0
  15. package/blog/uk/list_i18n_technologies/CMS/drupal.md +143 -0
  16. package/blog/uk/list_i18n_technologies/CMS/wix.md +167 -0
  17. package/blog/uk/list_i18n_technologies/CMS/wordpress.md +189 -0
  18. package/blog/uk/list_i18n_technologies/frameworks/angular.md +125 -0
  19. package/blog/uk/list_i18n_technologies/frameworks/flutter.md +128 -0
  20. package/blog/uk/list_i18n_technologies/frameworks/react-native.md +217 -0
  21. package/blog/uk/list_i18n_technologies/frameworks/react.md +155 -0
  22. package/blog/uk/list_i18n_technologies/frameworks/svelte.md +145 -0
  23. package/blog/uk/list_i18n_technologies/frameworks/vue.md +144 -0
  24. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1499 -0
  25. package/blog/uk/nextjs-multilingual-seo-comparison.md +360 -0
  26. package/blog/uk/rag_powered_documentation_assistant.md +288 -0
  27. package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
  28. package/blog/uk/vue-i18n_vs_intlayer.md +279 -0
  29. package/blog/uk/what_is_internationalization.md +167 -0
  30. package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
  31. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  32. package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
  33. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  34. package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
  35. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  36. package/docs/ar/configuration.md +6 -1
  37. package/docs/ar/dictionary/content_file.md +6 -1
  38. package/docs/de/configuration.md +6 -1
  39. package/docs/de/dictionary/content_file.md +6 -1
  40. package/docs/en/configuration.md +6 -1
  41. package/docs/en/dictionary/content_file.md +6 -1
  42. package/docs/en-GB/configuration.md +6 -1
  43. package/docs/en-GB/dictionary/content_file.md +3 -1
  44. package/docs/es/configuration.md +6 -1
  45. package/docs/es/dictionary/content_file.md +6 -1
  46. package/docs/fr/configuration.md +6 -1
  47. package/docs/fr/dictionary/content_file.md +3 -1
  48. package/docs/hi/configuration.md +6 -1
  49. package/docs/hi/dictionary/content_file.md +3 -1
  50. package/docs/id/configuration.md +6 -1
  51. package/docs/id/dictionary/content_file.md +3 -1
  52. package/docs/it/configuration.md +6 -1
  53. package/docs/it/dictionary/content_file.md +3 -1
  54. package/docs/ja/configuration.md +6 -1
  55. package/docs/ja/dictionary/content_file.md +3 -1
  56. package/docs/ko/configuration.md +6 -1
  57. package/docs/ko/dictionary/content_file.md +3 -1
  58. package/docs/pl/configuration.md +3 -1
  59. package/docs/pl/dictionary/content_file.md +3 -1
  60. package/docs/pt/configuration.md +6 -1
  61. package/docs/pt/dictionary/content_file.md +3 -1
  62. package/docs/ru/configuration.md +6 -1
  63. package/docs/ru/dictionary/content_file.md +6 -1
  64. package/docs/tr/configuration.md +6 -1
  65. package/docs/tr/dictionary/content_file.md +3 -1
  66. package/docs/uk/CI_CD.md +198 -0
  67. package/docs/uk/autoFill.md +307 -0
  68. package/docs/uk/bundle_optimization.md +185 -0
  69. package/docs/uk/cli/build.md +64 -0
  70. package/docs/uk/cli/ci.md +137 -0
  71. package/docs/uk/cli/configuration.md +63 -0
  72. package/docs/uk/cli/debug.md +46 -0
  73. package/docs/uk/cli/doc-review.md +43 -0
  74. package/docs/uk/cli/doc-translate.md +132 -0
  75. package/docs/uk/cli/editor.md +28 -0
  76. package/docs/uk/cli/fill.md +130 -0
  77. package/docs/uk/cli/index.md +190 -0
  78. package/docs/uk/cli/init.md +84 -0
  79. package/docs/uk/cli/list.md +90 -0
  80. package/docs/uk/cli/list_projects.md +128 -0
  81. package/docs/uk/cli/live.md +41 -0
  82. package/docs/uk/cli/login.md +157 -0
  83. package/docs/uk/cli/pull.md +78 -0
  84. package/docs/uk/cli/push.md +98 -0
  85. package/docs/uk/cli/sdk.md +71 -0
  86. package/docs/uk/cli/test.md +76 -0
  87. package/docs/uk/cli/transform.md +65 -0
  88. package/docs/uk/cli/version.md +24 -0
  89. package/docs/uk/cli/watch.md +37 -0
  90. package/docs/uk/configuration.md +742 -0
  91. package/docs/uk/dictionary/condition.md +237 -0
  92. package/docs/uk/dictionary/content_file.md +1134 -0
  93. package/docs/uk/dictionary/enumeration.md +245 -0
  94. package/docs/uk/dictionary/file.md +232 -0
  95. package/docs/uk/dictionary/function_fetching.md +212 -0
  96. package/docs/uk/dictionary/gender.md +273 -0
  97. package/docs/uk/dictionary/insertion.md +187 -0
  98. package/docs/uk/dictionary/markdown.md +383 -0
  99. package/docs/uk/dictionary/nesting.md +273 -0
  100. package/docs/uk/dictionary/translation.md +332 -0
  101. package/docs/uk/formatters.md +595 -0
  102. package/docs/uk/how_works_intlayer.md +256 -0
  103. package/docs/uk/index.md +175 -0
  104. package/docs/uk/interest_of_intlayer.md +297 -0
  105. package/docs/uk/intlayer_CMS.md +569 -0
  106. package/docs/uk/intlayer_visual_editor.md +292 -0
  107. package/docs/uk/intlayer_with_angular.md +710 -0
  108. package/docs/uk/intlayer_with_astro.md +256 -0
  109. package/docs/uk/intlayer_with_create_react_app.md +1258 -0
  110. package/docs/uk/intlayer_with_express.md +429 -0
  111. package/docs/uk/intlayer_with_fastify.md +446 -0
  112. package/docs/uk/intlayer_with_lynx+react.md +548 -0
  113. package/docs/uk/intlayer_with_nestjs.md +283 -0
  114. package/docs/uk/intlayer_with_next-i18next.md +640 -0
  115. package/docs/uk/intlayer_with_next-intl.md +456 -0
  116. package/docs/uk/intlayer_with_nextjs_page_router.md +1541 -0
  117. package/docs/uk/intlayer_with_nuxt.md +711 -0
  118. package/docs/uk/intlayer_with_react_router_v7.md +600 -0
  119. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +669 -0
  120. package/docs/uk/intlayer_with_svelte_kit.md +579 -0
  121. package/docs/uk/intlayer_with_tanstack.md +818 -0
  122. package/docs/uk/intlayer_with_vite+preact.md +1748 -0
  123. package/docs/uk/intlayer_with_vite+react.md +1449 -0
  124. package/docs/uk/intlayer_with_vite+solid.md +302 -0
  125. package/docs/uk/intlayer_with_vite+svelte.md +520 -0
  126. package/docs/uk/intlayer_with_vite+vue.md +1113 -0
  127. package/docs/uk/introduction.md +222 -0
  128. package/docs/uk/locale_mapper.md +242 -0
  129. package/docs/uk/mcp_server.md +211 -0
  130. package/docs/uk/packages/express-intlayer/t.md +465 -0
  131. package/docs/uk/packages/intlayer/getEnumeration.md +159 -0
  132. package/docs/uk/packages/intlayer/getHTMLTextDir.md +121 -0
  133. package/docs/uk/packages/intlayer/getLocaleLang.md +81 -0
  134. package/docs/uk/packages/intlayer/getLocaleName.md +135 -0
  135. package/docs/uk/packages/intlayer/getLocalizedUrl.md +338 -0
  136. package/docs/uk/packages/intlayer/getMultilingualUrls.md +359 -0
  137. package/docs/uk/packages/intlayer/getPathWithoutLocale.md +75 -0
  138. package/docs/uk/packages/intlayer/getPrefix.md +213 -0
  139. package/docs/uk/packages/intlayer/getTranslation.md +190 -0
  140. package/docs/uk/packages/intlayer/getTranslationContent.md +189 -0
  141. package/docs/uk/packages/next-intlayer/t.md +365 -0
  142. package/docs/uk/packages/next-intlayer/useDictionary.md +276 -0
  143. package/docs/uk/packages/next-intlayer/useIntlayer.md +263 -0
  144. package/docs/uk/packages/next-intlayer/useLocale.md +166 -0
  145. package/docs/uk/packages/react-intlayer/t.md +311 -0
  146. package/docs/uk/packages/react-intlayer/useDictionary.md +295 -0
  147. package/docs/uk/packages/react-intlayer/useI18n.md +250 -0
  148. package/docs/uk/packages/react-intlayer/useIntlayer.md +251 -0
  149. package/docs/uk/packages/react-intlayer/useLocale.md +210 -0
  150. package/docs/uk/per_locale_file.md +345 -0
  151. package/docs/uk/plugins/sync-json.md +398 -0
  152. package/docs/uk/readme.md +265 -0
  153. package/docs/uk/releases/v6.md +305 -0
  154. package/docs/uk/releases/v7.md +624 -0
  155. package/docs/uk/roadmap.md +346 -0
  156. package/docs/uk/testing.md +204 -0
  157. package/docs/vi/configuration.md +6 -1
  158. package/docs/vi/dictionary/content_file.md +6 -1
  159. package/docs/zh/configuration.md +6 -1
  160. package/docs/zh/dictionary/content_file.md +6 -1
  161. package/frequent_questions/ar/error-vite-env-only.md +77 -0
  162. package/frequent_questions/de/error-vite-env-only.md +77 -0
  163. package/frequent_questions/en/error-vite-env-only.md +77 -0
  164. package/frequent_questions/en-GB/error-vite-env-only.md +77 -0
  165. package/frequent_questions/es/error-vite-env-only.md +76 -0
  166. package/frequent_questions/fr/error-vite-env-only.md +77 -0
  167. package/frequent_questions/hi/error-vite-env-only.md +77 -0
  168. package/frequent_questions/id/error-vite-env-only.md +77 -0
  169. package/frequent_questions/it/error-vite-env-only.md +77 -0
  170. package/frequent_questions/ja/error-vite-env-only.md +77 -0
  171. package/frequent_questions/ko/error-vite-env-only.md +77 -0
  172. package/frequent_questions/pl/error-vite-env-only.md +77 -0
  173. package/frequent_questions/pt/error-vite-env-only.md +77 -0
  174. package/frequent_questions/ru/error-vite-env-only.md +77 -0
  175. package/frequent_questions/tr/error-vite-env-only.md +77 -0
  176. package/frequent_questions/uk/SSR_Next_no_[locale].md +104 -0
  177. package/frequent_questions/uk/array_as_content_declaration.md +72 -0
  178. package/frequent_questions/uk/build_dictionaries.md +58 -0
  179. package/frequent_questions/uk/build_error_CI_CD.md +74 -0
  180. package/frequent_questions/uk/bun_set_up.md +53 -0
  181. package/frequent_questions/uk/customized_locale_list.md +64 -0
  182. package/frequent_questions/uk/domain_routing.md +113 -0
  183. package/frequent_questions/uk/error-vite-env-only.md +77 -0
  184. package/frequent_questions/uk/esbuild_error.md +29 -0
  185. package/frequent_questions/uk/get_locale_cookie.md +142 -0
  186. package/frequent_questions/uk/intlayer_command_undefined.md +155 -0
  187. package/frequent_questions/uk/locale_incorect_in_url.md +73 -0
  188. package/frequent_questions/uk/package_version_error.md +181 -0
  189. package/frequent_questions/uk/static_rendering.md +44 -0
  190. package/frequent_questions/uk/translated_path_url.md +55 -0
  191. package/frequent_questions/uk/unknown_command.md +97 -0
  192. package/frequent_questions/vi/error-vite-env-only.md +77 -0
  193. package/frequent_questions/zh/error-vite-env-only.md +77 -0
  194. package/legal/uk/privacy_notice.md +83 -0
  195. package/legal/uk/terms_of_service.md +55 -0
  196. package/package.json +6 -6
  197. package/src/generated/frequentQuestions.entry.ts +20 -0
@@ -0,0 +1,569 @@
1
+ ---
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-08-23
4
+ title: Intlayer CMS | Виносьте свій контент у Intlayer CMS
5
+ description: Виносьте свій контент у Intlayer CMS, щоб делегувати керування ним вашій команді.
6
+ keywords:
7
+ - CMS
8
+ - Visual Editor
9
+ - Internationalization
10
+ - Documentation
11
+ - Intlayer
12
+ - Next.js
13
+ - JavaScript
14
+ - React
15
+ slugs:
16
+ - doc
17
+ - concept
18
+ - cms
19
+ youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
20
+ history:
21
+ - version: 6.0.1
22
+ date: 2025-09-22
23
+ changes: Додано документацію `liveSync`
24
+ - version: 6.0.0
25
+ date: 2025-09-04
26
+ changes: Замінено поле `hotReload` на `liveSync`
27
+ - version: 5.5.10
28
+ date: 2025-06-29
29
+ changes: Ініціалізовано історію
30
+ ---
31
+
32
+ # Документація системи керування контентом Intlayer (CMS)
33
+
34
+ <iframe title="Візуальний редактор + CMS для вашого вебзастосунку: Intlayer — пояснення" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/UDDTnirwi_4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
35
+
36
+ Intlayer CMS — це застосунок, який дозволяє винести вміст вашого проєкту Intlayer у зовнішню систему (CMS).
37
+
38
+ Для цього Intlayer вводить поняття «віддалених словників» (distant dictionaries).
39
+
40
+ ![Інтерфейс Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/assets/CMS.png)
41
+
42
+ ## Зміст
43
+
44
+ <TOC/>
45
+
46
+ ---
47
+
48
+ ## Розуміння віддалених словників
49
+
50
+ Intlayer розрізняє 'local' та 'remote' словники.
51
+
52
+ - 'local' словник — це словник, який оголошений у вашому проєкті Intlayer. Наприклад файл декларації кнопки або ваша панель навігації. Виносити контент назовні в такому випадку не має сенсу, оскільки цей контент зазвичай не змінюється часто.
53
+
54
+ - 'remote' словник — це словник, яким керують через Intlayer CMS. Це може бути корисно, щоб дозволити вашій команді керувати контентом безпосередньо на вашому вебсайті, а також для використання функцій A/B тестування та автоматичної SEO-оптимізації.
55
+
56
+ ## Візуальний редактор проти CMS
57
+
58
+ Редактор [Intlayer Visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md) — це інструмент, який дозволяє керувати вашим вмістом у візуальному редакторі для локальних словників. Після внесення зміни вміст буде замінено в code-base. Це означає, що застосунок буде перебудовано, а сторінка перезавантажиться для відображення нового вмісту.
59
+
60
+ На відміну від цього, Intlayer CMS — це інструмент, який дозволяє керувати вмістом у візуальному редакторі для віддалених словників. Після внесення зміни вміст **не** вплине на ваш code-base. Вебсайт автоматично відобразить змінений вміст.
61
+
62
+ ## Інтеграція
63
+
64
+ Для детальнішої інформації про встановлення пакета див. відповідний розділ нижче:
65
+
66
+ ### Інтеграція з Next.js
67
+
68
+ Для інтеграції з Next.js зверніться до [керівництва з налаштування](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nextjs_15.md).
69
+
70
+ ### Інтеграція з Create React App
71
+
72
+ Для інтеграції з Create React App зверніться до [керівництва з налаштування](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_create_react_app.md).
73
+
74
+ ### Інтеграція з Vite + React
75
+
76
+ Для інтеграції з Vite + React зверніться до [керівництва з налаштування](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_vite+react.md).
77
+
78
+ ## Конфігурація
79
+
80
+ Запустіть наступну команду, щоб увійти в Intlayer CMS:
81
+
82
+ ```bash packageManager="npm"
83
+ npx intlayer login
84
+ ```
85
+
86
+ ```bash packageManager="yarn"
87
+ yarn intlayer login
88
+ ```
89
+
90
+ ```bash packageManager="pnpm"
91
+ pnpm intlayer login
92
+ ```
93
+
94
+ ```bash packageManager="bun"
95
+ bunx intlayer login
96
+ ```
97
+
98
+ Це відкриє ваш браузер за замовчуванням, щоб завершити процес автентифікації й отримати необхідні облікові дані (Client ID та Client Secret) для використання сервісів Intlayer.
99
+
100
+ У файлі конфігурації Intlayer ви можете налаштувати параметри CMS:
101
+
102
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
103
+ import type { IntlayerConfig } from "intlayer";
104
+
105
+ const config: IntlayerConfig = {
106
+ // ... інші налаштування конфігурації
107
+ editor: {
108
+ /**
109
+ * Обов'язково
110
+ *
111
+ * URL застосунку.
112
+ * Це URL, що використовується візуальним редактором.
113
+ */
114
+ applicationURL: process.env.INTLAYER_APPLICATION_URL,
115
+
116
+ /**
117
+ * Обов'язково
118
+ *
119
+ * Client ID та client secret потрібні для увімкнення редактора.
120
+ * Вони дозволяють ідентифікувати користувача, який редагує контент.
121
+ * Їх можна отримати, створивши нового клієнта в Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
122
+ * clientId: process.env.INTLAYER_CLIENT_ID,
123
+ * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
124
+ */
125
+ clientId: process.env.INTLAYER_CLIENT_ID,
126
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
127
+
128
+ /**
129
+ * Необов'язково
130
+ *
131
+ * Якщо ви розгортаєте Intlayer CMS самостійно, ви можете вказати URL CMS.
132
+ *
133
+ * URL Intlayer CMS.
134
+ * За замовчуванням встановлено на https://intlayer.org
135
+ */
136
+ cmsURL: process.env.INTLAYER_CMS_URL,
137
+
138
+ /**
139
+ * Необов'язково
140
+ *
141
+ * У випадку, якщо ви самостійно розгортаєте Intlayer CMS, ви можете вказати URL бекенду.
142
+ *
143
+ * URL Intlayer CMS.
144
+ * За замовчуванням встановлено на https://back.intlayer.org
145
+ */
146
+ backendURL: process.env.INTLAYER_BACKEND_URL,
147
+ },
148
+ };
149
+
150
+ export default config;
151
+ ```
152
+
153
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
154
+ /** @type {import('intlayer').IntlayerConfig} */
155
+ const config = {
156
+ // ... інші налаштування конфігурації
157
+ editor: {
158
+ /**
159
+ * Обов'язково
160
+ *
161
+ * URL застосунку.
162
+ * Це URL, на який спрямований візуальний редактор.
163
+ */
164
+ applicationURL: process.env.INTLAYER_APPLICATION_URL,
165
+
166
+ /**
167
+ * Обов'язково
168
+ *
169
+ * Client ID та client secret необхідні для увімкнення редактора.
170
+ * Вони дозволяють ідентифікувати користувача, який редагує контент.
171
+ * Їх можна отримати, створивши нового клієнта в Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
172
+ * clientId: process.env.INTLAYER_CLIENT_ID,
173
+ * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
174
+ */
175
+ clientId: process.env.INTLAYER_CLIENT_ID,
176
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
177
+
178
+ /**
179
+ * Необов'язково
180
+ *
181
+ * Якщо ви розгортаєте Intlayer CMS самостійно, ви можете вказати URL CMS.
182
+ *
183
+ * URL Intlayer CMS.
184
+ * За замовчуванням встановлено https://intlayer.org
185
+ */
186
+ cmsURL: process.env.INTLAYER_CMS_URL,
187
+
188
+ /**
189
+ * Необов'язково
190
+ *
191
+ * Якщо ви самостійно розгортаєте Intlayer CMS, ви можете вказати URL бекенду.
192
+ *
193
+ * URL Intlayer CMS.
194
+ * За замовчуванням встановлено на https://back.intlayer.org
195
+ */
196
+ backendURL: process.env.INTLAYER_BACKEND_URL,
197
+ },
198
+ };
199
+
200
+ export default config;
201
+ ```
202
+
203
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
204
+ /** @type {import('intlayer').IntlayerConfig} */
205
+ const config = {
206
+ // ... інші параметри конфігурації
207
+ editor: {
208
+ /**
209
+ * Обов'язково
210
+ *
211
+ * URL додатка.
212
+ * Це URL, на який спрямований візуальний редактор.
213
+ */
214
+ applicationURL: process.env.INTLAYER_APPLICATION_URL,
215
+
216
+ /**
217
+ * Обов'язково
218
+ *
219
+ * Client ID та client secret необхідні для увімкнення редактора.
220
+ * Вони дозволяють ідентифікувати користувача, який редагує вміст.
221
+ * Їх можна отримати, створивши нового клієнта в Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
222
+ * clientId: process.env.INTLAYER_CLIENT_ID,
223
+ * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
224
+ */
225
+ clientId: process.env.INTLAYER_CLIENT_ID,
226
+ clientSecret: process.env.INTLAYER_CLIENT_SECRET,
227
+
228
+ /**
229
+ * Необов'язково
230
+ *
231
+ * Якщо ви самостійно розгортаєте Intlayer CMS, ви можете вказати URL CMS.
232
+ *
233
+ * URL Intlayer CMS.
234
+ * За замовчуванням встановлено https://intlayer.org
235
+ */
236
+ cmsURL: process.env.INTLAYER_CMS_URL,
237
+
238
+ /**
239
+ * Необов'язково
240
+ *
241
+ * Якщо ви розгортаєте Intlayer CMS самостійно, ви можете вказати URL бекенду.
242
+ *
243
+ * URL Intlayer CMS.
244
+ * За замовчуванням встановлено https://back.intlayer.org
245
+ */
246
+ backendURL: process.env.INTLAYER_BACKEND_URL,
247
+ },
248
+ };
249
+
250
+ module.exports = config;
251
+ ```
252
+
253
+ > Якщо у вас немає client ID та client secret, ви можете отримати їх, створивши нового клієнта в [Intlayer Dashboard - Projects](https://app.intlayer.org/projects).
254
+
255
+ > Щоб побачити всі доступні параметри, зверніться до [документації з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).
256
+
257
+ ## Використання CMS
258
+
259
+ ### Надіслати вашу конфігурацію
260
+
261
+ Щоб налаштувати Intlayer CMS, ви можете використовувати команди [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/uk/intlayer_cli.md).
262
+
263
+ ```bash
264
+ npx intlayer config push
265
+ ```
266
+
267
+ > Якщо ви використовуєте змінні оточення в файлі конфігурації `intlayer.config.ts`, ви можете вказати потрібне оточення за допомогою аргументу `--env`:
268
+
269
+ ```bash
270
+ npx intlayer config push --env production
271
+ ```
272
+
273
+ Ця команда завантажує вашу конфігурацію в Intlayer CMS.
274
+
275
+ ### Відправити словник
276
+
277
+ Щоб перетворити ваші локальні словники у віддалений словник, ви можете використовувати команди [intlayer CLI](https://github.com/aymericzip/intlayer/tree/main/docs/uk/intlayer_cli.md).
278
+
279
+ ```bash
280
+ npx intlayer dictionary push -d my-first-dictionary-key
281
+ ```
282
+
283
+ > Якщо ви використовуєте змінні середовища у вашому файлі конфігурації `intlayer.config.ts`, ви можете вказати потрібне середовище за допомогою аргументу `--env`:
284
+
285
+ ```bash
286
+ npx intlayer dictionary push -d my-first-dictionary-key --env production
287
+ ```
288
+
289
+ Ця команда завантажує ваші початкові словники контенту, роблячи їх доступними для асинхронного отримання та редагування через платформу Intlayer.
290
+
291
+ ### Редагування словника
292
+
293
+ Потім ви зможете переглядати та керувати своїм словником у [Intlayer CMS](https://app.intlayer.org/content).
294
+
295
+ ## Live Sync
296
+
297
+ Live Sync дозволяє вашому застосунку відображати зміни контенту з CMS під час виконання. Немає потреби у перебудові або повторному розгортанні. Коли увімкнено, оновлення передаються на сервер Live Sync, який оновлює словники, які читає ваш застосунок.
298
+
299
+ Увімкніть Live Sync, оновивши конфігурацію Intlayer:
300
+
301
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
302
+ import type { IntlayerConfig } from "intlayer";
303
+
304
+ const config: IntlayerConfig = {
305
+ // ... other configuration settings
306
+ editor: {
307
+ /**
308
+ * Увімкнення гарячого перезавантаження конфігурацій локалей при виявленні змін.
309
+ * Наприклад, коли словник додається або оновлюється, застосунок оновлює
310
+ * вміст, що відображається на сторінці.
311
+ *
312
+ * Оскільки гаряче перезавантаження вимагає постійного з'єднання з сервером,
313
+ * воно доступне лише клієнтам плану `enterprise`.
314
+ *
315
+ * За замовчуванням: false
316
+ */
317
+ liveSync: true,
318
+ },
319
+ build: {
320
+ /**
321
+ * Керує способом імпорту словників:
322
+ *
323
+ * - "live": словники завантажуються динамічно за допомогою Live Sync API.
324
+ * Замінює useIntlayer на useDictionaryDynamic.
325
+ *
326
+ * Примітка: режим live використовує Live Sync API для отримання словників. Якщо виклик API
327
+ * не вдасться, словники імпортуються динамічно.
328
+ * Примітка: режим live використовується лише для словників з віддаленим контентом і прапорцем "live".
329
+ * Інші використовують динамічний режим для кращої продуктивності.
330
+ */
331
+ importMode: "live",
332
+ },
333
+ };
334
+
335
+ export default config;
336
+ ```
337
+
338
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
339
+ /** @type {import('intlayer').IntlayerConfig} */
340
+ const config = {
341
+ // ... інші налаштування конфігурації
342
+ editor: {
343
+ /**
344
+ * Вмикає гаряче перезавантаження конфігурацій локалей при виявленні змін.
345
+ * Наприклад, коли словник додається або оновлюється, додаток оновлює
346
+ * вміст, відображений на сторінці.
347
+ *
348
+ * Оскільки гаряче перезавантаження (hot reloading) вимагає безперервного з'єднання з сервером, воно
349
+ * доступне лише клієнтам з планом `enterprise`.
350
+ *
351
+ * За замовчуванням: false
352
+ */
353
+ liveSync: true,
354
+ },
355
+ build: {
356
+ /**
357
+ * Контролює, як імпортуються словники:
358
+ *
359
+ * - "live": Словники отримуються динамічно за допомогою Live Sync API.
360
+ * Замінює useIntlayer на useDictionaryDynamic.
361
+ *
362
+ * Примітка: У live-режимі використовується Live Sync API для отримання словників. Якщо виклик API
363
+ * не вдається, словники імпортуються динамічно.
364
+ * Примітка: Тільки словники з віддаленим вмістом і прапором "live" використовують live-режим.
365
+ * Інші використовують динамічний режим для підвищення продуктивності.
366
+ */
367
+ importMode: "live",
368
+ },
369
+ };
370
+
371
+ export default config;
372
+ ```
373
+
374
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
375
+ /** @type {import('intlayer').IntlayerConfig} */
376
+ const config = {
377
+ // ... інші налаштування конфігурації
378
+ editor: {
379
+ /**
380
+ * Увімкнення гарячого перезавантаження (hot reloading) конфігурацій локалей при виявленні змін.
381
+ * Наприклад, коли словник додається або оновлюється, додаток оновлює
382
+ * вміст, що відображається на сторінці.
383
+ *
384
+ * Оскільки гаряче перезавантаження потребує постійного з'єднання із сервером, воно
385
+ * доступне лише для клієнтів плану `enterprise`.
386
+ *
387
+ * За замовчуванням: false
388
+ */
389
+ liveSync: true,
390
+
391
+ /**
392
+ * Порт сервера Live Sync.
393
+ *
394
+ * За замовчуванням: 4000
395
+ */
396
+ liveSyncPort: 4000,
397
+
398
+ /**
399
+ * URL сервера Live Sync.
400
+ *
401
+ * За замовчуванням: http://localhost:{liveSyncPort}
402
+ */
403
+ liveSyncURL: "https://live.example.com",
404
+ },
405
+ build: {
406
+ /**
407
+ * Керує тим, як імпортуються словники:
408
+ *
409
+ * - "live": словники завантажуються динамічно за допомогою Live Sync API.
410
+ * Замінює useIntlayer на useDictionaryDynamic.
411
+ *
412
+ * Примітка: режим live використовує Live Sync API для отримання словників. Якщо виклик API
413
+ * зазнає невдачі, словники імпортуються динамічно.
414
+ * Примітка: режим live використовується лише для словників з віддаленим вмістом і прапорцем "live".
415
+ * Інші використовують динамічний режим заради продуктивності.
416
+ */
417
+ importMode: "live",
418
+ },
419
+ };
420
+
421
+ module.exports = config;
422
+ ```
423
+
424
+ Запустіть Live Sync сервер, щоб обгорнути ваш додаток:
425
+
426
+ Приклад із окремим (standalone) сервером:
427
+
428
+ ```json5 fileName="package.json"
429
+ {
430
+ "scripts": {
431
+ // ... інші скрипти
432
+ "live:start": "npx intlayer live",
433
+ },
434
+ }
435
+ ```
436
+
437
+ Ви також можете запустити сервер вашого додатку паралельно, використовуючи аргумент `--process`.
438
+
439
+ Приклад із Next.js:
440
+
441
+ ```json5 fileName="package.json"
442
+ {
443
+ "scripts": {
444
+ // ... інші скрипти
445
+ "build": "next build",
446
+ "dev": "next dev",
447
+ "start": "npx intlayer live --process 'next start'",
448
+ },
449
+ }
450
+ ```
451
+
452
+ Приклад із Vite:
453
+
454
+ ```json5 fileName="package.json"
455
+ {
456
+ "scripts": {
457
+ // ... інші скрипти
458
+ "build": "vite build",
459
+ "dev": "vite dev",
460
+ "start": "npx intlayer live --process 'vite start'",
461
+ },
462
+ }
463
+ ```
464
+
465
+ Live Sync-сервер обгортає ваш додаток і автоматично застосовує оновлений контент у міру його надходження.
466
+
467
+ Щоб отримувати сповіщення про зміни з CMS, Live Sync-сервер підтримує SSE-з'єднання з бекендом. Коли вміст у CMS змінюється, бекенд пересилає оновлення до Live Sync-сервера, який записує нові словники. Ваш додаток відобразить оновлення при наступній навігації або перезавантаженні браузера — без необхідності перебудови.
468
+
469
+ Схема потоку (CMS/Backend -> Live Sync Server -> Application Server -> Frontend):
470
+
471
+ ![Схема потоку Live Sync (CMS/Backend -> Live Sync Server -> Application Server -> Frontend)](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_flow_scema.svg)
472
+
473
+ Як це працює:
474
+
475
+ ![Схема логіки Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/assets/live_sync_logic_schema.svg)
476
+
477
+ ### Робочий процес розробки (локально)
478
+
479
+ - Під час розробки всі віддалені словники завантажуються при запуску застосунку, тож ви можете швидко тестувати оновлення.
480
+ - Щоб протестувати Live Sync локально з Next.js, обгорніть ваш dev-сервер:
481
+
482
+ ```json5 fileName="package.json"
483
+ {
484
+ "scripts": {
485
+ // ... інші скрипти
486
+ "dev": "npx intlayer live --process 'next dev'",
487
+ // "dev": "npx intlayer live --process 'vite dev'", // Для Vite
488
+ },
489
+ }
490
+ ```
491
+
492
+ Увімкніть оптимізацію, щоб Intlayer застосовував трансформації Live import під час розробки:
493
+
494
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
495
+ import type { IntlayerConfig } from "intlayer";
496
+
497
+ const config: IntlayerConfig = {
498
+ editor: {
499
+ applicationURL: "http://localhost:5173",
500
+ liveSyncURL: "http://localhost:4000",
501
+ liveSync: true,
502
+ },
503
+ build: {
504
+ optimize: true, // за замовчуванням: process.env.NODE_ENV === 'production'
505
+ importMode: "live",
506
+ },
507
+ };
508
+
509
+ export default config;
510
+ ```
511
+
512
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
513
+ /** @type {import('intlayer').IntlayerConfig} */
514
+ const config = {
515
+ editor: {
516
+ applicationURL: "http://localhost:5173",
517
+ liveSyncURL: "http://localhost:4000",
518
+ liveSync: true,
519
+ },
520
+ build: {
521
+ optimize: true, // за замовчуванням: process.env.NODE_ENV === 'production'
522
+ importMode: "live",
523
+ },
524
+ };
525
+
526
+ export default config;
527
+ ```
528
+
529
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
530
+ /** @type {import('intlayer').IntlayerConfig} */
531
+ const config = {
532
+ editor: {
533
+ applicationURL: "http://localhost:5173",
534
+ liveSyncURL: "http://localhost:4000",
535
+ liveSync: true,
536
+ },
537
+ build: {
538
+ optimize: true, // default: process.env.NODE_ENV === 'production'
539
+ importMode: "live",
540
+ },
541
+ };
542
+
543
+ module.exports = config;
544
+ ```
545
+
546
+ Ця конфігурація обгортає ваш dev-сервер Live Sync-сервером, завантажує віддалені словники при старті та передає оновлення з CMS через SSE. Оновіть сторінку, щоб побачити зміни.
547
+
548
+ Примітки та обмеження:
549
+
550
+ - Додайте origin Live Sync до політики безпеки вашого сайту (CSP). Переконайтеся, що URL Live Sync дозволений у `connect-src` (і в `frame-ancestors`, якщо це доречно).
551
+ - Live Sync не працює зі статичним виводом. Для Next.js сторінка має бути динамічною, щоб отримувати оновлення під час виконання (наприклад, використовуйте `generateStaticParams`, `generateMetadata`, `getServerSideProps` або `getStaticProps` відповідно, щоб уникнути повного обмеження лише статикою).
552
+ - У CMS кожний словник має прапорець `live`. Лише словники з `live=true` завантажуються через API live sync; інші імпортуються динамічно і залишаються незмінними під час виконання.
553
+ - Прапорець `live` оцінюється для кожного словника під час збірки. Якщо віддалений контент не мав `live=true` під час збірки, потрібно перебудувати проект, щоб увімкнути Live Sync для цього словника.
554
+ - Сервер live sync має мати можливість записувати в `.intlayer`. У контейнерах переконайтеся, що є права запису до `/.intlayer`.
555
+
556
+ ## Налагодження
557
+
558
+ Якщо у вас виникли проблеми з CMS, перевірте наступне:
559
+
560
+ - Застосунок запущено.
561
+
562
+ - Налаштування [`editor`](https://intlayer.org/doc/concept/configuration#editor-configuration) правильно встановлені у вашому конфігураційному файлі Intlayer.
563
+ - Обов'язкові поля:
564
+ - URL застосунку має відповідати тому, що ви вказали в конфігурації редактора (`applicationURL`).
565
+ - URL CMS
566
+
567
+ - Переконайтеся, що конфігурацію проєкту було pushed до Intlayer CMS.
568
+
569
+ - Візуальний редактор використовує iframe для відображення вашого вебсайту. Переконайтеся, що Content Security Policy (CSP) вашого сайту дозволяє URL CMS у `frame-ancestors` ('https://intlayer.org' за замовчуванням). Перевірте консоль редактора на наявність помилок.