@intlayer/docs 5.8.0-canary.0 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +2 -2
  2. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  3. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  4. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  5. package/blog/de/intlayer_with_next-i18next.md +2 -2
  6. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  7. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  8. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  9. package/blog/en/intlayer_with_next-i18next.md +2 -2
  10. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +89 -220
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +85 -123
  12. package/blog/en/vue-i18n_vs_intlayer.md +268 -0
  13. package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
  14. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  15. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  16. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  17. package/blog/es/intlayer_with_next-i18next.md +2 -2
  18. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  19. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  20. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  21. package/blog/fr/intlayer_with_next-i18next.md +2 -2
  22. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  23. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  24. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  25. package/blog/hi/intlayer_with_next-i18next.md +2 -2
  26. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  27. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  28. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  29. package/blog/it/intlayer_with_next-i18next.md +2 -2
  30. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  31. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  32. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  33. package/blog/ja/intlayer_with_next-i18next.md +2 -2
  34. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  35. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  36. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  37. package/blog/ko/intlayer_with_next-i18next.md +2 -2
  38. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  39. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  40. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  41. package/blog/pt/intlayer_with_next-i18next.md +2 -2
  42. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  43. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  44. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  45. package/blog/ru/intlayer_with_next-i18next.md +2 -2
  46. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  47. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  48. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  49. package/blog/zh/intlayer_with_next-i18next.md +2 -2
  50. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  51. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  52. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  53. package/dist/cjs/generated/blog.entry.cjs +41 -0
  54. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  55. package/dist/esm/generated/blog.entry.mjs +41 -0
  56. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  57. package/dist/types/generated/blog.entry.d.ts +1 -0
  58. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  59. package/docs/ar/formatters.md +417 -31
  60. package/docs/ar/how_works_intlayer.md +2 -4
  61. package/docs/ar/interest_of_intlayer.md +7 -10
  62. package/docs/ar/intlayer_CMS.md +2 -3
  63. package/docs/ar/intlayer_visual_editor.md +2 -3
  64. package/docs/ar/intlayer_with_tanstack.md +1 -1
  65. package/docs/ar/introduction.md +4 -4
  66. package/docs/de/formatters.md +444 -34
  67. package/docs/de/introduction.md +2 -2
  68. package/docs/en/dictionary/enumeration.md +2 -2
  69. package/docs/en/dictionary/function_fetching.md +2 -2
  70. package/docs/en/dictionary/get_started.md +2 -2
  71. package/docs/en/dictionary/translation.md +2 -2
  72. package/docs/en/formatters.md +383 -15
  73. package/docs/en/how_works_intlayer.md +2 -4
  74. package/docs/en/interest_of_intlayer.md +40 -29
  75. package/docs/en/intlayer_CMS.md +2 -3
  76. package/docs/en/intlayer_visual_editor.md +2 -3
  77. package/docs/en/intlayer_with_create_react_app.md +2 -2
  78. package/docs/en/intlayer_with_express.md +2 -2
  79. package/docs/en/intlayer_with_tanstack.md +1 -1
  80. package/docs/en/introduction.md +4 -4
  81. package/docs/en/packages/express-intlayer/index.md +2 -2
  82. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  83. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  84. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  85. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  86. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  87. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  88. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  89. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  90. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  91. package/docs/en/packages/intlayer/index.md +2 -2
  92. package/docs/en/packages/next-intlayer/index.md +2 -2
  93. package/docs/en/packages/next-intlayer/t.md +2 -2
  94. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  95. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  96. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  97. package/docs/en/packages/react-intlayer/index.md +2 -2
  98. package/docs/en/packages/react-intlayer/t.md +2 -2
  99. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  100. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  101. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  102. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  103. package/docs/en/packages/solid-intlayer/index.md +2 -2
  104. package/docs/en/packages/vite-intlayer/index.md +2 -2
  105. package/docs/en-GB/formatters.md +402 -16
  106. package/docs/en-GB/how_works_intlayer.md +2 -4
  107. package/docs/en-GB/interest_of_intlayer.md +7 -10
  108. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  109. package/docs/en-GB/introduction.md +2 -2
  110. package/docs/es/formatters.md +438 -28
  111. package/docs/es/how_works_intlayer.md +2 -4
  112. package/docs/es/interest_of_intlayer.md +7 -10
  113. package/docs/es/intlayer_with_tanstack.md +1 -1
  114. package/docs/es/introduction.md +2 -2
  115. package/docs/fr/formatters.md +438 -28
  116. package/docs/fr/how_works_intlayer.md +2 -4
  117. package/docs/fr/interest_of_intlayer.md +7 -10
  118. package/docs/fr/intlayer_with_tanstack.md +1 -1
  119. package/docs/fr/introduction.md +2 -2
  120. package/docs/hi/formatters.md +430 -39
  121. package/docs/hi/how_works_intlayer.md +2 -4
  122. package/docs/hi/interest_of_intlayer.md +7 -10
  123. package/docs/hi/intlayer_with_tanstack.md +1 -1
  124. package/docs/hi/introduction.md +2 -2
  125. package/docs/it/formatters.md +438 -30
  126. package/docs/it/how_works_intlayer.md +2 -4
  127. package/docs/it/interest_of_intlayer.md +7 -10
  128. package/docs/it/intlayer_with_tanstack.md +1 -1
  129. package/docs/it/introduction.md +2 -2
  130. package/docs/ja/formatters.md +435 -47
  131. package/docs/ja/how_works_intlayer.md +2 -4
  132. package/docs/ja/interest_of_intlayer.md +7 -10
  133. package/docs/ja/intlayer_with_tanstack.md +1 -1
  134. package/docs/ja/introduction.md +2 -2
  135. package/docs/ko/formatters.md +432 -41
  136. package/docs/ko/how_works_intlayer.md +2 -4
  137. package/docs/ko/interest_of_intlayer.md +7 -10
  138. package/docs/ko/intlayer_with_tanstack.md +1 -1
  139. package/docs/ko/introduction.md +2 -2
  140. package/docs/pt/formatters.md +416 -30
  141. package/docs/pt/how_works_intlayer.md +2 -4
  142. package/docs/pt/intlayer_with_tanstack.md +1 -1
  143. package/docs/pt/introduction.md +2 -2
  144. package/docs/ru/autoFill.md +2 -2
  145. package/docs/ru/configuration.md +1 -40
  146. package/docs/ru/formatters.md +438 -28
  147. package/docs/ru/how_works_intlayer.md +5 -7
  148. package/docs/ru/index.md +1 -1
  149. package/docs/ru/interest_of_intlayer.md +8 -11
  150. package/docs/ru/intlayer_CMS.md +7 -8
  151. package/docs/ru/intlayer_cli.md +4 -7
  152. package/docs/ru/intlayer_visual_editor.md +5 -6
  153. package/docs/ru/intlayer_with_angular.md +1 -1
  154. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  155. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  156. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  157. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  158. package/docs/ru/intlayer_with_nuxt.md +1 -1
  159. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  160. package/docs/ru/intlayer_with_tanstack.md +3 -3
  161. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  162. package/docs/ru/intlayer_with_vite+react.md +3 -3
  163. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  164. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  165. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  166. package/docs/ru/introduction.md +5 -5
  167. package/docs/ru/locale_mapper.md +1 -1
  168. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  169. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  170. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  171. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  172. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  173. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  174. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  175. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  176. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  177. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  178. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  179. package/docs/ru/packages/express-intlayer/index.md +3 -3
  180. package/docs/ru/packages/express-intlayer/t.md +1 -1
  181. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  182. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  183. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  184. package/docs/ru/packages/intlayer/index.md +3 -3
  185. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  186. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  187. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  188. package/docs/ru/packages/next-intlayer/index.md +4 -4
  189. package/docs/ru/packages/next-intlayer/t.md +4 -4
  190. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  191. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  192. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  193. package/docs/ru/packages/react-intlayer/index.md +4 -4
  194. package/docs/ru/packages/react-intlayer/t.md +4 -4
  195. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  196. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  197. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  198. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  199. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  200. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  201. package/docs/ru/per_locale_file.md +1 -1
  202. package/docs/ru/roadmap.md +3 -5
  203. package/docs/ru/vs_code_extension.md +1 -1
  204. package/docs/zh/formatters.md +446 -38
  205. package/docs/zh/how_works_intlayer.md +2 -4
  206. package/docs/zh/interest_of_intlayer.md +7 -10
  207. package/docs/zh/intlayer_with_tanstack.md +1 -1
  208. package/docs/zh/introduction.md +2 -2
  209. package/frequent_questions/ar/domain_routing.md +1 -1
  210. package/frequent_questions/en/domain_routing.md +1 -1
  211. package/frequent_questions/en-GB/domain_routing.md +1 -1
  212. package/frequent_questions/es/domain_routing.md +1 -1
  213. package/frequent_questions/fr/domain_routing.md +1 -1
  214. package/frequent_questions/hi/domain_routing.md +1 -1
  215. package/frequent_questions/it/domain_routing.md +1 -1
  216. package/frequent_questions/ko/domain_routing.md +1 -1
  217. package/frequent_questions/pt/domain_routing.md +1 -1
  218. package/frequent_questions/ru/domain_routing.md +1 -1
  219. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  220. package/frequent_questions/ru/static_rendering.md +1 -2
  221. package/frequent_questions/zh/domain_routing.md +1 -1
  222. package/package.json +7 -7
  223. package/src/generated/blog.entry.ts +41 -0
