@intlayer/docs 9.3.0 → 9.3.1

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 (162) hide show
  1. package/README.md +24 -24
  2. package/blog/ar/rag_powered_documentation_assistant.md +1 -1
  3. package/blog/pl/rag_powered_documentation_assistant.md +1 -1
  4. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
  5. package/dist/cjs/authors2.cjs +0 -1
  6. package/dist/cjs/common.cjs.map +1 -1
  7. package/dist/cjs/generated/blog.entry.cjs +4 -2
  8. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  9. package/dist/cjs/generated/docs.entry.cjs +4 -2
  10. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  11. package/dist/cjs/generated/frequentQuestions.entry.cjs +4 -2
  12. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  13. package/dist/cjs/generated/legal.entry.cjs +4 -2
  14. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  15. package/dist/esm/generated/blog.entry.mjs +4 -2
  16. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  17. package/dist/esm/generated/docs.entry.mjs +4 -2
  18. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  19. package/dist/esm/generated/frequentQuestions.entry.mjs +4 -2
  20. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  21. package/dist/esm/generated/legal.entry.mjs +4 -2
  22. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  23. package/docs/ar/configuration.md +10 -10
  24. package/docs/ar/interest_of_intlayer.md +24 -22
  25. package/docs/ar/intlayer_with_express.md +1 -1
  26. package/docs/ar/intlayer_with_svelte_kit.md +1 -1
  27. package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
  28. package/docs/ar/intlayer_with_tanstack.md +5 -3
  29. package/docs/ar/lsp.md +114 -175
  30. package/docs/ar/readme.md +25 -25
  31. package/docs/bn/configuration.md +10 -10
  32. package/docs/bn/interest_of_intlayer.md +24 -22
  33. package/docs/cs/configuration.md +10 -10
  34. package/docs/cs/interest_of_intlayer.md +24 -22
  35. package/docs/de/configuration.md +10 -10
  36. package/docs/de/interest_of_intlayer.md +24 -22
  37. package/docs/de/intlayer_with_svelte_kit.md +1 -1
  38. package/docs/de/intlayer_with_tanstack+solid.md +5 -3
  39. package/docs/de/intlayer_with_tanstack.md +5 -3
  40. package/docs/de/lsp.md +111 -172
  41. package/docs/de/readme.md +24 -24
  42. package/docs/en/configuration.md +10 -10
  43. package/docs/en/interest_of_intlayer.md +24 -22
  44. package/docs/en/intlayer_with_svelte_kit.md +1 -1
  45. package/docs/en/intlayer_with_tanstack+solid.md +5 -3
  46. package/docs/en/intlayer_with_tanstack.md +5 -3
  47. package/docs/en/lsp.md +109 -170
  48. package/docs/en/readme.md +24 -24
  49. package/docs/en-GB/configuration.md +10 -10
  50. package/docs/en-GB/interest_of_intlayer.md +24 -22
  51. package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
  52. package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
  53. package/docs/en-GB/intlayer_with_tanstack.md +5 -3
  54. package/docs/en-GB/lsp.md +109 -170
  55. package/docs/en-GB/readme.md +24 -24
  56. package/docs/es/configuration.md +10 -10
  57. package/docs/es/interest_of_intlayer.md +24 -22
  58. package/docs/es/intlayer_with_svelte_kit.md +1 -1
  59. package/docs/es/intlayer_with_tanstack+solid.md +5 -3
  60. package/docs/es/intlayer_with_tanstack.md +5 -3
  61. package/docs/es/lsp.md +114 -175
  62. package/docs/es/readme.md +24 -24
  63. package/docs/fr/configuration.md +10 -10
  64. package/docs/fr/interest_of_intlayer.md +24 -22
  65. package/docs/fr/intlayer_with_svelte_kit.md +1 -1
  66. package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
  67. package/docs/fr/intlayer_with_tanstack.md +5 -3
  68. package/docs/fr/lsp.md +110 -171
  69. package/docs/fr/readme.md +24 -24
  70. package/docs/hi/configuration.md +10 -10
  71. package/docs/hi/interest_of_intlayer.md +24 -22
  72. package/docs/hi/intlayer_with_express.md +1 -1
  73. package/docs/hi/intlayer_with_svelte_kit.md +1 -1
  74. package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
  75. package/docs/hi/intlayer_with_tanstack.md +5 -3
  76. package/docs/hi/lsp.md +113 -174
  77. package/docs/hi/readme.md +24 -24
  78. package/docs/id/configuration.md +10 -10
  79. package/docs/id/interest_of_intlayer.md +24 -22
  80. package/docs/id/intlayer_with_svelte_kit.md +1 -1
  81. package/docs/id/intlayer_with_tanstack+solid.md +5 -3
  82. package/docs/id/intlayer_with_tanstack.md +5 -3
  83. package/docs/id/lsp.md +113 -174
  84. package/docs/id/readme.md +24 -24
  85. package/docs/it/configuration.md +10 -10
  86. package/docs/it/interest_of_intlayer.md +24 -22
  87. package/docs/it/intlayer_with_svelte_kit.md +1 -1
  88. package/docs/it/intlayer_with_tanstack+solid.md +5 -3
  89. package/docs/it/intlayer_with_tanstack.md +5 -3
  90. package/docs/it/lsp.md +115 -176
  91. package/docs/it/readme.md +24 -24
  92. package/docs/ja/configuration.md +10 -10
  93. package/docs/ja/interest_of_intlayer.md +24 -22
  94. package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
  95. package/docs/ja/intlayer_with_tanstack.md +5 -3
  96. package/docs/ja/lsp.md +113 -174
  97. package/docs/ja/readme.md +24 -24
  98. package/docs/ko/configuration.md +10 -10
  99. package/docs/ko/interest_of_intlayer.md +24 -22
  100. package/docs/ko/intlayer_with_svelte_kit.md +1 -1
  101. package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
  102. package/docs/ko/intlayer_with_tanstack.md +5 -3
  103. package/docs/ko/lsp.md +112 -173
  104. package/docs/ko/readme.md +24 -24
  105. package/docs/nl/configuration.md +10 -10
  106. package/docs/nl/interest_of_intlayer.md +24 -22
  107. package/docs/pl/configuration.md +10 -10
  108. package/docs/pl/interest_of_intlayer.md +4 -2
  109. package/docs/pl/intlayer_with_svelte_kit.md +1 -1
  110. package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
  111. package/docs/pl/intlayer_with_tanstack.md +5 -3
  112. package/docs/pl/lsp.md +115 -176
  113. package/docs/pl/readme.md +24 -24
  114. package/docs/pt/configuration.md +10 -10
  115. package/docs/pt/interest_of_intlayer.md +24 -22
  116. package/docs/pt/intlayer_with_svelte_kit.md +1 -1
  117. package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
  118. package/docs/pt/intlayer_with_tanstack.md +5 -3
  119. package/docs/pt/lsp.md +113 -174
  120. package/docs/pt/readme.md +24 -24
  121. package/docs/ru/configuration.md +10 -10
  122. package/docs/ru/interest_of_intlayer.md +24 -22
  123. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  124. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  125. package/docs/ru/intlayer_with_svelte_kit.md +1 -1
  126. package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
  127. package/docs/ru/intlayer_with_tanstack.md +5 -3
  128. package/docs/ru/lsp.md +112 -173
  129. package/docs/ru/readme.md +24 -24
  130. package/docs/tr/configuration.md +10 -10
  131. package/docs/tr/interest_of_intlayer.md +24 -22
  132. package/docs/tr/intlayer_with_svelte_kit.md +1 -1
  133. package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
  134. package/docs/tr/intlayer_with_tanstack.md +5 -3
  135. package/docs/tr/lsp.md +113 -174
  136. package/docs/tr/readme.md +24 -24
  137. package/docs/uk/configuration.md +10 -10
  138. package/docs/uk/interest_of_intlayer.md +4 -2
  139. package/docs/uk/intlayer_with_svelte_kit.md +1 -1
  140. package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
  141. package/docs/uk/intlayer_with_tanstack.md +5 -3
  142. package/docs/uk/lsp.md +113 -174
  143. package/docs/uk/per_locale_file.md +1 -1
  144. package/docs/uk/readme.md +24 -24
  145. package/docs/ur/configuration.md +10 -10
  146. package/docs/ur/interest_of_intlayer.md +24 -22
  147. package/docs/vi/configuration.md +10 -10
  148. package/docs/vi/interest_of_intlayer.md +24 -22
  149. package/docs/vi/intlayer_with_svelte_kit.md +1 -1
  150. package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
  151. package/docs/vi/intlayer_with_tanstack.md +5 -3
  152. package/docs/vi/lsp.md +115 -176
  153. package/docs/vi/readme.md +24 -24
  154. package/docs/zh/configuration.md +10 -10
  155. package/docs/zh/interest_of_intlayer.md +24 -22
  156. package/docs/zh/intlayer_with_svelte_kit.md +1 -1
  157. package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
  158. package/docs/zh/intlayer_with_tanstack.md +5 -3
  159. package/docs/zh/lsp.md +113 -174
  160. package/docs/zh/readme.md +21 -21
  161. package/docs/zh-TW/interest_of_intlayer.md +24 -22
  162. package/package.json +6 -6
