@intlayer/docs 5.7.8 → 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 (297) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +5 -6
  2. package/blog/ar/intlayer_with_next-intl.md +3 -4
  3. package/blog/ar/intlayer_with_react-i18next.md +1 -1
  4. package/blog/ar/intlayer_with_react-intl.md +1 -1
  5. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  6. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  7. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  8. package/blog/de/intlayer_with_next-i18next.md +5 -6
  9. package/blog/de/intlayer_with_react-intl.md +1 -1
  10. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  11. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  12. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  13. package/blog/en/intlayer_with_next-i18next.md +5 -6
  14. package/blog/en/intlayer_with_next-intl.md +3 -4
  15. package/blog/en/intlayer_with_react-i18next.md +1 -1
  16. package/blog/en/intlayer_with_react-intl.md +1 -1
  17. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +89 -220
  18. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +85 -123
  19. package/blog/en/vue-i18n_vs_intlayer.md +268 -0
  20. package/blog/en-GB/intlayer_with_next-i18next.md +5 -6
  21. package/blog/en-GB/intlayer_with_next-intl.md +3 -4
  22. package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
  23. package/blog/en-GB/intlayer_with_react-intl.md +1 -1
  24. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  25. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  26. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  27. package/blog/es/intlayer_with_next-i18next.md +5 -6
  28. package/blog/es/intlayer_with_next-intl.md +3 -4
  29. package/blog/es/intlayer_with_react-i18next.md +1 -1
  30. package/blog/es/intlayer_with_react-intl.md +1 -1
  31. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  32. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  33. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  34. package/blog/fr/intlayer_with_next-i18next.md +5 -6
  35. package/blog/fr/intlayer_with_next-intl.md +3 -4
  36. package/blog/fr/intlayer_with_react-i18next.md +1 -1
  37. package/blog/fr/intlayer_with_react-intl.md +1 -1
  38. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  39. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  40. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  41. package/blog/hi/intlayer_with_next-i18next.md +5 -6
  42. package/blog/hi/intlayer_with_next-intl.md +3 -4
  43. package/blog/hi/intlayer_with_react-i18next.md +1 -1
  44. package/blog/hi/intlayer_with_react-intl.md +1 -1
  45. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  46. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  47. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  48. package/blog/it/intlayer_with_next-i18next.md +5 -6
  49. package/blog/it/intlayer_with_next-intl.md +3 -4
  50. package/blog/it/intlayer_with_react-i18next.md +1 -1
  51. package/blog/it/intlayer_with_react-intl.md +1 -1
  52. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  53. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  54. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  55. package/blog/ja/intlayer_with_next-i18next.md +5 -6
  56. package/blog/ja/intlayer_with_next-intl.md +3 -4
  57. package/blog/ja/intlayer_with_react-intl.md +1 -1
  58. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  59. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  60. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  61. package/blog/ko/intlayer_with_next-i18next.md +5 -6
  62. package/blog/ko/intlayer_with_next-intl.md +3 -4
  63. package/blog/ko/intlayer_with_react-intl.md +1 -1
  64. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  65. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  66. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  67. package/blog/pt/intlayer_with_next-i18next.md +5 -6
  68. package/blog/pt/intlayer_with_next-intl.md +3 -4
  69. package/blog/pt/intlayer_with_react-intl.md +1 -1
  70. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  71. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  72. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  73. package/blog/ru/intlayer_with_next-i18next.md +5 -6
  74. package/blog/ru/intlayer_with_next-intl.md +3 -4
  75. package/blog/ru/intlayer_with_react-i18next.md +1 -1
  76. package/blog/ru/intlayer_with_react-intl.md +1 -1
  77. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  78. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  79. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  80. package/blog/zh/intlayer_with_next-i18next.md +5 -6
  81. package/blog/zh/intlayer_with_next-intl.md +3 -4
  82. package/blog/zh/intlayer_with_react-i18next.md +1 -1
  83. package/blog/zh/intlayer_with_react-intl.md +1 -1
  84. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  85. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  86. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  87. package/dist/cjs/generated/blog.entry.cjs +41 -0
  88. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  89. package/dist/cjs/generated/docs.entry.cjs +41 -0
  90. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  91. package/dist/esm/generated/blog.entry.mjs +41 -0
  92. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  93. package/dist/esm/generated/docs.entry.mjs +41 -0
  94. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  95. package/dist/types/generated/blog.entry.d.ts +1 -0
  96. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  97. package/dist/types/generated/docs.entry.d.ts +1 -0
  98. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  99. package/docs/ar/formatters.md +625 -0
  100. package/docs/ar/how_works_intlayer.md +2 -4
  101. package/docs/ar/interest_of_intlayer.md +159 -49
  102. package/docs/ar/intlayer_CMS.md +2 -3
  103. package/docs/ar/intlayer_visual_editor.md +2 -3
  104. package/docs/ar/intlayer_with_tanstack.md +1 -1
  105. package/docs/ar/introduction.md +7 -7
  106. package/docs/ar/packages/intlayer/index.md +3 -3
  107. package/docs/ar/packages/next-intlayer/index.md +3 -3
  108. package/docs/de/formatters.md +649 -0
  109. package/docs/de/interest_of_intlayer.md +161 -47
  110. package/docs/de/introduction.md +5 -5
  111. package/docs/de/packages/intlayer/index.md +3 -3
  112. package/docs/de/packages/next-intlayer/index.md +3 -3
  113. package/docs/de/packages/react-intlayer/index.md +3 -3
  114. package/docs/en/dictionary/enumeration.md +2 -2
  115. package/docs/en/dictionary/function_fetching.md +2 -2
  116. package/docs/en/dictionary/get_started.md +2 -2
  117. package/docs/en/dictionary/translation.md +2 -2
  118. package/docs/en/formatters.md +618 -0
  119. package/docs/en/how_works_intlayer.md +2 -4
  120. package/docs/en/interest_of_intlayer.md +170 -46
  121. package/docs/en/intlayer_CMS.md +2 -3
  122. package/docs/en/intlayer_visual_editor.md +2 -3
  123. package/docs/en/intlayer_with_create_react_app.md +2 -2
  124. package/docs/en/intlayer_with_express.md +2 -2
  125. package/docs/en/intlayer_with_tanstack.md +1 -1
  126. package/docs/en/introduction.md +7 -7
  127. package/docs/en/packages/express-intlayer/index.md +2 -2
  128. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  129. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  130. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  131. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  132. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  133. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  134. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  135. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  136. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  137. package/docs/en/packages/intlayer/index.md +5 -5
  138. package/docs/en/packages/next-intlayer/index.md +5 -5
  139. package/docs/en/packages/next-intlayer/t.md +2 -2
  140. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  141. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  142. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  143. package/docs/en/packages/react-intlayer/index.md +5 -5
  144. package/docs/en/packages/react-intlayer/t.md +2 -2
  145. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  146. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  147. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  148. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  149. package/docs/en/packages/solid-intlayer/index.md +2 -2
  150. package/docs/en/packages/vite-intlayer/index.md +2 -2
  151. package/docs/en-GB/formatters.md +625 -0
  152. package/docs/en-GB/how_works_intlayer.md +2 -4
  153. package/docs/en-GB/interest_of_intlayer.md +157 -53
  154. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  155. package/docs/en-GB/introduction.md +2 -2
  156. package/docs/en-GB/packages/intlayer/index.md +3 -3
  157. package/docs/en-GB/packages/next-intlayer/index.md +3 -3
  158. package/docs/en-GB/packages/react-intlayer/index.md +3 -3
  159. package/docs/es/formatters.md +649 -0
  160. package/docs/es/how_works_intlayer.md +2 -4
  161. package/docs/es/interest_of_intlayer.md +156 -47
  162. package/docs/es/intlayer_with_tanstack.md +1 -1
  163. package/docs/es/introduction.md +5 -5
  164. package/docs/es/packages/intlayer/index.md +3 -3
  165. package/docs/es/packages/next-intlayer/index.md +3 -3
  166. package/docs/fr/formatters.md +649 -0
  167. package/docs/fr/how_works_intlayer.md +2 -4
  168. package/docs/fr/interest_of_intlayer.md +157 -46
  169. package/docs/fr/intlayer_with_tanstack.md +1 -1
  170. package/docs/fr/introduction.md +5 -5
  171. package/docs/fr/packages/intlayer/index.md +3 -3
  172. package/docs/fr/packages/next-intlayer/index.md +3 -3
  173. package/docs/fr/packages/react-intlayer/index.md +3 -3
  174. package/docs/hi/formatters.md +630 -0
  175. package/docs/hi/how_works_intlayer.md +2 -4
  176. package/docs/hi/interest_of_intlayer.md +155 -42
  177. package/docs/hi/intlayer_with_tanstack.md +1 -1
  178. package/docs/hi/introduction.md +5 -5
  179. package/docs/hi/packages/intlayer/index.md +3 -3
  180. package/docs/hi/packages/next-intlayer/index.md +3 -3
  181. package/docs/hi/packages/react-intlayer/index.md +3 -3
  182. package/docs/it/formatters.md +647 -0
  183. package/docs/it/how_works_intlayer.md +2 -4
  184. package/docs/it/interest_of_intlayer.md +157 -46
  185. package/docs/it/intlayer_with_tanstack.md +1 -1
  186. package/docs/it/introduction.md +5 -5
  187. package/docs/it/packages/intlayer/index.md +3 -3
  188. package/docs/it/packages/next-intlayer/index.md +3 -3
  189. package/docs/it/packages/react-intlayer/index.md +3 -3
  190. package/docs/ja/formatters.md +649 -0
  191. package/docs/ja/how_works_intlayer.md +2 -4
  192. package/docs/ja/interest_of_intlayer.md +154 -48
  193. package/docs/ja/intlayer_with_tanstack.md +1 -1
  194. package/docs/ja/introduction.md +5 -5
  195. package/docs/ja/packages/intlayer/index.md +3 -3
  196. package/docs/ja/packages/next-intlayer/index.md +3 -3
  197. package/docs/ja/packages/react-intlayer/index.md +3 -3
  198. package/docs/ko/formatters.md +649 -0
  199. package/docs/ko/how_works_intlayer.md +2 -4
  200. package/docs/ko/interest_of_intlayer.md +157 -48
  201. package/docs/ko/intlayer_with_tanstack.md +1 -1
  202. package/docs/ko/introduction.md +5 -5
  203. package/docs/ko/packages/intlayer/index.md +3 -3
  204. package/docs/ko/packages/next-intlayer/index.md +3 -3
  205. package/docs/ko/packages/react-intlayer/index.md +3 -3
  206. package/docs/pt/formatters.md +625 -0
  207. package/docs/pt/how_works_intlayer.md +2 -4
  208. package/docs/pt/interest_of_intlayer.md +162 -47
  209. package/docs/pt/intlayer_with_tanstack.md +1 -1
  210. package/docs/pt/introduction.md +5 -5
  211. package/docs/pt/packages/intlayer/index.md +3 -3
  212. package/docs/pt/packages/next-intlayer/index.md +3 -3
  213. package/docs/pt/packages/react-intlayer/index.md +3 -3
  214. package/docs/ru/autoFill.md +2 -2
  215. package/docs/ru/configuration.md +1 -40
  216. package/docs/ru/formatters.md +649 -0
  217. package/docs/ru/how_works_intlayer.md +5 -7
  218. package/docs/ru/index.md +1 -1
  219. package/docs/ru/interest_of_intlayer.md +165 -50
  220. package/docs/ru/intlayer_CMS.md +7 -8
  221. package/docs/ru/intlayer_cli.md +4 -7
  222. package/docs/ru/intlayer_visual_editor.md +5 -6
  223. package/docs/ru/intlayer_with_angular.md +1 -1
  224. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  225. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  226. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  227. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  228. package/docs/ru/intlayer_with_nuxt.md +1 -1
  229. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  230. package/docs/ru/intlayer_with_tanstack.md +3 -3
  231. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  232. package/docs/ru/intlayer_with_vite+react.md +3 -3
  233. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  234. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  235. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  236. package/docs/ru/introduction.md +8 -8
  237. package/docs/ru/locale_mapper.md +1 -1
  238. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  239. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  240. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  241. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  242. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  243. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  244. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  245. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  246. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  247. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  248. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  249. package/docs/ru/packages/express-intlayer/index.md +3 -3
  250. package/docs/ru/packages/express-intlayer/t.md +1 -1
  251. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  252. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  253. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  254. package/docs/ru/packages/intlayer/index.md +6 -6
  255. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  256. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  257. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  258. package/docs/ru/packages/next-intlayer/index.md +7 -7
  259. package/docs/ru/packages/next-intlayer/t.md +4 -4
  260. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  261. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  262. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  263. package/docs/ru/packages/react-intlayer/index.md +7 -7
  264. package/docs/ru/packages/react-intlayer/t.md +4 -4
  265. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  266. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  267. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  268. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  269. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  270. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  271. package/docs/ru/per_locale_file.md +1 -1
  272. package/docs/ru/roadmap.md +3 -5
  273. package/docs/ru/vs_code_extension.md +1 -1
  274. package/docs/zh/formatters.md +647 -0
  275. package/docs/zh/how_works_intlayer.md +2 -4
  276. package/docs/zh/interest_of_intlayer.md +155 -48
  277. package/docs/zh/intlayer_with_tanstack.md +1 -1
  278. package/docs/zh/introduction.md +5 -5
  279. package/docs/zh/packages/intlayer/index.md +3 -3
  280. package/docs/zh/packages/next-intlayer/index.md +3 -3
  281. package/docs/zh/packages/react-intlayer/index.md +3 -3
  282. package/frequent_questions/ar/domain_routing.md +1 -1
  283. package/frequent_questions/en/domain_routing.md +1 -1
  284. package/frequent_questions/en-GB/domain_routing.md +1 -1
  285. package/frequent_questions/es/domain_routing.md +1 -1
  286. package/frequent_questions/fr/domain_routing.md +1 -1
  287. package/frequent_questions/hi/domain_routing.md +1 -1
  288. package/frequent_questions/it/domain_routing.md +1 -1
  289. package/frequent_questions/ko/domain_routing.md +1 -1
  290. package/frequent_questions/pt/domain_routing.md +1 -1
  291. package/frequent_questions/ru/domain_routing.md +1 -1
  292. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  293. package/frequent_questions/ru/static_rendering.md +1 -2
  294. package/frequent_questions/zh/domain_routing.md +1 -1
  295. package/package.json +11 -11
  296. package/src/generated/blog.entry.ts +41 -0
  297. package/src/generated/docs.entry.ts +41 -0
