@intlayer/docs 7.0.4-canary.0 → 7.0.4

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.
Files changed (107) hide show
  1. package/blog/ar/intlayer_with_i18next.md +68 -106
  2. package/blog/ar/intlayer_with_next-i18next.md +84 -288
  3. package/blog/ar/intlayer_with_next-intl.md +58 -337
  4. package/blog/ar/intlayer_with_react-i18next.md +68 -290
  5. package/blog/ar/intlayer_with_react-intl.md +63 -266
  6. package/blog/de/intlayer_with_i18next.md +77 -97
  7. package/blog/de/intlayer_with_next-i18next.md +69 -296
  8. package/blog/de/intlayer_with_next-intl.md +59 -340
  9. package/blog/de/intlayer_with_react-i18next.md +68 -290
  10. package/blog/de/intlayer_with_react-intl.md +62 -264
  11. package/blog/en/intlayer_with_i18next.md +36 -1638
  12. package/blog/en/intlayer_with_next-i18next.md +22 -847
  13. package/blog/en/intlayer_with_next-intl.md +32 -1053
  14. package/blog/en/intlayer_with_react-i18next.md +38 -764
  15. package/blog/en/intlayer_with_react-intl.md +42 -1018
  16. package/blog/en-GB/intlayer_with_i18next.md +67 -103
  17. package/blog/en-GB/intlayer_with_next-i18next.md +71 -292
  18. package/blog/en-GB/intlayer_with_next-intl.md +58 -337
  19. package/blog/en-GB/intlayer_with_react-i18next.md +67 -289
  20. package/blog/en-GB/intlayer_with_react-intl.md +61 -264
  21. package/blog/es/intlayer_with_i18next.md +67 -103
  22. package/blog/es/intlayer_with_next-i18next.md +71 -296
  23. package/blog/es/intlayer_with_next-intl.md +57 -338
  24. package/blog/es/intlayer_with_react-i18next.md +68 -290
  25. package/blog/es/intlayer_with_react-intl.md +62 -265
  26. package/blog/fr/intlayer_with_i18next.md +66 -104
  27. package/blog/fr/intlayer_with_next-i18next.md +82 -285
  28. package/blog/fr/intlayer_with_next-intl.md +57 -338
  29. package/blog/fr/intlayer_with_react-i18next.md +67 -289
  30. package/blog/fr/intlayer_with_react-intl.md +61 -264
  31. package/blog/hi/intlayer_with_i18next.md +68 -104
  32. package/blog/hi/intlayer_with_next-i18next.md +74 -299
  33. package/blog/hi/intlayer_with_next-intl.md +57 -239
  34. package/blog/hi/intlayer_with_react-i18next.md +69 -291
  35. package/blog/hi/intlayer_with_react-intl.md +65 -268
  36. package/blog/id/intlayer_with_i18next.md +126 -0
  37. package/blog/id/intlayer_with_next-i18next.md +142 -0
  38. package/blog/id/intlayer_with_next-intl.md +113 -0
  39. package/blog/id/intlayer_with_react-i18next.md +124 -0
  40. package/blog/id/intlayer_with_react-intl.md +122 -0
  41. package/blog/it/intlayer_with_i18next.md +67 -103
  42. package/blog/it/intlayer_with_next-i18next.md +71 -296
  43. package/blog/it/intlayer_with_next-intl.md +57 -338
  44. package/blog/it/intlayer_with_react-i18next.md +68 -290
  45. package/blog/it/intlayer_with_react-intl.md +62 -265
  46. package/blog/ja/intlayer_with_i18next.md +68 -103
  47. package/blog/ja/intlayer_with_next-i18next.md +85 -283
  48. package/blog/ja/intlayer_with_next-intl.md +58 -336
  49. package/blog/ja/intlayer_with_react-i18next.md +68 -290
  50. package/blog/ja/intlayer_with_react-intl.md +62 -264
  51. package/blog/ko/intlayer_with_i18next.md +80 -96
  52. package/blog/ko/intlayer_with_next-i18next.md +85 -287
  53. package/blog/ko/intlayer_with_next-intl.md +68 -327
  54. package/blog/ko/intlayer_with_react-i18next.md +68 -290
  55. package/blog/ko/intlayer_with_react-intl.md +64 -266
  56. package/blog/pl/intlayer_with_i18next.md +126 -0
  57. package/blog/pl/intlayer_with_next-i18next.md +142 -0
  58. package/blog/pl/intlayer_with_next-intl.md +111 -0
  59. package/blog/pl/intlayer_with_react-i18next.md +124 -0
  60. package/blog/pl/intlayer_with_react-intl.md +122 -0
  61. package/blog/pt/intlayer_with_i18next.md +67 -103
  62. package/blog/pt/intlayer_with_next-i18next.md +72 -293
  63. package/blog/pt/intlayer_with_next-intl.md +57 -256
  64. package/blog/pt/intlayer_with_react-i18next.md +104 -78
  65. package/blog/pt/intlayer_with_react-intl.md +62 -266
  66. package/blog/ru/intlayer_with_i18next.md +66 -104
  67. package/blog/ru/intlayer_with_next-i18next.md +71 -296
  68. package/blog/ru/intlayer_with_next-intl.md +58 -337
  69. package/blog/ru/intlayer_with_react-i18next.md +68 -290
  70. package/blog/ru/intlayer_with_react-intl.md +62 -265
  71. package/blog/tr/intlayer_with_i18next.md +71 -107
  72. package/blog/tr/intlayer_with_next-i18next.md +72 -297
  73. package/blog/tr/intlayer_with_next-intl.md +58 -339
  74. package/blog/tr/intlayer_with_react-i18next.md +69 -291
  75. package/blog/tr/intlayer_with_react-intl.md +63 -285
  76. package/blog/vi/intlayer_with_i18next.md +126 -0
  77. package/blog/vi/intlayer_with_next-i18next.md +142 -0
  78. package/blog/vi/intlayer_with_next-intl.md +111 -0
  79. package/blog/vi/intlayer_with_react-i18next.md +124 -0
  80. package/blog/vi/intlayer_with_react-intl.md +122 -0
  81. package/blog/zh/intlayer_with_i18next.md +67 -102
  82. package/blog/zh/intlayer_with_next-i18next.md +72 -296
  83. package/blog/zh/intlayer_with_next-intl.md +58 -336
  84. package/blog/zh/intlayer_with_react-i18next.md +68 -290
  85. package/blog/zh/intlayer_with_react-intl.md +63 -106
  86. package/docs/ar/plugins/sync-json.md +244 -0
  87. package/docs/de/plugins/sync-json.md +244 -0
  88. package/docs/en/intlayer_cli.md +25 -0
  89. package/docs/en/intlayer_with_nextjs_14.md +2 -0
  90. package/docs/en/intlayer_with_nextjs_15.md +2 -0
  91. package/docs/en/intlayer_with_nextjs_16.md +2 -0
  92. package/docs/en/plugins/sync-json.md +1 -1
  93. package/docs/en-GB/plugins/sync-json.md +244 -0
  94. package/docs/es/plugins/sync-json.md +244 -0
  95. package/docs/fr/plugins/sync-json.md +244 -0
  96. package/docs/hi/plugins/sync-json.md +244 -0
  97. package/docs/id/plugins/sync-json.md +244 -0
  98. package/docs/it/plugins/sync-json.md +244 -0
  99. package/docs/ja/plugins/sync-json.md +244 -0
  100. package/docs/ko/plugins/sync-json.md +244 -0
  101. package/docs/pl/plugins/sync-json.md +244 -0
  102. package/docs/pt/plugins/sync-json.md +244 -0
  103. package/docs/ru/plugins/sync-json.md +244 -0
  104. package/docs/tr/plugins/sync-json.md +245 -0
  105. package/docs/vi/plugins/sync-json.md +244 -0
  106. package/docs/zh/plugins/sync-json.md +244 -0
  107. package/package.json +14 -14
