@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.
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 +93 -216
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +88 -120
  12. package/blog/en/vue-i18n_vs_intlayer.md +276 -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 +48 -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 +9 -11
  223. package/src/generated/blog.entry.ts +42 -1
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  createdAt: 2025-01-02
3
3
  updatedAt: 2025-06-29
4
- title: react-i18n vs react-intl vs Intlayer
5
- description: Интегрируйте react-i18next с next-intl и Intlayer для интернационализации (i18n) приложения React
4
+ title: react-i18next против react-intl против Intlayer
5
+ description: Интеграция react-i18next с next-intl и Intlayer для интернационализации (i18n) React-приложения
6
6
  keywords:
7
7
  - next-intl
8
8
  - react-i18next
9
9
  - Intlayer
10
10
  - Интернационализация
11
- - Документация
11
+ - Блог
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,178 +17,137 @@ slugs:
17
17
  - react-i18next-vs-react-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # React-Intl VS React-i18next VS Intlayer | React Интернационализация (i18n)
20
+ # react-Intl ПРОТИВ react-i18next ПРОТИВ intlayer | Интернационализация React (i18n)
21
21
 
22
- Ниже представлено краткое сравнение трех популярных библиотек i18n (интернационализации) для React: **React-Intl**, **React-i18next** и **Intlayer**. Каждая из библиотек предлагает уникальные функции и рабочие процессы для интеграции мультиязычной поддержки в ваше React-приложение. После прочтения этого материала вы сможете определить, какое решение лучше всего соответствует вашим потребностям.
22
+ Это руководство сравнивает три устоявшихся варианта i18n для **React**: **react-intl** (FormatJS), **react-i18next** (i18next) и **Intlayer**.
23
+ Мы сосредотачиваемся на **простых React** приложениях (например, Vite, CRA, SPA). Если вы используете Next.js, смотрите наше отдельное сравнение для Next.js.
23
24
 
24
- ---
25
-
26
- ## 1. Введение
27
-
28
- Интернационализация (i18n) в React-приложениях может быть достигнута различными способами. Три представленные здесь библиотеки имеют разные философии дизайна, наборы функций и поддержку сообщества:
25
+ Мы оцениваем:
29
26
 
30
- 1. **React-Intl**
31
- 2. **React-i18next**
32
- 3. **Intlayer**
27
+ - Архитектура и организация контента
28
+ - TypeScript и безопасность
29
+ - Обработка отсутствующих переводов
30
+ - Богатый контент и возможности форматирования
31
+ - Производительность и поведение при загрузке
32
+ - Опыт разработчика (DX), инструменты и сопровождение
33
+ - SEO/маршрутизация (зависит от фреймворка)
33
34
 
34
- Ниже вы найдете обзор каждого решения, после чего будет представлен сравнительный анализ функций, плюсов и минусов, а также примеры случаев использования.
35
+ > **Кратко**: Все три решения могут локализовать React-приложение. Если вам нужен **контент, ограниченный компонентом**, **строгая типизация TypeScript**, **проверка отсутствующих ключей во время сборки**, **деревья сжатых словарей** и встроенные редакторские инструменты (Визуальный редактор/CMS + опциональный AI-перевод), то **Intlayer** - самый полный выбор для модульных React-кодовых баз.
35
36
 
36
37
  ---
37
38
 
