@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.
- package/blog/ar/intlayer_with_i18next.md +68 -106
- package/blog/ar/intlayer_with_next-i18next.md +84 -288
- package/blog/ar/intlayer_with_next-intl.md +58 -337
- package/blog/ar/intlayer_with_react-i18next.md +68 -290
- package/blog/ar/intlayer_with_react-intl.md +63 -266
- package/blog/de/intlayer_with_i18next.md +77 -97
- package/blog/de/intlayer_with_next-i18next.md +69 -296
- package/blog/de/intlayer_with_next-intl.md +59 -340
- package/blog/de/intlayer_with_react-i18next.md +68 -290
- package/blog/de/intlayer_with_react-intl.md +62 -264
- package/blog/en/intlayer_with_i18next.md +36 -1638
- package/blog/en/intlayer_with_next-i18next.md +22 -847
- package/blog/en/intlayer_with_next-intl.md +32 -1053
- package/blog/en/intlayer_with_react-i18next.md +38 -764
- package/blog/en/intlayer_with_react-intl.md +42 -1018
- package/blog/en-GB/intlayer_with_i18next.md +67 -103
- package/blog/en-GB/intlayer_with_next-i18next.md +71 -292
- package/blog/en-GB/intlayer_with_next-intl.md +58 -337
- package/blog/en-GB/intlayer_with_react-i18next.md +67 -289
- package/blog/en-GB/intlayer_with_react-intl.md +61 -264
- package/blog/es/intlayer_with_i18next.md +67 -103
- package/blog/es/intlayer_with_next-i18next.md +71 -296
- package/blog/es/intlayer_with_next-intl.md +57 -338
- package/blog/es/intlayer_with_react-i18next.md +68 -290
- package/blog/es/intlayer_with_react-intl.md +62 -265
- package/blog/fr/intlayer_with_i18next.md +66 -104
- package/blog/fr/intlayer_with_next-i18next.md +82 -285
- package/blog/fr/intlayer_with_next-intl.md +57 -338
- package/blog/fr/intlayer_with_react-i18next.md +67 -289
- package/blog/fr/intlayer_with_react-intl.md +61 -264
- package/blog/hi/intlayer_with_i18next.md +68 -104
- package/blog/hi/intlayer_with_next-i18next.md +74 -299
- package/blog/hi/intlayer_with_next-intl.md +57 -239
- package/blog/hi/intlayer_with_react-i18next.md +69 -291
- package/blog/hi/intlayer_with_react-intl.md +65 -268
- package/blog/id/intlayer_with_i18next.md +126 -0
- package/blog/id/intlayer_with_next-i18next.md +142 -0
- package/blog/id/intlayer_with_next-intl.md +113 -0
- package/blog/id/intlayer_with_react-i18next.md +124 -0
- package/blog/id/intlayer_with_react-intl.md +122 -0
- package/blog/it/intlayer_with_i18next.md +67 -103
- package/blog/it/intlayer_with_next-i18next.md +71 -296
- package/blog/it/intlayer_with_next-intl.md +57 -338
- package/blog/it/intlayer_with_react-i18next.md +68 -290
- package/blog/it/intlayer_with_react-intl.md +62 -265
- package/blog/ja/intlayer_with_i18next.md +68 -103
- package/blog/ja/intlayer_with_next-i18next.md +85 -283
- package/blog/ja/intlayer_with_next-intl.md +58 -336
- package/blog/ja/intlayer_with_react-i18next.md +68 -290
- package/blog/ja/intlayer_with_react-intl.md +62 -264
- package/blog/ko/intlayer_with_i18next.md +80 -96
- package/blog/ko/intlayer_with_next-i18next.md +85 -287
- package/blog/ko/intlayer_with_next-intl.md +68 -327
- package/blog/ko/intlayer_with_react-i18next.md +68 -290
- package/blog/ko/intlayer_with_react-intl.md +64 -266
- package/blog/pl/intlayer_with_i18next.md +126 -0
- package/blog/pl/intlayer_with_next-i18next.md +142 -0
- package/blog/pl/intlayer_with_next-intl.md +111 -0
- package/blog/pl/intlayer_with_react-i18next.md +124 -0
- package/blog/pl/intlayer_with_react-intl.md +122 -0
- package/blog/pt/intlayer_with_i18next.md +67 -103
- package/blog/pt/intlayer_with_next-i18next.md +72 -293
- package/blog/pt/intlayer_with_next-intl.md +57 -256
- package/blog/pt/intlayer_with_react-i18next.md +104 -78
- package/blog/pt/intlayer_with_react-intl.md +62 -266
- package/blog/ru/intlayer_with_i18next.md +66 -104
- package/blog/ru/intlayer_with_next-i18next.md +71 -296
- package/blog/ru/intlayer_with_next-intl.md +58 -337
- package/blog/ru/intlayer_with_react-i18next.md +68 -290
- package/blog/ru/intlayer_with_react-intl.md +62 -265
- package/blog/tr/intlayer_with_i18next.md +71 -107
- package/blog/tr/intlayer_with_next-i18next.md +72 -297
- package/blog/tr/intlayer_with_next-intl.md +58 -339
- package/blog/tr/intlayer_with_react-i18next.md +69 -291
- package/blog/tr/intlayer_with_react-intl.md +63 -285
- package/blog/vi/intlayer_with_i18next.md +126 -0
- package/blog/vi/intlayer_with_next-i18next.md +142 -0
- package/blog/vi/intlayer_with_next-intl.md +111 -0
- package/blog/vi/intlayer_with_react-i18next.md +124 -0
- package/blog/vi/intlayer_with_react-intl.md +122 -0
- package/blog/zh/intlayer_with_i18next.md +67 -102
- package/blog/zh/intlayer_with_next-i18next.md +72 -296
- package/blog/zh/intlayer_with_next-intl.md +58 -336
- package/blog/zh/intlayer_with_react-i18next.md +68 -290
- package/blog/zh/intlayer_with_react-intl.md +63 -106
- package/docs/ar/plugins/sync-json.md +244 -0
- package/docs/de/plugins/sync-json.md +244 -0
- package/docs/en/intlayer_cli.md +25 -0
- package/docs/en/intlayer_with_nextjs_14.md +2 -0
- package/docs/en/intlayer_with_nextjs_15.md +2 -0
- package/docs/en/intlayer_with_nextjs_16.md +2 -0
- package/docs/en/plugins/sync-json.md +1 -1
- package/docs/en-GB/plugins/sync-json.md +244 -0
- package/docs/es/plugins/sync-json.md +244 -0
- package/docs/fr/plugins/sync-json.md +244 -0
- package/docs/hi/plugins/sync-json.md +244 -0
- package/docs/id/plugins/sync-json.md +244 -0
- package/docs/it/plugins/sync-json.md +244 -0
- package/docs/ja/plugins/sync-json.md +244 -0
- package/docs/ko/plugins/sync-json.md +244 -0
- package/docs/pl/plugins/sync-json.md +244 -0
- package/docs/pt/plugins/sync-json.md +244 -0
- package/docs/ru/plugins/sync-json.md +244 -0
- package/docs/tr/plugins/sync-json.md +245 -0
- package/docs/vi/plugins/sync-json.md +244 -0
- package/docs/zh/plugins/sync-json.md +244 -0
- package/package.json +14 -14
|
@@ -1,346 +1,124 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-01-02
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Как автоматизировать ваши JSON-переводы react-i18next с помощью Intlayer
|
|
5
|
+
description: Автоматизируйте ваши JSON-переводы с помощью Intlayer и react-i18next для улучшенной интернационализации в React-приложениях.
|
|
6
6
|
keywords:
|
|
7
7
|
- react-i18next
|
|
8
8
|
- i18next
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Интернационализация
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- JavaScript
|
|
11
|
+
- i18n
|
|
12
|
+
- Блог
|
|
14
13
|
- React
|
|
14
|
+
- JavaScript
|
|
15
|
+
- TypeScript
|
|
16
|
+
- Управление контентом
|
|
15
17
|
slugs:
|
|
16
18
|
- blog
|
|
17
19
|
- intlayer-with-react-i18next
|
|
20
|
+
history:
|
|
21
|
+
- version: 7.0.0
|
|
22
|
+
date: 2025-10-29
|
|
23
|
+
changes: Переход на плагин syncJSON
|
|
18
24
|
---
|
|
19
25
|
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
## Обзор
|
|
23
|
-
|
|
24
|
-
- **Intlayer** помогает вам управлять переводами с помощью файлов декларации контента на **уровне компонентов**.
|
|
25
|
-
- **react-i18next** - популярная интеграция React для **i18next**, которая предоставляет хуки, такие как `useTranslation`, для получения локализованных строк в ваших компонентах.
|
|
26
|
-
|
|
27
|
-
Когда они объединены, Intlayer может **экспортировать** словари в **i18next-совместимый JSON**, чтобы react-i18next мог **потреблять** их во время выполнения.
|
|
28
|
-
|
|
29
|
-
## Зачем использовать Intlayer с react-i18next?
|
|
30
|
-
|
|
31
|
-
Файлы декларации контента **Intlayer** предлагают лучший опыт разработчика, потому что они:
|
|
32
|
-
|
|
33
|
-
1. **Гибкие в размещении файлов**
|
|
34
|
-
Поместите каждый файл декларации контента прямо рядом с компонентом, которому он нужен. Эта структура позволяет вам сохранять переводы в одном месте, предотвращая оставшихся от orphaned переводов, когда компоненты перемещаются или удаляются.
|
|
35
|
-
|
|
36
|
-
```bash codeFormat="typescript"
|
|
37
|
-
.
|
|
38
|
-
└── src
|
|
39
|
-
└── components
|
|
40
|
-
└── MyComponent
|
|
41
|
-
├── index.content.ts # Файл декларации контента
|
|
42
|
-
└── index.tsx
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
```bash codeFormat="esm"
|
|
46
|
-
.
|
|
47
|
-
└── src
|
|
48
|
-
└── components
|
|
49
|
-
└── MyComponent
|
|
50
|
-
├── index.content.mjs # Файл декларации контента
|
|
51
|
-
└── index.mjx
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
```bash codeFormat="cjs"
|
|
55
|
-
.
|
|
56
|
-
└── src
|
|
57
|
-
└── components
|
|
58
|
-
└── MyComponent
|
|
59
|
-
├── index.content.cjs # Файл декларации контента
|
|
60
|
-
└── index.cjx
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
```bash codeFormat="json"
|
|
64
|
-
.
|
|
65
|
-
└── src
|
|
66
|
-
└── components
|
|
67
|
-
└── MyComponent
|
|
68
|
-
├── index.content.json # Файл декларации контента
|
|
69
|
-
└── index.jsx
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
2. **Централизованные переводы**
|
|
73
|
-
Один файл декларации контента собирает все необходимые переводы для компонента, облегчая обнаружение недостающих переводов.
|
|
74
|
-
С TypeScript вы даже получите ошибки во время компиляции, если переводы отсутствуют.
|
|
75
|
-
|
|
76
|
-
## Установка
|
|
77
|
-
|
|
78
|
-
В проекте Create React App установите эти зависимости:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# С npm
|
|
82
|
-
npm install intlayer react-i18next i18next i18next-resources-to-backend
|
|
83
|
-
```
|
|
26
|
+
# Как автоматизировать ваши JSON-переводы react-i18next с помощью Intlayer
|
|
84
27
|
|
|
85
|
-
|
|
86
|
-
# С yarn
|
|
87
|
-
yarn add intlayer react-i18next i18next i18next-resources-to-backend
|
|
88
|
-
```
|
|
28
|
+
## Что такое Intlayer?
|
|
89
29
|
|
|
90
|
-
|
|
91
|
-
# С pnpm
|
|
92
|
-
pnpm add intlayer react-i18next i18next i18next-resources-to-backend
|
|
93
|
-
```
|
|
30
|
+
**Intlayer** — это инновационная, открытая библиотека интернационализации, разработанная для устранения недостатков традиционных решений i18n. Она предлагает современный подход к управлению контентом в React-приложениях.
|
|
94
31
|
|
|
95
|
-
|
|
32
|
+
Смотрите конкретное сравнение с react-i18next в нашем блоге [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).
|
|
96
33
|
|
|
97
|
-
|
|
98
|
-
- **react-intlayer** – Специфическая для React интеграция для Intlayer, предоставляющая скрипты для автоматизации создания словарей.
|
|
99
|
-
- **react-i18next** – Специфическая для React библиотека интеграции для i18next, включая хук `useTranslation`.
|
|
100
|
-
- **i18next** – Основная платформа для обработки переводов.
|
|
101
|
-
- **i18next-resources-to-backend** – Бэкенд i18next, который динамически импортирует ресурсы JSON.
|
|
34
|
+
## Почему стоит сочетать Intlayer с react-i18next?
|
|
102
35
|
|
|
103
|
-
|
|
36
|
+
Хотя Intlayer предоставляет отличное самостоятельное решение i18n (см. наше [руководство по интеграции с React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_with_vite+react.md)), вы можете захотеть объединить его с react-i18next по нескольким причинам:
|
|
104
37
|
|
|
105
|
-
|
|
38
|
+
1. **Существующая кодовая база**: У вас уже есть реализованная система на react-i18next, и вы хотите постепенно перейти на улучшенный опыт разработки с Intlayer.
|
|
39
|
+
2. **Требования к совместимости**: Ваш проект требует совместимости с существующими плагинами или рабочими процессами react-i18next.
|
|
40
|
+
3. **Знакомство команды**: Ваша команда привыкла к react-i18next, но хочет улучшить управление контентом.
|
|
106
41
|
|
|
107
|
-
|
|
108
|
-
import { Locales, type IntlayerConfig } from "intlayer";
|
|
42
|
+
**Для этого Intlayer может быть реализован как адаптер для react-i18next, чтобы помочь автоматизировать ваши JSON-переводы в CLI или CI/CD пайплайнах, тестировать переводы и многое другое.**
|
|
109
43
|
|
|
110
|
-
|
|
111
|
-
internationalization: {
|
|
112
|
-
// Добавьте столько локалей, сколько вам нужно
|
|
113
|
-
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
114
|
-
defaultLocale: Locales.ENGLISH,
|
|
115
|
-
},
|
|
116
|
-
content: {
|
|
117
|
-
// Укажите Intlayer создавать i18next-совместимый JSON
|
|
118
|
-
dictionaryOutput: ["i18next"],
|
|
44
|
+
В этом руководстве показано, как использовать превосходную систему декларации контента Intlayer, сохраняя при этом совместимость с react-i18next.
|
|
119
45
|
|
|
120
|
-
|
|
121
|
-
// Эта папка будет создана, если еще не существует.
|
|
122
|
-
i18nextResourcesDir: "./i18next/resources",
|
|
123
|
-
},
|
|
124
|
-
};
|
|
46
|
+
## Содержание
|
|
125
47
|
|
|
126
|
-
|
|
127
|
-
```
|
|
48
|
+
<TOC/>
|
|
128
49
|
|
|
129
|
-
|
|
50
|
+
## Пошаговое руководство по настройке Intlayer с react-i18next
|
|
130
51
|
|
|
131
|
-
|
|
52
|
+
### Шаг 1: Установка зависимостей
|
|
132
53
|
|
|
133
|
-
|
|
54
|
+
Установите необходимые пакеты:
|
|
134
55
|
|
|
135
|
-
```bash
|
|
136
|
-
|
|
137
|
-
npx run intlayer build
|
|
56
|
+
```bash packageManager="npm"
|
|
57
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
138
58
|
```
|
|
139
59
|
|
|
140
|
-
```bash
|
|
141
|
-
|
|
142
|
-
yarn intlayer build
|
|
60
|
+
```bash packageManager="pnpm"
|
|
61
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
143
62
|
```
|
|
144
63
|
|
|
145
|
-
```bash
|
|
146
|
-
|
|
147
|
-
pnpm intlayer build
|
|
64
|
+
```bash packageManager="yarn"
|
|
65
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
148
66
|
```
|
|
149
67
|
|
|
150
|
-
|
|
68
|
+
**Описание пакетов:**
|
|
151
69
|
|
|
152
|
-
|
|
70
|
+
- **intlayer**: Основная библиотека для управления интернационализацией, декларации контента и сборки
|
|
71
|
+
- **@intlayer/sync-json-plugin**: Плагин для экспорта деклараций контента Intlayer в JSON-формат, совместимый с react-i18next
|
|
153
72
|
|
|
154
|
-
|
|
155
|
-
.
|
|
156
|
-
└── i18next
|
|
157
|
-
└── resources
|
|
158
|
-
├── en
|
|
159
|
-
│ └── my-content.json
|
|
160
|
-
├── fr
|
|
161
|
-
│ └── my-content.json
|
|
162
|
-
└── es
|
|
163
|
-
└── my-content.json
|
|
164
|
-
```
|
|
73
|
+
### Шаг 2: Реализация плагина Intlayer для обёртывания JSON
|
|
165
74
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
## Импорт словарей в вашу конфигурацию react-i18next
|
|
169
|
-
|
|
170
|
-
Чтобы динамически загружать эти ресурсы во время выполнения, используйте [`i18next-resources-to-backend`](https://www.npmjs.com/package/i18next-resources-to-backend). Например, создайте файл `i18n.ts` (или `.js`) в вашем проекте:
|
|
171
|
-
|
|
172
|
-
```typescript title="i18n.ts"
|
|
173
|
-
import i18next from "i18next";
|
|
174
|
-
import { initReactI18next } from "react-i18next";
|
|
175
|
-
import resourcesToBackend from "i18next-resources-to-backend";
|
|
176
|
-
|
|
177
|
-
i18next
|
|
178
|
-
// плагин react-i18next
|
|
179
|
-
.use(initReactI18next)
|
|
180
|
-
// динамическая загрузка ресурсов
|
|
181
|
-
.use(
|
|
182
|
-
resourcesToBackend((language: string, namespace: string) => {
|
|
183
|
-
// Настройте путь импорта к вашему каталогу ресурсов
|
|
184
|
-
return import(`../i18next/resources/${language}/${namespace}.json`);
|
|
185
|
-
})
|
|
186
|
-
)
|
|
187
|
-
// Инициализация i18next
|
|
188
|
-
.init({
|
|
189
|
-
// Альтернативная локаль
|
|
190
|
-
fallbackLng: "en",
|
|
191
|
-
|
|
192
|
-
// Вы можете добавить другие параметры конфигурации i18next здесь, смотрите:
|
|
193
|
-
// https://www.i18next.com/overview/configuration-options
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
export default i18next;
|
|
197
|
-
```
|
|
75
|
+
Создайте конфигурационный файл Intlayer для определения поддерживаемых локалей:
|
|
198
76
|
|
|
199
|
-
|
|
200
|
-
import i18next from "i18next";
|
|
201
|
-
import { initReactI18next } from "react-i18next";
|
|
202
|
-
import resourcesToBackend from "i18next-resources-to-backend";
|
|
203
|
-
|
|
204
|
-
i18next
|
|
205
|
-
.use(initReactI18next)
|
|
206
|
-
.use(
|
|
207
|
-
resourcesToBackend(
|
|
208
|
-
(language, namespace) =>
|
|
209
|
-
import(`../i18next/resources/${language}/${namespace}.json`)
|
|
210
|
-
)
|
|
211
|
-
)
|
|
212
|
-
.init({
|
|
213
|
-
fallbackLng: "en",
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
export default i18next;
|
|
217
|
-
```
|
|
77
|
+
**Если вы также хотите экспортировать JSON-словари для react-i18next**, добавьте плагин `syncJSON`:
|
|
218
78
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
import React from "react";
|
|
223
|
-
import ReactDOM from "react-dom/client";
|
|
224
|
-
// Инициализация i18n перед чем-либо еще
|
|
225
|
-
import "./i18n";
|
|
226
|
-
import App from "./App";
|
|
227
|
-
|
|
228
|
-
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
|
229
|
-
<React.StrictMode>
|
|
230
|
-
<App />
|
|
231
|
-
</React.StrictMode>
|
|
232
|
-
);
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
## Создание и управление вашими декларациями контента
|
|
236
|
-
|
|
237
|
-
Intlayer извлекает переводы из “файлов декларации контента”, находящихся где угодно под `./src` (по умолчанию).
|
|
238
|
-
Вот минимальный пример на TypeScript:
|
|
239
|
-
|
|
240
|
-
```typescript title="src/components/MyComponent/MyComponent.content.ts"
|
|
241
|
-
import { t, type Dictionary } from "intlayer";
|
|
79
|
+
```typescript fileName="intlayer.config.ts"
|
|
80
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
81
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
242
82
|
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// Каждый вызов "t" - это отдельный узел перевода
|
|
248
|
-
heading: t({
|
|
249
|
-
en: "Hello World",
|
|
250
|
-
es: "Hola Mundo",
|
|
251
|
-
fr: "Bonjour le monde",
|
|
252
|
-
}),
|
|
253
|
-
description: t({
|
|
254
|
-
en: "My i18n description text...",
|
|
255
|
-
fr: "Ma description en i18n...",
|
|
256
|
-
es: "Mi descripción en i18n...",
|
|
257
|
-
}),
|
|
83
|
+
const config: IntlayerConfig = {
|
|
84
|
+
internationalization: {
|
|
85
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
86
|
+
defaultLocale: Locales.ENGLISH,
|
|
258
87
|
},
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
Если вы предпочитаете JSON, `.cjs` или `.mjs`, обратитесь к [документации Intlayer](https://intlayer.org/ru/doc/concept/content).
|
|
265
|
-
|
|
266
|
-
> По умолчанию действительные декларации контента соответствуют шаблону расширения файла:
|
|
267
|
-
|
|
268
|
-
> `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}`
|
|
269
|
-
|
|
270
|
-
## Использование переводов в React-компонентах
|
|
271
|
-
|
|
272
|
-
После того как вы **собрали** свои ресурсы Intlayer и настроили react-i18next, вы можете напрямую использовать хук `useTranslation` из **react-i18next**.
|
|
273
|
-
Например:
|
|
274
|
-
|
|
275
|
-
```tsx title="src/components/MyComponent/MyComponent.tsx"
|
|
276
|
-
import type { FC } from "react";
|
|
277
|
-
import { useTranslation } from "react-i18next";
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Пространство имен i18next - это ключ Intlayer из "MyComponent.content.ts",
|
|
281
|
-
* поэтому мы передадим "my-component" в useTranslation().
|
|
282
|
-
*/
|
|
283
|
-
const MyComponent: FC = () => {
|
|
284
|
-
const { t } = useTranslation("my-component");
|
|
285
|
-
|
|
286
|
-
return (
|
|
287
|
-
<div>
|
|
288
|
-
<h1>{t("heading")}</h1>
|
|
289
|
-
<p>{t("description")}</p>
|
|
290
|
-
</div>
|
|
291
|
-
);
|
|
88
|
+
plugins: [
|
|
89
|
+
syncJSON({
|
|
90
|
+
source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
|
|
91
|
+
}),
|
|
92
|
+
],
|
|
292
93
|
};
|
|
293
94
|
|
|
294
|
-
export default
|
|
95
|
+
export default config;
|
|
295
96
|
```
|
|
296
97
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
## Дополнительно: Интеграция с Create React App Scripts (CRACO)
|
|
300
|
-
|
|
301
|
-
**react-intlayer** предлагает подход на основе CRACO для пользовательских сборок и конфигурации сервера разработки. Если вы хотите seamlessly интегрировать шаг сборки Intlayer, вы можете:
|
|
98
|
+
Плагин `syncJSON` автоматически обернет JSON. Он будет читать и записывать JSON-файлы без изменения архитектуры контента.
|
|
302
99
|
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
npm install react-intlayer --save-dev
|
|
306
|
-
```
|
|
307
|
-
2. **Настройте ваши скрипты `package.json`** для использования скриптов `react-intlayer`:
|
|
100
|
+
Если вы хотите, чтобы JSON сосуществовал с файлами декларации контента intlayer (`.content` файлы), Intlayer будет работать следующим образом:
|
|
308
101
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
"start": "react-intlayer start",
|
|
312
|
-
"build": "react-intlayer build",
|
|
313
|
-
"transpile": "intlayer build"
|
|
314
|
-
}
|
|
315
|
-
```
|
|
102
|
+
1. загрузить как JSON, так и файлы декларации контента и преобразовать их в словарь intlayer.
|
|
103
|
+
2. если возникают конфликты между JSON и файлами декларации контента, Intlayer выполнит слияние всех этих словарей. В зависимости от приоритета плагинов и файла декларации контента (все настраивается).
|
|
316
104
|
|
|
317
|
-
|
|
105
|
+
Если изменения внесены с помощью CLI для перевода JSON или с использованием CMS, Intlayer обновит JSON-файл с новыми переводами.
|
|
318
106
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
## Конфигурация TypeScript
|
|
322
|
-
|
|
323
|
-
**Intlayer** предоставляет **автоматически сгенерированные определения типов** для вашего контента. Чтобы гарантировать, что TypeScript их подберет, добавьте **`types`** (или `types`, если вы настроили иначе) в массив **include** вашего `tsconfig.json`:
|
|
324
|
-
|
|
325
|
-
```json5 title="tsconfig.json"
|
|
326
|
-
{
|
|
327
|
-
"compilerOptions": {
|
|
328
|
-
// ...
|
|
329
|
-
},
|
|
330
|
-
"include": ["src", "types"],
|
|
331
|
-
}
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
> Это позволит TypeScript выводить тип ваших переводов для лучшей автозавершения и обнаружения ошибок.
|
|
107
|
+
Для получения дополнительной информации о плагине `syncJSON` обратитесь к [документации плагина syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/plugins/sync-json.md).
|
|
335
108
|
|
|
336
109
|
## Конфигурация Git
|
|
337
110
|
|
|
338
|
-
Рекомендуется
|
|
111
|
+
Рекомендуется игнорировать автоматически сгенерированные файлы Intlayer:
|
|
339
112
|
|
|
340
|
-
```plaintext
|
|
113
|
+
```plaintext fileName=".gitignore"
|
|
341
114
|
# Игнорировать файлы, сгенерированные Intlayer
|
|
342
115
|
.intlayer
|
|
343
|
-
i18next
|
|
344
116
|
```
|
|
345
117
|
|
|
346
|
-
|
|
118
|
+
Эти файлы могут быть сгенерированы заново в процессе сборки и не требуют добавления в систему контроля версий.
|
|
119
|
+
|
|
120
|
+
### Расширение VS Code
|
|
121
|
+
|
|
122
|
+
Для улучшения опыта разработчика установите официальное **Расширение Intlayer для VS Code**:
|
|
123
|
+
|
|
124
|
+
[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|