@@ -1,14 +1,14 @@
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: next-i18next vs next-intl vs Intlayer
5
- description: Comparar next-i18next con next-intl y Intlayer para la internacionalización (i18n) de una aplicación Next.js
5
+ description: Comparación de next-i18next con next-intl e Intlayer para la internacionalización (i18n) de una aplicación Next.js
6
6
  keywords:
7
7
  - next-intl
8
8
  - next-i18next
9
9
  - Intlayer
10
10
  - Internacionalización
11
- - Blogumentación
11
+ - Blog
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,269 +17,146 @@ slugs:
17
17
  - next-i18next-vs-next-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # next-i18next VS next-intl VS Intlayer | Next.js Internacionalización (i18n)
20
+ # next-i18next VS next-intl VS intlayer | Internacionalización (i18n) en Next.js
21
21
 
22
- A continuación se presenta una comparación concisa de **tres bibliotecas populares** para la internacionalización (i18n) de una aplicación Next.js: **next-intl**, **next-i18next** e **Intlayer**.
22
+ Esta guía compara tres opciones de i18n ampliamente utilizadas para **Next.js**: **next-intl**, **next-i18next** e **Intlayer**.
23
+ Nos centramos en **Next.js 13+ App Router** (con **React Server Components**) y evaluamos:
23
24
 
