@intlayer/docs 5.7.7 → 5.8.0-canary.0
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_next-i18next.md +3 -4
- package/blog/ar/intlayer_with_next-intl.md +3 -4
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/de/intlayer_with_next-i18next.md +3 -4
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/en/intlayer_with_next-i18next.md +3 -4
- package/blog/en/intlayer_with_next-intl.md +3 -4
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -4
- package/blog/en-GB/intlayer_with_next-intl.md +3 -4
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/es/intlayer_with_next-i18next.md +3 -4
- package/blog/es/intlayer_with_next-intl.md +3 -4
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/fr/intlayer_with_next-i18next.md +3 -4
- package/blog/fr/intlayer_with_next-intl.md +3 -4
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/hi/intlayer_with_next-i18next.md +3 -4
- package/blog/hi/intlayer_with_next-intl.md +3 -4
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/it/intlayer_with_next-i18next.md +3 -4
- package/blog/it/intlayer_with_next-intl.md +3 -4
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/ja/intlayer_with_next-i18next.md +3 -4
- package/blog/ja/intlayer_with_next-intl.md +3 -4
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ko/intlayer_with_next-i18next.md +3 -4
- package/blog/ko/intlayer_with_next-intl.md +3 -4
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/pt/intlayer_with_next-i18next.md +3 -4
- package/blog/pt/intlayer_with_next-intl.md +3 -4
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/ru/intlayer_with_next-i18next.md +3 -4
- package/blog/ru/intlayer_with_next-intl.md +3 -4
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/zh/intlayer_with_next-i18next.md +3 -4
- package/blog/zh/intlayer_with_next-intl.md +3 -4
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/dist/cjs/generated/docs.entry.cjs +41 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +41 -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/CI_CD.md +67 -41
- package/docs/ar/formatters.md +239 -0
- package/docs/ar/interest_of_intlayer.md +162 -49
- package/docs/ar/introduction.md +3 -3
- package/docs/ar/packages/intlayer/index.md +3 -3
- package/docs/ar/packages/next-intlayer/index.md +3 -3
- package/docs/de/CI_CD.md +63 -37
- package/docs/de/formatters.md +239 -0
- package/docs/de/interest_of_intlayer.md +161 -47
- package/docs/de/introduction.md +3 -3
- package/docs/de/packages/intlayer/index.md +3 -3
- package/docs/de/packages/next-intlayer/index.md +3 -3
- package/docs/de/packages/react-intlayer/index.md +3 -3
- package/docs/en/CI_CD.md +51 -27
- package/docs/en/formatters.md +250 -0
- package/docs/en/interest_of_intlayer.md +159 -46
- package/docs/en/introduction.md +3 -3
- package/docs/en/packages/intlayer/index.md +3 -3
- package/docs/en/packages/next-intlayer/index.md +3 -3
- package/docs/en/packages/react-intlayer/index.md +3 -3
- package/docs/en-GB/CI_CD.md +58 -32
- package/docs/en-GB/formatters.md +239 -0
- package/docs/en-GB/interest_of_intlayer.md +160 -53
- package/docs/en-GB/packages/intlayer/index.md +3 -3
- package/docs/en-GB/packages/next-intlayer/index.md +3 -3
- package/docs/en-GB/packages/react-intlayer/index.md +3 -3
- package/docs/es/CI_CD.md +68 -42
- package/docs/es/formatters.md +239 -0
- package/docs/es/interest_of_intlayer.md +159 -47
- package/docs/es/introduction.md +3 -3
- package/docs/es/packages/intlayer/index.md +3 -3
- package/docs/es/packages/next-intlayer/index.md +3 -3
- package/docs/fr/formatters.md +239 -0
- package/docs/fr/interest_of_intlayer.md +160 -46
- package/docs/fr/introduction.md +3 -3
- package/docs/fr/packages/intlayer/index.md +3 -3
- package/docs/fr/packages/next-intlayer/index.md +3 -3
- package/docs/fr/packages/react-intlayer/index.md +3 -3
- package/docs/hi/CI_CD.md +69 -44
- package/docs/hi/formatters.md +239 -0
- package/docs/hi/interest_of_intlayer.md +158 -42
- package/docs/hi/introduction.md +3 -3
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/hi/packages/next-intlayer/index.md +3 -3
- package/docs/hi/packages/react-intlayer/index.md +3 -3
- package/docs/it/CI_CD.md +67 -41
- package/docs/it/formatters.md +239 -0
- package/docs/it/interest_of_intlayer.md +160 -46
- package/docs/it/introduction.md +3 -3
- package/docs/it/packages/intlayer/index.md +3 -3
- package/docs/it/packages/next-intlayer/index.md +3 -3
- package/docs/it/packages/react-intlayer/index.md +3 -3
- package/docs/ja/CI_CD.md +67 -41
- package/docs/ja/formatters.md +261 -0
- package/docs/ja/interest_of_intlayer.md +157 -48
- package/docs/ja/introduction.md +3 -3
- package/docs/ja/packages/intlayer/index.md +3 -3
- package/docs/ja/packages/next-intlayer/index.md +3 -3
- package/docs/ja/packages/react-intlayer/index.md +3 -3
- package/docs/ko/CI_CD.md +63 -37
- package/docs/ko/formatters.md +258 -0
- package/docs/ko/interest_of_intlayer.md +160 -48
- package/docs/ko/introduction.md +3 -3
- package/docs/ko/packages/intlayer/index.md +3 -3
- package/docs/ko/packages/next-intlayer/index.md +3 -3
- package/docs/ko/packages/react-intlayer/index.md +3 -3
- package/docs/pt/CI_CD.md +67 -41
- package/docs/pt/formatters.md +239 -0
- package/docs/pt/interest_of_intlayer.md +162 -47
- package/docs/pt/introduction.md +3 -3
- package/docs/pt/packages/intlayer/index.md +3 -3
- package/docs/pt/packages/next-intlayer/index.md +3 -3
- package/docs/pt/packages/react-intlayer/index.md +3 -3
- package/docs/ru/CI_CD.md +70 -44
- package/docs/ru/formatters.md +239 -0
- package/docs/ru/interest_of_intlayer.md +168 -50
- package/docs/ru/introduction.md +3 -3
- package/docs/ru/packages/intlayer/index.md +3 -3
- package/docs/ru/packages/next-intlayer/index.md +3 -3
- package/docs/ru/packages/react-intlayer/index.md +3 -3
- package/docs/zh/CI_CD.md +62 -36
- package/docs/zh/formatters.md +239 -0
- package/docs/zh/interest_of_intlayer.md +158 -48
- package/docs/zh/introduction.md +3 -3
- package/docs/zh/packages/intlayer/index.md +3 -3
- package/docs/zh/packages/next-intlayer/index.md +3 -3
- package/docs/zh/packages/react-intlayer/index.md +3 -3
- package/package.json +12 -12
- package/src/generated/docs.entry.ts +41 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-14
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-08-20
|
|
4
4
|
title: Преимущества Intlayer
|
|
5
5
|
description: Узнайте о преимуществах и достоинствах использования Intlayer в ваших проектах. Поймите, почему Intlayer выделяется среди других фреймворков.
|
|
6
6
|
keywords:
|
|
@@ -11,58 +11,122 @@ keywords:
|
|
|
11
11
|
- Сравнение
|
|
12
12
|
slugs:
|
|
13
13
|
- doc
|
|
14
|
-
-
|
|
15
|
-
- interest
|
|
14
|
+
- why
|
|
16
15
|
---
|
|
17
16
|
|
|
18
|
-
#
|
|
17
|
+
# Почему стоит рассмотреть Intlayer?
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## Что такое Intlayer?
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
**Intlayer** — это библиотека интернационализации, разработанная специально для JavaScript-разработчиков. Она позволяет объявлять ваш контент в любом месте вашего кода. Она преобразует объявления многоязычного контента в структурированные словари для легкой интеграции в ваш код. Используя TypeScript, **Intlayer** делает вашу разработку более надежной и эффективной.
|
|
22
|
+
|
|
23
|
+
## Почему был создан Intlayer?
|
|
24
|
+
|
|
25
|
+
Intlayer был создан для решения общей проблемы, которая затрагивает все популярные библиотеки i18n, такие как `next-intl`, `react-i18next`, `react-intl`, `next-i18next`, `react-intl` и `vue-i18n`.
|
|
26
|
+
|
|
27
|
+
Все эти решения используют централизованный подход для перечисления и управления вашим контентом. Например:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
.
|
|
31
|
+
├── locales
|
|
32
|
+
│ ├── en.json
|
|
33
|
+
│ ├── fr.json
|
|
34
|
+
│ └── es.json
|
|
35
|
+
├── i18n.ts
|
|
36
|
+
└── src
|
|
37
|
+
└── components
|
|
38
|
+
└── MyComponent
|
|
39
|
+
└── index.tsx
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Или здесь с использованием пространств имён:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
.
|
|
46
|
+
├── locales
|
|
47
|
+
│ ├── en
|
|
48
|
+
│ │ ├── footer.json
|
|
49
|
+
│ │ └── navbar.json
|
|
50
|
+
│ ├── fr
|
|
51
|
+
│ │ ├── footer.json
|
|
52
|
+
│ │ └── navbar.json
|
|
53
|
+
│ └── es
|
|
54
|
+
│ ├── footer.json
|
|
55
|
+
│ └── navbar.json
|
|
56
|
+
├── i18n.ts
|
|
57
|
+
└── src
|
|
58
|
+
└── components
|
|
59
|
+
└── MyComponent
|
|
60
|
+
└── index.tsx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Такой тип архитектуры замедляет процесс разработки и усложняет поддержку кода по нескольким причинам:
|
|
64
|
+
|
|
65
|
+
1. **Для каждого нового созданного компонента необходимо:**
|
|
66
|
+
- Создать новый ресурс/пространство имён в папке `locales`
|
|
67
|
+
- Не забыть импортировать новое пространство имён на вашей странице
|
|
68
|
+
- Перевести ваш контент (часто выполняется вручную путём копирования/вставки из AI-сервисов)
|
|
69
|
+
|
|
70
|
+
2. **Для любых изменений в ваших компонентах необходимо:**
|
|
71
|
+
- Найти соответствующий ресурс/пространство имён (которое находится далеко от компонента)
|
|
72
|
+
- Перевести ваш контент
|
|
73
|
+
- Убедиться, что ваш контент актуален для всех локалей
|
|
74
|
+
- Проверить, что в вашем пространстве имён нет неиспользуемых ключей/значений
|
|
75
|
+
- Убедиться, что структура ваших JSON-файлов одинакова для всех локалей
|
|
76
|
+
|
|
77
|
+
В профессиональных проектах, использующих эти решения, часто применяются платформы локализации для управления переводом вашего контента. Однако для крупных проектов это может быстро стать дорогостоящим.
|
|
78
|
+
|
|
79
|
+
Для решения этой проблемы Intlayer использует подход, при котором контент ограничивается областью компонента и хранится рядом с вашим компонентом, как это часто делается с CSS (`styled-components`), типами, документацией (`storybook`) или модульными тестами (`jest`).
|
|
23
80
|
|
|
24
81
|
```bash codeFormat="typescript"
|
|
25
82
|
.
|
|
26
|
-
└──
|
|
83
|
+
└── components
|
|
27
84
|
└── MyComponent
|
|
28
85
|
├── index.content.ts
|
|
86
|
+
├── index.test.tsx
|
|
87
|
+
├── index.stories.tsx
|
|
29
88
|
└── index.tsx
|
|
30
89
|
```
|
|
31
90
|
|
|
32
91
|
```bash codeFormat="commonjs"
|
|
33
92
|
.
|
|
34
|
-
└──
|
|
93
|
+
└── components
|
|
35
94
|
└── MyComponent
|
|
36
95
|
├── index.content.cjs
|
|
37
|
-
|
|
96
|
+
├── index.test.mjs
|
|
97
|
+
├── index.stories.mjs
|
|
98
|
+
└── index.tsx
|
|
38
99
|
```
|
|
39
100
|
|
|
40
101
|
```bash codeFormat="esm"
|
|
41
102
|
.
|
|
42
|
-
└──
|
|
103
|
+
└── components
|
|
43
104
|
└── MyComponent
|
|
44
105
|
├── index.content.mjs
|
|
45
|
-
|
|
106
|
+
├── index.test.mjs
|
|
107
|
+
├── index.stories.mjs
|
|
108
|
+
└── index.tsx
|
|
46
109
|
```
|
|
47
110
|
|
|
48
|
-
```tsx fileName="./
|
|
111
|
+
```tsx fileName="./components/MyComponent/index.content.ts" codeFormat="typescript"
|
|
49
112
|
import { t, type Dictionary } from "intlayer";
|
|
50
113
|
|
|
51
114
|
const componentExampleContent = {
|
|
52
115
|
key: "component-example",
|
|
53
116
|
content: {
|
|
54
117
|
myTranslatedContent: t({
|
|
55
|
-
en: "Hello World",
|
|
56
|
-
|
|
57
|
-
|
|
118
|
+
en: "Hello World",
|
|
119
|
+
es: "Hola Mundo",
|
|
120
|
+
fr: "Bonjour le monde",
|
|
58
121
|
}),
|
|
59
122
|
},
|
|
60
123
|
} satisfies Dictionary;
|
|
61
124
|
|
|
125
|
+
// Экспортируем контент компонента по умолчанию
|
|
62
126
|
export default componentExampleContent;
|
|
63
127
|
```
|
|
64
128
|
|
|
65
|
-
```jsx fileName="./
|
|
129
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
66
130
|
import { t } from "intlayer";
|
|
67
131
|
|
|
68
132
|
/** @type {import('intlayer').Dictionary} */
|
|
@@ -70,9 +134,9 @@ const componentExampleContent = {
|
|
|
70
134
|
key: "component-example",
|
|
71
135
|
content: {
|
|
72
136
|
myTranslatedContent: t({
|
|
73
|
-
en: "Hello World",
|
|
74
|
-
|
|
75
|
-
|
|
137
|
+
en: "Hello World",
|
|
138
|
+
es: "Hola Mundo",
|
|
139
|
+
fr: "Bonjour le monde",
|
|
76
140
|
}),
|
|
77
141
|
},
|
|
78
142
|
};
|
|
@@ -80,25 +144,27 @@ const componentExampleContent = {
|
|
|
80
144
|
export default componentExampleContent;
|
|
81
145
|
```
|
|
82
146
|
|
|
83
|
-
```jsx fileName="./
|
|
147
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
84
148
|
const { t } = require("intlayer");
|
|
85
149
|
|
|
86
150
|
/** @type {import('intlayer').Dictionary} */
|
|
151
|
+
// Определение контента компонента с переводами
|
|
87
152
|
const componentExampleContent = {
|
|
88
153
|
key: "component-example",
|
|
89
154
|
content: {
|
|
90
155
|
myTranslatedContent: t({
|
|
91
|
-
en: "Hello World",
|
|
92
|
-
|
|
93
|
-
|
|
156
|
+
en: "Hello World",
|
|
157
|
+
es: "Hola Mundo",
|
|
158
|
+
fr: "Bonjour le monde",
|
|
94
159
|
}),
|
|
95
160
|
},
|
|
96
161
|
};
|
|
97
162
|
|
|
163
|
+
// Экспортируем контент компонента для CommonJS
|
|
98
164
|
module.exports = componentExampleContent;
|
|
99
165
|
```
|
|
100
166
|
|
|
101
|
-
```tsx fileName="./
|
|
167
|
+
```tsx fileName="./components/MyComponent/index.tsx" codeFormat="typescript"
|
|
102
168
|
import { useIntlayer } from "react-intlayer";
|
|
103
169
|
|
|
104
170
|
export const ComponentExample = () => {
|
|
@@ -108,7 +174,7 @@ export const ComponentExample = () => {
|
|
|
108
174
|
};
|
|
109
175
|
```
|
|
110
176
|
|
|
111
|
-
```jsx fileName="./
|
|
177
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
112
178
|
import { useIntlayer } from "react-intlayer";
|
|
113
179
|
|
|
114
180
|
const ComponentExample = () => {
|
|
@@ -118,7 +184,7 @@ const ComponentExample = () => {
|
|
|
118
184
|
};
|
|
119
185
|
```
|
|
120
186
|
|
|
121
|
-
```jsx fileName="./
|
|
187
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
122
188
|
const { useIntlayer } = require("react-intlayer");
|
|
123
189
|
|
|
124
190
|
const ComponentExample = () => {
|
|
@@ -128,27 +194,79 @@ const ComponentExample = () => {
|
|
|
128
194
|
};
|
|
129
195
|
```
|
|
130
196
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
-
|
|
197
|
+
Этот подход позволяет вам:
|
|
198
|
+
|
|
199
|
+
1. **Увеличить скорость разработки**
|
|
200
|
+
- Файлы `.content.{{ts|mjs|cjs|json}}` можно создавать с помощью расширения для VSCode
|
|
201
|
+
- Инструменты автозаполнения на базе ИИ в вашей IDE (например, GitHub Copilot) могут помочь вам объявлять ваш контент, уменьшая необходимость копирования/вставки
|
|
202
|
+
|
|
203
|
+
2. **Снизить сложность вашей кодовой базы**
|
|
204
|
+
|
|
205
|
+
3. **Повысить поддерживаемость вашей кодовой базы**
|
|
206
|
+
|
|
207
|
+
4. **Проще дублировать ваши компоненты и связанный с ними контент (например: компоненты входа/регистрации и т.д.)**
|
|
208
|
+
- Ограничивая риск влияния на контент других компонентов
|
|
209
|
+
- Копируя и вставляя ваш контент из одного приложения в другое без внешних зависимостей
|
|
210
|
+
|
|
211
|
+
5. **Избегать загрязнения кодовой базы неиспользуемыми ключами/значениями для неиспользуемых компонентов**
|
|
212
|
+
- Если вы не используете компонент, вам не нужно импортировать его контент
|
|
213
|
+
- Если вы удаляете компонент, вам будет проще не забыть удалить связанный с ним контент, так как он будет находиться в той же папке
|
|
214
|
+
|
|
215
|
+
6. **Снизить затраты на размышления для ИИ-агентов при объявлении вашего многоязычного контента**
|
|
216
|
+
- ИИ-агенту не нужно сканировать всю вашу кодовую базу, чтобы понять, где реализовать ваш контент
|
|
217
|
+
- Переводы легко выполняются с помощью инструментов автозаполнения на базе ИИ в вашей IDE (например, GitHub Copilot)
|
|
218
|
+
|
|
219
|
+
7. **Оптимизировать производительность загрузки**
|
|
220
|
+
- Если компонент загружается лениво, связанный с ним контент будет загружен одновременно
|
|
221
|
+
|
|
222
|
+
## Дополнительные возможности Intlayer
|
|
223
|
+
|
|
224
|
+
| Функция | Описание |
|
|
225
|
+
| ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
226
|
+
|  | **Поддержка нескольких фреймворков**<br><br>Intlayer совместим со всеми основными фреймворками и библиотеками, включая Next.js, React, Vite, Vue.js, Nuxt, Preact, Express и другие. |
|
|
227
|
+
|  | **Управление контентом на основе JavaScript**<br><br>Используйте гибкость JavaScript для эффективного определения и управления вашим контентом. <br><br> - [Объявление контента](https://intlayer.org/doc/concept/content) |
|
|
228
|
+
|  | **Файл объявления контента для каждого локалитета**<br><br>Ускорьте разработку, объявляя ваш контент один раз, до автоматической генерации.<br><br> - [Файл объявления контента для каждого локалитета](https://intlayer.org/doc/concept/per-locale-file) |
|
|
229
|
+
|  | **Типобезопасная среда**<br><br>Используйте TypeScript, чтобы гарантировать отсутствие ошибок в определениях контента и коде, а также получать преимущества автозаполнения в IDE.<br><br> - [Настройка TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
230
|
+
|  | **Упрощённая настройка**<br><br>Быстрый старт с минимальной конфигурацией. Легко настраивайте параметры интернационализации, маршрутизации, ИИ, сборки и обработки контента.<br><br> - [Изучите интеграцию с Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
231
|
+
|  | **Упрощённый доступ к контенту**<br><br>Нет необходимости вызывать функцию `t` для каждого элемента контента. Получайте весь ваш контент напрямую с помощью одного хука.<br><br> - [Интеграция с React](https://intlayer.org/doc/environment/create-react-app) |
|
|
232
|
+
|  | **Единообразная реализация серверных компонентов**<br><br>Идеально подходит для серверных компонентов Next.js, используйте одну и ту же реализацию как для клиентских, так и для серверных компонентов, нет необходимости передавать функцию `t` через каждый серверный компонент. <br><br> - [Серверные компоненты](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
|
|
233
|
+
|  | **Организованная кодовая база**<br><br>Поддерживайте вашу кодовую базу более организованной: 1 компонент = 1 словарь в той же папке. Переводы, расположенные рядом с соответствующими компонентами, повышают удобство сопровождения и ясность. <br><br> - [Как работает Intlayer](https://intlayer.org/doc/concept/how-works-intlayer) |
|
|
234
|
+
|  | **Расширенная маршрутизация**<br><br>Полная поддержка маршрутизации приложений, плавно адаптирующаяся к сложным структурам приложений для Next.js, React, Vite, Vue.js и других.<br><br> - [Изучите интеграцию с Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
235
|
+
|  | **Поддержка Markdown**<br><br>Импортируйте и интерпретируйте локализационные файлы и удалённый Markdown для многоязычного контента, такого как политики конфиденциальности, документация и др. Интерпретируйте и делайте метаданные Markdown доступными в вашем коде.<br><br> - [Файлы контента](https://intlayer.org/doc/concept/content/file) |
|
|
236
|
+
|  | **Бесплатный визуальный редактор и CMS**<br><br>Для авторов контента доступен бесплатный визуальный редактор и CMS, что устраняет необходимость в платформе локализации. Сохраняйте синхронизацию контента с помощью Git или полностью/частично внешне управляйте им через CMS.<br><br> - [Редактор Intlayer](https://intlayer.org/doc/concept/editor) <br> - [CMS Intlayer](https://intlayer.org/doc/concept/cms) |
|
|
237
|
+
|  | **Контент с поддержкой tree-shaking**<br><br>Контент с поддержкой tree-shaking, уменьшающий размер итогового бандла. Загружает контент по компонентам, исключая неиспользуемый контент из вашего бандла. Поддерживает ленивую загрузку для повышения эффективности загрузки приложения. <br><br> - [Оптимизация сборки приложения](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
|
|
238
|
+
|  | **Статическая отрисовка**<br><br>Не блокирует статическую отрисовку. <br><br> - [Интеграция с Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
239
|
+
|  | **Перевод с использованием ИИ**<br><br>Преобразуйте ваш сайт на 231 язык всего одним кликом с помощью продвинутых инструментов перевода на базе ИИ от Intlayer, используя вашего собственного поставщика ИИ/ключ API. <br><br> - [Интеграция CI/CD](https://intlayer.org/doc/concept/ci-cd) <br> - [CLI Intlayer](https://intlayer.org/doc/concept/cli) <br> - [Автозаполнение](https://intlayer.org/doc/concept/auto-fill) |
|
|
240
|
+
|  | **Интеграция сервера MCP**<br><br>Обеспечивает сервер MCP (Model Context Protocol) для автоматизации IDE, позволяя бесшовно управлять контентом и процессами интернационализации (i18n) непосредственно в вашей среде разработки. <br><br> - [Сервер MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/mcp_server.md) |
|
|
241
|
+
|  | **Расширение VSCode**<br><br>Intlayer предоставляет расширение для VSCode, которое поможет вам управлять вашим контентом и переводами, создавать словари, переводить ваш контент и многое другое. <br><br> - [Расширение VSCode](https://intlayer.org/doc/vs-code-extension) |
|
|
242
|
+
|  | **Взаимодействие**<br><br>Обеспечивает взаимодействие с react-i18next, next-i18next, next-intl и react-intl. <br><br> - [Intlayer и react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer и next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer и next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
|
|
243
|
+
|
|
244
|
+
## Сравнение Intlayer с другими решениями
|
|
245
|
+
|
|
246
|
+
| Функция | Intlayer | React-i18next / i18next | React-Intl (FormatJS) | LinguiJS | next-intl | next-i18next | vue-i18n |
|
|
247
|
+
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------- |
|
|
248
|
+
| **Переводы рядом с компонентами** | Да, контент расположен рядом с каждым компонентом | Нет | Нет | Нет | Нет | Нет | Да - с использованием `Single File Components` (SFCs) |
|
|
249
|
+
| **Интеграция с TypeScript** | Продвинутая, автоматически сгенерированные строгие типы | Базовая; дополнительная конфигурация для безопасности | Хорошая, но менее строгая | Типы, требуется конфигурация | Хорошая | Базовая | Хорошая (типы доступны; требуется настройка безопасности ключей) |
|
|
250
|
+
| **Обнаружение отсутствующих переводов** | Ошибка/предупреждение во время сборки | В основном строки-заменители во время выполнения | Строки-заменители | Требуется дополнительная настройка | Строки-заменители во время выполнения | Строки-заменители во время выполнения | Строки-заменители/предупреждения во время выполнения (настраиваемо) |
|
|
251
|
+
| **Обогащённый контент (JSX/Markdown/компоненты)** | Прямая поддержка, включая React-узлы | Ограничено / только интерполяция | Синтаксис ICU, не настоящий JSX | Ограничено | Не предназначено для сложных узлов | Ограничено | Ограничено (компоненты через `<i18n-t>`, Markdown через плагины) |
|
|
252
|
+
| **Перевод с использованием ИИ** | Да, поддерживает нескольких поставщиков ИИ. Можно использовать с собственными API-ключами. Учитывает контекст вашего приложения и объем контента | Нет | Нет | Нет | Нет | Нет | Нет |
|
|
253
|
+
| **Визуальный редактор** | Да, локальный визуальный редактор + опциональная CMS; может вынести содержимое кодовой базы; встраиваемый | Нет / доступно через внешние платформы локализации | Нет / доступно через внешние платформы локализации | Нет / доступно через внешние платформы локализации | Нет / доступно через внешние платформы локализации | Нет / доступно через внешние платформы локализации | Нет / доступно через внешние платформы локализации |
|
|
254
|
+
| **Локализованная маршрутизация** | Встроенная, поддержка middleware | Плагины или ручная настройка | Не встроена | Плагин/ручная настройка | Встроена | Встроена | Вручную через Vue Router (обрабатывается Nuxt i18n) |
|
|
255
|
+
| **Динамическая генерация маршрутов** | Да | Плагин/экосистема или ручная настройка | Не предоставляется | Плагин/ручная настройка | Да | Да | Не предоставляется (предоставляется Nuxt i18n) |
|
|
256
|
+
| **Множественное число** | Шаблоны на основе перечислений; см. документацию | Настраиваемо (плагины, такие как i18next-icu) | Продвинутое (ICU) | Продвинутое (ICU/messageformat) | Хорошо | Хорошо | Продвинутое (встроенные правила множественного числа) |
|
|
257
|
+
| **Форматирование (даты, числа, валюты)** | Оптимизированные форматтеры (Intl под капотом) | Через плагины или пользовательское использование Intl | Продвинутые ICU форматтеры | Помощники ICU/CLI | Хорошо (помощники Intl) | Хорошо (помощники Intl) | Встроенные форматтеры даты/числа (Intl) |
|
|
258
|
+
| **Формат содержимого** | .tsx, .ts, .js, .json, .md, .txt | .json | .json, .js | .po, .json | .json, .js, .ts | .json | .json, .js |
|
|
259
|
+
| **Поддержка ICU** | В разработке (родной ICU) | Через плагин (i18next-icu) | Да | Да | Да | Через плагин (i18next-icu) | Через пользовательский форматтер/компилятор |
|
|
260
|
+
| **SEO помощники (hreflang, sitemap)** | Встроенные инструменты: помощники для sitemap, **robots.txt**, метаданные | Плагины сообщества/ручное управление | Не является ядром | Не является ядром | Хорошо | Хорошо | Не является ядром (Nuxt i18n предоставляет помощники) |
|
|
261
|
+
| **Экосистема / Сообщество** | Меньше, но быстро растет и активно реагирует | Самое большое и зрелое | Большое, корпоративное | Растущее, меньше | Среднего размера, ориентировано на Next.js | Среднего размера, ориентировано на Next.js | Большое в экосистеме Vue |
|
|
262
|
+
| **Серверный рендеринг и серверные компоненты** | Да, оптимизировано для SSR / React Server Components | Поддерживается, требуется некоторая настройка | Поддерживается в Next.js | Поддерживается | Полная поддержка | Полная поддержка | SSR через Nuxt/Vue SSR (без RSC) |
|
|
263
|
+
| **Tree-shaking (загрузка только используемого контента)** | Да, на уровне компонентов во время сборки с помощью плагинов Babel/SWC | Обычно загружает всё (можно улучшить с помощью пространств имён/разделения кода) | Обычно загружает всё | Не по умолчанию | Частично | Частично | Частично (с разделением кода/ручной настройкой) |
|
|
264
|
+
| **Ленивая загрузка** | Да, по локалям/по компонентам | Да (например, бэкенды/пространства имён по требованию) | Да (разделение пакетов локалей) | Да (динамический импорт каталогов) | Да (по маршрутам/локалям) | Да (по маршрутам/локалям) | Да (асинхронные сообщения локалей) |
|
|
265
|
+
| **Управление крупными проектами** | Поощряет модульность, подходит для дизайн-систем | Требует хорошей дисциплины в работе с файлами | Центральные каталоги могут стать большими | Может стать сложным | Модульный с настройкой | Модульный с настройкой | Модульный с настройкой Vue Router/Nuxt i18n |
|
|
266
|
+
|
|
267
|
+
## История документа
|
|
268
|
+
|
|
269
|
+
| Версия | Дата | Изменения |
|
|
270
|
+
| ------ | ---------- | -------------------------------- |
|
|
271
|
+
| 5.8.0 | 2025-08-19 | Обновление сравнительной таблицы |
|
|
272
|
+
| 5.5.10 | 2025-06-29 | Инициализация истории |
|
package/docs/ru/introduction.md
CHANGED
|
@@ -44,8 +44,8 @@ const componentContent = {
|
|
|
44
44
|
content: {
|
|
45
45
|
myTranslatedContent: t({
|
|
46
46
|
en: "Hello World",
|
|
47
|
-
fr: "Bonjour le monde",
|
|
48
47
|
es: "Hola Mundo",
|
|
48
|
+
fr: "Bonjour le monde",
|
|
49
49
|
}),
|
|
50
50
|
},
|
|
51
51
|
} satisfies Dictionary;
|
|
@@ -64,8 +64,8 @@ const componentContent = {
|
|
|
64
64
|
content: {
|
|
65
65
|
myTranslatedContent: t({
|
|
66
66
|
en: "Hello World",
|
|
67
|
-
fr: "Bonjour le monde",
|
|
68
67
|
es: "Hola Mundo",
|
|
68
|
+
fr: "Bonjour le monde",
|
|
69
69
|
}),
|
|
70
70
|
},
|
|
71
71
|
};
|
|
@@ -84,8 +84,8 @@ const componentContent = {
|
|
|
84
84
|
content: {
|
|
85
85
|
myTranslatedContent: t({
|
|
86
86
|
en: "Hello World",
|
|
87
|
-
fr: "Bonjour le monde",
|
|
88
87
|
es: "Hola Mundo",
|
|
88
|
+
fr: "Bonjour le monde",
|
|
89
89
|
}),
|
|
90
90
|
},
|
|
91
91
|
};
|
|
@@ -148,8 +148,8 @@ const clientComponentContent = {
|
|
|
148
148
|
content: {
|
|
149
149
|
myTranslatedContent: t({
|
|
150
150
|
en: "Hello World",
|
|
151
|
-
fr: "Bonjour le monde",
|
|
152
151
|
es: "Hola Mundo",
|
|
152
|
+
fr: "Bonjour le monde",
|
|
153
153
|
}),
|
|
154
154
|
numberOfCar: enu({
|
|
155
155
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -174,8 +174,8 @@ const clientComponentContent = {
|
|
|
174
174
|
content: {
|
|
175
175
|
myTranslatedContent: t({
|
|
176
176
|
en: "Hello World",
|
|
177
|
-
fr: "Bonjour le monde",
|
|
178
177
|
es: "Hola Mundo",
|
|
178
|
+
fr: "Bonjour le monde",
|
|
179
179
|
}),
|
|
180
180
|
numberOfCar: enu({
|
|
181
181
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -200,8 +200,8 @@ const clientComponentContent = {
|
|
|
200
200
|
content: {
|
|
201
201
|
myTranslatedContent: t({
|
|
202
202
|
en: "Hello World",
|
|
203
|
-
fr: "Bonjour le monde",
|
|
204
203
|
es: "Hola Mundo",
|
|
204
|
+
fr: "Bonjour le monde",
|
|
205
205
|
}),
|
|
206
206
|
numberOfCar: enu({
|
|
207
207
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -110,8 +110,8 @@ const clientComponentContent = {
|
|
|
110
110
|
content: {
|
|
111
111
|
myTranslatedContent: t({
|
|
112
112
|
en: "Hello World",
|
|
113
|
-
fr: "Bonjour le monde",
|
|
114
113
|
es: "Hola Mundo",
|
|
114
|
+
fr: "Bonjour le monde",
|
|
115
115
|
}),
|
|
116
116
|
numberOfCar: enu({
|
|
117
117
|
"<-1": "Less than minus one car",
|
|
@@ -136,8 +136,8 @@ const clientComponentContent = {
|
|
|
136
136
|
content: {
|
|
137
137
|
myTranslatedContent: t({
|
|
138
138
|
en: "Hello World",
|
|
139
|
-
fr: "Bonjour le monde",
|
|
140
139
|
es: "Hola Mundo",
|
|
140
|
+
fr: "Bonjour le monde",
|
|
141
141
|
}),
|
|
142
142
|
numberOfCar: enu({
|
|
143
143
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -162,8 +162,8 @@ const clientComponentContent = {
|
|
|
162
162
|
content: {
|
|
163
163
|
myTranslatedContent: t({
|
|
164
164
|
en: "Hello World",
|
|
165
|
-
fr: "Bonjour le monde",
|
|
166
165
|
es: "Hola Mundo",
|
|
166
|
+
fr: "Bonjour le monde",
|
|
167
167
|
}),
|
|
168
168
|
numberOfCar: enu({
|
|
169
169
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -110,8 +110,8 @@ const component1Content = {
|
|
|
110
110
|
content: {
|
|
111
111
|
myTranslatedContent: t({
|
|
112
112
|
en: "Hello World",
|
|
113
|
-
fr: "Bonjour le monde",
|
|
114
113
|
es: "Hola Mundo",
|
|
114
|
+
fr: "Bonjour le monde",
|
|
115
115
|
}),
|
|
116
116
|
numberOfCar: enu({
|
|
117
117
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -136,8 +136,8 @@ const component1Content = {
|
|
|
136
136
|
content: {
|
|
137
137
|
myTranslatedContent: t({
|
|
138
138
|
en: "Hello World",
|
|
139
|
-
fr: "Bonjour le monde",
|
|
140
139
|
es: "Hola Mundo",
|
|
140
|
+
fr: "Bonjour le monde",
|
|
141
141
|
}),
|
|
142
142
|
numberOfCar: enu({
|
|
143
143
|
"<-1": "Меньше чем минус одна машина",
|
|
@@ -162,8 +162,8 @@ const component1Content = {
|
|
|
162
162
|
content: {
|
|
163
163
|
myTranslatedContent: t({
|
|
164
164
|
en: "Hello World",
|
|
165
|
-
fr: "Bonjour le monde",
|
|
166
165
|
es: "Hola Mundo",
|
|
166
|
+
fr: "Bonjour le monde",
|
|
167
167
|
}),
|
|
168
168
|
numberOfCar: enu({
|
|
169
169
|
"<-1": "Меньше чем минус одна машина",
|