@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,624 @@
1
+ ---
2
+ createdAt: 2025-09-22
3
+ updatedAt: 2025-09-23
4
+ title: Що нового в Intlayer v7?
5
+ description: Дізнайтесь, що нового в Intlayer v7. Значні покращення продуктивності, developer experience та нові функції для покращення вашого internationalization workflow.
6
+ keywords:
7
+ - Intlayer
8
+ - Локалізація
9
+ - Розробка
10
+ - Продуктивність
11
+ - Досвід розробника
12
+ - Функції
13
+ - React
14
+ - Next.js
15
+ - JavaScript
16
+ - TypeScript
17
+ slugs:
18
+ - doc
19
+ - releases
20
+ - v7
21
+ ---
22
+
23
+ # Що нового в Intlayer v7?
24
+
25
+ Ласкаво просимо до Intlayer v7! Це велике оновлення вводить суттєві покращення продуктивності, type safety і developer experience. Нижче наведено основні зміни, нотатки щодо міграції та практичні приклади.
26
+
27
+ ## Основні моменти
28
+
29
+ - Підтримка Next.js 16
30
+ - Стратегія кешування для прискорення збірок
31
+ - Покращене генерування типів TypeScript з типами, специфічними для локалі
32
+ - Оптимізація бандла: локалі як рядки замість enum
33
+ - Нові режими маршрутизації: `prefix-no-default`, `prefix-all`, `no-prefix`, `search-params`
34
+ - GDPR-сумісність при використанні localStorage
35
+ - Гнучка конфігурація збереження: cookies, localStorage, sessionStorage або кілька одночасно
36
+ - Розмір пакету Visual Editor зменшено на 30%
37
+ - Розширені параметри конфігурації middleware
38
+ - Оновлена поведінка команди fill для кращого управління контентом
39
+ - Нова секція конфігурації dictionary для кращої організації
40
+ - Підвищена стабільність завдяки повним оновленням файлів декларацій контенту
41
+ - Інтелектуальне керування повторними спробами для підвищення точності перекладу
42
+ - Паралелізація для швидшої обробки перекладів
43
+ - Розумне дроблення (smart chunking) для обробки великих файлів у межах лімітів контексту AI
44
+ - Автоматичне форматування коду з настроюваною командою formatCommand
45
+
46
+ ---
47
+
48
+ ## Продуктивність: Кешування для швидших збірок
49
+
50
+ Замість перебудови декларацій контенту за допомогою esbuild при кожній збірці, у v7 реалізовано стратегію кешування, яка пришвидшує процес збірки.
51
+
52
+ ```bash
53
+ npx intlayer build
54
+ ```
55
+
56
+ Нова система кешування:
57
+
58
+ - Зберігає скомпільовані декларації контенту, щоб уникнути повторної обробки
59
+ - Виявляє зміни та перебудовує лише змінені файли
60
+ - Значно скорочує час збірки для великих проєктів
61
+
62
+ ---
63
+
64
+ ## TypeScript: Генерація типів для кожної локалі
65
+
66
+ Типи TypeScript тепер генеруються для кожної локалі, що забезпечує надійнішу типізацію та усуває union-типи між усіма локалями.
67
+
68
+ **Поведінка v6:**
69
+
70
+ ```tsx
71
+ const content = getIntlayer("my-title-content", "en");
72
+ // typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" }
73
+ ```
74
+
75
+ **Поведінка v7:**
76
+
77
+ ```tsx
78
+ const content = getIntlayer("my-title-content", "en");
79
+ // typeof content = { title: "My title" }
80
+ ```
81
+
82
+ Переваги:
83
+
84
+ - Більш точне автозаповнення в IDE
85
+ - Краща безпека типів без перехресного забруднення типів між локалями
86
+ - Покращена продуктивність за рахунок зменшення складності типів
87
+
88
+ ---
89
+
90
+ ## Оптимізація бандла: Locales як рядки
91
+
92
+ Тип `Locales` більше не є enum, тому він тепер повністю піддається tree-shaking і не роздуватиме ваш бандл тисячами невикористаних записів локалі.
93
+
94
+ **v6:**
95
+
96
+ ```typescript
97
+ import { Locales } from "intlayer";
98
+ // Enum, що включає всі локалі -> не піддається tree-shaking
99
+
100
+ const locale: Locales = Locales.ENGLISH;
101
+ ```
102
+
103
+ **v7:**
104
+
105
+ ```typescript
106
+ import { Locales, Locale } from "intlayer";
107
+ // Тип рядка -> повністю tree-shakeable
108
+
109
+ const locale: Locale = Locales.ENGLISH;
110
+ ```
111
+
112
+ > Оскільки `Locales` більше не є enum, вам доведеться змінити тип з `Locales` на `Locale`, щоб отримувати локаль як тип.
113
+
114
+ Див. [деталі реалізації](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts) для додаткової інформації.
115
+
116
+ ---
117
+
118
+ ## Нові режими маршрутизації для більшої гнучкості
119
+
120
+ v7 вводить уніфіковану конфігурацію `routing.mode`, яка замінює попередні опції `prefixDefault` та `noPrefix`, надаючи більш детальний контроль над структурою URL.
121
+
122
+ ### Доступні режими маршрутизації
123
+
124
+ - **`prefix-no-default`** (за замовчуванням): локаль за замовчуванням без префікса, інші локалі — з префіксом
125
+ - `/dashboard` (en) або `/fr/dashboard` (fr)
126
+ - **`prefix-all`**: У всіх локалей є префікс
127
+ - `/en/dashboard` (en) або `/fr/dashboard` (fr)
128
+ - **`no-prefix`**: Жодних префіксів локалі в URL (локаль обробляється через storage/headers)
129
+ - `/dashboard` для всіх локалей
130
+ - **`search-params`**: Локаль передається як параметр запиту
131
+ - `/dashboard?locale=en` або `/dashboard?locale=fr`
132
+
133
+ ### Базова конфігурація
134
+
135
+ ```typescript
136
+ // intlayer.config.ts
137
+ export default {
138
+ internationalization: {
139
+ locales: ["en", "fr", "es"],
140
+ defaultLocale: "en",
141
+ },
142
+ routing: {
143
+ mode: "prefix-no-default", // за замовчуванням
144
+ },
145
+ };
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Відповідність GDPR: localStorage / cookies
151
+
152
+ v7 надає пріоритет конфіденційності користувача, використовуючи `localStorage` як механізм зберігання за замовчуванням замість cookies. Ця зміна допомагає відповідати вимогам GDPR, оскільки дозволяє уникнути необхідності отримання згоди на використання cookie для налаштувань локалі.
153
+
154
+ ### Опції конфігурації сховища
155
+
156
+ Нове поле `routing.storage` доступне на додаток до попередніх опцій `middleware.cookieName` та `middleware.serverSetCookie`, що дає змогу гнучко налаштовувати сховище:
157
+
158
+ ```typescript
159
+ // Вимкнути зберігання
160
+ storage: false
161
+
162
+ // Прості типи сховища
163
+ storage: 'cookie'
164
+ storage: 'localStorage'
165
+ storage: 'sessionStorage'
166
+
167
+ // Cookie з власними атрибутами
168
+ storage: {
169
+ type: 'cookie',
170
+ name: 'custom-locale',
171
+ domain: '.example.com',
172
+ secure: true,
173
+ sameSite: 'strict'
174
+ }
175
+
176
+ // localStorage з власним ключем
177
+ storage: {
178
+ type: 'localStorage',
179
+ name: 'custom-locale'
180
+ }
181
+
182
+ // Кілька типів сховища для резервування
183
+ storage: ['cookie', 'localStorage']
184
+ ```
185
+
186
+ ### Приклад конфігурації, що відповідає GDPR
187
+
188
+ Для production-застосунків, яким потрібно знайти баланс між функціональністю та відповідністю GDPR:
189
+
190
+ ```typescript fileName="intlayer.config.ts"
191
+ export default {
192
+ internationalization: {
193
+ locales: ["en", "fr", "es"],
194
+ defaultLocale: "en",
195
+ },
196
+ routing: {
197
+ mode: "prefix-no-default",
198
+ storage: [
199
+ {
200
+ type: "localStorage", // Первинне сховище (не потребує згоди)
201
+ name: "user-locale",
202
+ },
203
+ {
204
+ type: "cookie", // Опційне cookie-сховище (потребує згоди)
205
+ name: "user-locale",
206
+ secure: true,
207
+ sameSite: "strict",
208
+ httpOnly: false,
209
+ },
210
+ ],
211
+ },
212
+ };
213
+ ```
214
+
215
+ ### Увімкнення / вимкнення збереження в cookie
216
+
217
+ Приклад використання React / Next.js:
218
+
219
+ Можна визначити глобально:
220
+
221
+ ```typescript
222
+ <IntlayerProvider isCookieEnabled={false}>
223
+ <App />
224
+ </IntlayerProvider>
225
+ ```
226
+
227
+ Можна перевизначити локально для кожного хука:
228
+
229
+ ```ts
230
+ const { setLocale } = useLocale({ isCookieEnabled: false });
231
+
232
+ setLocale("en");
233
+ ```
234
+
235
+ **Примітка:** За замовчуванням файли cookie ввімкнені.
236
+ **Примітка:** Перевірте [вимоги до cookie відповідно до GDPR](https://gdpr.eu/cookies/) для вашого конкретного випадку використання.
237
+
238
+ ---
239
+
240
+ ## Візуальний редактор: пакет на 30% менший
241
+
242
+ Пакет Візуального редактора оптимізовано — він став на 30% меншим порівняно з попередньою версією завдяки:
243
+
244
+ - Покращенням продуктивності редактора коду
245
+ - Видаленню непотрібних залежностей від базових пакетів Intlayer
246
+ - Кращому tree-shaking та бандлінгу модулів
247
+
248
+ Це призводить до швидшого завантаження та покращеної продуктивності під час виконання вашого додатка.
249
+
250
+ ---
251
+
252
+ ## Автоматичне форматування коду: конфігурація formatCommand
253
+
254
+ У v7 введено опцію `formatCommand` у конфігурації редактора, яка дозволяє автоматично форматувати файли вмісту під час їхнього запису Intlayer. Це забезпечує послідовний стиль коду та форматування у ваших файлах декларацій вмісту.
255
+
256
+ Якщо не вказано, Intlayer спробує автоматично визначити команду форматування, пробуючи знайти одну з наступних команд: prettier, biome, eslint.
257
+
258
+ ### Конфігурація
259
+
260
+ Опція `formatCommand` приймає рядковий шаблон, у якому `{{file}}` буде замінено на фактичний шлях до файлу:
261
+
262
+ ```typescript fileName="intlayer.config.ts"
263
+ export default {
264
+ content: {
265
+ formatCommand: 'bun x biome format "{{file}}" --write --log-level none',
266
+ },
267
+ };
268
+ ```
269
+
270
+ ### Підтримувані форматувачі
271
+
272
+ Ви можете використовувати будь-який форматувач коду, який приймає шляхи до файлів як аргументи:
273
+
274
+ **За допомогою Biome:**
275
+
276
+ ```typescript
277
+ formatCommand: 'bun x biome format "{{file}}" --write --log-level none';
278
+ ```
279
+
280
+ **За допомогою Prettier:**
281
+
282
+ ```typescript
283
+ formatCommand: 'npx prettier --write "{{file}}" --log-level silent';
284
+ ```
285
+
286
+ **За допомогою ESLint:**
287
+
288
+ ```typescript
289
+ formatCommand: 'npx eslint --fix "{{file}}" --quiet';
290
+ ```
291
+
292
+ **За допомогою вбудованого форматувача Bun:**
293
+
294
+ ```typescript
295
+ formatCommand: 'bun format "{{file}}"';
296
+ ```
297
+
298
+ ### Переваги
299
+
300
+ - **Послідовне форматування**: Всі файли контенту автоматично форматуються відповідно до правил стилю вашого проєкту
301
+ - **Developer experience**: немає потреби вручну форматувати файли після того, як Intlayer їх записує
302
+ - **Team consistency**: забезпечує, що всі члени команди мають однакове форматування файлів контенту
303
+ - **CI/CD integration**: файли контенту зберігають узгоджене форматування в автоматизованих воркфлоу
304
+
305
+ ### Як це працює
306
+
307
+ Коли Intlayer записує або оновлює файл декларації контенту (`.content.ts`, `.content.js` тощо), він автоматично запускає вказану команду форматування для цього файлу. Плейсхолдер `{{file}}` замінюється на фактичний шлях до файлу, а команда виконується в кореневому каталозі проєкту.
308
+
309
+ ---
310
+
311
+ ## Конфігурація словника: краща організація та структура
312
+
313
+ v7 додає новий спеціальний розділ конфігурації `dictionary`, який забезпечує кращу організацію налаштувань, пов'язаних зі словниками, та покращене керування контентом.
314
+
315
+ ### Нова структура конфігурації `dictionary`
316
+
317
+ Властивість `fill` була переміщена з розділу `content` до нового розділу `dictionary`, що забезпечує чіткіше розмежування відповідальностей:
318
+
319
+ **Конфігурація v6:**
320
+
321
+ ```typescript fileName="intlayer.config.ts"
322
+ export default {
323
+ content: {
324
+ autoFill: "./{{fileName}}.content.json",
325
+ contentDir: ["src"],
326
+ },
327
+ };
328
+ ```
329
+
330
+ **Конфігурація v7:**
331
+
332
+ ```typescript fileName="intlayer.config.ts"
333
+ export default {
334
+ content: {
335
+ contentDir: ["src"],
336
+ },
337
+ dictionary: {
338
+ fill: "./{{fileName}}.content.json",
339
+ },
340
+ };
341
+ ```
342
+
343
+ ### Переваги нової структури
344
+
345
+ - **Чіткіша організація**: налаштування, специфічні для `dictionary`, тепер згруповані разом
346
+ - **Кращий розподіл відповідальностей**: виявлення `content` та операції `dictionary` чітко розділені
347
+ - **Покращена підтримуваність**: легше розуміти та змінювати конфігурації, пов'язані з `dictionary`
348
+ - **Майбутнє розширення**: секція `dictionary` може вміщувати додаткові налаштування, специфічні для словників
349
+ - **Комплексне керування dictionary**: включає властивості, такі як `title`, `live`, `priority`, `tags`, `version` та `description` для створення та керування новими словниками
350
+
351
+ ### Використання конфігурації
352
+
353
+ Конфігурація `dictionary` виконує дві основні функції:
354
+
355
+ 1. **Значення за замовчуванням**: визначає значення за замовчуванням при створенні файлів декларації `content`
356
+ 2. **Поведінка запасних значень (Fallback Behavior)**: Надає запасні значення (fallback), коли конкретні поля не визначені, що дозволяє задавати поведінку операцій словника глобально
357
+
358
+ Розділ словника включає вичерпні властивості для керування словниками:
359
+
360
+ - **`fill`**: Поведінка автозаповнення при генерації контенту
361
+ - **`title`**: Заголовок за замовчуванням для нових словників
362
+ - **`live`**: Налаштування live-синхронізації для оновлень у реальному часі
363
+ - **`priority`**: Налаштування пріоритетів для визначення словника
364
+ - **`tags`**: Теги за замовчуванням для організації контенту
365
+ - **`version`**: Керування версіями для оновлень словника
366
+ - **`description`**: Опис за замовчуванням для нового контенту
367
+
368
+ Для отримання додаткової інформації про файли декларації контенту та про те, як застосовуються конфігураційні значення, див. [Документацію файлу контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md).
369
+
370
+ ---
371
+
372
+ ## Команда fill: оновлена поведінка для кращого управління контентом
373
+
374
+ v7 вводить покращену поведінку для команди `fill`, забезпечуючи більш передбачуване та гнучке управління контентом:
375
+
376
+ ### Нова поведінка fill
377
+
378
+ - **`fill: true`** - Перезаписує поточний файл заповненим контентом для всіх локалей
379
+ - **`fill: "path/to/file"`** - Заповнює вказаний файл без зміни поточного файлу
380
+ - **`fill: false`** - Повністю відключає автоматичне заповнення
381
+
382
+ ### Розширена підтримка складних структур контенту
383
+
384
+ Команда fill тепер підтримує складні структури декларацій контенту, включно з:
385
+
386
+ - **Складені об'єкти**: Оголошення контенту, які посилаються на інші об'єкти
387
+ - **Деструктуризований контент**: Контент, що використовує патерни деструктуризації
388
+ - **Вкладені посилання**: Об'єкти, які посилаються один на одного у складних ієрархіях
389
+ - **Динамічні структури контенту**: Контент з умовними або обчислюваними властивостями
390
+
391
+ ### Переваги
392
+
393
+ - **Чіткіший намір**: Поведінка тепер більш явна щодо того, що змінюється
394
+ - **Краще розділення**: Файли контенту можна зберігати окремо від заповнених перекладів
395
+ - **Покращений робочий процес**: Розробники отримують більший контроль над тим, де зберігаються переклади
396
+ - **Підтримка складних структур**: Обробка складних архітектур контенту з кількома взаємопов'язаними об'єктами
397
+
398
+ ### Приклад використання
399
+
400
+ ```typescript fileName="*.content.ts"
401
+ // Перезаписати поточний файл для всіх локалей
402
+ const content = {
403
+ key: "example",
404
+ fill: true, // Перезаписує цей файл
405
+ content: {
406
+ title: "Привіт, світ",
407
+ },
408
+ };
409
+
410
+ // Заповнити окремий файл без модифікації поточного файлу
411
+ const content = {
412
+ key: "example",
413
+ fill: "./translations.json", // Створює/оновлює translations.json
414
+ content: {
415
+ title: "Привіт, світ",
416
+ },
417
+ };
418
+
419
+ // Вимкнути автозаповнення
420
+ const content = {
421
+ key: "example",
422
+ fill: false, // Автозаповнення вимкнено
423
+ content: {
424
+ title: "Привіт, світ",
425
+ },
426
+ };
427
+
428
+ // Складна структура контенту з композиційними об'єктами
429
+ const sharedContent = {
430
+ buttons: {
431
+ save: "Зберегти",
432
+ cancel: "Скасувати",
433
+ },
434
+ };
435
+
436
+ const content = {
437
+ key: "complex-example",
438
+ fill: true,
439
+ content: {
440
+ // Посилання на інші об'єкти
441
+ sharedContent,
442
+
443
+ // Деструктурований контент
444
+ ...sharedContent,
445
+
446
+ // Вкладені посилання
447
+ sections: [
448
+ {
449
+ ...sharedContent.buttons,
450
+ header: "Розділ 1",
451
+ },
452
+ ],
453
+ },
454
+ };
455
+ ```
456
+
457
+ ---
458
+
459
+ ## Покращена стабільність і керування перекладами
460
+
461
+ v7 представляє кілька покращень, що роблять переклад контенту більш надійним і ефективним:
462
+
463
+ ### Повне оновлення файлів декларації вмісту
464
+
465
+ Система тепер оновлює файли `.content.{ts,js,cjs,mjs}` цілком, замість часткових оновлень, забезпечуючи:
466
+
467
+ - **Цілісність даних**: повні перезаписи файлів запобігають частковим оновленням, які можуть пошкодити вміст
468
+ - **Послідовність**: усі локалі оновлюються атомарно, зберігаючи синхронізацію
469
+ - **Надійність**: зменшує ризик неповних або пошкоджених файлів вмісту
470
+
471
+ ### Інтелектуальне керування повторними спробами
472
+
473
+ Нові механізми повторних спроб запобігають відправленню контенту у невірних форматах і не дають зламатися всьому процесу заповнення, якщо один запит зазнає невдачі.
474
+
475
+ ### Паралелізація для швидшої обробки
476
+
477
+ Операції перекладу тепер ставляться в чергу і виконуються паралельно. Це значно пришвидшує процес.
478
+
479
+ ### Інтелектуальне розбиття на частини для великих файлів
480
+
481
+ Розвинені стратегії розбиття справляються з великими файлами контенту, не перевищуючи контекстні вікна AI:
482
+
483
+ ### Приклад робочого процесу
484
+
485
+ ```typescript fileName="*.content.ts"
486
+ // Великий файл контенту автоматично розбивається на частини
487
+ const content = {
488
+ key: "large-documentation",
489
+ fill: true,
490
+ content: {
491
+ // Великий контент автоматично розбивається для обробки AI
492
+ introduction: "..." // 5000+ символів
493
+ sections: [
494
+ // Кілька великих секцій
495
+ ]
496
+ }
497
+ };
498
+ ```
499
+
500
+ Система автоматично:
501
+
502
+ 1. Аналізує розмір і структуру контенту
503
+ 2. Розбиває контент на частини відповідним чином
504
+ 3. Обробляє частини паралельно
505
+ 4. Перевіряє й повторює у разі потреби
506
+ 5. Відновлює повний файл
507
+
508
+ ---
509
+
510
+ ## Нотатки щодо міграції з v6
511
+
512
+ ### Вилучені конфігурації
513
+
514
+ - **`middleware.cookieName`**: Замінено на `routing.storage`
515
+ - **`middleware.serverSetCookie`**: Замінено на `routing.storage`
516
+ - **`middleware.prefixDefault`**: Замінено на `routing.mode`
517
+ - **`middleware.noPrefix`**: Замінено на `routing.mode`
518
+
519
+ ### Нові конфігурації
520
+
521
+ - **`editor.formatCommand`**: Нова опція для автоматичного форматування коду файлів контенту
522
+
523
+ ### Відповідність налаштувань при міграції
524
+
525
+ #### Відповідність конфігурацій
526
+
527
+ | Конфігурація v6 | Конфігурація v7 |
528
+ | -------------------------- | ------------------------------------------------------ |
529
+ | `content.autoFill: xxx` | `dictionary.fill: xxx` |
530
+ | `prefixDefault: false` | `mode: 'prefix-no-default'` |
531
+ | `prefixDefault: true` | `mode: 'prefix-all'` |
532
+ | `noPrefix: true` | `mode: 'no-prefix'` |
533
+ | `cookieName: 'my-locale'` | `storage: { type: 'cookie', name: 'my-locale' }` |
534
+ | `serverSetCookie: 'never'` | `storage: false` або видалити cookie зі масиву storage |
535
+
536
+ #### Приклад міграції
537
+
538
+ **До (v6):**
539
+
540
+ ```typescript fileName="intlayer.config.ts"
541
+ export default {
542
+ content: {
543
+ autoFill: "./{{fileName}}.content.json",
544
+ contentDir: ["src"],
545
+ },
546
+ middleware: {
547
+ headerName: "x-intlayer-locale",
548
+ cookieName: "intlayer-locale",
549
+ prefixDefault: false,
550
+ basePath: "",
551
+ serverSetCookie: "always",
552
+ noPrefix: false,
553
+ },
554
+ };
555
+ ```
556
+
557
+ **Після (v7):**
558
+
559
+ ```typescript fileName="intlayer.config.ts"
560
+ export default {
561
+ content: {
562
+ contentDir: ["src"],
563
+ },
564
+ dictionary: {
565
+ fill: "./{{fileName}}.content.json",
566
+ },
567
+ routing: {
568
+ mode: "prefix-no-default",
569
+ storage: "localStorage", // або 'cookie', якщо вам потрібне збереження в cookie
570
+ headerName: "x-intlayer-locale",
571
+ basePath: "",
572
+ },
573
+ editor: {
574
+ formatCommand: 'bun x biome format "{{file}}" --write --log-level none', // Необов'язково: автоматичне форматування
575
+ },
576
+ };
577
+ ```
578
+
579
+ #### Відповідність вмісту словника
580
+
581
+ | Вміст словника (v6) | Вміст словника (v7) |
582
+ | ------------------- | ------------------- |
583
+ | `autoFill: xxx` | `fill: xxx` |
584
+
585
+ #### Приклад міграції
586
+
587
+ **До (v6):**
588
+
589
+ ```typescript fileName="*.content.ts"
590
+ const content = {
591
+ key: "example",
592
+ autoFill: true, // Перезаписує цей файл
593
+ content: {
594
+ title: "Hello World",
595
+ },
596
+ };
597
+ ```
598
+
599
+ **Після (v7):**
600
+
601
+ ```typescript fileName="*.content.ts"
602
+ const content = {
603
+ key: "example",
604
+ fill: true, // Перезаписує цей файл
605
+ content: {
606
+ title: "Hello World",
607
+ },
608
+ };
609
+ ```
610
+
611
+ ---
612
+
613
+ ## Нотатки міграції з v5 до v6
614
+
615
+ Перегляньте [нотатки міграції з v5 до v6](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/releases/v6.md) для отримання додаткової інформації.
616
+
617
+ ---
618
+
619
+ ## Корисні посилання
620
+
621
+ - [Довідник конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
622
+ - [Документація middleware](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/next-intlayer/index.md)
623
+ - [Типи TypeScript](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts)
624
+ - [Рекомендації GDPR щодо cookie](https://gdpr.eu/cookies/)