@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,8 +1,8 @@
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: Intègre react-i18next avec next-intl et Intlayer pour l'internationalisation (i18n) d'une application React
4
+ title: react-i18next vs react-intl vs Intlayer
5
+ description: Intégrer react-i18next avec next-intl et Intlayer pour l'internationalisation (i18n) d'une application React
6
6
  keywords:
7
7
  - next-intl
8
8
  - react-i18next
@@ -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 | Internationalisation (i18n) avec React
20
+ # react-Intl VS react-i18next VS intlayer | Internationalisation React (i18n)
21
21
 
22
- Voici une comparaison concise de trois bibliothèques i18n (internationalisation) populaires pour React : **React-Intl**, **React-i18next** et **Intlayer**. Chaque bibliothèque offre des fonctionnalités et des workflows uniques pour intégrer le support multilingue dans votre application React. Après avoir lu ceci, vous devriez être en mesure de décider quelle solution correspond le mieux à vos besoins.
22
+ Ce guide compare trois options i18n établies pour **React** : **react-intl** (FormatJS), **react-i18next** (i18next), et **Intlayer**.
23
+ Nous nous concentrons sur les applications **React pures** (par exemple, Vite, CRA, SPA). Si vous utilisez Next.js, consultez notre comparaison dédiée à Next.js.
23
24
 
24
- ---
25
-
26
- ## 1. Introduction
27
-
28
- L'internationalisation (i18n) dans les applications React peut être réalisée de plusieurs manières. Les trois bibliothèques présentées ici ont différentes philosophies de conception, ensembles de fonctionnalités et support communautaire :
25
+ Nous évaluons :
29
26
 
30
- 1. **React-Intl**
31
- 2. **React-i18next**
32
- 3. **Intlayer**
27
+ - Architecture et organisation du contenu
28
+ - TypeScript et sécurité
29
+ - Gestion des traductions manquantes
30
+ - Contenu riche et capacités de formatage
31
+ - Performance et comportement de chargement
32
+ - Expérience développeur (DX), outils et maintenance
33
+ - SEO/routage (dépendant du framework)
33
34
 
34
- Vous trouverez ci-dessous un aperçu de chaque solution, suivi d'une comparaison des fonctionnalités, des avantages et inconvénients, et des cas d'utilisation exemplaires.
35
+ > **En résumé** : Les trois solutions peuvent localiser une application React. Si vous souhaitez un **contenu scoped par composant**, des **types TypeScript stricts**, des **vérifications des clés manquantes à la compilation**, des **dictionnaires optimisés par tree-shaking**, ainsi qu’un outil éditorial intégré (Éditeur Visuel/CMS + traduction IA optionnelle), **Intlayer** est le choix le plus complet pour des bases de code React modulaires.
35
36
 
36
37
  ---
37
38
 