24
- Este documento destaca criterios clave:
25
+ 1. **Arquitectura y organización del contenido**
26
+ 2. **TypeScript y seguridad**
27
+ 3. **Manejo de traducciones faltantes**
28
+ 4. **Enrutamiento y middleware**
29
+ 5. **Rendimiento y comportamiento de carga**
30
+ 6. **Experiencia del desarrollador (DX), herramientas y mantenimiento**
31
+ 7. **SEO y escalabilidad para proyectos grandes**
25
32
 
26
- 1. **Arquitectura** (manteniendo las traducciones cerca de sus componentes)
27
- 2. **Soporte para TypeScript**
28
- 3. **Gestión de traducciones faltantes**
29
- 4. **Soporte para Componentes del Servidor**
30
- 5. **Enrutamiento mejorado y middleware** para Next.js
31
- 6. **Simplicidad de configuración**
32
-
33
- La guía también proporciona una **visión detallada de Intlayer**, mostrando por qué puede ser una opción sólida, especialmente para Next.js 13+, incluyendo **App Router** y **Componentes del Servidor**.
33
+ > **resumen**: Los tres pueden localizar una aplicación Next.js. Si deseas **contenido con alcance por componente**, **tipos estrictos en TypeScript**, **verificaciones de claves faltantes en tiempo de compilación**, **diccionarios optimizados por tree-shaking** y **helpers de App Router y SEO de primera clase**, **Intlayer** es la opción más completa y moderna.
34
34
 
35
35
  ---
36
36
 
37
- ## Descripción general de cada biblioteca
38
-
39
- ### 1. next-intl
37
+ ## Posicionamiento a alto nivel
40
38
 
41
- **Enfoque principal**: Configuración rápida y fácil con un enfoque ligero para la localización.
39
+ - **next-intl** - Formateo de mensajes ligero y sencillo con soporte sólido para Next.js. Los catálogos centralizados son comunes; la experiencia del desarrollador (DX) es simple, pero la seguridad y el mantenimiento a gran escala siguen siendo principalmente tu responsabilidad.
40
+ - **next-i18next** - i18next con la apariencia de Next.js. Ecosistema maduro y características mediante plugins (por ejemplo, ICU), pero la configuración puede ser extensa y los catálogos tienden a centralizarse a medida que los proyectos crecen.
41
+ - **Intlayer** - Modelo de contenido centrado en componentes para Next.js, **tipado estricto en TS**, **verificaciones en tiempo de compilación**, **tree-shaking**, **middleware integrado y helpers de SEO**, **Editor Visual/CMS** opcional y **traducciones asistidas por IA**.
42
42
 
43
- - **Arquitectura**: Fomenta colocar traducciones en una sola carpeta (por ejemplo, `locales/`), pero también permite múltiples estrategias. No impone estrictamente una arquitectura de “traducción por componente”.
44
- - **Soporte para TypeScript**: Integración básica de TypeScript. Existen algunas definiciones de tipo, pero no se centran en gran medida en la generación automática de definiciones de TypeScript a partir de tus archivos de traducción.
45
- - **Traducciones faltantes**: Mecanismo de retroceso básico. Por defecto, retrocede a una clave o una cadena de idioma predeterminado. No hay herramientas robustas listas para usar para comprobaciones avanzadas de traducciones faltantes.
46
- - **Soporte para Componentes del Servidor**: Funciona con Next.js 13+ en general, pero el patrón es menos especializado para un uso profundo del lado del servidor (por ejemplo, componentes del servidor con enrutamiento dinámico complejo).
47
- - **Enrutamiento y Middleware**: El soporte para middleware es posible, pero limitado. Normalmente, se basa en el `Middleware` de Next.js para la detección de idiomas o configuración manual para reescribir rutas de idiomas.
48
- - **Simplicidad de configuración**: Muy directo. Se necesita un mínimo de estructura.
43
+ ---
49
44
 
