@intlayer/docs 6.1.5 → 6.1.6-canary.0
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/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +404 -173
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +262 -113
- package/blog/en/intlayer_with_next-i18next.mdx +431 -0
- package/blog/en/intlayer_with_next-intl.mdx +335 -0
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +403 -140
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +185 -71
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +36 -28
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +38 -28
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -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/component_i18n.md +186 -0
- package/docs/ar/vs_code_extension.md +48 -109
- package/docs/de/component_i18n.md +186 -0
- package/docs/de/vs_code_extension.md +46 -107
- package/docs/en/component_i18n.md +186 -0
- package/docs/en/intlayer_with_nextjs_14.md +18 -1
- package/docs/en/intlayer_with_nextjs_15.md +18 -1
- package/docs/en/vs_code_extension.md +24 -114
- package/docs/en-GB/component_i18n.md +186 -0
- package/docs/en-GB/vs_code_extension.md +42 -103
- package/docs/es/component_i18n.md +182 -0
- package/docs/es/vs_code_extension.md +53 -114
- package/docs/fr/component_i18n.md +186 -0
- package/docs/fr/vs_code_extension.md +50 -111
- package/docs/hi/component_i18n.md +186 -0
- package/docs/hi/vs_code_extension.md +49 -110
- package/docs/it/component_i18n.md +186 -0
- package/docs/it/vs_code_extension.md +50 -111
- package/docs/ja/component_i18n.md +186 -0
- package/docs/ja/vs_code_extension.md +50 -111
- package/docs/ko/component_i18n.md +186 -0
- package/docs/ko/vs_code_extension.md +48 -109
- package/docs/pt/component_i18n.md +186 -0
- package/docs/pt/vs_code_extension.md +46 -107
- package/docs/ru/component_i18n.md +186 -0
- package/docs/ru/vs_code_extension.md +48 -109
- package/docs/tr/component_i18n.md +186 -0
- package/docs/tr/vs_code_extension.md +54 -115
- package/docs/zh/component_i18n.md +186 -0
- package/docs/zh/vs_code_extension.md +51 -105
- package/package.json +11 -11
- package/src/generated/docs.entry.ts +16 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: React ve Next.js'te bir bileşeni çok dilli (i18n kütüphanesi) yapma
|
|
5
|
+
description: Intlayer ile çok dilli bir React veya Next.js bileşeni oluşturmak için yerelleştirilmiş içeriğin nasıl beyan edileceğini ve alınacağını öğrenin.
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- bileşen
|
|
9
|
+
- react
|
|
10
|
+
- çok dilli
|
|
11
|
+
- next.js
|
|
12
|
+
- intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- component
|
|
16
|
+
- i18n
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Intlayer ile bir bileşeni çok dilli (i18n) nasıl yaparsınız
|
|
22
|
+
|
|
23
|
+
Bu rehber, iki yaygın kurulumda bir UI bileşenini çok dilli yapmak için gereken asgari adımları gösterir:
|
|
24
|
+
|
|
25
|
+
- React (Vite/SPA)
|
|
26
|
+
- Next.js (App Router)
|
|
27
|
+
|
|
28
|
+
Öncelikle içeriğinizi beyan edecek, ardından bileşeninizde içeriği alacaksınız.
|
|
29
|
+
|
|
30
|
+
## 1) İçeriğinizi beyan edin (React ve Next.js için ortak)
|
|
31
|
+
|
|
32
|
+
Bileşeninizin yakınında bir içerik beyan dosyası oluşturun. Bu, çevirileri kullanıldıkları yere yakın tutar ve tür güvenliğini sağlar.
|
|
33
|
+
|
|
34
|
+
```ts fileName="component.content.ts"
|
|
35
|
+
import { t, type Dictionary } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const componentContent = {
|
|
38
|
+
key: "component-example",
|
|
39
|
+
content: {
|
|
40
|
+
title: t({
|
|
41
|
+
en: "Hello",
|
|
42
|
+
fr: "Bonjour",
|
|
43
|
+
es: "Hola",
|
|
44
|
+
}),
|
|
45
|
+
description: t({
|
|
46
|
+
en: "A multilingual React component",
|
|
47
|
+
fr: "Un composant React multilingue",
|
|
48
|
+
es: "Un componente React multilingüe",
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
} satisfies Dictionary;
|
|
52
|
+
|
|
53
|
+
export default componentContent;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Yapılandırma dosyalarını tercih ediyorsanız JSON da desteklenmektedir.
|
|
57
|
+
|
|
58
|
+
```json fileName="component.content.json"
|
|
59
|
+
{
|
|
60
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
61
|
+
"key": "component-example",
|
|
62
|
+
"content": {
|
|
63
|
+
"title": {
|
|
64
|
+
"nodeType": "translation",
|
|
65
|
+
"translation": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }
|
|
66
|
+
},
|
|
67
|
+
"description": {
|
|
68
|
+
"nodeType": "translation",
|
|
69
|
+
"translation": {
|
|
70
|
+
"en": "A multilingual React component",
|
|
71
|
+
"fr": "Un composant React multilingue",
|
|
72
|
+
"es": "Un componente React multilingüe"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 2) İçeriğinizi alın
|
|
80
|
+
|
|
81
|
+
### Durum A — React uygulaması (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
Varsayılan yaklaşım: Anahtarla almak için `useIntlayer` kullanın. Bu, bileşenleri hafif ve tipli tutar.
|
|
84
|
+
|
|
85
|
+
```tsx fileName="ComponentExample.tsx"
|
|
86
|
+
import { useIntlayer } from "react-intlayer";
|
|
87
|
+
|
|
88
|
+
export function ComponentExample() {
|
|
89
|
+
const content = useIntlayer("component-example");
|
|
90
|
+
return (
|
|
91
|
+
<div>
|
|
92
|
+
<h1>{content.title}</h1>
|
|
93
|
+
<p>{content.description}</p>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Sunucu tarafı render veya sağlayıcı dışında: `react-intlayer/server` kullanın ve gerektiğinde açık bir `locale` parametresi geçin.
|
|
100
|
+
|
|
101
|
+
```tsx fileName="ServerRenderedExample.tsx"
|
|
102
|
+
import { useIntlayer } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
export function ServerRenderedExample({ locale }: { locale: string }) {
|
|
105
|
+
const content = useIntlayer("component-example", locale);
|
|
106
|
+
return (
|
|
107
|
+
<>
|
|
108
|
+
<h1>{content.title}</h1>
|
|
109
|
+
<p>{content.description}</p>
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Alternatif: Çağrı noktasında yapıyı yan yana koymayı tercih ederseniz, `useDictionary` tüm tanımlı nesneyi okuyabilir.
|
|
116
|
+
|
|
117
|
+
```tsx fileName="ComponentWithDictionary.tsx"
|
|
118
|
+
import { useDictionary } from "react-intlayer";
|
|
119
|
+
import componentContent from "./component.content";
|
|
120
|
+
|
|
121
|
+
export function ComponentWithDictionary() {
|
|
122
|
+
const { title, description } = useDictionary(componentContent);
|
|
123
|
+
return (
|
|
124
|
+
<div>
|
|
125
|
+
<h1>{title}</h1>
|
|
126
|
+
<p>{description}</p>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Durum B — Next.js (App Router)
|
|
133
|
+
|
|
134
|
+
Veri güvenliği ve performans için sunucu bileşenlerini tercih edin. Sunucu dosyalarında `next-intlayer/server` içinden `useIntlayer` kullanın, istemci bileşenlerinde ise `next-intlayer` içinden `useIntlayer` kullanın.
|
|
135
|
+
|
|
136
|
+
```tsx fileName="app/[locale]/example/ServerComponent.tsx"
|
|
137
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
138
|
+
|
|
139
|
+
export default function ServerComponent() {
|
|
140
|
+
const content = useIntlayer("component-example");
|
|
141
|
+
return (
|
|
142
|
+
<>
|
|
143
|
+
<h1>{content.title}</h1>
|
|
144
|
+
<p>{content.description}</p>
|
|
145
|
+
</>
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```tsx fileName="app/[locale]/example/ClientComponent.tsx"
|
|
151
|
+
"use client";
|
|
152
|
+
|
|
153
|
+
import { useIntlayer } from "next-intlayer";
|
|
154
|
+
|
|
155
|
+
export function ClientComponent() {
|
|
156
|
+
const content = useIntlayer("component-example");
|
|
157
|
+
return (
|
|
158
|
+
<div>
|
|
159
|
+
<h1>{content.title}</h1>
|
|
160
|
+
<p>{content.description}</p>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
İpucu: Sayfa meta verileri ve SEO için, içeriği `getIntlayer` kullanarak da alabilir ve çok dilli URL’leri `getMultilingualUrls` ile oluşturabilirsiniz.
|
|
167
|
+
|
|
168
|
+
## Neden Intlayer’ın bileşen yaklaşımı en iyisidir
|
|
169
|
+
|
|
170
|
+
- **Birlikte konumlandırma**: İçerik beyanları bileşenlerin yakınında bulunur, sürüklenmeyi azaltır ve tasarım sistemleri arasında yeniden kullanımı artırır.
|
|
171
|
+
- **Tip güvenliği**: Anahtarlar ve yapılar güçlü şekilde tiplenmiştir; eksik çeviriler çalışma zamanında değil, derleme zamanında ortaya çıkar.
|
|
172
|
+
- **Sunucu-öncelikli**: Daha iyi güvenlik ve performans için sunucu bileşenlerinde doğal olarak çalışır; istemci kancaları ergonomik kalır.
|
|
173
|
+
- **Ağaç sarsma (Tree-shaking)**: Sadece bileşen tarafından kullanılan içerik paketlenir, böylece büyük uygulamalarda yükler küçük tutulur.
|
|
174
|
+
- **Geliştirici Deneyimi (DX) ve araçlar**: Dahili ara katman yazılımı, SEO yardımcıları ve isteğe bağlı Görsel Editör/Yapay Zeka çevirileri günlük işleri kolaylaştırır.
|
|
175
|
+
|
|
176
|
+
Next.js odaklı karşılaştırmalar ve kalıplar için bakınız: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## İlgili rehberler ve referanslar
|
|
179
|
+
|
|
180
|
+
- React kurulumu (Vite): https://intlayer.org/doc/environment/vite-and-react
|
|
181
|
+
- React Router v7: https://intlayer.org/doc/environment/vite-and-react/react-router-v7
|
|
182
|
+
- TanStack Başlangıç: https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Next.js kurulumu: https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- Neden Intlayer vs. next-intl vs. next-i18next: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
Bu sayfalar uçtan uca kurulum, sağlayıcılar, yönlendirme ve SEO yardımcılarını içerir.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
4
|
-
title: Resmi VS Code
|
|
5
|
-
description: Geliştirme iş akışınızı geliştirmek için VS Code'da Intlayer
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: Resmi VS Code Eklentisi
|
|
5
|
+
description: Geliştirme iş akışınızı geliştirmek için VS Code'da Intlayer eklentisinin nasıl kullanılacağını öğrenin. Yerelleştirilmiş içerikler arasında hızlıca gezin ve sözlüklerinizi verimli bir şekilde yönetin.
|
|
6
6
|
keywords:
|
|
7
|
-
- VS Code
|
|
7
|
+
- VS Code Eklentisi
|
|
8
8
|
- Intlayer
|
|
9
9
|
- Yerelleştirme
|
|
10
10
|
- Geliştirme Araçları
|
|
@@ -17,105 +17,49 @@ slugs:
|
|
|
17
17
|
- vs-code-extension
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
# Resmi VS Code
|
|
20
|
+
# Resmi VS Code Eklentisi
|
|
21
21
|
|
|
22
22
|
## Genel Bakış
|
|
23
23
|
|
|
24
|
-
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension), projelerinizde yerelleştirilmiş içeriklerle çalışırken geliştirici deneyimini iyileştirmek için tasarlanmış **Intlayer**'ın resmi Visual Studio Code
|
|
24
|
+
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension), projelerinizde yerelleştirilmiş içeriklerle çalışırken geliştirici deneyimini iyileştirmek için tasarlanmış **Intlayer**'ın resmi Visual Studio Code eklentisidir.
|
|
25
25
|
|
|
26
|
-

|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Eklenti bağlantısı: [https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension)
|
|
29
29
|
|
|
30
30
|
## Özellikler
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
**
|
|
35
|
-
**
|
|
36
|
-
**Çok Dilli Destek** – Farklı dillerde yerelleştirilmiş içerikleri destekler.
|
|
37
|
-
**VS Code Entegrasyonu** – VS Code’un gezinme ve komut paleti ile sorunsuz entegre olur.
|
|
34
|
+
- **Anında Gezinme** – `useIntlayer` anahtarına tıkladığınızda doğru içerik dosyasına hızlıca atlayın.
|
|
35
|
+
- **Sözlükleri Doldur** – Projenizden içeriklerle sözlükleri doldurun.
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+

|
|
40
38
|
|
|
41
|
-
İçerik
|
|
39
|
+
- **Intlayer Komutlarına Kolay Erişim** – İçerik sözlüklerini kolayca oluşturun, gönderin, çekin, doldurun ve test edin.
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
- **Sözlükleri Gönder** – En son sözlük içeriğini deponuza yükler.
|
|
45
|
-
- **Sözlükleri Çek** – En son sözlük içeriğini deponuzdan yerel ortamınıza senkronize eder.
|
|
46
|
-
- **Sözlükleri Doldur** – Sözlükleri projenizden içerik ile doldurur.
|
|
47
|
-
- **Sözlükleri Test Et** – Eksik veya tamamlanmamış çevirileri tespit eder.
|
|
41
|
+

|
|
48
42
|
|
|
49
|
-
|
|
43
|
+
- **İçerik Beyanı Oluşturucu** – Sözlük içerik dosyalarını çeşitli formatlarda oluşturun (`.ts`, `.esm`, `.cjs`, `.json`).
|
|
50
44
|
|
|
51
|
-
|
|
45
|
+

|
|
52
46
|
|
|
53
|
-
|
|
47
|
+
- **Sözlükleri Test Et** – Eksik çeviriler için sözlükleri test edin.
|
|
54
48
|
|
|
55
|
-
|
|
49
|
+

|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
51
|
+
- **Sözlüklerinizi güncel tutun** – Projenizden en son içeriklerle sözlüklerinizi güncel tutun.
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
TypeScript formatında oluşturulan dosya:
|
|
66
|
-
|
|
67
|
-
```tsx fileName="src/components/MyComponent/index.content.ts"
|
|
68
|
-
import { t, type Dictionary } from "intlayer";
|
|
69
|
-
|
|
70
|
-
const componentContent = {
|
|
71
|
-
key: "my-component",
|
|
72
|
-
content: {
|
|
73
|
-
myTranslatedContent: t({
|
|
74
|
-
en: "Hello World",
|
|
75
|
-
es: "Hola Mundo",
|
|
76
|
-
fr: "Bonjour le monde",
|
|
77
|
-
}),
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export default componentContent;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Mevcut formatlar:
|
|
85
|
-
|
|
86
|
-
- **TypeScript (`.ts`)**
|
|
87
|
-
- **ES Modülü (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
90
|
-
|
|
91
|
-
### Intlayer Sekmesi (Aktivite Çubuğu)
|
|
53
|
+

|
|
92
54
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **Arama**: Sözlükleri ve içeriklerini hızlıca filtrelemek için canlı bir arama çubuğu. Yazdıkça sonuçlar anında güncellenir.
|
|
96
|
-
- **Sözlükler**: Ortamlarınız/projeleriniz, sözlük anahtarları ve giriş sağlayan dosyaların ağaç görünümü. Şunları yapabilirsiniz:
|
|
97
|
-
- Bir dosyaya tıklayarak düzenleyicide açabilirsiniz.
|
|
98
|
-
- Araç çubuğunu kullanarak şu işlemleri yapabilirsiniz: Derle (Build), Çek (Pull), Gönder (Push), Doldur (Fill), Yenile (Refresh), Test Et (Test) ve Sözlük Dosyası Oluştur (Create Dictionary File).
|
|
99
|
-
- Öğeye özel işlemler için bağlam menüsünü kullanabilirsiniz:
|
|
100
|
-
- Bir sözlük üzerinde: Çek (Pull) veya Gönder (Push)
|
|
101
|
-
- Bir dosya üzerinde: Sözlüğü Doldur (Fill Dictionary)
|
|
102
|
-
- Düzenleyiciler arasında geçiş yaptığınızda, dosya bir sözlüğe aitse ağaç görünümü ilgili dosyayı gösterecektir.
|
|
103
|
-
|
|
104
|
-
## Kurulum
|
|
105
|
-
|
|
106
|
-
**Intlayer**'ı doğrudan VS Code Marketplace'ten yükleyebilirsiniz:
|
|
107
|
-
|
|
108
|
-
1. **VS Code**'u açın.
|
|
109
|
-
2. **Extensions Marketplace**'e gidin.
|
|
110
|
-
3. **"Intlayer"** için arama yapın.
|
|
111
|
-
4. **Install** (Yükle) butonuna tıklayın.
|
|
55
|
+
- **Intlayer Sekmesi (Aktivite Çubuğu)** – Araç çubuğu ve bağlam eylemleri (Oluştur, Çek, Gönder, Doldur, Yenile, Test Et, Dosya Oluştur) ile özel bir yan sekmeden sözlükleri göz atın ve arayın.
|
|
112
56
|
|
|
113
57
|
## Kullanım
|
|
114
58
|
|
|
115
|
-
### Hızlı
|
|
59
|
+
### Hızlı Navigasyon
|
|
116
60
|
|
|
117
61
|
1. **react-intlayer** kullanan bir projeyi açın.
|
|
118
|
-
2. `useIntlayer()`
|
|
62
|
+
2. Şu gibi bir `useIntlayer()` çağrısı bulun:
|
|
119
63
|
|
|
120
64
|
```tsx
|
|
121
65
|
const content = useIntlayer("app");
|
|
@@ -124,60 +68,55 @@ VS Code Aktivite Çubuğundaki Intlayer simgesine tıklayarak Intlayer sekmesini
|
|
|
124
68
|
3. Anahtar üzerinde **Command-click** (`⌘+Click` macOS'ta) veya **Ctrl+Click** (Windows/Linux'ta) yapın (örneğin, `"app"`).
|
|
125
69
|
4. VS Code otomatik olarak ilgili sözlük dosyasını açacaktır, örneğin `src/app.content.ts`.
|
|
126
70
|
|
|
127
|
-
###
|
|
128
|
-
|
|
129
|
-
### Intlayer Sekmesi (Activity Bar)
|
|
71
|
+
### Intlayer Sekmesi (Aktivite Çubuğu)
|
|
130
72
|
|
|
131
|
-
|
|
73
|
+
Yan sekmeyi kullanarak sözlüklerde gezinin ve yönetin:
|
|
132
74
|
|
|
133
|
-
-
|
|
75
|
+
- Aktivite Çubuğunda Intlayer simgesini açın.
|
|
134
76
|
- **Arama** bölümünde, sözlükleri ve girdileri gerçek zamanlı olarak filtrelemek için yazın.
|
|
135
|
-
- **Sözlükler** bölümünde, ortamları, sözlükleri ve dosyaları
|
|
77
|
+
- **Sözlükler** bölümünde, ortamları, sözlükleri ve dosyaları göz atın. Araç çubuğunu kullanarak Oluştur, Çek, Gönder, Doldur, Yenile, Test Et ve Sözlük Dosyası Oluştur işlemlerini yapabilirsiniz. Bağlam eylemleri için sağ tıklayın (sözlüklerde Çek/Gönder, dosyalarda Doldur). Geçerli düzenleyici dosyası uygun olduğunda ağaçta otomatik olarak gösterilir.
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### Komutlara Erişim
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
Komutlara **Komut Paleti** üzerinden erişebilirsiniz.
|
|
140
82
|
|
|
141
83
|
```sh
|
|
142
84
|
Cmd + Shift + P (macOS) / Ctrl + Shift + P (Windows/Linux)
|
|
143
85
|
```
|
|
144
86
|
|
|
145
|
-
**Sözlükleri Oluştur**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
1. **Komut Paletini** açın.
|
|
152
|
-
2. **Sözlükleri Gönder** araması yapın.
|
|
153
|
-
3. Göndermek istediğiniz sözlükleri seçin ve onaylayın.
|
|
154
|
-
|
|
155
|
-
#### Sözlükleri Çekme
|
|
87
|
+
- **Sözlükleri Oluştur**
|
|
88
|
+
- **Sözlükleri Gönder**
|
|
89
|
+
- **Sözlükleri Çek**
|
|
90
|
+
- **Sözlükleri Doldur**
|
|
91
|
+
- **Sözlükleri Test Et**
|
|
92
|
+
- **Sözlük Dosyası Oluştur**
|
|
156
93
|
|
|
157
|
-
|
|
94
|
+
### Ortam Değişkenlerini Yükleme
|
|
158
95
|
|
|
159
|
-
|
|
160
|
-
2. **Sözlükleri Çek** araması yapın.
|
|
161
|
-
3. Çekmek istediğiniz sözlükleri seçin.
|
|
96
|
+
Intlayer, AI API anahtarlarınızı ve ayrıca Intlayer istemci kimliği ile gizli anahtarınızı ortam değişkenlerinde saklamanızı önerir.
|
|
162
97
|
|
|
163
|
-
|
|
98
|
+
Eklenti, Intlayer komutlarını doğru bağlamda çalıştırmak için çalışma alanınızdan ortam değişkenlerini yükleyebilir.
|
|
164
99
|
|
|
165
|
-
|
|
100
|
+
- **Yükleme sırası (öncelik sırasına göre)**: `.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **Yıkıcı olmayan**: mevcut `process.env` değerleri üzerine yazılmaz.
|
|
102
|
+
- **Kapsam**: dosyalar, yapılandırılmış temel dizinden çözülür (varsayılan olarak çalışma alanı kökü).
|
|
166
103
|
|
|
167
|
-
|
|
168
|
-
2. **Sözlükleri Doldur** araması yapın.
|
|
169
|
-
3. Sözlükleri doldurmak için komutu çalıştırın.
|
|
104
|
+
#### Aktif ortamı seçme
|
|
170
105
|
|
|
171
|
-
|
|
106
|
+
- **Komut Paleti**: paleti açın ve `Intlayer: Select Environment` komutunu çalıştırın, ardından ortamı seçin (örneğin, `development`, `staging`, `production`). Eklenti, yukarıdaki öncelik listesinde bulunan ilk uygun dosyayı yüklemeye çalışacak ve “.env.<env>.local dosyasından ortam yüklendi” gibi bir bildirim gösterecektir.
|
|
107
|
+
- **Ayarlar**: `Ayarlar → Eklentiler → Intlayer` yolunu izleyin ve şunları ayarlayın:
|
|
108
|
+
- **Ortam**: `.env.<env>*` dosyalarını çözümlemek için kullanılan ortam adı.
|
|
109
|
+
- (İsteğe bağlı) **Env Dosyası**: açıkça belirtilmiş bir `.env` dosyası yolu. Sağlandığında, çıkarılan listedeki dosyalardan öncelikli olarak kullanılır.
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
#### Monorepo ve özel dizinler
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
2. **Sözlükleri Test Et** araması yapın.
|
|
177
|
-
3. Raporlanan sorunları inceleyin ve gerektiği şekilde düzeltin.
|
|
113
|
+
Eğer `.env` dosyalarınız çalışma alanı kökünün dışında bulunuyorsa, `Ayarlar → Eklentiler → Intlayer` yolunda **Temel Dizin**i ayarlayın. Yükleyici, `.env` dosyalarını bu dizine göre arayacaktır.
|
|
178
114
|
|
|
179
115
|
## Doküman Geçmişi
|
|
180
116
|
|
|
181
|
-
| Sürüm | Tarih | Değişiklikler
|
|
182
|
-
| ------ | ---------- |
|
|
183
|
-
|
|
|
117
|
+
| Sürüm | Tarih | Değişiklikler |
|
|
118
|
+
| ------ | ---------- | ------------------------------------------ |
|
|
119
|
+
| 6.1.5 | 2025-09-30 | Demo gif eklendi |
|
|
120
|
+
| 6.1.0 | 2025-09-24 | Ortam seçimi bölümü eklendi |
|
|
121
|
+
| 6.0.0 | 2025-09-22 | Intlayer Sekmesi / Doldur & Test komutları |
|
|
122
|
+
| 5.5.10 | 2025-06-29 | Başlangıç geçmişi |
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
|
+
title: 在 React 和 Next.js 中制作多语言(i18n)组件
|
|
5
|
+
description: 学习如何声明和获取本地化内容,以使用 Intlayer 构建多语言 React 或 Next.js 组件。
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n
|
|
8
|
+
- 组件
|
|
9
|
+
- react
|
|
10
|
+
- 多语言
|
|
11
|
+
- next.js
|
|
12
|
+
- intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- component
|
|
16
|
+
- i18n
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# 如何使用 Intlayer 制作多语言(i18n)组件
|
|
22
|
+
|
|
23
|
+
本指南展示了在两种常见环境中制作多语言 UI 组件的最简步骤:
|
|
24
|
+
|
|
25
|
+
- React(Vite/单页应用)
|
|
26
|
+
- Next.js(应用路由)
|
|
27
|
+
|
|
28
|
+
您将首先声明内容,然后在组件中获取内容。
|
|
29
|
+
|
|
30
|
+
## 1) 声明您的内容(适用于 React 和 Next.js)
|
|
31
|
+
|
|
32
|
+
在组件附近创建一个内容声明文件。这可以让翻译内容靠近使用位置,并且支持类型安全。
|
|
33
|
+
|
|
34
|
+
```ts fileName="component.content.ts"
|
|
35
|
+
import { t, type Dictionary } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const componentContent = {
|
|
38
|
+
key: "component-example",
|
|
39
|
+
content: {
|
|
40
|
+
title: t({
|
|
41
|
+
en: "Hello",
|
|
42
|
+
fr: "Bonjour",
|
|
43
|
+
es: "Hola",
|
|
44
|
+
}),
|
|
45
|
+
description: t({
|
|
46
|
+
en: "A multilingual React component",
|
|
47
|
+
fr: "Un composant React multilingue",
|
|
48
|
+
es: "Un componente React multilingüe",
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
} satisfies Dictionary;
|
|
52
|
+
|
|
53
|
+
export default componentContent;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
如果您更喜欢配置文件,也支持 JSON 格式。
|
|
57
|
+
|
|
58
|
+
```json fileName="component.content.json"
|
|
59
|
+
{
|
|
60
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
61
|
+
"key": "component-example",
|
|
62
|
+
"content": {
|
|
63
|
+
"title": {
|
|
64
|
+
"nodeType": "translation",
|
|
65
|
+
"translation": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }
|
|
66
|
+
},
|
|
67
|
+
"description": {
|
|
68
|
+
"nodeType": "translation",
|
|
69
|
+
"translation": {
|
|
70
|
+
"en": "一个多语言的 React 组件",
|
|
71
|
+
"fr": "Un composant React multilingue",
|
|
72
|
+
"es": "Un componente React multilingüe"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 2) 获取您的内容
|
|
80
|
+
|
|
81
|
+
### 情况 A — React 应用 (Vite/SPA)
|
|
82
|
+
|
|
83
|
+
默认方法:使用 `useIntlayer` 通过键来获取内容。这使组件保持简洁且类型安全。
|
|
84
|
+
|
|
85
|
+
```tsx fileName="ComponentExample.tsx"
|
|
86
|
+
import { useIntlayer } from "react-intlayer";
|
|
87
|
+
|
|
88
|
+
export function ComponentExample() {
|
|
89
|
+
const content = useIntlayer("component-example");
|
|
90
|
+
return (
|
|
91
|
+
<div>
|
|
92
|
+
<h1>{content.title}</h1>
|
|
93
|
+
<p>{content.description}</p>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
服务器端渲染或在提供者外部使用时:使用 `react-intlayer/server`,并在需要时传入明确的 `locale`。
|
|
100
|
+
|
|
101
|
+
```tsx fileName="ServerRenderedExample.tsx"
|
|
102
|
+
import { useIntlayer } from "react-intlayer/server";
|
|
103
|
+
|
|
104
|
+
export function ServerRenderedExample({ locale }: { locale: string }) {
|
|
105
|
+
const content = useIntlayer("component-example", locale);
|
|
106
|
+
return (
|
|
107
|
+
<>
|
|
108
|
+
<h1>{content.title}</h1>
|
|
109
|
+
<p>{content.description}</p>
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
另一种方式:如果你更喜欢在调用处组织结构,可以使用 `useDictionary` 读取整个声明的对象。
|
|
116
|
+
|
|
117
|
+
```tsx fileName="ComponentWithDictionary.tsx"
|
|
118
|
+
import { useDictionary } from "react-intlayer";
|
|
119
|
+
import componentContent from "./component.content";
|
|
120
|
+
|
|
121
|
+
export function ComponentWithDictionary() {
|
|
122
|
+
const { title, description } = useDictionary(componentContent);
|
|
123
|
+
return (
|
|
124
|
+
<div>
|
|
125
|
+
<h1>{title}</h1>
|
|
126
|
+
<p>{description}</p>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 方案 B — Next.js(App 路由)
|
|
133
|
+
|
|
134
|
+
优先使用服务器组件以确保数据安全和性能。在服务器文件中使用来自 `next-intlayer/server` 的 `useIntlayer`,在客户端组件中使用来自 `next-intlayer` 的 `useIntlayer`。
|
|
135
|
+
|
|
136
|
+
```tsx fileName="app/[locale]/example/ServerComponent.tsx"
|
|
137
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
138
|
+
|
|
139
|
+
export default function ServerComponent() {
|
|
140
|
+
const content = useIntlayer("component-example");
|
|
141
|
+
return (
|
|
142
|
+
<>
|
|
143
|
+
<h1>{content.title}</h1>
|
|
144
|
+
<p>{content.description}</p>
|
|
145
|
+
</>
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```tsx fileName="app/[locale]/example/ClientComponent.tsx"
|
|
151
|
+
"use client";
|
|
152
|
+
|
|
153
|
+
import { useIntlayer } from "next-intlayer";
|
|
154
|
+
|
|
155
|
+
export function ClientComponent() {
|
|
156
|
+
const content = useIntlayer("component-example");
|
|
157
|
+
return (
|
|
158
|
+
<div>
|
|
159
|
+
<h1>{content.title}</h1>
|
|
160
|
+
<p>{content.description}</p>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
提示:对于页面元数据和 SEO,您还可以使用 `getIntlayer` 获取内容,并通过 `getMultilingualUrls` 生成多语言 URL。
|
|
167
|
+
|
|
168
|
+
## 为什么 Intlayer 的组件方法是最佳选择
|
|
169
|
+
|
|
170
|
+
- **内容共置**:内容声明与组件紧密相邻,减少偏差并提升设计系统中的复用性。
|
|
171
|
+
- **类型安全**:键和值结构均为强类型;缺失的翻译会在构建时而非运行时暴露。
|
|
172
|
+
- **服务器优先**:原生支持服务器组件,提升安全性和性能;客户端钩子依然保持良好的使用体验。
|
|
173
|
+
- **摇树优化**:仅打包组件实际使用的内容,保持大型应用的负载体积小。
|
|
174
|
+
- **开发体验与工具**:内置中间件、SEO助手,以及可选的可视化编辑器/AI翻译,简化日常工作流程。
|
|
175
|
+
|
|
176
|
+
请参阅针对 Next.js 的对比和模式总结:https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
177
|
+
|
|
178
|
+
## 相关指南和参考资料
|
|
179
|
+
|
|
180
|
+
- React 设置(Vite):https://intlayer.org/doc/environment/vite-and-react
|
|
181
|
+
- React Router v7:https://intlayer.org/doc/environment/vite-and-react/react-router-v7
|
|
182
|
+
- TanStack 入门:https://intlayer.org/doc/environment/vite-and-react/tanstack-start
|
|
183
|
+
- Next.js 设置:https://intlayer.org/doc/environment/nextjs
|
|
184
|
+
- 为什么选择 Intlayer 而不是 next-intl 或 next-i18next:https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer
|
|
185
|
+
|
|
186
|
+
这些页面包含端到端的设置、提供者、路由和 SEO 辅助工具。
|