38
- ## 2. React-Intl
39
-
40
- ### Vue d'ensemble
41
-
42
- [**React-Intl**](https://formatjs.io/docs/react-intl/) fait partie de la suite [FormatJS](https://formatjs.io/). Elle fournit un ensemble puissant d'**APIs et de composants** pour gérer le formatage des messages, la pluralisation, le formatage de la date/heure et des nombres. React-Intl est largement utilisé dans les applications d'entreprise, principalement parce qu'il fait partie d'un écosystème qui standardise la syntaxe des messages et leur formatage.
43
-
44
- ### Fonctionnalités clés
45
-
46
- - **Syntaxe de message ICU** : Offre une syntaxe complète pour l'interpolation des messages, la pluralisation, et plus encore.
47
- - **Formatage localisé** : Utilitaires intégrés pour formater les dates, les heures, les nombres et les temps relatifs en fonction de la locale.
48
- - **Composants déclaratifs** : Expose `<FormattedMessage>`, `<FormattedNumber>`, `<FormattedDate>`, etc., pour une utilisation transparente dans JSX.
49
- - **Écosystème riche** : S'intègre bien avec les outils de FormatJS (par exemple, [babel-plugin-react-intl](https://formatjs.io/docs/tooling/babel-plugin/)) pour extraire, gérer et compiler les messages.
50
-
51
- ### Flux de travail typique
52
-
53
- 1. **Définir les catalogues de messages** (généralement des fichiers JSON par locale).
54
- 2. **Enveloppez votre application** dans `<IntlProvider locale="fr" messages={messages}>`.
55
- 3. **Utilisez** `<FormattedMessage id="myMessage" defaultMessage="Bonjour le monde" />` ou le hook `useIntl()` pour accéder aux chaînes de traduction.
56
-
57
- ### Avantages
58
-
59
- - Bien établi et utilisé dans de nombreux environnements de production.
60
- - Formatage de message avancé, y compris la pluralisation, le genre, les fuseaux horaires, et plus encore.
61
- - Support d'outils fort pour l'extraction et la compilation des messages.
62
-
63
- ### Inconvénients
39
+ ## Positionnement général
64
40
 
65
- - Nécessite une familiarité avec le **format de message ICU**, qui peut être verbeux.
66
- - Pas aussi simple de gérer des traductions dynamiques ou complexes qui vont au-delà des simples chaînes.
41
+ - **react-intl** - Formatage priorisant ICU, conforme aux standards (dates/nombres/pluriels) avec une API mature. Les catalogues sont généralement centralisés ; la sécurité des clés et la validation à la compilation dépendent en grande partie de vous.
42
+ - **react-i18next** - Extrêmement populaire et flexible ; namespaces, détecteurs, et de nombreux plugins (ICU, backends). Puissant, mais la configuration peut devenir complexe à mesure que les projets grandissent.
43
+ - **Intlayer** - Modèle de contenu centré sur les composants pour React, **typage TS strict**, **vérifications à la compilation**, **tree-shaking**, plus **éditeur visuel/CMS** et **traductions assistées par IA**. Fonctionne avec React Router, Vite, CRA, etc.
67
44
 
68
45
  ---
69
46
 
70
- ## 3. React-i18next
47
+ ## Matrice des fonctionnalités (focus React)
48
+
49
+ | Fonctionnalité | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
50
+ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
51
+ | **Traductions Près des Composants** | ✅ Oui, contenu collé avec chaque composant | ❌ Non | ❌ Non |
52
+ | **Intégration TypeScript** | ✅ Avancée, types stricts auto-générés | ⚠️ Basique ; configuration supplémentaire pour la sécurité | ✅ Bonne, mais moins stricte |
53
+ | **Détection des Traductions Manquantes** | ✅ Mise en évidence des erreurs TypeScript et erreur/avertissement à la compilation | ⚠️ Principalement des chaînes de secours à l'exécution | ⚠️ Chaînes de secours |
54
+ | **Contenu Riche (JSX/Markdown/composants)** | ✅ Support direct | ⚠️ Limité / interpolation uniquement | ⚠️ Syntaxe ICU, pas de vrai JSX |
55
+ | **Traduction alimentée par IA** | ✅ Oui, prend en charge plusieurs fournisseurs d'IA. Utilisable avec vos propres clés API. Prend en compte le contexte de votre application et la portée du contenu | ❌ Non | ❌ Non |
56
+ | **Éditeur Visuel** | ✅ Oui, éditeur visuel local + CMS optionnel ; peut externaliser le contenu de la base de code ; intégrable | ❌ Non / disponible via des plateformes de localisation externes | ❌ Non / disponible via des plateformes de localisation externes |
57
+ | **Routage localisé** | ✅ Oui, prend en charge les chemins localisés nativement (fonctionne avec Next.js & Vite) | ⚠️ Pas intégré, nécessite des plugins (ex. `next-i18next`) ou une configuration personnalisée du routeur | ❌ Non, uniquement le formatage des messages, le routage doit être manuel |
58
+ | **Génération dynamique de routes** | ✅ Oui | ⚠️ Plugin/écosystème ou configuration manuelle | ❌ Non fourni |
59
+ | **Pluriel** | ✅ Modèles basés sur des énumérations | ✅ Configurable (plugins comme i18next-icu) | ✅ (ICU) |
60
+ | **Formatage (dates, nombres, devises)** | ✅ Formateurs optimisés (Intl en interne) | ⚠️ Via des plugins ou usage personnalisé d’Intl | ✅ Formateurs ICU |
61
+ | **Format de contenu** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml en cours de développement) | ⚠️ .json | ✅ .json, .js |
62
+ | **Support ICU** | ⚠️ En cours de développement | ⚠️ Via plugin (i18next-icu) | ✅ Oui |
63
+ | **Aides SEO (hreflang, sitemap)** | ✅ Outils intégrés : aides pour sitemap, robots.txt, métadonnées | ⚠️ Plugins communautaires / manuel | ❌ Pas dans le cœur |
64
+ | **Écosystème / Communauté** | ⚠️ Plus petit mais en croissance rapide et réactif | ✅ Le plus grand et mature | ✅ Important |
65
+ | **Rendu côté serveur & Composants Serveur** | ✅ Oui, optimisé pour SSR / Composants Serveur React | ⚠️ Pris en charge au niveau de la page mais nécessite de passer les fonctions t dans l'arbre des composants pour les composants serveur enfants | ❌ Non pris en charge, nécessite de passer les fonctions t dans l'arbre des composants pour les composants serveur enfants |
66
+ | **Tree-shaking (chargement uniquement du contenu utilisé)** | ✅ Oui, par composant au moment de la compilation via les plugins Babel/SWC | ⚠️ Charge généralement tout (peut être amélioré avec des namespaces / découpage du code) | ⚠️ Charge généralement tout |
67
+ | **Chargement paresseux** | ✅ Oui, par locale / par dictionnaire | ✅ Oui (par exemple, backends/namespaces à la demande) | ✅ Oui (bundles de locale séparés) |
68
+ | **Purge du contenu inutilisé** | ✅ Oui, par dictionnaire au moment de la compilation | ❌ Non, uniquement via une segmentation manuelle des namespaces | ❌ Non, tous les messages déclarés sont inclus dans le bundle |
69
+ | **Gestion des grands projets** | ✅ Encourage la modularité, adapté aux design-systems | ⚠️ Nécessite une bonne discipline des fichiers | ⚠️ Les catalogues centraux peuvent devenir volumineux |
71
70
 
