@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
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-13
|
|
3
|
+
updatedAt: 2025-10-05
|
|
4
|
+
title: Плагин синхронизации JSON
|
|
5
|
+
description: Синхронизируйте словари Intlayer с JSON-файлами сторонних i18n (i18next, next-intl, react-intl, vue-i18n и другими). Сохраняйте существующую i18n, используя Intlayer для управления, перевода и тестирования ваших сообщений.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Синхронизация JSON
|
|
9
|
+
- i18next
|
|
10
|
+
- next-intl
|
|
11
|
+
- react-intl
|
|
12
|
+
- vue-i18n
|
|
13
|
+
- next-translate
|
|
14
|
+
- nuxt-i18n
|
|
15
|
+
- LinguiJS
|
|
16
|
+
- Polyglot.js
|
|
17
|
+
- Solid-i18next
|
|
18
|
+
- svelte-i18n
|
|
19
|
+
- i18n
|
|
20
|
+
- переводы
|
|
21
|
+
slugs:
|
|
22
|
+
- doc
|
|
23
|
+
- plugin
|
|
24
|
+
- sync-json
|
|
25
|
+
history:
|
|
26
|
+
- version: 6.1.6
|
|
27
|
+
date: 2025-10-05
|
|
28
|
+
changes: Начальная документация плагина синхронизации JSON
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Синхронизация JSON (мосты i18n)
|
|
32
|
+
|
|
33
|
+
Используйте Intlayer в качестве дополнения к вашему существующему стеку i18n. Этот плагин поддерживает синхронизацию ваших JSON-сообщений со словарями Intlayer, чтобы вы могли:
|
|
34
|
+
|
|
35
|
+
- Сохранять использование i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n и других.
|
|
36
|
+
- Управлять и переводить ваши сообщения с помощью Intlayer (CLI, CI, провайдеры, CMS), без необходимости рефакторинга вашего приложения.
|
|
37
|
+
- Публиковать обучающие материалы и SEO-контент, ориентированный на каждую экосистему, предлагая Intlayer в качестве слоя управления JSON.
|
|
38
|
+
|
|
39
|
+
Примечания и текущий охват:
|
|
40
|
+
|
|
41
|
+
- Внешняя интеграция с CMS работает для переводов и классического текста.
|
|
42
|
+
- Пока нет поддержки вставок, множественного числа/ICU или продвинутых функций времени выполнения других библиотек.
|
|
43
|
+
- Визуальный редактор пока не поддерживается для вывода сторонних i18n.
|
|
44
|
+
|
|
45
|
+
### Когда использовать этот плагин
|
|
46
|
+
|
|
47
|
+
- Вы уже используете библиотеку i18n и храните сообщения в JSON-файлах.
|
|
48
|
+
- Вы хотите использовать заполнение с помощью ИИ, тестирование в CI и управление контентом без изменения вашего runtime для рендеринга.
|
|
49
|
+
|
|
50
|
+
## Установка
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm add -D @intlayer/sync-json-plugin
|
|
54
|
+
# или
|
|
55
|
+
npm i -D @intlayer/sync-json-plugin
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Быстрый старт
|
|
59
|
+
|
|
60
|
+
Добавьте плагин в ваш `intlayer.config.ts` и укажите путь к вашей существующей структуре JSON.
|
|
61
|
+
|
|
62
|
+
```ts fileName="intlayer.config.ts"
|
|
63
|
+
import { defineConfig, Locales } from "intlayer";
|
|
64
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
internationalization: {
|
|
68
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
69
|
+
defaultLocale: Locales.ENGLISH,
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
// Синхронизируйте ваши текущие JSON-файлы со словарями Intlayer
|
|
73
|
+
plugins: [
|
|
74
|
+
syncJSON({
|
|
75
|
+
// Макет по локалям и пространствам имён (например, next-intl, i18next с пространствами имён)
|
|
76
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Альтернатива: один файл на локаль (распространено в настройках i18next/react-intl):
|
|
83
|
+
|
|
84
|
+
```ts fileName="intlayer.config.ts"
|
|
85
|
+
plugins: [
|
|
86
|
+
syncJSON({
|
|
87
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
88
|
+
}),
|
|
89
|
+
];
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Как это работает
|
|
93
|
+
|
|
94
|
+
- Чтение: плагин обнаруживает JSON-файлы с помощью вашего билдера `source` и загружает их как словари Intlayer.
|
|
95
|
+
- Запись: после сборок и заполнения он записывает локализованные JSON обратно по тем же путям (с завершающим переводом строки, чтобы избежать проблем с форматированием).
|
|
96
|
+
- Автозаполнение: плагин объявляет путь `autoFill` для каждого словаря. Запуск `intlayer fill` по умолчанию обновляет только отсутствующие переводы в ваших JSON-файлах.
|
|
97
|
+
|
|
98
|
+
API:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
syncJSON({
|
|
102
|
+
source: ({ key, locale }) => string, // обязательно
|
|
103
|
+
location?: string, // необязательная метка, по умолчанию: "plugin"
|
|
104
|
+
priority?: number, // необязательный приоритет для разрешения конфликтов, по умолчанию: 0
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Несколько источников JSON и приоритет
|
|
109
|
+
|
|
110
|
+
Вы можете добавить несколько плагинов `syncJSON` для синхронизации разных источников JSON. Это полезно, если в вашем проекте используются несколько библиотек i18n или разные структуры JSON.
|
|
111
|
+
|
|
112
|
+
### Система приоритетов
|
|
113
|
+
|
|
114
|
+
Когда несколько плагинов нацелены на один и тот же ключ словаря, параметр `priority` определяет, какой плагин имеет преимущество:
|
|
115
|
+
|
|
116
|
+
- Побеждает плагин с более высоким числом приоритета
|
|
117
|
+
- Приоритет по умолчанию для файлов `.content` равен `0`
|
|
118
|
+
- Приоритет по умолчанию для файлов плагинов равен `-1`
|
|
119
|
+
- Плагины с одинаковым приоритетом обрабатываются в порядке их появления в конфигурации
|
|
120
|
+
|
|
121
|
+
```ts fileName="intlayer.config.ts"
|
|
122
|
+
import { defineConfig, Locales } from "intlayer";
|
|
123
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
124
|
+
|
|
125
|
+
export default defineConfig({
|
|
126
|
+
internationalization: {
|
|
127
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
128
|
+
defaultLocale: Locales.ENGLISH,
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
plugins: [
|
|
132
|
+
// Основной источник JSON (наивысший приоритет)
|
|
133
|
+
syncJSON({
|
|
134
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
135
|
+
location: "main-translations",
|
|
136
|
+
priority: 10,
|
|
137
|
+
}),
|
|
138
|
+
|
|
139
|
+
// Резервный источник JSON (низший приоритет)
|
|
140
|
+
syncJSON({
|
|
141
|
+
source: ({ locale }) => `./fallback-locales/${locale}.json`,
|
|
142
|
+
location: "fallback-translations",
|
|
143
|
+
priority: 5,
|
|
144
|
+
}),
|
|
145
|
+
|
|
146
|
+
// Источник устаревших JSON (самый низкий приоритет)
|
|
147
|
+
syncJSON({
|
|
148
|
+
source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,
|
|
149
|
+
location: "legacy-translations",
|
|
150
|
+
priority: 1,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Разрешение конфликтов
|
|
157
|
+
|
|
158
|
+
Когда один и тот же ключ перевода присутствует в нескольких JSON-источниках:
|
|
159
|
+
|
|
160
|
+
1. Плагин с наивысшим приоритетом определяет итоговое значение
|
|
161
|
+
2. Источники с более низким приоритетом используются как резервные для отсутствующих ключей
|
|
162
|
+
3. Это позволяет поддерживать устаревшие переводы, постепенно переходя на новые структуры
|
|
163
|
+
|
|
164
|
+
## Интеграции
|
|
165
|
+
|
|
166
|
+
Ниже приведены распространённые сопоставления. Не изменяйте ваше окружение выполнения; просто добавьте плагин.
|
|
167
|
+
|
|
168
|
+
### i18next
|
|
169
|
+
|
|
170
|
+
Типичная структура файлов: `./public/locales/{locale}/{namespace}.json` или `./locales/{locale}/{namespace}.json`.
|
|
171
|
+
|
|
172
|
+
```ts fileName="intlayer.config.ts"
|
|
173
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
174
|
+
|
|
175
|
+
export default {
|
|
176
|
+
plugins: [
|
|
177
|
+
syncJSON({
|
|
178
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
179
|
+
}),
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### next-intl
|
|
185
|
+
|
|
186
|
+
JSON-сообщения для каждого локаля (часто `./messages/{locale}.json`) или по namespace.
|
|
187
|
+
|
|
188
|
+
```ts fileName="intlayer.config.ts"
|
|
189
|
+
plugins: [
|
|
190
|
+
syncJSON({
|
|
191
|
+
source: ({ locale, key }) => `./messages/${locale}/${key}.json`,
|
|
192
|
+
}),
|
|
193
|
+
];
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
См. также: `docs/ru/intlayer_with_next-intl.md`.
|
|
197
|
+
|
|
198
|
+
### react-intl
|
|
199
|
+
|
|
200
|
+
Обычно используется один JSON на локаль:
|
|
201
|
+
|
|
202
|
+
```ts fileName="intlayer.config.ts"
|
|
203
|
+
plugins: [
|
|
204
|
+
syncJSON({
|
|
205
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
206
|
+
}),
|
|
207
|
+
];
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### vue-i18n
|
|
211
|
+
|
|
212
|
+
Либо один файл на локаль, либо по пространствам имён:
|
|
213
|
+
|
|
214
|
+
```ts fileName="intlayer.config.ts"
|
|
215
|
+
plugins: [
|
|
216
|
+
syncJSON({
|
|
217
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // источник файлов локализации
|
|
218
|
+
}),
|
|
219
|
+
];
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## CLI
|
|
223
|
+
|
|
224
|
+
Синхронизированные JSON-файлы будут рассматриваться как другие файлы с расширением `.content`. Это означает, что все команды intlayer будут доступны для синхронизированных JSON-файлов, включая:
|
|
225
|
+
|
|
226
|
+
- `intlayer content test` для проверки отсутствующих переводов
|
|
227
|
+
- `intlayer content list` для вывода списка синхронизированных JSON-файлов
|
|
228
|
+
- `intlayer content fill` для заполнения отсутствующих переводов
|
|
229
|
+
- `intlayer content push` для отправки синхронизированных JSON-файлов
|
|
230
|
+
- `intlayer content pull` для загрузки синхронизированных JSON-файлов
|
|
231
|
+
|
|
232
|
+
См. [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_cli.md) для получения дополнительной информации.
|
|
233
|
+
|
|
234
|
+
## Ограничения (текущие)
|
|
235
|
+
|
|
236
|
+
- Нет поддержки вставок или множественного числа/ICU при работе с библиотеками третьих сторон.
|
|
237
|
+
- Визуальный редактор пока недоступен для сред выполнения, не являющихся Intlayer.
|
|
238
|
+
- Синхронизация только JSON; форматы каталогов, не являющиеся JSON, не поддерживаются.
|
|
239
|
+
|
|
240
|
+
## Почему это важно
|
|
241
|
+
|
|
242
|
+
- Мы можем рекомендовать проверенные решения i18n и позиционировать Intlayer как дополнение.
|
|
243
|
+
- Мы используем их SEO/ключевые слова с помощью руководств, которые заканчиваются предложением использовать Intlayer для управления JSON.
|
|
244
|
+
- Расширяет целевую аудиторию с «новых проектов» до «любых команд, уже использующих i18n».
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-13
|
|
3
|
+
updatedAt: 2025-10-05
|
|
4
|
+
title: JSON Senkronizasyon Eklentisi
|
|
5
|
+
description: Intlayer sözlüklerini üçüncü taraf i18n JSON dosyalarıyla (i18next, next-intl, react-intl, vue-i18n ve daha fazlası) senkronize edin. Mevcut i18n yapınızı koruyarak Intlayer ile mesajlarınızı yönetin, çevirin ve test edin.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- JSON Senkronizasyonu
|
|
9
|
+
- i18next
|
|
10
|
+
- next-intl
|
|
11
|
+
- react-intl
|
|
12
|
+
- vue-i18n
|
|
13
|
+
- next-translate
|
|
14
|
+
- nuxt-i18n
|
|
15
|
+
- LinguiJS
|
|
16
|
+
- Polyglot.js
|
|
17
|
+
- Solid-i18next
|
|
18
|
+
- svelte-i18n
|
|
19
|
+
- i18n
|
|
20
|
+
- çeviriler
|
|
21
|
+
slugs:
|
|
22
|
+
- doc
|
|
23
|
+
- plugin
|
|
24
|
+
- sync-json
|
|
25
|
+
history:
|
|
26
|
+
- version: 6.1.6
|
|
27
|
+
date: 2025-10-05
|
|
28
|
+
changes: İlk JSON Senkronizasyon Eklentisi dokümantasyonu
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# JSON Senkronizasyonu (i18n köprüleri)
|
|
32
|
+
|
|
33
|
+
Intlayer'ı mevcut i18n yapınıza bir eklenti olarak kullanın. Bu eklenti, JSON mesajlarınızı Intlayer sözlükleriyle senkronize tutar, böylece:
|
|
34
|
+
|
|
35
|
+
- i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n vb. kullanmaya devam edebilirsiniz.
|
|
36
|
+
- Uygulamanızı yeniden yapılandırmadan Intlayer (CLI, CI, sağlayıcılar, CMS) ile mesajlarınızı yönetip çevirebilirsiniz.
|
|
37
|
+
- Her ekosistemi hedefleyen eğitimler ve SEO içerikleri sunabilir, aynı zamanda Intlayer'ı JSON yönetim katmanı olarak önerebilirsiniz.
|
|
38
|
+
|
|
39
|
+
Notlar ve mevcut kapsam:
|
|
40
|
+
|
|
41
|
+
- CMS'ye dışa aktarma, çeviriler ve klasik metinler için çalışır.
|
|
42
|
+
- Henüz eklemeler, çoğullar/ICU veya diğer kütüphanelerin gelişmiş çalışma zamanı özellikleri desteklenmemektedir.
|
|
43
|
+
- Görsel editör, üçüncü taraf i18n çıktıları için henüz desteklenmemektedir.
|
|
44
|
+
|
|
45
|
+
### Bu eklenti ne zaman kullanılmalı
|
|
46
|
+
|
|
47
|
+
- Zaten bir i18n kütüphanesi kullanıyor ve mesajları JSON dosyalarında saklıyorsunuz.
|
|
48
|
+
- Rendering çalışma zamanınızı değiştirmeden AI destekli doldurma, CI'da test ve içerik operasyonları yapmak istiyorsunuz.
|
|
49
|
+
|
|
50
|
+
## Kurulum
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm add -D @intlayer/sync-json-plugin
|
|
54
|
+
# veya
|
|
55
|
+
npm i -D @intlayer/sync-json-plugin
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Hızlı başlangıç
|
|
59
|
+
|
|
60
|
+
Eklentiyi `intlayer.config.ts` dosyanıza ekleyin ve mevcut JSON yapınıza işaret edin.
|
|
61
|
+
|
|
62
|
+
```ts fileName="intlayer.config.ts"
|
|
63
|
+
import { defineConfig, Locales } from "intlayer";
|
|
64
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
internationalization: {
|
|
68
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
69
|
+
defaultLocale: Locales.ENGLISH,
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
// Mevcut JSON dosyalarınızı Intlayer sözlükleriyle senkronize tutun
|
|
73
|
+
plugins: [
|
|
74
|
+
syncJSON({
|
|
75
|
+
// Yerel başına, ad alanı başına düzen (örneğin, next-intl, ad alanları ile i18next)
|
|
76
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Alternatif: her yerel için tek dosya (i18next/react-intl yapılandırmalarında yaygın):
|
|
83
|
+
|
|
84
|
+
```ts fileName="intlayer.config.ts"
|
|
85
|
+
plugins: [
|
|
86
|
+
syncJSON({
|
|
87
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
88
|
+
}),
|
|
89
|
+
];
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Nasıl çalışır
|
|
93
|
+
|
|
94
|
+
- Okuma: eklenti, `source` yapıcınızdan JSON dosyalarını keşfeder ve bunları Intlayer sözlükleri olarak yükler.
|
|
95
|
+
- Yazma: derlemeler ve doldurmalar sonrası, yerelleştirilmiş JSON'u aynı yollara yazar (biçimlendirme sorunlarını önlemek için sonuna yeni satır ekleyerek).
|
|
96
|
+
- Otomatik doldurma: eklenti, her sözlük için bir `autoFill` yolu belirtir. `intlayer fill` komutunu çalıştırmak, JSON dosyalarınızdaki yalnızca eksik çevirileri varsayılan olarak günceller.
|
|
97
|
+
|
|
98
|
+
API:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
syncJSON({
|
|
102
|
+
source: ({ key, locale }) => string, // zorunlu
|
|
103
|
+
location?: string, // isteğe bağlı etiket, varsayılan: "plugin"
|
|
104
|
+
priority?: number, // isteğe bağlı öncelik, çakışma çözümü için, varsayılan: 0
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Birden fazla JSON kaynağı ve öncelik
|
|
109
|
+
|
|
110
|
+
Farklı JSON kaynaklarını senkronize etmek için birden fazla `syncJSON` eklentisi ekleyebilirsiniz. Bu, projenizde birden fazla i18n kütüphanesi veya farklı JSON yapıları olduğunda faydalıdır.
|
|
111
|
+
|
|
112
|
+
### Öncelik sistemi
|
|
113
|
+
|
|
114
|
+
Birden fazla eklenti aynı sözlük anahtarını hedeflediğinde, `priority` parametresi hangi eklentinin öncelikli olduğunu belirler:
|
|
115
|
+
|
|
116
|
+
- Daha yüksek öncelik numaraları, daha düşük olanlara karşı kazanır
|
|
117
|
+
|
|
118
|
+
- `.content` dosyalarının varsayılan önceliği `0`'dır
|
|
119
|
+
- Eklentilerin içerik dosyalarının varsayılan önceliği `-1`'dir
|
|
120
|
+
- Aynı önceliğe sahip eklentiler, yapılandırmada göründükleri sırayla işlenir
|
|
121
|
+
|
|
122
|
+
```ts fileName="intlayer.config.ts"
|
|
123
|
+
import { defineConfig, Locales } from "intlayer";
|
|
124
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
125
|
+
|
|
126
|
+
export default defineConfig({
|
|
127
|
+
internationalization: {
|
|
128
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
129
|
+
defaultLocale: Locales.ENGLISH,
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
plugins: [
|
|
133
|
+
// Birincil JSON kaynağı (en yüksek öncelik)
|
|
134
|
+
syncJSON({
|
|
135
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
136
|
+
location: "main-translations",
|
|
137
|
+
priority: 10,
|
|
138
|
+
}),
|
|
139
|
+
|
|
140
|
+
// Yedek JSON kaynağı (daha düşük öncelik)
|
|
141
|
+
syncJSON({
|
|
142
|
+
source: ({ locale }) => `./fallback-locales/${locale}.json`,
|
|
143
|
+
location: "fallback-translations",
|
|
144
|
+
priority: 5,
|
|
145
|
+
}),
|
|
146
|
+
|
|
147
|
+
// Eski JSON kaynağı (en düşük öncelik)
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,
|
|
150
|
+
location: "legacy-translations",
|
|
151
|
+
priority: 1,
|
|
152
|
+
}),
|
|
153
|
+
],
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Çakışma çözümü
|
|
158
|
+
|
|
159
|
+
Aynı çeviri anahtarı birden fazla JSON kaynağında mevcutsa:
|
|
160
|
+
|
|
161
|
+
1. En yüksek önceliğe sahip eklenti nihai değeri belirler
|
|
162
|
+
2. Daha düşük öncelikli kaynaklar, eksik anahtarlar için yedek olarak kullanılır
|
|
163
|
+
3. Bu, eski çevirileri korumanıza ve yeni yapılara kademeli olarak geçiş yapmanıza olanak tanır
|
|
164
|
+
|
|
165
|
+
## Entegrasyonlar
|
|
166
|
+
|
|
167
|
+
Aşağıda yaygın eşlemeler bulunmaktadır. Çalışma zamanınızı değiştirmeyin; sadece eklentiyi ekleyin.
|
|
168
|
+
|
|
169
|
+
### i18next
|
|
170
|
+
|
|
171
|
+
Tipik dosya düzeni: `./public/locales/{locale}/{namespace}.json` veya `./locales/{locale}/{namespace}.json`.
|
|
172
|
+
|
|
173
|
+
```ts fileName="intlayer.config.ts"
|
|
174
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
175
|
+
|
|
176
|
+
export default {
|
|
177
|
+
plugins: [
|
|
178
|
+
syncJSON({
|
|
179
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
180
|
+
}),
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### next-intl
|
|
186
|
+
|
|
187
|
+
Her yerel için JSON mesajları (genellikle `./messages/{locale}.json`) veya her ad alanı için.
|
|
188
|
+
|
|
189
|
+
```ts fileName="intlayer.config.ts"
|
|
190
|
+
plugins: [
|
|
191
|
+
syncJSON({
|
|
192
|
+
source: ({ locale, key }) => `./messages/${locale}/${key}.json`,
|
|
193
|
+
}),
|
|
194
|
+
];
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Ayrıca bakınız: `docs/tr/intlayer_with_next-intl.md`.
|
|
198
|
+
|
|
199
|
+
### react-intl
|
|
200
|
+
|
|
201
|
+
Her yerel için tek JSON yaygındır:
|
|
202
|
+
|
|
203
|
+
```ts fileName="intlayer.config.ts"
|
|
204
|
+
plugins: [
|
|
205
|
+
syncJSON({
|
|
206
|
+
source: ({ locale }) => `./locales/${locale}.json`,
|
|
207
|
+
}),
|
|
208
|
+
];
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### vue-i18n
|
|
212
|
+
|
|
213
|
+
Her yerel için ya da her ad alanı için tek bir dosya olabilir:
|
|
214
|
+
|
|
215
|
+
```ts fileName="intlayer.config.ts"
|
|
216
|
+
plugins: [
|
|
217
|
+
syncJSON({
|
|
218
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
219
|
+
}),
|
|
220
|
+
];
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## CLI
|
|
224
|
+
|
|
225
|
+
Eşzamanlanmış JSON dosyaları diğer `.content` dosyaları gibi kabul edilecektir. Bu, tüm intlayer komutlarının eşzamanlanmış JSON dosyaları için de kullanılabilir olduğu anlamına gelir. Şunları içerir:
|
|
226
|
+
|
|
227
|
+
- Eksik çevirilerin olup olmadığını test etmek için `intlayer content test`
|
|
228
|
+
- Eşzamanlanmış JSON dosyalarını listelemek için `intlayer content list`
|
|
229
|
+
- Eksik çevirileri doldurmak için `intlayer content fill`
|
|
230
|
+
- Eşzamanlanmış JSON dosyalarını göndermek için `intlayer content push`
|
|
231
|
+
- Eşzamanlanmış JSON dosyalarını çekmek için `intlayer content pull`
|
|
232
|
+
|
|
233
|
+
Daha fazla detay için [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_cli.md) sayfasına bakınız.
|
|
234
|
+
|
|
235
|
+
## Sınırlamalar (mevcut)
|
|
236
|
+
|
|
237
|
+
- Üçüncü taraf kütüphaneler hedeflendiğinde ekleme veya çoğul/ICU desteği yoktur.
|
|
238
|
+
- Görsel editör henüz Intlayer dışı çalışma zamanları için mevcut değildir.
|
|
239
|
+
- Sadece JSON senkronizasyonu; JSON olmayan katalog formatları desteklenmemektedir.
|
|
240
|
+
|
|
241
|
+
## Neden bu önemli
|
|
242
|
+
|
|
243
|
+
- Yerleşik i18n çözümlerini önerebilir ve Intlayer'ı bir eklenti olarak konumlandırabiliriz.
|
|
244
|
+
- JSON yönetimi için Intlayer öneren eğitimlerle onların SEO/anahtar kelimelerinden faydalanırız.
|
|
245
|
+
- Hedef kitlesini “yeni projeler”den “zaten i18n kullanan herhangi bir ekip”e genişletir.
|