50
- **Uso cuando**: Quieres un enfoque más simple o te sientes cómodo gestionando tus traducciones de manera más convencional (como una carpeta con archivos JSON de idiomas).
45
+ ## Comparación de características lado a lado (enfocado en Next.js)
46
+
47
+ | Característica | `next-intlayer` (Intlayer) | `next-intl` | `next-i18next` |
48
+ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
49
+ | **Traducciones Cerca de los Componentes** | ✅ Sí, contenido colocalizado con cada componente | ❌ No | ❌ No |
50
+ | **Integración con TypeScript** | ✅ Avanzada, tipos estrictos generados automáticamente | ✅ Buena | ⚠️ Básica |
51
+ | **Detección de Traducciones Faltantes** | ✅ Resaltado de errores en TypeScript y error/advertencia en tiempo de compilación | ⚠️ Recurso alternativo en tiempo de ejecución | ⚠️ Recurso alternativo en tiempo de ejecución |
52
+ | **Contenido Enriquecido (JSX/Markdown/componentes)** | ✅ Soporte directo | ❌ No diseñado para nodos enriquecidos | ⚠️ Limitado |
53
+ | **Traducción impulsada por IA** | ✅ Sí, soporta múltiples proveedores de IA. Usable con tus propias claves API. Considera el contexto de tu aplicación y el alcance del contenido | ❌ No | ❌ No |
54
+ | **Editor Visual** | ✅ Sí, Editor Visual local + CMS opcional; puede externalizar contenido de la base de código; embebible | ❌ No / disponible a través de plataformas externas de localización | ❌ No / disponible a través de plataformas externas de localización |
55
+ | **Enrutamiento Localizado** | ✅ Sí, soporta rutas localizadas desde el inicio (funciona con Next.js y Vite) | ✅ Integrado, App Router soporta el segmento `[locale]` | ✅ Integrado |
56
+ | **Generación Dinámica de Rutas** | ✅ Sí | ✅ Sí | ✅ Sí |
57
+ | **Pluralización** | ✅ Patrones basados en enumeraciones | ✅ Bueno | ✅ Bueno |
58
+ | **Formato (fechas, números, monedas)** | ✅ Formateadores optimizados (Intl en el núcleo) | ✅ Bueno (helpers de Intl) | ✅ Bueno (helpers de Intl) |
59
+ | **Formato de contenido** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml en desarrollo) | ✅ .json, .js, .ts | ⚠️ .json |
60
+ | **Soporte ICU** | ⚠️ En desarrollo | ✅ Sí | ⚠️ A través de plugin (`i18next-icu`) |
61
+ | **Ayudantes SEO (hreflang, sitemap)** | ✅ Herramientas integradas: ayudantes para sitemap, robots.txt, metadatos | ✅ Bueno | ✅ Bueno |
62
+ | **Ecosistema / Comunidad** | ⚠️ Más pequeño pero creciendo rápido y reactivo | ✅ Mediano, enfocado en Next.js | ✅ Mediano, enfocado en Next.js |
63
+ | **Renderizado del lado del servidor y Componentes del Servidor** | ✅ Sí, optimizado para SSR / Componentes del Servidor de React | ⚠️ Soportado a nivel de página pero es necesario pasar funciones t en el árbol de componentes para los componentes hijos del servidor | ⚠️ Soportado a nivel de página pero es necesario pasar funciones t en el árbol de componentes para los componentes hijos del servidor |
64
+ | **Tree-shaking (cargar solo contenido usado)** | ✅ Sí, por componente en tiempo de compilación mediante plugins de Babel/SWC | ⚠️ Parcial | ⚠️ Parcial |
65
+ | **Carga diferida** | ✅ Sí, por localización / por diccionario | ✅ Sí (por ruta/por localización), requiere gestión de espacios de nombres | ✅ Sí (por ruta/por localización), requiere gestión de espacios de nombres |
66
+ | **Eliminación de contenido no usado** | ✅ Sí, por diccionario en tiempo de compilación | ❌ No, puede ser gestionado manualmente con gestión de espacios de nombres | ❌ No, puede ser gestionado manualmente con gestión de espacios de nombres |
67
+ | **Gestión de Proyectos Grandes** | ✅ Fomenta la modularidad, adecuado para sistemas de diseño | ✅ Modular con configuración | ✅ Modular con configuración |
51
68
 
52
69
  ---
53
70
 