@@ -1,345 +1,123 @@
1
1
  ---
2
- createdAt: 2025-09-07
3
- updatedAt: 2025-09-07
4
- title: Intlayer ve react-intl
5
- description: React uygulaması için Intlayer react-intl ile entegre edin
2
+ createdAt: 2025-01-02
3
+ updatedAt: 2025-10-29
4
+ title: Intlayer kullanarak react-intl JSON çevirilerinizi nasıl otomatikleştirirsiniz
5
+ description: React uygulamalarında gelişmiş uluslararasılaştırma için Intlayer ve react-intl ile JSON çevirilerinizi otomatikleştirin.
6
6
  keywords:
7
7
  - react-intl
8
8
  - Intlayer
9
- - Internationalization
9
+ - Uluslararasılaştırma
10
10
  - Blog
11
- - Next.js
11
+ - i18n
12
12
  - JavaScript
13
13
  - React
14
+ - FormatJS
14
15
  slugs:
15
16
  - blog
16
17
  - intlayer-with-react-intl
18
+ history:
19
+ - version: 7.0.0
20
+ date: 2025-10-29
21
+ changes: syncJSON eklentisine geçiş
17
22
  ---
18
23
 
19
- # React Uluslararasılaştırma (i18n) ile **react-intl** ve Intlayer
24
+ # Intlayer kullanarak react-intl JSON çevirilerinizi nasıl otomatikleştirirsiniz
20
25
 