72
- ### Vue d'ensemble
73
-
74
- [**React-i18next**](https://react.i18next.com/) est une extension de React de [i18next](https://www.i18next.com/), l'un des frameworks JavaScript i18n les plus populaires. Il offre des **fonctionnalités étendues** pour les traductions en temps réel, le chargement paresseux, et la détection de langue, ce qui le rend extrêmement flexible pour une grande variété de cas d'utilisation.
75
-
76
- ### Fonctionnalités clés
77
-
78
- - **Structure de traduction flexible** : Non lié à un format unique comme l'ICU. Vous pouvez stocker des traductions en JSON, utiliser l'interpolation, la pluralisation, etc.
79
- - **Changement de langue dynamique** : Plugins de détection de langue intégrés et mises à jour en temps réel.
80
- - **Traductions imbriquées et structurées** : Vous pouvez imbriquer facilement les traductions au sein du JSON.
81
- - **Écosystème de plugins étendu** : Pour la détection (navigateur, chemin, sous-domaine, etc.), le chargement des ressources, la mise en cache, et plus encore.
82
-
83
- ### Flux de travail typique
84
-
85
- 1. **Installez `i18next` & `react-i18next`.**
86
- 2. **Configurez i18n** pour charger les traductions (JSON) et mettre en place la détection de langue ou les fallback.
87
- 3. **Enveloppez votre application** dans `I18nextProvider`.
88
- 4. **Utilisez le hook `useTranslation()`** ou le composant `<Trans>` pour afficher les traductions.
71
+ ---
89
72
 
90
- ### Avantages
73
+ ## Comparaison approfondie
91
74
 
92
- - Très **flexible** et riche en fonctionnalités.
93
- - Communauté très active et grand écosystème de plugins.
94
- - Facilité de **chargement dynamique** des traductions (par exemple, depuis un serveur, à la demande).
75
+ ### 1) Architecture et évolutivité
95
76
 
96
- ### Inconvénients
77
+ - **react-intl / react-i18next** : La plupart des configurations maintiennent des **dossiers de locale centralisés** par langue, parfois divisés par **espaces de noms** (namespaces) (i18next). Cela fonctionne bien au début mais devient une surface partagée à mesure que les applications grandissent.
78
+ - **Intlayer** : Favorise les **dictionnaires par composant (ou par fonctionnalité)** **co-localisés** avec l’interface utilisateur qu’ils servent. Cela maintient une propriété claire, facilite la duplication/migration des composants, et réduit les changements de clés entre équipes. Le contenu inutilisé est plus facile à identifier et à supprimer.
97
79
 
98
- - **La configuration peut être verbeuse**, surtout si vous avez des besoins plus avancés.
99
- - Si vous préférez des traductions fortement typées, vous aurez peut-être besoin de configurations TypeScript supplémentaires.
80
+ **Pourquoi c’est important :** Le contenu modulaire reflète une interface modulaire. Les grandes bases de code React restent plus propres lorsque les traductions vivent avec les composants auxquels elles appartiennent.
100
81
 
101
82
  ---
102
83
 
103
- ## 4. Intlayer
84
+ ### 2) TypeScript & sécurité
104
85
 
105
- ### Vue d'ensemble
86
+ - **react-intl** : Typages solides, mais **pas de typage automatique des clés** ; vous devez appliquer vous-même les bonnes pratiques de sécurité.
87
+ - **react-i18next** : Typages forts pour les hooks ; un **typage strict des clés** nécessite généralement une configuration supplémentaire ou des générateurs.
88
+ - **Intlayer** : **Génère automatiquement des types stricts** à partir de votre contenu. L’autocomplétion de l’IDE et les **erreurs à la compilation** détectent les fautes de frappe et les clés manquantes avant l’exécution.
106
89
 
107
- [**Intlayer**](https://github.com/aymericzip/intlayer) est une bibliothèque i18n open-source plus récente axée sur les **déclarations de contenu au niveau des composants**, la sécurité des types et le **routage dynamique**. Elle est conçue pour les workflows modernes de React, prenant en charge à la fois **Create React App** et les configurations **Vite**. Elle inclut également des fonctionnalités avancées telles que le **routage basé sur la locale** et des **types TypeScript auto-générés** pour les traductions.
90
+ **Pourquoi c’est important :** Déplacer les erreurs **en amont** (vers la compilation/CI) réduit les problèmes en production et accélère les boucles de retour pour les développeurs.
108
91
 
109
- ### Fonctionnalités clés
92
+ ---
110
93
 
111
- - **Fichiers de contenu déclaratifs** : Chaque composant ou module peut déclarer ses traductions dans des fichiers dédiés `.content.tsx` ou `.content.json`, gardant le contenu proche de son utilisation.
112
- - **Routage & middleware intégrés** : Modules optionnels pour le routage localisé (par exemple, `/fr/about`, `/en/about`) et middleware serveur pour détecter la locale de l'utilisateur.
113
- - **Types TypeScript auto-générés** : Assure la sécurité des types avec des fonctionnalités telles que l'autocomplétion et la détection d'erreurs à la compilation.
114
- - **Traductions dynamiques et riches** : Peut inclure JSX/TSX dans les traductions pour des cas d'utilisation plus complexes (par exemple, liens, texte en gras, icônes dans les traductions).
94
+ ### 3) Gestion des traductions manquantes
115
95
 
116
- ### Flux de travail typique
96
+ - **react-intl / react-i18next** : Par défaut, recours aux **solutions de repli à l’exécution** (répétition de la clé ou locale par défaut). Vous pouvez ajouter du linting/plugins, mais ce n’est pas garanti à la compilation.
97
+ - **Intlayer** : **Détection à la compilation** avec avertissements ou erreurs lorsque des locales/clés requises sont manquantes.
117
98
 
118
- 1. **Installez `intlayer` et `react-intlayer`.**
119
- 2. **Créez `intlayer.config.ts`** pour définir les locales disponibles et la locale par défaut.
120
- 3. **Utilisez l'CLI Intlayer** ou le plugin pour **transpiler** les déclarations de contenu.
121
- 4. **Enveloppez votre application** dans `<IntlayerProvider>` et récupérez le contenu avec `useIntlayer("keyName")`.
99
+ **Pourquoi c’est important :** Un CI qui échoue sur les chaînes manquantes empêche la fuite d’« anglais mystère » dans les interfaces non anglophones.
122
100
 
123
- ### Avantages
101
+ ---
124
102
 
125
- - **Compatible TypeScript** avec génération de types intégrée et vérification d'erreurs.
126
- - Contenu **riche** possible (par exemple, passer des nœuds React comme traductions).
127
- - **Routage localisé** prêt à l'emploi.
128
- - Intégré aux outils de build populaires (CRA, Vite) pour une configuration facile.
103
+ ### 4) Contenu riche & formatage
129
104
 
130
- ### Inconvénients
105
+ - **react-intl** : Excellente prise en charge de **ICU** pour les pluriels, sélections, dates/nombres et composition de messages. JSX peut être utilisé, mais le modèle mental reste centré sur le message.
106
+ - **react-i18next** : Interpolation flexible et **`<Trans>`** pour intégrer des éléments/composants ; ICU disponible via un plugin.
107
+ - **Intlayer** : Les fichiers de contenu peuvent inclure des **nœuds riches** (JSX/Markdown/composants) et des **métadonnées**. Le formatage utilise Intl en interne ; les modèles de pluriels sont ergonomiques.
131
108
 
132
- - Encore **relativement nouveau** par rapport à React-Intl ou React-i18next.
133
- - Accent plus fort sur une approche de "déclaration de contenu au niveau des composants" - peut être un changement par rapport aux catalogues .json typiques.
134
- - Écosystème et communauté plus petits par rapport aux bibliothèques plus établies.
109
+ **Pourquoi c’est important :** Les textes UI complexes (liens, parties en gras, composants en ligne) sont plus faciles à gérer lorsque la bibliothèque intègre proprement les nœuds React.
135
110
 
136
111
  ---
137
112
 
138
- ## 5. Comparaison des fonctionnalités
113
+ ### 5) Performance et comportement de chargement
114
+
115
+ - **react-intl / react-i18next** : Vous gérez généralement la **division des catalogues** et le **chargement paresseux** manuellement (espaces de noms/importations dynamiques). Efficace mais demande de la rigueur.
116
+ - **Intlayer** : Effectue un **tree-shaking** des dictionnaires inutilisés et prend en charge le **chargement paresseux par dictionnaire/par langue** prêt à l'emploi.
139
117
 
140
- | **Fonctionnalité** | **React-Intl** | **React-i18next** | **Intlayer** |
141
- | ------------------------------- | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
142
- | **Cas d'utilisation principal** | Traductions basées sur des chaînes, formatage de date/nombre, syntaxe de message ICU | i18n complet avec changement dynamique facile, imbrication, écosystème de plugins | Traductions type-safe avec un accent sur le contenu déclaratif, routage localisé & middleware serveur optionnel |
143
- | **Approche** | Utilisez `<IntlProvider>` et les composants de message FormatJS | Utilisez `I18nextProvider` et le hook `useTranslation()` | Utilisez `<IntlayerProvider>` et le hook `useIntlayer()` avec des déclarations de contenu |
144
- | **Format de localisation** | Chaînes basées sur ICU (catalogues JSON ou JavaScript) | Fichiers de ressources JSON (ou chargeurs personnalisés). Le format ICU est optionnel via i18next plugin | Déclarations `.content.[ts/js/tsx]` ou JSON ; peut contenir des chaînes ou des composants React |
145
- | **Routage** | Géré à l'extérieur (pas de routage localisé intégré) | Géré à l'extérieur avec des plugins i18next (détection de chemin, sous-domaine, etc.) | Support de routage localisé intégré (par exemple, `/fr/about`, `/en/about`), plus un middleware serveur optionnel (pour SSR/Vite) |
146
- | **Support TypeScript** | Bon (typages pour les packages officiels) | Bon mais configuration supplémentaire pour les traductions typées si vous voulez un contrôle strict | Excellent (définitions de type auto-générées pour les clés et traductions de contenu) |
147
- | **Pluralisation & Formatage** | Avancé : Formatage intégré de date/heure/nombre, support de plural/gendre | Pluralisation configurable. Le formatage de date/heure est généralement réalisé via des bibliothèques externes ou le plugin i18next | Peut s'appuyer sur JavaScript Intl standard ou intégrer la logique dans le contenu. Ne pas aussi spécialisé que FormatJS, mais gère les cas typiques. |
148
- | **Communauté & Écosystème** | Grand, partie de l'écosystème FormatJS | Très grand, très actif, beaucoup de plugins (détection, mise en cache, frameworks) | Plus petit mais en croissance ; approche moderne et open-source |
149
- | **Courbe d'apprentissage** | Modérée (apprentissage de la syntaxe de message ICU, conventions FormatJS) | Faible à modérée (utilisation simple, mais la configuration avancée peut devenir verbeuse) | Modérée (concept de déclarations de contenu et étapes de construction spécialisées) |
118
+ **Pourquoi c'est important :** Des bundles plus petits et moins de chaînes inutilisées améliorent les performances au démarrage et lors de la navigation.
150
119
 
151
120
  ---
152
121
 
153
- ## 6. Quand choisir chacun
122
+ ### 6) DX, outils & maintenance
154
123
 
155
- 1. **React-Intl**
124
+ - **react-intl / react-i18next** : Large écosystème communautaire ; pour les flux éditoriaux, vous adoptez généralement des plateformes de localisation externes.
125
+ - **Intlayer** : Propose un **éditeur visuel gratuit** et un **CMS optionnel** (conservez le contenu dans Git ou externalisez-le). Offre également une **extension VSCode** pour la rédaction de contenu et une **traduction assistée par IA** utilisant vos propres clés de fournisseur.
156
126
 
157
- - Vous avez besoin de **formatage puissant** pour les dates/heures/nombres et d'une **syntaxe de message ICU** solide.
158
- - Vous préférez une approche plus **basée sur les standards** pour les traductions.
159
- - Vous n'avez pas besoin de routage localisé ou de clés de traduction fortement typées.
127
+ **Pourquoi c’est important :** Les outils intégrés raccourcissent la boucle entre les développeurs et les auteurs de contenu - moins de code de liaison, moins de dépendances externes.
160
128
 
161
- 2. **React-i18next**
129
+ ---
162
130
 
163
- - Vous avez besoin d'une solution **flexible, établie** avec un chargement de traduction **dynamique** et **à la demande**.
164
- - Vous souhaitez une détection de langage **basée sur des plugins** (par exemple, à partir de l'URL, des cookies, du stockage local) ou un cache avancé.
165
- - Vous avez besoin du plus grand écosystème, avec de nombreuses intégrations existantes pour divers frameworks (Next.js, React Native, etc.).
131
+ ## Quand choisir lequel ?
166
132
 
167
- 3. **Intlayer**
168
- - Vous souhaitez une forte intégration TypeScript avec des _types auto-générés_, garantissant que vous ne manquiez que rarement une clé de traduction.
169
- - Vous préférez un contenu **déclaratif** proche du composant, pouvant inclure des nœuds React ou une logique avancée dans les traductions.
170
- - Vous exigez un **routage localisé intégré** ou vous souhaitez l'incorporer facilement dans votre configuration SSR ou Vite.
171
- - Vous souhaitez une approche moderne ou voulez simplement une seule bibliothèque qui couvre à la fois la **gestion de contenu** (i18n) et le **routage** de manière sécurisée en termes de types.
133
+ - **Choisissez react-intl** si vous souhaitez un formatage de messages **priorisant ICU** avec une API simple et conforme aux standards, et que votre équipe est à l’aise pour maintenir manuellement les catalogues et les vérifications de sécurité.
134
+ - **Choisissez react-i18next** si vous avez besoin de **l’écosystème étendu d’i18next** (détecteurs, backends, plugin ICU, intégrations) et acceptez plus de configuration pour gagner en flexibilité.
135
+ - **Choisissez Intlayer** si vous valorisez le **contenu scoped par composant**, le **TypeScript strict**, les **garanties à la compilation**, le **tree-shaking**, et les outils éditoriaux **tout-en-un** - particulièrement pour les applications React **grandes et modulaires**.
172
136
 
173
137
  ---
174
138
 
175
- ## 7. Conclusion
176
-
177
- Chaque bibliothèque offre une solution robuste pour internationaliser une application React :
178
-
179
- - **React-Intl** excelle dans le formatage des messages et est un choix populaire pour les solutions d'entreprise axées sur la syntaxe des messages ICU.
180
- - **React-i18next** fournit un environnement hautement flexible et piloté par des plugins pour des besoins i18n avancés ou dynamiques.
181
- - **Intlayer** offre une approche **moderne et fortement typée** qui fusionne les déclarations de contenu, le routage localisé avancé et l'intégration pilotée par des plugins (CRA, Vite).
139
+ ## Notes pratiques de migration (react-intl / react-i18next → Intlayer)
182
140
 
183
- Votre choix dépend largement des exigences du projet, de l'expérience souhaitée des développeurs (DX) et de l'importance que vous accordez à des traductions typées ou à un routage avancé. Si vous valorisez un routage localisé intégré et l'intégration TypeScript, **Intlayer** pourrait être le plus attrayant. Si vous souhaitez une solution éprouvée, riche en écosystème, **React-i18next** est un excellent choix. Pour des besoins de formatage basés sur ICU simples, **React-Intl** est une option fiable.
141
+ - **Migrez de manière incrémentale** : Commencez par une fonctionnalité ou une route ; conservez les catalogues hérités en parallèle pendant la transition.
142
+ - **Adoptez des dictionnaires par composant** : Placez le contenu au même endroit que les composants pour réduire le couplage.
143
+ - **Activez les vérifications strictes** : Laissez les erreurs à la compilation révéler tôt les clés/locales manquantes dans l’intégration continue.
144
+ - **Mesurez les bundles** : Attendez-vous à des réductions à mesure que les chaînes inutilisées sont éliminées.
184
145
 
185
146
  ---
186
147
 
187
- ### Lecture supplémentaire
148
+ ## Conclusion
188
149
 
189
- - [Documentation de React-Intl](https://formatjs.io/docs/react-intl/)
190
- - [Documentation de React-i18next](https://react.i18next.com/)
191
- - [Guide de démarrage Intlayer + CRA](/#) (de votre doc)
192
- - [Guide de démarrage Intlayer + Vite & React](/#) (de votre doc)
150
+ Les trois bibliothèques permettent de localiser React efficacement. Ce qui fait la différence, c’est la quantité d’**infrastructure** que vous devez construire pour atteindre une configuration **sûre et évolutive** :
193
151
 
194
- N'hésitez pas à combiner et assortir des approches pour répondre à vos exigences, il n'y a pas de solution unique, et chaque bibliothèque continue d'évoluer pour répondre à de nouveaux cas d'utilisation dans l'écosystème React.
152
+ - Avec **Intlayer**, le **contenu modulaire**, la **typage strict en TS**, la **sécurité à la compilation**, les **bundles optimisés par tree-shaking** et les **outils éditoriaux** sont des standards - pas des corvées.
153
+ - Si votre équipe valorise la **maintenabilité et la rapidité** dans des applications React multi-langues et pilotées par composants, Intlayer offre aujourd’hui le flux de travail développeur et contenu le **plus complet**.
@@ -0,0 +1,269 @@
1
+ ---
2
+ createdAt: 2024-08-11
3
+ updatedAt: 2025-08-23
4
+ title: vue-i18n vs Intlayer
5
+ description: Comparaison de vue-i18n avec Intlayer pour l'internationalisation (i18n) dans les applications Vue/Nuxt
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - Internationalisation
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 | Internationalisation Vue (i18n)
21
+
22
+ Ce guide compare deux options i18n populaires pour **Vue 3** (et **Nuxt**) : **vue-i18n** et **Intlayer**.
23
+ Nous nous concentrons sur les outils modernes de Vue (Vite, Composition API) et évaluons :
24
+
25
+ 1. **Architecture & organisation du contenu**
26
+ 2. **TypeScript & sécurité**
27
+ 3. **Gestion des traductions manquantes**
28
+ 4. **Stratégie de routage & URL**
29
+ 5. **Performance & comportement de chargement**
30
+ 6. **Expérience développeur (DX), outils & maintenance**
31
+ 7. **SEO & évolutivité pour les grands projets**
32
+
33
+ > **en résumé** : Les deux peuvent localiser des applications Vue. Si vous souhaitez un **contenu scoped par composant**, des **types TypeScript stricts**, des **vérifications des clés manquantes à la compilation**, des **dictionnaires optimisés par tree-shaking**, ainsi que des **helpers intégrés pour le routeur/SEO** et en plus un **éditeur visuel & des traductions assistées par IA**, **Intlayer** est le choix le plus complet et moderne.
34
+
35
+ ---
36
+
37
+ ## Positionnement général
38
+
39
+ - **vue-i18n** - La bibliothèque i18n de référence pour Vue. Formatage flexible des messages (style ICU), blocs SFC `<i18n>` pour les messages locaux, et un large écosystème. La sécurité et la maintenance à grande échelle dépendent principalement de vous.
40
+ - **Intlayer** - Modèle de contenu centré sur les composants pour Vue/Vite/Nuxt avec **typage TS strict**, **vérifications à la compilation**, **tree-shaking**, **helpers pour le routeur & SEO**, **éditeur visuel/CMS** optionnel, et **traductions assistées par IA**.
41
+
42
+ ---
43
+
44
+ ## Comparaison des fonctionnalités côte à côte (axée sur Vue)
45
+
46
+ | Fonctionnalité | **Intlayer** | **vue-i18n** |
47
+ | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
48
+ | **Traductions proches des composants** | ✅ Oui, contenu collé par composant (ex. `MyComp.content.ts`) | ✅ Oui, via les blocs SFC `<i18n>` (optionnel) |
49
+ | **Intégration TypeScript** | ✅ Avancée, types **stricts** auto-générés & autocomplétion des clés | ✅ Bon typage ; **la sécurité stricte des clés nécessite une configuration/discipline supplémentaire** |
50
+ | **Détection des traductions manquantes** | ✅ Avertissements/erreurs **à la compilation** et remontée dans TS | ⚠️ Repli/exceptions à l'exécution |
51
+ | **Contenu enrichi (composants/Markdown)** | ✅ Support direct pour les nœuds enrichis et les fichiers de contenu Markdown | ⚠️ Limité (composants via `<i18n-t>`, Markdown via des plugins externes) |
52
+ | **Traduction assistée par IA** | ✅ Flux de travail intégrés utilisant vos propres clés de fournisseur IA | ❌ Non intégré |
53
+ | **Éditeur visuel / CMS** | ✅ Éditeur visuel gratuit & CMS optionnel | ❌ Non intégré (utilisez des plateformes externes) |
54
+ | **Routage localisé** | ✅ Aides pour Vue Router/Nuxt afin de générer des chemins localisés, des URLs et des `hreflang` | ⚠️ Pas natif (utiliser Nuxt i18n ou une configuration personnalisée de Vue Router) |
55
+ | **Génération dynamique de routes** | ✅ Oui | ❌ Non fourni (fourni par Nuxt i18n) |
56
+ | **Pluriels et formatage** | ✅ Modèles d'énumération ; formatteurs basés sur Intl | ✅ Messages au format ICU ; formatteurs Intl |
57
+ | **Formats de contenu** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML en cours de développement) | ✅ `.json`, `.js` (plus blocs SFC `<i18n>`) |
58
+ | **Support ICU** | ⚠️ En cours de développement | ✅ Oui |
59
+ | **Aides SEO (sitemap, robots, métadonnées)** | ✅ Aides intégrées (indépendantes du framework) | ❌ Pas natif (Nuxt i18n/communauté) |
60
+ | **SSR/SSG** | ✅ Fonctionne avec Vue SSR et Nuxt ; ne bloque pas le rendu statique | ✅ Fonctionne avec Vue SSR/Nuxt |
61
+ | **Tree-shaking (livrer uniquement le contenu utilisé)** | ✅ Par composant au moment de la compilation | ⚠️ Partiel ; nécessite un découpage manuel du code/messages asynchrones |
62
+ | **Chargement paresseux** | ✅ Par locale / par dictionnaire | ✅ Messages de locale asynchrones supportés |
63
+ | **Purge du contenu inutilisé** | ✅ Oui (au moment de la compilation) | ❌ Non intégré |
64
+ | **Maintenabilité des grands projets** | ✅ Encourage une structure modulaire, adaptée aux design systems | ✅ Possible, mais nécessite une discipline stricte des fichiers/namespaces |
65
+ | **Écosystème / communauté** | ⚠️ Plus petite mais en forte croissance | ✅ Large et mature dans l'écosystème Vue |
66
+
67
+ ---
68
+
69
+ ## Comparaison approfondie
70
+
71
+ ### 1) Architecture et évolutivité
72
+
73
+ - **vue-i18n** : Les configurations courantes utilisent des **catalogues centralisés** par locale (optionnellement divisés en fichiers/namespaces). Les blocs SFC `<i18n>` permettent des messages locaux, mais les équipes reviennent souvent à des catalogues partagés à mesure que les projets grandissent.
74
+ - **Intlayer** : Favorise des **dictionnaires par composant** stockés à côté du composant qu'ils servent. Cela réduit les conflits entre équipes, maintient le contenu facilement accessible et limite naturellement la dérive/les clés inutilisées.
75
+
76
+ **Pourquoi c'est important :** Dans les grandes applications Vue ou les design systems, le **contenu modulaire** évolue mieux que les catalogues monolithiques.
77
+
78
+ ---
79
+
80
+ ### 2) TypeScript & sécurité
81
+
82
+ - **vue-i18n** : Bon support TS ; la **typage strict des clés** nécessite généralement des schémas/génériques personnalisés et des conventions rigoureuses.
83
+ - **Intlayer** : **Génère des types stricts** à partir de votre contenu, offrant **l’autocomplétion dans l’IDE** et des **erreurs à la compilation** pour les fautes de frappe ou les clés manquantes.
84
+
85
+ **Pourquoi c’est important :** Le typage fort détecte les problèmes **avant** l’exécution.
86
+
87
+ ---
88
+
89
+ ### 3) Gestion des traductions manquantes
90
+
91
+ - **vue-i18n** : Avertissements/repli **à l’exécution** (par exemple, locale ou clé de repli).
92
+ - **Intlayer** : Détection **à la compilation** avec avertissements/erreurs sur les locales et les clés.
93
+
94
+ **Pourquoi c’est important :** L’application à la compilation garantit une interface utilisateur propre et cohérente en production.
95
+
96
+ ---
97
+
98
+ ### 4) Stratégie de routage et d’URL (Vue Router/Nuxt)
99
+
100
+ - **Les deux** peuvent fonctionner avec des routes localisées.
101
+ - **Intlayer** fournit des helpers pour **générer des chemins localisés**, **gérer les préfixes de locale**, et émettre des **`<link rel="alternate" hreflang>`** pour le SEO. Avec Nuxt, il complète le routage du framework.
102
+
103
+ **Pourquoi c’est important :** Moins de couches personnalisées et un **SEO plus propre** à travers les locales.
104
+
105
+ ---
106
+
107
+ ### 5) Performance et comportement de chargement
108
+
109
+ - **vue-i18n** : Supporte les messages de locale asynchrones ; éviter le sur-emballage dépend de vous (divisez les catalogues avec soin).
110
+ - **Intlayer** : **Élimine le code mort** à la compilation et **charge paresseusement par dictionnaire/locale**. Le contenu inutilisé n’est pas embarqué.
111
+
112
+ **Pourquoi c’est important :** Des bundles plus petits et un démarrage plus rapide pour les applications Vue multi-locales.
113
+
114
+ ---
115
+
116
+ ### 6) Expérience développeur et outils
117
+
118
+ - **vue-i18n** : Documentation et communauté matures ; vous vous appuierez généralement sur des **plateformes de localisation externes** pour les flux éditoriaux.
119
+ - **Intlayer** : Propose un **éditeur visuel gratuit**, un **CMS** optionnel (compatible Git ou externalisé), une **extension VSCode**, des utilitaires **CLI/CI**, et des **traductions assistées par IA** utilisant vos propres clés de fournisseur.
120
+
121
+ **Pourquoi c’est important :** Réduction des coûts opérationnels et boucle dev–contenu plus courte.
122
+
123
+ ---
124
+
125
+ ### 7) SEO, SSR & SSG
126
+
127
+ - **Les deux** fonctionnent avec Vue SSR et Nuxt.
128
+ - **Intlayer** : Ajoute des **aides SEO** (sitemaps/métadonnées/`hreflang`) indépendantes du framework et compatibles avec les builds Vue/Nuxt.
129
+
130
+ **Pourquoi c’est important :** SEO international sans câblage personnalisé.
131
+
132
+ ---
133
+
134
+ ## Pourquoi Intlayer ? (Problème & approche)
135
+
136
+ La plupart des stacks i18n (y compris **vue-i18n**) partent de **catalogues centralisés** :
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 avec des dossiers par langue :
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
+ Cela ralentit souvent le développement à mesure que les applications grandissent :
169
+
170
+ 1. **Pour un nouveau composant**, vous créez/modifiez des catalogues distants, configurez les espaces de noms, et traduisez (souvent via un copier/coller manuel depuis des outils d’IA).
171
+ 2. **Lors de modifications de composants**, vous recherchez les clés partagées, traduisez, maintenez les locales synchronisées, supprimez les clés obsolètes, et alignez les structures JSON.
172
+
173
+ **Intlayer** scope le contenu **par composant** et le garde **à côté du code**, comme nous le faisons déjà avec le CSS, les stories, les tests et la documentation :
174
+
175
+ ```bash
176
+ .
177
+ └── components
178
+ └── MyComponent
179
+ ├── MyComponent.content.ts
180
+ └── MyComponent.vue
181
+ ```
182
+
183
+ **Déclaration du contenu** (par composant) :
184
+
185
+ ```ts fileName="./components/MyComponent/MyComponent.content.ts"
186
+ import { t, type Dictionary } from "intlayer";
187
+
188
+ // Contenu d'exemple pour le composant
189
+ const componentExampleContent = {
190
+ key: "component-example",
191
+ content: {
192
+ greeting: t({
193
+ en: "Hello World",
194
+ es: "Hola Mundo",
195
+ fr: "Bonjour le monde",
196
+ }),
197
+ },
198
+ } satisfies Dictionary;
199
+
200
+ export default componentExampleContent;
201
+ ```
202
+
203
+ **Utilisation dans Vue** (Composition API) :
204
+
205
+ ```vue fileName="./components/MyComponent/MyComponent.vue"
206
+ <script setup lang="ts">
207
+ import { useIntlayer } from "vue-intlayer"; // Intégration Vue
208
+ const { greeting } = useIntlayer("component-example");
209
+ </script>
210
+
211
+ <template>
212
+ <span>{{ greeting }}</span>
213
+ </template>
214
+ ```
215
+
216
+ Cette approche :
217
+
218
+ - **Accélère le développement** (déclarez une fois ; autocomplétion IDE/IA).
219
+ - **Nettoie la base de code** (1 composant = 1 dictionnaire).
220
+ - **Facilite la duplication/migration** (copiez un composant et son contenu ensemble).
221
+ - **Évite les clés mortes** (les composants inutilisés n’importent pas de contenu).
222
+ - **Optimise le chargement** (les composants chargés à la demande apportent leur contenu avec eux).
223
+
224
+ ---
225
+
226
+ ## Fonctionnalités supplémentaires d’Intlayer (pertinentes pour Vue)
227
+
228
+ - **Support multi-framework** : Fonctionne avec Vue, Nuxt, Vite, React, Express, et plus encore.
229
+ - **Gestion de contenu pilotée par JavaScript** : Déclarez dans le code avec une flexibilité totale.
230
+ - **Fichier de déclaration par locale** : Initialisez toutes les locales et laissez les outils générer le reste.
231
+ - **Environnement typé sécurisé** : Configuration TS robuste avec autocomplétion.
232
+ - **Récupération de contenu simplifiée** : Un seul hook/composable pour récupérer tout le contenu d’un dictionnaire.
233
+ - **Codebase organisée** : 1 composant = 1 dictionnaire dans le même dossier.
234
+ - **Routage amélioré** : Helpers pour les chemins localisés et métadonnées de **Vue Router/Nuxt**.
235
+ - **Support Markdown** : Importez du Markdown distant/local par locale ; exposez le frontmatter au code.
236
+ - **Éditeur visuel gratuit & CMS optionnel** : Création de contenu sans plateforme de localisation payante ; synchronisation compatible Git.
237
+ - **Contenu tree-shakable** : Ne livre que ce qui est utilisé ; supporte le chargement paresseux.
238
+ - **Compatible rendu statique** : Ne bloque pas le SSG.
239
+ - **Traductions assistées par IA** : Traduisez en 231 langues en utilisant votre propre fournisseur IA/clé API.
240
+ - **Serveur MCP & extension VSCode** : Automatisez les workflows i18n et la rédaction directement dans votre IDE.
241
+ - **Interopérabilité** : Ponts avec **vue-i18n**, **react-i18next** et **react-intl** selon les besoins.
242
+
243
+ ---
244
+
245
+ ## Quand choisir quoi ?
246
+
247
+ - **Choisissez vue-i18n** si vous souhaitez l’**approche standard Vue**, que vous êtes à l’aise pour gérer vous-même les catalogues/namespaces, et que votre application est de taille **petite à moyenne** (ou si vous utilisez déjà Nuxt i18n).
248
+ - **Choisissez Intlayer** si vous valorisez le **contenu scoped par composant**, un **TypeScript strict**, des **garanties à la compilation**, le **tree-shaking**, et des outils intégrés pour le routage/SEO/éditeur - particulièrement pour des bases de code **Vue/Nuxt larges et modulaires**.
249
+
250
+ ---
251
+
252
+ ## Notes pratiques de migration (vue-i18n → Intlayer)
253
+
254
+ - **Commencez par fonctionnalité** : Déplacez une route/vue/composant à la fois vers les dictionnaires locaux d’Intlayer.
255
+ - **Pont pendant la migration** : Gardez les catalogues vue-i18n en parallèle ; remplacez progressivement les recherches.
256
+ - **Activez les vérifications strictes** : Laissez la détection à la compilation révéler tôt les clés/locales manquantes.
257
+ - **Adoptez les helpers routeur/SEO** : Standardisez la détection de la locale et les balises `hreflang`.
258
+ - **Mesurez les bundles** : Attendez-vous à des **réductions de taille de bundle** à mesure que le contenu inutilisé est exclu.
259
+
260
+ ---
261
+
262
+ ## Conclusion
263
+
264
+ Les deux, **vue-i18n** et **Intlayer**, localisent bien les applications Vue. La différence réside dans **la quantité de travail que vous devez faire vous-même** pour obtenir une configuration robuste et évolutive :
265
+
266
+ - Avec **Intlayer**, le **contenu modulaire**, **TS strict**, la **sécurité à la compilation**, les **bundles optimisés par tree-shaking**, ainsi que les **outils pour le routeur/SEO/éditeur** sont disponibles **nativement**.
267
+ - Si votre équipe privilégie la **maintenabilité et la rapidité** dans une application Vue/Nuxt multi-locale et pilotée par composants, Intlayer offre aujourd’hui l’expérience la **plus complète**.
268
+
269
+ Consultez la documentation ['Pourquoi Intlayer ?'](https://intlayer.org/doc/why) pour plus de détails.
@@ -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 को एक्सटेंशन करें
6
6
  keywords:
@@ -24,7 +24,6 @@ next-i18next और Intlayer दोनों ओपन-सोर्स अंत
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
  };