@intlayer/docs 7.0.4-canary.0 → 7.0.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.
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,325 +1,122 @@
1
1
  ---
2
2
  createdAt: 2025-01-02
3
- updatedAt: 2025-06-29
4
- title: Intlayer и react-intl
5
- description: Интегрируйте Intlayer с react-intl для React-приложения
3
+ updatedAt: 2025-10-29
4
+ title: Как автоматизировать ваши JSON-переводы react-intl с помощью Intlayer
5
+ description: Автоматизируйте ваши JSON-переводы с помощью Intlayer и react-intl для улучшенной интернационализации в React-приложениях.
6
6
  keywords:
7
7
  - react-intl
8
8
  - Intlayer
9
9
  - Интернационализация
10
- - Документация
11
- - Next.js
10
+ - Блог
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
17
22
  ---
18
23
 
19
- # React Internationalization (i18n) с **react-intl** и Intlayer
24
+ # Как автоматизировать ваши JSON-переводы react-intl с помощью Intlayer
20
25
 
21
- Этот гид показывает, как интегрировать **Intlayer** с **react-intl** для управления переводами в приложении React. Вы будете объявлять ваши переводимые данные с помощью Intlayer, а затем использовать эти сообщения с **react-intl**, популярной библиотекой из экосистемы [FormatJS](https://formatjs.io/docs/react-intl).
26
+ ## Что такое Intlayer?
22
27
 
23
- ## Обзор
28
+ **Intlayer** — это инновационная, открытая библиотека интернационализации, разработанная для устранения недостатков традиционных решений i18n. Она предлагает современный подход к управлению контентом в React-приложениях.
24
29
 
25
- - **Intlayer** позволяет хранить переводы в **файлах декларации контента** уровня компонента (JSON, JS, TS и т.д.) внутри вашего проекта.
26
- - **react-intl** предоставляет компоненты React и хуки (такие как `<FormattedMessage>` и `useIntl()`) для отображения локализованных строк.
30
+ Смотрите конкретное сравнение с react-intl в нашем блоге [react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md).
27
31
 
28
- Настраивая Intlayer на **экспорт** переводов в **формат, совместимый с react-intl**, вы можете автоматически **генерировать** и **обновлять** файлы сообщений, которые требуется `<IntlProvider>` (из react-intl).
32
+ ## Почему стоит сочетать Intlayer с react-intl?
29
33
 
30
- ---
34
+ Хотя Intlayer предоставляет отличное самостоятельное решение для i18n (см. наше [руководство по интеграции с React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+react.md)), вы можете захотеть сочетать его с react-intl по нескольким причинам:
31
35
 
32
- ## Почему использовать Intlayer с react-intl?
36
+ 1. **Существующая кодовая база**: У вас уже есть реализованная система react-intl, и вы хотите постепенно перейти на улучшенный опыт разработчика с Intlayer.
37
+ 2. **Требования наследия**: Ваш проект требует совместимости с существующими плагинами или рабочими процессами react-intl.
38
+ 3. **Знакомство команды**: Ваша команда привыкла к react-intl, но хочет улучшить управление контентом.
33
39
 
34
- 1. **Декларации контента на уровне компонента**
35
- Файлы декларации контента Intlayer могут находиться рядом с вашими компонентами React, предотвращая «сиротские» переводы, если компоненты перемещаются или удаляются. Например:
40
+ **Для этого Intlayer может быть реализован как адаптер для react-intl, чтобы помочь автоматизировать ваши JSON-переводы в CLI или CI/CD пайплайнах, тестировать переводы и многое другое.**
36
41
 
37
- ```bash
38
- .
39
- └── src
40
- └── components
41
- └── MyComponent
42
- ├── index.content.ts # Декларация контента Intlayer
43
- └── index.tsx # Компонент React
44
- ```
42
+ Это руководство покажет вам, как использовать превосходную систему декларации контента Intlayer, сохраняя при этом совместимость с react-intl.
45
43
 
46
- 2. **Централизованные переводы**
47
- Каждый файл декларации контента собирает все переводы, необходимые для компонента. Это особенно полезно в проектах TypeScript: отсутствующие переводы можно выявить во время **компиляции**.
44
+ ## Содержание
48
45
 
49
- 3. **Автоматическая сборка и регенерация**
50
- Каждый раз, когда вы добавляете или обновляете переводы, Intlayer регенерирует файлы сообщений JSON. Затем вы можете передать их в `<IntlProvider>` от react-intl.
46
+ <TOC/>
51
47
 
52
- ---
48
+ ## Пошаговое руководство по настройке Intlayer с react-intl
53
49
 
54
- ## Установка
50
+ ### Шаг 1: Установка зависимостей
55
51
 
56
- В типичном проекте React установите следующее:
52
+ Установите необходимые пакеты:
57
53
 
58
- ```bash
59
- # с npm
60
- npm install intlayer react-intl
54
+ ```bash packageManager="npm"
55
+ npm install intlayer @intlayer/sync-json-plugin
56
+ ```
61
57
 
62
- # с yarn
63
- yarn add intlayer react-intl
58
+ ```bash packageManager="pnpm"
59
+ pnpm add intlayer @intlayer/sync-json-plugin
60
+ ```
64
61
 
65
- # с pnpm
66
- pnpm add intlayer react-intl
62
+ ```bash packageManager="yarn"
63
+ yarn add intlayer @intlayer/sync-json-plugin
67
64
  ```
68
65
 
69
- ### Почему эти пакеты?
66
+ **Описание пакетов:**
70
67
 
71
- - **intlayer**: Основная CLI и библиотека, которая сканирует декларации контента, объединяет их и создает выходные словари.
72
- - **react-intl**: Основная библиотека от FormatJS, которая предоставляет `<IntlProvider>`, `<FormattedMessage>`, `useIntl()` и другие примитивы интернационализации.
68
+ - **intlayer**: Основная библиотека для управления интернационализацией, декларации контента и сборки
69
+ - **@intlayer/sync-json-plugin**: Плагин для экспорта деклараций контента Intlayer в JSON-формат, совместимый с react-intl
73
70
 
74
- > Если у вас еще не установлен React, вам тоже нужно это сделать (`react` и `react-dom`).
71
+ ### Шаг 2: Реализация плагина Intlayer для обёртки JSON
75
72
 
76
- ## Настройка Intlayer для экспорта сообщений react-intl
73
+ Создайте конфигурационный файл Intlayer для определения поддерживаемых локалей:
77
74
 
78
- В корне вашего проекта создайте **`intlayer.config.ts`** (или `.js`, `.mjs`, `.cjs`) следующим образом:
75
+ **Если вы также хотите экспортировать JSON-словари для react-intl**, добавьте плагин `syncJSON`:
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
- // Добавьте столько локалей, сколько хотите
86
83
  locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
87
84
  defaultLocale: Locales.ENGLISH,
88
85
  },
89
- content: {
90
- // Указывает Intlayer на генерацию файлов сообщений для react-intl
91
- dictionaryOutput: ["react-intl"],
92
-
93
- // Директория, в которую Intlayer будет записывать ваши файлы JSON сообщений
94
- reactIntlMessagesDir: "./react-intl/messages",
95
- },
96
- };
97
-
98
- export default config;
99
- ```
100
-
101
- > **Примечание**: Для других расширений файлов (`.mjs`, `.cjs`, `.js`) смотрите [документацию Intlayer](https://intlayer.org/ru/doc/concept/configuration) для получения деталей использования.
102
-
103
- ---
104
-
105
- ## Создание деклараций контента Intlayer
106
-
107
- Intlayer сканирует вашу кодовую базу (по умолчанию, в `./src`) на наличие файлов, соответствующих `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}`.
108
- Вот пример на **TypeScript**:
109
-
110
- ```typescript title="src/components/MyComponent/index.content.ts"
111
- import { t, type Dictionary } from "intlayer";
112
-
113
- const content = {
114
- // "key" становится ключом верхнего уровня сообщения в вашем файле JSON react-intl
115
- key: "my-component",
116
-
117
- content: {
118
- // Каждый вызов t() объявляет переводимое поле
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",
86
+ plugins: [
87
+ syncJSON({
88
+ source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
128
89
  }),
129
- },
130
- } satisfies Dictionary;
131
-
132
- export default content;
133
- ```
134
-
135
- Если вы предпочитаете JSON или разные варианты JS (`.cjs`, `.mjs`), структура в значительной степени такая же , смотрите [документацию Intlayer по декларациям контента](https://intlayer.org/ru/doc/concept/content).
136
-
137
- ---
138
-
139
- ## Сборка сообщений для react-intl
140
-
141
- Чтобы сгенерировать фактические файлы JSON сообщений для **react-intl**, выполните:
142
-
143
- ```bash
144
- # с npm
145
- npx intlayer dictionaries build
146
-
147
- # с yarn
148
- yarn intlayer build
149
-
150
- # с pnpm
151
- pnpm intlayer build
152
- ```
153
-
154
- Это сканирует все файлы `*.content.*`, компилирует их и записывает результаты в директорию, указанную в вашем **`intlayer.config.ts`** , в этом примере, `./react-intl/messages`.
155
- Типичный вывод может выглядеть так:
156
-
157
- ```bash
158
- .
159
- └── react-intl
160
- └── messages
161
- ├── en.json
162
- ├── fr.json
163
- └── es.json
164
- ```
165
-
166
- Каждый файл является объектом JSON, верхние ключи которого соответствуют каждому **`content.key`** из ваших деклараций. Подключи (например, `helloWorld`) отражают переводы, объявленные в этом элементе контента.
167
-
168
- Например, **en.json** может выглядеть так:
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-intl в вашем приложении React
180
-
181
- ### 1. Загрузка сгенерированных сообщений
182
-
183
- Где вы настраиваете корневой компонент вашего приложения (например, `src/main.tsx` или `src/index.tsx`), вам нужно:
184
-
185
- 1. **Импортировать** сгенерированные файлы сообщений (статически или динамически).
186
- 2. **Передать** их в `<IntlProvider>` от `react-intl`.
187
-
188
- Простой подход , импортировать их **статически**:
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
- // Импортировать JSON файлы из выходных данных сборки.
197
- // Альтернатива: вы можете импортировать динамически в зависимости от выбранной локали пользователем.
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";
201
-
202
- // Если у вас есть механизм для определения языка пользователя, установите его здесь.
203
- // Для простоты давайте выберем английский.
204
- const locale = "en";
205
-
206
- // Соберите сообщения в объекте (или выберите их динамически)
207
- const messagesRecord: Record<string, Record<string, any>> = {
208
- en,
209
- fr,
210
- es,
90
+ ],
211
91
  };
212
92
 
213
- ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
214
- <React.StrictMode>
215
- <IntlProvider locale={locale} messages={messagesRecord[locale]}>
216
- <App />
217
- </IntlProvider>
218
- </React.StrictMode>
219
- );
220
- ```
221
-
222
- > **Совет**: Для реальных проектов вы можете:
223
- >
224
- > - Динамически загружать сообщения JSON во время выполнения.
225
- > - Использовать основанную на окружении, браузере или учетной записи пользователя детекцию локали.
226
-
227
- ### 2. Используйте `<FormattedMessage>` или `useIntl()`
228
-
229
- Как только ваши сообщения загружены в `<IntlProvider>`, любой дочерний компонент может использовать react-intl для доступа к локализованным строкам. Есть два основных подхода:
230
-
231
- - **`<FormattedMessage>`** компонент
232
- - **`useIntl()`** хук
233
-
234
- ---
235
-
236
- ## Использование переводов в компонентах React
237
-
238
- ### Подход A: `<FormattedMessage>`
239
-
240
- Для быстрого использования в пределах строки:
241
-
242
- ```tsx title="src/components/MyComponent/index.tsx"
243
- import React from "react";
244
- import { FormattedMessage } from "react-intl";
245
-
246
- export default function MyComponent() {
247
- return (
248
- <div>
249
- <h1>
250
- {/* “my-component.helloWorld” ссылается на ключ из en.json, fr.json и т.д. */}
251
- <FormattedMessage id="my-component.helloWorld" />
252
- </h1>
253
-
254
- <p>
255
- <FormattedMessage id="my-component.description" />
256
- </p>
257
- </div>
258
- );
259
- }
260
- ```
261
-
262
- > Проп в **`id`** в `<FormattedMessage>` должен соответствовать **ключу верхнего уровня** (`my-component`) плюс любым под-ключам (`helloWorld`).
263
-
264
- ### Подход B: `useIntl()`
265
-
266
- Для более динамичного использования:
267
-
268
- ```tsx title="src/components/MyComponent/index.tsx"
269
- import React from "react";
270
- import { useIntl } from "react-intl";
271
-
272
- export default function MyComponent() {
273
- const intl = useIntl();
274
-
275
- return (
276
- <div>
277
- <h1>{intl.formatMessage({ id: "my-component.helloWorld" })}</h1>
278
- <p>{intl.formatMessage({ id: "my-component.description" })}</p>
279
- </div>
280
- );
281
- }
93
+ export default config;
282
94
  ```
283
95
 
284
- Оба подхода допустимы , выбирайте тот стиль, который лучше подходит вашему приложению.
285
-
286
- ---
96
+ Плагин `syncJSON` автоматически обернет JSON. Он будет читать и записывать JSON-файлы без изменения архитектуры контента.
287
97
 
288
- ## Обновление или добавление новых переводов
98
+ Если вы хотите, чтобы JSON сосуществовал с файлами декларации контента intlayer (`.content` файлы), Intlayer будет работать следующим образом:
289
99
 
290
- 1. **Добавьте или измените** контент в любом файле `*.content.*`.
291
- 2. Повторно выполните `intlayer build`, чтобы регенерировать файлы JSON в `./react-intl/messages`.
292
- 3. React (и react-intl) будут подбирать обновления в следующий раз, когда вы пересоберете или перезагрузите ваше приложение.
100
+ 1. загрузит как JSON, так и файлы декларации контента и преобразует их в словарь intlayer.
101
+ 2. если возникают конфликты между JSON и файлами декларации контента, Intlayer выполнит слияние всех словарей. В зависимости от приоритета плагинов и файла декларации контента (все настраивается).
293
102
 
294
- ---
103
+ Если изменения вносятся с помощью CLI для перевода JSON или с использованием CMS, Intlayer обновит JSON-файл с новыми переводами.
295
104
 
296
- ## Интеграция TypeScript (по желанию)
105
+ Для получения дополнительной информации о плагине `syncJSON` обратитесь к [документации плагина syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/plugins/sync-json.md).
297
106
 
298
- Если вы используете TypeScript, Intlayer может **генерировать определения типов** для ваших переводов.
107
+ ## Конфигурация Git
299
108
 
300
- - Убедитесь, что `tsconfig.json` включает вашу папку `types` (или любую другую выходную папку, которую генерирует Intlayer) в массиве `"include"`.
109
+ Рекомендуется игнорировать автоматически сгенерированные файлы Intlayer:
301
110
 
302
- ```json5
303
- {
304
- "compilerOptions": {
305
- // ...
306
- },
307
- "include": ["src", "types"],
308
- }
111
+ ```plaintext fileName=".gitignore"
112
+ # Игнорировать файлы, сгенерированные Intlayer
113
+ .intlayer
309
114
  ```
310
115
 
311
- Сгенерированные типы могут помочь выявлять отсутствующие переводы или недействительные ключи в ваших компонентах React на этапе компиляции.
312
-
313
- ---
314
-
315
- ## Конфигурация Git
116
+ Эти файлы могут быть сгенерированы заново в процессе сборки и не требуют добавления в систему контроля версий.
316
117
 
317
- Обычно **исключаются** внутренние артефакты сборки Intlayer из контроля версий. В вашем `.gitignore` добавьте:
118
+ ### Расширение VS Code
318
119
 
319
- ```plaintext
320
- # Игнорировать артефакты сборки intlayer
321
- .intlayer
322
- react-intl
323
- ```
120
+ Для улучшения опыта разработчика установите официальное **Расширение Intlayer для VS Code**:
324
121
 
325
- В зависимости от вашего рабочего процесса, вы также можете захотеть игнорировать или коммитить окончательные словари в `./react-intl/messages`. Если ваш CI/CDipeline регенерирует их, их можно безопасно игнорировать; в противном случае коммитите их, если они вам нужны для оберток в производства.
122
+ [Установить из магазина расширений VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
@@ -1,162 +1,126 @@
1
1
  ---
2
- createdAt: 2025-09-07
3
- updatedAt: 2025-09-07
4
- title: Intlayer ve i18next
5
- description: Optimal uluslararasılaştırma için Intlayer i18next ile entegre edin. İki çerçeveyi karşılaştırın ve birlikte yapılandırmayı öğrenin.
2
+ createdAt: 2024-12-24
3
+ updatedAt: 2025-10-29
4
+ title: i18next JSON çevirilerinizi Intlayer ile nasıl otomatikleştirirsiniz
5
+ description: JavaScript uygulamalarında gelişmiş uluslararasılaştırma için Intlayer ve i18next ile JSON çevirilerinizi otomatikleştirin.
6
6
  keywords:
7
7
  - Intlayer
8
8
  - i18next
9
- - Internationalisation
9
+ - Uluslararasılaştırma
10
10
  - i18n
11
- - Localisation
12
- - Translation
11
+ - Yerelleştirme
12
+ - Çeviri
13
13
  - React
14
14
  - Next.js
15
15
  - JavaScript
16
16
  - TypeScript
17
+ - Geçiş
18
+ - Entegrasyon
17
19
  slugs:
18
20
  - blog
19
21
  - intlayer-with-i18next
22
+ history:
23
+ - version: 7.0.0
24
+ date: 2025-10-29
25
+ changes: syncJSON eklentisine geçiş
20
26
  ---
21
27
 
22
- # Intlayer ve i18next ile Uluslararasılaştırma
28
+ # i18next JSON çevirilerinizi Intlayer ile nasıl otomatikleştirirsiniz
23
29
 
24
- i18next, JavaScript uygulamaları için tasarlanmış açık kaynaklı bir uluslararasılaştırma (i18n) çerçevesidir. Yazılım projelerinde çevirileri, yerelleştirmeyi ve dil değiştirmeyi yönetmek için yaygın olarak kullanılır. Ancak, ölçeklenebilirliği ve geliştirmeyi karmaşıklaştırabilecek bazı sınırlamaları vardır.
30
+ ## Intlayer nedir?
25
31
 
26
- Intlayer, bu sınırlamaları ele alan başka bir uluslararasılaştırma çerçevesidir ve içerik beyanı ve yönetimine daha esnek bir yaklaşım sunar. i18next ve Intlayer arasındaki bazı temel farkları keşfedelim ve her ikisini de optimal uluslararasılaştırma için nasıl yapılandıracağımızı görelim.
32
+ **Intlayer**, geleneksel i18n çözümlerinin eksikliklerini gidermek için tasarlanmış yenilikçi, açık kaynaklı bir uluslararasılaştırma kütüphanesidir. JavaScript uygulamalarında içerik yönetimine modern bir yaklaşım sunar.
27
33
 
28
- ## Intlayer vs. i18next: Temel Farklılıklar
34
+ i18next ile somut bir karşılaştırma için [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md) blog yazımıza bakabilirsiniz.
29
35
 
30
- ### 1. Sözlük
36
+ ## Neden Intlayer'ı i18next ile Birleştirmelisiniz?
31
37
 
32
- i18next ile çeviri sözlükleri belirli bir klasörde beyan edilmelidir, bu da uygulama ölçeklenebilirliğini karmaşıklaştırabilir. Aksine, Intlayer içeriğin bileşenle aynı dizinde beyan edilmesine izin verir. Bunun birkaç avantajı vardır:
38
+ Intlayer mükemmel bir bağımsız i18n çözümü sunarken (bakınız [Next.js entegrasyon rehberimiz](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_with_nextjs_16.md)), birkaç nedenle i18next ile birleştirmek isteyebilirsiniz:
33
39
 
34
- - **Basitleştirilmiş İçerik Düzenleme**: Kullanıcıların doğru sözlüğü aramak zorunda kalmadan düzenleme yapmaları, hataları azaltır.
35
- - **Otomatik Uyum**: Bir bileşen konum değiştirirse veya kaldırılırsa, Intlayer bunu algılar ve otomatik olarak uyum sağlar.
40
+ 1. **Mevcut kod tabanı**: Yerleşik bir i18next uygulamanız var ve Intlayer'ın geliştirilmiş geliştirici deneyimine kademeli olarak geçmek istiyorsunuz.
41
+ 2. **Eski gereksinimler**: Projeniz mevcut i18next eklentileri veya akışları ile uyumluluk gerektiriyor.
42
+ 3. **Ekip aşinalığı**: Ekibiniz i18next ile rahat ancak daha iyi içerik yönetimi istiyor.
36
43
 
37
- ### 2. Yapılandırma Karmaşıklığı
44
+ **Bunun için, Intlayer i18next için bir adaptör olarak uygulanabilir; bu, JSON çevirilerinizi CLI veya CI/CD boru hatlarında otomatikleştirmenize, çevirilerinizi test etmenize ve daha fazlasına yardımcı olur.**
38
45
 
39
- i18next'i yapılandırmak, Next.js gibi çerçevelerde sunucu tarafı bileşenlerle entegrasyon veya ara yazılım yapılandırma sırasında karmaşık olabilir. Intlayer bu süreci basitleştirir, daha basit yapılandırma sunar.
46
+ Bu rehber, Intlayer'ın üstün içerik beyan sistemi avantajlarından yararlanırken i18next ile uyumluluğu nasıl koruyacağınızı gösterir.
40
47
 
41
- ### 3. Çeviri Sözlüklerinin Tutarlılığı
48
+ ## İçindekiler
42
49
 
43
- i18next ile çeviri sözlüklerinin farklı diller arasında tutarlı olmasını sağlamak zor olabilir. Bu tutarsızlık, düzgün ele alınmazsa uygulama çökmelerine yol açabilir. Intlayer, çevrilmiş içeriğe kısıtlamalar uygulayarak hiçbir çevirinin kaçırılmamasını ve çevrilmiş içeriğin doğru olmasını sağlar.
50
+ <TOC/>
44
51
 
45
- ### 4. TypeScript Entegrasyonu
52
+ ## Adım Adım Intlayer'ı i18next ile Kurma Rehberi
46
53
 
47
- Intlayer, kodunuzda içeriğin otomatik önerilerini sağlayarak geliştirme verimliliğini artıran daha iyi TypeScript entegrasyonu sunar.
54
+ ### Adım 1: Bağımlılıkları Yükleyin
48
55
 
49
- ### 5. İçeriği Uygulamalar Arasında Paylaşma
56
+ Gerekli paketleri yükleyin:
50
57
 
51
- Intlayer, içerik beyan dosyalarının birden fazla uygulama ve paylaşılan kütüphane arasında paylaşılmasını kolaylaştırır. Bu özellik, daha büyük bir kod tabanında tutarlı çevirileri korumayı kolaylaştırır.
52
-
53
- ## Intlayer ile i18next Sözlükleri Nasıl Oluşturulur
58
+ ```bash packageManager="npm"
59
+ npm install intlayer @intlayer/sync-json-plugin
60
+ ```
54
61
 
55
- ### i18next Sözlüklerini Dışa Aktarmak İçin Intlayer'ı Yapılandırma
62
+ ```bash packageManager="pnpm"
63
+ pnpm add intlayer @intlayer/sync-json-plugin
64
+ ```
56
65
 
57
- > Önemli Notlar
66
+ ```bash packageManager="yarn"
67
+ yarn add intlayer @intlayer/sync-json-plugin
68
+ ```
58
69
 
59
- > i18next sözlüklerinin dışa aktarılması şu anda beta aşamasındadır ve diğer çerçevelerle 1:1 uyumluluk sağlamaz. Sorunları en aza indirmek için Intlayer tabanlı bir yapılandırmaya bağlı kalmak önerilir.
70
+ **Paket açıklamaları:**
60
71
 
61
- i18next sözlüklerini dışa aktarmak için Intlayer'ı uygun şekilde yapılandırmanız gerekir. Aşağıda Intlayer'ı hem Intlayer hem de i18next sözlüklerini dışa aktarmak için nasıl ayarlayacağınızın bir örneği vardır.
72
+ - **intlayer**: Uluslararasılaştırma yönetimi, içerik beyanı ve derleme için temel kütüphane
73
+ - **@intlayer/sync-json-plugin**: Intlayer içerik beyanlarını i18next uyumlu JSON formatına aktarmak için eklenti
62
74
 
63
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
64
- import { Locales, type IntlayerConfig } from "intlayer";
75
+ ### Adım 2: JSON'u sarmak için Intlayer eklentisini uygulayın
65
76
 
66
- const config: IntlayerConfig = {
67
- content: {
68
- // Intlayer'ın hem Intlayer hem de i18next sözlüklerini dışa aktaracağını belirt
69
- dictionaryOutput: ["intlayer", "i18next"],
70
- // Proje kökünden i18n sözlüklerinin dışa aktarılacağı dizine göreli yol
71
- i18nextResourcesDir: "./i18next/dictionaries",
72
- },
73
- };
77
+ Desteklenen yerel ayarları tanımlamak için bir Intlayer yapılandırma dosyası oluşturun:
74
78
 
75
- export default config;
76
- ```
79
+ **Ayrıca i18next için JSON sözlükleri dışa aktarmak istiyorsanız**, `syncJSON` eklentisini ekleyin:
77
80
 
78
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
79
- import { Locales } from "intlayer";
81
+ ```typescript fileName="intlayer.config.ts"
82
+ import { Locales, type IntlayerConfig } from "intlayer";
83
+ import { syncJSON } from "@intlayer/sync-json-plugin";
80
84
 
81
- /** @type {import('intlayer').IntlayerConfig} */
82
- const config = {
83
- content: {
84
- // Intlayer'ın hem Intlayer hem de i18next sözlüklerini dışa aktaracağını belirt
85
- dictionaryOutput: ["intlayer", "i18next"],
86
- // Proje kökünden i18n sözlüklerinin dışa aktarılacağı dizine göreli yol
87
- i18nextResourcesDir: "./i18next/dictionaries",
85
+ const config: IntlayerConfig = {
86
+ internationalization: {
87
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
88
+ defaultLocale: Locales.ENGLISH,
88
89
  },
90
+ plugins: [
91
+ syncJSON({
92
+ source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
93
+ }),
94
+ ],
89
95
  };
90
96
 
91
97
  export default config;
92
98
  ```
93
99
 
94
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
95
- const { Locales } = require("intlayer");
96
-
97
- /** @type {import('intlayer').IntlayerConfig} */
98
- const config = {
99
- content: {
100
- // Intlayer'ın hem Intlayer hem de i18next sözlüklerini dışa aktaracağını belirt
101
- dictionaryOutput: ["intlayer", "i18next"],
102
- // Proje kökünden i18n sözlüklerinin dışa aktarılacağı dizine göreli yol
103
- i18nextResourcesDir: "./i18next/dictionaries",
104
- },
105
- };
106
-
107
- module.exports = config;
108
- ```
100
+ `syncJSON` eklentisi JSON'u otomatik olarak sarar. İçerik mimarisini değiştirmeden JSON dosyalarını okur ve yazar.
109
101
 
110
- Yapılandırmaya 'i18next' dahil ederek, Intlayer Intlayer sözlüklerine ek olarak özel i18next sözlükleri oluşturur. Yapılandırmadan 'intlayer'ı kaldırmanın React-Intlayer veya Next-Intlayer ile uyumluluğu bozabileceğini unutmayın.
102
+ Eğer JSON dosyalarının intlayer içerik beyan dosyaları (`.content` dosyaları) ile birlikte var olmasını istiyorsanız, Intlayer şu şekilde ilerler:
111
103
 
112
- ### Sözlükleri i18next Yapılandırmanıza İçe Aktarma
104
+ 1. Hem JSON hem de içerik beyan dosyalarını yükler ve bunları intlayer sözlüğüne dönüştürür.
105
+ 2. JSON ile içerik beyan dosyaları arasında çakışma varsa, Intlayer tüm sözlükleri birleştirme işlemi yapar. Bu, eklentilerin önceliğine ve içerik beyan dosyasının önceliğine bağlıdır (hepsi yapılandırılabilir).
113
106
 
114
- Oluşturulan sözlükleri i18next yapılandırmanıza içe aktarmak için 'i18next-resources-to-backend' kullanabilirsiniz. i18next sözlüklerinizi içe aktarmanın bir örneği burada:
107
+ CLI kullanılarak JSON çevirisi yapılırsa veya CMS kullanılırsa, Intlayer JSON dosyasını yeni çevirilerle günceller.
115
108
 
116
- ```typescript fileName="i18n/client.ts" codeFormat="typescript"
117
- // i18n/client.ts
109
+ ## Git Yapılandırması
118
110
 
119
- import i18next from "i18next";
120
- import resourcesToBackend from "i18next-resources-to-backend";
111
+ Otomatik oluşturulan Intlayer dosyalarını görmezden gelmeniz önerilir:
121
112
 
122
- i18next
123
- // Sizin i18next yapılandırmanız
124
- .use(
125
- resourcesToBackend(
126
- (language: string, namespace: string) =>
127
- import(`../i18next/dictionaries/${language}/${namespace}.json`)
128
- )
129
- );
113
+ ```plaintext fileName=".gitignore"
114
+ # Intlayer tarafından oluşturulan dosyaları görmezden gel
115
+ .intlayer
130
116
  ```
131
117
 
132
- ```javascript fileName="i18n/client.mjs" codeFormat="esm"
133
- // i18n/client.mjs
118
+ Bu dosyalar derleme süreciniz sırasında yeniden oluşturulabilir ve sürüm kontrolüne dahil edilmesi gerekmez.
134
119
 
135
- import i18next from "i18next";
136
- import resourcesToBackend from "i18next-resources-to-backend";
120
+ ### VS Code Eklentisi
137
121
 
138
- i18next
139
- // Sizin i18next yapılandırmanız
140
- .use(
141
- resourcesToBackend(
142
- (language, namespace) =>
143
- import(`../i18next/dictionaries/${language}/${namespace}.json`)
144
- )
145
- );
146
- ```
122
+ Geliştirici deneyimini iyileştirmek için resmi **Intlayer VS Code Eklentisi**ni yükleyin:
147
123
 
148
- ```javascript fileName="i18n/client.cjs" codeFormat="commonjs"
149
- // i18n/client.cjs
124
+ [VS Code Marketplace'ten Yükleyin](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
150
125
 
151
- const i18next = require("i18next");
152
- const resourcesToBackend = "i18next-resources-to-backend";
153
-
154
- i18next
155
- // Sizin i18next yapılandırmanız
156
- .use(
157
- resourcesToBackend(
158
- (language, namespace) =>
159
- import(`../i18next/dictionaries/${language}/${namespace}.json`)
160
- )
161
- );
162
- ```
126
+ [VS Code Marketplace'ten Yükleyin](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)