@intlayer/docs 8.9.4-canary.0 → 8.9.5
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/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.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/benchmark/index.md +0 -3
- package/docs/ar/benchmark/nextjs.md +15 -6
- package/docs/ar/benchmark/solid.md +155 -0
- package/docs/ar/benchmark/svelte.md +148 -0
- package/docs/ar/benchmark/tanstack.md +12 -3
- package/docs/ar/benchmark/vue.md +160 -0
- package/docs/ar/configuration.md +16 -12
- package/docs/ar/dictionary/content_file.md +51 -1
- package/docs/ar/mcp_server.md +30 -17
- package/docs/ar/plugins/sync-po.md +333 -0
- package/docs/bn/configuration.md +16 -12
- package/docs/cs/configuration.md +16 -12
- package/docs/de/benchmark/index.md +0 -3
- package/docs/de/benchmark/nextjs.md +15 -6
- package/docs/de/benchmark/solid.md +155 -0
- package/docs/de/benchmark/svelte.md +148 -0
- package/docs/de/benchmark/tanstack.md +12 -3
- package/docs/de/benchmark/vue.md +160 -0
- package/docs/de/configuration.md +16 -12
- package/docs/de/dictionary/content_file.md +52 -2
- package/docs/de/mcp_server.md +29 -16
- package/docs/de/plugins/sync-po.md +332 -0
- package/docs/en/benchmark/nextjs.md +11 -2
- package/docs/en/benchmark/solid.md +22 -4
- package/docs/en/benchmark/svelte.md +17 -5
- package/docs/en/benchmark/tanstack.md +18 -3
- package/docs/en/benchmark/vue.md +17 -11
- package/docs/en/configuration.md +16 -13
- package/docs/en/dictionary/content_file.md +51 -1
- package/docs/en/mcp_server.md +31 -18
- package/docs/en/plugins/sync-po.md +333 -0
- package/docs/en-GB/benchmark/index.md +0 -3
- package/docs/en-GB/benchmark/nextjs.md +15 -6
- package/docs/en-GB/benchmark/solid.md +155 -0
- package/docs/en-GB/benchmark/svelte.md +148 -0
- package/docs/en-GB/benchmark/tanstack.md +12 -3
- package/docs/en-GB/benchmark/vue.md +160 -0
- package/docs/en-GB/configuration.md +15 -11
- package/docs/en-GB/dictionary/content_file.md +51 -1
- package/docs/en-GB/mcp_server.md +31 -18
- package/docs/en-GB/plugins/sync-po.md +333 -0
- package/docs/es/benchmark/index.md +0 -3
- package/docs/es/benchmark/nextjs.md +15 -6
- package/docs/es/benchmark/solid.md +155 -0
- package/docs/es/benchmark/svelte.md +148 -0
- package/docs/es/benchmark/tanstack.md +12 -3
- package/docs/es/benchmark/vue.md +160 -0
- package/docs/es/configuration.md +16 -12
- package/docs/es/dictionary/content_file.md +51 -1
- package/docs/es/mcp_server.md +30 -17
- package/docs/es/plugins/sync-po.md +333 -0
- package/docs/fr/benchmark/index.md +0 -3
- package/docs/fr/benchmark/nextjs.md +15 -6
- package/docs/fr/benchmark/solid.md +155 -0
- package/docs/fr/benchmark/svelte.md +148 -0
- package/docs/fr/benchmark/tanstack.md +12 -3
- package/docs/fr/benchmark/vue.md +160 -0
- package/docs/fr/configuration.md +16 -12
- package/docs/fr/dictionary/content_file.md +51 -1
- package/docs/fr/mcp_server.md +30 -17
- package/docs/fr/plugins/sync-po.md +333 -0
- package/docs/hi/benchmark/nextjs.md +15 -6
- package/docs/hi/benchmark/solid.md +155 -0
- package/docs/hi/benchmark/svelte.md +148 -0
- package/docs/hi/benchmark/tanstack.md +12 -3
- package/docs/hi/benchmark/vue.md +160 -0
- package/docs/hi/configuration.md +16 -12
- package/docs/hi/dictionary/content_file.md +51 -1
- package/docs/hi/mcp_server.md +31 -18
- package/docs/hi/plugins/sync-po.md +333 -0
- package/docs/id/benchmark/index.md +0 -3
- package/docs/id/benchmark/nextjs.md +15 -6
- package/docs/id/benchmark/solid.md +155 -0
- package/docs/id/benchmark/svelte.md +148 -0
- package/docs/id/benchmark/tanstack.md +12 -3
- package/docs/id/benchmark/vue.md +160 -0
- package/docs/id/configuration.md +16 -12
- package/docs/id/dictionary/content_file.md +51 -1
- package/docs/id/mcp_server.md +30 -17
- package/docs/id/plugins/sync-po.md +333 -0
- package/docs/it/benchmark/index.md +1 -4
- package/docs/it/benchmark/nextjs.md +15 -6
- package/docs/it/benchmark/solid.md +155 -0
- package/docs/it/benchmark/svelte.md +148 -0
- package/docs/it/benchmark/tanstack.md +12 -3
- package/docs/it/benchmark/vue.md +160 -0
- package/docs/it/configuration.md +16 -12
- package/docs/it/dictionary/content_file.md +51 -1
- package/docs/it/mcp_server.md +30 -17
- package/docs/it/plugins/sync-po.md +333 -0
- package/docs/ja/benchmark/index.md +5 -5
- package/docs/ja/benchmark/nextjs.md +15 -6
- package/docs/ja/benchmark/solid.md +155 -0
- package/docs/ja/benchmark/svelte.md +148 -0
- package/docs/ja/benchmark/tanstack.md +12 -3
- package/docs/ja/benchmark/vue.md +160 -0
- package/docs/ja/configuration.md +16 -12
- package/docs/ja/dictionary/content_file.md +50 -2
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
- package/docs/ja/mcp_server.md +29 -16
- package/docs/ja/plugins/sync-po.md +333 -0
- package/docs/ko/benchmark/nextjs.md +15 -6
- package/docs/ko/benchmark/solid.md +155 -0
- package/docs/ko/benchmark/svelte.md +148 -0
- package/docs/ko/benchmark/tanstack.md +12 -3
- package/docs/ko/benchmark/vue.md +160 -0
- package/docs/ko/configuration.md +16 -12
- package/docs/ko/dictionary/content_file.md +51 -1
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
- package/docs/ko/mcp_server.md +31 -18
- package/docs/ko/plugins/sync-po.md +333 -0
- package/docs/nl/configuration.md +16 -12
- package/docs/pl/benchmark/index.md +0 -3
- package/docs/pl/benchmark/nextjs.md +15 -6
- package/docs/pl/benchmark/solid.md +155 -0
- package/docs/pl/benchmark/svelte.md +148 -0
- package/docs/pl/benchmark/tanstack.md +12 -3
- package/docs/pl/benchmark/vue.md +160 -0
- package/docs/pl/configuration.md +16 -12
- package/docs/pl/dictionary/content_file.md +51 -1
- package/docs/pl/mcp_server.md +30 -17
- package/docs/pl/plugins/sync-po.md +333 -0
- package/docs/pt/benchmark/index.md +0 -3
- package/docs/pt/benchmark/nextjs.md +16 -7
- package/docs/pt/benchmark/solid.md +155 -0
- package/docs/pt/benchmark/svelte.md +148 -0
- package/docs/pt/benchmark/tanstack.md +13 -4
- package/docs/pt/benchmark/vue.md +160 -0
- package/docs/pt/configuration.md +16 -12
- package/docs/pt/dictionary/content_file.md +51 -1
- package/docs/pt/mcp_server.md +30 -17
- package/docs/pt/plugins/sync-po.md +333 -0
- package/docs/ru/benchmark/nextjs.md +15 -6
- package/docs/ru/benchmark/solid.md +155 -0
- package/docs/ru/benchmark/svelte.md +148 -0
- package/docs/ru/benchmark/tanstack.md +12 -3
- package/docs/ru/benchmark/vue.md +160 -0
- package/docs/ru/configuration.md +16 -12
- package/docs/ru/dictionary/content_file.md +52 -2
- package/docs/ru/mcp_server.md +30 -17
- package/docs/ru/plugins/sync-po.md +333 -0
- package/docs/tr/benchmark/index.md +0 -3
- package/docs/tr/benchmark/nextjs.md +15 -6
- package/docs/tr/benchmark/solid.md +155 -0
- package/docs/tr/benchmark/svelte.md +148 -0
- package/docs/tr/benchmark/tanstack.md +12 -3
- package/docs/tr/benchmark/vue.md +160 -0
- package/docs/tr/configuration.md +16 -12
- package/docs/tr/dictionary/content_file.md +51 -1
- package/docs/tr/mcp_server.md +31 -18
- package/docs/tr/plugins/sync-po.md +333 -0
- package/docs/uk/benchmark/nextjs.md +15 -6
- package/docs/uk/benchmark/solid.md +155 -0
- package/docs/uk/benchmark/svelte.md +148 -0
- package/docs/uk/benchmark/tanstack.md +12 -3
- package/docs/uk/benchmark/vue.md +160 -0
- package/docs/uk/configuration.md +16 -12
- package/docs/uk/dictionary/content_file.md +51 -1
- package/docs/uk/mcp_server.md +29 -16
- package/docs/uk/plugins/sync-po.md +333 -0
- package/docs/ur/configuration.md +16 -12
- package/docs/vi/benchmark/index.md +0 -3
- package/docs/vi/benchmark/nextjs.md +15 -6
- package/docs/vi/benchmark/solid.md +155 -0
- package/docs/vi/benchmark/svelte.md +148 -0
- package/docs/vi/benchmark/tanstack.md +12 -3
- package/docs/vi/benchmark/vue.md +160 -0
- package/docs/vi/configuration.md +16 -12
- package/docs/vi/dictionary/content_file.md +51 -1
- package/docs/vi/intlayer_with_nextjs_15.md +10 -57
- package/docs/vi/mcp_server.md +30 -17
- package/docs/vi/plugins/sync-po.md +333 -0
- package/docs/zh/benchmark/nextjs.md +15 -6
- package/docs/zh/benchmark/solid.md +155 -0
- package/docs/zh/benchmark/svelte.md +148 -0
- package/docs/zh/benchmark/tanstack.md +12 -3
- package/docs/zh/benchmark/vue.md +160 -0
- package/docs/zh/configuration.md +16 -12
- package/docs/zh/dictionary/content_file.md +51 -3
- package/docs/zh/mcp_server.md +31 -18
- package/docs/zh/plugins/sync-po.md +333 -0
- package/frequent_questions/ar/intlayerNode.md +3 -3
- package/frequent_questions/de/intlayerNode.md +3 -3
- package/frequent_questions/en/intlayerNode.md +3 -3
- package/frequent_questions/en-GB/intlayerNode.md +3 -3
- package/frequent_questions/es/intlayerNode.md +3 -3
- package/frequent_questions/fr/intlayerNode.md +3 -3
- package/frequent_questions/hi/intlayerNode.md +3 -3
- package/frequent_questions/id/intlayerNode.md +3 -3
- package/frequent_questions/it/intlayerNode.md +3 -3
- package/frequent_questions/ja/intlayerNode.md +3 -3
- package/frequent_questions/ko/intlayerNode.md +3 -3
- package/frequent_questions/pl/intlayerNode.md +3 -3
- package/frequent_questions/pt/intlayerNode.md +3 -3
- package/frequent_questions/ru/intlayerNode.md +3 -3
- package/frequent_questions/tr/intlayerNode.md +3 -3
- package/frequent_questions/uk/intlayerNode.md +3 -3
- package/frequent_questions/vi/intlayerNode.md +3 -3
- package/frequent_questions/zh/intlayerNode.md +3 -3
- package/package.json +8 -8
- package/src/generated/docs.entry.ts +20 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-05-12
|
|
4
4
|
title: Файл контенту
|
|
5
5
|
description: Дізнайтеся, як налаштувати розширення для файлів декларації контенту. Дотримуйтесь цієї документації, щоб ефективно реалізувати умови у вашому проєкті.
|
|
6
6
|
keywords:
|
|
@@ -12,6 +12,9 @@ slugs:
|
|
|
12
12
|
- concept
|
|
13
13
|
- content
|
|
14
14
|
history:
|
|
15
|
+
- version: 8.9.0
|
|
16
|
+
date: 2026-05-12
|
|
17
|
+
changes: "Add `plural` content node type"
|
|
15
18
|
- version: 8.0.0
|
|
16
19
|
date: 2026-01-28
|
|
17
20
|
changes: "Додано тип вузла контенту `html`"
|
|
@@ -69,6 +72,7 @@ import { type ReactNode } from "react";
|
|
|
69
72
|
import {
|
|
70
73
|
t,
|
|
71
74
|
enu,
|
|
75
|
+
plural,
|
|
72
76
|
cond,
|
|
73
77
|
nest,
|
|
74
78
|
md,
|
|
@@ -89,6 +93,7 @@ interface Content {
|
|
|
89
93
|
};
|
|
90
94
|
multilingualContent: string;
|
|
91
95
|
quantityContent: string;
|
|
96
|
+
pluralContent: string;
|
|
92
97
|
conditionalContent: string;
|
|
93
98
|
markdownContent: never;
|
|
94
99
|
htmlContent: never;
|
|
@@ -125,6 +130,10 @@ export default {
|
|
|
125
130
|
">5": "Декілька машин",
|
|
126
131
|
">19": "Багато машин",
|
|
127
132
|
}),
|
|
133
|
+
pluralContent: plural({
|
|
134
|
+
one: "One car",
|
|
135
|
+
other: "{{count}} cars",
|
|
136
|
+
}),
|
|
128
137
|
conditionalContent: cond({
|
|
129
138
|
true: "Валідація увімкнена",
|
|
130
139
|
false: "Валідація вимкнена",
|
|
@@ -180,6 +189,13 @@ export default {
|
|
|
180
189
|
">5": "Декілька автомобілів",
|
|
181
190
|
">19": "Багато автомобілів",
|
|
182
191
|
},
|
|
192
|
+
"pluralContent": {
|
|
193
|
+
"nodeType": "plural",
|
|
194
|
+
"plural": {
|
|
195
|
+
"one": "One car",
|
|
196
|
+
"other": "{{count}} cars",
|
|
197
|
+
},
|
|
198
|
+
},
|
|
183
199
|
},
|
|
184
200
|
"conditionalContent": {
|
|
185
201
|
"nodeType": "condition",
|
|
@@ -227,6 +243,7 @@ export default {
|
|
|
227
243
|
- **Примітивні значення**: strings, numbers, booleans, null, undefined
|
|
228
244
|
- **Типізовані вузли**: спеціальні типи контенту, такі як translations, conditions, markdown тощо
|
|
229
245
|
- **Функції**: динамічний контент, який може бути виконаний під час виконання [див. Отримання функцій](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/function_fetching.md)
|
|
246
|
+
- **Plural Content**: See Plural Content [See Plural Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/plural.md)
|
|
230
247
|
- **Вкладений контент**: посилання на інші словники
|
|
231
248
|
|
|
232
249
|
#### Типи контенту
|
|
@@ -558,6 +575,8 @@ multilingualContent: t({
|
|
|
558
575
|
});
|
|
559
576
|
```
|
|
560
577
|
|
|
578
|
+
> See [Перекладний контент (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/translation.md) for more information.
|
|
579
|
+
|
|
561
580
|
### Умовний контент (`cond`)
|
|
562
581
|
|
|
563
582
|
Контент, що змінюється залежно від булевих умов:
|
|
@@ -571,6 +590,8 @@ conditionalContent: cond({
|
|
|
571
590
|
});
|
|
572
591
|
```
|
|
573
592
|
|
|
593
|
+
> See [Умовний контент (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/condition.md) for more information.
|
|
594
|
+
|
|
574
595
|
### Контент переліку (`enu`)
|
|
575
596
|
|
|
576
597
|
Контент, що змінюється залежно від значень переліку:
|
|
@@ -585,6 +606,23 @@ statusContent: enu({
|
|
|
585
606
|
});
|
|
586
607
|
```
|
|
587
608
|
|
|
609
|
+
> See [Контент переліку (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/enumeration.md) for more information.
|
|
610
|
+
|
|
611
|
+
### Plural Content (`plural`)
|
|
612
|
+
|
|
613
|
+
Content that varies based on plural rules:
|
|
614
|
+
|
|
615
|
+
```typescript
|
|
616
|
+
import { plural } from "intlayer";
|
|
617
|
+
|
|
618
|
+
pluralContent: plural({
|
|
619
|
+
one: "One car",
|
|
620
|
+
other: "{{count}} cars",
|
|
621
|
+
});
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
> See [Plural Content Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/plural.md) for more information.
|
|
625
|
+
|
|
588
626
|
### Вставний вміст (`insert`)
|
|
589
627
|
|
|
590
628
|
Вміст, який можна вставляти в інший вміст:
|
|
@@ -595,6 +633,8 @@ import { insert } from "intlayer";
|
|
|
595
633
|
insertionContent: insert("Цей текст можна вставити будь-де");
|
|
596
634
|
```
|
|
597
635
|
|
|
636
|
+
> See [Вставний вміст (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/insertion.md) for more information.
|
|
637
|
+
|
|
598
638
|
### Вкладений вміст (`nest`)
|
|
599
639
|
|
|
600
640
|
Посилання на інші словники:
|
|
@@ -605,6 +645,8 @@ import { nest } from "intlayer";
|
|
|
605
645
|
nestedContent: nest("about-page");
|
|
606
646
|
```
|
|
607
647
|
|
|
648
|
+
> See [Вкладений вміст (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/nesting.md) for more information.
|
|
649
|
+
|
|
608
650
|
### Markdown-вміст (`md`)
|
|
609
651
|
|
|
610
652
|
Розширений текст у форматі Markdown:
|
|
@@ -617,6 +659,8 @@ markdownContent: md(
|
|
|
617
659
|
);
|
|
618
660
|
```
|
|
619
661
|
|
|
662
|
+
> See [Markdown-вміст (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/markdown.md) for more information.
|
|
663
|
+
|
|
620
664
|
### HTML-вміст (`html`)
|
|
621
665
|
|
|
622
666
|
Багатий HTML-вміст, який може використовувати стандартні теги або власні компоненти:
|
|
@@ -634,6 +678,8 @@ localizedHtmlContent: t({
|
|
|
634
678
|
});
|
|
635
679
|
```
|
|
636
680
|
|
|
681
|
+
> See [HTML-вміст (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/html.md) for more information.
|
|
682
|
+
|
|
637
683
|
### Гендерний вміст (`gender`)
|
|
638
684
|
|
|
639
685
|
Вміст, що змінюється залежно від гендеру:
|
|
@@ -648,6 +694,8 @@ genderContent: gender({
|
|
|
648
694
|
});
|
|
649
695
|
```
|
|
650
696
|
|
|
697
|
+
> See [Гендерний вміст (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/gender.md) for more information.
|
|
698
|
+
|
|
651
699
|
### Вміст файлу (`file`)
|
|
652
700
|
|
|
653
701
|
Посилання на зовнішні файли:
|
|
@@ -658,6 +706,8 @@ import { file } from "intlayer";
|
|
|
658
706
|
fileContent: file("./path/to/content.txt");
|
|
659
707
|
```
|
|
660
708
|
|
|
709
|
+
> See [Вміст файлу (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/file.md) for more information.
|
|
710
|
+
|
|
661
711
|
## Створення файлів контенту
|
|
662
712
|
|
|
663
713
|
### Базова структура файлу контенту
|
package/docs/uk/mcp_server.md
CHANGED
|
@@ -51,12 +51,12 @@ history:
|
|
|
51
51
|
|
|
52
52
|
> Перегляньте повний список команд та опцій у [документації Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md).
|
|
53
53
|
|
|
54
|
-
## Локальний сервер (stdio) проти Віддаленого сервера (
|
|
54
|
+
## Локальний сервер (stdio) проти Віддаленого сервера (Streamable HTTP)
|
|
55
55
|
|
|
56
56
|
MCP server можна використовувати двома способами:
|
|
57
57
|
|
|
58
58
|
- Локальний сервер (stdio)
|
|
59
|
-
- Віддалений сервер (
|
|
59
|
+
- Віддалений сервер (Streamable HTTP)
|
|
60
60
|
|
|
61
61
|
### Локальний сервер (stdio) (рекомендовано)
|
|
62
62
|
|
|
@@ -64,7 +64,7 @@ Intlayer надає пакет NPM, який можна встановити л
|
|
|
64
64
|
|
|
65
65
|
Цей сервер є рекомендованим способом використання MCP‑сервера, оскільки він інтегрує всі можливості MCP‑сервера, включно з CLI‑інструментами.
|
|
66
66
|
|
|
67
|
-
### Віддалений сервер (
|
|
67
|
+
### Віддалений сервер (Streamable HTTP)
|
|
68
68
|
|
|
69
69
|
MCP‑сервер також можна використовувати віддалено, використовуючи транспортний метод SSE. Цей сервер хоститься Intlayer і доступний за адресою https://mcp.intlayer.org. До сервера можна підключитися публічно, без автентифікації, і його використання безкоштовне.
|
|
70
70
|
|
|
@@ -97,7 +97,7 @@ bun x intlayer init mcp
|
|
|
97
97
|
Ця команда:
|
|
98
98
|
|
|
99
99
|
1. Запитає, яку платформу ви використовуєте (Cursor, VS Code, Claude Desktop тощо).
|
|
100
|
-
2. Запитає, який метод транспортування ви хочете використовувати (локальний сервер (stdio) або віддалений сервер (
|
|
100
|
+
2. Запитає, який метод транспортування ви хочете використовувати (локальний сервер (stdio) або віддалений сервер (Streamable HTTP)).
|
|
101
101
|
3. Автоматично оновить ваш файл конфігурації (наприклад, `.cursor/mcp.json`, `.vscode/mcp.json` або глобальну конфігурацію Claude Desktop).
|
|
102
102
|
|
|
103
103
|
---
|
|
@@ -107,7 +107,7 @@ bun x intlayer init mcp
|
|
|
107
107
|
1. Відкрийте палітру команд (Ctrl+Shift+P або Cmd+Shift+P).
|
|
108
108
|
2. Введіть `Intlayer: Setup AI Agent Skills`
|
|
109
109
|
3. Виберіть платформу, яку ви використовуєте (наприклад, `VS Code`, `Cursor`, `Windsurf`, `OpenCode`, `Claude Code`, `GitHub Copilot Workspace` тощо).
|
|
110
|
-
4. Виберіть MCP для встановлення (stdio,
|
|
110
|
+
4. Виберіть MCP для встановлення (stdio, Streamable HTTP)
|
|
111
111
|
5. Натисніть Enter.
|
|
112
112
|
|
|
113
113
|
---
|
|
@@ -131,16 +131,16 @@ bun x intlayer init mcp
|
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
### Віддалений сервер (
|
|
134
|
+
### Віддалений сервер (Streamable HTTP)
|
|
135
135
|
|
|
136
|
-
Для підключення до віддаленого Intlayer MCP сервера за допомогою Server-Sent Events (
|
|
136
|
+
Для підключення до віддаленого Intlayer MCP сервера за допомогою Server-Sent Events (Streamable HTTP), ви можете налаштувати ваш MCP клієнт на підключення до хостингу.
|
|
137
137
|
|
|
138
138
|
```json fileName=".cursor/mcp.json"
|
|
139
139
|
{
|
|
140
140
|
"mcpServers": {
|
|
141
|
-
"intlayer": {
|
|
142
|
-
"
|
|
143
|
-
"
|
|
141
|
+
"intlayer-sse": {
|
|
142
|
+
"command": "npx",
|
|
143
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -172,16 +172,16 @@ bun x intlayer init mcp
|
|
|
172
172
|
}
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
### Віддалений сервер (
|
|
175
|
+
### Віддалений сервер (Streamable HTTP)
|
|
176
176
|
|
|
177
|
-
Щоб підключитися до віддаленого Intlayer MCP сервера через Server-Sent Events (
|
|
177
|
+
Щоб підключитися до віддаленого Intlayer MCP сервера через Server-Sent Events (Streamable HTTP), ви можете налаштувати ваш MCP-клієнт на підключення до хостингованого сервісу.
|
|
178
178
|
|
|
179
179
|
```json fileName=".vscode/mcp.json"
|
|
180
180
|
{
|
|
181
181
|
"servers": {
|
|
182
|
-
"intlayer": {
|
|
183
|
-
"
|
|
184
|
-
"
|
|
182
|
+
"intlayer-sse": {
|
|
183
|
+
"command": "npx",
|
|
184
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
@@ -191,7 +191,7 @@ bun x intlayer init mcp
|
|
|
191
191
|
|
|
192
192
|
## Налаштування в ChatGPT
|
|
193
193
|
|
|
194
|
-
### Віддалений сервер (
|
|
194
|
+
### Віддалений сервер (Streamable HTTP)
|
|
195
195
|
|
|
196
196
|
Дотримуйтесь [офіційної документації](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server), щоб налаштувати MCP сервер у ChatGPT.
|
|
197
197
|
|
|
@@ -232,6 +232,19 @@ bun x intlayer init mcp
|
|
|
232
232
|
}
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
+
### Віддалений сервер (Streamable HTTP)
|
|
236
|
+
|
|
237
|
+
```json fileName="claude_desktop_config.json"
|
|
238
|
+
{
|
|
239
|
+
"mcpServers": {
|
|
240
|
+
"intlayer-sse": {
|
|
241
|
+
"command": "npx",
|
|
242
|
+
"args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
235
248
|
---
|
|
236
249
|
|
|
237
250
|
## Використання MCP-сервера через CLI
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-05-10
|
|
3
|
+
updatedAt: 2026-05-10
|
|
4
|
+
title: Плагін Sync PO
|
|
5
|
+
description: Синхронізуйте словники Intlayer з файлами Gettext PO. Зберігайте існуючу i18n, використовуючи Intlayer для керування, перекладу та тестування ваших повідомлень.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Sync PO
|
|
9
|
+
- Gettext
|
|
10
|
+
- i18n
|
|
11
|
+
- переклади
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- plugin
|
|
15
|
+
- sync-po
|
|
16
|
+
youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
|
|
17
|
+
history:
|
|
18
|
+
- version: 8.9.4
|
|
19
|
+
date: 2026-05-10
|
|
20
|
+
changes: "Початкова документація плагіна Sync PO"
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Sync PO (i18n мости) - Синхронізація PO з підтримкою ICU / i18next
|
|
24
|
+
|
|
25
|
+
Використовуйте Intlayer як доповнення до вашого існуючого стека i18n. Цей плагін синхронізує ваші повідомлення Gettext PO зі словниками Intlayer, щоб ви могли:
|
|
26
|
+
|
|
27
|
+
- Зберігати існуючий робочий процес перекладу на основі PO.
|
|
28
|
+
- Керувати та перекладати свої повідомлення за допомогою Intlayer (CLI, CI, провайдери, CMS) без рефакторингу вашого додатка.
|
|
29
|
+
- Випускати навчальні посібники та SEO-контент для кожної екосистеми, пропонуючи Intlayer як рівень керування PO.
|
|
30
|
+
|
|
31
|
+
Примітки та поточна область застосування:
|
|
32
|
+
|
|
33
|
+
- Екстерналізація в CMS працює для перекладів та класичного тексту.
|
|
34
|
+
- Поки немає підтримки вставок, множини/ICU або розширених функцій середовища виконання інших бібліотек всередині самих записів PO.
|
|
35
|
+
- Візуальний редактор поки не підтримується для сторонніх вихідних даних i18n.
|
|
36
|
+
|
|
37
|
+
### Коли використовувати цей плагін
|
|
38
|
+
|
|
39
|
+
- Ви вже використовуєте файли Gettext PO для своїх перекладів.
|
|
40
|
+
- Ви хочете використовувати заповнення за допомогою ШІ, тестування в CI та операції з контентом без зміни середовища виконання рендерингу.
|
|
41
|
+
|
|
42
|
+
## Встановлення
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm add -D @intlayer/sync-po-plugin
|
|
46
|
+
# або
|
|
47
|
+
npm i -D @intlayer/sync-po-plugin
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Плагіни
|
|
51
|
+
|
|
52
|
+
Цей пакет надає два плагіни:
|
|
53
|
+
|
|
54
|
+
- `loadPO`: Завантаження PO-файлів у словники Intlayer.
|
|
55
|
+
- Цей плагін використовується для завантаження PO-файлів з джерела, і вони будуть додані до словників Intlayer. Він може сканувати всю кодову базу та шукати певні PO-файли.
|
|
56
|
+
Цей плагін можна використовувати:
|
|
57
|
+
- якщо ви використовуєте бібліотеку i18n, яка нав'язує певне місце розташування для завантаження ваших PO-файлів, але ви хочете розмістити оголошення контенту там, де вам зручно у вашій кодовій базі.
|
|
58
|
+
- Його також можна використовувати, якщо ви хочете отримувати свої повідомлення з віддаленого джерела (наприклад: CMS, API тощо) і зберігати свої повідомлення в PO-файлах.
|
|
59
|
+
|
|
60
|
+
> Під капотом цей плагін сканує всю кодову базу, шукає певні PO-файли та завантажує їх у словники Intlayer.
|
|
61
|
+
> Зверніть увагу, що цей плагін не записує вивід та переклади назад у PO-файли.
|
|
62
|
+
|
|
63
|
+
- `syncPO`: Синхронізація PO-файлів зі словниками Intlayer.
|
|
64
|
+
- Цей плагін використовується для синхронізації PO-файлів зі словниками Intlayer. Він може сканувати задане місце розташування та завантажувати PO, що відповідають шаблону для певних PO-файлів. Цей плагін корисний, якщо ви хочете отримати переваги Intlayer, використовуючи іншу бібліотеку i18n.
|
|
65
|
+
|
|
66
|
+
## Використання обох плагінів
|
|
67
|
+
|
|
68
|
+
```ts fileName="intlayer.config.ts"
|
|
69
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
70
|
+
import { loadPO, syncPO } from "@intlayer/sync-po-plugin";
|
|
71
|
+
|
|
72
|
+
const config: IntlayerConfig = {
|
|
73
|
+
internationalization: {
|
|
74
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
75
|
+
defaultLocale: Locales.ENGLISH,
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
// Синхронізація поточних PO-файлів зі словниками Intlayer
|
|
79
|
+
plugins: [
|
|
80
|
+
/**
|
|
81
|
+
* Завантажить усі PO-файли в src, що відповідають шаблону {key}.i18n.po
|
|
82
|
+
*/
|
|
83
|
+
loadPO({
|
|
84
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
85
|
+
locale: Locales.ENGLISH,
|
|
86
|
+
priority: 1, // Гарантує, що ці PO-файли мають пріоритет над файлами в `./locales/en/${key}.po`
|
|
87
|
+
}),
|
|
88
|
+
/**
|
|
89
|
+
* Завантажить та запише вивід та переклади назад у PO-файли в каталозі locales
|
|
90
|
+
*/
|
|
91
|
+
syncPO({
|
|
92
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
93
|
+
priority: 0,
|
|
94
|
+
}),
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export default config;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Плагін `syncPO`
|
|
102
|
+
|
|
103
|
+
### Швидкий старт
|
|
104
|
+
|
|
105
|
+
Додайте плагін у свій `intlayer.config.ts` та вкажіть на існуючу структуру PO.
|
|
106
|
+
|
|
107
|
+
```ts fileName="intlayer.config.ts"
|
|
108
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
109
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
110
|
+
|
|
111
|
+
const config: IntlayerConfig = {
|
|
112
|
+
internationalization: {
|
|
113
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
114
|
+
defaultLocale: Locales.ENGLISH,
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
// Синхронізація поточних PO-файлів зі словниками Intlayer
|
|
118
|
+
plugins: [
|
|
119
|
+
syncPO({
|
|
120
|
+
// Структура за локалями та просторами імен
|
|
121
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
122
|
+
}),
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default config;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Альтернатива: один файл на локаль:
|
|
130
|
+
|
|
131
|
+
```ts fileName="intlayer.config.ts"
|
|
132
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
133
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
134
|
+
|
|
135
|
+
const config: IntlayerConfig = {
|
|
136
|
+
internationalization: {
|
|
137
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
138
|
+
defaultLocale: Locales.ENGLISH,
|
|
139
|
+
},
|
|
140
|
+
plugins: [
|
|
141
|
+
syncPO({
|
|
142
|
+
source: ({ locale }) => `./locales/${locale}.po`,
|
|
143
|
+
}),
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export default config;
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Як це працює
|
|
151
|
+
|
|
152
|
+
- Читання: плагін виявляє PO-файли за допомогою вашого збірника `source` та завантажує їх як словники Intlayer.
|
|
153
|
+
- Запис: після збірки та заповнення він записує локалізовані PO назад за тими ж шляхами (з правильними заголовками Gettext).
|
|
154
|
+
- Автозаповнення: плагін оголошує шлях `autoFill` для кожного словника. Запуск `intlayer fill` за замовчуванням оновлює лише відсутні переклади у ваших PO-файлах.
|
|
155
|
+
|
|
156
|
+
API:
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
syncPO({
|
|
160
|
+
source: ({ key, locale }) => string, // обов'язково
|
|
161
|
+
location?: string, // необов'язкова мітка, за замовчуванням: "sync-po::path/to/source"
|
|
162
|
+
priority?: number, // необов'язковий пріоритет для вирішення конфліктів, за замовчуванням: 0
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Кілька джерел PO та пріоритет
|
|
167
|
+
|
|
168
|
+
Ви можете додати кілька плагінів `syncPO` для синхронізації різних джерел PO. Це корисно, коли у вас є кілька джерел перекладу або різні структури PO у вашому проекті.
|
|
169
|
+
|
|
170
|
+
#### Система пріоритетів
|
|
171
|
+
|
|
172
|
+
Коли кілька плагінів націлені на один і той же ключ словника, параметр `priority` визначає, який плагін має перевагу:
|
|
173
|
+
|
|
174
|
+
- Вищі числа пріоритету перемагають нижчі
|
|
175
|
+
- Пріоритет файлів `.content` за замовчуванням дорівнює `0`
|
|
176
|
+
- Пріоритет плагінів за замовчуванням дорівнює `0`
|
|
177
|
+
- Плагіни з однаковим пріоритетом обробляються в тому порядку, в якому вони з'являються в конфігурації
|
|
178
|
+
|
|
179
|
+
```ts fileName="intlayer.config.ts"
|
|
180
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
181
|
+
import { syncPO } from "@intlayer/sync-po-plugin";
|
|
182
|
+
|
|
183
|
+
const config: IntlayerConfig = {
|
|
184
|
+
internationalization: {
|
|
185
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
186
|
+
defaultLocale: Locales.ENGLISH,
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
plugins: [
|
|
190
|
+
// Основне джерело PO (найвищий пріоритет)
|
|
191
|
+
syncPO({
|
|
192
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
193
|
+
location: "main-translations",
|
|
194
|
+
priority: 10,
|
|
195
|
+
}),
|
|
196
|
+
|
|
197
|
+
// Резервне джерело PO (нижчий пріоритет)
|
|
198
|
+
syncPO({
|
|
199
|
+
source: ({ locale }) => `./fallback-locales/${locale}.po`,
|
|
200
|
+
location: "fallback-translations",
|
|
201
|
+
priority: 5,
|
|
202
|
+
}),
|
|
203
|
+
|
|
204
|
+
// Застаріле джерело PO (найнижчий пріоритет)
|
|
205
|
+
syncPO({
|
|
206
|
+
source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,
|
|
207
|
+
location: "legacy-translations",
|
|
208
|
+
priority: 1,
|
|
209
|
+
}),
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export default config;
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Плагін Load PO
|
|
217
|
+
|
|
218
|
+
### Швидкий старт
|
|
219
|
+
|
|
220
|
+
Додайте плагін у свій `intlayer.config.ts`, щоб поглинати існуючі PO-файли як словники Intlayer. Цей плагін працює тільки на читання (без запису на диск):
|
|
221
|
+
|
|
222
|
+
```ts fileName="intlayer.config.ts"
|
|
223
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
224
|
+
import { loadPO } from "@intlayer/sync-po-plugin";
|
|
225
|
+
|
|
226
|
+
const config: IntlayerConfig = {
|
|
227
|
+
internationalization: {
|
|
228
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
229
|
+
defaultLocale: Locales.ENGLISH,
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
plugins: [
|
|
233
|
+
// Поглинання повідомлень PO, розташованих у будь-якому місці вашого дерева вихідних кодів
|
|
234
|
+
loadPO({
|
|
235
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
236
|
+
// Завантаження однієї локалі на екземпляр плагіна (за замовчуванням використовується defaultLocale з конфігурації)
|
|
237
|
+
locale: Locales.ENGLISH,
|
|
238
|
+
priority: 0,
|
|
239
|
+
}),
|
|
240
|
+
],
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export default config;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Альтернатива: структура за локалями, все ще тільки для читання (завантажується тільки вибрана локаль):
|
|
247
|
+
|
|
248
|
+
```ts fileName="intlayer.config.ts"
|
|
249
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
250
|
+
import { loadPO } from "@intlayer/sync-po-plugin";
|
|
251
|
+
|
|
252
|
+
const config: IntlayerConfig = {
|
|
253
|
+
internationalization: {
|
|
254
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
255
|
+
defaultLocale: Locales.ENGLISH,
|
|
256
|
+
},
|
|
257
|
+
plugins: [
|
|
258
|
+
loadPO({
|
|
259
|
+
// Тільки файли для Locales.UKRAINIAN будуть завантажені за цим шаблоном
|
|
260
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
261
|
+
locale: Locales.UKRAINIAN,
|
|
262
|
+
}),
|
|
263
|
+
],
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export default config;
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Як це працює
|
|
270
|
+
|
|
271
|
+
- Виявлення: створює glob з вашого збірника `source` та збирає відповідні PO-файли.
|
|
272
|
+
- Поглинання: завантажує кожен PO-файл як словник Intlayer з вказаною локаллю `locale`.
|
|
273
|
+
- Тільки читання: не записує та не форматує вихідні файли; використовуйте `syncPO`, якщо вам потрібна двостороння синхронізація.
|
|
274
|
+
- Готовність до автозаповнення: визначає шлях `fill`, щоб `intlayer content fill` міг заповнити відсутні ключі.
|
|
275
|
+
|
|
276
|
+
### API
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
loadPO({
|
|
280
|
+
// Збірка шляхів до ваших PO. `locale` необов'язковий, якщо у вашій структурі немає сегмента локалі
|
|
281
|
+
source: ({ key, locale }) => string,
|
|
282
|
+
|
|
283
|
+
// Цільова локаль для словників, що завантажуються цим екземпляром плагіна
|
|
284
|
+
// За замовчуванням використовується configuration.internationalization.defaultLocale
|
|
285
|
+
locale?: Locale,
|
|
286
|
+
|
|
287
|
+
// Необов'язкова мітка для ідентифікації джерела
|
|
288
|
+
location?: string, // за замовчуванням: "plugin"
|
|
289
|
+
|
|
290
|
+
// Пріоритет, що використовується для вирішення конфліктів з іншими джерелами
|
|
291
|
+
priority?: number, // за замовчуванням: 0
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Поведінка та угоди
|
|
296
|
+
|
|
297
|
+
- Якщо ваша маска `source` включає заповнювач локалі, поглинаються лише файли для вибраної локалі `locale`.
|
|
298
|
+
- Якщо у вашій масці немає сегмента `{key}`, ключем словника буде "index".
|
|
299
|
+
- Ключі отримуються зі шляхів до файлів шляхом заміни заповнювача `{key}` у вашому збірнику `source`.
|
|
300
|
+
- Плагін використовує лише виявлені файли та не створює відсутні локалі або ключі.
|
|
301
|
+
- Шлях `fill` виводиться з вашого `source` і використовується для оновлення відсутніх значень через CLI, коли ви погоджуєтесь.
|
|
302
|
+
|
|
303
|
+
## Вирішення конфліктів
|
|
304
|
+
|
|
305
|
+
Коли один і той же ключ перекладу існує в кількох джерелах PO:
|
|
306
|
+
|
|
307
|
+
1. Плагін з найвищим пріоритетом визначає кінцеве значення.
|
|
308
|
+
2. Джерела з нижчим пріоритетом використовуються як резервні для відсутніх ключів.
|
|
309
|
+
3. Це дозволяє вам зберігати застарілі переклади, поступово переходячи на нові структури.
|
|
310
|
+
|
|
311
|
+
## CLI
|
|
312
|
+
|
|
313
|
+
Синхронізовані PO-файли будуть розглядатися так само, як і інші файли `.content`. Це означає, що для синхронізованих PO-файлів будуть доступні всі команди intlayer. Включаючи:
|
|
314
|
+
|
|
315
|
+
- `intlayer content test` для перевірки наявності відсутніх перекладів
|
|
316
|
+
- `intlayer content list` для виведення списку синхронізованих PO-файлов
|
|
317
|
+
- `intlayer content fill` для заповнення відсутніх перекладів
|
|
318
|
+
- `intlayer content push` для відправки синхронізованих PO-файлов
|
|
319
|
+
- `intlayer content pull` для отримання синхронізованих PO-файлов
|
|
320
|
+
|
|
321
|
+
Див. [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) для отримання детальнішої інформації.
|
|
322
|
+
|
|
323
|
+
## Обмеження (поточні)
|
|
324
|
+
|
|
325
|
+
- Відсутність підтримки вставок або множини/ICU при націлюванні на сторонні бібліотеки.
|
|
326
|
+
- Візуальний редактор поки недоступний для середовищ виконання, відмінних від Intlayer.
|
|
327
|
+
- Тільки синхронізація PO; формати каталогів, відмінні від PO, не підтримуються.
|
|
328
|
+
|
|
329
|
+
## Чому це важливо
|
|
330
|
+
|
|
331
|
+
- Ми можемо рекомендувати встановлені рішення i18n і позиціонувати Intlayer як доповнення.
|
|
332
|
+
- Ми використовуємо їх SEO/ключові слова з навчальними посібниками, які закінчуються пропозицією використовувати Intlayer для керування PO.
|
|
333
|
+
- Розширює цільову аудиторію з «нових проектів» до «будь-якої команди, що вже використовує i18n».
|