@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: İçerik Dosyası
|
|
5
5
|
description: İçerik bildirim dosyalarınız için uzantıları nasıl özelleştireceğinizi öğrenin. Projenizde koşulları verimli bir şekilde uygulamak için bu dokümantasyonu takip edin.
|
|
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` içerik düğümü tipi eklendi"
|
|
@@ -63,6 +66,7 @@ import { type ReactNode } from "react";
|
|
|
63
66
|
import {
|
|
64
67
|
t,
|
|
65
68
|
enu,
|
|
69
|
+
plural,
|
|
66
70
|
cond,
|
|
67
71
|
nest,
|
|
68
72
|
md,
|
|
@@ -82,6 +86,7 @@ interface Content {
|
|
|
82
86
|
};
|
|
83
87
|
multilingualContent: string;
|
|
84
88
|
quantityContent: string;
|
|
89
|
+
pluralContent: string;
|
|
85
90
|
conditionalContent: string;
|
|
86
91
|
markdownContent: never;
|
|
87
92
|
htmlContent: never;
|
|
@@ -117,6 +122,10 @@ export default {
|
|
|
117
122
|
">5": "Birkaç araba",
|
|
118
123
|
">19": "Birçok araba",
|
|
119
124
|
}),
|
|
125
|
+
pluralContent: plural({
|
|
126
|
+
one: "One car",
|
|
127
|
+
other: "{{count}} cars",
|
|
128
|
+
}),
|
|
120
129
|
conditionalContent: cond({
|
|
121
130
|
true: "Doğrulama etkin",
|
|
122
131
|
false: "Doğrulama devre dışı",
|
|
@@ -171,6 +180,13 @@ export default {
|
|
|
171
180
|
">5": "Birkaç araba",
|
|
172
181
|
">19": "Birçok araba",
|
|
173
182
|
},
|
|
183
|
+
"pluralContent": {
|
|
184
|
+
"nodeType": "plural",
|
|
185
|
+
"plural": {
|
|
186
|
+
"one": "One car",
|
|
187
|
+
"other": "{{count}} cars",
|
|
188
|
+
},
|
|
189
|
+
},
|
|
174
190
|
},
|
|
175
191
|
"conditionalContent": {
|
|
176
192
|
"nodeType": "condition",
|
|
@@ -218,6 +234,7 @@ export default {
|
|
|
218
234
|
- **İlkel değerler**: stringler, sayılar, booleanlar, null, undefined
|
|
219
235
|
- **Tiplenmiş düğümler**: Çeviriler, koşullar, markdown gibi özel içerik türleri
|
|
220
236
|
- **Fonksiyonlar**: Çalışma zamanında değerlendirilebilen dinamik içerik [bkz. Fonksiyon Getirme](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/function_fetching.md)
|
|
237
|
+
- **Plural Content**: See Plural Content [See Plural Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/plural.md)
|
|
221
238
|
- **İç içe içerik**: Diğer sözlüklere referanslar
|
|
222
239
|
|
|
223
240
|
#### İçerik Türleri
|
|
@@ -563,6 +580,8 @@ multilingualContent: t({
|
|
|
563
580
|
});
|
|
564
581
|
```
|
|
565
582
|
|
|
583
|
+
> See [Çeviri İçeriği (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/translation.md) for more information.
|
|
584
|
+
|
|
566
585
|
### Koşul İçeriği (`cond`)
|
|
567
586
|
|
|
568
587
|
Boolean koşullara göre değişen içerik:
|
|
@@ -576,6 +595,8 @@ conditionalContent: cond({
|
|
|
576
595
|
});
|
|
577
596
|
```
|
|
578
597
|
|
|
598
|
+
> See [Koşul İçeriği (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/condition.md) for more information.
|
|
599
|
+
|
|
579
600
|
### Numaralandırma İçeriği (`enu`)
|
|
580
601
|
|
|
581
602
|
Numaralandırılmış değerlere göre değişen içerik:
|
|
@@ -590,6 +611,23 @@ statusContent: enu({
|
|
|
590
611
|
});
|
|
591
612
|
```
|
|
592
613
|
|
|
614
|
+
> See [Numaralandırma İçeriği (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/enumeration.md) for more information.
|
|
615
|
+
|
|
616
|
+
### Plural Content (`plural`)
|
|
617
|
+
|
|
618
|
+
Content that varies based on plural rules:
|
|
619
|
+
|
|
620
|
+
```typescript
|
|
621
|
+
import { plural } from "intlayer";
|
|
622
|
+
|
|
623
|
+
pluralContent: plural({
|
|
624
|
+
one: "One car",
|
|
625
|
+
other: "{{count}} cars",
|
|
626
|
+
});
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
> See [Plural Content Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/plural.md) for more information.
|
|
630
|
+
|
|
593
631
|
### Ekleme İçeriği (`insert`)
|
|
594
632
|
|
|
595
633
|
Başka içeriklere eklenebilen içerik:
|
|
@@ -600,6 +638,8 @@ import { insert } from "intlayer";
|
|
|
600
638
|
insertionContent: insert("Bu metin herhangi bir yere eklenebilir");
|
|
601
639
|
```
|
|
602
640
|
|
|
641
|
+
> See [Ekleme İçeriği (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/insertion.md) for more information.
|
|
642
|
+
|
|
603
643
|
### İç İçe İçerik (`nest`)
|
|
604
644
|
|
|
605
645
|
Diğer sözlüklere referanslar:
|
|
@@ -610,6 +650,8 @@ import { nest } from "intlayer";
|
|
|
610
650
|
nestedContent: nest("about-page");
|
|
611
651
|
```
|
|
612
652
|
|
|
653
|
+
> See [İç İçe İçerik (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/nesting.md) for more information.
|
|
654
|
+
|
|
613
655
|
### Markdown İçeriği (`md`)
|
|
614
656
|
|
|
615
657
|
Markdown formatında zengin metin içeriği:
|
|
@@ -622,6 +664,8 @@ markdownContent: md(
|
|
|
622
664
|
);
|
|
623
665
|
```
|
|
624
666
|
|
|
667
|
+
> See [Markdown İçeriği (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/markdown.md) for more information.
|
|
668
|
+
|
|
625
669
|
### HTML İçeriği (`html`)
|
|
626
670
|
|
|
627
671
|
Standart etiketler veya özel bileşenler kullanabilen zengin HTML içeriği:
|
|
@@ -639,6 +683,8 @@ localizedHtmlContent: t({
|
|
|
639
683
|
});
|
|
640
684
|
```
|
|
641
685
|
|
|
686
|
+
> See [HTML İçeriği (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/html.md) for more information.
|
|
687
|
+
|
|
642
688
|
### Cinsiyete Göre İçerik (`gender`)
|
|
643
689
|
|
|
644
690
|
Cinsiyete göre değişen içerik:
|
|
@@ -653,6 +699,8 @@ genderContent: gender({
|
|
|
653
699
|
});
|
|
654
700
|
```
|
|
655
701
|
|
|
702
|
+
> See [Cinsiyete Göre İçerik (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/gender.md) for more information.
|
|
703
|
+
|
|
656
704
|
### Dosya İçeriği (`file`)
|
|
657
705
|
|
|
658
706
|
Harici dosyalara referanslar:
|
|
@@ -663,6 +711,8 @@ import { file } from "intlayer";
|
|
|
663
711
|
fileContent: file("./path/to/content.txt");
|
|
664
712
|
```
|
|
665
713
|
|
|
714
|
+
> See [Dosya İçeriği (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/file.md) for more information.
|
|
715
|
+
|
|
666
716
|
## İçerik Dosyaları Oluşturma
|
|
667
717
|
|
|
668
718
|
### Temel İçerik Dosyası Yapısı
|
package/docs/tr/mcp_server.md
CHANGED
|
@@ -23,7 +23,7 @@ history:
|
|
|
23
23
|
changes: "Claude Desktop kurulumu eklendi"
|
|
24
24
|
- version: 5.5.12
|
|
25
25
|
date: 2025-07-10
|
|
26
|
-
changes: "
|
|
26
|
+
changes: "Streamable HTTP aktarımı ve uzak sunucu eklendi"
|
|
27
27
|
- version: 5.5.10
|
|
28
28
|
date: 2025-06-29
|
|
29
29
|
changes: "Geçmiş başlatıldı"
|
|
@@ -51,12 +51,12 @@ IDE'nizde Intlayer MCP Sunucusunu etkinleştirerek şunları açığa çıkarır
|
|
|
51
51
|
|
|
52
52
|
> Komutların ve seçeneklerin tam listesini [Intlayer CLI dokümantasyonunda](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) görüntüleyin.
|
|
53
53
|
|
|
54
|
-
## Yerel sunucu (stdio) vs Uzak sunucu (
|
|
54
|
+
## Yerel sunucu (stdio) vs Uzak sunucu (Streamable HTTP)
|
|
55
55
|
|
|
56
56
|
MCP sunucusu iki şekilde kullanılabilir:
|
|
57
57
|
|
|
58
58
|
- Yerel sunucu (stdio)
|
|
59
|
-
- Uzak sunucu (
|
|
59
|
+
- Uzak sunucu (Streamable HTTP)
|
|
60
60
|
|
|
61
61
|
### Yerel sunucu (stdio) (önerilen)
|
|
62
62
|
|
|
@@ -64,9 +64,9 @@ Intlayer, makinenizde yerel olarak yüklenebilen bir NPM paketi sağlar. VS Code
|
|
|
64
64
|
|
|
65
65
|
Bu sunucu, MCP sunucusunun tüm özelliklerini entegre ettiği için önerilen yol, CLI araçları dahil.
|
|
66
66
|
|
|
67
|
-
### Uzak sunucu (
|
|
67
|
+
### Uzak sunucu (Streamable HTTP)
|
|
68
68
|
|
|
69
|
-
MCP sunucusu ayrıca uzak olarak,
|
|
69
|
+
MCP sunucusu ayrıca uzak olarak, Streamable HTTP aktarım yöntemini kullanarak kullanılabilir. Bu sunucu Intlayer tarafından barındırılır ve https://mcp.intlayer.org adresinde kullanılabilir. Bu sunucuya herkese açık olarak, herhangi bir kimlik doğrulaması olmadan erişilebilir ve kullanımı ücretsizdir.
|
|
70
70
|
|
|
71
71
|
Uzak sunucunun CLI araçlarını, AI otomatik tamamlama vb. entegre etmediğini unutmayın. Uzak sunucu sadece AI asistanınızın Intlayer ekosistemiyle etkileşim kurması için dokümantasyon içindir.
|
|
72
72
|
|
|
@@ -97,7 +97,7 @@ bun x intlayer init mcp
|
|
|
97
97
|
Bu komut şunları yapacaktır:
|
|
98
98
|
|
|
99
99
|
1. Hangi platformu kullandığınızı soracaktır (Cursor, VS Code, Claude Desktop vb.).
|
|
100
|
-
2. Hangi taşıma yöntemini kullanmak istediğinizi soracaktır (Yerel sunucu (stdio) veya Uzak sunucu (
|
|
100
|
+
2. Hangi taşıma yöntemini kullanmak istediğinizi soracaktır (Yerel sunucu (stdio) veya Uzak sunucu (Streamable HTTP)).
|
|
101
101
|
3. Yapılandırma dosyanızı otomatik olarak güncelleyecektir (örneğin, `.cursor/mcp.json`, `.vscode/mcp.json` veya genel Claude Desktop yapılandırması).
|
|
102
102
|
|
|
103
103
|
---
|
|
@@ -107,7 +107,7 @@ Bu komut şunları yapacaktır:
|
|
|
107
107
|
1. Komut Paletini açın (Ctrl+Shift+P veya Cmd+Shift+P).
|
|
108
108
|
2. `Intlayer: Setup AI Agent Skills` yazın
|
|
109
109
|
3. Kullandığınız platformu seçin (örn. `VS Code`, `Cursor`, `Windsurf`, `OpenCode`, `Claude Code`, `GitHub Copilot Workspace` vb.).
|
|
110
|
-
4. Kurulacak MCP'yi seçin (stdio,
|
|
110
|
+
4. Kurulacak MCP'yi seçin (stdio, Streamable HTTP)
|
|
111
111
|
5. Enter'a basın.
|
|
112
112
|
|
|
113
113
|
---
|
|
@@ -131,16 +131,16 @@ Proje kökünüzde aşağıdaki `.cursor/mcp.json` yapılandırma dosyasını ek
|
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
### Uzak sunucu (
|
|
134
|
+
### Uzak sunucu (Streamable HTTP)
|
|
135
135
|
|
|
136
|
-
Server-Sent Events (
|
|
136
|
+
Server-Sent Events (Streamable HTTP) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
|
|
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 @@ Proje kökünüzde bir `.vscode/mcp.json` dosyası oluşturun:
|
|
|
172
172
|
}
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
### Uzak sunucu (
|
|
175
|
+
### Uzak sunucu (Streamable HTTP)
|
|
176
176
|
|
|
177
|
-
Server-Sent Events (
|
|
177
|
+
Server-Sent Events (Streamable HTTP) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
|
|
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 @@ Server-Sent Events (SSE) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak
|
|
|
191
191
|
|
|
192
192
|
## ChatGPT'de Kurulum
|
|
193
193
|
|
|
194
|
-
### Uzak sunucu (
|
|
194
|
+
### Uzak sunucu (Streamable HTTP)
|
|
195
195
|
|
|
196
196
|
ChatGPT'de MCP sunucusunu yapılandırmak için [resmi dokümantasyonu](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server) takip edin.
|
|
197
197
|
|
|
@@ -232,6 +232,19 @@ Yapılandırma dosyasının yolu:
|
|
|
232
232
|
}
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
+
### Uzak sunucu (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
|
## CLI aracılığıyla MCP Sunucusunu Kullanma
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-05-10
|
|
3
|
+
updatedAt: 2026-05-10
|
|
4
|
+
title: Sync PO eklentisi
|
|
5
|
+
description: Intlayer sözlüklerini Gettext PO dosyalarıyla senkronize edin. Mesajlarınızı yönetmek, çevirmek ve test etmek için Intlayer'ı kullanırken mevcut i18n yapınızı koruyun.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Sync PO
|
|
9
|
+
- Gettext
|
|
10
|
+
- i18n
|
|
11
|
+
- çeviriler
|
|
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 eklentisi ilk dokümantasyonu"
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Sync PO (i18n köprüleri) - ICU / i18next desteğiyle Sync PO
|
|
24
|
+
|
|
25
|
+
Intlayer'ı mevcut i18n yığınınız için bir eklenti olarak kullanın. Bu eklenti, Gettext PO mesajlarınızı Intlayer sözlükleriyle senkronize tutar, böylece şunları yapabilirsiniz:
|
|
26
|
+
|
|
27
|
+
- Mevcut PO tabanlı çeviri iş akışınızı koruyun.
|
|
28
|
+
- Uygulamanızı yeniden yapılandırmadan mesajlarınızı Intlayer (CLI, CI, sağlayıcılar, CMS) ile yönetin ve çevirin.
|
|
29
|
+
- PO yönetim katmanı olarak Intlayer'ı önerirken, her ekosistemi hedefleyen öğreticiler ve SEO içerikleri sunun.
|
|
30
|
+
|
|
31
|
+
Notlar ve mevcut kapsam:
|
|
32
|
+
|
|
33
|
+
- CMS'ye dışsallaştırma, çeviriler ve klasik metinler için çalışır.
|
|
34
|
+
- PO girişlerinin kendisinde eklemeler, çoğullar/ICU veya diğer kütüphanelerin gelişmiş çalışma zamanı özellikleri için henüz destek yoktur.
|
|
35
|
+
- Görsel düzenleyici henüz üçüncü taraf i18n çıktıları için desteklenmemektedir.
|
|
36
|
+
|
|
37
|
+
### Bu eklenti ne zaman kullanılmalı?
|
|
38
|
+
|
|
39
|
+
- Çevirileriniz için zaten Gettext PO dosyalarını kullanıyorsanız.
|
|
40
|
+
- İşleme çalışma zamanınızı değiştirmeden yapay zeka destekli doldurma, CI'da test ve içerik operasyonları istiyorsanız.
|
|
41
|
+
|
|
42
|
+
## Kurulum
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm add -D @intlayer/sync-po-plugin
|
|
46
|
+
# veya
|
|
47
|
+
npm i -D @intlayer/sync-po-plugin
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Eklentiler
|
|
51
|
+
|
|
52
|
+
Bu paket iki eklenti sunar:
|
|
53
|
+
|
|
54
|
+
- `loadPO`: PO dosyalarını Intlayer sözlüklerine yükler.
|
|
55
|
+
- Bu eklenti, bir kaynaktan PO dosyalarını yüklemek için kullanılır ve Intlayer sözlüklerine yüklenecektir. Tüm kod tabanını tarayabilir ve belirli PO dosyalarını arayabilir.
|
|
56
|
+
Bu eklenti şu durumlarda kullanılabilir:
|
|
57
|
+
- PO dosyalarınızın yükleneceği belirli bir konumu zorunlu kılan bir i18n kütüphanesi kullanıyorsanız ancak içerik bildiriminizi kod tabanınızda istediğiniz yere yerleştirmek istiyorsanız.
|
|
58
|
+
- Mesajlarınızı uzak bir kaynaktan (örneğin: bir CMS, bir API vb.) getirmek ve mesajlarınızı PO dosyalarında saklamak istiyorsanız.
|
|
59
|
+
|
|
60
|
+
> Arka planda, bu eklenti tüm kod tabanını tarayacak ve belirli PO dosyalarını arayacak ve bunları Intlayer sözlüklerine yükleyecektir.
|
|
61
|
+
> Bu eklentinin çıktıyı ve çevirileri PO dosyalarına geri yazmayacağını unutmayın.
|
|
62
|
+
|
|
63
|
+
- `syncPO`: PO dosyalarını Intlayer sözlükleriyle senkronize eder.
|
|
64
|
+
- Bu eklenti, PO dosyalarını Intlayer sözlükleriyle senkronize etmek için kullanılır. Verilen konumu tarayabilir ve belirli PO dosyaları için kalıpla eşleşen PO'ları yükleyebilir. Bu eklenti, başka bir i18n kütüphanesi kullanırken Intlayer'ın avantajlarından yararlanmak istiyorsanız yararlıdır.
|
|
65
|
+
|
|
66
|
+
## Her iki eklentinin kullanımı
|
|
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
|
+
// Mevcut PO dosyalarınızı Intlayer sözlükleriyle senkronize tutun
|
|
79
|
+
plugins: [
|
|
80
|
+
/**
|
|
81
|
+
* src içindeki {key}.i18n.po kalıbıyla eşleşen tüm PO dosyalarını yükleyecektir
|
|
82
|
+
*/
|
|
83
|
+
loadPO({
|
|
84
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
85
|
+
locale: Locales.ENGLISH,
|
|
86
|
+
priority: 1, // Bu PO dosyalarının `./locales/en/${key}.po` adresindeki dosyalara göre öncelikli olmasını sağlar
|
|
87
|
+
}),
|
|
88
|
+
/**
|
|
89
|
+
* Çıktıyı ve çevirileri yükleyecek ve locales dizinindeki PO dosyalarına geri yazacaktır
|
|
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` eklentisi
|
|
102
|
+
|
|
103
|
+
### Hızlı başlangıç
|
|
104
|
+
|
|
105
|
+
Eklentiyi `intlayer.config.ts` dosyanıza ekleyin ve mevcut PO yapınızı işaret edin.
|
|
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
|
+
// Mevcut PO dosyalarınızı Intlayer sözlükleriyle senkronize tutun
|
|
118
|
+
plugins: [
|
|
119
|
+
syncPO({
|
|
120
|
+
// Dil başına, ad alanı başına düzen
|
|
121
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
122
|
+
}),
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default config;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Alternatif: dil başına tek dosya:
|
|
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
|
+
#### Nasıl çalışır?
|
|
151
|
+
|
|
152
|
+
- Okuma: Eklenti, `source` oluşturucunuzdan PO dosyalarını bulur ve bunları Intlayer sözlükleri olarak yükler.
|
|
153
|
+
- Yazma: Derlemelerden ve doldurmalardan sonra, yerelleştirilmiş PO'ları aynı yollara geri yazar (uygun Gettext başlıklarıyla).
|
|
154
|
+
- Otomatik Doldurma: Eklenti, her sözlük için bir `autoFill` yolu bildirir. `intlayer fill` komutunu çalıştırmak varsayılan olarak yalnızca PO dosyalarınızdaki eksik çevirileri günceller.
|
|
155
|
+
|
|
156
|
+
API:
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
syncPO({
|
|
160
|
+
source: ({ key, locale }) => string, // gerekli
|
|
161
|
+
location?: string, // isteğe bağlı etiket, varsayılan: "sync-po::path/to/source"
|
|
162
|
+
priority?: number, // çakışma çözümü için isteğe bağlı öncelik, varsayılan: 0
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Birden fazla PO kaynağı ve öncelik
|
|
167
|
+
|
|
168
|
+
Farklı PO kaynaklarını senkronize etmek için birden fazla `syncPO` eklentisi ekleyebilirsiniz. Bu, projenizde birden fazla çeviri kaynağınız veya farklı PO yapılarınız olduğunda kullanışlıdır.
|
|
169
|
+
|
|
170
|
+
#### Öncelik sistemi
|
|
171
|
+
|
|
172
|
+
Birden fazla eklenti aynı sözlük anahtarını hedeflediğinde, `priority` parametresi hangi eklentinin öncelikli olduğunu belirler:
|
|
173
|
+
|
|
174
|
+
- Yüksek öncelik sayıları düşük olanlara göre önceliklidir
|
|
175
|
+
- `.content` dosyalarının varsayılan önceliği `0`'dır
|
|
176
|
+
- Eklentilerin varsayılan önceliği `0`'dır
|
|
177
|
+
- Aynı önceliğe sahip eklentiler yapılandırmada göründükleri sıraya göre işlenir
|
|
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
|
+
// Birincil PO kaynağı (en yüksek öncelik)
|
|
191
|
+
syncPO({
|
|
192
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
193
|
+
location: "main-translations",
|
|
194
|
+
priority: 10,
|
|
195
|
+
}),
|
|
196
|
+
|
|
197
|
+
// Yedek PO kaynağı (düşük öncelik)
|
|
198
|
+
syncPO({
|
|
199
|
+
source: ({ locale }) => `./fallback-locales/${locale}.po`,
|
|
200
|
+
location: "fallback-translations",
|
|
201
|
+
priority: 5,
|
|
202
|
+
}),
|
|
203
|
+
|
|
204
|
+
// Eski PO kaynağı (en düşük öncelik)
|
|
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 eklentisi
|
|
217
|
+
|
|
218
|
+
### Hızlı başlangıç
|
|
219
|
+
|
|
220
|
+
Mevcut PO dosyalarını Intlayer sözlükleri olarak almak için eklentiyi `intlayer.config.ts` dosyanıza ekleyin. Bu eklenti salt okunurdur (diske yazma yapılmaz):
|
|
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
|
+
// Kaynak ağacınızın herhangi bir yerinde bulunan PO mesajlarını alın
|
|
234
|
+
loadPO({
|
|
235
|
+
source: ({ key }) => `./src/**/${key}.i18n.po`,
|
|
236
|
+
// Eklenti örneği başına tek bir dil yükle (yapılandırma defaultLocale değerine varsayılan olarak ayarlanır)
|
|
237
|
+
locale: Locales.ENGLISH,
|
|
238
|
+
priority: 0,
|
|
239
|
+
}),
|
|
240
|
+
],
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export default config;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Alternatif: dil başına düzen, hala salt okunur (yalnızca seçilen dil yüklenir):
|
|
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
|
+
// Bu kalıptan yalnızca Locales.FRENCH dosyaları yüklenecektir
|
|
260
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
261
|
+
locale: Locales.FRENCH,
|
|
262
|
+
}),
|
|
263
|
+
],
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export default config;
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Nasıl çalışır?
|
|
270
|
+
|
|
271
|
+
- Keşfetme: `source` oluşturucunuzdan bir glob oluşturur ve eşleşen PO dosyalarını toplar.
|
|
272
|
+
- Alım: Her PO dosyasını sağlanan `locale` ile bir Intlayer sözlüğü olarak yükler.
|
|
273
|
+
- Salt Okunur: Çıktı dosyalarını yazmaz veya biçimlendirmez; gidiş-dönüş senkronizasyonuna ihtiyacınız varsa `syncPO` kullanın.
|
|
274
|
+
- Otomatik Doldurmaya Hazır: Eksik anahtarları doldurmak için `intlayer content fill` komutunun kullanabileceği bir `fill` yolu tanımlar.
|
|
275
|
+
|
|
276
|
+
### API
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
loadPO({
|
|
280
|
+
// PO dosyalarınıza giden yolları oluşturun. Yapınızda dil segmenti yoksa `locale` isteğe bağlıdır
|
|
281
|
+
source: ({ key, locale }) => string,
|
|
282
|
+
|
|
283
|
+
// Bu eklenti örneği tarafından yüklenen sözlükler için hedef dil
|
|
284
|
+
// configuration.internationalization.defaultLocale değerine varsayılan olarak ayarlanır
|
|
285
|
+
locale?: Locale,
|
|
286
|
+
|
|
287
|
+
// Kaynağı tanımlamak için isteğe bağlı etiket
|
|
288
|
+
location?: string, // varsayılan: "plugin"
|
|
289
|
+
|
|
290
|
+
// Diğer kaynaklara karşı çakışma çözümü için kullanılan öncelik
|
|
291
|
+
priority?: number, // varsayılan: 0
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Davranış ve kurallar
|
|
296
|
+
|
|
297
|
+
- `source` maskeniz bir dil yer tutucusu içeriyorsa, yalnızca seçilen `locale` için dosyalar alınır.
|
|
298
|
+
- Maskenizde `{key}` segmenti yoksa sözlük anahtarı "index" olur.
|
|
299
|
+
- Anahtarlar, `source` oluşturucunuzdaki `{key}` yer tutucusunun değiştirilmesiyle dosya yollarından türetilir.
|
|
300
|
+
- Eklenti yalnızca bulunan dosyaları kullanır ve eksik dilleri veya anahtarları uydurmaz.
|
|
301
|
+
- `fill` yolu `source` değerinizden çıkarılır ve katılım sağladığınızda CLI aracılığıyla eksik değerleri güncellemek için kullanılır.
|
|
302
|
+
|
|
303
|
+
## Çakışma çözümü
|
|
304
|
+
|
|
305
|
+
Aynı çeviri anahtarı birden fazla PO kaynağında mevcut olduğunda:
|
|
306
|
+
|
|
307
|
+
1. En yüksek önceliğe sahip eklenti nihai değeri belirler
|
|
308
|
+
2. Düşük öncelikli kaynaklar eksik anahtarlar için geri dönüş olarak kullanılır
|
|
309
|
+
3. Bu, yeni yapılara kademeli olarak geçerken eski çevirileri korumanıza olanak tanır
|
|
310
|
+
|
|
311
|
+
## CLI
|
|
312
|
+
|
|
313
|
+
Senkronize edilmiş PO dosyaları diğer `.content` dosyaları gibi değerlendirilecektir. Bu, senkronize edilmiş PO dosyaları için tüm intlayer komutlarının kullanılabilir olacağı anlamına gelir. Şunlar dahildir:
|
|
314
|
+
|
|
315
|
+
- Eksik çeviri olup olmadığını test etmek için `intlayer content test`
|
|
316
|
+
- Senkronize edilmiş PO dosyalarını listelemek için `intlayer content list`
|
|
317
|
+
- Eksik çevirileri doldurmak için `intlayer content fill`
|
|
318
|
+
- Senkronize edilmiş PO dosyalarını göndermek (push) için `intlayer content push`
|
|
319
|
+
- Senkronize edilmiş PO dosyalarını çekmek (pull) için `intlayer content pull`
|
|
320
|
+
|
|
321
|
+
Daha fazla ayrıntı için [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) sayfasına bakın.
|
|
322
|
+
|
|
323
|
+
## Sınırlamalar (güncel)
|
|
324
|
+
|
|
325
|
+
- Üçüncü taraf kütüphaneleri hedeflerken ekleme veya çoğul/ICU desteği yoktur.
|
|
326
|
+
- Görsel düzenleyici henüz Intlayer dışı çalışma zamanları için mevcut değildir.
|
|
327
|
+
- Yalnızca PO senkronizasyonu; PO dışı katalog biçimleri desteklenmez.
|
|
328
|
+
|
|
329
|
+
## Bu neden önemli?
|
|
330
|
+
|
|
331
|
+
- Yerleşik i18n çözümlerini önerebilir ve Intlayer'ı bir eklenti olarak konumlandırabiliriz.
|
|
332
|
+
- PO'ları yönetmek için Intlayer'ı önererek sona eren öğreticilerle onların SEO/anahtar kelimelerinden yararlanırız.
|
|
333
|
+
- Adreslenebilir kitleyi "yeni projelerden", "zaten i18n kullanan herhangi bir ekibe" genişletir.
|
|
@@ -61,6 +61,13 @@ history:
|
|
|
61
61
|
|
|
62
62
|
Intlayer намагається оптимізувати всі ці параметри одночасно.
|
|
63
63
|
|
|
64
|
+
## TL;DR
|
|
65
|
+
|
|
66
|
+
- **Intlayer** та **next-translate**: Найкращі варіанти для продуктивності Next.js, що забезпечують мінімальний розмір та найкращу підтримку статичного рендерингу.
|
|
67
|
+
- **next-intl**: Найбільш трендовий варіант на сьогодні, проте він важкий і складний в оптимізації для великих додатків.
|
|
68
|
+
- **next-i18next**: Популярний та багатий на плагіни, але має значну вагу бандла (~3× Intlayer).
|
|
69
|
+
- **Уникайте**: **gt-next** та **lingo.dev** через серйозні проблеми з продуктивністю, прив'язку до вендора (vendor lock-in) та критичні помилки при збірці.
|
|
70
|
+
|
|
64
71
|
## Протестуйте свій додаток
|
|
65
72
|
|
|
66
73
|
Щоб виявити ці проблеми, я створив безкоштовний сканер, який ви можете спробувати [тут](https://intlayer.org/i18n-seo-scanner).
|
|
@@ -99,14 +106,14 @@ Intlayer намагається оптимізувати всі ці парам
|
|
|
99
106
|
Для цього бенчмарку ми порівняли наступні бібліотеки:
|
|
100
107
|
|
|
101
108
|
- `Base App` (Без бібліотеки i18n)
|
|
102
|
-
- `next-intlayer` (v8.7.
|
|
109
|
+
- `next-intlayer` (v8.7.12)
|
|
103
110
|
- `next-i18next` (v16.0.5)
|
|
104
111
|
- `next-intl` (v4.9.1)
|
|
105
112
|
- `@lingui/core` (v5.3.0)
|
|
106
113
|
- `next-translate` (v3.1.2)
|
|
107
114
|
- `next-international` (v1.3.1)
|
|
108
115
|
- `@inlang/paraglide-js` (v2.15.1)
|
|
109
|
-
-
|
|
116
|
+
- `@tolgee/react` (v7.0.0)
|
|
110
117
|
- `@lingo.dev/compiler` (v0.4.0)
|
|
111
118
|
- `wuchale` (v0.22.11)
|
|
112
119
|
- `gt-next` (v6.16.5)
|
|
@@ -161,10 +168,10 @@ Intlayer намагається оптимізувати всі ці парам
|
|
|
161
168
|
|
|
162
169
|
**(General Translation)** (`gt-next@6.16.5`):
|
|
163
170
|
|
|
164
|
-
- Для додатку розміром 110 КБ `gt-
|
|
171
|
+
- Для додатку розміром 110 КБ `gt-next` додає понад 440 КБ зайвих даних.
|
|
165
172
|
- `Quota Exceeded, please upgrade your plan` вже під час першої збірки.
|
|
166
173
|
- Переклади не рендериться; отримую помилку `Error: <T> used on the client-side outside of <GTProvider>`, що схоже на баг бібліотеки.
|
|
167
|
-
- При впровадженні **gt-
|
|
174
|
+
- При впровадженні **gt-next** я також стикнувся з [проблемою](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) бібліотеки: помилка `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, через яку додаток падав. Після звіту про помилку розробник виправив її протягом 24 годин.
|
|
168
175
|
- Бібліотека блокує статичний рендеринг сторінок Next.js.
|
|
169
176
|
|
|
170
177
|
**(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
|
|
@@ -186,9 +193,11 @@ Intlayer намагається оптимізувати всі ці парам
|
|
|
186
193
|
Особисто мені не подобається необхідність регенерувати JS-файли перед кожним пушем, що створює постійний ризик конфліктів під час злиття через PR. Інструмент також здається більш орієнтованим на Vite, ніж на Next.js.
|
|
187
194
|
Нарешті, порівняно з іншими рішеннями, Paraglide не використовує стор (наприклад, React context) для отримання поточної локалі для рендерингу. Для кожного обробленого вузла він запитує локаль з localStorage / cookie тощо. Це призводить до виконання непотрібної логіки, що впливає на реактивність компонентів.
|
|
188
195
|
|
|
196
|
+
> Примітка щодо paraglide: це рішення впроваджує код у вашу кодову базу для імпорту, в результаті чого показник 'розмір бібліотеки' у звіті бенчмарку становить майже 0. Генерація коду — це добре, оскільки функція, що використовується, міститиме лише необхідну логіку (повний префікс проти відсутності префікса, кукі проти сховища тощо). Для порівняння, Intlayer виконує цю фільтрацію через впровадження змінних середовища під час збірки, щоб змусити бандлер видалити невикористаний контент (tree-shaking) залежно від логіки. Завдяки цьому paraglide та intlayer виявляються в 6-10 разів легшими рішеннями, ніж i18next або next-intl.
|
|
197
|
+
|
|
189
198
|
### 3 — Прийнятні рішення
|
|
190
199
|
|
|
191
|
-
**(Tolgee)** (
|
|
200
|
+
**(Tolgee)** (`@tolgee/react@7.0.0`):
|
|
192
201
|
|
|
193
202
|
`Tolgee` вирішує багато зі згаданих проблем. Проте його впровадження здалося мені складнішим, ніж у подібних інструментів. Він не забезпечує типізацію (type safety), що ускладнює виявлення відсутніх ключів під час компіляції. Мені довелося обертати функції Tolgee своїми, щоб додати перевірку відсутніх ключів.
|
|
194
203
|
|
|
@@ -216,7 +225,7 @@ Intlayer намагається оптимізувати всі ці парам
|
|
|
216
225
|
|
|
217
226
|
`next-translate` — моя основна рекомендація, якщо вам подобається API у стилі `t()`. Він елегантно працює через `next-translate-plugin`, завантажуючи простори імен через `getStaticProps` за допомогою завантажувача Webpack / Turbopack. Це також найлегший варіант у цьому списку (~2.5 КБ). Визначення просторів імен для сторінок або маршрутів у конфігу добре продумане і простіше в підтримці, ніж у **next-intl** чи **next-i18next**. У версії `3.1.2` я помітив, що статичний рендеринг не працював; Next.js переходив до динамічного рендерингу.
|
|
218
227
|
|
|
219
|
-
**(Intlayer)** (`next-intlayer@8.7.
|
|
228
|
+
**(Intlayer)** (`next-intlayer@8.7.12`):
|
|
220
229
|
|
|
221
230
|
Я не буду особисто оцінювати `next-intlayer` заради об’єктивності, оскільки це моє власне рішення.
|
|
222
231
|
|