@intlayer/docs 5.8.0-canary.0 → 5.8.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.
Files changed (223) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +2 -2
  2. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  3. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  4. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  5. package/blog/de/intlayer_with_next-i18next.md +2 -2
  6. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  7. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  8. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  9. package/blog/en/intlayer_with_next-i18next.md +2 -2
  10. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +89 -220
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +85 -123
  12. package/blog/en/vue-i18n_vs_intlayer.md +268 -0
  13. package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
  14. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  15. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  16. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  17. package/blog/es/intlayer_with_next-i18next.md +2 -2
  18. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  19. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  20. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  21. package/blog/fr/intlayer_with_next-i18next.md +2 -2
  22. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  23. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  24. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  25. package/blog/hi/intlayer_with_next-i18next.md +2 -2
  26. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  27. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  28. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  29. package/blog/it/intlayer_with_next-i18next.md +2 -2
  30. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  31. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  32. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  33. package/blog/ja/intlayer_with_next-i18next.md +2 -2
  34. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  35. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  36. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  37. package/blog/ko/intlayer_with_next-i18next.md +2 -2
  38. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  39. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  40. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  41. package/blog/pt/intlayer_with_next-i18next.md +2 -2
  42. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  43. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  44. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  45. package/blog/ru/intlayer_with_next-i18next.md +2 -2
  46. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  47. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  48. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  49. package/blog/zh/intlayer_with_next-i18next.md +2 -2
  50. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  51. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  52. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  53. package/dist/cjs/generated/blog.entry.cjs +41 -0
  54. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  55. package/dist/esm/generated/blog.entry.mjs +41 -0
  56. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  57. package/dist/types/generated/blog.entry.d.ts +1 -0
  58. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  59. package/docs/ar/formatters.md +417 -31
  60. package/docs/ar/how_works_intlayer.md +2 -4
  61. package/docs/ar/interest_of_intlayer.md +7 -10
  62. package/docs/ar/intlayer_CMS.md +2 -3
  63. package/docs/ar/intlayer_visual_editor.md +2 -3
  64. package/docs/ar/intlayer_with_tanstack.md +1 -1
  65. package/docs/ar/introduction.md +4 -4
  66. package/docs/de/formatters.md +444 -34
  67. package/docs/de/introduction.md +2 -2
  68. package/docs/en/dictionary/enumeration.md +2 -2
  69. package/docs/en/dictionary/function_fetching.md +2 -2
  70. package/docs/en/dictionary/get_started.md +2 -2
  71. package/docs/en/dictionary/translation.md +2 -2
  72. package/docs/en/formatters.md +383 -15
  73. package/docs/en/how_works_intlayer.md +2 -4
  74. package/docs/en/interest_of_intlayer.md +40 -29
  75. package/docs/en/intlayer_CMS.md +2 -3
  76. package/docs/en/intlayer_visual_editor.md +2 -3
  77. package/docs/en/intlayer_with_create_react_app.md +2 -2
  78. package/docs/en/intlayer_with_express.md +2 -2
  79. package/docs/en/intlayer_with_tanstack.md +1 -1
  80. package/docs/en/introduction.md +4 -4
  81. package/docs/en/packages/express-intlayer/index.md +2 -2
  82. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  83. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  84. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  85. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  86. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  87. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  88. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  89. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  90. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  91. package/docs/en/packages/intlayer/index.md +2 -2
  92. package/docs/en/packages/next-intlayer/index.md +2 -2
  93. package/docs/en/packages/next-intlayer/t.md +2 -2
  94. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  95. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  96. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  97. package/docs/en/packages/react-intlayer/index.md +2 -2
  98. package/docs/en/packages/react-intlayer/t.md +2 -2
  99. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  100. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  101. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  102. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  103. package/docs/en/packages/solid-intlayer/index.md +2 -2
  104. package/docs/en/packages/vite-intlayer/index.md +2 -2
  105. package/docs/en-GB/formatters.md +402 -16
  106. package/docs/en-GB/how_works_intlayer.md +2 -4
  107. package/docs/en-GB/interest_of_intlayer.md +7 -10
  108. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  109. package/docs/en-GB/introduction.md +2 -2
  110. package/docs/es/formatters.md +438 -28
  111. package/docs/es/how_works_intlayer.md +2 -4
  112. package/docs/es/interest_of_intlayer.md +7 -10
  113. package/docs/es/intlayer_with_tanstack.md +1 -1
  114. package/docs/es/introduction.md +2 -2
  115. package/docs/fr/formatters.md +438 -28
  116. package/docs/fr/how_works_intlayer.md +2 -4
  117. package/docs/fr/interest_of_intlayer.md +7 -10
  118. package/docs/fr/intlayer_with_tanstack.md +1 -1
  119. package/docs/fr/introduction.md +2 -2
  120. package/docs/hi/formatters.md +430 -39
  121. package/docs/hi/how_works_intlayer.md +2 -4
  122. package/docs/hi/interest_of_intlayer.md +7 -10
  123. package/docs/hi/intlayer_with_tanstack.md +1 -1
  124. package/docs/hi/introduction.md +2 -2
  125. package/docs/it/formatters.md +438 -30
  126. package/docs/it/how_works_intlayer.md +2 -4
  127. package/docs/it/interest_of_intlayer.md +7 -10
  128. package/docs/it/intlayer_with_tanstack.md +1 -1
  129. package/docs/it/introduction.md +2 -2
  130. package/docs/ja/formatters.md +435 -47
  131. package/docs/ja/how_works_intlayer.md +2 -4
  132. package/docs/ja/interest_of_intlayer.md +7 -10
  133. package/docs/ja/intlayer_with_tanstack.md +1 -1
  134. package/docs/ja/introduction.md +2 -2
  135. package/docs/ko/formatters.md +432 -41
  136. package/docs/ko/how_works_intlayer.md +2 -4
  137. package/docs/ko/interest_of_intlayer.md +7 -10
  138. package/docs/ko/intlayer_with_tanstack.md +1 -1
  139. package/docs/ko/introduction.md +2 -2
  140. package/docs/pt/formatters.md +416 -30
  141. package/docs/pt/how_works_intlayer.md +2 -4
  142. package/docs/pt/intlayer_with_tanstack.md +1 -1
  143. package/docs/pt/introduction.md +2 -2
  144. package/docs/ru/autoFill.md +2 -2
  145. package/docs/ru/configuration.md +1 -40
  146. package/docs/ru/formatters.md +438 -28
  147. package/docs/ru/how_works_intlayer.md +5 -7
  148. package/docs/ru/index.md +1 -1
  149. package/docs/ru/interest_of_intlayer.md +8 -11
  150. package/docs/ru/intlayer_CMS.md +7 -8
  151. package/docs/ru/intlayer_cli.md +4 -7
  152. package/docs/ru/intlayer_visual_editor.md +5 -6
  153. package/docs/ru/intlayer_with_angular.md +1 -1
  154. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  155. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  156. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  157. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  158. package/docs/ru/intlayer_with_nuxt.md +1 -1
  159. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  160. package/docs/ru/intlayer_with_tanstack.md +3 -3
  161. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  162. package/docs/ru/intlayer_with_vite+react.md +3 -3
  163. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  164. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  165. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  166. package/docs/ru/introduction.md +5 -5
  167. package/docs/ru/locale_mapper.md +1 -1
  168. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  169. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  170. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  171. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  172. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  173. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  174. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  175. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  176. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  177. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  178. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  179. package/docs/ru/packages/express-intlayer/index.md +3 -3
  180. package/docs/ru/packages/express-intlayer/t.md +1 -1
  181. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  182. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  183. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  184. package/docs/ru/packages/intlayer/index.md +3 -3
  185. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  186. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  187. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  188. package/docs/ru/packages/next-intlayer/index.md +4 -4
  189. package/docs/ru/packages/next-intlayer/t.md +4 -4
  190. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  191. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  192. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  193. package/docs/ru/packages/react-intlayer/index.md +4 -4
  194. package/docs/ru/packages/react-intlayer/t.md +4 -4
  195. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  196. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  197. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  198. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  199. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  200. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  201. package/docs/ru/per_locale_file.md +1 -1
  202. package/docs/ru/roadmap.md +3 -5
  203. package/docs/ru/vs_code_extension.md +1 -1
  204. package/docs/zh/formatters.md +446 -38
  205. package/docs/zh/how_works_intlayer.md +2 -4
  206. package/docs/zh/interest_of_intlayer.md +7 -10
  207. package/docs/zh/intlayer_with_tanstack.md +1 -1
  208. package/docs/zh/introduction.md +2 -2
  209. package/frequent_questions/ar/domain_routing.md +1 -1
  210. package/frequent_questions/en/domain_routing.md +1 -1
  211. package/frequent_questions/en-GB/domain_routing.md +1 -1
  212. package/frequent_questions/es/domain_routing.md +1 -1
  213. package/frequent_questions/fr/domain_routing.md +1 -1
  214. package/frequent_questions/hi/domain_routing.md +1 -1
  215. package/frequent_questions/it/domain_routing.md +1 -1
  216. package/frequent_questions/ko/domain_routing.md +1 -1
  217. package/frequent_questions/pt/domain_routing.md +1 -1
  218. package/frequent_questions/ru/domain_routing.md +1 -1
  219. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  220. package/frequent_questions/ru/static_rendering.md +1 -2
  221. package/frequent_questions/zh/domain_routing.md +1 -1
  222. package/package.json +7 -7
  223. package/src/generated/blog.entry.ts +41 -0