38
- ## 2. React-Intl
39
-
40
- ### Обзор
41
-
42
- [**React-Intl**](https://formatjs.io/docs/react-intl/) является частью набора [FormatJS](https://formatjs.io/). Она предоставляет мощный набор **API и компонентов** для обработки форматирования сообщений, множественного числа, форматирования даты/времени и чисел. React-Intl широко используется в корпоративных приложениях, в основном потому, что она является частью экосистемы, которая стандартизирует синтаксис сообщений и форматирование.
43
-
44
- ### Ключевые особенности
45
-
46
- - **Синтаксис ICU сообщений**: Предлагает комплексный синтаксис для интерполяции сообщений, множественного числа и прочего.
47
- - **Локализованное форматирование**: Встроенные утилиты для форматирования дат, времени, чисел и относительного времени на основе локали.
48
- - **Декларативные компоненты**: Экспонирует `<FormattedMessage>`, `<FormattedNumber>`, `<FormattedDate>` и др. для бесшовного использования в JSX.
49
- - **Богатая экосистема**: Хорошо интегрируется с инструментами FormatJS (например, [babel-plugin-react-intl](https://formatjs.io/docs/tooling/babel-plugin/)) для извлечения, управления и компиляции сообщений.
50
-
51
- ### Типичный рабочий процесс
52
-
53
- 1. **Определите каталоги сообщений** (обычно JSON-файлы на локаль).
54
- 2. **Оберните ваше приложение** в `<IntlProvider locale="en" messages={messages}>`.
55
- 3. **Используйте** `<FormattedMessage id="myMessage" defaultMessage="Hello world" />` или хук `useIntl()` для доступа к строкам перевода.
56
-
57
- ### Плюсы
58
-
59
- - Хорошо зарекомендована и используется во многих производственных средах.
60
- - Расширенное форматирование сообщений, включая множественное число, род, часовые пояса и многое другое.
61
- - Сильная поддержка инструментов для извлечения и компиляции сообщений.
62
-
63
- ### Минусы
39
+ ## Общее позиционирование
64
40
 
65
- - Требует знакомства со **синтаксисом ICU сообщений**, который может быть многословным.
66
- - Не так просто обрабатывать динамические или сложные переводы, которые более чем просто строковые.
41
+ - **react-intl** - форматирование, ориентированное на ICU и соответствующее стандартам (даты/числа/множественное число) с зрелым API. Каталоги обычно централизованы; безопасность ключей и проверка во время сборки в основном на вашей стороне.
42
+ - **react-i18next** - чрезвычайно популярный и гибкий; пространства имён, детекторы и множество плагинов (ICU, бекенды). Мощный, но конфигурация может разрастаться по мере масштабирования проектов.
43
+ - **Intlayer** - модель контента, ориентированная на компоненты React, **строгая типизация TS**, **проверки во время сборки**, **tree-shaking**, а также **Визуальный редактор/CMS** и **переводы с помощью ИИ**. Работает с React Router, Vite, CRA и др.
67
44
 
68
45
  ---
69
46
 
70
- ## 3. React-i18next
47
+ ## Матрица возможностей (фокус на React)
48
+
49
+ | Особенность | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
50
+ | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
51
+ | **Переводы рядом с компонентами** | ✅ Да, контент расположен рядом с каждым компонентом | ❌ Нет | ❌ Нет |
52
+ | **Интеграция с TypeScript** | ✅ Продвинутая, автоматически сгенерированные строгие типы | ⚠️ Базовая; дополнительная настройка для безопасности | ✅ Хорошая, но менее строгая |
53
+ | **Обнаружение отсутствующих переводов** | ✅ Подсветка ошибок TypeScript и ошибки/предупреждения во время сборки | ⚠️ В основном строки замены во время выполнения | ⚠️ Строки замены |
54
+ | **Расширенный контент (JSX/Markdown/компоненты)** | ✅ Прямая поддержка | ⚠️ Ограничено / только интерполяция | ⚠️ Синтаксис ICU, не настоящий JSX |
55
+ | **Перевод с использованием ИИ** | ✅ Да, поддерживает нескольких провайдеров ИИ. Можно использовать с собственными API-ключами. Учитывает контекст вашего приложения и объем контента | ❌ Нет | ❌ Нет |
56
+ | **Визуальный редактор** | ✅ Да, локальный визуальный редактор + опциональная CMS; может вынести содержимое кодовой базы; встраиваемый | ❌ Нет / доступен через внешние платформы локализации | ❌ Нет / доступен через внешние платформы локализации |
57
+ | **Локализованная маршрутизация** | ✅ Да, поддерживает локализованные пути из коробки (работает с Next.js и Vite) | ⚠️ Нет встроенной поддержки, требует плагинов (например, `next-i18next`) или кастомной настройки роутера | ❌ Нет, только форматирование сообщений, маршрутизация должна быть ручной |
58
+ | **Динамическая генерация маршрутов** | ✅ Да | ⚠️ Плагин/экосистема или ручная настройка | ❌ Не предоставляется |
59
+ | **Множественное число** | ✅ Шаблоны на основе перечислений | ✅ Настраиваемые (плагины, такие как i18next-icu) | ✅ (ICU) |
60
+ | **Форматирование (даты, числа, валюты)** | ✅ Оптимизированные форматтеры (Intl под капотом) | ⚠️ Через плагины или кастомное использование Intl | ✅ Форматтеры ICU |
61
+ | **Формат контента** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml в разработке) | ⚠️ .json | ✅ .json, .js |
62
+ | **Поддержка ICU** | ⚠️ В разработке | ⚠️ Через плагин (i18next-icu) | ✅ Да |
63
+ | **SEO помощники (hreflang, sitemap)** | ✅ Встроенные инструменты: помощники для sitemap, robots.txt, метаданных | ⚠️ Плагины сообщества/ручные настройки | ❌ Не является ядром |
64
+ | **Экосистема / Сообщество** | ⚠️ Меньше, но быстро растет и активна | ✅ Самая большая и зрелая | ✅ Большое |
65
+ | **Серверный рендеринг и серверные компоненты** | ✅ Да, оптимизировано для SSR / React Server Components | ⚠️ Поддерживается на уровне страницы, но необходимо передавать t-функции в дерево компонентов для дочерних серверных компонентов | ❌ Не поддерживается, необходимо передавать t-функции в дерево компонентов для дочерних серверных компонентов |
66
+ | **Tree-shaking (загрузка только используемого контента)** | ✅ Да, на уровне компонентов во время сборки через плагины Babel/SWC | ⚠️ Обычно загружает всё (можно улучшить с помощью пространств имён/разделения кода) | ⚠️ Обычно загружает всё |
67
+ | **Отложенная загрузка** | ✅ Да, по локалям / по словарям | ✅ Да (например, бэкенды/неймспейсы по требованию) | ✅ Да (разделение пакетов локалей) |
68
+ | **Удаление неиспользуемого контента** | ✅ Да, по словарям во время сборки | ❌ Нет, только через ручное разделение по неймспейсам | ❌ Нет, все объявленные сообщения включены в пакет |
69
+ | **Управление крупными проектами** | ✅ Поощряет модульность, подходит для дизайн-систем | ⚠️ Требует хорошей дисциплины в работе с файлами | ⚠️ Центральные каталоги могут стать большими |
71
70
 
72
- ### Обзор
73
-
74
- [**React-i18next**](https://react.i18next.com/) – это расширение для React от [i18next](https://www.i18next.com/), одного из самых популярных JavaScript фреймворков для i18n. Он предлагает **обширные функции** для переводов во время выполнения, ленивой загрузки и определения языка, что делает его чрезвычайно гибким для разнообразных случаев использования.
75
-
76
- ### Ключевые особенности
77
-
78
- - **Гибкая структура переводов**: Не привязан к одному формату, как ICU. Вы можете хранить переводы в JSON, использовать интерполяцию, множественное число и т. д.
79
- - **Динамическое переключение языка**: Встроенные плагины для определения языка и обновления в режиме реального времени.
80
- - **Вложенные и структурированные переводы**: Вы можете легко вложить переводы в JSON.
81
- - **Обширная экосистема плагинов**: Для определения (браузер, путь, подсайт и др.), загрузки ресурсов, кэширования и многого другого.
82
-
83
- ### Типичный рабочий процесс
84
-
85
- 1. **Установите `i18next` и `react-i18next`.**
86
- 2. **Настройте i18n** для загрузки переводов (JSON) и настройки определения языка или запасного варианта.
87
- 3. **Оборачивайте ваше приложение** в `I18nextProvider`.
88
- 4. **Используйте хук `useTranslation()`** или компонент `<Trans>` для отображения переводов.
71
+ ---
89
72
 
90
- ### Плюсы
73
+ ## Глубокое сравнение
91
74
 
92
- - Очень **гибкий** и богатый функциями.
93
- - Очень активное сообщество и большая экосистема плагинов.
94
- - Простота **динамической загрузки** переводов (например, с сервера, по запросу).
75
+ ### 1) Архитектура и масштабируемость
95
76
 
96
- ### Минусы
77
+ - **react-intl / react-i18next**: Большинство настроек поддерживают **централизованные папки локалей** для каждого языка, иногда разделённые по **неймспейсам** (i18next). Хорошо работает на ранних этапах, но становится общей зоной пересечения по мере роста приложений.
78
+ - **Intlayer**: Продвигает использование **словарей на уровне компонентов (или функций)**, **расположенных рядом** с UI, который они обслуживают. Это сохраняет ясность владения, облегчает дублирование/миграцию компонентов и снижает количество изменений ключей между командами. Неиспользуемый контент легче выявить и удалить.
97
79
 
98
- - **Конфигурация может быть многословной**, особенно если у вас есть более сложные потребности.
99
- - Если вы предпочитаете строго типизированные переводы, может потребоваться дополнительная настройка TypeScript.
80
+ **Почему это важно:** Модульный контент отражает модульный UI. Большие React-кодовые базы остаются чище, когда переводы живут вместе с компонентами, которым они принадлежат.
100
81
 
101
82
  ---
102
83
 
103
- ## 4. Intlayer
84
+ ### 2) TypeScript и безопасность
104
85
 
105
- ### Обзор
86
+ - **react-intl**: Надежные типы, но **нет автоматической типизации ключей**; вы сами обеспечиваете паттерны безопасности.
87
+ - **react-i18next**: Сильная типизация для хуков; **строгая типизация ключей** обычно требует дополнительной настройки или генераторов.
88
+ - **Intlayer**: **Автоматически генерирует строгие типы** на основе вашего контента. Автозаполнение в IDE и **ошибки на этапе компиляции** ловят опечатки и отсутствующие ключи до выполнения.
106
89
 
107
- [**Intlayer**](https://github.com/aymericzip/intlayer) это новая, открытая библиотека i18n, сосредоточенная на **декларациях контента на уровне компонентов**, безопасности типов и **динамической маршрутизации**. Она предназначена для современных рабочих процессов React, поддерживающих как **Create React App**, так и **Vite**. Она также включает в себя усовершенствованные функции, такие как **маршрутизация на основе локали** и **автоматически сгенерированные типы TypeScript** для переводов.
90
+ **Почему это важно:** Перемещение ошибок **влево** (на этап сборки/CI) снижает количество проблем в продакшене и ускоряет цикл обратной связи для разработчиков.
108
91
 
109
- ### Ключевые особенности
92
+ ---
110
93
 
111
- - **Декларативные файлы контента**: Каждый компонент или модуль может объявить свои переводы в выделенных файлах `.content.tsx` или `.content.json`, что позволяет держать контент рядом с тем местом, где он используется.
112
- - **Встроенная маршрутизация и промежуточное ПО**: Дополнительные модули для локализованной маршрутизации (например, `/en/about`, `/fr/about`) и серверного промежуточного ПО для определения локали пользователя.
113
- - **Автоматически сгенерированные типы TypeScript**: Обеспечивают безопасность типов с такими функциями, как автозаполнение и обнаружение ошибок на этапе компиляции.
114
- - **Динамические и богатые переводы**: Могут включать JSX/TSX в переводы для более сложных случаев использования (например, ссылки, жирный текст, иконки в переводах).
94
+ ### 3) Обработка отсутствующих переводов
115
95
 
116
- ### Типичный рабочий процесс
96
+ - **react-intl / react-i18next**: По умолчанию используют **запасные варианты во время выполнения** (отображение ключа или локаль по умолчанию). Можно добавить линтеры/плагины, но гарантий на этапе сборки нет.
97
+ - **Intlayer**: **Обнаружение на этапе сборки** с предупреждениями или ошибками при отсутствии необходимых локалей/ключей.
117
98
 
118
- 1. **Установите `intlayer` и `react-intlayer`.**
119
- 2. **Создайте `intlayer.config.ts`** для определения доступных локалей и локали по умолчанию.
120
- 3. **Используйте CLI Intlayer** или плагин для **транспиляции** деклараций контента.
121
- 4. **Оборачивайте ваше приложение** в `<IntlayerProvider>` и получайте контент с помощью `useIntlayer("keyName")`.
99
+ **Почему это важно:** Сбой CI из-за отсутствующих строк предотвращает появление «загадочного английского» в неанглоязычных интерфейсах.
122
100
 
123
- ### Плюсы
101
+ ---
124
102
 
125
- - **Дружественный к TypeScript** с встроенной генерацией типов и проверкой ошибок.
126
- - **Богатый контент** возможен (например, передача узлов React в качестве переводов).
127
- - **Локализованная маршрутизация** из коробки.
128
- - Интегрирован с популярными инструментами сборки (CRA, Vite) для легкой настройки.
103
+ ### 4) Богатый контент и форматирование
129
104
 
130
- ### Минусы
105
+ - **react-intl**: Отличная поддержка **ICU** для множественного числа, выборов, дат/чисел и составления сообщений. Можно использовать JSX, но ментальная модель остается ориентированной на сообщения.
106
+ - **react-i18next**: Гибкая интерполяция и **`<Trans>`** для встраивания элементов/компонентов; ICU доступен через плагин.
107
+ - **Intlayer**: Файлы контента могут включать **богатые узлы** (JSX/Markdown/компоненты) и **метаданные**. Форматирование использует Intl под капотом; шаблоны множественного числа эргономичны.
131
108
 
132
- - Все еще **относительно новая** по сравнению с React-Intl или React-i18next.
133
- - Более сильный акцент на подходе «декларация контента на уровне компонента» , возможно, это будет сдвигом от типичных каталогов .json.
134
- - Меньшая экосистема и сообщество по сравнению с более устоявшимися библиотеками.
109
+ **Почему это важно:** Сложные тексты UI (ссылки, выделенные части, встроенные компоненты) проще реализовать, когда библиотека чисто поддерживает React-узлы.
135
110
 
136
111
  ---
137
112
 
138
- ## 5. Сравнение функций
113
+ ### 5) Производительность и поведение загрузки
114
+
115
+ - **react-intl / react-i18next**: Обычно вы самостоятельно управляете **разделением каталогов** и **ленивой загрузкой** (пространства имён/динамические импорты). Эффективно, но требует дисциплины.
116
+ - **Intlayer**: Выполняет **tree-shaking** неиспользуемых словарей и поддерживает **ленивую загрузку по словарям и локалям** из коробки.
139
117
 
140
- | **Особенность** | **React-Intl** | **React-i18next** | **Intlayer** |
141
- | ---------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
142
- | **Основное назначение** | Строковые переводы, форматирование даты/чисел, синтаксис ICU | Полнофункциональный i18n с простым динамическим переключением, вложением, экосистемой плагинов | Безопасные по типу переводы с фокусом на декларативном контенте, локализованной маршрутизации и необязательном серверном промежуточном ПО |
143
- | **Подход** | Используйте `<IntlProvider>` и компоненты форматирования FormatJS | Используйте `I18nextProvider` и хук `useTranslation()` | Используйте `<IntlayerProvider>` и хук `useIntlayer()` с декларациями контента |
144
- | **Формат локализации** | ICU-строки (каталоги JSON или JavaScript) | JSON-файлы ресурсов (или пользовательские загрузчики). ICU формат не обязателен через плагин i18next | Декларации `.content.[ts/js/tsx]` или JSON; могут содержать строки или компоненты React |
145
- | **Маршрутизация** | Обрабатывается внешне (нет встроенной локализованной маршрутизации) | Обрабатывается внешне с плагинами i18next (определение пути, поддомен и др.) | Встроенная поддержка локализованной маршрутизации (например, `/en/about`, `/fr/about`), плюс необязательное серверное промежуточное ПО (для SSR/Vite) |
146
- | **Поддержка TypeScript** | Хорошая (типы для официальных пакетов) | Хорошая, но требуется дополнительная настройка для строгих проверок переводов | Отличная (автоматически создаваемые определения типов для ключей и переводов содержимого) |
147
- | **Множественное число и форматирование** | Расширенные: встроенное форматирование даты/времени/чисел, поддержка рода/множественного числа | Конфигурируемое множественное число. Форматирование даты/времени обычно выполняется с помощью внешних библиотек или плагина i18next | Может полагаться на стандартный JavaScript Intl или включать логику в контент. Не так специализирован, как FormatJS, но обрабатывает типичные случаи. |
148
- | **Сообщество и экосистема** | Большое, часть экосистемы FormatJS | Очень большая, активная, множество плагинов (определение, кэширование, фреймворки) | Меньшая, но растущая; открытый исходный код, современный подход |
149
- | **Кривая обучения** | Умеренная (изучение синтаксиса ICU сообщений, конвенций FormatJS) | Низкая до умеренной (простое использование, но сложная конфигурация может стать многословной) | Умеренная (концепция деклараций контента и специализированных шагов сборки) |
118
+ **Почему это важно:** Меньшие бандлы и меньше неиспользуемых строк улучшают производительность запуска и навигации.
150
119
 
151
120
  ---
152
121
 
153
- ## 6. Когда выбирать каждую
122
+ ### 6) DX, инструменты и сопровождение
154
123
 
155
- 1. **React-Intl**
124
+ - **react-intl / react-i18next**: Широкая экосистема сообщества; для редакционных рабочих процессов обычно используют внешние платформы локализации.
125
+ - **Intlayer**: Поставляется с **бесплатным визуальным редактором** и **опциональной CMS** (храните контент в Git или выносите его). Также предлагает **расширение для VSCode** для создания контента и **перевод с помощью ИИ** с использованием ваших собственных ключей провайдера.
156
126
 
157
- - Вам нужна **мощная форматировка** для дат/времени/чисел и сильный **синтаксис ICU сообщений**.
158
- - Вы предпочитаете более «**стандартизированный**» подход к переводам.
159
- - Вам не требуется локализованная маршрутизация или строго типизированные ключи переводов.
127
+ **Почему это важно:** Встроенные инструменты сокращают цикл взаимодействия между разработчиками и авторами контента - меньше вспомогательного кода, меньше зависимостей от сторонних поставщиков.
160
128
 
161
- 2. **React-i18next**
129
+ ---
162
130
 
163
- - Вам нужно **гибкое, устоявшееся** решение с **динамическим** и **по запросу** загрузкой перевода.
164
- - Вы хотите **определение языка на основе плагинов** (например, из URL, cookies, локального хранилища) или расширенное кэширование.
165
- - Вам нужна самая большая экосистема с множеством существующих интеграций для различных фреймворков (Next.js, React Native и др.).
131
+ ## Когда что выбирать?
166
132
 
167
- 3. **Intlayer**
168
- - Вы хотите **сильную интеграцию TypeScript** с _автоматически сгенерированными типами_, что обеспечивает редкую потерю ключа перевода.
169
- - Вы предпочитаете **декларативный контент** рядом с компонентом, возможно, включая узлы React или сложную логику в переводах.
170
- - Вам нужна **встроенная локализованная маршрутизация** или вы хотите легко интегрировать ее в вашу настройку SSR или Vite.
171
- - Вы стремитесь к современному подходу или просто хотите одну библиотеку, которая охватывает как **управление контентом** (i18n), так и **маршрутизацию** безопасным по типу способом.
133
+ - **Выбирайте react-intl**, если вам нужен **ICU-первый** формат сообщений с простым, соответствующим стандартам API, и ваша команда готова вручную поддерживать каталоги и проверки безопасности.
134
+ - **Выбирайте react-i18next**, если вам нужна **широкая экосистема i18next** (детекторы, бэкенды, плагин ICU, интеграции) и вы готовы к большей конфигурации ради гибкости.
135
+ - **Выбирайте Intlayer**, если вы цените **контент, ограниченный компонентом**, **строгую типизацию TypeScript**, **гарантии на этапе сборки**, **tree-shaking** и **встроенные инструменты редактирования** - особенно для **больших, модульных** React-приложений.
172
136
 
173
137
  ---
174
138
 
175
- ## 7. Заключение
176
-
177
- Каждая библиотека предлагает надежное решение для интернационализации React-приложения:
178
-
179
- - **React-Intl** превосходит в форматировании сообщений и является популярным выбором для корпоративных решений с акцентом на синтаксис ICU сообщений.
180
- - **React-i18next** предоставляет высоко гибкую, основанную на плагинах среду для сложных или динамических нужд i18n.
181
- - **Intlayer** предлагает **современный, строго типизированный** подход, который объединяет декларации контента, усовершенствованную локализованную маршрутизацию и интеграции (CRA, Vite).
139
+ ## Практические заметки по миграции (react-intl / react-i18next → Intlayer)
182
140
 
183
- Ваш выбор во многом зависит от требований проекта, желаемого опыта разработки (DX) и того, насколько важны типизированные переводы или расширенная маршрутизация. Если вы цените встроенную локализованную маршрутизацию и интеграцию TypeScript, **Intlayer** может быть наиболее привлекательным вариантом. Если вы хотите протестированное, богатое экосистемой решение, **React-i18next** будет отличным выбором. Для простых потребностей форматирования на основе ICU **React-Intl** является надежным вариантом.
141
+ - **Мигрируйте постепенно**: начните с одной функции или маршрута; в период перехода сохраняйте старые каталоги параллельно.
142
+ - **Используйте словари на уровне компонентов**: размещайте контент рядом с компонентами, чтобы уменьшить связанность.
143
+ - **Включите строгие проверки**: позволяйте ошибкам на этапе сборки выявлять отсутствующие ключи/локали на ранних этапах CI.
144
+ - **Измеряйте размер бандлов**: ожидайте уменьшения размера по мере удаления неиспользуемых строк.
184
145
 
185
146
  ---
186
147
 
187
- ### Дополнительные материалы
148
+ ## Заключение
188
149
 
189
- - [Документация React-Intl](https://formatjs.io/docs/react-intl/)
190
- - [Документация React-i18next](https://react.i18next.com/)
191
- - [Руководство по началу работы с Intlayer + CRA](#) (из ваших документов)
192
- - [Руководство по началу работы с Intlayer + Vite & React](#) (из ваших документов)
150
+ Все три библиотеки эффективно локализуют React. Главное отличие - сколько **инфраструктуры** вам нужно построить, чтобы получить **безопасную, масштабируемую** систему:
193
151
 
194
- Не стесняйтесь комбинировать подходы в соответствии с вашими требованиями , не существует решения «один размер подходит всем», и каждая библиотека продолжает развиваться, чтобы удовлетворять новым случаям использования в экосистеме React.
152
+ - С **Intlayer** **модульный контент**, **строгая типизация TS**, **безопасность на этапе сборки**, **tree-shaking бандлов** и **редакционные инструменты** являются стандартом, а не рутиной.
153
+ - Если ваша команда ценит **поддерживаемость и скорость** в многоязычных, компонентно-ориентированных React-приложениях, Intlayer предлагает сегодня **самый полный** рабочий процесс для разработчиков и контента.