@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
@@ -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: Integre o react-i18next com o next-intl e Intlayer para a internacionalização (i18n) de um aplicativo React
4
+ title: react-i18next vs react-intl vs Intlayer
5
+ description: Integre react-i18next com next-intl e Intlayer para a internacionalização (i18n) de uma aplicação React
6
6
  keywords:
7
7
  - next-intl
8
8
  - react-i18next
9
9
  - Intlayer
10
10
  - Internacionalização
11
- - Blogumentação
11
+ - Blog
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 Internationalization (i18n)
20
+ # react-Intl VS react-i18next VS intlayer | Internacionalização (i18n) em React
21
21
 
22
- Abaixo está uma comparação concisa de três bibliotecas populares de i18n (internacionalização) para React: **React-Intl**, **React-i18next** e **Intlayer**. Cada biblioteca oferece recursos e fluxos de trabalho exclusivos para integrar suporte multilíngue em sua aplicação React. Após ler isso, você deve ser capaz de decidir qual solução atende melhor às suas necessidades.
22
+ Este guia compara três opções consolidadas de i18n para **React**: **react-intl** (FormatJS), **react-i18next** (i18next) e **Intlayer**.
23
+ Focamos em aplicações **React puras** (ex.: Vite, CRA, SPA). Se você usa Next.js, veja nossa comparação dedicada para Next.js.
23
24
 
24
- ---
25
-
26
- ## 1. Introdução
27
-
28
- A internacionalização (i18n) em aplicações React pode ser alcançada de várias maneiras. As três bibliotecas apresentadas aqui têm diferentes filosofias de design, conjuntos de recursos e suporte da comunidade:
25
+ Nós avaliamos:
29
26
 
30
- 1. **React-Intl**
31
- 2. **React-i18next**
32
- 3. **Intlayer**
27
+ - Arquitetura e organização de conteúdo
28
+ - TypeScript e segurança
29
+ - Tratamento de traduções ausentes
30
+ - Conteúdo rico e capacidades de formatação
31
+ - Desempenho e comportamento de carregamento
32
+ - Experiência do desenvolvedor (DX), ferramentas e manutenção
33
+ - SEO/roteamento (dependente do framework)
33
34
 
34
- Abaixo, você encontrará uma visão geral de cada solução, seguida de uma comparação de recursos, prós e contras, e exemplos de casos de uso.
35
+ > **resumo**: Todos os três podem localizar uma aplicação React. Se você deseja **conteúdo com escopo por componente**, **tipagem TypeScript rigorosa**, **verificações de chaves ausentes em tempo de build**, **dicionários otimizados por tree-shaking** e ferramentas editoriais integradas (Editor Visual/CMS + tradução assistida por IA opcional), **Intlayer** é a escolha mais completa para bases de código React modulares.
35
36
 
36
37
  ---
37
38
 