@@ -404,7 +404,7 @@ const config: IntlayerConfig = {
404
404
  ai: {
405
405
  /**
406
406
  * Використовуваний провайдер AI.
407
- * Варіанти: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
407
+ * Варіанти: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
408
408
  * За замовчуванням: 'openai'
409
409
  */
410
410
  provider: "openai",
@@ -1032,15 +1032,15 @@ Intlayer підтримує широкий спектр провайдерів A
1032
1032
  - **Together.ai**
1033
1033
  - **LM Studio**
1034
1034
 
1035
- | Поле | Опис | Тип | За замовчуванням | Приклад | Примітки |
1036
- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1037
- | `provider` | Провайдер, який використовуватиметься для функцій AI в Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | Різні провайдери вимагають різних API-ключів та мають різні ціни. |
1038
- | `model` | Модель AI, яка використовуватиметься для функцій AI. | `string` | Немає | `'gpt-4o-2024-11-20'` | Конкретні моделі залежать від провайдера. |
1039
- | `temperature` | Контролює випадковість відповідей AI. | `number` | Немає | `0.1` | Вища температура = креативніші та менш надійні відповіді. |
1040
- | `apiKey` | Ваш API-ключ для вибраного провайдера. | `string` | Немає | `process.env.OPENAI_API_KEY` | Повинно зберігатися в секреті; використовуйте змінні середовища. |
1041
- | `applicationContext` | Додатковий контекст про ваш додаток, щоб допомогти AI генерувати точніші переклади (домен, цільова аудиторія, тон, термінологія). | `string` | Немає | `'мій власний контекст додатка'` | Може використовуватися для додавання правил (наприклад: `"Ви не повинні перекладати свої URL"` ). |
1042
- | `baseURL` | Базовий URL для AI API. | `string` | Немає | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Може вказувати на локальні або власні кінцеві точки AI API. |
1043
- | `dataSerialization` | Формат серіалізації даних для функцій AI. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: за замовчуванням, надійний; використовує більше токенів.<br/>• `'toon'`: менше токенів, менш стабільно.<br/>• Передає моделі контекст як додатковий параметр (reasoning effort тощо). |
1035
+ | Поле | Опис | Тип | За замовчуванням | Приклад | Примітки |
1036
+ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1037
+ | `provider` | Провайдер, який використовуватиметься для функцій AI в Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` &#124; <br/> `'moonshotai'` | `undefined` | `'anthropic'` | Різні провайдери вимагають різних API-ключів та мають різні ціни. |
1038
+ | `model` | Модель AI, яка використовуватиметься для функцій AI. | `string` | Немає | `'gpt-4o-2024-11-20'` | Конкретні моделі залежать від провайдера. |
1039
+ | `temperature` | Контролює випадковість відповідей AI. | `number` | Немає | `0.1` | Вища температура = креативніші та менш надійні відповіді. |
1040
+ | `apiKey` | Ваш API-ключ для вибраного провайдера. | `string` | Немає | `process.env.OPENAI_API_KEY` | Повинно зберігатися в секреті; використовуйте змінні середовища. |
1041
+ | `applicationContext` | Додатковий контекст про ваш додаток, щоб допомогти AI генерувати точніші переклади (домен, цільова аудиторія, тон, термінологія). | `string` | Немає | `'мій власний контекст додатка'` | Може використовуватися для додавання правил (наприклад: `"Ви не повинні перекладати свої URL"` ). |
1042
+ | `baseURL` | Базовий URL для AI API. | `string` | Немає | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Може вказувати на локальні або власні кінцеві точки AI API. |
1043
+ | `dataSerialization` | Формат серіалізації даних для функцій AI. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: за замовчуванням, надійний; використовує більше токенів.<br/>• `'toon'`: менше токенів, менш стабільно.<br/>• Передає моделі контекст як додатковий параметр (reasoning effort тощо). |
1044
1044
 
1045
1045
  ---
1046
1046
 
@@ -211,7 +211,7 @@ export const ComponentExample = () => {
211
211
  Цей підхід дозволяє вам:
212
212
 
213
213
  1. **Підвищити швидкість розробки**
214
- - `.content.{{ts|mjs|cjs|json}}` файли можна створити за допомогою розширення VSCode
214
+ - `.content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml}` файли можна створити за допомогою розширення VSCode
215
215
  - Інструменти автодоповнення AI в вашій IDE (такі як GitHub Copilot) можуть допомогти вам оголосити ваш контент, зменшуючи копіювання/вставлення
216
216
 
217
217
  2. **Очистити ваш codebase**
@@ -254,7 +254,7 @@ export const ComponentExample = () => {
254
254
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **Переклад на основі штучного інтелекту**<br><br>Перетворіть ваш веб-сайт на 231 мову одним кліком, використовуючи розширені інструменти перекладу на основі штучного інтелекту Intlayer з вашим власним постачальником штучного інтелекту/ключем API. <br><br> - [Інтеграція CI/CD](https://intlayer.org/doc/concept/ci-cd) <br> - [CLI Intlayer](https://intlayer.org/doc/concept/cli) <br> - [Автоматичне заповнення](https://intlayer.org/doc/concept/auto-fill) |
255
255
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **Інтеграція MCP Server**<br><br>Надає MCP (Model Context Protocol) сервер для автоматизації IDE, що дозволяє безперешкодне управління контентом та робочі процеси i18n безпосередньо в вашому середовищі розробки. <br><br> - [MCP Server](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/mcp_server.md) |
256
256
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **Розширення VSCode**<br><br>Intlayer надає розширення VSCode для допомоги в управлінні контентом та перекладами, побудові ваших словників, перекладі контенту та багато іншого. <br><br> - [Розширення VSCode](https://intlayer.org/doc/vs-code-extension) |
257
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **Взаємосумісність**<br><br>Дозволяє взаємосумісність з react-i18next, next-i18next, next-intl та react-intl. <br><br> - [Intlayer та react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer та next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer та next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
257
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **Взаємосумісність**<br><br>Дозволяє взаємосумісність з react-i18next, next-i18next, next-intl та react-intl. <br><br> - [Intlayer та react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer та next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer та next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) <br> - [Адаптери сумісності Intlayer](https://intlayer.org/doc/compatibility) |
258
258
  | Тестування відсутніх перекладів (CLI/CI) | ✅ CLI: npx intlayer content test (дружній до CI аудит) |
259
259
 
260
260
  ## Порівняння Intlayer з іншими рішеннями
@@ -294,3 +294,5 @@ export const ComponentExample = () => {
294
294
  `intlayer` також може допомогти в управлінні просторами назв `react-intl`, `react-i18next`, `next-intl`, `next-i18next` та `vue-i18n`.
295
295
 
296
296
  За допомогою `intlayer` ви можете оголосити свій вміст у форматі вашої улюбленої бібліотеки i18n, і intlayer згенерує простори назв у вибраному вами місці (наприклад: `/messages/{{locale}}/{{namespace}}.json`).
297
+
298
+ Якщо ви хочете й надалі використовувати API вашої поточної бібліотеки i18n, `intlayer` також надає **адаптери сумісності (compat adapters)**: пакети, що надають точно такий самий API, як `react-i18next`, `next-intl`, `react-intl`, `vue-i18n` та інші, але з вмістом зі словників Intlayer. Це дозволяє мігрувати поступово, не переписуючи код. Див. [документацію адаптерів сумісності](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md).
@@ -409,7 +409,7 @@ export const getLocale = (event: RequestEvent): Locale => {
409
409
  };
410
410
  ```
411
411
 
412
- > `getLocaleFromStorage` перевірятиме локаль у заголовку або cookie залежно від вашої конфігурації. Див. розділ [Configuration](https://intlayer.org/doc/configuration) для детальнішої інформації.
412
+ > `getLocaleFromStorage` перевірятиме локаль у заголовку або cookie залежно від вашої конфігурації. Див. розділ [Configuration](https://intlayer.org/doc/concept/configuration) для детальнішої інформації.
413
413
 
414
414
  > Функція `localeDetector` обробляє заголовок `Accept-Language` і повертає найкраще співпадіння.
415
415
 
@@ -253,19 +253,21 @@ import {
253
253
  HeadContent,
254
254
  Scripts,
255
255
  createRootRouteWithContext,
256
+ getRouteApi,
256
257
  } from "@tanstack/solid-router";
257
258
  import { HydrationScript } from "solid-js/web";
258
259
  import { Suspense, type ParentComponent } from "solid-js";
259
260
  import { IntlayerProvider } from "solid-intlayer";
260
261
  import { defaultLocale, getHTMLTextDir } from "intlayer";
261
- import { Route as LocaleRoute } from "./{-$locale}/route";
262
+
263
+ const localeRoute = getRouteApi("/{-$locale}");
262
264
 
263
265
  export const Route = createRootRouteWithContext()({
264
266
  shellComponent: RootComponent,
265
267
  });
266
268
 
267
269
  const RootComponent: ParentComponent = (props) => {
268
- const params = LocaleRoute.useParams();
270
+ const params = localeRoute.useParams();
269
271
  const locale = params()?.locale ?? defaultLocale;
270
272
 
271
273
  return (
@@ -550,7 +552,7 @@ export default LocaleSwitcher;
550
552
 
551
553
  ```tsx fileName="src/routes/__root.tsx"
552
554
  const RootComponent: ParentComponent = (props) => {
553
- const params = LocaleRoute.useParams();
555
+ const params = localeRoute.useParams();
554
556
  const locale = params()?.locale ?? defaultLocale;
555
557
 
556
558
  return (
@@ -270,13 +270,15 @@ export default config;
270
270
  ```tsx fileName="src/routes/__root.tsx"
271
271
  import {
272
272
  createRootRouteWithContext,
273
+ getRouteApi,
273
274
  HeadContent,
274
275
  Scripts,
275
276
  } from "@tanstack/react-router";
276
277
  import { defaultLocale, getHTMLTextDir } from "intlayer";
277
278
  import { type ReactNode } from "react";
278
279
  import { IntlayerProvider } from "react-intlayer";
279
- import { Route as LocaleRoute } from "./{-$locale}/route";
280
+
281
+ const localeRoute = getRouteApi("/{-$locale}");
280
282
 
281
283
  export const Route = createRootRouteWithContext<{}>()({
282
284
  head: () => ({
@@ -298,7 +300,7 @@ export const Route = createRootRouteWithContext<{}>()({
298
300
  });
299
301
 
300
302
  function RootDocument({ children }: { children: ReactNode }) {
301
- const params = LocaleRoute.useParams();
303
+ const params = localeRoute.useParams();
302
304
  const locale = params?.locale ?? defaultLocale;
303
305
 
304
306
  return (
@@ -631,7 +633,7 @@ export const LocaleSwitcher: FC = () => {
631
633
 
632
634
  ```tsx fileName="src/routes/__root.tsx"
633
635
  function RootDocument({ children }: { children: ReactNode }) {
634
- const params = LocaleRoute.useParams();
636
+ const params = localeRoute.useParams();
635
637
  const locale = params?.locale ?? defaultLocale;
636
638
 
637
639
  return (
package/docs/uk/lsp.md CHANGED
@@ -1,12 +1,14 @@
1
1
  ---
2
2
  createdAt: 2025-06-07
3
- updatedAt: 2026-05-31
3
+ updatedAt: 2026-08-10
4
4
  title: LSP-сервер Intlayer
5
- description: Дізнайтеся, як мовний сервер Intlayer надає функцію «Перейти до визначення» та інші можливості IDE для useIntlayer, getIntlayer та пов'язаних викликів у всіх підтримуваних редакторах.
5
+ description: Дізнайтеся, як мовний сервер Intlayer додає перехід до визначення, пошук посилань, спливаючі підказки, автодоповнення ключів і діагностику до вашої IDE та вашого ШІ-агента.
6
6
  keywords:
7
7
  - LSP
8
8
  - Мовний сервер
9
- - Перейти до визначення
9
+ - Go to Definition
10
+ - Автодоповнення
11
+ - Діагностика
10
12
  - IDE
11
13
  - Intlayer
12
14
  - VS Code
@@ -16,6 +18,9 @@ slugs:
16
18
  - doc
17
19
  - lsp
18
20
  history:
21
+ - version: 9.1.3
22
+ date: 2026-08-10
23
+ changes: "Додано пошук посилань, спливаючі підказки, автодоповнення та діагностику"
19
24
  - version: 8.12.0
20
25
  date: 2026-06-01
21
26
  changes: "Release LSP"
@@ -24,48 +29,47 @@ author: aymericzip
24
29
 
25
30
  # LSP-сервер Intlayer
26
31
 
27
- **Мовний сервер Intlayer (LSP)** — це реалізація [протоколу мовного сервера (LSP)](https://microsoft.github.io/language-server-protocol/), яка розширює можливості вашої IDE за допомогою інтелектуальних функцій, адаптованих під Intlayer. Наразі він надає функцію **Перейти до визначення (Go to Definition)** для викликів ключів словника, дозволяючи переходити безпосередньо з `useIntlayer("my-key")` у вашому компоненті до файлу `.content.ts`, який його оголошує.
32
+ **Мовний сервер Intlayer** — це реалізація [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/), яка робить вашу IDE і вашого ШІ-агента обізнаними про Intlayer. Він пов’язує виклик на кшталт `useIntlayer("home")` із файлом `.content.ts`, який його оголошує, в обидва боки.
28
33
 
29
34
  ---
30
35
 
31
- ## Навіщо використовувати LSP?
36
+ ## Можливості
32
37
 
33
- При використанні Intlayer зв'язок між викликом на кшталт `useIntlayer("homepage")` та його оголошенням у `src/homepage.content.ts` є неявним. Без інструментів вам доведеться шукати файл вручну. LSP робить цей зв'язок явним:
38
+ | Можливість | Комбінація клавіш | Що робить |
39
+ | ------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |
40
+ | **Перейти до визначення** | `F12` / `Cmd+Клік` | Перейти від ключа словника або використання поля до його оголошення у файлі контенту |
41
+ | **Знайти всі посилання** | `Shift+F12` | З файлу контенту показати всі місця виклику, що використовують цей ключ або поле |
42
+ | **Спливаюча підказка** | навести курсор | Переглянути поля словника або перекладене значення поля, не залишаючи файл |
43
+ | **Автодоповнення** | `"` `'` `` ` `` `.` | Пропонувати оголошені ключі словників усередині ґетера та поля контенту після `.` або під час деструктуризації |
44
+ | **Діагностика** | автоматично | Попереджати, коли ключ не оголошено в жодному файлі контенту |
34
45
 
35
- **Розуміння ШІ-агентами**
46
+ Варто знати ще про дві особливості:
36
47
 
37
- ШІ-агенти для кодингу (Cursor, Windsurf, GitHub Copilot, Claude Code, Codex) покладаються на мовний сервер для вирішення символів та розуміння зв'язків між файлами. За запущеного Intlayer LSP агенти можуть відстежувати шлях від `useIntlayer("key")` до місця оголошення ключа, отримуючи точний контекст про доступні ключі контенту, структуру кожного словника та про те, які файли слід читати чи редагувати.
48
+ - **Об’єднані словники** ключ, розділений між кількома файлами контенту, повертає по одному результату на файл, тож ви можете перейти до кожного оголошення.
49
+ - **Підтримка монорепозиторіїв** — сервер знаходить _найближчий_ до кожного файлу `intlayer.config.*`, тож кілька проєктів в одному робочому просторі отримують власні словники.
38
50
 
39
- **Перейти до визначення**
51
+ ### Підтримувані виклики
40
52
 
41
- Помістіть курсор на будь-який рядок із ключем словника всередині підтримуваного виклику геттера та натисніть `F12` (або `Cmd/Ctrl+клік`). Редактор відкриє файл оголошення контенту і помістить курсор на рядок `key:`.
53
+ Ключ зчитується або з позиційного рядкового аргументу, або з об’єкта опцій (`{ namespace }`, `{ id }`).
42
54
 
43
- **Підтримка об'єднаних словників**
55
+ | Бібліотека | Виклики |
56
+ | --------------------------- | -------------------------------------------------------- |
57
+ | **Intlayer** | `useIntlayer`, `getIntlayer` |
58
+ | **i18next / react-i18next** | `useTranslation`, `getFixedT`, `t`, `Trans` |
59
+ | **next-intl / use-intl** | `useTranslations`, `getTranslations`, `createTranslator` |
60
+ | **react-intl** | `formatMessage`, `FormattedMessage` |
61
+ | **Lingui** | `useLingui`, `t`, `Trans`, `_` |
62
+ | **vue-i18n** | `useI18n` |
44
63
 
45
- Ключ може бути розділений між кількома файлами контенту (Intlayer об'єднує їх). Сервер повертає одне місцеположення (`Location`) на кожен вихідний файл, щоб ви могли перейти до кожного оголошення.
64
+ Це працює для кожного пакета `*-intlayer` (`next-intlayer`, `react-intlayer`, `vue-intlayer`, `svelte-intlayer`, `solid-intlayer`, `preact-intlayer`, `angular-intlayer`, `lit-intlayer`, `express-intlayer`, `hono-intlayer`, `fastify-intlayer`, `intlayer`), а також для пакетів-адаптерів сумісності, які дозволяють зберегти наявний синтаксис i18n.
46
65
 
47
- **Працює всюди**
48
-
49
- Підтримує всі пакети `*-intlayer` (`next-intlayer`, `react-intlayer`, `vue-intlayer`, `svelte-intlayer`, `solid-intlayer`, `preact-intlayer`, `angular-intlayer`, `lit-intlayer`, `express-intlayer`, `hono-intlayer`, `fastify-intlayer`, `adonis-intlayer`, `intlayer`).
50
-
51
- ### Підтримувані виклики геттерів
52
-
53
- Сервер виявляє наступні виклики функцій та витягує перший строковий літерал як ключ словника:
54
-
55
- | Функція | Приклад |
56
- | ------------- | ----------------------------- |
57
- | `useIntlayer` | `useIntlayer("hero")` |
58
- | `getIntlayer` | `getIntlayer("hero", locale)` |
59
-
60
- Дженерики TypeScript та додаткові аргументи ігноруються — важливий лише ключ.
61
-
62
- > `useDictionary` та `getDictionary` приймають уже імпортований об'єкт `Dictionary` як перший аргумент замість строкового ключа, тому вони не підтримують функцію «Перейти до визначення» та не відстежуються сервером.
66
+ > Словники читаються з результату збірки, тож виконайте `npx intlayer build` — або тримайте dev-сервер запущеним — щоб серверу було що розв’язувати.
63
67
 
64
68
  ---
65
69
 
66
70
  ## Встановлення
67
71
 
68
- LSP-сервер поширюється у складі пакета `@intlayer/lsp`:
72
+ Сервер постачається як бінарний файл `intlayer-lsp` у складі `@intlayer/lsp`:
69
73
 
70
74
  ```bash packageManager="npm"
71
75
  npm install --save-dev @intlayer/lsp
@@ -83,43 +87,43 @@ pnpm add --save-dev @intlayer/lsp
83
87
  bun add --dev @intlayer/lsp
84
88
  ```
85
89
 
86
- Пакет надає бінарний файл `intlayer-lsp`, який редактори використовують як виконуваний файл сервера.
90
+ Встановіть його глобально (`npm install -g @intlayer/lsp`), якщо вашому редактору потрібен `intlayer-lsp` у `PATH` це стосується плагіна Claude Code та будь-якої конфігурації нижче, що викликає бінарний файл напряму.
87
91
 
88
92
  ---
89
93
 
90
- ## Налаштування як плагіна Claude Code
94
+ ## Налаштування
91
95
 
92
- Intlayer LSP доступний як **плагін Claude Code**, розміщений безпосередньо в репозиторії Intlayer на GitHub. Його встановлення дає Claude Code нативну підтримку функції «Перейти до визначення» для всіх викликів `useIntlayer` / `getIntlayer`.
96
+ <Tabs defaultTab="vscode">
97
+ <Tab label="VS Code" value="vscode">
93
98
 
94
- ### 1. Встановіть бінарний файл мовного сервера
99
+ Встановіть [розширення Intlayer для VS Code](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension). Мовний сервер входить до нього починаючи з v8.12.0 і запускається автоматично — **налаштування не потрібне**.
95
100
 
96
- ```bash packageManager="npm"
97
- npm install -g @intlayer/lsp
98
- ```
101
+ Інші можливості описано в [документації розширення VS Code](https://intlayer.org/doc/vs-code-extension).
99
102
 
100
- ```bash packageManager="yarn"
101
- yarn global add @intlayer/lsp
102
- ```
103
+ </Tab>
104
+ <Tab label="Cursor / Windsurf" value="cursor">
103
105
 
104
- ```bash packageManager="pnpm"
105
- pnpm add -g @intlayer/lsp
106
- ```
106
+ [Cursor](https://www.cursor.com/) і [Windsurf](https://windsurf.com/) — форки VS Code, що використовують ту саму екосистему розширень. Встановіть [розширення Intlayer для VS Code](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) один раз, і сервер активується автоматично — **налаштування не потрібне**.
107
+
108
+ </Tab>
109
+ <Tab label="Claude Code" value="claude-code">
107
110
 
108
- Це помістить виконуваний файл `intlayer-lsp` у ваш PATH, який викликається записом `lspServers` у плагіні.
111
+ Intlayer постачає **плагін для Claude Code**, розміщений у репозиторії Intlayer. Він дає Claude Code справжнє розв’язання символів для ваших ключів словників замість відкоту до `grep`.
109
112
 
110
- ### 2. Зареєструйте маркетплейс Intlayer та встановіть плагін
113
+ Помістіть бінарний файл у `PATH`, потім зареєструйте маркетплейс і встановіть плагін:
111
114
 
112
115
  ```bash
116
+ npm install -g @intlayer/lsp
117
+
113
118
  claude plugin marketplace add intlayer@github:aymericzip/intlayer
114
119
  claude plugin install intlayer-lsp@intlayer
115
- claude plugin enable intlayer-lsp@intlayer
116
120
  ```
117
121
 
118
- Claude Code додасть `"intlayer-lsp@intlayer": true` до списку ваших `enabledPlugins` і автоматично запустить мовний сервер для підтримуваних типів файлів (`.ts`, `.tsx`, `.js`, `.jsx`, `.vue`, `.svelte`).
122
+ `install` також вмикає плагін. **Перезапустіть Claude Code** мовні сервери завантажуються під час старту, тож до перезапуску плагін не діє.
119
123
 
120
- ### 3. Увімкніть інструмент LSP (якщо він ще не активний)
124
+ Після цього Claude Code запускає сервер для файлів `.ts`, `.tsx`, `.js`, `.jsx`, `.vue`, `.astro` та `.svelte` і використовує `goToDefinition`, `findReferences` та `hover` під час навігації кодом.
121
125
 
122
- Деякі версії Claude Code вимагають встановлення прапорця функції LSP. Додайте наступне до вашого файлу `~/.claude/settings.json`, якщо перехід до визначення не працює після встановлення:
126
+ Якщо перехід до визначення досі не працює, ваша версія Claude Code може приховувати інструмент LSP за прапорцем:
123
127
 
124
128
  ```json fileName="~/.claude/settings.json"
125
129
  {
@@ -129,61 +133,10 @@ Claude Code додасть `"intlayer-lsp@intlayer": true` до списку в
129
133
  }
130
134
  ```
131
135
 
132
- Перезапустіть Claude Code — тепер він буде використовувати `goToDefinition`, `findReferences` та інші операції LSP при навігації по вашому коду Intlayer замість повернення до `grep`.
133
-
134
- ---
135
-
136
- ## Налаштування у VS Code (через розширення — рекомендується)
137
-
138
- Якщо у вас встановлено [розширення Intlayer для VS Code](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension), мовний сервер запускається автоматично. Ніякого додаткового налаштування не потрібно. LSP безпосередньо інтегровано в розширення VSCode, починаючи з версії 8.12.0.
139
-
140
- > Інструкції зі встановлення та опис інших функцій див. у [документації розширення VS Code](https://intlayer.org/doc/vs-code-extension).
141
-
142
- ---
143
-
144
- ## Ручне налаштування у VS Code
145
-
146
- Якщо ви не використовуєте розширення Intlayer, ви можете підключити мовний сервер вручну, використовуючи універсальне розширення клієнта LSP, таке як [**vscode-glspc**](https://marketplace.visualstudio.com/items?itemName=sibiraj-s.vscode-scss-formatter), або написавши власне невелике розширення. Рекомендований підхід — використовувати розширення Intlayer.
147
-
148
- Для довідки, сервер запускається через бінарний файл `intlayer-lsp` через stdio:
149
-
150
- ```json fileName=".vscode/settings.json"
151
- {
152
- "intlayer.languageServer.command": "npx",
153
- "intlayer.languageServer.args": ["@intlayer/lsp"]
154
- }
155
- ```
156
-
157
- Розширення Intlayer зчитує ці налаштування для запуску сервера. Якщо ви використовуєте лише розширення, ручні налаштування не потрібні.
158
-
159
- ---
160
-
161
- ## Налаштування в Cursor
162
-
163
- [Cursor](https://www.cursor.com/) — це форк VS Code з вбудованими функціями ШІ. Він використовує ту саму екосистему розширень, тому **розширення Intlayer для VS Code** працює без додаткового налаштування — встановіть його один раз, і Cursor підхопить його автоматично.
164
-
165
- Якщо ви віддаєте перевагу ручному налаштуванню, Cursor також зчитує файл `.vscode/settings.json` з кореня робочої області, тому наведений вище фрагмент коду для VS Code застосовується безпосередньо.
166
-
167
- ---
168
-
169
- ## Налаштування в Windsurf
170
-
171
- [Windsurf](https://windsurf.com/) (від Codeium) — ще один редактор на базі VS Code. Встановіть розширення Intlayer з VS Code Marketplace, і мовний сервер активується автоматично, точно так само, як у VS Code та Cursor.
172
-
173
- Для ручного налаштування створіть файл `.vscode/settings.json` у корені проекту:
174
-
175
- ```json fileName=".vscode/settings.json"
176
- {
177
- "intlayer.languageServer.command": "npx",
178
- "intlayer.languageServer.args": ["@intlayer/lsp"]
179
- }
180
- ```
181
-
182
- ---
183
-
184
- ## Налаштування в Zed
136
+ </Tab>
137
+ <Tab label="Zed" value="zed">
185
138
 
186
- [Zed](https://zed.dev/) має вбудовану підтримку LSP через налаштування мови. Додайте запис у користувацькі налаштування Zed (`~/.config/zed/settings.json`):
139
+ Zed має вбудовану підтримку LSP. Додайте сервер до користувацьких налаштувань:
187
140
 
188
141
  ```json fileName="~/.config/zed/settings.json"
189
142
  {
@@ -196,47 +149,21 @@ Claude Code додасть `"intlayer-lsp@intlayer": true` до списку в
196
149
  }
197
150
  },
198
151
  "languages": {
199
- "TypeScript": {
200
- "language_servers": ["intlayer-lsp", "..."]
201
- },
202
- "TSX": {
203
- "language_servers": ["intlayer-lsp", "..."]
204
- },
205
- "JavaScript": {
206
- "language_servers": ["intlayer-lsp", "..."]
207
- },
208
- "Vue.js": {
209
- "language_servers": ["intlayer-lsp", "..."]
210
- },
211
- "Svelte": {
212
- "language_servers": ["intlayer-lsp", "..."]
213
- }
152
+ "TypeScript": { "language_servers": ["intlayer-lsp", "..."] },
153
+ "TSX": { "language_servers": ["intlayer-lsp", "..."] },
154
+ "JavaScript": { "language_servers": ["intlayer-lsp", "..."] },
155
+ "Vue.js": { "language_servers": ["intlayer-lsp", "..."] },
156
+ "Svelte": { "language_servers": ["intlayer-lsp", "..."] }
214
157
  }
215
158
  }
216
159
  ```
217
160
 
218
- Плейсхолдер `"..."` вказує Zed зберігати стандартні мовні сервери разом із сервером Intlayer.
219
-
220
- ---
221
-
222
- ## Налаштування для інтерфейсів командного рядка ШІ-агентів (Claude Code, Codex тощо)
223
-
224
- **Claude Code** має першокласну підтримку плагінів LSP — дотримуйтесь інструкцій з [налаштування плагіна Claude Code](#налаштування-як-плагіна-claude-code) вище, щоб отримати повноцінну функцію «Перейти до визначення» прямо в сесіях термінала.
161
+ Заповнювач `"..."` зберігає стандартні мовні сервери Zed поряд із сервером Intlayer.
225
162
 
226
- **OpenAI Codex** та інші консольні інструменти поки не працюють як клієнти LSP — вони безпосередньо читають і записують файли, а не підтримують постійний сеанс мовного сервера. Для цих інструментів цінність працюючого LSP виявляється опосередковано: коли сервер активний у супутньому редакторі (VS Code, Cursor, Windsurf тощо), його живий індекс доступний будь-якому ШІ-агенту, який може запитати його через контекст редактора (наприклад, Cursor Composer, Windsurf Cascade, GitHub Copilot Chat).
163
+ </Tab>
164
+ <Tab label="Neovim" value="neovim">
227
165
 
228
- Якщо ви працюєте виключно в терміналі без відкритого редактора, ви можете запустити мовний сервер у фоновому режимі, щоб він був готовий до підключення будь-якого редактора:
229
-
230
- ```bash
231
- # Підтримувати сервер активним у фоновому режимі
232
- npx @intlayer/lsp &
233
- ```
234
-
235
- ---
236
-
237
- ## Ручне налаштування в Neovim
238
-
239
- Використовуючи [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig), зареєструйте користувацьку конфігурацію сервера:
166
+ За допомогою [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) зареєструйте власну конфігурацію сервера:
240
167
 
241
168
  ```lua fileName="~/.config/nvim/init.lua"
242
169
  local lspconfig = require('lspconfig')
@@ -245,7 +172,7 @@ local configs = require('lspconfig.configs')
245
172
  if not configs.intlayer_lsp then
246
173
  configs.intlayer_lsp = {
247
174
  default_config = {
248
- -- Запуск сервера за допомогою npx, щоб не потрібне було глобальне встановлення
175
+ -- Запускати сервер через npx, щоб не потребувати глобального встановлення
249
176
  cmd = { 'npx', '--yes', '@intlayer/lsp' },
250
177
  filetypes = {
251
178
  'typescript',
@@ -267,21 +194,10 @@ end
267
194
  lspconfig.intlayer_lsp.setup({})
268
195
  ```
269
196
 
270
- Після перезапуску Neovim натискання `gd` на ключі Intlayer викличе функцію переходу до визначення.
271
-
272
- ---
273
-
274
- ## Ручне налаштування в інших редакторах
275
-
276
- Будь-який редактор із підтримкою Language Server Protocol може використовувати `@intlayer/lsp`. Характеристики сервера:
197
+ Після перезапуску Neovim `gd` на ключі словника виконує перехід до визначення, а `gr` — пошук посилань.
277
198
 
278
- - **Транспорт** – Node.js IPC / stdio (стандартний)
279
- - **Виконуваний файл** – `npx @intlayer/lsp` (або локально встановлений бінарний файл `intlayer-lsp`)
280
- - **Можливості** – `definitionProvider: true`, `textDocumentSync: Incremental`
281
-
282
- Формат конфігурації для вашого редактора (наприклад, `languageserver.json` для [coc.nvim](https://github.com/neoclide/coc.nvim) або налаштування клієнта LSP в [Helix](https://helix-editor.com)) дивіться в його документації.
283
-
284
- ### Приклад: coc.nvim
199
+ </Tab>
200
+ <Tab label="coc.nvim" value="coc">
285
201
 
286
202
  ```json fileName="~/.config/nvim/coc-settings.json"
287
203
  {
@@ -307,9 +223,14 @@ lspconfig.intlayer_lsp.setup({})
307
223
  }
308
224
  ```
309
225
 
310
- ### Пример: Helix
226
+ </Tab>
227
+ <Tab label="Helix" value="helix">
311
228
 
312
229
  ```toml fileName="~/.config/helix/languages.toml"
230
+ [language-server.intlayer-lsp]
231
+ command = "npx"
232
+ args = ["@intlayer/lsp"]
233
+
313
234
  [[language]]
314
235
  name = "typescript"
315
236
  language-servers = ["intlayer-lsp", "typescript-language-server"]
@@ -317,36 +238,54 @@ language-servers = ["intlayer-lsp", "typescript-language-server"]
317
238
  [[language]]
318
239
  name = "tsx"
319
240
  language-servers = ["intlayer-lsp", "typescript-language-server"]
320
-
321
- [language-server.intlayer-lsp]
322
- command = "npx"
323
- args = ["@intlayer/lsp"]
324
241
  ```
325
242
 
243
+ </Tab>
244
+ <Tab label="Інші редактори" value="other">
245
+
246
+ Будь-який редактор із підтримкою LSP може запускати `@intlayer/lsp`. Укажіть йому:
247
+
248
+ - **Виконуваний файл** — `npx @intlayer/lsp` або бінарний файл `intlayer-lsp`
249
+ - **Транспорт** — stdio (стандартний)
250
+ - **Можливості** — `definitionProvider`, `referencesProvider`, `hoverProvider`, `completionProvider` (символи-тригери `"` `'` `` ` `` `.`), push-діагностика, `textDocumentSync: Incremental`
251
+ - **Шаблони кореня** — `intlayer.config.ts`, `intlayer.config.js`, `package.json`
252
+
253
+ Точний формат конфігурації дивіться в документації LSP вашого редактора.
254
+
255
+ </Tab>
256
+ </Tabs>
257
+
326
258
  ---
327
259
 
328
- ## Як це працює
260
+ ## Примітка про ШІ-агентів у терміналі
329
261
 
330
- При запуску сервер зчитує конфігурацію Intlayer з кореня робочої області за допомогою `getConfiguration()`. Це вказує йому шляхи `build` та `system`, необхідні для пошуку скомпільованих словників.
262
+ **Claude Code** працює як повноцінний LSP-клієнт див. вкладку вище.
331
263
 
332
- На кожен запит **Перейти до визначення**:
264
+ **OpenAI Codex** і більшість інших термінальних інструментів не є LSP-клієнтами: вони читають і пишуть файли напряму. Запуск сервера сам по собі їм не допоможе; користь з’являється, коли він активний у супутньому редакторі, чий індекс агент може запитувати (Cursor Composer, Windsurf Cascade, Copilot Chat).
333
265
 
334
- 1. Сервер зчитує весь текст відкритого документа.
335
- 2. Він сканує виклики геттерів (`useIntlayer`, `getIntlayer` тощо) за допомогою регулярного вираження.
336
- 3. Він перевіряє, чи потрапляє позиція курсора всередину одного з цих викликів.
337
- 4. Якщо потрапляє, він витягує ключ словника (група захоплення 3 регулярного вираження) і викликає `getUnmergedDictionaries()` для пошуку кожного файлу контенту, який оголошує цей ключ.
338
- 5. Він зчитує кожен відповідний файл і знаходить точний рядок із `key: "<key>"`, щоб точно позиціонувати курсор.
339
- 6. Він повертає масив об'єктів `Location` — по одному на кожен вихідний файл.
266
+ ---
340
267
 
341
- Конфігурація вирішується ліниво і кешується для кожного сеансу; вона скидається при кожному запиті `initialize` (наприклад, при відкритті нової папки робочої області).
268
+ ## Як це працює
269
+
270
+ Для кожного файлу сервер знаходить найближчий `intlayer.config.*` і завантажує конфігурацію цього проєкту, щоб знайти скомпільовані словники. Конфігурація, словники та список вихідних файлів кешуються з коротким TTL і скидаються при зміні відстежуваного файлу контенту.
271
+
272
+ На запит сервер розбирає документ (через [oxc](https://oxc.rs/)) і аналізує позицію курсора:
273
+
274
+ 1. **На рядку ключа** (`useIntlayer("home")`) → повертає кожен файл контенту, що оголошує цей ключ, із позицією на рядку `key:`.
275
+ 2. **На використанні поля** (`content.title`, деструктуризована властивість, `t('path.to.field')`, `<Trans>`, …) → зводить змінну назад до її словника й повертає відповідне поле у файлах контенту.
276
+ 3. **З файлу контенту** → виконує зворотний пошук, переглядаючи джерела проєкту в пошуках місць виклику цього ключа або поля.
342
277
 
343
278
  ---
344
279
 
345
- ## Усунення неполадок
280
+ ## Усунення несправностей
281
+
282
+ | Симптом | Ймовірна причина | Рішення |
283
+ | ------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------- |
284
+ | Нічого не відбувається | Сервер не запущено | Переконайтеся, що `@intlayer/lsp` встановлено і редактор його запускає |
285
+ | Працює в редакторі, але не в Claude Code | Плагін встановлено під час сесії | Перезапустіть Claude Code — мовні сервери завантажуються під час старту |
286
+ | Визначення для ключа не знайдено | Словники не зібрано | Виконайте `npx intlayer build` або запустіть dev-сервер |
287
+ | Усі ключі позначені як неоголошені | Конфігурацію не розв’язано | Перевірте, що `intlayer.config.ts` (або `.js`) є в корені проєкту |
288
+ | У монорепозиторії використано не той проєкт | Немає конфігурації в пакеті | Додайте `intlayer.config.*` до кожного пакета, що оголошує власний контент |
289
+ | Сервер падає при запуску | Застара версія Node.js | Потрібен Node.js ≥ 14.18 |
346
290
 
347
- | Симптом | Можлива причина | Вирішення |
348
- | ----------------------------------------- | ---------------------------- | --------------------------------------------------------------------------------- |
349
- | Перейти до визначення нічого не робить | Сервер не запущений | Переконайтеся, що `@intlayer/lsp` встановлений і редактор запускає його |
350
- | Невірний корінь робочої області | Кілька папок робочої області | Переконайтеся, що папка з `intlayer.config.ts` є першою папкою робочої області |
351
- | Визначення не знайдено для ключа | Конфігурація не вчинена | Переконайтеся, що `intlayer.config.ts` (або `.js`) існує в корені робочої області |
352
- | Сервер аварійно завершує роботу на старті | Занадто стара версія Node.js | Потрібен Node.js ≥ 14.18 |
291
+ У VS Code сервер пише логи у **Вигляд → Вивід → «Intlayer LSP»** — це допомагає з’ясувати, яку конфігурацію було розв’язано і скільки словників знайдено.