@intlayer/docs 9.3.0 → 9.3.2
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.
- package/README.md +24 -24
- package/blog/ar/rag_powered_documentation_assistant.md +1 -1
- package/blog/pl/rag_powered_documentation_assistant.md +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
- package/dist/cjs/authors2.cjs +0 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +4 -2
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +24 -2
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +4 -2
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +4 -2
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +4 -2
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +24 -2
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +4 -2
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +4 -2
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/configuration.md +10 -10
- package/docs/ar/eslint.md +336 -0
- package/docs/ar/interest_of_intlayer.md +24 -22
- package/docs/ar/intlayer_with_express.md +1 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/ar/intlayer_with_svelte_kit.md +1 -1
- package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ar/intlayer_with_tanstack.md +5 -3
- package/docs/ar/lsp.md +114 -175
- package/docs/ar/readme.md +25 -25
- package/docs/bn/configuration.md +10 -10
- package/docs/bn/eslint.md +336 -0
- package/docs/bn/interest_of_intlayer.md +24 -22
- package/docs/cs/configuration.md +10 -10
- package/docs/cs/eslint.md +336 -0
- package/docs/cs/interest_of_intlayer.md +24 -22
- package/docs/de/configuration.md +10 -10
- package/docs/de/eslint.md +336 -0
- package/docs/de/interest_of_intlayer.md +24 -22
- package/docs/de/intlayer_with_svelte_kit.md +1 -1
- package/docs/de/intlayer_with_tanstack+solid.md +5 -3
- package/docs/de/intlayer_with_tanstack.md +5 -3
- package/docs/de/lsp.md +111 -172
- package/docs/de/readme.md +24 -24
- package/docs/en/configuration.md +10 -10
- package/docs/en/eslint.md +336 -0
- package/docs/en/interest_of_intlayer.md +24 -22
- package/docs/en/intlayer_with_svelte_kit.md +1 -1
- package/docs/en/intlayer_with_tanstack+solid.md +5 -3
- package/docs/en/intlayer_with_tanstack.md +5 -3
- package/docs/en/lsp.md +109 -170
- package/docs/en/readme.md +24 -24
- package/docs/en-GB/configuration.md +10 -10
- package/docs/en-GB/eslint.md +336 -0
- package/docs/en-GB/interest_of_intlayer.md +24 -22
- package/docs/en-GB/intlayer_with_create_react_app.md +32 -35
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
- package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
- package/docs/en-GB/intlayer_with_tanstack.md +5 -3
- package/docs/en-GB/lsp.md +109 -170
- package/docs/en-GB/readme.md +24 -24
- package/docs/es/configuration.md +10 -10
- package/docs/es/eslint.md +336 -0
- package/docs/es/interest_of_intlayer.md +24 -22
- package/docs/es/intlayer_with_svelte_kit.md +1 -1
- package/docs/es/intlayer_with_tanstack+solid.md +5 -3
- package/docs/es/intlayer_with_tanstack.md +5 -3
- package/docs/es/lsp.md +114 -175
- package/docs/es/readme.md +24 -24
- package/docs/fr/configuration.md +10 -10
- package/docs/fr/eslint.md +336 -0
- package/docs/fr/interest_of_intlayer.md +24 -22
- package/docs/fr/intlayer_with_svelte_kit.md +1 -1
- package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
- package/docs/fr/intlayer_with_tanstack.md +5 -3
- package/docs/fr/lsp.md +110 -171
- package/docs/fr/readme.md +24 -24
- package/docs/hi/configuration.md +10 -10
- package/docs/hi/eslint.md +336 -0
- package/docs/hi/interest_of_intlayer.md +24 -22
- package/docs/hi/intlayer_with_express.md +1 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/hi/intlayer_with_svelte_kit.md +1 -1
- package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
- package/docs/hi/intlayer_with_tanstack.md +5 -3
- package/docs/hi/intlayer_with_vite+svelte.md +2 -2
- package/docs/hi/lsp.md +113 -174
- package/docs/hi/readme.md +24 -24
- package/docs/id/configuration.md +10 -10
- package/docs/id/eslint.md +336 -0
- package/docs/id/interest_of_intlayer.md +24 -22
- package/docs/id/intlayer_with_svelte_kit.md +1 -1
- package/docs/id/intlayer_with_tanstack+solid.md +5 -3
- package/docs/id/intlayer_with_tanstack.md +5 -3
- package/docs/id/lsp.md +113 -174
- package/docs/id/readme.md +24 -24
- package/docs/it/configuration.md +10 -10
- package/docs/it/eslint.md +336 -0
- package/docs/it/interest_of_intlayer.md +24 -22
- package/docs/it/intlayer_with_svelte_kit.md +1 -1
- package/docs/it/intlayer_with_tanstack+solid.md +5 -3
- package/docs/it/intlayer_with_tanstack.md +5 -3
- package/docs/it/lsp.md +115 -176
- package/docs/it/readme.md +24 -24
- package/docs/ja/configuration.md +10 -10
- package/docs/ja/eslint.md +336 -0
- package/docs/ja/interest_of_intlayer.md +24 -22
- package/docs/ja/intlayer_with_react_router_v7.md +1 -146
- package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ja/intlayer_with_tanstack.md +5 -3
- package/docs/ja/intlayer_with_vite+react.md +5 -1
- package/docs/ja/lsp.md +113 -174
- package/docs/ja/readme.md +24 -24
- package/docs/ko/configuration.md +10 -10
- package/docs/ko/eslint.md +336 -0
- package/docs/ko/interest_of_intlayer.md +24 -22
- package/docs/ko/intlayer_with_lynx+react.md +4 -0
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +1 -1
- package/docs/ko/intlayer_with_storybook.md +5 -5
- package/docs/ko/intlayer_with_svelte_kit.md +1 -1
- package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ko/intlayer_with_tanstack.md +5 -3
- package/docs/ko/lsp.md +112 -173
- package/docs/ko/readme.md +24 -24
- package/docs/nl/configuration.md +10 -10
- package/docs/nl/eslint.md +336 -0
- package/docs/nl/interest_of_intlayer.md +24 -22
- package/docs/pl/configuration.md +10 -10
- package/docs/pl/eslint.md +336 -0
- package/docs/pl/interest_of_intlayer.md +4 -2
- package/docs/pl/intlayer_with_astro.md +1 -114
- package/docs/pl/intlayer_with_svelte_kit.md +1 -1
- package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
- package/docs/pl/intlayer_with_tanstack.md +5 -3
- package/docs/pl/lsp.md +115 -176
- package/docs/pl/migration_from_i18next_to_intlayer.md +4 -0
- package/docs/pl/migration_from_next-i18next_to_intlayer.md +8 -4
- package/docs/pl/migration_from_next-intl_to_intlayer.md +11 -5
- package/docs/pl/migration_from_nuxtjs_i18n_to_intlayer.md +8 -4
- package/docs/pl/migration_from_react-i18next_to_intlayer.md +8 -4
- package/docs/pl/migration_from_vue-i18n_to_intlayer.md +4 -0
- package/docs/pl/readme.md +24 -24
- package/docs/pt/configuration.md +10 -10
- package/docs/pt/eslint.md +336 -0
- package/docs/pt/interest_of_intlayer.md +24 -22
- package/docs/pt/intlayer_with_astro.md +1 -114
- package/docs/pt/intlayer_with_svelte_kit.md +1 -1
- package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
- package/docs/pt/intlayer_with_tanstack.md +5 -3
- package/docs/pt/lsp.md +113 -174
- package/docs/pt/readme.md +24 -24
- package/docs/ru/configuration.md +10 -10
- package/docs/ru/eslint.md +336 -0
- package/docs/ru/interest_of_intlayer.md +24 -22
- package/docs/ru/intlayer_with_nextjs_14.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +1 -1
- package/docs/ru/intlayer_with_svelte_kit.md +1 -1
- package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ru/intlayer_with_tanstack.md +5 -3
- package/docs/ru/lsp.md +112 -173
- package/docs/ru/readme.md +24 -24
- package/docs/tr/configuration.md +10 -10
- package/docs/tr/eslint.md +336 -0
- package/docs/tr/interest_of_intlayer.md +24 -22
- package/docs/tr/intlayer_with_svelte_kit.md +1 -1
- package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
- package/docs/tr/intlayer_with_tanstack.md +5 -3
- package/docs/tr/lsp.md +113 -174
- package/docs/tr/readme.md +24 -24
- package/docs/uk/configuration.md +10 -10
- package/docs/uk/eslint.md +336 -0
- package/docs/uk/interest_of_intlayer.md +4 -2
- package/docs/uk/intlayer_with_svelte_kit.md +1 -1
- package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
- package/docs/uk/intlayer_with_tanstack.md +5 -3
- package/docs/uk/lsp.md +113 -174
- package/docs/uk/packages/angular-intlayer/exports.md +2 -2
- package/docs/uk/per_locale_file.md +1 -1
- package/docs/uk/readme.md +24 -24
- package/docs/ur/configuration.md +10 -10
- package/docs/ur/eslint.md +336 -0
- package/docs/ur/interest_of_intlayer.md +24 -22
- package/docs/vi/configuration.md +10 -10
- package/docs/vi/eslint.md +336 -0
- package/docs/vi/interest_of_intlayer.md +24 -22
- package/docs/vi/intlayer_with_svelte_kit.md +1 -1
- package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
- package/docs/vi/intlayer_with_tanstack.md +5 -3
- package/docs/vi/lsp.md +115 -176
- package/docs/vi/readme.md +24 -24
- package/docs/zh/configuration.md +10 -10
- package/docs/zh/eslint.md +336 -0
- package/docs/zh/interest_of_intlayer.md +24 -22
- package/docs/zh/intlayer_with_create_react_app.md +4 -0
- package/docs/zh/intlayer_with_lynx+react.md +4 -0
- package/docs/zh/intlayer_with_nextjs_14.md +0 -2
- package/docs/zh/intlayer_with_nextjs_15.md +0 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +0 -2
- package/docs/zh/intlayer_with_nuxt.md +1 -1
- package/docs/zh/intlayer_with_react_router_v7.md +4 -0
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +4 -0
- package/docs/zh/intlayer_with_solid_start.md +1 -1
- package/docs/zh/intlayer_with_svelte_kit.md +1 -1
- package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
- package/docs/zh/intlayer_with_tanstack.md +5 -3
- package/docs/zh/intlayer_with_vite+vue.md +0 -2
- package/docs/zh/lsp.md +113 -174
- package/docs/zh/readme.md +21 -21
- package/docs/zh-TW/eslint.md +336 -0
- package/docs/zh-TW/interest_of_intlayer.md +24 -22
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
|
@@ -271,13 +271,15 @@ export default config;
|
|
|
271
271
|
```tsx fileName="src/routes/__root.tsx"
|
|
272
272
|
import {
|
|
273
273
|
createRootRouteWithContext,
|
|
274
|
+
getRouteApi,
|
|
274
275
|
HeadContent,
|
|
275
276
|
Scripts,
|
|
276
277
|
} from "@tanstack/react-router";
|
|
277
278
|
import { defaultLocale, getHTMLTextDir } from "intlayer";
|
|
278
279
|
import { type ReactNode } from "react";
|
|
279
280
|
import { IntlayerProvider } from "react-intlayer";
|
|
280
|
-
|
|
281
|
+
|
|
282
|
+
const localeRoute = getRouteApi("/{-$locale}");
|
|
281
283
|
|
|
282
284
|
export const Route = createRootRouteWithContext<{}>()({
|
|
283
285
|
head: () => ({
|
|
@@ -299,7 +301,7 @@ export const Route = createRootRouteWithContext<{}>()({
|
|
|
299
301
|
});
|
|
300
302
|
|
|
301
303
|
function RootDocument({ children }: { children: ReactNode }) {
|
|
302
|
-
const params =
|
|
304
|
+
const params = localeRoute.useParams();
|
|
303
305
|
const locale = params?.locale ?? defaultLocale;
|
|
304
306
|
|
|
305
307
|
return (
|
|
@@ -632,7 +634,7 @@ export const LocaleSwitcher: FC = () => {
|
|
|
632
634
|
|
|
633
635
|
```tsx fileName="src/routes/__root.tsx"
|
|
634
636
|
function RootDocument({ children }: { children: ReactNode }) {
|
|
635
|
-
const params =
|
|
637
|
+
const params = localeRoute.useParams();
|
|
636
638
|
const locale = params?.locale ?? defaultLocale;
|
|
637
639
|
|
|
638
640
|
return (
|
package/docs/ru/lsp.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-06-07
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-10
|
|
4
4
|
title: LSP-сервер Intlayer
|
|
5
|
-
description: Узнайте, как языковой сервер Intlayer
|
|
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
|
|
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
|
-
##
|
|
36
|
+
## Возможности
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
| Возможность | Сочетание клавиш | Что делает |
|
|
39
|
+
| ------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
40
|
+
| **Перейти к определению** | `F12` / `Cmd+Клик` | Перейти от ключа словаря или использования поля к его объявлению в файле контента |
|
|
41
|
+
| **Найти все ссылки** | `Shift+F12` | Из файла контента показать все места вызова, использующие этот ключ или поле |
|
|
42
|
+
| **Всплывающая подсказка** | навести курсор | Посмотреть поля словаря или переведённое значение поля, не покидая файл |
|
|
43
|
+
| **Автодополнение** | `"` `'` `` ` `` `.` | Предлагать объявленные ключи словарей внутри геттера и поля контента после `.` или при деструктуризации |
|
|
44
|
+
| **Диагностика** | автоматически | Предупреждать, когда ключ не объявлен ни в одном файле контента |
|
|
34
45
|
|
|
35
|
-
|
|
46
|
+
Стоит знать ещё о двух особенностях:
|
|
36
47
|
|
|
37
|
-
|
|
48
|
+
- **Объединённые словари** — ключ, разделённый между несколькими файлами контента, возвращает по одному результату на файл, поэтому вы можете перейти к каждому объявлению.
|
|
49
|
+
- **Поддержка монорепозиториев** — сервер находит _ближайший_ к каждому файлу `intlayer.config.*`, поэтому несколько проектов в одном рабочем пространстве получают собственные словари.
|
|
38
50
|
|
|
39
|
-
|
|
51
|
+
### Поддерживаемые вызовы
|
|
40
52
|
|
|
41
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
+
Установите его глобально (`npm install -g @intlayer/lsp`), если вашему редактору нужен `intlayer-lsp` в `PATH` — это относится к плагину Claude Code и к любой конфигурации ниже, которая вызывает бинарный файл напрямую.
|
|
87
91
|
|
|
88
92
|
---
|
|
89
93
|
|
|
90
|
-
## Настройка
|
|
94
|
+
## Настройка
|
|
91
95
|
|
|
92
|
-
|
|
96
|
+
<Tabs defaultTab="vscode">
|
|
97
|
+
<Tab label="VS Code" value="vscode">
|
|
93
98
|
|
|
94
|
-
|
|
99
|
+
Установите [расширение Intlayer для VS Code](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension). Языковой сервер входит в него начиная с v8.12.0 и запускается автоматически — **настройка не требуется**.
|
|
95
100
|
|
|
96
|
-
|
|
97
|
-
npm install -g @intlayer/lsp
|
|
98
|
-
```
|
|
101
|
+
Другие возможности описаны в [документации расширения VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
+
</Tab>
|
|
104
|
+
<Tab label="Cursor / Windsurf" value="cursor">
|
|
103
105
|
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
111
|
+
Intlayer поставляет **плагин для Claude Code**, размещённый в репозитории Intlayer. Он даёт Claude Code настоящее разрешение символов для ваших ключей словарей вместо отката к `grep`.
|
|
109
112
|
|
|
110
|
-
|
|
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
|
-
|
|
122
|
+
`install` также включает плагин. **Перезапустите Claude Code** — языковые серверы загружаются при старте, поэтому до перезапуска плагин не действует.
|
|
119
123
|
|
|
120
|
-
|
|
124
|
+
После этого Claude Code запускает сервер для файлов `.ts`, `.tsx`, `.js`, `.jsx`, `.vue`, `.astro` и `.svelte` и использует `goToDefinition`, `findReferences` и `hover` при навигации по коду.
|
|
121
125
|
|
|
122
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
201
|
-
},
|
|
202
|
-
"
|
|
203
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Настройка для интерфейсов командной строки ИИ-агентов (Claude Code, Codex и др.)
|
|
223
|
-
|
|
224
|
-
**Claude Code** имеет первоклассную поддержку плагинов LSP — следуйте инструкциям по [настройке плагина Claude Code](#настройка-в-качестве-плагина-claude-code) выше, чтобы получить полноценную функцию «Перейти к определению» прямо в сессиях терминала.
|
|
161
|
+
Заполнитель `"..."` сохраняет языковые серверы Zed по умолчанию рядом с сервером Intlayer.
|
|
225
162
|
|
|
226
|
-
|
|
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
|
-
--
|
|
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
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## Ручная настройка в других редакторах
|
|
275
|
-
|
|
276
|
-
Любой редактор с поддержкой Language Server Protocol может использовать `@intlayer/lsp`. Характеристики сервера:
|
|
197
|
+
После перезапуска Neovim `gd` на ключе словаря выполняет переход к определению, а `gr` — поиск ссылок.
|
|
277
198
|
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
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
|
-
|
|
262
|
+
**Claude Code** работает как полноценный LSP-клиент — см. вкладку выше.
|
|
331
263
|
|
|
332
|
-
|
|
264
|
+
**OpenAI Codex** и большинство других терминальных инструментов не являются LSP-клиентами: они читают и пишут файлы напрямую. Запуск сервера сам по себе им не поможет; польза появляется, когда он активен в сопутствующем редакторе, чей индекс агент может запрашивать (Cursor Composer, Windsurf Cascade, Copilot Chat).
|
|
333
265
|
|
|
334
|
-
|
|
335
|
-
2. Он сканирует вызовы геттеров (`useIntlayer`, `getIntlayer` и т. д.) с помощью регулярного выражения.
|
|
336
|
-
3. Он проверяет, попадает ли позиция курсора внутрь одного из этих вызовов.
|
|
337
|
-
4. Если попадает, он извлекает ключ словаря (группа захвата 3 регулярного выражения) и вызывает `getUnmergedDictionaries()` для поиска каждого файла контента, объявляющего этот ключ.
|
|
338
|
-
5. Он считывает каждый соответствующий файл и находит точную строку с `key: "<key>"`, чтобы точно позиционировать курсор.
|
|
339
|
-
6. Он возвращает массив объектов `Location` — по одному на каждый исходный файл.
|
|
266
|
+
---
|
|
340
267
|
|
|
341
|
-
|
|
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
|
## Устранение неполадок
|
|
346
281
|
|
|
347
|
-
| Симптом
|
|
348
|
-
|
|
|
349
|
-
|
|
|
350
|
-
|
|
|
351
|
-
| Определения не найдены
|
|
352
|
-
|
|
|
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 |
|
|
290
|
+
|
|
291
|
+
В VS Code сервер пишет логи в **Вид → Вывод → «Intlayer LSP»** — это помогает убедиться, какая конфигурация была разрешена и сколько словарей найдено.
|