@intlayer/docs 7.5.9 → 7.5.10
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/README.md +9 -2
- package/dist/cjs/generated/docs.entry.cjs +19 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +19 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/cli/push.md +1 -1
- package/docs/ar/configuration.md +3 -3
- package/docs/ar/interest_of_intlayer.md +1 -1
- package/docs/ar/intlayer_CMS.md +5 -5
- package/docs/ar/intlayer_with_express.md +1 -0
- package/docs/ar/intlayer_with_fastify.md +516 -0
- package/docs/ar/readme.md +1 -1
- package/docs/de/cli/push.md +1 -1
- package/docs/de/configuration.md +3 -3
- package/docs/de/interest_of_intlayer.md +1 -1
- package/docs/de/intlayer_CMS.md +5 -5
- package/docs/de/intlayer_with_express.md +1 -0
- package/docs/de/intlayer_with_fastify.md +449 -0
- package/docs/de/readme.md +1 -1
- package/docs/en/cli/push.md +1 -1
- package/docs/en/configuration.md +3 -3
- package/docs/en/interest_of_intlayer.md +1 -1
- package/docs/en/intlayer_CMS.md +5 -5
- package/docs/en/intlayer_with_express.md +1 -0
- package/docs/en/intlayer_with_fastify.md +439 -0
- package/docs/en/readme.md +3 -1
- package/docs/en-GB/cli/push.md +1 -1
- package/docs/en-GB/configuration.md +3 -3
- package/docs/en-GB/interest_of_intlayer.md +1 -1
- package/docs/en-GB/intlayer_CMS.md +5 -5
- package/docs/en-GB/intlayer_with_express.md +1 -0
- package/docs/en-GB/intlayer_with_fastify.md +445 -0
- package/docs/en-GB/readme.md +3 -1
- package/docs/es/cli/push.md +1 -1
- package/docs/es/configuration.md +3 -3
- package/docs/es/interest_of_intlayer.md +1 -1
- package/docs/es/intlayer_CMS.md +5 -5
- package/docs/es/intlayer_with_express.md +1 -0
- package/docs/es/intlayer_with_fastify.md +480 -0
- package/docs/es/readme.md +1 -1
- package/docs/fr/cli/push.md +1 -1
- package/docs/fr/configuration.md +3 -3
- package/docs/fr/interest_of_intlayer.md +1 -1
- package/docs/fr/intlayer_CMS.md +5 -5
- package/docs/fr/intlayer_with_express.md +1 -0
- package/docs/fr/intlayer_with_fastify.md +439 -0
- package/docs/fr/readme.md +1 -1
- package/docs/hi/cli/push.md +1 -1
- package/docs/hi/configuration.md +3 -3
- package/docs/hi/interest_of_intlayer.md +1 -1
- package/docs/hi/intlayer_CMS.md +5 -5
- package/docs/hi/intlayer_with_express.md +1 -0
- package/docs/hi/intlayer_with_fastify.md +540 -0
- package/docs/hi/readme.md +1 -1
- package/docs/id/cli/push.md +1 -1
- package/docs/id/configuration.md +3 -3
- package/docs/id/interest_of_intlayer.md +1 -1
- package/docs/id/intlayer_CMS.md +5 -5
- package/docs/id/intlayer_with_express.md +1 -0
- package/docs/id/intlayer_with_fastify.md +470 -0
- package/docs/id/readme.md +1 -1
- package/docs/it/cli/push.md +1 -1
- package/docs/it/configuration.md +3 -3
- package/docs/it/interest_of_intlayer.md +1 -1
- package/docs/it/intlayer_CMS.md +5 -5
- package/docs/it/intlayer_with_express.md +1 -0
- package/docs/it/intlayer_with_fastify.md +445 -0
- package/docs/it/readme.md +1 -1
- package/docs/ja/cli/push.md +1 -1
- package/docs/ja/configuration.md +3 -3
- package/docs/ja/interest_of_intlayer.md +1 -1
- package/docs/ja/intlayer_CMS.md +5 -5
- package/docs/ja/intlayer_with_express.md +1 -0
- package/docs/ja/intlayer_with_fastify.md +516 -0
- package/docs/ja/readme.md +1 -1
- package/docs/ko/cli/push.md +1 -1
- package/docs/ko/configuration.md +3 -3
- package/docs/ko/interest_of_intlayer.md +1 -1
- package/docs/ko/intlayer_CMS.md +5 -5
- package/docs/ko/intlayer_with_express.md +1 -0
- package/docs/ko/intlayer_with_fastify.md +463 -0
- package/docs/ko/readme.md +1 -1
- package/docs/pl/cli/push.md +1 -1
- package/docs/pl/configuration.md +3 -3
- package/docs/pl/interest_of_intlayer.md +1 -1
- package/docs/pl/intlayer_CMS.md +5 -5
- package/docs/pl/intlayer_with_express.md +1 -0
- package/docs/pl/intlayer_with_fastify.md +457 -0
- package/docs/pl/readme.md +1 -1
- package/docs/pt/cli/push.md +1 -1
- package/docs/pt/configuration.md +3 -3
- package/docs/pt/interest_of_intlayer.md +1 -1
- package/docs/pt/intlayer_CMS.md +5 -5
- package/docs/pt/intlayer_with_express.md +1 -0
- package/docs/pt/intlayer_with_fastify.md +502 -0
- package/docs/pt/readme.md +1 -1
- package/docs/ru/cli/push.md +1 -1
- package/docs/ru/configuration.md +3 -3
- package/docs/ru/interest_of_intlayer.md +1 -1
- package/docs/ru/intlayer_CMS.md +5 -5
- package/docs/ru/intlayer_with_express.md +1 -0
- package/docs/ru/intlayer_with_fastify.md +468 -0
- package/docs/ru/readme.md +1 -1
- package/docs/tr/cli/push.md +1 -1
- package/docs/tr/configuration.md +3 -3
- package/docs/tr/interest_of_intlayer.md +1 -1
- package/docs/tr/intlayer_CMS.md +5 -5
- package/docs/tr/intlayer_with_express.md +1 -0
- package/docs/tr/intlayer_with_fastify.md +471 -0
- package/docs/tr/readme.md +1 -1
- package/docs/vi/cli/push.md +1 -1
- package/docs/vi/configuration.md +3 -3
- package/docs/vi/interest_of_intlayer.md +1 -1
- package/docs/vi/intlayer_CMS.md +5 -5
- package/docs/vi/intlayer_with_express.md +1 -0
- package/docs/vi/intlayer_with_fastify.md +490 -0
- package/docs/vi/readme.md +1 -1
- package/docs/zh/cli/push.md +1 -1
- package/docs/zh/configuration.md +3 -3
- package/docs/zh/interest_of_intlayer.md +1 -1
- package/docs/zh/intlayer_CMS.md +5 -5
- package/docs/zh/intlayer_with_express.md +1 -0
- package/docs/zh/intlayer_with_fastify.md +451 -0
- package/docs/zh/readme.md +1 -1
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +19 -0
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-12-30
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Как перевести ваш Fastify backend — руководство по i18n 2026
|
|
5
|
+
description: Узнайте, как сделать ваш Fastify backend мультиязычным. Следуйте документации, чтобы интернационализировать (i18n) и перевести его.
|
|
6
|
+
keywords:
|
|
7
|
+
- Интернационализация
|
|
8
|
+
- Документация
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Fastify
|
|
11
|
+
- JavaScript
|
|
12
|
+
- Backend
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- fastify
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-fastify-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.6.0
|
|
20
|
+
date: 2025-12-31
|
|
21
|
+
changes: Добавлена команда init
|
|
22
|
+
- version: 7.6.0
|
|
23
|
+
date: 2025-12-31
|
|
24
|
+
changes: Инициализация истории
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Перевод вашего Fastify-бэкенда с помощью Intlayer | Интернационализация (i18n)
|
|
28
|
+
|
|
29
|
+
`fastify-intlayer` — это мощный плагин для интернационализации (i18n) для приложений на Fastify, разработанный, чтобы сделать ваши бэкенд-сервисы доступными глобально, предоставляя локализованные ответы в соответствии с предпочтениями клиента.
|
|
30
|
+
|
|
31
|
+
### Практические сценарии использования
|
|
32
|
+
|
|
33
|
+
- **Отображение ошибок бэкенда на языке пользователя**: Когда возникает ошибка, отображение сообщений на родном языке пользователя повышает понимание и снижает фрустрацию. Это особенно полезно для динамических сообщений об ошибках, которые могут отображаться во фронтенд-компонентах, таких как toast-уведомления или модальные окна.
|
|
34
|
+
- **Получение многоязычного контента**: Для приложений, которые извлекают контент из базы данных, интернационализация гарантирует, что вы сможете выдавать этот контент на нескольких языках. Это критично для платформ, таких как e-commerce-сайты или системы управления контентом (CMS), которым необходимо отображать описания товаров, статьи и другой контент на языке, предпочитаемом пользователем.
|
|
35
|
+
- **Отправка многоязычных писем**: Будь то транзакционные письма, маркетинговые кампании или уведомления, отправка писем на языке получателя может значительно повысить вовлечённость и эффективность.
|
|
36
|
+
- **Многоязычные push-уведомления**: Для мобильных приложений отправка push-уведомлений на предпочитаемом пользователем языке может повысить вовлеченность и удержание. Этот персонализированный подход делает уведомления более релевантными и побуждающими к действию.
|
|
37
|
+
- **Другие виды коммуникаций**: Любая форма коммуникации с backend, такая как SMS-сообщения, системные оповещения или обновления интерфейса, выигрывает от использования языка пользователя, обеспечивая ясность и улучшая общий пользовательский опыт.
|
|
38
|
+
|
|
39
|
+
Интернационализируя backend, ваше приложение не только уважает культурные различия, но и лучше соответствует потребностям глобального рынка, что делает это ключевым шагом при масштабировании ваших сервисов по всему миру.
|
|
40
|
+
|
|
41
|
+
## Начало работы
|
|
42
|
+
|
|
43
|
+
### Установка
|
|
44
|
+
|
|
45
|
+
Чтобы начать использовать `fastify-intlayer`, установите пакет с помощью npm:
|
|
46
|
+
|
|
47
|
+
```bash packageManager="npm"
|
|
48
|
+
npm install intlayer fastify-intlayer
|
|
49
|
+
npx intlayer init
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer fastify-intlayer
|
|
55
|
+
pnpm intlayer init
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash packageManager="yarn"
|
|
60
|
+
yarn add intlayer fastify-intlayer
|
|
61
|
+
yarn intlayer init
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```bash packageManager="bun"
|
|
66
|
+
bun add intlayer fastify-intlayer
|
|
67
|
+
bunx intlayer init
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Настройка
|
|
72
|
+
|
|
73
|
+
Настройте параметры интернационализации, создав файл `intlayer.config.ts` в корне вашего проекта:
|
|
74
|
+
|
|
75
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
76
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
77
|
+
|
|
78
|
+
const config: IntlayerConfig = {
|
|
79
|
+
internationalization: {
|
|
80
|
+
locales: [
|
|
81
|
+
Locales.ENGLISH,
|
|
82
|
+
Locales.FRENCH,
|
|
83
|
+
Locales.SPANISH_MEXICO,
|
|
84
|
+
Locales.SPANISH_SPAIN,
|
|
85
|
+
],
|
|
86
|
+
defaultLocale: Locales.ENGLISH,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export default config;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
94
|
+
import { Locales } from "intlayer";
|
|
95
|
+
|
|
96
|
+
/** @type {import('intlayer').IntlayerConfig} */ // Тип конфигурации Intlayer
|
|
97
|
+
const config = {
|
|
98
|
+
internationalization: {
|
|
99
|
+
locales: [
|
|
100
|
+
Locales.ENGLISH,
|
|
101
|
+
Locales.FRENCH,
|
|
102
|
+
Locales.SPANISH_MEXICO,
|
|
103
|
+
Locales.SPANISH_SPAIN,
|
|
104
|
+
],
|
|
105
|
+
defaultLocale: Locales.ENGLISH,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default config;
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
113
|
+
const { Locales } = require("intlayer");
|
|
114
|
+
|
|
115
|
+
/** @type {import('intlayer').IntlayerConfig} */ // Тип конфигурации Intlayer
|
|
116
|
+
const config = {
|
|
117
|
+
internationalization: {
|
|
118
|
+
locales: [
|
|
119
|
+
Locales.ENGLISH,
|
|
120
|
+
Locales.FRENCH,
|
|
121
|
+
Locales.SPANISH_MEXICO,
|
|
122
|
+
Locales.SPANISH_SPAIN,
|
|
123
|
+
],
|
|
124
|
+
defaultLocale: Locales.ENGLISH,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
module.exports = config;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Объявление содержимого
|
|
132
|
+
|
|
133
|
+
Создавайте и управляйте объявлениями содержимого для хранения переводов:
|
|
134
|
+
|
|
135
|
+
```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
|
|
136
|
+
import { t, type Dictionary } from "intlayer";
|
|
137
|
+
|
|
138
|
+
const indexContent = {
|
|
139
|
+
key: "index",
|
|
140
|
+
content: {
|
|
141
|
+
exampleOfContent: t({
|
|
142
|
+
ru: "Пример возвращаемого содержимого на русском",
|
|
143
|
+
en: "Example of returned content in English",
|
|
144
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
145
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
146
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
147
|
+
}),
|
|
148
|
+
},
|
|
149
|
+
} satisfies Dictionary;
|
|
150
|
+
|
|
151
|
+
export default indexContent;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
```javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
|
|
155
|
+
import { t } from "intlayer";
|
|
156
|
+
|
|
157
|
+
javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
|
|
158
|
+
import { t } from "intlayer";
|
|
159
|
+
|
|
160
|
+
/** @type {import('intlayer').Dictionary} */
|
|
161
|
+
const indexContent = {
|
|
162
|
+
key: "index",
|
|
163
|
+
content: {
|
|
164
|
+
exampleOfContent: t({
|
|
165
|
+
ru: "Пример возвращаемого содержимого на русском",
|
|
166
|
+
en: "Example of returned content in English",
|
|
167
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
168
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
169
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
170
|
+
}),
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export default indexContent;
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
|
|
178
|
+
const { t } = require("intlayer");
|
|
179
|
+
|
|
180
|
+
/** @type {import('intlayer').Dictionary} */
|
|
181
|
+
const indexContent = {
|
|
182
|
+
key: "index",
|
|
183
|
+
content: {
|
|
184
|
+
exampleOfContent: t({
|
|
185
|
+
ru: "Пример возвращаемого содержимого на русском",
|
|
186
|
+
en: "Example of returned content in English",
|
|
187
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
188
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
189
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
190
|
+
}),
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
module.exports = indexContent;
|
|
195
|
+
javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
|
|
196
|
+
const { t } = require("intlayer");
|
|
197
|
+
|
|
198
|
+
/** @type {import('intlayer').Dictionary} */
|
|
199
|
+
const indexContent = {
|
|
200
|
+
key: "index",
|
|
201
|
+
content: {
|
|
202
|
+
exampleOfContent: t({
|
|
203
|
+
ru: "Пример возвращаемого содержимого на русском",
|
|
204
|
+
en: "Example of returned content in English",
|
|
205
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
206
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
207
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
208
|
+
}),
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
module.exports = indexContent;
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
```json fileName="src/index.content.json" contentDeclarationFormat="json"
|
|
216
|
+
{
|
|
217
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
218
|
+
"key": "index",
|
|
219
|
+
"content": {
|
|
220
|
+
"exampleOfContent": {
|
|
221
|
+
"nodeType": "translation",
|
|
222
|
+
"translation": {
|
|
223
|
+
"ru": "Пример возвращаемого содержимого на русском",
|
|
224
|
+
"en": "Example of returned content in English",
|
|
225
|
+
"fr": "Exemple de contenu renvoyé en français",
|
|
226
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
227
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
> Ваши декларации содержимого могут быть определены в любом месте вашего приложения, при условии, что они находятся в директории `contentDir` (по умолчанию `./src`). И соответствуют расширению файла декларации содержимого (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
235
|
+
|
|
236
|
+
> Для подробностей смотрите [документацию по декларации содержимого](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md).
|
|
237
|
+
|
|
238
|
+
### Настройка приложения Fastify
|
|
239
|
+
|
|
240
|
+
Настройте ваше приложение Fastify для использования `fastify-intlayer`:
|
|
241
|
+
|
|
242
|
+
```typescript fileName="src/index.ts" codeFormat="typescript"
|
|
243
|
+
import Fastify from "fastify";
|
|
244
|
+
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
|
|
245
|
+
import dictionaryExample from "./index.content";
|
|
246
|
+
|
|
247
|
+
const fastify = Fastify({ logger: true }); // Инициализация Fastify с логированием
|
|
248
|
+
|
|
249
|
+
// Подключение плагина интернационализации
|
|
250
|
+
await fastify.register(intlayer);
|
|
251
|
+
|
|
252
|
+
// Маршруты
|
|
253
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
254
|
+
return t({
|
|
255
|
+
ru: "Пример возвращаемого контента на английском языке",
|
|
256
|
+
en: "Example of returned content in English",
|
|
257
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
258
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
259
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
264
|
+
return getIntlayer("index").exampleOfContent;
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
268
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
// Запуск сервера
|
|
272
|
+
const start = async () => {
|
|
273
|
+
try {
|
|
274
|
+
await fastify.listen({ port: 3000 });
|
|
275
|
+
} catch (err) {
|
|
276
|
+
fastify.log.error(err);
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
start();
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```javascript fileName="src/index.mjs" codeFormat="esm"
|
|
285
|
+
import Fastify from "fastify";
|
|
286
|
+
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
|
|
287
|
+
import dictionaryExample from "./index.content";
|
|
288
|
+
|
|
289
|
+
const fastify = Fastify({ logger: true });
|
|
290
|
+
|
|
291
|
+
// Загрузка плагина интернационализации
|
|
292
|
+
await fastify.register(intlayer);
|
|
293
|
+
|
|
294
|
+
// Маршруты
|
|
295
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
296
|
+
return t({
|
|
297
|
+
en: "Example of returned content in English",
|
|
298
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
299
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
300
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
305
|
+
return getIntlayer("index").exampleOfContent;
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
309
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
// Запуск сервера
|
|
313
|
+
const start = async () => {
|
|
314
|
+
try {
|
|
315
|
+
await fastify.listen({ port: 3000 });
|
|
316
|
+
} catch (err) {
|
|
317
|
+
fastify.log.error(err);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
start();
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
```javascript fileName="src/index.cjs" codeFormat="commonjs"
|
|
326
|
+
const Fastify = require("fastify");
|
|
327
|
+
const { intlayer, t, getDictionary, getIntlayer } = require("fastify-intlayer");
|
|
328
|
+
const dictionaryExample = require("./index.content");
|
|
329
|
+
|
|
330
|
+
const fastify = Fastify({ logger: true });
|
|
331
|
+
|
|
332
|
+
// Обёртка для запуска сервера с async/await
|
|
333
|
+
const start = async () => {
|
|
334
|
+
try {
|
|
335
|
+
// Загрузка плагина интернационализации
|
|
336
|
+
await fastify.register(intlayer);
|
|
337
|
+
|
|
338
|
+
// Маршруты
|
|
339
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
340
|
+
return t({
|
|
341
|
+
ru: "Пример возвращаемого содержимого на русском языке",
|
|
342
|
+
en: "Example of returned content in English",
|
|
343
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
344
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
345
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
350
|
+
return getIntlayer("index").exampleOfContent;
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
354
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
await fastify.listen({ port: 3000 });
|
|
358
|
+
} catch (err) {
|
|
359
|
+
fastify.log.error(err);
|
|
360
|
+
process.exit(1);
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
start();
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Совместимость
|
|
368
|
+
|
|
369
|
+
`fastify-intlayer` полностью совместим с:
|
|
370
|
+
|
|
371
|
+
- [`react-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/index.md)>) для React-приложений
|
|
372
|
+
- [`next-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md)>) для приложений Next.js
|
|
373
|
+
|
|
374
|
+
- [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/index.md) для приложений React
|
|
375
|
+
- [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md) для приложений Next.js
|
|
376
|
+
- [`vite-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/index.md)>) для приложений на Vite
|
|
377
|
+
|
|
378
|
+
Он также бесшовно работает с любым решением для интернационализации в различных средах, включая браузеры и API-запросы. Вы можете настроить middleware для определения локали через заголовки или cookies:
|
|
379
|
+
|
|
380
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
381
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
382
|
+
|
|
383
|
+
const config: IntlayerConfig = {
|
|
384
|
+
// ... Другие параметры конфигурации
|
|
385
|
+
middleware: {
|
|
386
|
+
headerName: "my-locale-header",
|
|
387
|
+
cookieName: "my-locale-cookie",
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
export default config;
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
395
|
+
import { Locales } from "intlayer";
|
|
396
|
+
|
|
397
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
398
|
+
const config = {
|
|
399
|
+
// ... Другие параметры конфигурации
|
|
400
|
+
middleware: {
|
|
401
|
+
headerName: "my-locale-header",
|
|
402
|
+
cookieName: "my-locale-cookie",
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
|
|
406
|
+
export default config;
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
410
|
+
const { Locales } = require("intlayer");
|
|
411
|
+
|
|
412
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
413
|
+
const config = {
|
|
414
|
+
// ... Другие параметры конфигурации
|
|
415
|
+
middleware: {
|
|
416
|
+
headerName: "my-locale-header",
|
|
417
|
+
cookieName: "my-locale-cookie",
|
|
418
|
+
},
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
module.exports = config;
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
По умолчанию `fastify-intlayer` будет интерпретировать заголовок `Accept-Language`, чтобы определить предпочитаемый язык клиента.
|
|
425
|
+
|
|
426
|
+
> Для получения дополнительной информации о конфигурации и продвинутых темах посетите нашу [документацию](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
|
|
427
|
+
|
|
428
|
+
### Настройка TypeScript
|
|
429
|
+
|
|
430
|
+
`fastify-intlayer` использует мощные возможности TypeScript для улучшения процесса интернационализации. Статическая типизация TypeScript обеспечивает учёт каждого ключа перевода, снижая риск отсутствующих переводов и упрощая поддержку.
|
|
431
|
+
|
|
432
|
+
Убедитесь, что автогенерируемые типы (по умолчанию в ./types/intlayer.d.ts) включены в ваш файл tsconfig.json.
|
|
433
|
+
|
|
434
|
+
```json5 fileName="tsconfig.json"
|
|
435
|
+
{
|
|
436
|
+
// ... Ваши существующие конфигурации TypeScript
|
|
437
|
+
"include": [
|
|
438
|
+
// ... Ваши существующие конфигурации TypeScript
|
|
439
|
+
".intlayer/**/*.ts", // Включить автогенерируемые типы
|
|
440
|
+
],
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### Расширение для VS Code
|
|
445
|
+
|
|
446
|
+
Чтобы улучшить опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer VS Code Extension**.
|
|
447
|
+
|
|
448
|
+
[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
449
|
+
|
|
450
|
+
Это расширение предоставляет:
|
|
451
|
+
|
|
452
|
+
- **Автодополнение** для ключей переводов.
|
|
453
|
+
- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.
|
|
454
|
+
- **Встроенные превью** переведённого содержимого.
|
|
455
|
+
- **Быстрые действия** для простого создания и обновления переводов.
|
|
456
|
+
|
|
457
|
+
Для получения дополнительных сведений о том, как использовать расширение, обратитесь к [документации Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
|
|
458
|
+
|
|
459
|
+
### Настройка Git
|
|
460
|
+
|
|
461
|
+
Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.
|
|
462
|
+
|
|
463
|
+
Для этого вы можете добавить следующие строки в файл `.gitignore`:
|
|
464
|
+
|
|
465
|
+
```plaintext fileName=".gitignore"
|
|
466
|
+
# Игнорировать файлы, сгенерированные Intlayer
|
|
467
|
+
.intlayer
|
|
468
|
+
```
|
package/docs/ru/readme.md
CHANGED
|
@@ -50,7 +50,7 @@ Intlayer — это **современное решение i18n** для веб
|
|
|
50
50
|
| Особенность | Описание |
|
|
51
51
|
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
52
|
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true" alt="Feature" width="700"> | **Поддержка нескольких фреймворков**<br><br>Intlayer совместим со всеми основными фреймворками и библиотеками, включая Next.js, React, Vite, Vue.js, Nuxt, Preact, Express и другие. |
|
|
53
|
-
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.
|
|
53
|
+
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true" alt="Feature" width="700"> | **Управление контентом на основе JavaScript**<br><br>Используйте гибкость JavaScript для эффективного определения и управления вашим контентом. <br><br> - [Объявление контента](https://intlayer.org/doc/concept/content) |
|
|
54
54
|
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true" alt="Feature" width="700"> | **Файл объявления контента для каждого языка**<br><br>Ускорьте разработку, объявляя ваш контент один раз до автоматической генерации.<br><br> - [Файл объявления контента для каждого языка](https://intlayer.org/doc/concept/per-locale-file) |
|
|
55
55
|
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true" alt="Feature" width="700"> | **Безопасная типизация среды**<br><br>Используйте TypeScript, чтобы гарантировать отсутствие ошибок в определениях контента и коде, а также получать автозаполнение в IDE.<br><br> - [Конфигурация TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
56
56
|
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true" alt="Feature" width="700"> | **Упрощённая настройка**<br><br>Быстрый старт с минимальной конфигурацией. Легко настраивайте параметры интернационализации, маршрутизации, ИИ, сборки и обработки контента.<br><br> - [Изучите интеграцию с Next.js](https://intlayer.org/doc/environment/nextjs) |
|
package/docs/tr/cli/push.md
CHANGED
|
@@ -23,7 +23,7 @@ slugs:
|
|
|
23
23
|
npx intlayer dictionary push
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
Eğer [intlayer editörü](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_visual_editor.md) yüklüyse, sözlükleri editöre de gönderebilirsiniz. Bu komut, sözlüklerin [editörde](https://intlayer.org/
|
|
26
|
+
Eğer [intlayer editörü](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_visual_editor.md) yüklüyse, sözlükleri editöre de gönderebilirsiniz. Bu komut, sözlüklerin [editörde](https://app.intlayer.org/) kullanılabilir olmasını sağlar. Bu sayede, sözlüklerinizi ekibinizle paylaşabilir ve uygulamanızın kodunu düzenlemeden içeriğinizi düzenleyebilirsiniz.
|
|
27
27
|
|
|
28
28
|
## Kısaltmalar:
|
|
29
29
|
|
package/docs/tr/configuration.md
CHANGED
|
@@ -245,14 +245,14 @@ Entegre editörle ilgili ayarları, sunucu portu ve aktiflik durumu dahil olmak
|
|
|
245
245
|
- **clientId**:
|
|
246
246
|
- _Tür_: `string` | `undefined`
|
|
247
247
|
- _Varsayılan_: `undefined`
|
|
248
|
-
- _Açıklama_: clientId ve clientSecret, intlayer paketlerinin backend ile oAuth2 kimlik doğrulaması kullanarak kimlik doğrulaması yapmasını sağlar. Bir erişim belirteci, projeyle ilişkili kullanıcıyı doğrulamak için kullanılır. Bir erişim belirteci almak için https://intlayer.org/
|
|
248
|
+
- _Açıklama_: clientId ve clientSecret, intlayer paketlerinin backend ile oAuth2 kimlik doğrulaması kullanarak kimlik doğrulaması yapmasını sağlar. Bir erişim belirteci, projeyle ilişkili kullanıcıyı doğrulamak için kullanılır. Bir erişim belirteci almak için https://app.intlayer.org/project adresine gidip bir hesap oluşturun.
|
|
249
249
|
- _Örnek_: `true`
|
|
250
250
|
- _Not_: Önemli: clientId ve clientSecret gizli tutulmalı ve kamuya açık şekilde paylaşılmamalıdır. Lütfen bunları ortam değişkenleri gibi güvenli bir yerde sakladığınızdan emin olun.
|
|
251
251
|
|
|
252
252
|
- **clientSecret**:
|
|
253
253
|
- _Tür_: `string` | `undefined`
|
|
254
254
|
- _Varsayılan_: `undefined`
|
|
255
|
-
- _Açıklama_: clientId ve clientSecret, intlayer paketlerinin backend ile oAuth2 kimlik doğrulaması kullanarak doğrulanmasını sağlar. Bir erişim belirteci, projeyle ilişkili kullanıcıyı doğrulamak için kullanılır. Bir erişim belirteci almak için https://intlayer.org/
|
|
255
|
+
- _Açıklama_: clientId ve clientSecret, intlayer paketlerinin backend ile oAuth2 kimlik doğrulaması kullanarak doğrulanmasını sağlar. Bir erişim belirteci, projeyle ilişkili kullanıcıyı doğrulamak için kullanılır. Bir erişim belirteci almak için https://app.intlayer.org/project adresine gidip bir hesap oluşturun.
|
|
256
256
|
- _Örnek_: `true`
|
|
257
257
|
- _Not_: Önemli: clientId ve clientSecret gizli tutulmalı ve kamuya açık şekilde paylaşılmamalıdır. Lütfen bunları ortam değişkenleri gibi güvenli bir yerde sakladığınızdan emin olun.
|
|
258
258
|
|
|
@@ -468,7 +468,7 @@ Logger'ı kontrol eden ayarlar, kullanılacak önek dahil.
|
|
|
468
468
|
|
|
469
469
|
Intlayer'ın AI özelliklerini kontrol eden ayarlar, sağlayıcı, model ve API anahtarı dahil.
|
|
470
470
|
|
|
471
|
-
Bu yapılandırma, bir erişim anahtarı kullanarak [Intlayer Kontrol Paneli](https://intlayer.org/
|
|
471
|
+
Bu yapılandırma, bir erişim anahtarı kullanarak [Intlayer Kontrol Paneli](https://app.intlayer.org/project) üzerinden kayıtlıysanız isteğe bağlıdır. Intlayer, ihtiyaçlarınız için en verimli ve maliyet-etkin AI çözümünü otomatik olarak yönetecektir. Varsayılan seçenekleri kullanmak, Intlayer'ın en uygun modelleri kullanmak için sürekli güncellenmesi nedeniyle uzun vadeli bakım kolaylığı sağlar.
|
|
472
472
|
|
|
473
473
|
Kendi API anahtarınızı veya belirli bir modeli kullanmayı tercih ediyorsanız, özel AI yapılandırmanızı tanımlayabilirsiniz.
|
|
474
474
|
Bu AI yapılandırması, Intlayer ortamınız genelinde kullanılacaktır. CLI komutları, bu ayarları komutlar için varsayılan olarak kullanacaktır (örneğin `fill`), ayrıca SDK, Görsel Editör ve CMS de bu ayarları kullanır. Belirli kullanım durumları için bu varsayılan değerleri komut parametreleriyle geçersiz kılabilirsiniz.
|
|
@@ -228,7 +228,7 @@ Bu yaklaşım şunları yapmanıza izin verir:
|
|
|
228
228
|
| Özellik | Açıklama |
|
|
229
229
|
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
230
230
|
|  | **Çapraz-Çerçeve Desteği**<br><br>Intlayer Next.js, React, Vite, Vue.js, Nuxt, Preact, Express ve daha fazlası dahil olmak üzere tüm büyük çerçeveler ve kütüphanelerle uyumludur. |
|
|
231
|
-
|  | **JavaScript Güçlü İçerik Yönetimi**<br><br>İçeriğinizi verimli bir şekilde tanımlamak ve yönetmek için JavaScript'in esnekliğinden yararlanın. <br><br> - [İçerik bildirimi](https://intlayer.org/doc/concept/content) |
|
|
232
232
|
|  | **Yerel Ayar Başına İçerik Bildirim Dosyası**<br><br>İçeriğinizi bir kez bildirerek geliştirmenizi hızlandırın, ardından otomatik oluşturma.<br><br> - [Yerel Ayar Başına İçerik Bildirim Dosyası](https://intlayer.org/doc/concept/per-locale-file) |
|
|
233
233
|
|  | **Tür Güvenli Ortam**<br><br>İçerik tanımlarınızın ve kodunuzun hatasız olduğundan emin olmak için TypeScript'ten yararlanın, aynı zamanda IDE otomatik tamamlamasından faydalanın.<br><br> - [TypeScript konfigürasyonu](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
234
234
|
|  | **Basitleştirilmiş Kurulum**<br><br>Minimum konfigürasyonla hızlıca çalışmaya başlayın. Uluslararasılaştırma, yönlendirme, AI, inşa ve içerik işleme için ayarları kolayca ayarlayın. <br><br> - [Next.js entegrasyonunu keşfedin](https://intlayer.org/doc/environment/nextjs) |
|
package/docs/tr/intlayer_CMS.md
CHANGED
|
@@ -92,7 +92,7 @@ const config: IntlayerConfig = {
|
|
|
92
92
|
*
|
|
93
93
|
* Editörü etkinleştirmek için Client ID ve client secret gereklidir.
|
|
94
94
|
* Bunlar, içeriği düzenleyen kullanıcıyı tanımlamaya olanak sağlar.
|
|
95
|
-
* Intlayer Dashboard - Projects (https://intlayer.org/
|
|
95
|
+
* Intlayer Dashboard - Projects (https://app.intlayer.org/projects) üzerinden yeni bir client oluşturarak elde edilebilir.
|
|
96
96
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
97
97
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
98
98
|
*/
|
|
@@ -142,7 +142,7 @@ const config = {
|
|
|
142
142
|
*
|
|
143
143
|
* Editörü etkinleştirmek için Client ID ve client secret gereklidir.
|
|
144
144
|
* Bunlar, içeriği düzenleyen kullanıcıyı tanımlamaya olanak sağlar.
|
|
145
|
-
* Intlayer Dashboard - Projects (https://intlayer.org/
|
|
145
|
+
* Intlayer Dashboard - Projects (https://app.intlayer.org/projects) üzerinde yeni bir client oluşturarak elde edilebilir.
|
|
146
146
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
147
147
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
148
148
|
*/
|
|
@@ -192,7 +192,7 @@ const config = {
|
|
|
192
192
|
*
|
|
193
193
|
* Editörü etkinleştirmek için Client ID ve client secret gereklidir.
|
|
194
194
|
* Bunlar, içeriği düzenleyen kullanıcıyı tanımlamaya olanak sağlar.
|
|
195
|
-
* Intlayer Dashboard - Projects (https://intlayer.org/
|
|
195
|
+
* Intlayer Dashboard - Projects (https://app.intlayer.org/projects) üzerinden yeni bir client oluşturarak elde edilebilirler.
|
|
196
196
|
* clientId: process.env.INTLAYER_CLIENT_ID,
|
|
197
197
|
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
198
198
|
*/
|
|
@@ -224,7 +224,7 @@ const config = {
|
|
|
224
224
|
module.exports = config;
|
|
225
225
|
```
|
|
226
226
|
|
|
227
|
-
> Eğer bir client ID ve client secret'ınız yoksa, bunları [Intlayer Dashboard - Projects](https://intlayer.org/
|
|
227
|
+
> Eğer bir client ID ve client secret'ınız yoksa, bunları [Intlayer Dashboard - Projects](https://app.intlayer.org/projects) üzerinden yeni bir client oluşturarak edinebilirsiniz.
|
|
228
228
|
|
|
229
229
|
> Mevcut tüm parametreleri görmek için [konfigürasyon dokümantasyonuna](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md) bakınız.
|
|
230
230
|
|
|
@@ -264,7 +264,7 @@ Bu komut, başlangıç içerik sözlüklerinizi yükler ve Intlayer platformu ü
|
|
|
264
264
|
|
|
265
265
|
### Sözlüğü düzenleme
|
|
266
266
|
|
|
267
|
-
Daha sonra sözlüğünüzü [Intlayer CMS](https://intlayer.org/
|
|
267
|
+
Daha sonra sözlüğünüzü [Intlayer CMS](https://app.intlayer.org/content) üzerinde görüntüleyip yönetebileceksiniz.
|
|
268
268
|
|
|
269
269
|
## Canlı senkronizasyon
|
|
270
270
|
|