54
- ### 2. next-i18next
71
+ ## Comparación detallada
55
72
 
56
- **Enfoque principal**: Solución probada en el tiempo utilizando `i18next` en el fondo, ampliamente adoptada para proyectos de Next.js.
73
+ ### 1) Arquitectura y escalabilidad
57
74
 
58
- - **Arquitectura**: A menudo organiza traducciones en la carpeta `public/locales`. No está diseñado específicamente para mantener las traducciones “cerca” de cada componente, aunque puedes adoptar manualmente una estructura diferente.
59
- - **Soporte para TypeScript**: Cobertura razonable de TypeScript, pero requiere configuración personalizada para traducciones tipadas y ganchos tipados.
60
- - **Traducciones faltantes**: i18next ofrece interpolación/retiros. Sin embargo, la detección de traducciones faltantes normalmente requiere configuración adicional o complementos de terceros.
61
- - **Soporte para Componentes del Servidor**: Se documenta el uso básico con Next.js 13, pero el uso avanzado (por ejemplo, integración profunda con componentes del servidor, generación de rutas dinámicas) puede ser complicado.
62
- - **Enrutamiento y Middleware**: Se basa en gran medida en el `Middleware` de Next.js y reescrituras para subrutas de idiomas. Para configuraciones más complejas, es posible que debas profundizar en la configuración avanzada de i18next.
63
- - **Simplicidad de configuración**: Enfoque familiar para aquellos acostumbrados a i18next. Sin embargo, puede volverse más pesado en boilerplate cuando se necesitan características avanzadas de i18n (nombres de espacio, múltiples idiomas de retroceso, etc.).
75
+ - **next-intl / next-i18next**: Por defecto usan **catálogos centralizados** por localización (más **espacios de nombres** en i18next). Funciona bien al principio, pero a menudo se convierte en una gran área compartida con aumento del acoplamiento y cambios frecuentes en las claves.
76
+ - **Intlayer**: Fomenta diccionarios **por componente** (o por funcionalidad) **ubicados junto** al código al que sirven. Esto reduce la carga cognitiva, facilita la duplicación/migración de piezas de la interfaz y disminuye los conflictos entre equipos. El contenido no utilizado es naturalmente más fácil de detectar y eliminar.
64
77
 
65
- **Uso cuando**: Ya estás comprometido con el ecosistema de `i18next` o tienes traducciones basadas en i18next existentes.
78
+ **Por qué importa:** En bases de código grandes o configuraciones de sistemas de diseño, el **contenido modular** escala mejor que los catálogos monolíticos.
66
79
 
67
80
  ---
68
81
 
69
- ### 3. Intlayer
70
-
71
- **Enfoque principal**: Una moderna biblioteca de i18n de código abierto específicamente diseñada para el **App Router** de Next.js (12, 13, 14 y 15) con soporte integrado para **Componentes del Servidor** y **Turbopack**.
82
+ ### 2) TypeScript y seguridad
72
83
 
73
- #### Ventajas Clave
84
+ - **next-intl**: Soporte sólido para TypeScript, pero **las claves no están estrictamente tipadas por defecto**; deberás mantener los patrones de seguridad manualmente.
85
+ - **next-i18next**: Tipos base para hooks; **la tipificación estricta de claves requiere herramientas/configuración adicional**.
86
+ - **Intlayer**: **Genera tipos estrictos** a partir de tu contenido. La **autocompletación en el IDE** y los **errores en tiempo de compilación** detectan errores tipográficos y claves faltantes antes del despliegue.
74
87
 
75
- 1. **Arquitectura**
88
+ **Por qué es importante:** La tipificación fuerte desplaza las fallas hacia la **izquierda** (CI/compilación) en lugar de hacia la **derecha** (tiempo de ejecución).
76
89
 
77
- - Fomenta colocar **traducciones justo al lado de sus componentes**. Cada página o componente puede tener su propio archivo `.content.ts` (o JSON): no más rebuscar en una gran carpeta de traducción.
78
- - Esto hace que tu código sea más **modular y mantenible**, especialmente en grandes bases de código.
79
-
80
- 2. **Soporte para TypeScript**
81
-
82
- - **Definiciones de tipo generadas automáticamente**: En el momento en que defines tu contenido, Intlayer genera tipos que potencian la autocompletar y detectan errores de traducción.
83
- - Minimiza errores en tiempo de ejecución como claves faltantes y ofrece avanzado **autocompletar** directamente en tu IDE.
84
-
85
- 3. **Gestión de Traducciones Faltantes**
90
+ ---
86
91
 
87
- - Durante la construcción, Intlayer puede **detectar claves de traducción faltantes** y lanzar advertencias o errores.
88
- - Esto asegura que nunca envíes accidentalmente texto faltante entre tus idiomas.
92
+ ### 3) Manejo de traducciones faltantes
89
93
 