@@ -2,7 +2,7 @@
2
2
  createdAt: 2024-08-13
3
3
  updatedAt: 2025-08-20
4
4
  title: Форматтеры
5
- description: Утилиты для форматирования с учетом локали на основе Intl для чисел, процентов, валюты, дат, относительного времени, единиц измерения и компактной записи. Включает кешированный помощник Intl.
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 предоставляет набор легковесных помощников, построенных поверх нативных API `Intl`, а также кешированный обертку `Intl`, чтобы избежать повторного создания тяжелых форматтеров. Эти утилиты полностью учитывают локаль и могут использоваться из основного пакета `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` — это тонкая кешированная обертка вокруг глобального `Intl`. Она мемоизирует экземпляры `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, что позволяет избежать повторного создания одного и того же форматтера.
60
+ Экспортируемый `Intl` — это тонкая кешированная обёртка вокруг глобального `Intl`. Он мемоизирует экземпляры `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` и `PluralRules`, что позволяет избежать повторного создания одного и того же форматтера.
48
61
 
49
- Поскольку создание форматтера относительно дорогостоящее, такое кеширование улучшает производительность без изменения поведения. Обертка предоставляет тот же API, что и нативный `Intl`, поэтому использование идентично.
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
- Все приведённые ниже помощники экспортируются из `intlayer`.
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" }); // "1000000"
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" }); // "5000,00 CAD"
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` `"second"`.
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
- Форматирует число, используя компактную нотацию (например, `1.2K`, `1M`).
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
- - Все вспомогательные функции принимают входные данные в виде `string`; они внутренне приводятся к числам или датам.
201
- - Локаль по умолчанию берется из вашей настройки `internationalization.defaultLocale`, если не указана явно.
202
- - Эти утилиты являются тонкими обертками; для расширенного форматирования используйте стандартные опции `Intl`.
463
+ Форматирует массив значений в локализованную строку списка с использованием `Intl.ListFormat`.
203
464
 
204
- ## Точки входа и реэкспорты (`@index.ts`)
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
- import { number, currency, date, Intl } from "intlayer";
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
- ```ts
220
- import { useNumber, useCurrency, useDate } from "react-intlayer/format";
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 { useNumber, useCurrency, useDate } from "next-intlayer/client/format";
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 { useNumber, useCurrency, useDate } from "intlayer/server/format";
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 { useNumber, useCurrency, useDate } from "next-intlayer/server/format";
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.cjs
29
- └── index.mjs
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 это функция TypeScript, которая позволяет вам определять дополнительные типы для 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
  ![визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.gif)
93
91
 
94
- - Сервер это простое приложение на Express, которое прослушивает запросы от клиента и получает контент вашего приложения, такой как `dictionaries` и конфигурация, чтобы сделать его доступным на стороне клиента.
95
- - С другой стороны, клиент это приложение на React, которое используется для взаимодействия с вашим контентом через визуальный интерфейс.
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 под нужды вашего проекта. Изучите варианты промежуточного программного обеспечения, структуру каталогов и расширенные настройки.