@@ -0,0 +1,268 @@
1
+ ---
2
+ createdAt: 2024-08-11
3
+ updatedAt: 2025-08-23
4
+ title: vue-i18n против Intlayer
5
+ description: Сравнение vue-i18n и Intlayer для интернационализации (i18n) в приложениях Vue/Nuxt
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - Интернационализация
10
+ - i18n
11
+ - Блог
12
+ - Vue
13
+ - Nuxt
14
+ - JavaScript
15
+ slugs:
16
+ - blog
17
+ - vue-i18n-vs-intlayer
18
+ ---
19
+
20
+ # vue-i18n ПРОТИВ Intlayer | Интернационализация Vue (i18n)
21
+
22
+ Это руководство сравнивает два популярных варианта i18n для **Vue 3** (и **Nuxt**): **vue-i18n** и **Intlayer**.
23
+ Мы сосредотачиваемся на современном инструментировании Vue (Vite, Composition API) и оцениваем:
24
+
25
+ 1. **Архитектуру и организацию контента**
26
+ 2. **TypeScript и безопасность**
27
+ 3. **Обработку отсутствующих переводов**
28
+ 4. **Маршрутизацию и стратегию URL**
29
+ 5. **Производительность и поведение загрузки**
30
+ 6. **Опыт разработчика (DX), инструменты и сопровождение**
31
+ 7. **SEO и масштабируемость для крупных проектов**
32
+
33
+ > **кратко**: Оба решения могут локализовать приложения Vue. Если вам нужен **контент, ограниченный компонентом**, **строгие типы TypeScript**, **проверка отсутствующих ключей во время сборки**, **деревья сжатые словари**, а также **встроенные помощники для маршрутизации и SEO** плюс **Визуальный редактор и AI-переводы**, то **Intlayer** - более полный и современный выбор.
34
+
35
+ ---
36
+
37
+ ## Общее позиционирование
38
+
39
+ - **vue-i18n** - де-факто библиотека i18n для Vue. Гибкое форматирование сообщений (стиль ICU), блоки SFC `<i18n>` для локальных сообщений и большая экосистема. Безопасность и масштабное сопровождение в основном на вашей стороне.
40
+ - **Intlayer** - компонентно-ориентированная модель контента для Vue/Vite/Nuxt с **строгой типизацией TS**, **проверками во время сборки**, **деревьями сжатия**, **помощниками для маршрутизации и SEO**, опциональным **Визуальным редактором/CMS** и **AI-поддержкой переводов**.
41
+
42
+ ---
43
+
44
+ ## Сравнение функций бок о бок (с фокусом на Vue)
45
+
46
+ | Функция | **Intlayer** | **vue-i18n** |
47
+ | --------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
48
+ | **Переводы рядом с компонентами** | ✅ Да, контент расположен рядом с компонентом (например, `MyComp.content.ts`) | ✅ Да, через SFC-блоки `<i18n>` (опционально) |
49
+ | **Интеграция с TypeScript** | ✅ Продвинутая, автоматически сгенерированные **строгие** типы и автозаполнение ключей | ✅ Хорошая типизация; **строгая безопасность ключей требует дополнительной настройки/дисциплины** |
50
+ | **Обнаружение отсутствующих переводов** | ✅ Предупреждения/ошибки во время сборки и отображение в TS | ⚠️ Запасные варианты и предупреждения во время выполнения |
51
+ | **Богатый контент (компоненты/Markdown)** | ✅ Прямая поддержка сложных узлов и файлов с содержимым Markdown | ⚠️ Ограничено (компоненты через `<i18n-t>`, Markdown через внешние плагины) |
52
+ | **Перевод с использованием ИИ** | ✅ Встроенные рабочие процессы с использованием ваших ключей провайдера ИИ | ❌ Не встроено |
53
+ | **Визуальный редактор / CMS** | ✅ Бесплатный визуальный редактор и опциональная CMS | ❌ Не встроено (используйте внешние платформы) |
54
+ | **Локализованная маршрутизация** | ✅ Хелперы для Vue Router/Nuxt для генерации локализованных путей, URL и `hreflang` | ⚠️ Не является ядром (используйте Nuxt i18n или кастомную настройку Vue Router) |
55
+ | **Динамическая генерация маршрутов** | ✅ Да | ❌ Не предоставляется (предоставляется Nuxt i18n) |
56
+ | **Плюрализация и форматирование** | ✅ Шаблоны перечислений; форматтеры на основе Intl | ✅ Сообщения в стиле ICU; форматтеры Intl |
57
+ | **Форматы контента** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML в разработке) | ✅ `.json`, `.js` (плюс SFC-блоки `<i18n>`) |
58
+ | **Поддержка ICU** | ⚠️ В разработке | ✅ Да |
59
+ | **SEO-хелперы (sitemap, robots, метаданные)** | ✅ Встроенные хелперы (независимые от фреймворка) | ❌ Не является ядром (Nuxt i18n/сообщество) |
60
+ | **SSR/SSG** | ✅ Работает с Vue SSR и Nuxt; не блокирует статическую генерацию | ✅ Работает с Vue SSR/Nuxt |
61
+ | **Tree-shaking (отгрузка только используемого контента)** | ✅ По компонентам во время сборки | ⚠️ Частично; требует ручного разделения кода/асинхронных сообщений |
62
+ | **Ленивая загрузка** | ✅ По локалям / по словарям | ✅ Поддержка асинхронных сообщений локалей |
63
+ | **Удаление неиспользуемого контента** | ✅ Да (во время сборки) | ❌ Не встроено |
64
+ | **Поддерживаемость крупных проектов** | ✅ Поощряет модульную структуру, удобную для дизайн-систем | ✅ Возможно, но требует строгой дисциплины в работе с файлами/пространствами имён |
65
+ | **Экосистема / сообщество** | ⚠️ Меньше, но быстро растёт | ✅ Большое и зрелое в экосистеме Vue |
66
+
67
+ ---
68
+
69
+ ## Глубокое сравнение
70
+
71
+ ### 1) Архитектура и масштабируемость
72
+
73
+ - **vue-i18n**: Обычно используется **централизованные каталоги** для каждой локали (опционально разделённые на файлы/пространства имён). Блоки SFC `<i18n>` позволяют использовать локальные сообщения, но по мере роста проектов команды часто возвращаются к общим каталогам.
74
+ - **Intlayer**: Продвигает использование **словарей для каждого компонента**, хранящихся рядом с самим компонентом. Это снижает конфликты между командами, облегчает поиск контента и естественным образом ограничивает расхождение и неиспользуемые ключи.
75
+
76
+ **Почему это важно:** В больших Vue-приложениях или дизайн-системах **модульный контент** масштабируется лучше, чем монолитные каталоги.
77
+
78
+ ---
79
+
80
+ ### 2) TypeScript и безопасность
81
+
82
+ - **vue-i18n**: Хорошая поддержка TS; для **строгой типизации ключей** обычно требуются пользовательские схемы/дженерики и тщательные соглашения.
83
+ - **Intlayer**: **Генерирует строгие типы** из вашего контента, обеспечивая **автодополнение в IDE** и **ошибки на этапе компиляции** для опечаток/отсутствующих ключей.
84
+
85
+ **Почему это важно:** Строгая типизация выявляет ошибки **до** выполнения программы.
86
+
87
+ ---
88
+
89
+ ### 3) Обработка отсутствующих переводов
90
+
91
+ - **vue-i18n**: **Время выполнения** - предупреждения/запасные варианты (например, fallback локаль или ключ).
92
+ - **Intlayer**: **Время сборки** - обнаружение с предупреждениями/ошибками по локалям и ключам.
93
+
94
+ **Почему это важно:** Контроль на этапе сборки поддерживает чистый и согласованный UI в продакшене.
95
+
96
+ ---
97
+
98
+ ### 4) Маршрутизация и стратегия URL (Vue Router/Nuxt)
99
+
100
+ - **Обе** системы могут работать с локализованными маршрутами.
101
+ - **Intlayer** предоставляет помощники для **генерации локализованных путей**, **управления префиксами локалей** и генерации **`<link rel="alternate" hreflang>`** для SEO. В Nuxt он дополняет маршрутизацию фреймворка.
102
+
103
+ **Почему это важно:** Меньше пользовательских прослоек и **чище SEO** для разных локалей.
104
+
105
+ ---
106
+
107
+ ### 5) Производительность и поведение загрузки
108
+
109
+ - **vue-i18n**: Поддерживает асинхронные сообщения локалей; избегать избыточного объединения бандлов - ваша задача (аккуратно разделяйте каталоги).
110
+ - **Intlayer**: Выполняет **tree-shaking** на этапе сборки и **ленивую загрузку по словарю/локали**. Неиспользуемый контент не включается в сборку.
111
+
112
+ **Почему это важно:** Меньшие бандлы и более быстрая загрузка для многоязычных Vue-приложений.
113
+
114
+ ---
115
+
116
+ ### 6) Опыт разработчика и инструменты
117
+
118
+ - **vue-i18n**: Зрелая документация и сообщество; обычно вы будете полагаться на **внешние платформы локализации** для редакционных процессов.
119
+ - **Intlayer**: В комплекте **бесплатный визуальный редактор**, опциональная **CMS** (дружелюбная к Git или внешняя), расширение для **VSCode**, утилиты **CLI/CI** и **переводы с помощью ИИ** с использованием ваших собственных ключей провайдера.
120
+
121
+ **Почему это важно:** Меньше затрат на эксплуатацию и более короткий цикл разработка–контент.
122
+
123
+ ---
124
+
125
+ ### 7) SEO, SSR и SSG
126
+
127
+ - **Обе** работают с Vue SSR и Nuxt.
128
+ - **Intlayer**: Добавляет **SEO помощники** (карты сайта/метаданные/`hreflang`), которые не зависят от фреймворка и хорошо интегрируются с Vue/Nuxt сборками.
129
+
130
+ **Почему это важно:** Международное SEO без сложных настроек.
131
+
132
+ ---
133
+
134
+ ## Почему Intlayer? (Проблема и подход)
135
+
136
+ Большинство i18n стеков (включая **vue-i18n**) начинают с **централизованных каталогов**:
137
+
138
+ ```bash
139
+ .
140
+ ├── locales
141
+ │ ├── en.json
142
+ │ ├── es.json
143
+ │ └── fr.json
144
+ └── src
145
+ └── components
146
+ └── MyComponent.vue
147
+ ```
148
+
149
+ Или с папками для каждого языка:
150
+
151
+ ```bash
152
+ .
153
+ ├── locales
154
+ │ ├── en
155
+ │ │ ├── footer.json
156
+ │ │ └── navbar.json
157
+ │ ├── fr
158
+ │ │ ├── footer.json
159
+ │ │ └── navbar.json
160
+ │ └── es
161
+ │ ├── footer.json
162
+ │ └── navbar.json
163
+ └── src
164
+ └── components
165
+ └── MyComponent.vue
166
+ ```
167
+
168
+ Это часто замедляет разработку по мере роста приложений:
169
+
170
+ 1. **Для нового компонента** вы создаёте/редактируете удалённые каталоги, настраиваете пространства имён и переводите (часто вручную копируя/вставляя из AI-инструментов).
171
+ 2. **При изменении компонентов** вы ищете общие ключи, переводите, синхронизируете локали, удаляете неиспользуемые ключи и выравниваете структуры JSON.
172
+
173
+ **Intlayer** ограничивает область видимости контента **на уровне компонента** и хранит его **рядом с кодом**, как мы уже делаем с CSS, историями, тестами и документацией:
174
+
175
+ ```bash
176
+ .
177
+ └── components
178
+ └── MyComponent
179
+ ├── MyComponent.content.ts
180
+ └── MyComponent.vue
181
+ ```
182
+
183
+ **Объявление контента** (на компонент):
184
+
185
+ ```ts fileName="./components/MyComponent/MyComponent.content.ts"
186
+ import { t, type Dictionary } from "intlayer";
187
+
188
+ const componentExampleContent = {
189
+ key: "component-example",
190
+ content: {
191
+ greeting: t({
192
+ en: "Hello World",
193
+ es: "Hola Mundo",
194
+ fr: "Bonjour le monde",
195
+ }),
196
+ },
197
+ } satisfies Dictionary;
198
+
199
+ export default componentExampleContent;
200
+ ```
201
+
202
+ **Использование во Vue** (Composition API):
203
+
204
+ ```vue fileName="./components/MyComponent/MyComponent.vue"
205
+ <script setup lang="ts">
206
+ import { useIntlayer } from "vue-intlayer"; // Интеграция с Vue
207
+ const { greeting } = useIntlayer("component-example");
208
+ </script>
209
+
210
+ <template>
211
+ <span>{{ greeting }}</span>
212
+ </template>
213
+ ```
214
+
215
+ Этот подход:
216
+
217
+ - **Ускоряет разработку** (объявляйте один раз; автозаполнение в IDE/ИИ).
218
+ - **Очищает кодовую базу** (1 компонент = 1 словарь).
219
+ - **Облегчает дублирование/миграцию** (копируйте компонент вместе с его содержимым).
220
+ - **Избегает "мертвых" ключей** (неиспользуемые компоненты не импортируют содержимое).
221
+ - **Оптимизирует загрузку** (лениво загружаемые компоненты приносят с собой своё содержимое).
222
+
223
+ ---
224
+
225
+ ## Дополнительные возможности Intlayer (актуально для Vue)
226
+
227
+ - **Поддержка нескольких фреймворков**: работает с Vue, Nuxt, Vite, React, Express и другими.
228
+ - **Управление содержимым на базе JavaScript**: объявляйте в коде с полной гибкостью.
229
+ - **Файл декларации для каждого локаля**: Задайте все локали и позвольте инструментам сгенерировать остальное.
230
+ - **Типобезопасная среда**: Сильная конфигурация TypeScript с автодополнением.
231
+ - **Упрощённый доступ к контенту**: Один хук/композабл для получения всего контента словаря.
232
+ - **Организованная кодовая база**: 1 компонент = 1 словарь в одной папке.
233
+ - **Расширенная маршрутизация**: Хелперы для локализованных путей и метаданных **Vue Router/Nuxt**.
234
+ - **Поддержка Markdown**: Импорт удалённого/локального Markdown по локалям; доступ к frontmatter из кода.
235
+ - **Бесплатный визуальный редактор и опциональная CMS**: Создание контента без платной платформы локализации; синхронизация, удобная для Git.
236
+ - **Контент с поддержкой tree-shaking**: Поставляется только используемый контент; поддержка ленивой загрузки.
237
+ - **Дружелюбность к статической генерации**: Не блокирует SSG.
238
+ - **Переводы с поддержкой ИИ**: Переводите на 231 язык, используя собственного провайдера ИИ/ключ API.
239
+ - **Сервер MCP и расширение VSCode**: Автоматизируйте рабочие процессы i18n и создание контента прямо в вашей IDE.
240
+ - **Взаимодействие**: Интеграция с **vue-i18n**, **react-i18next** и **react-intl** при необходимости.
241
+
242
+ ---
243
+
244
+ ## Когда что выбирать?
245
+
246
+ - **Выбирайте vue-i18n**, если хотите использовать **стандартный подход Vue**, вам удобно самостоятельно управлять каталогами/пространствами имён, и ваше приложение **маленькое или среднего размера** (или вы уже используете Nuxt i18n).
247
+ - **Выбирайте Intlayer**, если для вас важны **контент, ограниченный компонентом**, **строгий TypeScript**, **гарантии на этапе сборки**, **tree-shaking** и **встроенные инструменты маршрутизации/SEO/редактирования** - особенно для **больших, модульных кодовых баз Vue/Nuxt**.
248
+
249
+ ---
250
+
251
+ ## Практические заметки по миграции (vue-i18n → Intlayer)
252
+
253
+ - **Начинайте по функциям**: Переносите по одному маршруту/виду/компоненту за раз в локальные словари Intlayer.
254
+ - **Промежуточный мост во время миграции**: Сохраняйте каталоги vue-i18n параллельно; постепенно заменяйте обращения к переводам.
255
+ - **Включайте строгие проверки**: Позвольте обнаружению на этапе сборки выявлять отсутствующие ключи/локали на раннем этапе.
256
+ - **Используйте помощники для роутера/SEO**: Стандартизируйте определение локали и теги `hreflang`.
257
+ - **Измеряйте размеры бандлов**: Ожидайте **снижения размера бандла** за счёт исключения неиспользуемого контента.
258
+
259
+ ---
260
+
261
+ ## Заключение
262
+
263
+ И **vue-i18n**, и **Intlayer** хорошо локализуют Vue-приложения. Разница в том, **сколько вам нужно построить самостоятельно**, чтобы получить надёжную и масштабируемую систему:
264
+
265
+ - С **Intlayer** вы получаете **модульный контент**, **строгую типизацию TS**, **безопасность на этапе сборки**, **оптимизированные бандлы с tree-shaking**, а также **инструменты для роутера, SEO и редактора** прямо «из коробки».
266
+ - Если ваша команда ставит в приоритет **поддерживаемость и скорость** в многоязычном приложении на Vue/Nuxt с компонентной архитектурой, Intlayer предлагает сегодня **самый полный** опыт.
267
+
268
+ Обратитесь к документу ['Почему Intlayer?'](https://intlayer.org/doc/why) для получения дополнительной информации.
@@ -1,6 +1,6 @@
1
1
  ---
2
- createdAt: 2024-08-11
3
- updatedAt: 2025-06-29
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-08-23
4
4
  title: Intlayer和next-i18next
5
5
  description: 与Next.js应用程序的next-i18next集成Intlayer
6
6
  keywords:
@@ -24,7 +24,6 @@ both next-i18next 和 Intlayer 是为 Next.js 应用程序设计的开源国际
24
24
  这两种解决方案包括三个主要概念:
25
25
 
26
26
  1. **内容声明**:定义应用程序可翻译内容的方法。
27
-
28
27
  - 在 `i18next` 的情况下称为 `resource`,内容声明是一个结构化的 JSON 对象,包含一种或多种语言翻译的键值对。有关更多信息,请参阅 [i18next 文档](https://www.i18next.com/translation-function/essentials)。
29
28
  - 在 `Intlayer` 的情况下称为 `content declaration file`,内容声明可以是导出结构化数据的 JSON、JS 或 TS 文件。有关更多信息,请参阅 [Intlayer 文档](https://intlayer.org/fr/doc/concept/content)。
30
29
 
@@ -213,8 +212,8 @@ const content = {
213
212
  content: {
214
213
  myTranslatedContent: t({
215
214
  en: "Hello World",
216
- fr: "Bonjour le monde",
217
215
  es: "Hola Mundo",
216
+ fr: "Bonjour le monde",
218
217
  }),
219
218
  },
220
219
  } satisfies Dictionary;
@@ -231,8 +230,8 @@ const content = {
231
230
  content: {
232
231
  myTranslatedContent: t({
233
232
  en: "Hello World",
234
- fr: "Bonjour le monde",
235
233
  es: "Hola Mundo",
234
+ fr: "Bonjour le monde",
236
235
  }),
237
236
  },
238
237
  };
@@ -246,8 +245,8 @@ module.exports = {
246
245
  content: {
247
246
  myTranslatedContent: t({
248
247
  en: "Hello World",
249
- fr: "Bonjour le monde",
250
248
  es: "Hola Mundo",
249
+ fr: "Bonjour le monde",
251
250
  }),
252
251
  },
253
252
  };
@@ -23,7 +23,6 @@ next-intl 和 Intlayer 是为 Next.js 应用程序设计的开源国际化 (i18n
23
23
  它们共享三个主要概念:
24
24
 
25
25
  1. **内容声明**: 定义应用程序可翻译内容的方法。
26
-
27
26
  - 在 Intlayer 中称为 `content declaration file`,可以是导出结构化数据的 JSON、JS 或 TS 文件。有关更多信息,请参见 [Intlayer 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/concept/content.md)。
28
27
  - 在 next-intl 中称为 `messages` 或 `locale messages`,通常在 JSON 文件中。有关更多信息,请参见 [next-intl 文档](https://github.com/amannn/next-intl/blob/main/docs/zh/introduction.md)。
29
28
 
@@ -170,8 +169,8 @@ const content = {
170
169
  content: {
171
170
  helloWorld: t({
172
171
  en: "Hello World",
173
- fr: "Bonjour le monde",
174
172
  es: "Hola Mundo",
173
+ fr: "Bonjour le monde",
175
174
  }),
176
175
  },
177
176
  } satisfies Dictionary;
@@ -188,8 +187,8 @@ const content = {
188
187
  content: {
189
188
  helloWorld: t({
190
189
  en: "Hello World",
191
- fr: "Bonjour le monde",
192
190
  es: "Hola Mundo",
191
+ fr: "Bonjour le monde",
193
192
  }),
194
193
  },
195
194
  };
@@ -205,8 +204,8 @@ module.exports = {
205
204
  content: {
206
205
  helloWorld: t({
207
206
  en: "Hello World",
208
- fr: "Bonjour le monde",
209
207
  es: "Hola Mundo",
208
+ fr: "Bonjour le monde",
210
209
  }),
211
210
  },
212
211
  };
@@ -247,8 +247,8 @@ const content = {
247
247
  // 每个“t”调用是一个单独的翻译节点
248
248
  heading: t({
249
249
  en: "Hello World",
250
- fr: "Bonjour le monde",
251
250
  es: "Hola Mundo",
251
+ fr: "Bonjour le monde",
252
252
  }),
253
253
  description: t({
254
254
  en: "My i18n description text...",
@@ -118,8 +118,8 @@ const content = {
118
118
  // 每次调用 t() 声明一个可翻译的字段
119
119
  helloWorld: t({
120
120
  en: "Hello World",
121
- fr: "Bonjour le monde",
122
121
  es: "Hola Mundo",
122
+ fr: "Bonjour le monde",
123
123
  }),
124
124
  description: t({
125
125
  en: "This is a description",