21
- Bu rehber, React uygulamasında çevirileri yönetmek için **Intlayer**'ı **react-intl** ile nasıl entegre edeceğinizi gösterir. Çevrilebilir içeriğinizi Intlayer ile beyan edeceksiniz ve ardından bu mesajları **react-intl** ile tüketeceksiniz, [FormatJS](https://formatjs.io/docs/react-intl) ekosisteminden popüler bir kütüphane.
26
+ ## Intlayer nedir?
22
27
 
23
- ## Genel Bakış
28
+ **Intlayer**, geleneksel i18n çözümlerinin eksikliklerini gidermek için tasarlanmış yenilikçi, açık kaynaklı bir uluslararasılaştırma kütüphanesidir. React uygulamalarında içerik yönetimi için modern bir yaklaşım sunar.
24
29
 
25
- - **Intlayer**, çevirileri projenizde **bileşen düzeyinde** içerik beyan dosyalarında (JSON, JS, TS vb.) saklamanıza izin verir.
26
- - **react-intl**, yerelleştirilmiş dizeleri görüntülemek için React bileşenleri ve hook'lar ( `<FormattedMessage>` ve `useIntl()` gibi) sağlar.
30
+ react-intl ile somut bir karşılaştırma için [react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/en/react-i18next_vs_react-intl_vs_intlayer.md) blog yazımıza bakabilirsiniz.
27
31
 
28
- Intlayer'ı çevirileri **react-intl–uyumlu** bir formatta **dışa aktarmak** için yapılandırarak, `<IntlProvider>` (react-intl'den) tarafından gereken mesaj dosyalarını otomatik olarak **oluşturabilir** ve **güncelleyebilirsiniz**.
32
+ ## Neden Intlayer'ı react-intl ile Birleştirmelisiniz?
29
33
 
30
- ---
34
+ Intlayer mükemmel bir bağımsız i18n çözümü sunarken (bakınız [React entegrasyon rehberimiz](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_with_vite+react.md)), react-intl ile birkaç nedenle birleştirmek isteyebilirsiniz:
31
35
 
32
- ## Neden Intlayer'ı react-intl ile Kullanmalı?
36
+ 1. **Mevcut kod tabanı**: Yerleşik bir react-intl uygulamanız var ve Intlayer'ın geliştirilmiş geliştirici deneyimine kademeli olarak geçmek istiyorsunuz.
37
+ 2. **Eski gereksinimler**: Projeniz mevcut react-intl eklentileri veya iş akışları ile uyumluluk gerektiriyor.
38
+ 3. **Ekip aşinalığı**: Ekibiniz react-intl ile rahat ancak daha iyi içerik yönetimi istiyor.
33
39
 
34
- 1. **Bileşen Başına Sözlükler**
35
- Intlayer içerik beyan dosyaları React bileşenlerinizin yanında yaşayabilir, bileşenler taşındığında veya kaldırıldığında "yetim" çevirileri önler. Örneğin:
40
+ **Bunun için, Intlayer react-intl için bir adaptör olarak uygulanabilir; böylece JSON çevirilerinizi CLI veya CI/CD boru hatlarında otomatikleştirebilir, çevirilerinizi test edebilir ve daha fazlasını yapabilirsiniz.**
36
41
 
37
- ```bash
38
- .
39
- └── src
40
- └── components
41
- └── MyComponent
42
- ├── index.content.ts # Intlayer içerik beyan
43
- └── index.tsx # React bileşeni
44
- ```
42
+ Bu rehber, Intlayer'ın üstün içerik beyan sistemi avantajlarından yararlanırken react-intl ile uyumluluğu nasıl koruyacağınızı gösterir.
45
43
 
46
- 2. **Merkezi Çeviriler**
47
- Her içerik beyan dosyası bir bileşen tarafından ihtiyaç duyulan tüm çevirileri toplar. Bu, özellikle TypeScript projelerinde yardımcı olur: eksik çeviriler **derleme zamanında** yakalanabilir.
44
+ ## İçindekiler
48
45
 
49
- 3. **Otomatik Oluşturma ve Yeniden Oluşturma**
50
- Çeviri eklediğinizde veya güncellediğinizde, Intlayer mesaj JSON dosyalarını yeniden oluşturur. Bunları react-intl’in `<IntlProvider>`'ına geçebilirsiniz.
46
+ <TOC/>
51
47
 
