@intlayer/docs 5.8.0-canary.0 → 5.8.1-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 +2 -2
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
- package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
- package/blog/de/intlayer_with_next-i18next.md +2 -2
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/de/vue-i18n_vs_intlayer.md +268 -0
- package/blog/en/intlayer_with_next-i18next.md +2 -2
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +88 -120
- package/blog/en/vue-i18n_vs_intlayer.md +276 -0
- package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
- package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
- package/blog/es/intlayer_with_next-i18next.md +2 -2
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/es/vue-i18n_vs_intlayer.md +268 -0
- package/blog/fr/intlayer_with_next-i18next.md +2 -2
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
- package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
- package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
- package/blog/hi/intlayer_with_next-i18next.md +2 -2
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
- package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
- package/blog/it/intlayer_with_next-i18next.md +2 -2
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
- package/blog/it/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ja/intlayer_with_next-i18next.md +2 -2
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ko/intlayer_with_next-i18next.md +2 -2
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
- package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
- package/blog/pt/intlayer_with_next-i18next.md +2 -2
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ru/intlayer_with_next-i18next.md +2 -2
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
- package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
- package/blog/zh/intlayer_with_next-i18next.md +2 -2
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
- package/dist/cjs/generated/blog.entry.cjs +41 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +41 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/formatters.md +417 -31
- package/docs/ar/how_works_intlayer.md +2 -4
- package/docs/ar/interest_of_intlayer.md +7 -10
- package/docs/ar/intlayer_CMS.md +2 -3
- package/docs/ar/intlayer_visual_editor.md +2 -3
- package/docs/ar/intlayer_with_tanstack.md +1 -1
- package/docs/ar/introduction.md +4 -4
- package/docs/de/formatters.md +444 -34
- package/docs/de/introduction.md +2 -2
- package/docs/en/dictionary/enumeration.md +2 -2
- package/docs/en/dictionary/function_fetching.md +2 -2
- package/docs/en/dictionary/get_started.md +2 -2
- package/docs/en/dictionary/translation.md +2 -2
- package/docs/en/formatters.md +383 -15
- package/docs/en/how_works_intlayer.md +2 -4
- package/docs/en/interest_of_intlayer.md +48 -29
- package/docs/en/intlayer_CMS.md +2 -3
- package/docs/en/intlayer_visual_editor.md +2 -3
- package/docs/en/intlayer_with_create_react_app.md +2 -2
- package/docs/en/intlayer_with_express.md +2 -2
- package/docs/en/intlayer_with_tanstack.md +1 -1
- package/docs/en/introduction.md +4 -4
- package/docs/en/packages/express-intlayer/index.md +2 -2
- package/docs/en/packages/intlayer/getConfiguration.md +2 -3
- package/docs/en/packages/intlayer/getEnumeration.md +2 -7
- package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
- package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
- package/docs/en/packages/intlayer/getLocaleName.md +2 -3
- package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
- package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
- package/docs/en/packages/intlayer/getTranslation.md +2 -4
- package/docs/en/packages/intlayer/index.md +2 -2
- package/docs/en/packages/next-intlayer/index.md +2 -2
- package/docs/en/packages/next-intlayer/t.md +2 -2
- package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
- package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
- package/docs/en/packages/next-intlayer/useLocale.md +2 -2
- package/docs/en/packages/react-intlayer/index.md +2 -2
- package/docs/en/packages/react-intlayer/t.md +2 -2
- package/docs/en/packages/react-intlayer/useI18n.md +2 -2
- package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/en/packages/react-intlayer/useLocale.md +2 -2
- package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
- package/docs/en/packages/solid-intlayer/index.md +2 -2
- package/docs/en/packages/vite-intlayer/index.md +2 -2
- package/docs/en-GB/formatters.md +402 -16
- package/docs/en-GB/how_works_intlayer.md +2 -4
- package/docs/en-GB/interest_of_intlayer.md +7 -10
- package/docs/en-GB/intlayer_with_tanstack.md +1 -1
- package/docs/en-GB/introduction.md +2 -2
- package/docs/es/formatters.md +438 -28
- package/docs/es/how_works_intlayer.md +2 -4
- package/docs/es/interest_of_intlayer.md +7 -10
- package/docs/es/intlayer_with_tanstack.md +1 -1
- package/docs/es/introduction.md +2 -2
- package/docs/fr/formatters.md +438 -28
- package/docs/fr/how_works_intlayer.md +2 -4
- package/docs/fr/interest_of_intlayer.md +7 -10
- package/docs/fr/intlayer_with_tanstack.md +1 -1
- package/docs/fr/introduction.md +2 -2
- package/docs/hi/formatters.md +430 -39
- package/docs/hi/how_works_intlayer.md +2 -4
- package/docs/hi/interest_of_intlayer.md +7 -10
- package/docs/hi/intlayer_with_tanstack.md +1 -1
- package/docs/hi/introduction.md +2 -2
- package/docs/it/formatters.md +438 -30
- package/docs/it/how_works_intlayer.md +2 -4
- package/docs/it/interest_of_intlayer.md +7 -10
- package/docs/it/intlayer_with_tanstack.md +1 -1
- package/docs/it/introduction.md +2 -2
- package/docs/ja/formatters.md +435 -47
- package/docs/ja/how_works_intlayer.md +2 -4
- package/docs/ja/interest_of_intlayer.md +7 -10
- package/docs/ja/intlayer_with_tanstack.md +1 -1
- package/docs/ja/introduction.md +2 -2
- package/docs/ko/formatters.md +432 -41
- package/docs/ko/how_works_intlayer.md +2 -4
- package/docs/ko/interest_of_intlayer.md +7 -10
- package/docs/ko/intlayer_with_tanstack.md +1 -1
- package/docs/ko/introduction.md +2 -2
- package/docs/pt/formatters.md +416 -30
- package/docs/pt/how_works_intlayer.md +2 -4
- package/docs/pt/intlayer_with_tanstack.md +1 -1
- package/docs/pt/introduction.md +2 -2
- package/docs/ru/autoFill.md +2 -2
- package/docs/ru/configuration.md +1 -40
- package/docs/ru/formatters.md +438 -28
- package/docs/ru/how_works_intlayer.md +5 -7
- package/docs/ru/index.md +1 -1
- package/docs/ru/interest_of_intlayer.md +8 -11
- package/docs/ru/intlayer_CMS.md +7 -8
- package/docs/ru/intlayer_cli.md +4 -7
- package/docs/ru/intlayer_visual_editor.md +5 -6
- package/docs/ru/intlayer_with_angular.md +1 -1
- package/docs/ru/intlayer_with_create_react_app.md +5 -5
- package/docs/ru/intlayer_with_lynx+react.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +3 -3
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +1 -1
- package/docs/ru/intlayer_with_react_native+expo.md +2 -2
- package/docs/ru/intlayer_with_tanstack.md +3 -3
- package/docs/ru/intlayer_with_vite+preact.md +3 -3
- package/docs/ru/intlayer_with_vite+react.md +3 -3
- package/docs/ru/intlayer_with_vite+solid.md +1 -1
- package/docs/ru/intlayer_with_vite+svelte.md +1 -1
- package/docs/ru/intlayer_with_vite+vue.md +2 -2
- package/docs/ru/introduction.md +5 -5
- package/docs/ru/locale_mapper.md +1 -1
- package/docs/ru/packages/@intlayer/api/index.md +2 -2
- package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
- package/docs/ru/packages/@intlayer/cli/index.md +2 -2
- package/docs/ru/packages/@intlayer/config/index.md +2 -2
- package/docs/ru/packages/@intlayer/core/index.md +2 -2
- package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
- package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
- package/docs/ru/packages/@intlayer/editor/index.md +1 -1
- package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
- package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
- package/docs/ru/packages/angular-intlayer/index.md +1 -1
- package/docs/ru/packages/express-intlayer/index.md +3 -3
- package/docs/ru/packages/express-intlayer/t.md +1 -1
- package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
- package/docs/ru/packages/intlayer/getTranslation.md +3 -5
- package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
- package/docs/ru/packages/intlayer/index.md +3 -3
- package/docs/ru/packages/intlayer-cli/index.md +1 -1
- package/docs/ru/packages/intlayer-editor/index.md +2 -2
- package/docs/ru/packages/lynx-intlayer/index.md +1 -1
- package/docs/ru/packages/next-intlayer/index.md +4 -4
- package/docs/ru/packages/next-intlayer/t.md +4 -4
- package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
- package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
- package/docs/ru/packages/preact-intlayer/index.md +1 -1
- package/docs/ru/packages/react-intlayer/index.md +4 -4
- package/docs/ru/packages/react-intlayer/t.md +4 -4
- package/docs/ru/packages/react-native-intlayer/index.md +1 -1
- package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
- package/docs/ru/packages/solid-intlayer/index.md +3 -3
- package/docs/ru/packages/svelte-intlayer/index.md +1 -1
- package/docs/ru/packages/vite-intlayer/index.md +3 -3
- package/docs/ru/packages/vue-intlayer/index.md +1 -1
- package/docs/ru/per_locale_file.md +1 -1
- package/docs/ru/roadmap.md +3 -5
- package/docs/ru/vs_code_extension.md +1 -1
- package/docs/zh/formatters.md +446 -38
- package/docs/zh/how_works_intlayer.md +2 -4
- package/docs/zh/interest_of_intlayer.md +7 -10
- package/docs/zh/intlayer_with_tanstack.md +1 -1
- package/docs/zh/introduction.md +2 -2
- package/frequent_questions/ar/domain_routing.md +1 -1
- package/frequent_questions/en/domain_routing.md +1 -1
- package/frequent_questions/en-GB/domain_routing.md +1 -1
- package/frequent_questions/es/domain_routing.md +1 -1
- package/frequent_questions/fr/domain_routing.md +1 -1
- package/frequent_questions/hi/domain_routing.md +1 -1
- package/frequent_questions/it/domain_routing.md +1 -1
- package/frequent_questions/ko/domain_routing.md +1 -1
- package/frequent_questions/pt/domain_routing.md +1 -1
- package/frequent_questions/ru/domain_routing.md +1 -1
- package/frequent_questions/ru/get_locale_cookie.md +4 -4
- package/frequent_questions/ru/static_rendering.md +1 -2
- package/frequent_questions/zh/domain_routing.md +1 -1
- package/package.json +9 -11
- package/src/generated/blog.entry.ts +42 -1
package/docs/ru/formatters.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
3
|
updatedAt: 2025-08-20
|
|
4
4
|
title: Форматтеры
|
|
5
|
-
description: Утилиты для форматирования с
|
|
5
|
+
description: Утилиты для форматирования с учётом локали на основе Intl для чисел, процентов, валюты, дат, относительного времени, единиц измерения и компактной записи. Включает кешированный помощник Intl.
|
|
6
6
|
keywords:
|
|
7
7
|
- Форматтеры
|
|
8
8
|
- Intl
|
|
@@ -13,6 +13,7 @@ keywords:
|
|
|
13
13
|
- Относительное время
|
|
14
14
|
- Единицы измерения
|
|
15
15
|
- Компактный формат
|
|
16
|
+
- Список
|
|
16
17
|
- Интернационализация
|
|
17
18
|
slugs:
|
|
18
19
|
- doc
|
|
@@ -23,7 +24,7 @@ slugs:
|
|
|
23
24
|
|
|
24
25
|
## Обзор
|
|
25
26
|
|
|
26
|
-
Intlayer предоставляет набор
|
|
27
|
+
Intlayer предоставляет набор лёгких помощников, построенных поверх нативных API `Intl`, а также кешированный обёртку `Intl`, чтобы избежать многократного создания тяжёлых форматтеров. Эти утилиты полностью учитывают локаль и могут использоваться из основного пакета `intlayer`.
|
|
27
28
|
|
|
28
29
|
### Импорт
|
|
29
30
|
|
|
@@ -37,6 +38,18 @@ import {
|
|
|
37
38
|
relativeTime,
|
|
38
39
|
units,
|
|
39
40
|
compact,
|
|
41
|
+
list,
|
|
42
|
+
getLocaleName,
|
|
43
|
+
getLocaleLang,
|
|
44
|
+
getLocaleFromPath,
|
|
45
|
+
getPathWithoutLocale,
|
|
46
|
+
getLocalizedUrl,
|
|
47
|
+
getHTMLTextDir,
|
|
48
|
+
getContent,
|
|
49
|
+
getLocalisedContent,
|
|
50
|
+
getTranslation,
|
|
51
|
+
getIntlayer,
|
|
52
|
+
getIntlayerAsync,
|
|
40
53
|
} from "intlayer";
|
|
41
54
|
```
|
|
42
55
|
|
|
@@ -44,33 +57,283 @@ import {
|
|
|
44
57
|
|
|
45
58
|
## Кешированный Intl
|
|
46
59
|
|
|
47
|
-
Экспортируемый `Intl` — это тонкая кешированная
|
|
60
|
+
Экспортируемый `Intl` — это тонкая кешированная обёртка вокруг глобального `Intl`. Он мемоизирует экземпляры `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` и `PluralRules`, что позволяет избежать повторного создания одного и того же форматтера.
|
|
48
61
|
|
|
49
|
-
Поскольку создание форматтера относительно дорогостоящее, такое кеширование улучшает производительность без изменения поведения.
|
|
62
|
+
Поскольку создание форматтера относительно дорогостоящее, такое кеширование улучшает производительность без изменения поведения. Обёртка предоставляет тот же API, что и нативный `Intl`, поэтому использование идентично.
|
|
50
63
|
|
|
51
64
|
- Кеширование происходит на уровне процесса и прозрачно для вызывающих.
|
|
52
65
|
|
|
53
66
|
> Если `Intl.DisplayNames` недоступен в среде, выводится одно предупреждение только для разработчиков (рекомендуется использовать полифилл).
|
|
54
67
|
|
|
55
|
-
|
|
68
|
+
Примеры:
|
|
56
69
|
|
|
57
70
|
```ts
|
|
58
71
|
import { Intl } from "intlayer";
|
|
59
72
|
|
|
73
|
+
// Форматирование чисел
|
|
60
74
|
const numberFormat = new Intl.NumberFormat("en-GB", {
|
|
61
75
|
style: "currency",
|
|
62
76
|
currency: "GBP",
|
|
63
77
|
});
|
|
64
78
|
numberFormat.format(1234.5); // "£1,234.50"
|
|
79
|
+
|
|
80
|
+
// Отображение названий языков, регионов и т.д.
|
|
81
|
+
const displayNames = new Intl.DisplayNames("fr", { type: "language" });
|
|
82
|
+
displayNames.of("en"); // "anglais"
|
|
83
|
+
|
|
84
|
+
// Сортировка с учётом локали
|
|
85
|
+
const collator = new Intl.Collator("fr", { sensitivity: "base" });
|
|
86
|
+
collator.compare("é", "e"); // 0 (равны)
|
|
87
|
+
|
|
88
|
+
// Правила множественного числа
|
|
89
|
+
const pluralRules = new Intl.PluralRules("fr");
|
|
90
|
+
pluralRules.select(1); // "one"
|
|
91
|
+
pluralRules.select(2); // "other"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Дополнительные утилиты Intl
|
|
95
|
+
|
|
96
|
+
Помимо помощников для форматтеров, вы также можете использовать кешированную обёртку Intl напрямую для других возможностей Intl:
|
|
97
|
+
|
|
98
|
+
### `Intl.DisplayNames`
|
|
99
|
+
|
|
100
|
+
Для локализованных названий языков, регионов, валют и систем письма:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
import { Intl } from "intlayer";
|
|
104
|
+
|
|
105
|
+
const languageNames = new Intl.DisplayNames("en", { type: "language" });
|
|
106
|
+
languageNames.of("fr"); // "French"
|
|
107
|
+
|
|
108
|
+
const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
109
|
+
regionNames.of("US"); // "États-Unis"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `Intl.Collator`
|
|
113
|
+
|
|
114
|
+
Для локализованного сравнения и сортировки строк:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
import { Intl } from "intlayer";
|
|
118
|
+
|
|
119
|
+
const collator = new Intl.Collator("de", {
|
|
120
|
+
sensitivity: "base",
|
|
121
|
+
numeric: true,
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const words = ["äpfel", "zebra", "100", "20"];
|
|
125
|
+
words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### `Intl.PluralRules`
|
|
129
|
+
|
|
130
|
+
Для определения форм множественного числа в разных локалях:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { Intl } from "intlayer";
|
|
134
|
+
|
|
135
|
+
const pluralRules = new Intl.PluralRules("ar");
|
|
136
|
+
pluralRules.select(0); // "zero"
|
|
137
|
+
pluralRules.select(1); // "one"
|
|
138
|
+
pluralRules.select(2); // "two"
|
|
139
|
+
pluralRules.select(3); // "few"
|
|
140
|
+
pluralRules.select(11); // "many"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Утилиты локалей
|
|
144
|
+
|
|
145
|
+
### `getLocaleName(displayLocale, targetLocale?)`
|
|
146
|
+
|
|
147
|
+
Получает локализованное название локали на другом языке:
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
import { getLocaleName } from "intlayer";
|
|
151
|
+
|
|
152
|
+
getLocaleName("fr", "en"); // "French"
|
|
153
|
+
getLocaleName("en", "fr"); // "anglais"
|
|
154
|
+
getLocaleName("de", "es"); // "alemán"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
- **displayLocale**: Локаль, для которой нужно получить название
|
|
158
|
+
- **targetLocale**: Локаль, на которой будет отображаться название (по умолчанию displayLocale)
|
|
159
|
+
|
|
160
|
+
### `getLocaleLang(locale?)`
|
|
161
|
+
|
|
162
|
+
Извлекает код языка из строки локали:
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { getLocaleLang } from "intlayer";
|
|
166
|
+
|
|
167
|
+
getLocaleLang("en-US"); // "en"
|
|
168
|
+
getLocaleLang("fr-CA"); // "fr"
|
|
169
|
+
getLocaleLang("de"); // "de"
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
- **locale**: Локаль, из которой нужно извлечь язык (по умолчанию текущая локаль)
|
|
173
|
+
|
|
174
|
+
### `getLocaleFromPath(inputUrl)`
|
|
175
|
+
|
|
176
|
+
Извлекает сегмент локали из URL или пути:
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
import { getLocaleFromPath } from "intlayer";
|
|
180
|
+
|
|
181
|
+
getLocaleFromPath("/en/dashboard"); // "en"
|
|
182
|
+
getLocaleFromPath("/fr/dashboard"); // "fr"
|
|
183
|
+
getLocaleFromPath("/dashboard"); // "en" (локаль по умолчанию)
|
|
184
|
+
getLocaleFromPath("https://example.com/es/about"); // "es"
|
|
65
185
|
```
|
|
66
186
|
|
|
187
|
+
- **inputUrl**: Полная строка URL или путь для обработки
|
|
188
|
+
- **returns**: Обнаруженная локаль или локаль по умолчанию, если локаль не найдена
|
|
189
|
+
|
|
190
|
+
### `getPathWithoutLocale(inputUrl, locales?)`
|
|
191
|
+
|
|
192
|
+
Удаляет сегмент локали из URL или пути:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
import { getPathWithoutLocale } from "intlayer";
|
|
196
|
+
|
|
197
|
+
getPathWithoutLocale("/en/dashboard"); // "/dashboard"
|
|
198
|
+
getPathWithoutLocale("/fr/dashboard"); // "/dashboard"
|
|
199
|
+
getPathWithoutLocale("https://example.com/en/about"); // "https://example.com/about"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
- **inputUrl**: Полная строка URL или путь для обработки
|
|
203
|
+
- **locales**: Необязательный массив поддерживаемых локалей (по умолчанию используется настроенный список локалей)
|
|
204
|
+
- **returns**: URL без сегмента локали
|
|
205
|
+
|
|
206
|
+
### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
|
|
207
|
+
|
|
208
|
+
Генерирует локализованный URL для текущей локали:
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
import { getLocalizedUrl } from "intlayer";
|
|
212
|
+
|
|
213
|
+
getLocalizedUrl("/about", "fr", ["en", "fr"], "en", false); // "/fr/about"
|
|
214
|
+
getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
|
|
215
|
+
getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
- **url**: Исходный URL для локализации
|
|
219
|
+
- **currentLocale**: Текущая локаль
|
|
220
|
+
- **locales**: Необязательный массив поддерживаемых локалей (по умолчанию используется настроенный список локалей)
|
|
221
|
+
- **defaultLocale**: Необязательная локаль по умолчанию (по умолчанию используется настроенная локаль по умолчанию)
|
|
222
|
+
- **prefixDefault**: Добавлять ли префикс для локали по умолчанию (по умолчанию используется настроенное значение)
|
|
223
|
+
|
|
224
|
+
### `getHTMLTextDir(locale?)`
|
|
225
|
+
|
|
226
|
+
Возвращает направление текста для локали:
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
import { getHTMLTextDir } from "intlayer";
|
|
230
|
+
|
|
231
|
+
getHTMLTextDir("en-US"); // "ltr"
|
|
232
|
+
getHTMLTextDir("ar"); // "rtl"
|
|
233
|
+
getHTMLTextDir("he"); // "rtl"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
- **locale**: Локаль, для которой нужно получить направление текста (по умолчанию текущая локаль)
|
|
237
|
+
- **returns**: `"ltr"`, `"rtl"` или `"auto"`
|
|
238
|
+
|
|
239
|
+
## Утилиты для обработки контента
|
|
240
|
+
|
|
241
|
+
### `getContent(node, nodeProps, locale?)`
|
|
242
|
+
|
|
243
|
+
Преобразует узел контента со всеми доступными плагинами (перевод, перечисление, вставка и т.д.):
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
import { getContent } from "intlayer";
|
|
247
|
+
|
|
248
|
+
const content = getContent(
|
|
249
|
+
contentNode,
|
|
250
|
+
{ dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
|
|
251
|
+
"fr"
|
|
252
|
+
);
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
- **node**: Узел контента для преобразования
|
|
256
|
+
- **nodeProps**: Свойства для контекста преобразования
|
|
257
|
+
- **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
|
|
258
|
+
|
|
259
|
+
### `getLocalisedContent(node, locale, nodeProps, fallback?)`
|
|
260
|
+
|
|
261
|
+
Преобразует узел контента, используя только плагин перевода:
|
|
262
|
+
|
|
263
|
+
```ts
|
|
264
|
+
import { getLocalisedContent } from "intlayer";
|
|
265
|
+
|
|
266
|
+
const content = getLocalisedContent(
|
|
267
|
+
contentNode,
|
|
268
|
+
"fr",
|
|
269
|
+
{ dictionaryKey: "common" },
|
|
270
|
+
true // возврат к локали по умолчанию, если перевод отсутствует
|
|
271
|
+
);
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
- **node**: Узел контента для преобразования
|
|
275
|
+
- **locale**: Локаль, используемая для перевода
|
|
276
|
+
- **nodeProps**: Свойства для контекста преобразования
|
|
277
|
+
- **fallback**: Использовать ли резервный вариант с локалью по умолчанию (по умолчанию false)
|
|
278
|
+
|
|
279
|
+
### `getTranslation(languageContent, locale?, fallback?)`
|
|
280
|
+
|
|
281
|
+
Извлекает контент для конкретной локали из объекта с языковым содержимым:
|
|
282
|
+
|
|
283
|
+
```ts
|
|
284
|
+
import { getTranslation } from "intlayer";
|
|
285
|
+
|
|
286
|
+
const content = getTranslation(
|
|
287
|
+
{
|
|
288
|
+
en: "Hello",
|
|
289
|
+
fr: "Bonjour",
|
|
290
|
+
de: "Hallo",
|
|
291
|
+
},
|
|
292
|
+
"fr",
|
|
293
|
+
true
|
|
294
|
+
); // "Bonjour"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
- **languageContent**: Объект, сопоставляющий локали с контентом
|
|
298
|
+
- **locale**: Целевая локаль (по умолчанию используется настроенная локаль по умолчанию)
|
|
299
|
+
- **fallback**: Использовать ли резервный вариант с локалью по умолчанию (по умолчанию true)
|
|
300
|
+
|
|
301
|
+
### `getIntlayer(dictionaryKey, locale?, plugins?)`
|
|
302
|
+
|
|
303
|
+
Получает и преобразует контент из словаря по ключу:
|
|
304
|
+
|
|
305
|
+
```ts
|
|
306
|
+
import { getIntlayer } from "intlayer";
|
|
307
|
+
|
|
308
|
+
const content = getIntlayer("common", "fr");
|
|
309
|
+
const nestedContent = getIntlayer("common", "fr", customPlugins);
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
- **dictionaryKey**: Ключ словаря для получения
|
|
313
|
+
- **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
|
|
314
|
+
- **plugins**: Необязательный массив пользовательских плагинов трансформации
|
|
315
|
+
|
|
316
|
+
### `getIntlayerAsync(dictionaryKey, locale?, plugins?)`
|
|
317
|
+
|
|
318
|
+
Асинхронно получает контент из удалённого словаря:
|
|
319
|
+
|
|
320
|
+
```ts
|
|
321
|
+
import { getIntlayerAsync } from "intlayer";
|
|
322
|
+
|
|
323
|
+
const content = await getIntlayerAsync("common", "fr");
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
- **dictionaryKey**: Ключ словаря для получения
|
|
327
|
+
- **locale**: Необязательная локаль (по умолчанию используется настроенная локаль по умолчанию)
|
|
328
|
+
- **plugins**: Необязательный массив пользовательских плагинов трансформации
|
|
329
|
+
|
|
67
330
|
## Форматтеры
|
|
68
331
|
|
|
69
|
-
Все
|
|
332
|
+
Все ниже перечисленные помощники экспортируются из `intlayer`.
|
|
70
333
|
|
|
71
334
|
### `number(value, options?)`
|
|
72
335
|
|
|
73
|
-
Форматирует числовое значение с
|
|
336
|
+
Форматирует числовое значение с учетом локали, группировки и десятичных знаков.
|
|
74
337
|
|
|
75
338
|
- **value**: `number | string`
|
|
76
339
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
@@ -81,7 +344,7 @@ numberFormat.format(1234.5); // "£1,234.50"
|
|
|
81
344
|
import { number } from "intlayer";
|
|
82
345
|
|
|
83
346
|
number(123456.789); // "123,456.789" (в en-US)
|
|
84
|
-
number("1000000", { locale: "fr" }); // "1
|
|
347
|
+
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
85
348
|
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
86
349
|
```
|
|
87
350
|
|
|
@@ -118,7 +381,7 @@ percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
|
|
|
118
381
|
import { currency } from "intlayer";
|
|
119
382
|
|
|
120
383
|
currency(1234.5, { currency: "EUR" }); // "€1,234.50"
|
|
121
|
-
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5
|
|
384
|
+
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
|
|
122
385
|
```
|
|
123
386
|
|
|
124
387
|
### `date(date, optionsOrPreset?)`
|
|
@@ -142,11 +405,11 @@ date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); /
|
|
|
142
405
|
|
|
143
406
|
Форматирует относительное время между двумя моментами с помощью `Intl.RelativeTimeFormat`.
|
|
144
407
|
|
|
145
|
-
- Передайте "now" в качестве первого
|
|
408
|
+
- Передайте "now" в качестве первого аргумента и целевой момент вторым, чтобы получить естественную формулировку.
|
|
146
409
|
- **from**: `Date | string | number`
|
|
147
410
|
- **to**: `Date | string | number` (по умолчанию `new Date()`)
|
|
148
411
|
- **options**: `{ locale?: LocalesValues; unit?: Intl.RelativeTimeFormatUnit; numeric?: Intl.RelativeTimeFormatNumeric; style?: Intl.RelativeTimeFormatStyle }`
|
|
149
|
-
- По умолчанию `unit`
|
|
412
|
+
- По умолчанию `unit` равен `"second"`.
|
|
150
413
|
|
|
151
414
|
Примеры:
|
|
152
415
|
|
|
@@ -181,7 +444,7 @@ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (зависи
|
|
|
181
444
|
|
|
182
445
|
### `compact(value, options?)`
|
|
183
446
|
|
|
184
|
-
Форматирует
|
|
447
|
+
Форматирует число с использованием компактной нотации (например, `1.2K`, `1M`).
|
|
185
448
|
|
|
186
449
|
- **value**: `number | string`
|
|
187
450
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (использует `notation: 'compact'` под капотом)
|
|
@@ -192,48 +455,195 @@ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (зависи
|
|
|
192
455
|
import { compact } from "intlayer";
|
|
193
456
|
|
|
194
457
|
compact(1200); // "1.2K"
|
|
195
|
-
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1
|
|
458
|
+
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
|
|
196
459
|
```
|
|
197
460
|
|
|
198
|
-
|
|
461
|
+
### `list(values, options?)`
|
|
199
462
|
|
|
200
|
-
|
|
201
|
-
- Локаль по умолчанию берется из вашей настройки `internationalization.defaultLocale`, если не указана явно.
|
|
202
|
-
- Эти утилиты являются тонкими обертками; для расширенного форматирования используйте стандартные опции `Intl`.
|
|
463
|
+
Форматирует массив значений в локализованную строку списка с использованием `Intl.ListFormat`.
|
|
203
464
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
465
|
+
- **values**: `(string | number)[]`
|
|
466
|
+
- **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
|
|
467
|
+
- Общие поля: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
|
|
468
|
+
- Значения по умолчанию: `type: 'conjunction'`, `style: 'long'`
|
|
207
469
|
|
|
208
470
|
Примеры:
|
|
209
471
|
|
|
210
472
|
```ts
|
|
211
|
-
|
|
212
|
-
|
|
473
|
+
import { list } from "intlayer";
|
|
474
|
+
|
|
475
|
+
list(["apple", "banana", "orange"]); // "apple, banana, and orange"
|
|
476
|
+
list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
|
|
477
|
+
list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
|
|
213
478
|
```
|
|
214
479
|
|
|
480
|
+
## Заметки
|
|
481
|
+
|
|
482
|
+
/// Все вспомогательные функции принимают входные данные в виде `string`; они внутренне приводятся к числам или датам.
|
|
483
|
+
/// Локаль по умолчанию берется из вашей настройки `internationalization.defaultLocale`, если не указана явно.
|
|
484
|
+
/// Эти утилиты являются тонкими обертками; для расширенного форматирования используйте стандартные опции `Intl`.
|
|
485
|
+
///
|
|
486
|
+
/// ## Точки входа и реэкспорты (`@index.ts`)
|
|
487
|
+
///
|
|
488
|
+
/// Форматтеры находятся в основном пакете и реэкспортируются из пакетов более высокого уровня для удобства импорта в разных средах выполнения:
|
|
489
|
+
///
|
|
490
|
+
/// Примеры:
|
|
491
|
+
///
|
|
492
|
+
/// ```ts
|
|
493
|
+
/// // Код приложения (рекомендуется)
|
|
494
|
+
/// import {
|
|
495
|
+
/// number,
|
|
496
|
+
/// currency,
|
|
497
|
+
/// date,
|
|
498
|
+
/// relativeTime,
|
|
499
|
+
/// units,
|
|
500
|
+
/// compact,
|
|
501
|
+
/// list,
|
|
502
|
+
/// Intl,
|
|
503
|
+
/// getLocaleName,
|
|
504
|
+
/// getLocaleLang,
|
|
505
|
+
/// getLocaleFromPath,
|
|
506
|
+
/// getPathWithoutLocale,
|
|
507
|
+
/// getLocalizedUrl,
|
|
508
|
+
/// getHTMLTextDir,
|
|
509
|
+
/// getContent,
|
|
510
|
+
/// getLocalisedContent,
|
|
511
|
+
/// getTranslation,
|
|
512
|
+
/// getIntlayer,
|
|
513
|
+
/// getIntlayerAsync,
|
|
514
|
+
///
|
|
515
|
+
} from "intlayer";
|
|
516
|
+
|
|
517
|
+
````
|
|
518
|
+
|
|
215
519
|
### React
|
|
216
520
|
|
|
217
521
|
Клиентские компоненты:
|
|
218
522
|
|
|
219
|
-
```
|
|
220
|
-
import {
|
|
523
|
+
```tsx
|
|
524
|
+
import {
|
|
525
|
+
useNumber,
|
|
526
|
+
useCurrency,
|
|
527
|
+
useDate,
|
|
528
|
+
usePercentage,
|
|
529
|
+
useCompact,
|
|
530
|
+
useList,
|
|
531
|
+
useRelativeTime,
|
|
532
|
+
useUnit,
|
|
533
|
+
} from "react-intlayer/format";
|
|
221
534
|
// или в приложениях Next.js
|
|
222
|
-
import {
|
|
223
|
-
|
|
535
|
+
import {
|
|
536
|
+
useNumber,
|
|
537
|
+
useCurrency,
|
|
538
|
+
useDate,
|
|
539
|
+
usePercentage,
|
|
540
|
+
useCompact,
|
|
541
|
+
useList,
|
|
542
|
+
useRelativeTime,
|
|
543
|
+
useUnit,
|
|
544
|
+
} from "next-intlayer/client/format";
|
|
545
|
+
|
|
546
|
+
const MyComponent = () => {
|
|
547
|
+
const number = useNumber();
|
|
548
|
+
const currency = useCurrency();
|
|
549
|
+
const date = useDate();
|
|
550
|
+
const percentage = usePercentage();
|
|
551
|
+
const compact = useCompact();
|
|
552
|
+
const list = useList();
|
|
553
|
+
const relativeTime = useRelativeTime();
|
|
554
|
+
const unit = useUnit();
|
|
555
|
+
|
|
556
|
+
return (
|
|
557
|
+
<div>
|
|
558
|
+
<p>{number(123456.789)}</p>
|
|
559
|
+
<p>{currency(1234.5, { currency: "EUR" })}</p>
|
|
560
|
+
<p>{date(new Date(), "short")}</p>
|
|
561
|
+
<p>{percentage(0.25)}</p>
|
|
562
|
+
<p>{compact(1200)}</p>
|
|
563
|
+
<p>{list(["apple", "banana", "orange"])}</p>
|
|
564
|
+
<p>{relativeTime(new Date(), new Date() + 1000)}</p>
|
|
565
|
+
<p>{unit(123456.789, { unit: "kilometer" })}</p>
|
|
566
|
+
</div>
|
|
567
|
+
);
|
|
568
|
+
};
|
|
569
|
+
````
|
|
224
570
|
|
|
225
571
|
Серверные компоненты (или React Server runtime):
|
|
226
572
|
|
|
227
573
|
```ts
|
|
228
|
-
import {
|
|
574
|
+
import {
|
|
575
|
+
useNumber,
|
|
576
|
+
useCurrency,
|
|
577
|
+
useDate,
|
|
578
|
+
usePercentage,
|
|
579
|
+
useCompact,
|
|
580
|
+
useList,
|
|
581
|
+
useRelativeTime,
|
|
582
|
+
useUnit,
|
|
583
|
+
} from "react-intlayer/server/format";
|
|
229
584
|
// или в приложениях Next.js
|
|
230
|
-
import {
|
|
585
|
+
import {
|
|
586
|
+
useNumber,
|
|
587
|
+
useCurrency,
|
|
588
|
+
useDate,
|
|
589
|
+
usePercentage,
|
|
590
|
+
useCompact,
|
|
591
|
+
useList,
|
|
592
|
+
useRelativeTime,
|
|
593
|
+
useUnit,
|
|
594
|
+
} from "next-intlayer/server/format";
|
|
231
595
|
```
|
|
232
596
|
|
|
233
597
|
> Эти хуки будут учитывать локаль из `IntlayerProvider` или `IntlayerServerProvider`
|
|
234
598
|
|
|
599
|
+
### Vue
|
|
600
|
+
|
|
601
|
+
Клиентские компоненты:
|
|
602
|
+
|
|
603
|
+
```ts
|
|
604
|
+
import {
|
|
605
|
+
useNumber,
|
|
606
|
+
useCurrency,
|
|
607
|
+
useDate,
|
|
608
|
+
usePercentage,
|
|
609
|
+
useCompact,
|
|
610
|
+
useList,
|
|
611
|
+
useRelativeTime,
|
|
612
|
+
useUnit,
|
|
613
|
+
} from "vue-intlayer/format";
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
> Эти композиции будут учитывать локаль из внедренного `IntlayerProvider`
|
|
617
|
+
|
|
235
618
|
## История документации
|
|
236
619
|
|
|
237
620
|
| Версия | Дата | Изменения |
|
|
238
621
|
| ------ | ---------- | ------------------------------------- |
|
|
622
|
+
| 5.8.0 | 2025-08-20 | Добавлены форматтеры для Vue |
|
|
239
623
|
| 5.8.0 | 2025-08-18 | Добавлена документация по форматтерам |
|
|
624
|
+
|
|
625
|
+
Компоненты клиента:
|
|
626
|
+
|
|
627
|
+
```ts
|
|
628
|
+
import {
|
|
629
|
+
useNumber,
|
|
630
|
+
useCurrency,
|
|
631
|
+
useDate,
|
|
632
|
+
usePercentage,
|
|
633
|
+
useCompact,
|
|
634
|
+
useList,
|
|
635
|
+
useRelativeTime,
|
|
636
|
+
useUnit,
|
|
637
|
+
} from "vue-intlayer/format";
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
> Эти композиционные функции будут учитывать локаль из внедренного `IntlayerProvider`
|
|
641
|
+
|
|
642
|
+
## История документации
|
|
643
|
+
|
|
644
|
+
| Версия | Дата | Изменения |
|
|
645
|
+
| ------ | ---------- | ---------------------------------------------------------------------------------------- |
|
|
646
|
+
| 5.8.0 | 2025-08-20 | Добавлены форматтеры списка |
|
|
647
|
+
| 5.8.0 | 2025-08-20 | Добавлены дополнительные утилиты Intl (DisplayNames, Collator, PluralRules) |
|
|
648
|
+
| 5.8.0 | 2025-08-20 | Добавлены утилиты локали (getLocaleName, getLocaleLang, getLocaleFromPath и др.) |
|
|
649
|
+
| 5.8.0 | 2025-08-20 | Добавлены утилиты для работы с контентом (getContent, getTranslation, getIntlayer и др.) |
|
|
@@ -25,8 +25,8 @@ slugs:
|
|
|
25
25
|
.
|
|
26
26
|
└── Components
|
|
27
27
|
└── MyComponent
|
|
28
|
-
├── index.content.
|
|
29
|
-
└── index.
|
|
28
|
+
├── index.content.ts
|
|
29
|
+
└── index.tsx
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Для этого роль Intlayer заключается в том, чтобы находить все ваши `файлы с объявлением контента` во всех различных форматах, присутствующих в вашем проекте, а затем генерировать из них `словари`.
|
|
@@ -45,12 +45,10 @@ slugs:
|
|
|
45
45
|
- с использованием плагинов приложения, таких как пакет [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/index.md), или их эквивалентов для [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/next-intlayer/index.md). При использовании одного из этих плагинов Intlayer автоматически создаст ваши словари при запуске (dev) или сборке (prod) вашего приложения.
|
|
46
46
|
|
|
47
47
|
1. Объявление файлов контента
|
|
48
|
-
|
|
49
48
|
- Файлы контента могут быть определены в различных форматах, таких как TypeScript, ECMAScript, CommonJS или JSON.
|
|
50
49
|
- Файлы контента могут быть определены в любом месте проекта, что позволяет улучшить обслуживание и масштабируемость. Важно соблюдать соглашения о расширениях файлов для файлов контента. По умолчанию это расширение `*.content.{js|cjs|mjs|ts|tsx|json}`, но его можно изменить в [файле конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
|
|
51
50
|
|
|
52
51
|
2. Генерация `словарей`
|
|
53
|
-
|
|
54
52
|
- Словари генерируются из файлов контента. По умолчанию словари Intlayer генерируются в директории `.intlayer/dictionaries` проекта.
|
|
55
53
|
- Эти словари генерируются в различных форматах, чтобы удовлетворить все потребности и оптимизировать производительность приложения.
|
|
56
54
|
|
|
@@ -59,7 +57,7 @@ slugs:
|
|
|
59
57
|
|
|
60
58
|
- Типы словарей генерируются из `файлов декларации контента` Intlayer. По умолчанию типы словарей Intlayer генерируются в директории `.intlayer/types` проекта.
|
|
61
59
|
|
|
62
|
-
- [Расширение модулей](https://www.typescriptlang.org/docs/handbook/declaration-merging.html) Intlayer
|
|
60
|
+
- [Расширение модулей](https://www.typescriptlang.org/docs/handbook/declaration-merging.html) Intlayer - это функция TypeScript, которая позволяет вам определять дополнительные типы для Intlayer. Это упрощает процесс разработки, предлагая доступные или обязательные аргументы.
|
|
63
61
|
Среди сгенерированных типов добавляются типы словарей Intlayer или даже типы конфигурации языка в файл `types/intlayer.d.ts` и используются другими пакетами. Для этого необходимо, чтобы файл `tsconfig.json` был настроен на включение директории `types` проекта.
|
|
64
62
|
|
|
65
63
|
### Этап интерпретации словарей
|
|
@@ -91,8 +89,8 @@ Intlayer также предоставляет визуальный редакт
|
|
|
91
89
|
|
|
92
90
|

|
|
93
91
|
|
|
94
|
-
- Сервер
|
|
95
|
-
- С другой стороны, клиент
|
|
92
|
+
- Сервер - это простое приложение на Express, которое прослушивает запросы от клиента и получает контент вашего приложения, такой как `dictionaries` и конфигурация, чтобы сделать его доступным на стороне клиента.
|
|
93
|
+
- С другой стороны, клиент - это приложение на React, которое используется для взаимодействия с вашим контентом через визуальный интерфейс.
|
|
96
94
|
Когда вы вызываете ваш контент с помощью `useIntlayer` и редактор включен, строки автоматически оборачиваются в объект Proxy с именем `IntlayerNode`. Этот узел использует `window.postMessage` для связи с обернутым iframe, содержащим интерфейс визуального редактора.
|
|
97
95
|
Со стороны редактора, редактор прослушивает эти сообщения и имитирует реальное взаимодействие с вашим контентом, позволяя редактировать текст напрямую в контексте вашего приложения.
|
|
98
96
|
|
package/docs/ru/index.md
CHANGED
|
@@ -32,7 +32,7 @@ Intlayer предлагает гибкий, современный подход
|
|
|
32
32
|
Получите обзор того, как работает Intlayer, его основных функций и почему он меняет правила игры в области i18n.
|
|
33
33
|
|
|
34
34
|
- **[Как работает Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/how_works_intlayer.md)**
|
|
35
|
-
Погрузитесь в архитектурный дизайн и узнайте, как Intlayer обрабатывает все
|
|
35
|
+
Погрузитесь в архитектурный дизайн и узнайте, как Intlayer обрабатывает все - от объявления контента до доставки перевода.
|
|
36
36
|
|
|
37
37
|
- **[Конфигурация](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)**
|
|
38
38
|
Настройте Intlayer под нужды вашего проекта. Изучите варианты промежуточного программного обеспечения, структуру каталогов и расширенные настройки.
|