38
- ## 2. React-Intl
39
-
40
- ### Visão Geral
41
-
42
- [**React-Intl**](https://formatjs.io/docs/react-intl/) é parte da [FormatJS](https://formatjs.io/) suite. Ele fornece um conjunto poderoso de **APIs e componentes** para lidar com formatação de mensagens, pluralização, data/hora e formatação de números. O React-Intl é amplamente utilizado em aplicações corporativas, principalmente porque faz parte de um ecossistema que padroniza a sintaxe e a formatação das mensagens.
43
-
44
- ### Principais Recursos
45
-
46
- - **Sintaxe de Mensagem ICU**: Oferece uma sintaxe abrangente para interpolação de mensagens, pluralização e muito mais.
47
- - **Formatação Localizada**: Utilitários embutidos para formatar datas, horas, números e tempos relativos com base na localidade.
48
- - **Componentes Declarativos**: Expõe `<FormattedMessage>`, `<FormattedNumber>`, `<FormattedDate>`, etc., para uso sem costura em JSX.
49
- - **Ecossistema Rico**: Integra-se bem com as ferramentas FormatJS (por exemplo, [babel-plugin-react-intl](https://formatjs.io/docs/tooling/babel-plugin/) para extrair, gerenciar e compilar mensagens.
50
-
51
- ### Fluxo de Trabalho Típico
52
-
53
- 1. **Defina catálogos de mensagens** (geralmente arquivos JSON por localidade).
54
- 2. **Envolva seu aplicativo** em `<IntlProvider locale="pt" messages={messages}>`.
55
- 3. **Use** `<FormattedMessage id="myMessage" defaultMessage="Hello world" />` ou o hook `useIntl()` para acessar strings de tradução.
56
-
57
- ### Prós
58
-
59
- - Bem estabelecido e usado em muitos ambientes de produção.
60
- - Formatação avançada de mensagens, incluindo pluralização, gênero, fusos horários e mais.
61
- - Forte suporte de ferramentas para extração e compilação de mensagens.
62
-
63
- ### Contras
39
+ ## Posicionamento de alto nível
64
40
 
65
- - Requer familiaridade com o **formato de mensagem ICU**, que pode ser verboso.
66
- - Não é tão simples lidar com traduções dinâmicas ou complexas que são mais do que apenas baseadas em strings.
41
+ - **react-intl** - Formatação alinhada a padrões e centrada em ICU (datas/números/plurais) com uma API madura. Os catálogos são tipicamente centralizados; a segurança das chaves e a validação em tempo de build ficam majoritariamente a seu cargo.
42
+ - **react-i18next** - Extremamente popular e flexível; namespaces, detectores e muitos plugins (ICU, backends). Poderoso, mas a configuração pode se expandir conforme os projetos crescem.
43
+ - **Intlayer** - Modelo de conteúdo centrado em componentes para React, **tipagem TS rigorosa**, **verificações em tempo de build**, **tree-shaking**, além de **Editor Visual/CMS** e **traduções assistidas por IA**. Funciona com React Router, Vite, CRA, etc.
67
44
 
68
45
  ---
69
46
 
70
- ## 3. React-i18next
47
+ ## Matriz de funcionalidades (foco em React)
48
+
49
+ | Recurso | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
50
+ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
51
+ | **Traduções Próximas aos Componentes** | ✅ Sim, conteúdo localizado junto a cada componente | ❌ Não | ❌ Não |
52
+ | **Integração com TypeScript** | ✅ Avançada, tipos estritos gerados automaticamente | ⚠️ Básica; configuração extra para segurança | ✅ Boa, mas menos estrita |
53
+ | **Detecção de Tradução Ausente** | ✅ Destaque de erro no TypeScript e erro/aviso em tempo de compilação | ⚠️ Principalmente strings de fallback em tempo de execução | ⚠️ Strings de fallback |
54
+ | **Conteúdo Rico (JSX/Markdown/componentes)** | ✅ Suporte direto | ⚠️ Limitado / apenas interpolação | ⚠️ Sintaxe ICU, não é JSX real |
55
+ | **Tradução com IA** | ✅ Sim, suporta múltiplos provedores de IA. Usável com suas próprias chaves de API. Considera o contexto da sua aplicação e o escopo do conteúdo | ❌ Não | ❌ Não |
56
+ | **Editor Visual** | ✅ Sim, Editor Visual local + CMS opcional; pode externalizar conteúdo da base de código; incorporável | ❌ Não / disponível via plataformas externas de localização | ❌ Não / disponível via plataformas externas de localização |
57
+ | **Roteamento Localizado** | ✅ Sim, suporta caminhos localizados nativamente (funciona com Next.js & Vite) | ⚠️ Não embutido, requer plugins (ex: `next-i18next`) ou configuração personalizada do roteador | ❌ Não, apenas formatação de mensagens, roteamento deve ser manual |
58
+ | **Geração Dinâmica de Rotas** | ✅ Sim | ⚠️ Plugin/ecossistema ou configuração manual | ❌ Não fornecido |
59
+ | **Pluralização** | ✅ Padrões baseados em enumeração | ✅ Configurável (plugins como i18next-icu) | ✅ (ICU) |
60
+ | **Formatação (datas, números, moedas)** | ✅ Formatadores otimizados (Intl por baixo dos panos) | ⚠️ Via plugins ou uso customizado do Intl | ✅ Formatadores ICU |
61
+ | **Formato de Conteúdo** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml em desenvolvimento) | ⚠️ .json | ✅ .json, .js |
62
+ | **Suporte ICU** | ⚠️ Em desenvolvimento | ⚠️ Via plugin (i18next-icu) | ✅ Sim |
63
+ | **Ajuda para SEO (hreflang, sitemap)** | ✅ Ferramentas integradas: auxiliares para sitemap, robots.txt, metadados | ⚠️ Plugins da comunidade/manual | ❌ Não faz parte do núcleo |
64
+ | **Ecossistema / Comunidade** | ⚠️ Menor, mas crescendo rápido e reativa | ✅ Maior e madura | ✅ Grande |
65
+ | **Renderização do lado servidor & Componentes do Servidor** | ✅ Sim, otimizado para SSR / Componentes do Servidor React | ⚠️ Suportado a nível de página, mas é necessário passar funções t na árvore de componentes para componentes filhos do servidor | ❌ Não suportado, é necessário passar funções t na árvore de componentes para componentes filhos do servidor |
66
+ | **Tree-shaking (carregar apenas o conteúdo usado)** | ✅ Sim, por componente no momento da build via plugins Babel/SWC | ⚠️ Normalmente carrega tudo (pode ser melhorado com namespaces/divisão de código) | ⚠️ Normalmente carrega tudo |
67
+ | **Carregamento preguiçoso (Lazy loading)** | ✅ Sim, por localidade / por dicionário | ✅ Sim (ex.: backends/namespaces sob demanda) | ✅ Sim (divisão dos pacotes por localidade) |
68
+ | **Remoção de conteúdo não utilizado** | ✅ Sim, por dicionário em tempo de build | ❌ Não, apenas via segmentação manual por namespace | ❌ Não, todas as mensagens declaradas são empacotadas |
69
+ | **Gestão de Grandes Projetos** | ✅ Incentiva modularidade, adequado para sistemas de design | ⚠️ Requer boa disciplina de arquivos | ⚠️ Catálogos centrais podem ficar grandes |
71
70
 
72
- ### Visão Geral
73
-
74
- [**React-i18next**](https://react.i18next.com/) é uma extensão React de [i18next](https://www.i18next.com/), um dos frameworks de i18n JavaScript mais populares. Ele oferece **recursos extensos** para traduções em tempo de execução, carregamento preguiçoso e detecção de idioma, tornando-o extremamente flexível para uma ampla variedade de casos de uso.
75
-
76
- ### Principais Recursos
77
-
78
- - **Estrutura de Tradução Flexível**: Não está atada a um único formato como ICU. Você pode armazenar traduções em JSON, usar interpolação, pluralização, etc.
79
- - **Alternância de Idioma Dinâmica**: Plugins de detector de idioma incorporados e atualizações em tempo de execução.
80
- - **Traduções Aninhadas e Estruturadas**: Você pode aninhar traduções facilmente dentro de JSON.
81
- - **Ecossistema de Plugins Extensivo**: Para detecção (navegador, caminho, subdomínio, etc.), carregamento de recursos, cache e mais.
82
-
83
- ### Fluxo de Trabalho Típico
84
-
85
- 1. **Instale `i18next` e `react-i18next`.**
86
- 2. **Configure i18n** para carregar traduções (JSON) e configurar detecção de idioma ou fallback.
87
- 3. **Envolva seu aplicativo** em `I18nextProvider`.
88
- 4. **Use o hook `useTranslation()`** ou o componente `<Trans>` para exibir traduções.
71
+ ---
89
72
 
90
- ### Prós
73
+ ## Comparação detalhada
91
74
 
92
- - **Altamente flexível** e rico em recursos.
93
- - Comunidade muito ativa e grande ecossistema de plugins.
94
- - Facilidade de **carregamento dinâmico** de traduções (por exemplo, de um servidor, sob demanda).
75
+ ### 1) Arquitetura e escalabilidade
95
76
 
96
- ### Contras
77
+ - **react-intl / react-i18next**: A maioria das configurações mantém **pastas de localidade centralizadas** por idioma, às vezes divididas por **namespaces** (i18next). Funciona bem no início, mas torna-se uma área compartilhada à medida que os aplicativos crescem.
78
+ - **Intlayer**: Promove **dicionários por componente (ou por funcionalidade)** **co-localizados** com a interface de usuário que atendem. Isso mantém a propriedade clara, facilita a duplicação/migração de componentes e reduz a rotatividade de chaves entre equipes. Conteúdo não utilizado é mais fácil de identificar e remover.
97
79
 
98
- - **A configuração pode ser verbosa**, especialmente se você tiver necessidades mais avançadas.
99
- - Se você prefere traduções fortemente tipadas, pode precisar de configurações adicionais do TypeScript.
80
+ **Por que isso importa:** Conteúdo modular reflete uma interface modular. Grandes bases de código React permanecem mais limpas quando as traduções vivem junto com os componentes a que pertencem.
100
81
 
101
82
  ---
102
83
 
103
- ## 4. Intlayer
84
+ ### 2) TypeScript & segurança
104
85
 
105
- ### Visão Geral
86
+ - **react-intl**: Tipagens sólidas, mas **sem tipagem automática de chaves**; você mesmo deve aplicar padrões de segurança.
87
+ - **react-i18next**: Tipagens fortes para hooks; **tipagem estrita de chaves** geralmente requer configuração extra ou geradores.
88
+ - **Intlayer**: **Gera automaticamente tipos estritos** a partir do seu conteúdo. O autocompletar do IDE e os **erros em tempo de compilação** capturam erros de digitação e chaves ausentes antes da execução.
106
89
 
107
- [**Intlayer**](https://github.com/aymericzip/intlayer) é uma biblioteca de i18n open-source mais nova, focada em **declarações de conteúdo em nível de componente**, segurança de tipo e **roteamento dinâmico**. É projetada para fluxos de trabalho modernos do React, suportando tanto **Create React App** quanto configurações de **Vite**. Também inclui recursos avançados como **roteamento baseado em localidade** e **tipos TypeScript gerados automaticamente** para traduções.
90
+ **Por que isso importa:** Mover falhas para a **esquerda** (para build/CI) reduz problemas em produção e acelera os ciclos de feedback dos desenvolvedores.
108
91
 
109
- ### Principais Recursos
92
+ ---
110
93
 
111
- - **Arquivos de Conteúdo Declarativos**: Cada componente ou módulo pode declarar suas traduções em arquivos dedicados `.content.tsx` ou `.content.json`, mantendo o conteúdo próximo de onde é usado.
112
- - **Roteamento & Middleware Incorporados**: Módulos opcionais para roteamento localizado (por exemplo, `/pt/sobre`, `/fr/about`) e middleware do servidor para detectar a localidade do usuário.
113
- - **Tipos TypeScript Gerados Automaticamente**: Garante segurança de tipo com recursos como autocompletar e detecção de erros em tempo de compilação.
114
- - **Traduções Dinâmicas e Ricas**: Podem incluir JSX/TSX em traduções para casos de uso mais complexos (por exemplo, links, texto em negrito, ícones em traduções).
94
+ ### 3) Tratamento de traduções ausentes
115
95
 
116
- ### Fluxo de Trabalho Típico
96
+ - **react-intl / react-i18next**: Usam por padrão **fallbacks em tempo de execução** (eco da chave ou local padrão). Você pode adicionar linting/plugins, mas não é garantido na build.
97
+ - **Intlayer**: **Detecção em tempo de build** com avisos ou erros quando locais/chaves obrigatórios estão ausentes.
117
98
 
118
- 1. **Instale `intlayer` e `react-intlayer`.**
119
- 2. **Crie `intlayer.config.ts`** para definir localidades disponíveis e a localidade padrão.
120
- 3. **Use a CLI do Intlayer** ou o plugin para **transpilar** declarações de conteúdo.
121
- 4. **Envolva seu aplicativo** em `<IntlayerProvider>` e recupere o conteúdo com `useIntlayer("keyName")`.
99
+ **Por que isso importa:** Falhas no CI por strings ausentes evitam o vazamento do “inglês misterioso” em interfaces não inglesas.
122
100
 
123
- ### Prós
101
+ ---
124
102
 
125
- - **Amigável ao TypeScript** com geração de tipos integrada e verificação de erros.
126
- - **Conteúdo rico** possível (por exemplo, passando nós React como traduções).
127
- - **Roteamento Localizado** pronto para uso.
128
- - Integrado com ferramentas de build populares (CRA, Vite) para configuração fácil.
103
+ ### 4) Conteúdo rico e formatação
129
104
 
130
- ### Contras
105
+ - **react-intl**: Excelente suporte **ICU** para plurais, seleções, datas/números e composição de mensagens. JSX pode ser usado, mas o modelo mental permanece centrado na mensagem.
106
+ - **react-i18next**: Interpolação flexível e **`<Trans>`** para incorporar elementos/componentes; ICU disponível via plugin.
107
+ - **Intlayer**: Arquivos de conteúdo podem incluir **nós ricos** (JSX/Markdown/componentes) e **metadados**. A formatação usa Intl internamente; padrões de plural são ergonômicos.
131
108
 
132
- - Ainda **relativamente novo** em comparação com React-Intl ou React-i18next.
133
- - Foco maior em uma abordagem de “declaração de conteúdo em nível de componente”, pode ser uma mudança em relação aos catálogos típicos em .json.
134
- - Ecossistema e comunidade menores em comparação com as bibliotecas mais estabelecidas.
109
+ **Por que isso importa:** Textos complexos da interface do usuário (links, partes em negrito, componentes embutidos) são mais fáceis quando a biblioteca aceita nós React de forma limpa.
135
110
 
136
111
  ---
137
112
 
138
- ## 5. Comparação de Recursos
113
+ ### 5) Desempenho e comportamento de carregamento
114
+
115
+ - **react-intl / react-i18next**: Normalmente você gerencia **divisão de catálogos** e **carregamento preguiçoso** manualmente (namespaces/importações dinâmicas). Eficaz, mas requer disciplina.
116
+ - **Intlayer**: **Elimina** dicionários não usados e suporta **carregamento preguiçoso por dicionário/por localidade** nativamente.
139
117
 
140
- | **Recurso** | **React-Intl** | **React-i18next** | **Intlayer** |
141
- | ----------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
142
- | **Caso de Uso Principal** | Traduções baseadas em string, formatação de data/número, sintaxe de mensagem ICU | i18n completo com fácil troca dinâmica, aninhamento, ecossistema de plugins | Traduções seguras em tipos com foco em conteúdo declarativo, roteamento localizado e middleware opcional de servidor |
143
- | ** abordagem ** | Utilize `<IntlProvider>` & componentes de mensagem FormatJS | Utilize `I18nextProvider` & hook `useTranslation()` | Utilize `<IntlayerProvider>` & hook `useIntlayer()` com declarações de conteúdo |
144
- | **Formato de Localização** | Strings baseadas em ICU (catálogos JSON ou JavaScript) | Arquivos de recurso JSON (ou carregadores personalizados). Formato ICU opcional via plugin i18next | Declarações em `.content.[ts/js/tsx]` ou JSON; podem conter strings ou componentes React |
145
- | **Roteamento** | Tratado externamente (sem roteamento localizado embutido) | Tratado externamente com plugins i18next (detecção de caminho, subdomínio, etc.) | Suporte embutido para roteamento localizado (por exemplo, `/pt/sobre`, `/fr/about`), além de middleware opcional (para SSR/Vite) |
146
- | **Suporte ao TypeScript** | Bom (tipagens para pacotes oficiais) | Bom, mas configuração extra para traduções tipadas se você quiser verificação rigorosa | Excelente (definições de tipo geradas automaticamente para chaves de conteúdo e traduções) |
147
- | **Pluralização & Formatação** | Avançado: formatação de data/hora/número incorporada, suporte a plural/gênero | Pluralização configurável. A formatação de data/hora é normalmente feita por meio de libs externas ou plugin i18next | Pode depender de JavaScript Intl padrão ou embutir lógica no conteúdo. Não tão especializado quanto o FormatJS, mas lida com casos típicos. |
148
- | **Comunidade & Ecossistema** | Grande, parte do ecossistema FormatJS | Muito grande, altamente ativo, muitos plugins (detecção, caching, frameworks) | Menor, mas crescente; abordagem moderna, open-source |
149
- | **Curva de Aprendizado** | Moderada (aprendendo a sintaxe de mensagem ICU, convenções do FormatJS) | Baixa a moderada (uso direto, mas configuração avançada pode se tornar verbosa) | Moderada (conceito de declarações de conteúdo e etapas de build especializadas) |
118
+ **Por que isso importa:** Pacotes menores e menos strings não utilizadas melhoram o desempenho de inicialização e navegação.
150
119
 
151
120
  ---
152
121
 
153
- ## 6. Quando Escolher Cada Um
122
+ ### 6) DX, ferramentas e manutenção
154
123
 
155
- 1. **React-Intl**
124
+ - **react-intl / react-i18next**: Ecossistema comunitário amplo; para fluxos editoriais, normalmente você adota plataformas externas de localização.
125
+ - **Intlayer**: Inclui um **Editor Visual gratuito** e um **CMS opcional** (mantenha o conteúdo no Git ou externalize-o). Também oferece uma **extensão para VSCode** para autoria de conteúdo e **tradução assistida por IA** usando suas próprias chaves de provedor.
156
126
 
157
- - Você precisa de **formatação poderosa** para datas/horas/números e de forte **sintaxe de mensagem ICU**.
158
- - Você prefere uma abordagem mais “**baseada em padrões**” para traduções.
159
- - Você não requer roteamento localizado ou chaves de tradução fortemente tipadas.
127
+ **Por que isso importa:** Ferramentas integradas encurtam o ciclo entre desenvolvedores e autores de conteúdo - menos código de ligação, menos dependências de fornecedores.
160
128
 
161
- 2. **React-i18next**
129
+ ---
162
130
 
163
- - Você precisa de uma solução **flexível, estabelecida** com carregamento **dinâmico** e **sob demanda** de traduções.
164
- - Você deseja detecção de idioma **baseada em plugins** (por exemplo, a partir de URL, cookies, armazenamento local) ou cache avançado.
165
- - Você precisa do maior ecossistema, com muitas integrações existentes para vários frameworks (Next.js, React Native, etc.).
131
+ ## Quando escolher qual?
166
132
 
167
- 3. **Intlayer**
168
- - Você deseja uma forte integração com TypeScript com _tipos gerados automaticamente_, garantindo que você raramente perca uma chave de tradução.
169
- - Você prefere **conteúdo declarativo** próximo do componente, possivelmente incluindo nós React ou lógica avançada em traduções.
170
- - Você requer **roteamento localizado embutido** ou deseja facilmente incorporá-lo em sua configuração de SSR ou Vite.
171
- - Você deseja uma abordagem moderna ou simplesmente quer uma única biblioteca que cubra tanto a **gestão de conteúdo** (i18n) quanto o **roteamento** de forma segura.
133
+ - **Escolha react-intl** se você quiser formatação de mensagens **priorizando ICU** com uma API direta e alinhada aos padrões, e sua equipe estiver confortável em manter catálogos e verificações de segurança manualmente.
134
+ - **Escolha react-i18next** se precisar da **amplitude do ecossistema do i18next** (detectores, backends, plugin ICU, integrações) e aceitar mais configuração para ganhar flexibilidade.
135
+ - **Escolha Intlayer** se você valoriza **conteúdo escopado por componente**, **TypeScript rigoroso**, **garantias em tempo de build**, **tree-shaking** e ferramentas editoriais **com tudo incluído** - especialmente para apps React **grandes e modulares**.
172
136
 
173
137
  ---
174
138
 
175
- ## 7. Conclusão
176
-
177
- Cada biblioteca oferece uma solução robusta para internacionalizar uma aplicação React:
178
-
179
- - **React-Intl** é excelente em formatação de mensagens e é uma escolha popular para soluções empresariais focadas na sintaxe de mensagem ICU.
180
- - **React-i18next** fornece um ambiente altamente flexível, impulsionado por plugins para necessidades avançadas ou dinâmicas de i18n.
181
- - **Intlayer** oferece uma abordagem **moderna e fortemente tipada** que une declarações de conteúdo, roteamento localizado avançado e integrações baseadas em plugins (CRA, Vite).
139
+ ## Notas práticas de migração (react-intl / react-i18next → Intlayer)
182
140
 
183
- Sua escolha depende em grande parte dos requisitos do projeto, da experiência desejada do desenvolvedor (DX) e da importância de traduções tipadas ou roteamento avançado. Se você valoriza o roteamento localizado embutido e a integração com TypeScript, **Intlayer** pode ser a mais atraente. Se você deseja uma solução robusta e rica em ecossistemas, **React-i18next** é uma ótima escolha. Para necessidades de formatação baseadas em ICU mais diretas, **React-Intl** é uma opção confiável.
141
+ - **Migre de forma incremental**: Comece com uma funcionalidade ou rota; mantenha os catálogos legados em paralelo durante a transição.
142
+ - **Adote dicionários por componente**: Coloque o conteúdo junto aos componentes para reduzir o acoplamento.
143
+ - **Habilite verificações rigorosas**: Permita que erros em tempo de build revelem chaves/locais faltantes cedo no CI.
144
+ - **Meça os bundles**: Espere reduções conforme strings não usadas forem eliminadas.
184
145
 
185
146
  ---
186
147
 
187
- ### Leitura Adicional
148
+ ## Conclusão
188
149
 
189
- - [Documentação do React-Intl](https://formatjs.io/docs/react-intl/)
190
- - [Documentação do React-i18next](https://react.i18next.com/)
191
- - [Intlayer + Guia de Introdução ao CRA](#) (do seu doc)
192
- - [Intlayer + Guia de Introdução ao Vite & React](#) (do seu doc)
150
+ Todas as três bibliotecas localizam o React de forma eficaz. O diferencial é quanto de **infraestrutura** você precisa construir para alcançar uma configuração **segura e escalável**:
193
151
 
194
- Sinta-se à vontade para misturar e combinar abordagens para atender às suas necessidades, não uma “solução única para todos”, e cada biblioteca continua a evoluir para abordar novos casos de uso no ecossistema React.
152
+ - Com o **Intlayer**, **conteúdo modular**, **tipagem TS rigorosa**, **segurança em tempo de compilação**, **pacotes otimizados por tree-shaking** e **ferramentas editoriais** são padrões - não tarefas.
153
+ - Se sua equipe valoriza **manutenibilidade e velocidade** em aplicativos React multi-idioma e orientados a componentes, o Intlayer oferece o fluxo de trabalho para desenvolvedores e conteúdo mais **completo** atualmente.
@@ -0,0 +1,268 @@
1
+ ---
2
+ createdAt: 2024-08-11
3
+ updatedAt: 2025-08-23
4
+ title: vue-i18n vs Intlayer
5
+ description: Comparação entre vue-i18n e Intlayer para internacionalização (i18n) em apps Vue/Nuxt
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - Internacionalização
10
+ - i18n
11
+ - Blog
12
+ - Vue
13
+ - Nuxt
14
+ - JavaScript
15
+ slugs:
16
+ - blog
17
+ - vue-i18n-vs-intlayer
18
+ ---
19
+
20
+ # vue-i18n VS Intlayer | Internacionalização (i18n) em Vue
21
+
22
+ Este guia compara duas opções populares de i18n para **Vue 3** (e **Nuxt**): **vue-i18n** e **Intlayer**.
23
+ Focamos nas ferramentas modernas do Vue (Vite, Composition API) e avaliamos:
24
+
25
+ 1. **Arquitetura & organização de conteúdo**
26
+ 2. **TypeScript & segurança**
27
+ 3. **Tratamento de traduções faltantes**
28
+ 4. **Roteamento & estratégia de URL**
29
+ 5. **Performance & comportamento de carregamento**
30
+ 6. **Experiência do desenvolvedor (DX), ferramentas & manutenção**
31
+ 7. **SEO & escalabilidade para grandes projetos**
32
+
33
+ > **resumo**: Ambos podem localizar apps Vue. Se você deseja **conteúdo com escopo de componente**, **tipos TypeScript rigorosos**, **verificações de chaves faltantes em tempo de build**, **dicionários otimizados por tree-shaking**, e **helpers integrados para roteamento/SEO** além de **Editor Visual & traduções com IA**, **Intlayer** é a escolha mais completa e moderna.
34
+
35
+ ---
36
+
37
+ ## Posicionamento em alto nível
38
+
39
+ - **vue-i18n** - A biblioteca i18n padrão para Vue. Formatação flexível de mensagens (estilo ICU), blocos SFC `<i18n>` para mensagens locais, e um grande ecossistema. Segurança e manutenção em larga escala ficam principalmente por sua conta.
40
+ - **Intlayer** - Modelo de conteúdo centrado em componentes para Vue/Vite/Nuxt com **tipagem TS rigorosa**, **verificações em tempo de build**, **tree-shaking**, **helpers para roteador e SEO**, **Editor Visual/CMS** opcional e **traduções assistidas por IA**.
41
+
42
+ ---
43
+
44
+ ## Comparação de Recursos Lado a Lado (focada em Vue)
45
+
46
+ | Recurso | **Intlayer** | **vue-i18n** |
47
+ | -------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
48
+ | **Traduções próximas aos componentes** | ✅ Sim, conteúdo colocalizado por componente (ex.: `MyComp.content.ts`) | ✅ Sim, via blocos SFC `<i18n>` (opcional) |
49
+ | **Integração com TypeScript** | ✅ Avançada, tipos **estritos** gerados automaticamente e autocompletar de chaves | ✅ Boas tipagens; **segurança estrita de chaves requer configuração/disciplinas adicionais** |
50
+ | **Detecção de tradução ausente** | ✅ Avisos/erros em **tempo de build** e exposição no TS | ⚠️ Fallbacks/avisos em tempo de execução |
51
+ | **Conteúdo rico (componentes/Markdown)** | ✅ Suporte direto para nós ricos e arquivos de conteúdo Markdown | ⚠️ Limitado (componentes via `<i18n-t>`, Markdown via plugins externos) |
52
+ | **Tradução com IA** | ✅ Fluxos de trabalho integrados usando suas próprias chaves de provedores de IA | ❌ Não integrado |
53
+ | **Editor Visual / CMS** | ✅ Editor Visual gratuito e CMS opcional | ❌ Não integrado (use plataformas externas) |
54
+ | **Roteamento localizado** | ✅ Auxiliares para Vue Router/Nuxt para gerar caminhos localizados, URLs e `hreflang` | ⚠️ Não é parte do núcleo (use Nuxt i18n ou configuração personalizada do Vue Router) |
55
+ | **Geração dinâmica de rotas** | ✅ Sim | ❌ Não fornecido (Nuxt i18n fornece) |
56
+ | **Pluralização e formatação** | ✅ Padrões de enumeração; formatadores baseados em Intl | ✅ Mensagens no estilo ICU; formatadores Intl |
57
+ | **Formatos de conteúdo** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML em desenvolvimento) | ✅ `.json`, `.js` (além de blocos SFC `<i18n>`) |
58
+ | **Suporte ICU** | ⚠️ Em desenvolvimento | ✅ Sim |
59
+ | **Auxiliares de SEO (sitemap, robots, metadados)** | ✅ Auxiliares integrados (independente de framework) | ❌ Não faz parte do núcleo (Nuxt i18n/comunidade) |
60
+ | **SSR/SSG** | ✅ Funciona com Vue SSR e Nuxt; não bloqueia a renderização estática | ✅ Funciona com Vue SSR/Nuxt |
61
+ | **Tree-shaking (enviar apenas o conteúdo usado)** | ✅ Por componente em tempo de build | ⚠️ Parcial; requer divisão manual de código/mensagens assíncronas |
62
+ | **Carregamento preguiçoso (Lazy loading)** | ✅ Por localidade / por dicionário | ✅ Suporte a mensagens de localidade assíncronas |
63
+ | **Purgar conteúdo não utilizado** | ✅ Sim (em tempo de build) | ❌ Não incorporado |
64
+ | **Manutenção em projetos grandes** | ✅ Incentiva estrutura modular, amigável a design systems | ✅ Possível, mas requer disciplina rigorosa de arquivos/namespace |
65
+ | **Ecossistema / comunidade** | ⚠️ Menor, mas crescendo rapidamente | ✅ Grande e madura no ecossistema Vue |
66
+
67
+ ---
68
+
69
+ ## Comparação detalhada
70
+
71
+ ### 1) Arquitetura e escalabilidade
72
+
73
+ - **vue-i18n**: Configurações comuns usam **catálogos centralizados** por localidade (opcionalmente divididos em arquivos/namespace). Blocos SFC `<i18n>` permitem mensagens locais, mas as equipes frequentemente retornam a catálogos compartilhados conforme os projetos crescem.
74
+ - **Intlayer**: Promove **dicionários por componente** armazenados ao lado do componente que atendem. Isso reduz conflitos entre equipes, mantém o conteúdo descobrível e limita naturalmente a deriva/chaves não utilizadas.
75
+
76
+ **Por que isso importa:** Em grandes aplicativos Vue ou sistemas de design, **conteúdo modular** escala melhor do que catálogos monolíticos.
77
+
78
+ ---
79
+
80
+ ### 2) TypeScript & segurança
81
+
82
+ - **vue-i18n**: Bom suporte a TS; **tipagem estrita de chaves** normalmente requer esquemas/genéricos personalizados e convenções cuidadosas.
83
+ - **Intlayer**: **Gera tipos estritos** a partir do seu conteúdo, oferecendo **autocompletar no IDE** e **erros em tempo de compilação** para erros de digitação/chaves ausentes.
84
+
85
+ **Por que isso importa:** Tipagem forte detecta problemas **antes** da execução.
86
+
87
+ ---
88
+
89
+ ### 3) Tratamento de traduções ausentes
90
+
91
+ - **vue-i18n**: Avisos/falhas em **tempo de execução** (ex.: fallback para localidade ou chave).
92
+ - **Intlayer**: Detecção em **tempo de build** com avisos/erros entre localidades e chaves.
93
+
94
+ **Por que isso importa:** Aplicação em tempo de build mantém a interface de produção limpa e consistente.
95
+
96
+ ---
97
+
98
+ ### 4) Estratégia de roteamento e URLs (Vue Router/Nuxt)
99
+
100
+ - **Ambos** podem funcionar com rotas localizadas.
101
+ - **Intlayer** fornece auxiliares para **gerar caminhos localizados**, **gerenciar prefixos de localidade** e emitir **`<link rel="alternate" hreflang>`** para SEO. Com Nuxt, complementa o roteamento do framework.
102
+
103
+ **Por que isso importa:** Menos camadas personalizadas e **SEO mais limpo** entre localidades.
104
+
105
+ ---
106
+
107
+ ### 5) Desempenho e comportamento de carregamento
108
+
109
+ - **vue-i18n**: Suporta mensagens de localidade assíncronas; evitar sobrecarregamento é sua responsabilidade (divida os catálogos com cuidado).
110
+ - **Intlayer**: **Elimina código morto** na build e **carrega preguiçosamente por dicionário/localidade**. Conteúdo não utilizado não é enviado.
111
+
112
+ **Por que isso importa:** Pacotes menores e inicialização mais rápida para apps Vue multilíngues.
113
+
114
+ ---
115
+
116
+ ### 6) Experiência do desenvolvedor e ferramentas
117
+
118
+ - **vue-i18n**: Documentação madura e comunidade consolidada; normalmente você dependerá de **plataformas externas de localização** para fluxos editoriais.
119
+ - **Intlayer**: Oferece um **Editor Visual gratuito**, **CMS** opcional (compatível com Git ou externalizado), uma **extensão para VSCode**, utilitários **CLI/CI** e **traduções assistidas por IA** usando suas próprias chaves de provedor.
120
+
121
+ **Por que isso importa:** Menor custo operacional e um ciclo de desenvolvimento–conteúdo mais curto.
122
+
123
+ ---
124
+
125
+ ### 7) SEO, SSR & SSG
126
+
127
+ - **Ambos** funcionam com Vue SSR e Nuxt.
128
+ - **Intlayer**: Adiciona **auxiliares de SEO** (sitemaps/metadados/`hreflang`) que são independentes de framework e funcionam bem com builds Vue/Nuxt.
129
+
130
+ **Por que isso importa:** SEO internacional sem configurações personalizadas complexas.
131
+
132
+ ---
133
+
134
+ ## Por que Intlayer? (Problema & abordagem)
135
+
136
+ A maioria das pilhas i18n (incluindo **vue-i18n**) começa a partir de **catálogos centralizados**:
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
+ Ou com pastas por localidade:
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
+ Isso frequentemente desacelera o desenvolvimento conforme os apps crescem:
169
+
170
+ 1. **Para um novo componente** você cria/edita catálogos remotos, conecta namespaces e traduz (frequentemente via copiar/colar manual de ferramentas de IA).
171
+ 2. **Ao modificar componentes** você procura chaves compartilhadas, traduz, mantém as localidades sincronizadas, remove chaves obsoletas e alinha as estruturas JSON.
172
+
173
+ **Intlayer** delimita o conteúdo **por componente** e mantém-no **junto ao código**, como já fazemos com CSS, histórias, testes e documentação:
174
+
175
+ ```bash
176
+ .
177
+ └── components
178
+ └── MyComponent
179
+ ├── MyComponent.content.ts
180
+ └── MyComponent.vue
181
+ ```
182
+
183
+ **Declaração de conteúdo** (por componente):
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
+ **Uso no Vue** (Composition API):
203
+
204
+ ```vue fileName="./components/MyComponent/MyComponent.vue"
205
+ <script setup lang="ts">
206
+ import { useIntlayer } from "vue-intlayer"; // Integração Vue
207
+ const { greeting } = useIntlayer("component-example");
208
+ </script>
209
+
210
+ <template>
211
+ <span>{{ greeting }}</span>
212
+ </template>
213
+ ```
214
+
215
+ Esta abordagem:
216
+
217
+ - **Acelera o desenvolvimento** (declare uma vez; IDE/IA completa automaticamente).
218
+ - **Limpa a base de código** (1 componente = 1 dicionário).
219
+ - **Facilita duplicação/migração** (copie um componente e seu conteúdo juntos).
220
+ - **Evita chaves mortas** (componentes não usados não importam conteúdo).
221
+ - **Otimiza o carregamento** (componentes carregados sob demanda trazem seu conteúdo junto).
222
+
223
+ ---
224
+
225
+ ## Funcionalidades adicionais do Intlayer (relevantes para Vue)
226
+
227
+ - **Suporte multiplataforma**: Funciona com Vue, Nuxt, Vite, React, Express e mais.
228
+ - **Gerenciamento de conteúdo baseado em JavaScript**: Declare no código com total flexibilidade.
229
+ - **Arquivo de declaração por localidade**: Defina todas as localidades e deixe as ferramentas gerarem o restante.
230
+ - **Ambiente com tipagem segura**: Configuração forte de TS com autocompletar.
231
+ - **Recuperação simplificada de conteúdo**: Um único hook/composable para buscar todo o conteúdo de um dicionário.
232
+ - **Base de código organizada**: 1 componente = 1 dicionário na mesma pasta.
233
+ - **Roteamento aprimorado**: Auxiliares para caminhos e metadados localizados do **Vue Router/Nuxt**.
234
+ - **Suporte a Markdown**: Importe Markdown remoto/local por localidade; exponha frontmatter para o código.
235
+ - **Editor Visual gratuito e CMS opcional**: Criação de conteúdo sem plataforma de localização paga; sincronização amigável ao Git.
236
+ - **Conteúdo tree-shakable**: Envia apenas o que é usado; suporta carregamento preguiçoso.
237
+ - **Compatível com renderização estática**: Não bloqueia SSG.
238
+ - **Traduções com IA**: Traduza para 231 idiomas usando seu próprio provedor de IA/chave de API.
239
+ - **Servidor MCP & extensão VSCode**: Automatize fluxos de trabalho i18n e autoria dentro do seu IDE.
240
+ - **Interoperabilidade**: Integrações com **vue-i18n**, **react-i18next** e **react-intl** quando necessário.
241
+
242
+ ---
243
+
244
+ ## Quando escolher qual?
245
+
246
+ - **Escolha vue-i18n** se você quiser a **abordagem padrão do Vue**, estiver confortável gerenciando catálogos/namespace por conta própria, e seu app for **pequeno a médio porte** (ou já depender do Nuxt i18n).
247
+ - **Escolha Intlayer** se você valoriza **conteúdo escopado por componente**, **TypeScript rigoroso**, **garantias em tempo de build**, **tree-shaking**, e ferramentas completas para roteamento/SEO/editor - especialmente para **códigos Vue/Nuxt grandes e modulares**.
248
+
249
+ ---
250
+
251
+ ## Notas práticas de migração (vue-i18n → Intlayer)
252
+
253
+ - **Comece por funcionalidade**: Mova uma rota/visualização/componente de cada vez para os dicionários locais do Intlayer.
254
+ - **Ponte durante a migração**: Mantenha os catálogos vue-i18n em paralelo; substitua as consultas gradualmente.
255
+ - **Ative verificações rigorosas**: Permita que a detecção em tempo de compilação identifique cedo chaves/locais ausentes.
256
+ - **Adote auxiliares de roteador/SEO**: Padronize a detecção de localidade e as tags `hreflang`.
257
+ - **Meça os pacotes**: Espere **reduções no tamanho dos pacotes** à medida que o conteúdo não utilizado é excluído.
258
+
259
+ ---
260
+
261
+ ## Conclusão
262
+
263
+ Tanto o **vue-i18n** quanto o **Intlayer** localizam bem aplicações Vue. A diferença está em **quanto você precisa construir por conta própria** para alcançar uma configuração robusta e escalável:
264
+
265
+ - Com **Intlayer**, **conteúdo modular**, **TS rigoroso**, **segurança em tempo de build**, **bundles otimizados por tree-shaking** e **ferramentas para router/SEO/editor** vêm **prontos para usar**.
266
+ - Se sua equipe prioriza **manutenibilidade e velocidade** em um app Vue/Nuxt multi-local, orientado a componentes, o Intlayer oferece a experiência **mais completa** atualmente.
267
+
268
+ Consulte o documento ['Por que Intlayer?'](https://intlayer.org/doc/why) para mais detalhes.
@@ -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: Интегрируйте Intlayer с next-i18next для приложения Next.js
6
6
  keywords:
@@ -24,7 +24,6 @@ slugs:
24
24
  Обе решения включают три основных понятия:
25
25
 
26
26
  1. **Декларация контента**: Метод определения переводимого контента вашего приложения.
27
-
28
27
  - Называемый `resource` в случае `i18next`, декларация контента - это структурированный объект JSON, содержащий пары ключ-значение для переводов на одном или нескольких языках. Смотрите [документацию i18next](https://www.i18next.com/translation-function/essentials) для получения дополнительной информации.
29
28
  - Называемый `content declaration file` в случае `Intlayer`, декларация контента может быть JSON, JS или TS файлом, экспортирующим структурированные данные. Смотрите [документацию Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/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
  };