52
- ---
48
+ ## Intlayer'ı react-intl ile Kurmak İçin Adım Adım Rehber
53
49
 
54
- ## Kurulum
50
+ ### Adım 1: Bağımlılıkları Yükleyin
55
51
 
56
- Tipik bir React projesinde şunları yükleyin:
52
+ Gerekli paketleri yükleyin:
57
53
 
58
- ```bash
59
- # npm ile
60
- npm install intlayer react-intl
54
+ ```bash packageManager="npm"
55
+ npm install intlayer @intlayer/sync-json-plugin
56
+ ```
61
57
 
62
- # yarn ile
63
- yarn add intlayer react-intl
58
+ ```bash packageManager="pnpm"
59
+ pnpm add intlayer @intlayer/sync-json-plugin
60
+ ```
64
61
 
65
- # pnpm ile
66
- pnpm add intlayer react-intl
62
+ ```bash packageManager="yarn"
63
+ yarn add intlayer @intlayer/sync-json-plugin
67
64
  ```
68
65
 
69
- ### Bu Paketler Neden?
66
+ **Paket açıklamaları:**
70
67
 
71
- - **intlayer**: İçerik beyanlarını tarar, birleştirir ve sözlük çıktılarını oluşturur.
72
- - **react-intl**: FormatJS'ten ana kütüphane, `<IntlProvider>`, `<FormattedMessage>`, `useIntl()` ve diğer uluslararasılaştırma primitiflerini sağlar.
68
+ - **intlayer**: Uluslararasılaştırma yönetimi, içerik beyanı ve oluşturma için temel kütüphane
69
+ - **@intlayer/sync-json-plugin**: Intlayer içerik beyanlarını react-intl uyumlu JSON formatına aktarmak için eklenti
73
70
 
74
- > React'i henüz yüklemediyseniz, onu da yüklemeniz gerekir (`react` ve `react-dom`).
71
+ ### Adım 2: JSON'u sarmak için Intlayer eklentisini uygulayın
75
72
 
76
- ## react-intl Mesajlarını Dışa Aktarmak İçin Intlayer Yapılandırma
73
+ Desteklenen yerel ayarları tanımlamak için bir Intlayer yapılandırma dosyası oluşturun:
77
74
 
78
- Projenizin kökünde **`intlayer.config.ts`** (veya `.js`, `.mjs`, `.cjs`) oluşturun:
75
+ **Eğer react-intl için JSON sözlüklerini de dışa aktarmak istiyorsanız**, `syncJSON` eklentisini ekleyin:
79
76
 
80
- ```typescript title="intlayer.config.ts"
77
+ ```typescript fileName="intlayer.config.ts"
81
78
  import { Locales, type IntlayerConfig } from "intlayer";
79
+ import { syncJSON } from "@intlayer/sync-json-plugin";
82
80
 
83
81
  const config: IntlayerConfig = {
84
82
  internationalization: {
85
- // İstediğiniz kadar yerel ekleyin
86
83
  locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
87
84
  defaultLocale: Locales.ENGLISH,
88
85
  },
89
- content: {
90
- // Intlayer'a react-intl için mesaj dosyaları oluşturmasını söyler
91
- dictionaryOutput: ["react-intl"],
92
-
93
- // Intlayer'ın mesaj JSON dosyalarınızı yazacağı dizin
94
- reactIntlMessagesDir: "./react-intl/messages",
95
- },
86
+ plugins: [
87
+ syncJSON({
88
+ source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
89
+ }),
90
+ ],
96
91
  };
97
92
 
98
93
  export default config;
99
94
  ```
100
95
 
