@intlayer/docs 6.1.4 → 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 +1366 -75
- package/blog/ar/nextjs-multilingual-seo-comparison.md +364 -0
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +1288 -72
- package/blog/de/nextjs-multilingual-seo-comparison.md +362 -0
- 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 +583 -336
- package/blog/en/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1144 -37
- package/blog/en-GB/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1236 -64
- package/blog/es/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1142 -75
- package/blog/fr/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/hi/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1130 -55
- package/blog/it/nextjs-multilingual-seo-comparison.md +363 -0
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1150 -76
- package/blog/ja/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1139 -73
- package/blog/ko/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1143 -76
- package/blog/pt/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1150 -74
- package/blog/ru/nextjs-multilingual-seo-comparison.md +370 -0
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +2 -0
- package/blog/tr/nextjs-multilingual-seo-comparison.md +362 -0
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1152 -75
- package/blog/zh/nextjs-multilingual-seo-comparison.md +394 -0
- package/dist/cjs/generated/blog.entry.cjs +16 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +16 -0
- package/dist/esm/generated/blog.entry.mjs.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/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.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/interest_of_intlayer.md +2 -2
- 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/blog.entry.ts +16 -0
- package/src/generated/docs.entry.ts +16 -0
|
@@ -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 辅助工具。
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-17
|
|
3
|
-
updatedAt: 2025-09-
|
|
3
|
+
updatedAt: 2025-09-30
|
|
4
4
|
title: 官方 VS Code 扩展
|
|
5
|
-
description: 学习如何在 VS Code 中使用 Intlayer
|
|
5
|
+
description: 学习如何在 VS Code 中使用 Intlayer 扩展以提升您的开发工作流程。快速在本地化内容之间导航并高效管理您的词典。
|
|
6
6
|
keywords:
|
|
7
7
|
- VS Code 扩展
|
|
8
8
|
- Intlayer
|
|
@@ -23,92 +23,36 @@ slugs:
|
|
|
23
23
|
|
|
24
24
|
[**Intlayer**](https://marketplace.visualstudio.com/items?itemName=Intlayer.intlayer-vs-code-extension) 是 **Intlayer** 的官方 Visual Studio Code 扩展,旨在提升开发者在项目中处理本地化内容时的体验。
|
|
25
25
|
|
|
26
|
-

|
|
26
|
+

|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
扩展链接: [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
|
## 功能
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+

|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
**无缝集成** – 与 **react-intlayer** 和 **next-intlayer** 项目完美配合。
|
|
36
|
-
**多语言支持** – 支持不同语言的本地化内容。
|
|
37
|
-
**VS Code 集成** – 与 VS Code 的导航和命令面板无缝集成。
|
|
38
|
-
|
|
39
|
-
### 词典管理命令
|
|
40
|
-
|
|
41
|
-
直接在 VS Code 中管理您的内容词典:
|
|
42
|
-
|
|
43
|
-
- **构建词典** – 根据您的项目结构生成内容文件。
|
|
44
|
-
- **推送词典** – 将最新的词典内容上传到您的代码仓库。
|
|
45
|
-
- **拉取词典** – 从代码仓库同步最新的词典内容到本地环境。
|
|
34
|
+
- **即时导航** – 点击 `useIntlayer` 键时,快速跳转到正确的内容文件。
|
|
46
35
|
- **填充词典** – 使用项目中的内容填充词典。
|
|
47
|
-
- **测试词典** – 识别缺失或不完整的翻译。
|
|
48
|
-
|
|
49
|
-
### 内容声明生成器
|
|
50
|
-
|
|
51
|
-
轻松生成不同格式的结构化词典文件:
|
|
52
|
-
|
|
53
|
-
如果您当前正在开发一个组件,它会为您生成 `.content.{ts,tsx,js,jsx,mjs,cjs,json}` 文件。
|
|
54
|
-
|
|
55
|
-
组件示例:
|
|
56
|
-
|
|
57
|
-
```tsx fileName="src/components/MyComponent/index.tsx"
|
|
58
|
-
const MyComponent = () => {
|
|
59
|
-
const { myTranslatedContent } = useIntlayer("my-component");
|
|
60
36
|
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
生成的 TypeScript 格式文件:
|
|
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
|
-
};
|
|
37
|
+

|
|
80
38
|
|
|
81
|
-
|
|
82
|
-
```
|
|
39
|
+
- **轻松访问 Intlayer 命令** – 轻松构建、推送、拉取、填充和测试内容词典。
|
|
83
40
|
|
|
84
|
-
|
|
41
|
+

|
|
85
42
|
|
|
86
|
-
-
|
|
87
|
-
- **ES 模块 (`.esm`)**
|
|
88
|
-
- **CommonJS (`.cjs`)**
|
|
89
|
-
- **JSON (`.json`)**
|
|
43
|
+
- **内容声明生成器** – 以多种格式创建词典内容文件(`.ts`、`.esm`、`.cjs`、`.json`)。
|
|
90
44
|
|
|
91
|
-
|
|
45
|
+

|
|
92
46
|
|
|
93
|
-
|
|
47
|
+
- **测试词典** – 测试词典中缺失的翻译。
|
|
94
48
|
|
|
95
|
-
-
|
|
96
|
-
- **字典**:一个树状视图,显示您的环境/项目、字典键以及贡献条目的文件。您可以:
|
|
97
|
-
- 点击文件以在编辑器中打开它。
|
|
98
|
-
- 使用工具栏执行操作:构建、拉取、推送、填充、刷新、测试和创建字典文件。
|
|
99
|
-
- 使用上下文菜单执行特定项目操作:
|
|
100
|
-
- 在字典上:拉取或推送
|
|
101
|
-
- 在文件上:填充字典
|
|
102
|
-
- 当您切换编辑器时,如果文件属于某个字典,树状视图会自动展开显示该文件。
|
|
49
|
+

|
|
103
50
|
|
|
104
|
-
|
|
51
|
+
- **保持词典最新** – 使您的词典内容保持与项目最新内容同步。
|
|
105
52
|
|
|
106
|
-
|
|
53
|
+

|
|
107
54
|
|
|
108
|
-
|
|
109
|
-
2. 进入 **扩展市场**。
|
|
110
|
-
3. 搜索 **"Intlayer"**。
|
|
111
|
-
4. 点击 **安装**。
|
|
55
|
+
- **Intlayer 侧边栏标签 (活动栏)** – 通过专用侧边标签浏览和搜索词典,带有工具栏和上下文操作(构建、拉取、推送、填充、刷新、测试、创建文件)。
|
|
112
56
|
|
|
113
57
|
## 使用方法
|
|
114
58
|
|
|
@@ -121,63 +65,65 @@ export default componentContent;
|
|
|
121
65
|
const content = useIntlayer("app");
|
|
122
66
|
```
|
|
123
67
|
|
|
124
|
-
3.
|
|
68
|
+
3. **命令点击**(macOS 上为 `⌘+点击`,Windows/Linux 上为 **Ctrl+点击**)键(例如 `"app"`)。
|
|
125
69
|
4. VS Code 会自动打开对应的字典文件,例如 `src/app.content.ts`。
|
|
126
70
|
|
|
127
|
-
### 管理内容字典
|
|
128
|
-
|
|
129
71
|
### Intlayer 侧边栏(活动栏)
|
|
130
72
|
|
|
131
73
|
使用侧边栏浏览和管理字典:
|
|
132
74
|
|
|
133
75
|
- 打开活动栏中的 Intlayer 图标。
|
|
134
|
-
-
|
|
135
|
-
-
|
|
76
|
+
- 在 **搜索** 中输入内容,实时过滤字典和条目。
|
|
77
|
+
- 在 **字典** 中浏览环境、字典和文件。使用工具栏进行构建(Build)、拉取(Pull)、推送(Push)、填充(Fill)、刷新(Refresh)、测试(Test)和创建字典文件。右键点击可进行上下文操作(字典上的拉取/推送,文件上的填充)。当前编辑器文件在适用时会自动在树中高亮显示。
|
|
136
78
|
|
|
137
|
-
|
|
79
|
+
### 访问命令
|
|
138
80
|
|
|
139
|
-
|
|
81
|
+
你可以通过 **命令面板** 访问这些命令。
|
|
140
82
|
|
|
141
83
|
```sh
|
|
142
84
|
Cmd + Shift + P(macOS)/ Ctrl + Shift + P(Windows/Linux)
|
|
143
85
|
```
|
|
144
86
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
87
|
+
- **构建字典**
|
|
88
|
+
- **推送字典**
|
|
89
|
+
- **拉取字典**
|
|
90
|
+
- **填充字典**
|
|
91
|
+
- **测试字典**
|
|
92
|
+
- **创建字典文件**
|
|
150
93
|
|
|
151
|
-
|
|
152
|
-
2. 搜索**推送词典**。
|
|
153
|
-
3. 选择要推送的词典并确认。
|
|
94
|
+
### 加载环境变量
|
|
154
95
|
|
|
155
|
-
|
|
96
|
+
Intlayer 建议将您的 AI API 密钥,以及 Intlayer 客户端 ID 和密钥存储在环境变量中。
|
|
156
97
|
|
|
157
|
-
|
|
98
|
+
该扩展可以从您的工作区加载环境变量,以便在正确的上下文中运行 Intlayer 命令。
|
|
158
99
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
100
|
+
- **加载顺序(优先级)**:`.env.<env>.local` → `.env.<env>` → `.env.local` → `.env`
|
|
101
|
+
- **非破坏性**:不会覆盖已有的 `process.env` 值。
|
|
102
|
+
- **作用域**:文件从配置的基础目录解析(默认为工作区根目录)。
|
|
162
103
|
|
|
163
|
-
####
|
|
104
|
+
#### 选择活动环境
|
|
164
105
|
|
|
165
|
-
|
|
106
|
+
- **命令面板**:打开命令面板并运行 `Intlayer: Select Environment`,然后选择环境(例如,`development`、`staging`、`production`)。扩展将尝试加载上述优先级列表中第一个可用的文件,并显示类似“已从 .env.<env>.local 加载环境”的通知。
|
|
107
|
+
- **设置**:进入 `设置 → 扩展 → Intlayer`,并设置:
|
|
108
|
+
- **环境**:用于解析 `.env.<env>*` 文件的环境名称。
|
|
109
|
+
- (可选)**环境文件**:显式指定一个 `.env` 文件路径。提供后,该路径优先于推断的列表。
|
|
166
110
|
|
|
167
|
-
|
|
168
|
-
2. 搜索 **填充词典(Fill Dictionaries)**。
|
|
169
|
-
3. 运行命令以填充词典。
|
|
111
|
+
#### Monorepos 和自定义目录
|
|
170
112
|
|
|
171
|
-
|
|
113
|
+
- **命令面板**:打开命令面板并运行 `Intlayer: Select Environment`,然后选择环境(例如,`development`、`staging`、`production`)。扩展将尝试加载上述优先列表中的第一个可用文件,并显示类似“已从 .env.<env>.local 加载环境”的通知。
|
|
114
|
+
- **设置**:进入 `设置 → 扩展 → Intlayer`,并设置:
|
|
115
|
+
- **环境**:用于解析 `.env.<env>*` 文件的环境名称。
|
|
116
|
+
- (可选)**Env 文件**:显式指定一个 `.env` 文件路径。提供后,该路径优先于推断的列表。
|
|
172
117
|
|
|
173
|
-
|
|
118
|
+
#### 多包仓库和自定义目录
|
|
174
119
|
|
|
175
|
-
|
|
176
|
-
2. 搜索 **测试词典(Test Dictionaries)**。
|
|
177
|
-
3. 查看报告的问题并进行修复。
|
|
120
|
+
如果你的 `.env` 文件位于工作区根目录之外,请在 `设置 → 扩展 → Intlayer` 中设置 **基础目录**。加载器将相对于该目录查找 `.env` 文件。
|
|
178
121
|
|
|
179
122
|
## 文档历史
|
|
180
123
|
|
|
181
|
-
| 版本 | 日期 |
|
|
182
|
-
| ------ | ---------- |
|
|
183
|
-
|
|
|
124
|
+
| 版本 | 日期 | 变更内容 |
|
|
125
|
+
| ------ | ---------- | -------------------------------- |
|
|
126
|
+
| 6.1.5 | 2025-09-30 | 添加演示动图 |
|
|
127
|
+
| 6.1.0 | 2025-09-24 | 新增环境选择章节 |
|
|
128
|
+
| 6.0.0 | 2025-09-22 | Intlayer 标签页 / 填充与测试命令 |
|
|
129
|
+
| 5.5.10 | 2025-06-29 | 初始化历史 |
|