90
- 4. **Optimizado para Componentes del Servidor**
94
+ - **next-intl / next-i18next**: Dependen de **respaldo en tiempo de ejecución** (por ejemplo, mostrar la clave o la configuración regional predeterminada). La compilación no falla.
95
+ - **Intlayer**: **Detección en tiempo de compilación** con **advertencias/errores** para locales o claves faltantes.
91
96
 
92
- - Totalmente compatible con el **App Router** de Next.js y el nuevo paradigma de **Componentes del Servidor**.
93
- - Proporciona proveedores especializados (`IntlayerServerProvider`, `IntlayerClientProvider`) para **separar el contexto del servidor** (vital al tratar con Next.js 13+).
97
+ **Por qué es importante:** Detectar vacíos durante la compilación previene “cadenas misteriosas” en producción y se alinea con políticas estrictas de lanzamiento.
94
98
 
95
- 5. **Enrutamiento mejorado y Middleware**
99
+ ---
96
100
 
97
- - Incluye un [**`intlayerMiddleware`**](#) dedicado para **detección automática de idiomas** (a través de cookies o encabezados de navegador) y generación avanzada de rutas.
98
- - Maneja dinámicamente rutas localizadas (por ejemplo, `/en-US/about` vs. `/fr/about`) con configuración mínima.
99
- - Ofrece métodos de ayuda como `getMultilingualUrls` para generar enlaces de idiomas alternativos (genial para **SEO**).
101
+ ### 4) Enrutamiento, middleware y estrategia de URL
100
102
 
101
- 6. **Configuración Simplificada**
102
- - Un solo archivo de configuración (`intlayer.config.ts`) para definir tus idiomas, idioma predeterminado y preferencias de integración.
103
- - Un complemento envolvente `withIntlayer(nextConfig)` que **inyecta** todas las variables de entorno y observadores para tu contenido.
104
- - **Sin grandes configuraciones de retroceso**: el sistema está diseñado para "funcionar" de inmediato con mínima fricción.
103
+ - Los tres funcionan con **enrutamiento localizado de Next.js** en el App Router.
104
+ - **Intlayer** va más allá con **middleware i18n** (detección de locale vía headers/cookies) y **helpers** para generar URLs localizadas y etiquetas `<link rel="alternate" hreflang="…">`.
105
105
 
106
- > **En resumen**: Intlayer es una solución moderna que quiere **promover las mejores prácticas**: desde **mantener traducciones cercanas** a cada componente de React, hasta ofrecer **soporte robusto para TS** y uso **fácil del lado del servidor**, mientras **reduce drásticamente el boilerplate**.
106
+ **Por qué es importante:** Menos capas personalizadas; **UX consistente** y **SEO limpio** en todas las locales.
107
107
 
108
108
  ---
109
109
 
110
- ## Comparación de características lado a lado
111
-
112
- | **Característica** | **next-intl** | **next-i18next** | **Intlayer** |
113
- | -------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------- |
114
- | **Mantener traducciones cerca de los componentes** | Parcial - típicamente una carpeta de locales | No por defecto - a menudo `public/locales` | **Sí - recomendado y fácil** |
115
- | **TypeScript Autogenerado** | Definiciones de TS básicas | Soporte básico de TS | **Sí - avanzado lista para usar** |
116
- | **Detección de traducciones faltantes** | Principalmente cadenas de retroceso | Principalmente cadenas de retroceso | **Sí - comprobaciones en tiempo de construcción** |
117
- | **Soporte para Componentes del Servidor** | Funciona pero no está especializado | Soportado pero puede ser verboso | **Soporte total con proveedores especializados** |
118
- | **Enrutamiento y Middleware** | Integrado manualmente con middleware de Next | Proporcionado a través de configuración de reescritura | **Middleware de i18n dedicado + ganchos avanzados** |
119
- | **Complejidad de configuración** | Simple, configuración mínima | Tradicional, puede ser verbosa para uso avanzado | **Un archivo de configuración y complemento** |
120
-
121
- ---
110
+ ### 5) Alineación con Componentes del Servidor (RSC)
122
111
 
123
- ## ¿Por qué Intlayer?
112
+ - **Todos** soportan Next.js 13+.
113
+ - **Intlayer** suaviza la **frontera servidor/cliente** con una API consistente y proveedores diseñados para RSC, para que no tengas que pasar formateadores o funciones t a través de árboles de componentes.
124
114
 
125
- Para equipos que migran a o construyen sobre el **Next.js App Router** (versiones 13, 14 o 15) con **Componentes del Servidor**, Intlayer proporciona:
115
+ **Por qué es importante:** Modelo mental más limpio y menos casos límite en árboles híbridos.
126
116
 
127
- 1. **Una Arquitectura Simplificada**
117
+ ---
128
118
 
129
- - Cada ruta o componente contiene sus propias traducciones. Esto fomenta claridad y mantenibilidad.
119
+ ### 6) Rendimiento y comportamiento de carga
130
120
 
131
- 2. **Integración Poderosa de TypeScript**
121
+ - **next-intl / next-i18next**: Control parcial mediante **namespaces** y **divisiones a nivel de ruta**; riesgo de incluir cadenas no usadas si no se mantiene la disciplina.
122
+ - **Intlayer**: Realiza **tree-shaking** en la compilación y **carga perezosa por diccionario/locale**. El contenido no usado no se incluye.
132
123
 
133
- - Obtienes seguridad a nivel de compilador, evitando claves de traducción "con errores tipográficos" o faltantes.
124
+ **Por qué es importante:** Paquetes más pequeños y arranque más rápido, especialmente en sitios con múltiples locales.
134
125
 
135
- 3. **Alertas Reales de Traducciones Faltantes**
126
+ ---
136
127
 
137
- - Si olvidas una clave o traducción de idioma, recibirás una advertencia en tiempo de construcción (en lugar de enviar una interfaz de usuario incompleta).
128
+ ### 7) Experiencia de desarrollo (DX), herramientas y mantenimiento
138
129
 
139
- 4. **Enrutamiento Avanzado Incorporado**
130
+ - **next-intl / next-i18next**: Normalmente conectarás plataformas externas para traducciones y flujos editoriales.
131
+ - **Intlayer**: Incluye un **Editor Visual gratuito** y un **CMS opcional** (compatible con Git o externalizado). Además, una **extensión para VSCode** para la creación de contenido y **traducciones asistidas por IA** usando tus propias claves de proveedor.
140
132
 
141
- - La detección automática de idiomas, la generación dinámica de rutas y la fácil gestión de URL localizadas están incluidas.
142
- - Un `intlayerMiddleware` estándar no requiere reescrituras personalizadas profundas.
133
+ **Por qué es importante:** Reduce los costos operativos y acorta el ciclo entre desarrolladores y autores de contenido.
143
134
 
144
- 5. **Configuración de Una Sola Parada**
135
+ ---
145
136
 
146
- - Minimal boilerplate: simplemente define tu `intlayer.config.ts`, envuelve `next.config` con `withIntlayer`, y agrega el middleware oficial.
147
- - Uso claro y directo para componentes **del servidor** y **del cliente** a través de `IntlayerServerProvider` y `IntlayerClientProvider`.
137
+ ## ¿Cuándo elegir cuál?
148
138
 
149
- 6. **Amigable con SEO**
150
- - Ayudantes incorporados (`getMultilingualUrls`, atributos `hrefLang`, etc.) facilitan la producción de páginas y mapas del sitio compatibles con SEO.
139
+ - **Elige next-intl** si quieres una solución **mínima**, te sientes cómodo con catálogos centralizados y tu aplicación es de tamaño **pequeño a mediano**.
140
+ - **Elige next-i18next** si necesitas el **ecosistema de plugins de i18next** (por ejemplo, reglas avanzadas ICU mediante plugins) y tu equipo ya conoce i18next, aceptando **más configuración** para mayor flexibilidad.
141
+ - **Elige Intlayer** si valoras el **contenido con alcance por componente**, **TypeScript estricto**, **garantías en tiempo de compilación**, **tree-shaking** y herramientas integradas para enrutamiento/SEO/editor - especialmente para **Next.js App Router** y **bases de código grandes y modulares**.
151
142
 
152
143
  ---
153
144
 
154
- ## Ejemplo: Intlayer en acción
155
-
156
- A continuación se presenta un _fragmento muy_ condensado que ilustra cómo aprovechar Intlayer en un proyecto Next.js 15. Para obtener todos los detalles y ejemplos de código, [consulta la guía completa de Intlayer](#).
157
-
158
- <details>
159
- <summary>Ejemplo paso a paso</summary>
160
-
161
- 1. **Instalar y configurar**
162
-
163
- ```bash
164
- npm install intlayer next-intlayer
165
- ```
166
-
167
- ```ts
168
- // intlayer.config.ts
169
- import { Locales, type IntlayerConfig } from "intlayer";
170
-
171
- const config: IntlayerConfig = {
172
- internationalization: {
173
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
174
- defaultLocale: Locales.ENGLISH,
175
- },
176
- };
177
- export default config;
178
- ```
179
-
180
- 2. **Usar el complemento**
181
-
182
- ```ts
183
- // next.config.mjs
184
- import { withIntlayer } from "next-intlayer/server";
185
-
186
- /** @type {import('next').NextConfig} */
187
- const nextConfig = {};
188
-
189
- export default withIntlayer(nextConfig);
190
- ```
191
-
192
- 3. **Agregar Middleware**
193
-
194
- ```ts
195
- // src/middleware.ts
196
- export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
197
-
198
- export const config = {
199
- matcher:
200
- "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
201
- };
202
- ```
203
-
204
- 4. **Crear un diseño localizado**
205
-
206
- ```tsx
207
- // src/app/[locale]/layout.tsx
208
- import { getHTMLTextDir } from "intlayer";
209
- import { NextLayoutIntlayer } from "next-intlayer";
210
-
211
- const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
212
- const { locale } = params;
213
- return (
214
- <html lang={locale} dir={getHTMLTextDir(locale)}>
215
- <body>{children}</body>
216
- </html>
217
- );
218
- };
219
-
220
- export { generateStaticParams } from "next-intlayer";
221
- export default LocaleLayout;
222
- ```
223
-
224
- 5. **Declarar y usar contenido**
225
-
226
- ```tsx
227
- // src/app/[locale]/page.content.ts
228
- import { t } from "intlayer";
229
-
230
- export default {
231
- key: "page",
232
- content: {
233
- getStarted: {
234
- main: t({
235
- en: "Get started by editing",
236
- fr: "Commencez par éditer",
237
- es: "Comience por editar",
238
- }),
239
- pageLink: "src/app/page.tsx",
240
- },
241
- },
242
- };
243
- ```
244
-
245
- ```tsx
246
- // src/app/[locale]/page.tsx
247
- import { IntlayerServerProvider } from "next-intlayer/server";
248
- import { IntlayerClientProvider, useIntlayer } from "next-intlayer";
249
-
250
- const PageContent = () => {
251
- const { content } = useIntlayer("page");
252
- return (
253
- <>
254
- <p>{content.getStarted.main}</p>
255
- <code>{content.getStarted.pageLink}</code>
256
- </>
257
- );
258
- };
259
-
260
- export default function Page({ params }) {
261
- return (
262
- <IntlayerServerProvider locale={params.locale}>
263
- <IntlayerClientProvider locale={params.locale}>
264
- <PageContent />
265
- </IntlayerClientProvider>
266
- </IntlayerServerProvider>
267
- );
268
- }
269
- ```
270
-
271
- </details>
145
+ ## Notas prácticas de migración (next-intl / next-i18next → Intlayer)
146
+
147
+ - **Comience por función**: Mueva una ruta o componente a la vez a **diccionarios locales**.
148
+ - **Mantenga los catálogos antiguos en paralelo**: Haga una transición gradual durante la migración; evite un cambio radical.
149
+ - **Active las comprobaciones estrictas**: Permita que la detección en tiempo de compilación revele las brechas temprano.
150
+ - **Adopte middleware y ayudantes**: Estandarice la detección de locales y las etiquetas SEO en todo el sitio.
151
+ - **Mida los paquetes**: Espere **reducciones en el tamaño del paquete** a medida que se elimina contenido no utilizado.
272
152
 
273
153
  ---
274
154
 
275
155
  ## Conclusión
276
156
 
277
- Cada solución, **next-intl**, **next-i18next** e **Intlayer**, ha demostrado ser efectiva para proyectos multilingües de Next.js. Sin embargo, **Intlayer** va más allá al:
157
+ Las tres bibliotecas tienen éxito en la localización básica. La diferencia está en **cuánto trabajo debe hacer** para lograr una configuración robusta y escalable en **Next.js moderno**:
278
158
 
279
- - **Fomentar fuertemente una arquitectura de traducción a nivel de componente**
280
- - Integrarse sin problemas con **Next.js 13+ y Componentes del Servidor**
281
- - Ofrecer **auto-generación poderosa de TypeScript** para código más seguro
282
- - Manejar **traducciones faltantes** en tiempo de construcción
283
- - Proporcionar un **enfoque simplificado y de configuración única** con enrutamiento y middleware avanzados
159
+ - Con **Intlayer**, el **contenido modular**, **TS estricto**, **seguridad en tiempo de compilación**, **paquetes optimizados (tree-shaken)** y **herramientas de App Router + SEO de primera clase** son **valores predeterminados**, no tareas.
160
+ - Si tu equipo valora la **mantenibilidad y velocidad** en una aplicación multilingüe impulsada por componentes, Intlayer ofrece la experiencia **más completa** hoy en día.
284
161
 
285
- Si deseas características de i18n **modernas** adaptadas al App Router de Next.js y buscas una experiencia **totalmente tipada** sin tener que montar manualmente lógica de retroceso, reescrituras de rutas o pasos de construcción complejos, **Intlayer** es una opción convincente. No solo acorta tu tiempo de configuración, sino que también asegura un enfoque más mantenible y escalable para las traducciones de tu equipo.
162
+ Consulta el documento ['¿Por qué Intlayer?'](https://intlayer.org/doc/why) para más detalles.