@intlayer/docs 7.1.9 → 7.2.2
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 +1 -0
- 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/intlayer_with_svelte_kit.md +738 -0
- package/docs/ar/intlayer_with_vite+svelte.md +288 -104
- package/docs/de/intlayer_with_svelte_kit.md +738 -0
- package/docs/de/intlayer_with_vite+svelte.md +302 -101
- package/docs/en/intlayer_with_nextjs_16.md +10 -2
- package/docs/en/intlayer_with_svelte_kit.md +570 -0
- package/docs/en/intlayer_with_vite+svelte.md +22 -6
- package/docs/en/introduction.md +2 -0
- package/docs/en-GB/intlayer_with_svelte_kit.md +738 -0
- package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
- package/docs/es/intlayer_with_svelte_kit.md +738 -0
- package/docs/es/intlayer_with_vite+svelte.md +300 -107
- package/docs/fr/intlayer_with_svelte_kit.md +770 -0
- package/docs/fr/intlayer_with_vite+svelte.md +297 -101
- package/docs/hi/intlayer_with_svelte_kit.md +738 -0
- package/docs/hi/intlayer_with_vite+svelte.md +298 -108
- package/docs/id/intlayer_with_svelte_kit.md +738 -0
- package/docs/id/intlayer_with_vite+svelte.md +277 -99
- package/docs/it/intlayer_with_svelte_kit.md +770 -0
- package/docs/it/intlayer_with_vite+svelte.md +275 -99
- package/docs/ja/intlayer_with_svelte_kit.md +738 -0
- package/docs/ja/intlayer_with_vite+svelte.md +295 -110
- package/docs/ko/intlayer_with_svelte_kit.md +738 -0
- package/docs/ko/intlayer_with_vite+svelte.md +286 -199
- package/docs/pl/intlayer_with_svelte_kit.md +740 -0
- package/docs/pl/intlayer_with_vite+svelte.md +273 -101
- package/docs/pt/intlayer_with_svelte_kit.md +772 -0
- package/docs/pt/intlayer_with_vite+svelte.md +290 -96
- package/docs/ru/intlayer_with_svelte_kit.md +738 -0
- package/docs/ru/intlayer_with_vite+svelte.md +275 -99
- package/docs/tr/intlayer_with_svelte_kit.md +738 -0
- package/docs/tr/intlayer_with_vite+svelte.md +297 -119
- package/docs/vi/intlayer_with_svelte_kit.md +738 -0
- package/docs/vi/intlayer_with_vite+svelte.md +275 -102
- package/docs/zh/intlayer_with_svelte_kit.md +738 -0
- package/docs/zh/intlayer_with_vite+svelte.md +309 -107
- package/package.json +9 -9
- package/src/generated/docs.entry.ts +19 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Как перевести ваше Vite
|
|
3
|
+
updatedAt: 2025-11-19
|
|
4
|
+
title: Как перевести ваше приложение на Vite и Svelte – руководство по i18n 2025
|
|
5
5
|
description: Узнайте, как сделать ваш сайт на Vite и Svelte многоязычным. Следуйте документации для интернационализации (i18n) и перевода.
|
|
6
6
|
keywords:
|
|
7
7
|
- Интернационализация
|
|
@@ -14,34 +14,47 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- environment
|
|
16
16
|
- vite-and-svelte
|
|
17
|
-
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
|
|
18
18
|
history:
|
|
19
|
+
- version: 5.5.11
|
|
20
|
+
date: 2025-11-19
|
|
21
|
+
changes: Обновление документации
|
|
19
22
|
- version: 5.5.10
|
|
20
23
|
date: 2025-06-29
|
|
21
24
|
changes: Инициализация истории
|
|
22
25
|
---
|
|
23
26
|
|
|
24
|
-
#
|
|
27
|
+
# Перевод вашего сайта на Vite и Svelte с использованием Intlayer | Интернационализация (i18n)
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
## Содержание
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
<TOC/>
|
|
29
32
|
|
|
30
33
|
## Что такое Intlayer?
|
|
31
34
|
|
|
32
|
-
**Intlayer**
|
|
35
|
+
**Intlayer** — это инновационная, открытая библиотека интернационализации (i18n), созданная для упрощения поддержки многоязычности в современных веб-приложениях.
|
|
33
36
|
|
|
34
|
-
С
|
|
37
|
+
С Intlayer вы можете:
|
|
35
38
|
|
|
36
|
-
- **Легко управлять переводами** с
|
|
39
|
+
- **Легко управлять переводами** с помощью декларативных словарей на уровне компонентов.
|
|
37
40
|
- **Динамически локализовать метаданные**, маршруты и контент.
|
|
38
|
-
- **Обеспечить поддержку TypeScript** с
|
|
39
|
-
-
|
|
41
|
+
- **Обеспечить поддержку TypeScript** с автогенерируемыми типами, улучшая автодополнение и обнаружение ошибок.
|
|
42
|
+
- **Воспользоваться расширенными возможностями**, такими как динамическое определение и переключение локали.
|
|
40
43
|
|
|
41
44
|
---
|
|
42
45
|
|
|
43
46
|
## Пошаговое руководство по настройке Intlayer в приложении на Vite и Svelte
|
|
44
47
|
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
50
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
51
|
+
title="Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
Смотрите [Шаблон приложения](https://github.com/aymericzip/intlayer-vite-svelte-template) на GitHub.
|
|
57
|
+
|
|
45
58
|
### Шаг 1: Установка зависимостей
|
|
46
59
|
|
|
47
60
|
Установите необходимые пакеты с помощью npm:
|
|
@@ -61,23 +74,26 @@ yarn add intlayer svelte-intlayer
|
|
|
61
74
|
yarn add vite-intlayer --save-dev
|
|
62
75
|
```
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
```bash packageManager="bun"
|
|
78
|
+
bun add intlayer svelte-intlayer
|
|
79
|
+
bun add vite-intlayer --save-dev
|
|
80
|
+
```
|
|
65
81
|
|
|
66
82
|
- **intlayer**
|
|
67
83
|
|
|
68
|
-
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, [объявления контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/
|
|
84
|
+
Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, [объявления контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md), транспиляции и [CLI-команд](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_cli.md).
|
|
69
85
|
|
|
70
86
|
- **svelte-intlayer**
|
|
71
87
|
Пакет, который интегрирует Intlayer с приложением на Svelte. Он предоставляет провайдеры контекста и хуки для интернационализации в Svelte.
|
|
72
88
|
|
|
73
89
|
- **vite-intlayer**
|
|
74
|
-
Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также middleware для определения предпочтительной локали пользователя, управления
|
|
90
|
+
Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также middleware для определения предпочтительной локали пользователя, управления cookie и обработки перенаправления URL.
|
|
75
91
|
|
|
76
92
|
### Шаг 2: Конфигурация вашего проекта
|
|
77
93
|
|
|
78
94
|
Создайте файл конфигурации для настройки языков вашего приложения:
|
|
79
95
|
|
|
80
|
-
```typescript fileName="intlayer.config.ts"
|
|
96
|
+
```typescript fileName="intlayer.config.ts"
|
|
81
97
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
82
98
|
|
|
83
99
|
const config: IntlayerConfig = {
|
|
@@ -88,25 +104,7 @@ const config: IntlayerConfig = {
|
|
|
88
104
|
Locales.SPANISH,
|
|
89
105
|
// Ваши другие локали
|
|
90
106
|
],
|
|
91
|
-
defaultLocale: Locales.ENGLISH,
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
107
|
|
|
95
|
-
export default config;
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
99
|
-
import { Locales } from "intlayer";
|
|
100
|
-
|
|
101
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
102
|
-
const config = {
|
|
103
|
-
internationalization: {
|
|
104
|
-
locales: [
|
|
105
|
-
Locales.ENGLISH,
|
|
106
|
-
Locales.FRENCH,
|
|
107
|
-
Locales.SPANISH,
|
|
108
|
-
// Ваши другие локали
|
|
109
|
-
],
|
|
110
108
|
defaultLocale: Locales.ENGLISH,
|
|
111
109
|
},
|
|
112
110
|
};
|
|
@@ -114,44 +112,13 @@ const config = {
|
|
|
114
112
|
export default config;
|
|
115
113
|
```
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
const { Locales } = require("intlayer");
|
|
119
|
-
|
|
120
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
121
|
-
// Конфигурация интернационализации
|
|
122
|
-
const config = {
|
|
123
|
-
internationalization: {
|
|
124
|
-
locales: [
|
|
125
|
-
Locales.ENGLISH,
|
|
126
|
-
Locales.FRENCH,
|
|
127
|
-
Locales.SPANISH,
|
|
128
|
-
// Ваши другие локали
|
|
129
|
-
],
|
|
130
|
-
defaultLocale: Locales.ENGLISH,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
module.exports = config;
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
> Через этот конфигурационный файл вы можете настроить локализованные URL, перенаправление в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
|
|
115
|
+
> Через этот файл конфигурации вы можете настроить локализованные URL, перенаправление в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
|
|
138
116
|
|
|
139
117
|
### Шаг 3: Интеграция Intlayer в вашу конфигурацию Vite
|
|
140
118
|
|
|
141
119
|
Добавьте плагин intlayer в вашу конфигурацию.
|
|
142
120
|
|
|
143
|
-
```typescript fileName="vite.config.ts"
|
|
144
|
-
import { defineConfig } from "vite";
|
|
145
|
-
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
146
|
-
import { intlayer } from "vite-intlayer";
|
|
147
|
-
|
|
148
|
-
// https://vitejs.dev/config/
|
|
149
|
-
export default defineConfig({
|
|
150
|
-
plugins: [svelte(), intlayer()],
|
|
151
|
-
});
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
```javascript fileName="vite.config.mjs" codeFormat="esm"
|
|
121
|
+
```typescript fileName="vite.config.ts"
|
|
155
122
|
import { defineConfig } from "vite";
|
|
156
123
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
157
124
|
import { intlayer } from "vite-intlayer";
|
|
@@ -162,20 +129,9 @@ export default defineConfig({
|
|
|
162
129
|
});
|
|
163
130
|
```
|
|
164
131
|
|
|
165
|
-
|
|
166
|
-
const { defineConfig } = require("vite");
|
|
167
|
-
const react = require("@vitejs/plugin-react-swc");
|
|
168
|
-
const { intlayer } = require("vite-intlayer");
|
|
169
|
-
|
|
170
|
-
// https://vitejs.dev/config/
|
|
171
|
-
module.exports = defineConfig({
|
|
172
|
-
plugins: [react(), intlayer()],
|
|
173
|
-
});
|
|
174
|
-
```
|
|
132
|
+
> Плагин Vite `intlayer()` используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, предоставляет алиасы для оптимизации производительности.
|
|
175
133
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
### Шаг 4: Объявите Ваш Контент
|
|
134
|
+
### Шаг 4: Объявите ваш контент
|
|
179
135
|
|
|
180
136
|
Создайте и управляйте декларациями контента для хранения переводов:
|
|
181
137
|
|
|
@@ -200,6 +156,7 @@ export default appContent;
|
|
|
200
156
|
import { t } from "intlayer";
|
|
201
157
|
|
|
202
158
|
/** @type {import('intlayer').Dictionary} */
|
|
159
|
+
// Объявление словаря контента приложения
|
|
203
160
|
const appContent = {
|
|
204
161
|
key: "app",
|
|
205
162
|
content: {
|
|
@@ -218,7 +175,7 @@ export default appContent;
|
|
|
218
175
|
const { t } = require("intlayer");
|
|
219
176
|
|
|
220
177
|
/** @type {import('intlayer').Dictionary} */
|
|
221
|
-
// Объявление словаря контента
|
|
178
|
+
// Объявление словаря контента приложения
|
|
222
179
|
const appContent = {
|
|
223
180
|
key: "app",
|
|
224
181
|
content: {
|
|
@@ -250,33 +207,254 @@ module.exports = appContent;
|
|
|
250
207
|
}
|
|
251
208
|
```
|
|
252
209
|
|
|
253
|
-
> Ваши
|
|
210
|
+
> Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они будут включены в директорию `contentDir` (по умолчанию, `./src`). И соответствовать расширению файла объявления контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
254
211
|
|
|
255
|
-
> Для получения дополнительной информации обратитесь к [документации по объявлению контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/
|
|
212
|
+
> Для получения дополнительной информации обратитесь к [документации по объявлению контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md).
|
|
256
213
|
|
|
257
214
|
### Шаг 5: Использование Intlayer в вашем коде
|
|
258
215
|
|
|
259
|
-
|
|
216
|
+
```svelte fileName="src/App.svelte"
|
|
217
|
+
<script>
|
|
218
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
219
|
+
|
|
220
|
+
const content = useIntlayer("app");
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<div>
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
<!-- Отобразить контент как простой контент -->
|
|
227
|
+
<h1>{$content.title}</h1>
|
|
228
|
+
<!-- Отобразить контент с возможностью редактирования через редактор -->
|
|
229
|
+
<h1><svelte:component this={$content.title} /></h1>
|
|
230
|
+
<!-- Отобразить контент как строку -->
|
|
231
|
+
<div aria-label={$content.title.value}></div>
|
|
232
|
+
```
|
|
260
233
|
|
|
261
234
|
### (Необязательно) Шаг 6: Изменение языка вашего контента
|
|
262
235
|
|
|
263
|
-
|
|
236
|
+
```svelte fileName="src/App.svelte"
|
|
237
|
+
<script lang="ts">
|
|
238
|
+
import { getLocaleName } from 'intlayer';
|
|
239
|
+
import { useLocale } from 'svelte-intlayer';
|
|
240
|
+
|
|
241
|
+
// Получить информацию о локали и функцию setLocale
|
|
242
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
243
|
+
|
|
244
|
+
// Обработка изменения локали
|
|
245
|
+
const changeLocale = (event: Event) => {
|
|
246
|
+
const target = event.target as HTMLSelectElement;
|
|
247
|
+
const newLocale = target.value;
|
|
248
|
+
setLocale(newLocale);
|
|
249
|
+
};
|
|
250
|
+
</script>
|
|
251
|
+
|
|
252
|
+
<div>
|
|
253
|
+
<select value={$locale} on:change={changeLocale}>
|
|
254
|
+
{#each availableLocales ?? [] as loc}
|
|
255
|
+
<option value={loc}>
|
|
256
|
+
{getLocaleName(loc)}
|
|
257
|
+
</option>
|
|
258
|
+
{/each}
|
|
259
|
+
</select>
|
|
260
|
+
</div>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### (Необязательно) Шаг 7: Отображение Markdown
|
|
264
|
+
|
|
265
|
+
Intlayer поддерживает отображение контента в формате Markdown непосредственно в вашем приложении на Svelte. По умолчанию Markdown обрабатывается как простой текст. Чтобы преобразовать Markdown в насыщенный HTML, вы можете интегрировать `@humanspeak/svelte-markdown` или другой парсер Markdown.
|
|
266
|
+
|
|
267
|
+
> Чтобы узнать, как объявлять контент в формате markdown с использованием пакета `intlayer`, смотрите [документацию по markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/ru/dictionary/markdown.md).
|
|
268
|
+
|
|
269
|
+
```svelte fileName="src/App.svelte"
|
|
270
|
+
<script>
|
|
271
|
+
import { setIntlayerMarkdown } from "svelte-intlayer";
|
|
272
|
+
|
|
273
|
+
setIntlayerMarkdown((markdown) =>
|
|
274
|
+
// рендеринг содержимого markdown как строки
|
|
275
|
+
return markdown;
|
|
276
|
+
);
|
|
277
|
+
</script>
|
|
278
|
+
|
|
279
|
+
<h1>{$content.markdownContent}</h1>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
> Вы также можете получить доступ к данным front-matter вашего markdown через свойство `content.markdownContent.metadata.xxx`.
|
|
264
283
|
|
|
265
|
-
### (Необязательно) Шаг
|
|
284
|
+
### (Необязательно) Шаг 8: Настройка редактора / CMS intlayer
|
|
266
285
|
|
|
267
|
-
[
|
|
286
|
+
Для настройки редактора intlayer необходимо следовать [документации редактора intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md).
|
|
287
|
+
|
|
288
|
+
Для настройки CMS intlayer необходимо следовать [документации CMS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
|
|
289
|
+
|
|
290
|
+
Параллельно, в вашем приложении на Svelte, вы должны добавить следующую строку в layout или в корень вашего приложения:
|
|
291
|
+
|
|
292
|
+
```svelte fileName="src/layout.svelte"
|
|
293
|
+
import { useIntlayerEditor } from "svelte-intlayer";
|
|
294
|
+
|
|
295
|
+
useIntlayerEditor();
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### (Необязательно) Шаг 7: Добавьте локализованную маршрутизацию в ваше приложение
|
|
299
|
+
|
|
300
|
+
Для обработки локализованной маршрутизации в вашем приложении на Svelte вы можете использовать `svelte-spa-router` вместе с `localeFlatMap` из Intlayer для генерации маршрутов для каждой локали.
|
|
301
|
+
|
|
302
|
+
Сначала установите `svelte-spa-router`:
|
|
303
|
+
|
|
304
|
+
```bash packageManager="npm"
|
|
305
|
+
npm install svelte-spa-router
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
```bash packageManager="pnpm"
|
|
309
|
+
pnpm add svelte-spa-router
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
```bash packageManager="yarn"
|
|
313
|
+
yarn add svelte-spa-router
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
```bash packageManager="bun"
|
|
317
|
+
bun add svelte-spa-router
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Затем создайте файл `Router.svelte` для определения ваших маршрутов:
|
|
321
|
+
|
|
322
|
+
```svelte fileName="src/Router.svelte"
|
|
323
|
+
<script lang="ts">
|
|
324
|
+
import { localeFlatMap } from "intlayer";
|
|
325
|
+
import Router from "svelte-spa-router";
|
|
326
|
+
import { wrap } from "svelte-spa-router/wrap";
|
|
327
|
+
import App from "./App.svelte";
|
|
328
|
+
|
|
329
|
+
const routes = Object.fromEntries(
|
|
330
|
+
localeFlatMap(({locale, urlPrefix}) => [
|
|
331
|
+
[
|
|
332
|
+
urlPrefix || '/',
|
|
333
|
+
wrap({
|
|
334
|
+
component: App as any,
|
|
335
|
+
props: {
|
|
336
|
+
locale,
|
|
337
|
+
},
|
|
338
|
+
}),
|
|
339
|
+
],
|
|
340
|
+
])
|
|
341
|
+
);
|
|
342
|
+
</script>
|
|
343
|
+
|
|
344
|
+
<Router {routes} />
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Обновите ваш `main.ts`, чтобы монтировать компонент `Router` вместо `App`:
|
|
348
|
+
|
|
349
|
+
```typescript fileName="src/main.ts"
|
|
350
|
+
import { mount } from "svelte";
|
|
351
|
+
import Router from "./Router.svelte";
|
|
352
|
+
|
|
353
|
+
const app = mount(Router, {
|
|
354
|
+
target: document.getElementById("app")!,
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
export default app;
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
Наконец, обновите ваш `App.svelte`, чтобы принимать проп `locale` и использовать его с `useIntlayer`:
|
|
361
|
+
|
|
362
|
+
```svelte fileName="src/App.svelte"
|
|
363
|
+
<script lang="ts">
|
|
364
|
+
import type { Locale } from 'intlayer';
|
|
365
|
+
import { useIntlayer } from 'svelte-intlayer';
|
|
366
|
+
import Counter from './lib/Counter.svelte';
|
|
367
|
+
import LocaleSwitcher from './lib/LocaleSwitcher.svelte';
|
|
368
|
+
|
|
369
|
+
export let locale: Locale;
|
|
370
|
+
|
|
371
|
+
// Используем хук useIntlayer для получения контента на основе текущей локали
|
|
372
|
+
$: content = useIntlayer('app', locale);
|
|
373
|
+
</script>
|
|
374
|
+
|
|
375
|
+
<main>
|
|
376
|
+
<div class="locale-switcher-container">
|
|
377
|
+
<LocaleSwitcher currentLocale={locale} />
|
|
378
|
+
</div>
|
|
379
|
+
|
|
380
|
+
<!-- ... остальная часть вашего приложения ... -->
|
|
381
|
+
</main>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### Настройка маршрутизации на стороне сервера (необязательно)
|
|
385
|
+
|
|
386
|
+
Параллельно вы также можете использовать `intlayerProxy` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующее cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.
|
|
387
|
+
|
|
388
|
+
> Обратите внимание, что для использования `intlayerProxy` в продакшене необходимо перевести пакет `vite-intlayer` из `devDependencies` в `dependencies`.
|
|
389
|
+
|
|
390
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
391
|
+
import { defineConfig } from "vite";
|
|
392
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
393
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
394
|
+
|
|
395
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
396
|
+
});
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
400
|
+
import { defineConfig } from "vite";
|
|
401
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
402
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
403
|
+
|
|
404
|
+
// https://vitejs.dev/config/
|
|
405
|
+
export default defineConfig({
|
|
406
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
407
|
+
});
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
411
|
+
const { defineConfig } = require("vite");
|
|
412
|
+
const { svelte } = require("@sveltejs/vite-plugin-svelte");
|
|
413
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
414
|
+
|
|
415
|
+
// https://vitejs.dev/config/
|
|
416
|
+
module.exports = defineConfig({
|
|
417
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
418
|
+
});
|
|
419
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
420
|
+
});
|
|
421
|
+
```
|
|
268
422
|
|
|
269
423
|
### (Необязательно) Шаг 8: Изменение URL при смене локали
|
|
270
424
|
|
|
271
|
-
|
|
425
|
+
Чтобы позволить пользователям переключать языки и обновлять URL соответствующим образом, вы можете создать компонент `LocaleSwitcher`. Этот компонент будет использовать `getLocalizedUrl` из `intlayer` и `push` из `svelte-spa-router`.
|
|
272
426
|
|
|
273
|
-
|
|
427
|
+
```svelte fileName="src/lib/LocaleSwitcher.svelte"
|
|
428
|
+
<script lang="ts">
|
|
429
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
430
|
+
import { useLocale } from "svelte-intlayer";
|
|
431
|
+
import { push } from "svelte-spa-router";
|
|
274
432
|
|
|
275
|
-
|
|
433
|
+
export let currentLocale: string | undefined = undefined;
|
|
276
434
|
|
|
277
|
-
|
|
435
|
+
// Получение информации о локали
|
|
436
|
+
const { locale, availableLocales } = useLocale();
|
|
278
437
|
|
|
279
|
-
|
|
438
|
+
// Обработка изменения локали
|
|
439
|
+
const changeLocale = (event: Event) => {
|
|
440
|
+
const target = event.target as HTMLSelectElement;
|
|
441
|
+
const newLocale = target.value;
|
|
442
|
+
const currentUrl = window.location.pathname;
|
|
443
|
+
const url = getLocalizedUrl( currentUrl, newLocale);
|
|
444
|
+
push(url);
|
|
445
|
+
};
|
|
446
|
+
</script>
|
|
447
|
+
|
|
448
|
+
<div class="locale-switcher">
|
|
449
|
+
<select value={currentLocale ?? $locale} onchange={changeLocale}>
|
|
450
|
+
{#each availableLocales ?? [] as loc}
|
|
451
|
+
<option value={loc}>
|
|
452
|
+
{getLocaleName(loc)}
|
|
453
|
+
</option>
|
|
454
|
+
{/each}
|
|
455
|
+
</select>
|
|
456
|
+
</div>
|
|
457
|
+
```
|
|
280
458
|
|
|
281
459
|
### Конфигурация Git
|
|
282
460
|
|
|
@@ -291,23 +469,21 @@ module.exports = appContent;
|
|
|
291
469
|
|
|
292
470
|
### Расширение VS Code
|
|
293
471
|
|
|
294
|
-
|
|
472
|
+
Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer для VS Code**.
|
|
295
473
|
|
|
296
|
-
[Установить из
|
|
474
|
+
[Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
297
475
|
|
|
298
476
|
Это расширение предоставляет:
|
|
299
477
|
|
|
300
|
-
- **Автозаполнение** ключей
|
|
478
|
+
- **Автозаполнение** ключей переводов.
|
|
301
479
|
- **Обнаружение ошибок в реальном времени** для отсутствующих переводов.
|
|
302
480
|
- **Встроенный просмотр** переведенного контента.
|
|
303
481
|
- **Быстрые действия** для удобного создания и обновления переводов.
|
|
304
482
|
|
|
305
|
-
Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации
|
|
483
|
+
Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
306
484
|
|
|
307
485
|
---
|
|
308
486
|
|
|
309
|
-
###
|
|
487
|
+
### Продвинуться дальше
|
|
310
488
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
---
|
|
489
|
+
Чтобы продвинуться дальше, вы можете реализовать [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или вынести ваш контент, используя [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
|