101
- > **Not**: Diğer dosya uzantıları için (`.mjs`, `.cjs`, `.js`), kullanım detayları için [Intlayer dokümantasyonuna](https://intlayer.org/en/doc/concept/configuration) bakın.
102
-
103
- ---
104
-
105
- ## Intlayer Sözlüklerinizi Oluşturma
106
-
107
- Intlayer kod tabanınızı (varsayılan olarak `./src` altında) `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}` ile eşleşen dosyalar için tarar.
108
- **TypeScript** örneği burada:
109
-
110
- ```typescript title="src/components/MyComponent/index.content.ts"
111
- import { t, type Dictionary } from "intlayer";
112
-
113
- const content = {
114
- // "key" react-intl JSON dosyanızda üst düzey mesaj anahtarı olur
115
- key: "my-component",
116
-
117
- content: {
118
- // t() çağrısının her biri çevrilebilir bir alan beyan eder
119
- helloWorld: t({
120
- en: "Hello World",
121
- es: "Hola Mundo",
122
- fr: "Bonjour le monde",
123
- }),
124
- description: t({
125
- en: "This is a description",
126
- fr: "Ceci est une description",
127
- es: "Esta es una descripción",
128
- }),
129
- },
130
- } satisfies Dictionary;
131
-
132
- export default content;
133
- ```
134
-
135
- JSON veya farklı JS türlerini tercih ederseniz (`.cjs`, `.mjs`), yapı büyük ölçüde aynıdır, bkz. [Intlayer içerik beyan dokümantasyonu](https://intlayer.org/en/doc/concept/content).
136
-
137
- ---
138
-
139
- ## react-intl Mesajlarını Oluşturma
140
-
141
- **react-intl** için gerçek mesaj JSON dosyalarını oluşturmak için şunu çalıştırın:
142
-
143
- ```bash
144
- # npm ile
145
- npx intlayer dictionaries build
146
-
147
- # yarn ile
148
- yarn intlayer build
149
-
150
- # pnpm ile
151
- pnpm intlayer build
152
- ```
153
-
154
- Bu, tüm `*.content.*` dosyalarını tarar, derler ve sonuçları **`intlayer.config.ts`**'inizde belirtilen dizine yazar, bu örnekte `./react-intl/messages`.
155
- Tipik bir çıktı şöyle görünebilir:
156
-
157
- ```bash
158
- .
159
- └── react-intl
160
- └── messages
161
- ├── en.json
162
- ├── fr.json
163
- └── es.json
164
- ```
165
-
166
- Her dosya, beyanlarınızın her **`content.key`**'ine karşılık gelen **üst düzey anahtarlara** sahip bir JSON nesnesidir. **Alt anahtarlar** ( `helloWorld` gibi) o içerik öğesi içinde beyan edilen çevirileri yansıtır.
167
-
168
- Örneğin, **en.json** şöyle görünebilir:
169
-
170
- ```json fileName="react-intl/messages/en/my-component.json"
171
- {
172
- "helloWorld": "Hello World",
173
- "description": "This is a description"
174
- }
175
- ```
176
-
177
- ---
178
-
179
- ## React Uygulamanızda react-intl'i Başlatma
180
-
181
- ### 1. Oluşturulan Mesajları Yükleyin
182
-
183
- Uygulamanızın kök bileşenini yapılandırdığınız yerde (örneğin, `src/main.tsx` veya `src/index.tsx`), şunları yapmanız gerekir:
184
-
185
- 1. **İçe aktarın** oluşturulan mesaj dosyalarını (statik olarak veya dinamik olarak).
186
- 2. **Sağlayın** bunları `react-intl`'den `<IntlProvider>`'a.
187
-
188
- Basit bir yaklaşım onları **statik olarak** içe aktarmaktır:
189
-
190
- ```typescript title="src/index.tsx"
191
- import React from "react";
192
- import ReactDOM from "react-dom/client";
193
- import { IntlProvider } from "react-intl";
194
- import App from "./App";
195
-
196
- // Yapı çıktısından JSON dosyalarını içe aktarın.
197
- // Alternatif olarak, kullanıcının seçtiği yerele göre dinamik olarak içe aktarabilirsiniz.
198
- import en from "../react-intl/messages/en.json";
199
- import fr from "../react-intl/messages/fr.json";
200
- import es from "../react-intl/messages/es.json";
96
+ `syncJSON` eklentisi JSON'u otomatik olarak saracaktır. İçerik mimarisini değiştirmeden JSON dosyalarını okuyup yazar.
201
97
 
98
+ Eğer bu JSON'un intlayer içerik beyan dosyaları (`.content` dosyaları) ile birlikte var olmasını istiyorsanız, Intlayer şu şekilde ilerleyecektir:
202
99
 
100
+ 1. Hem JSON hem de içerik beyan dosyalarını yükleyip bunları bir intlayer sözlüğüne dönüştürür.
203
101
 
204
- // Vite'nin import.meta.glob kullanarak tüm JSON dosyalarını dinamik olarak içe aktarın
205
- const messages = import.meta.glob("../react-intl/messages/**/*.json", {
206
- eager: true,
207
- });
102
+ 2. JSON ile içerik beyan dosyaları arasında çakışma varsa, Intlayer tüm sözlükleri birleştirme işlemini gerçekleştirecektir. Bu, eklentilerin önceliğine ve içerik beyan dosyasının önceliğine bağlıdır (tüm öncelikler yapılandırılabilir).
208
103
 
209
- // Mesajları yapılandırılmış bir kayda toplayın
210
- const messagesRecord: Record<string, Record<string, any>> = {};
104
+ JSON'u çevirmek için CLI kullanılarak veya CMS aracılığıyla değişiklik yapılırsa, Intlayer JSON dosyasını yeni çevirilerle güncelleyecektir.
211
105
 
212
- Object.entries(messages).forEach(([path, module]) => {
213
- // Dosya yolundan yerel ve ad alanını çıkarın
214
- const [, locale, namespace] = path.match(/messages\/(\w+)\/(.+?)\.json$/) ?? [];
215
- if (locale && namespace) {
216
- messagesRecord[locale] = messagesRecord[locale] ?? {};
217
- messagesRecord[locale][namespace] = module.default; // JSON içeriğini atayın
218
- }
219
- });
106
+ `syncJSON` eklentisi hakkında daha fazla ayrıntı için lütfen [syncJSON eklenti dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/plugins/sync-json.md) bakınız.
220
107
 
221
- // Her yerel için ad alanlarını birleştirin
222
- const mergeMessages = (locale: string) =>
223
- Object.values(messagesRecord[locale] ?? {}).reduce(
224
- (acc, namespaceMessages) => ({ ...acc, ...namespaceMessages }),
225
- {}
226
- );
227
-
228
- // Kullanıcının dilini algılamak için bir mekanizmanız varsa, burada ayarlayın.
229
- // Basitlik için İngilizce'yi seçelim.
230
- const locale = "en";
231
-
232
-
233
- ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
234
- <React.StrictMode>
235
- <IntlProvider locale={locale} messages={mergeMessages(locale)}>
236
- <App />
237
- </IntlProvider>
238
- </React.StrictMode>
239
- );
240
- ```
241
-
242
- > **İpucu**: Gerçek projeler için şunları yapabilirsiniz:
243
-
244
- > - JSON mesajlarını çalışma zamanında dinamik olarak yükleyin.
245
- > - Ortama dayalı, tarayıcıya dayalı veya kullanıcı hesabına dayalı yerel algılama kullanın.
246
-
247
- ### 2. `<FormattedMessage>` veya `useIntl()` Kullanın
248
-
249
- Mesajlarınız `<IntlProvider>`'a yüklendikten sonra, herhangi bir alt bileşen react-intl'i yerelleştirilmiş dizelere erişmek için kullanabilir. İki ana yaklaşım vardır:
250
-
251
- - **`<FormattedMessage>`** bileşeni
252
- - **`useIntl()`** hook'u
253
-
254
- ---
255
-
256
- ## React Bileşenlerinde Çevirileri Kullanma
257
-
258
- ### Yaklaşım A: `<FormattedMessage>`
259
-
260
- Hızlı satır içi kullanım için:
261
-
262
- ```tsx title="src/components/MyComponent/index.tsx"
263
- import React from "react";
264
- import { FormattedMessage } from "react-intl";
265
-
266
- export default function MyComponent() {
267
- return (
268
- <div>
269
- <h1>
270
- {/* “my-component.helloWorld” en.json, fr.json vb.'den anahtara başvurur */}
271
- <FormattedMessage id="my-component.helloWorld" />
272
- </h1>
273
-
274
- <p>
275
- <FormattedMessage id="my-component.description" />
276
- </p>
277
- </div>
278
- );
279
- }
280
- ```
281
-
282
- > `<FormattedMessage>`'teki **`id`** prop'u **üst düzey anahtar** (`my-component`) artı herhangi bir alt anahtar (`helloWorld`) ile eşleşmelidir.
283
-
284
- ### Yaklaşım B: `useIntl()`
285
-
286
- Daha dinamik kullanım için:
287
-
288
- ```tsx title="src/components/MyComponent/index.tsx"
289
- import React from "react";
290
- import { useIntl } from "react-intl";
291
-
292
- export default function MyComponent() {
293
- const intl = useIntl();
294
-
295
- return (
296
- <div>
297
- <h1>{intl.formatMessage({ id: "my-component.helloWorld" })}</h1>
298
- <p>{intl.formatMessage({ id: "my-component.description" })}</p>
299
- </div>
300
- );
301
- }
302
- ```
303
-
304
- Her iki yaklaşım da geçerlidir, uygulamanıza uygun olanı seçin.
305
-
306
- ---
307
-
308
- ## Yeni Çeviriler Güncelleme veya Ekleme
309
-
310
- 1. Herhangi bir `*.content.*` dosyasında içeriği **ekleyin veya değiştirin**.
311
- 2. `./react-intl/messages` altında JSON dosyalarını yeniden oluşturmak için `intlayer build` komutunu yeniden çalıştırın.
312
- 3. React (ve react-intl) güncellemeleri bir sonraki yeniden oluşturma veya yeniden yükleme sırasında alacak.
313
-
314
- ---
315
-
316
- ## TypeScript Entegrasyonu (İsteğe Bağlı)
317
-
318
- TypeScript kullanıyorsanız, Intlayer çevirileriniz için **tip tanımlarını oluşturabilir**.
108
+ ## Git Yapılandırması
319
109
 
320
- - `tsconfig.json`'ınızın `"include"` dizisinde `types` klasörünüzü (veya Intlayer'ın oluşturduğu çıktı klasörünü) içerdiğinden emin olun.
110
+ Otomatik oluşturulan Intlayer dosyalarını görmezden gelmeniz önerilir:
321
111
 
322
- ```json5
323
- {
324
- "compilerOptions": {
325
- // ...
326
- },
327
- "include": ["src", "types"],
328
- }
112
+ ```plaintext fileName=".gitignore"
113
+ # Intlayer tarafından oluşturulan dosyaları görmezden gel
114
+ .intlayer
329
115
  ```
330
116
 
331
- Oluşturulan tipler, React bileşenlerinizde eksik çevirileri veya geçersiz anahtarları derleme zamanında algılamaya yardımcı olabilir.
332
-
333
- ---
334
-
335
- ## Git Yapılandırması
117
+ Bu dosyalar, derleme süreciniz sırasında yeniden oluşturulabilir ve sürüm kontrolüne eklenmeleri gerekmez.
336
118
 
337
- Intlayer'ın yapı eserlerini sürüm kontrolünden **hariç tutmak** yaygındır. `.gitignore` dosyanıza şunu ekleyin:
119
+ ### VS Code Eklentisi
338
120
 
339
- ```plaintext
340
- # Intlayer yapı eserlerini yoksay
341
- .intlayer
342
- react-intl
343
- ```
121
+ Geliştirici deneyimini iyileştirmek için resmi **Intlayer VS Code Eklentisi**ni yükleyin:
344
122
 
345
- İş akışınıza bağlı olarak, `./react-intl/messages` içindeki son sözlükleri yoksayabilir veya commit edebilirsiniz. CI/CD boru hattınız onları yeniden oluşturuyorsa, güvenle yoksayabilirsiniz; aksi takdirde, üretim dağıtımları için ihtiyaç duyarsanız commit edin.
123
+ [VS Code Market'ten Yükleyin](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
@@ -0,0 +1,126 @@
1
+ ---
2
+ createdAt: 2024-12-24
3
+ updatedAt: 2025-10-29
4
+ title: Cách tự động hóa bản dịch JSON i18next của bạn bằng Intlayer
5
+ description: Tự động hóa bản dịch JSON của bạn với Intlayer và i18next để nâng cao quốc tế hóa trong các ứng dụng JavaScript.
6
+ keywords:
7
+ - Intlayer
8
+ - i18next
9
+ - Quốc tế hóa
10
+ - i18n
11
+ - Địa phương hóa
12
+ - Dịch thuật
13
+ - React
14
+ - Next.js
15
+ - JavaScript
16
+ - TypeScript
17
+ - Di cư
18
+ - Tích hợp
19
+ slugs:
20
+ - blog
21
+ - intlayer-with-i18next
22
+ history:
23
+ - version: 7.0.0
24
+ date: 2025-10-29
25
+ changes: Thay đổi sang plugin syncJSON
26
+ ---
27
+
28
+ # Cách tự động hóa bản dịch JSON i18next của bạn bằng Intlayer
29
+
30
+ ## Intlayer là gì?
31
+
32
+ **Intlayer** là một thư viện quốc tế hóa mã nguồn mở sáng tạo, được thiết kế để khắc phục những hạn chế của các giải pháp i18n truyền thống. Nó cung cấp một cách tiếp cận hiện đại cho quản lý nội dung trong các ứng dụng JavaScript.
33
+
34
+ Xem so sánh cụ thể với i18next trong bài viết blog của chúng tôi [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md).
35
+
36
+ ## Tại sao kết hợp Intlayer với i18next?
37
+
38
+ Trong khi Intlayer cung cấp một giải pháp i18n độc lập xuất sắc (xem hướng dẫn tích hợp với Next.js của chúng tôi [Next.js integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_nextjs_16.md)), bạn có thể muốn kết hợp nó với i18next vì một số lý do:
39
+
40
+ 1. **Mã nguồn hiện có**: Bạn đã có một triển khai i18next ổn định và muốn dần dần chuyển sang trải nghiệm phát triển được cải thiện của Intlayer.
41
+ 2. **Yêu cầu kế thừa**: Dự án của bạn cần tương thích với các plugin hoặc quy trình làm việc i18next hiện có.
42
+ 3. **Đội ngũ quen thuộc**: Đội ngũ của bạn quen thuộc với i18next nhưng muốn quản lý nội dung tốt hơn.
43
+
44
+ **Vì vậy, Intlayer có thể được triển khai như một bộ chuyển đổi cho i18next để giúp tự động hóa việc dịch JSON của bạn trong CLI hoặc các pipeline CI/CD, kiểm thử bản dịch, và nhiều hơn nữa.**
45
+
46
+ Hướng dẫn này sẽ chỉ cho bạn cách tận dụng hệ thống khai báo nội dung vượt trội của Intlayer trong khi vẫn duy trì khả năng tương thích với i18next.
47
+
48
+ ## Mục lục
49
+
50
+ <TOC/>
51
+
52
+ ## Hướng dẫn từng bước để thiết lập Intlayer với i18next
53
+
54
+ ### Bước 1: Cài đặt các phụ thuộc
55
+
56
+ Cài đặt các gói cần thiết:
57
+
58
+ ```bash packageManager="npm"
59
+ npm install intlayer @intlayer/sync-json-plugin
60
+ ```
61
+
62
+ ```bash packageManager="pnpm"
63
+ pnpm add intlayer @intlayer/sync-json-plugin
64
+ ```
65
+
66
+ ```bash packageManager="yarn"
67
+ yarn add intlayer @intlayer/sync-json-plugin
68
+ ```
69
+
70
+ **Mô tả các gói:**
71
+
72
+ - **intlayer**: Thư viện lõi để quản lý quốc tế hóa, khai báo nội dung và xây dựng
73
+ - **@intlayer/sync-json-plugin**: Plugin để xuất các khai báo nội dung của Intlayer sang định dạng JSON tương thích với i18next
74
+
75
+ ### Bước 2: Triển khai plugin Intlayer để bao bọc JSON
76
+
77
+ Tạo một tệp cấu hình Intlayer để định nghĩa các locale được hỗ trợ:
78
+
79
+ **Nếu bạn cũng muốn xuất các từ điển JSON cho i18next**, hãy thêm plugin `syncJSON`:
80
+
81
+ ```typescript fileName="intlayer.config.ts"
82
+ import { Locales, type IntlayerConfig } from "intlayer";
83
+ import { syncJSON } from "@intlayer/sync-json-plugin";
84
+
85
+ const config: IntlayerConfig = {
86
+ internationalization: {
87
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
88
+ defaultLocale: Locales.ENGLISH,
89
+ },
90
+ plugins: [
91
+ syncJSON({
92
+ source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
93
+ }),
94
+ ],
95
+ };
96
+
97
+ export default config;
98
+ ```
99
+
100
+ Plugin `syncJSON` sẽ tự động bao bọc JSON. Nó sẽ đọc và ghi các tệp JSON mà không thay đổi cấu trúc nội dung.
101
+
102
+ Nếu bạn muốn cho phép JSON tồn tại cùng với các tệp khai báo nội dung intlayer (`.content` files), Intlayer sẽ tiến hành theo cách sau:
103
+
104
+ 1. tải cả tệp JSON và tệp khai báo nội dung và chuyển đổi chúng thành một từ điển intlayer.
105
+ 2. nếu có xung đột giữa JSON và các tệp khai báo nội dung, Intlayer sẽ tiến hành hợp nhất tất cả các từ điển đó. Tùy thuộc vào độ ưu tiên của các plugin, và của tệp khai báo nội dung (tất cả đều có thể cấu hình).
106
+
107
+ Nếu có thay đổi được thực hiện bằng cách sử dụng CLI để dịch JSON, hoặc sử dụng CMS, Intlayer sẽ cập nhật tệp JSON với các bản dịch mới.
108
+
109
+ ## Cấu hình Git
110
+
111
+ Khuyến nghị bỏ qua các tệp Intlayer được tạo tự động:
112
+
113
+ ```plaintext fileName=".gitignore"
114
+ # Bỏ qua các tệp do Intlayer tạo ra
115
+ .intlayer
116
+ ```
117
+
118
+ Các tệp này có thể được tạo lại trong quá trình xây dựng của bạn và không cần phải cam kết vào hệ thống quản lý phiên bản.
119
+
120
+ ### Tiện ích mở rộng VS Code
121
+
122
+ Để cải thiện trải nghiệm phát triển, hãy cài đặt **Tiện ích mở rộng Intlayer chính thức cho VS Code**:
123
+
124
+ [Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
125
+
126
+ [Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)