@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
@@ -2,7 +2,7 @@
2
2
  createdAt: 2024-08-13
3
3
  updatedAt: 2025-08-20
4
4
  title: Formateadores
5
- description: Utilidades de formato conscientes de la configuración regional basadas en Intl para números, porcentajes, moneda, fechas, tiempo relativo, unidades y notación compacta. Incluye un ayudante Intl con caché.
5
+ description: Utilidades de formateo conscientes del locale basadas en Intl para números, porcentajes, moneda, fechas, tiempo relativo, unidades y notación compacta. Incluye un helper Intl en caché.
6
6
  keywords:
7
7
  - Formateadores
8
8
  - Intl
@@ -13,6 +13,7 @@ keywords:
13
13
  - Tiempo Relativo
14
14
  - Unidades
15
15
  - Compacto
16
+ - Lista
16
17
  - Internacionalización
17
18
  slugs:
18
19
  - doc
@@ -23,7 +24,7 @@ slugs:
23
24
 
24
25
  ## Resumen
25
26
 
26
- Intlayer proporciona un conjunto de ayudantes ligeros construidos sobre las APIs nativas `Intl`, además de un envoltorio `Intl` con caché para evitar construir repetidamente formateadores pesados. Estas utilidades son totalmente conscientes de la configuración regional y pueden usarse desde el paquete principal `intlayer`.
27
+ Intlayer proporciona un conjunto de helpers ligeros construidos sobre las APIs nativas de `Intl`, además de un wrapper `Intl` en caché para evitar construir repetidamente formateadores pesados. Estas utilidades son completamente conscientes del locale y pueden usarse desde el paquete principal `intlayer`.
27
28
 
28
29
  ### Importar
29
30
 
@@ -37,40 +38,302 @@ import {
37
38
  relativeTime,
38
39
  units,
39
40
  compact,
41
+ list,
42
+ getLocaleName,
43
+ getLocaleLang,
44
+ getLocaleFromPath,
45
+ getPathWithoutLocale,
46
+ getLocalizedUrl,
47
+ getHTMLTextDir,
48
+ getContent,
49
+ getLocalisedContent,
50
+ getTranslation,
51
+ getIntlayer,
52
+ getIntlayerAsync,
40
53
  } from "intlayer";
41
54
  ```
42
55
 
43
- Si usas React, también hay disponibles hooks; consulta `react-intlayer/format`.
56
+ Si usas React, también hay hooks disponibles; consulta `react-intlayer/format`.
44
57
 
45
- ## Intl con caché
58
+ ## Intl en caché
46
59
 
47
- El `Intl` exportado es un envoltorio delgado con caché alrededor del `Intl` global. Memoiza instancias de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, lo que evita reconstruir el mismo formateador repetidamente.
60
+ El `Intl` exportado es un wrapper ligero y en caché alrededor del `Intl` global. Memoiza instancias de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` y `PluralRules`, lo que evita reconstruir repetidamente el mismo formateador.
48
61
 
49
- Debido a que la construcción de formateadores es relativamente costosa, esta caché mejora el rendimiento sin cambiar el comportamiento. El envoltorio expone la misma API que el `Intl` nativo, por lo que el uso es idéntico.
62
+ Debido a que la construcción de formateadores es relativamente costosa, esta caché mejora el rendimiento sin cambiar el comportamiento. El wrapper expone la misma API que el `Intl` nativo, por lo que el uso es idéntico.
50
63
 
51
64
  - La caché es por proceso y transparente para los llamadores.
52
65
 
53
- > Si `Intl.DisplayNames` no está disponible en el entorno, se imprime una única advertencia solo para desarrollo (considera un polyfill).
66
+ > Si `Intl.DisplayNames` no está disponible en el entorno, se imprime una única advertencia solo para desarrolladores (considera usar un polyfill).
54
67
 
55
- Ejemplo:
68
+ Ejemplos:
56
69
 
57
70
  ```ts
58
71
  import { Intl } from "intlayer";
59
72
 
73
+ // Formateo de números
60
74
  const numberFormat = new Intl.NumberFormat("en-GB", {
61
75
  style: "currency",
62
76
  currency: "GBP",
63
77
  });
64
78
  numberFormat.format(1234.5); // "£1,234.50"
79
+
80
+ // Nombres para idiomas, regiones, etc.
81
+ const displayNames = new Intl.DisplayNames("fr", { type: "language" });
82
+ displayNames.of("en"); // "anglais"
83
+
84
+ // Ordenación para clasificación
85
+ const collator = new Intl.Collator("fr", { sensitivity: "base" });
86
+ collator.compare("é", "e"); // 0 (igual)
87
+
88
+ // Reglas de pluralización
89
+ const pluralRules = new Intl.PluralRules("fr");
90
+ pluralRules.select(1); // "one"
91
+ pluralRules.select(2); // "other"
92
+ ```
93
+
94
+ ## Utilidades adicionales de Intl
95
+
96
+ Más allá de los ayudantes para formateadores, también puedes usar directamente el wrapper cacheado de Intl para otras funcionalidades de Intl:
97
+
98
+ ### `Intl.DisplayNames`
99
+
100
+ Para nombres localizados de idiomas, regiones, monedas y escrituras:
101
+
102
+ ```ts
103
+ import { Intl } from "intlayer";
104
+
105
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
106
+ languageNames.of("fr"); // "Francés"
107
+
108
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
109
+ regionNames.of("US"); // "Estados Unidos"
110
+ ```
111
+
112
+ ### `Intl.Collator`
113
+
114
+ Para la comparación y ordenación de cadenas conscientes del locale:
115
+
116
+ ```ts
117
+ import { Intl } from "intlayer";
118
+
119
+ const collator = new Intl.Collator("de", {
120
+ sensitivity: "base",
121
+ numeric: true,
122
+ });
123
+
124
+ const words = ["äpfel", "zebra", "100", "20"];
125
+ words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
126
+ ```
127
+
128
+ ### `Intl.PluralRules`
129
+
130
+ Para determinar las formas plurales en diferentes locales:
131
+
132
+ ```ts
133
+ import { Intl } from "intlayer";
134
+
135
+ const pluralRules = new Intl.PluralRules("ar");
136
+ pluralRules.select(0); // "zero"
137
+ pluralRules.select(1); // "one"
138
+ pluralRules.select(2); // "two"
139
+ pluralRules.select(3); // "few"
140
+ pluralRules.select(11); // "many"
141
+ ```
142
+
143
+ ## Utilidades de Locale
144
+
145
+ ### `getLocaleName(displayLocale, targetLocale?)`
146
+
147
+ Obtiene el nombre localizado de un locale en otro locale:
148
+
149
+ ```ts
150
+ import { getLocaleName } from "intlayer";
151
+
152
+ getLocaleName("fr", "en"); // "French"
153
+ getLocaleName("en", "fr"); // "anglais"
154
+ getLocaleName("de", "es"); // "alemán"
155
+ ```
156
+
157
+ - **displayLocale**: El locale para el cual obtener el nombre
158
+ - **targetLocale**: El locale en el que se mostrará el nombre (por defecto es displayLocale)
159
+
160
+ ### `getLocaleLang(locale?)`
161
+
162
+ Extrae el código de idioma de una cadena de locale:
163
+
164
+ ```ts
165
+ import { getLocaleLang } from "intlayer";
166
+
167
+ getLocaleLang("en-US"); // "en"
168
+ getLocaleLang("fr-CA"); // "fr"
169
+ getLocaleLang("de"); // "de"
170
+ ```
171
+
172
+ - **locale**: El locale del cual extraer el idioma (por defecto es el locale actual)
173
+
174
+ ### `getLocaleFromPath(inputUrl)`
175
+
176
+ Extrae el segmento de locale de una URL o ruta:
177
+
178
+ ```ts
179
+ import { getLocaleFromPath } from "intlayer";
180
+
181
+ getLocaleFromPath("/en/dashboard"); // "en"
182
+ getLocaleFromPath("/fr/dashboard"); // "fr"
183
+ getLocaleFromPath("/dashboard"); // "en" (locale predeterminado)
184
+ getLocaleFromPath("https://example.com/es/about"); // "es"
185
+ ```
186
+
187
+ - **inputUrl**: La cadena completa de URL o ruta a procesar
188
+ - **returns**: El locale detectado o el locale predeterminado si no se encuentra ningún locale
189
+
190
+ ### `getPathWithoutLocale(inputUrl, locales?)`
191
+
192
+ Elimina el segmento de locale de una URL o ruta:
193
+
194
+ ```ts
195
+ import { getPathWithoutLocale } from "intlayer";
196
+
197
+ getPathWithoutLocale("/en/dashboard"); // "/dashboard"
198
+ getPathWithoutLocale("/fr/dashboard"); // "/dashboard"
199
+ getPathWithoutLocale("https://example.com/en/about"); // "https://example.com/about"
200
+ ```
201
+
202
+ - **inputUrl**: La cadena completa de URL o ruta a procesar
203
+ - **locales**: Matriz opcional de locales soportados (por defecto, los locales configurados)
204
+ - **returns**: La URL sin el segmento de locale
205
+
206
+ ### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
207
+
208
+ Genera una URL localizada para el locale actual:
209
+
210
+ ```ts
211
+ import { getLocalizedUrl } from "intlayer";
212
+
213
+ getLocalizedUrl("/about", "fr", ["en", "fr"], "en", false); // "/fr/about"
214
+ getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
215
+ getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
216
+ ```
217
+
218
+ - **url**: La URL original para localizar
219
+ - **currentLocale**: El locale actual
220
+ - **locales**: Matriz opcional de locales soportados (por defecto, los locales configurados)
221
+ - **defaultLocale**: Locale predeterminado opcional (por defecto, el locale predeterminado configurado)
222
+ - **prefixDefault**: Indica si se debe prefijar el locale predeterminado (por defecto, el valor configurado)
223
+
224
+ ### `getHTMLTextDir(locale?)`
225
+
226
+ Devuelve la dirección del texto para un locale:
227
+
228
+ ```ts
229
+ import { getHTMLTextDir } from "intlayer";
230
+
231
+ getHTMLTextDir("en-US"); // "ltr"
232
+ getHTMLTextDir("ar"); // "rtl"
233
+ getHTMLTextDir("he"); // "rtl"
234
+ ```
235
+
236
+ - **locale**: El locale para obtener la dirección del texto (por defecto, el locale actual)
237
+ - **returns**: `"ltr"`, `"rtl"` o `"auto"`
238
+
239
+ ## Utilidades para el Manejo de Contenido
240
+
241
+ ### `getContent(node, nodeProps, locale?)`
242
+
243
+ Transforma un nodo de contenido con todos los plugins disponibles (traducción, enumeración, inserción, etc.):
244
+
245
+ ```ts
246
+ import { getContent } from "intlayer";
247
+
248
+ const content = getContent(
249
+ contentNode,
250
+ { dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
251
+ "fr"
252
+ );
65
253
  ```
66
254
 
255
+ - **node**: El nodo de contenido a transformar
256
+ - **nodeProps**: Propiedades para el contexto de transformación
257
+ - **locale**: Locale opcional (por defecto, el locale predeterminado configurado)
258
+
259
+ ### `getLocalisedContent(node, locale, nodeProps, fallback?)`
260
+
261
+ Transforma un nodo de contenido solo con el plugin de traducción:
262
+
263
+ ```ts
264
+ import { getLocalisedContent } from "intlayer";
265
+
266
+ const content = getLocalisedContent(
267
+ contentNode,
268
+ "fr",
269
+ { dictionaryKey: "common" },
270
+ true // usar locale predeterminado si falta la traducción
271
+ );
272
+ ```
273
+
274
+ - **node**: El nodo de contenido a transformar
275
+ - **locale**: El locale a usar para la traducción
276
+ - **nodeProps**: Propiedades para el contexto de transformación
277
+ - **fallback**: Indica si se debe usar el locale predeterminado como respaldo (por defecto es false)
278
+
279
+ ### `getTranslation(languageContent, locale?, fallback?)`
280
+
281
+ Extrae contenido para un locale específico de un objeto de contenido multilingüe:
282
+
283
+ ```ts
284
+ import { getTranslation } from "intlayer";
285
+
286
+ const content = getTranslation(
287
+ {
288
+ en: "Hello",
289
+ fr: "Bonjour",
290
+ de: "Hallo",
291
+ },
292
+ "fr",
293
+ true
294
+ ); // "Bonjour"
295
+ ```
296
+
297
+ - **languageContent**: Objeto que mapea locales a contenido
298
+ - **locale**: Locale objetivo (por defecto el locale predeterminado configurado)
299
+ - **fallback**: Indica si se debe usar el locale predeterminado como respaldo (por defecto es true)
300
+
301
+ ### `getIntlayer(dictionaryKey, locale?, plugins?)`
302
+
303
+ Recupera y transforma contenido de un diccionario por clave:
304
+
305
+ ```ts
306
+ import { getIntlayer } from "intlayer";
307
+
308
+ const content = getIntlayer("common", "fr");
309
+ const nestedContent = getIntlayer("common", "fr", customPlugins);
310
+ ```
311
+
312
+ - **dictionaryKey**: La clave del diccionario a recuperar
313
+ - **locale**: Locale opcional (por defecto es el locale predeterminado configurado)
314
+ - **plugins**: Array opcional de plugins personalizados para transformación
315
+
316
+ ### `getIntlayerAsync(dictionaryKey, locale?, plugins?)`
317
+
318
+ Recupera contenido de un diccionario remoto de forma asíncrona:
319
+
320
+ ```ts
321
+ import { getIntlayerAsync } from "intlayer";
322
+
323
+ const content = await getIntlayerAsync("common", "fr");
324
+ ```
325
+
326
+ - **dictionaryKey**: La clave del diccionario a recuperar
327
+ - **locale**: Locale opcional (por defecto es el locale predeterminado configurado)
328
+ - **plugins**: Array opcional de plugins personalizados para transformación
329
+
67
330
  ## Formateadores
68
331
 
69
- Todos los ayudantes a continuación se exportan desde `intlayer`.
332
+ Todos los helpers a continuación son exportados desde `intlayer`.
70
333
 
71
334
  ### `number(value, options?)`
72
335
 
73
- Formatea un valor numérico usando agrupación y decimales sensibles a la configuración regional.
336
+ Formatea un valor numérico utilizando agrupación y decimales sensibles al locale.
74
337
 
75
338
  - **value**: `number | string`
76
339
  - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
@@ -81,7 +344,7 @@ Ejemplos:
81
344
  import { number } from "intlayer";
82
345
 
83
346
  number(123456.789); // "123,456.789" (en en-US)
84
- number("1000000", { locale: "fr" }); // "1000000"
347
+ number("1000000", { locale: "fr" }); // "1 000 000"
85
348
  number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
86
349
  ```
87
350
 
@@ -118,7 +381,7 @@ Ejemplos:
118
381
  import { currency } from "intlayer";
119
382
 
120
383
  currency(1234.5, { currency: "EUR" }); // "€1,234.50"
121
- currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5000,00 CAD"
384
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
122
385
  ```
123
386
 
124
387
  ### `date(date, optionsOrPreset?)`
@@ -142,7 +405,7 @@ date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); /
142
405
 
143
406
  Formatea el tiempo relativo entre dos instantes con `Intl.RelativeTimeFormat`.
144
407
 
145
- - Pasa "now" como el primer argumento y el objetivo como el segundo para obtener una frase natural.
408
+ - Pasa "now" como primer argumento y el objetivo como segundo para obtener una frase natural.
146
409
  - **from**: `Date | string | number`
147
410
  - **to**: `Date | string | number` (por defecto `new Date()`)
148
411
  - **options**: `{ locale?: LocalesValues; unit?: Intl.RelativeTimeFormatUnit; numeric?: Intl.RelativeTimeFormatNumeric; style?: Intl.RelativeTimeFormatStyle }`
@@ -155,10 +418,10 @@ import { relativeTime } from "intlayer";
155
418
 
156
419
  const now = new Date();
157
420
  const in3Days = new Date(now.getTime() + 3 * 864e5);
158
- relativeTime(now, in3Days, { unit: "day" }); // "in 3 days"
421
+ relativeTime(now, in3Days, { unit: "day" }); // "en 3 días"
159
422
 
160
423
  const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
161
- relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 hours ago"
424
+ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "hace 2 horas"
162
425
  ```
163
426
 
164
427
  ### `units(value, options?)`
@@ -184,7 +447,7 @@ units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B" (dependiente d
184
447
  Formatea un número usando notación compacta (por ejemplo, `1.2K`, `1M`).
185
448
 
186
449
  - **value**: `number | string`
187
- - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (utiliza `notation: 'compact'` internamente)
450
+ - **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }` (usa internamente `notation: 'compact'`)
188
451
 
189
452
  Ejemplos:
190
453
 
@@ -192,48 +455,195 @@ Ejemplos:
192
455
  import { compact } from "intlayer";
193
456
 
194
457
  compact(1200); // "1.2K"
195
- compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 millón"
458
+ compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
459
+ ```
460
+
461
+ ### `list(values, options?)`
462
+
463
+ Formatea un arreglo de valores en una cadena de lista localizada usando `Intl.ListFormat`.
464
+
465
+ - **values**: `(string | number)[]`
466
+ - **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
467
+ - Campos comunes: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
468
+ - Valores por defecto: `type: 'conjunction'`, `style: 'long'`
469
+
470
+ Ejemplos:
471
+
472
+ ```ts
473
+ import { list } from "intlayer";
474
+
475
+ list(["apple", "banana", "orange"]); // "apple, banana, and orange"
476
+ list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
477
+ list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
196
478
  ```
197
479
 
198
480
  ## Notas
199
481
 
200
- - Todos los helpers aceptan entradas de tipo `string`; internamente se convierten a números o fechas.
482
+ - Todos los ayudantes aceptan entradas de tipo `string`; internamente se convierten a números o fechas.
201
483
  - El locale por defecto es el configurado en `internationalization.defaultLocale` si no se proporciona.
202
- - Estas utilidades son envoltorios ligeros; para formateos avanzados, pase las opciones estándar de `Intl`.
484
+ - Estas utilidades son envoltorios ligeros; para un formateo avanzado, pase las opciones estándar de `Intl`.
203
485
 
204
486
  ## Puntos de entrada y re-exportaciones (`@index.ts`)
205
487
 
206
- Los formateadores residen en el paquete core y se re-exportan desde paquetes de nivel superior para mantener las importaciones ergonómicas en diferentes entornos:
488
+ Los formateadores residen en el paquete core y se re-exportan desde paquetes de nivel superior para mantener las importaciones ergonómicas en diferentes entornos de ejecución:
207
489
 
208
490
  Ejemplos:
209
491
 
210
492
  ```ts
211
493
  // Código de la aplicación (recomendado)
212
- import { number, currency, date, Intl } from "intlayer";
494
+ import {
495
+ number,
496
+ currency,
497
+ date,
498
+ relativeTime,
499
+ units,
500
+ compact,
501
+ list,
502
+ Intl,
503
+ getLocaleName,
504
+ getLocaleLang,
505
+ getLocaleFromPath,
506
+ getPathWithoutLocale,
507
+ getLocalizedUrl,
508
+ getHTMLTextDir,
509
+ getContent,
510
+ getLocalisedContent,
511
+ getTranslation,
512
+ getIntlayer,
513
+ getIntlayerAsync,
514
+ } from "intlayer";
213
515
  ```
214
516
 
215
517
  ### React
216
518
 
217
519
  Componentes cliente:
218
520
 
219
- ```ts
220
- import { useNumber, useCurrency, useDate } from "react-intlayer/format";
521
+ ```tsx
522
+ import {
523
+ useNumber,
524
+ useCurrency,
525
+ useDate,
526
+ usePercentage,
527
+ useCompact,
528
+ useList,
529
+ useRelativeTime,
530
+ useUnit,
531
+ } from "react-intlayer/format";
221
532
  // o en aplicaciones Next.js
222
- import { useNumber, useCurrency, useDate } from "next-intlayer/client/format";
533
+ import {
534
+ useNumber,
535
+ useCurrency,
536
+ useDate,
537
+ usePercentage,
538
+ useCompact,
539
+ useList,
540
+ useRelativeTime,
541
+ useUnit,
542
+ } from "next-intlayer/client/format";
543
+
544
+ const MyComponent = () => {
545
+ const number = useNumber();
546
+ const currency = useCurrency();
547
+ const date = useDate();
548
+ const percentage = usePercentage();
549
+ const compact = useCompact();
550
+ const list = useList();
551
+ const relativeTime = useRelativeTime();
552
+ const unit = useUnit();
553
+
554
+ return (
555
+ <div>
556
+ <p>{number(123456.789)}</p>
557
+ <p>{currency(1234.5, { currency: "EUR" })}</p>
558
+ <p>{date(new Date(), "short")}</p>
559
+ <p>{percentage(0.25)}</p>
560
+ <p>{compact(1200)}</p>
561
+ <p>{list(["apple", "banana", "orange"])}</p>
562
+ <p>{relativeTime(new Date(), new Date() + 1000)}</p>
563
+ <p>{unit(123456.789, { unit: "kilometer" })}</p>
564
+ </div>
565
+ );
566
+ };
223
567
  ```
224
568
 
225
- Componentes servidor (o runtime React Server):
569
+ Componentes del servidor (o tiempo de ejecución del servidor React):
226
570
 
227
571
  ```ts
228
- import { useNumber, useCurrency, useDate } from "intlayer/server/format";
572
+ import {
573
+ useNumber,
574
+ useCurrency,
575
+ useDate,
576
+ usePercentage,
577
+ useCompact,
578
+ useList,
579
+ useRelativeTime,
580
+ useUnit,
581
+ } from "react-intlayer/server/format";
229
582
  // o en aplicaciones Next.js
230
- import { useNumber, useCurrency, useDate } from "next-intlayer/server/format";
583
+ import {
584
+ useNumber,
585
+ useCurrency,
586
+ useDate,
587
+ usePercentage,
588
+ useCompact,
589
+ useList,
590
+ useRelativeTime,
591
+ useUnit,
592
+ } from "next-intlayer/server/format";
231
593
  ```
232
594
 
233
- > Esos hooks considerarán el locale desde el `IntlayerProvider` o `IntlayerServerProvider`
595
+ > Estos hooks considerarán la configuración regional desde el `IntlayerProvider` o `IntlayerServerProvider`
596
+
597
+ ### Vue
598
+
599
+ Componentes cliente:
600
+
601
+ ```ts
602
+ import {
603
+ useNumber,
604
+ useCurrency,
605
+ useDate,
606
+ usePercentage,
607
+ useCompact,
608
+ useList,
609
+ useRelativeTime,
610
+ useUnit,
611
+ } from "vue-intlayer/format";
612
+ ```
613
+
614
+ > Esos composables considerarán la configuración regional del `IntlayerProvider` inyectado.
234
615
 
235
616
  ## Historial de la documentación
236
617
 
237
618
  | Versión | Fecha | Cambios |
238
619
  | ------- | ---------- | -------------------------------------- |
620
+ | 5.8.0 | 2025-08-20 | Añadidos formateadores para Vue |
239
621
  | 5.8.0 | 2025-08-18 | Añadida documentación de formateadores |
622
+
623
+ Componentes cliente:
624
+
625
+ ```ts
626
+ import {
627
+ useNumber,
628
+ useCurrency,
629
+ useDate,
630
+ usePercentage,
631
+ useCompact,
632
+ useList,
633
+ useRelativeTime,
634
+ useUnit,
635
+ } from "vue-intlayer/format";
636
+ ```
637
+
638
+ > Esos composables considerarán la configuración regional del `IntlayerProvider` inyectado
639
+
640
+ ## Historial de la documentación
641
+
642
+ | Versión | Fecha | Cambios |
643
+ | ------- | ---------- | ----------------------------------------------------------------------------------------------------- |
644
+ | 5.8.0 | 2025-08-20 | Añadido formateadores de vue |
645
+ | 5.8.0 | 2025-08-18 | Añadida documentación de formateadores |
646
+ | 5.8.0 | 2025-08-20 | Añadida documentación del formateador de listas |
647
+ | 5.8.0 | 2025-08-20 | Añadidas utilidades Intl adicionales (DisplayNames, Collator, PluralRules) |
648
+ | 5.8.0 | 2025-08-20 | Añadidas utilidades de configuración regional (getLocaleName, getLocaleLang, getLocaleFromPath, etc.) |
649
+ | 5.8.0 | 2025-08-20 | Añadidas utilidades para manejo de contenido (getContent, getTranslation, getIntlayer, etc.) |
@@ -25,8 +25,8 @@ La idea principal detrás de Intlayer es adoptar una gestión de contenido por c
25
25
  .
26
26
  └── Components
27
27
  └── MyComponent
28
- ├── index.content.cjs
29
- └── index.mjs
28
+ ├── index.content.ts
29
+ └── index.tsx
30
30
  ```
31
31
 
32
32
  Para ello, el papel de Intlayer es encontrar todos tus `archivos de declaración de contenido`, en todos los formatos diferentes presentes en tu proyecto, y luego generará los `diccionarios` a partir de ellos.
@@ -45,12 +45,10 @@ El paso de construcción se puede realizar de tres maneras:
45
45
  - usando los plugins de la aplicación como el paquete [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/vite-intlayer/index.md), o sus equivalentes para [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/next-intlayer/index.md). Cuando usas uno de estos plugins, Intlayer construirá automáticamente tus diccionarios cuando inicies (dev) o construyas (prod) tu aplicación.
46
46
 
47
47
  1. Declaración de archivos de contenido
48
-
49
48
  - Los archivos de contenido pueden definirse en varios formatos, como TypeScript, ECMAScript, CommonJS o JSON.
50
49
  - Los archivos de contenido pueden definirse en cualquier lugar del proyecto, lo que permite un mejor mantenimiento y escalabilidad. Es importante respetar las convenciones de extensión de archivo para los archivos de contenido. Esta extensión es por defecto `*.content.{js|cjs|mjs|ts|tsx|json}`, pero puede modificarse en el [archivo de configuración](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md).
51
50
 
52
51
  2. Generación de `diccionarios`
53
-
54
52
  - Los diccionarios se generan a partir de los archivos de contenido. Por defecto, los diccionarios de Intlayer se generan en el directorio `.intlayer/dictionaries` del proyecto.
55
53
  - Esos diccionarios se generan en diferentes formatos para satisfacer todas las necesidades y optimizar el rendimiento de la aplicación.
56
54
 
@@ -197,25 +197,22 @@ Este enfoque te permite:
197
197
  - Los archivos `.content.{{ts|mjs|cjs|json}}` pueden ser creados usando una extensión de VSCode
198
198
  - Las herramientas de autocompletado con IA en tu IDE (como GitHub Copilot) pueden ayudarte a declarar tu contenido, reduciendo el copiar/pegar
199
199
 
200
- 2. **Reducir la complejidad de tu base de código**
200
+ 2. **Limpiar tu base de código**
201
+ - Reducir la complejidad
202
+ - Incrementar la mantenibilidad
201
203
 
202
- 3. **Incrementar la mantenibilidad de tu base de código**
203
-
204
- 4. **Duplicar tus componentes y su contenido relacionado más fácilmente (Ejemplo: componentes de login/registro, etc.)**
204
+ 3. **Duplicar tus componentes y su contenido relacionado más fácilmente (Ejemplo: componentes de login/registro, etc.)**
205
205
  - Limitando el riesgo de impactar el contenido de otros componentes
206
206
  - Copiando/pegando tu contenido de una aplicación a otra sin dependencias externas
207
207
 
208
- 5. **Evitar contaminar tu base de código con claves/valores no usados para componentes no usados**
209
- - Si no usas un componente, no necesitas importar su contenido
208
+ 4. **Evitar contaminar tu base de código con claves/valores no usados para componentes no usados**
209
+ - Si no usas un componente, Intlayer no importará su contenido relacionado
210
210
  - Si eliminas un componente, te será más fácil recordar eliminar su contenido relacionado ya que estará presente en la misma carpeta
211
211
 
212
- 6. **Reducir el costo de razonamiento para que los agentes de IA declaren tu contenido multilingüe**
212
+ 5. **Reducir el costo de razonamiento para que los agentes de IA declaren tu contenido multilingüe**
213
213
  - El agente de IA no tendrá que escanear toda tu base de código para saber dónde implementar tu contenido
214
214
  - Las traducciones pueden realizarse fácilmente mediante herramientas de autocompletado con IA en tu IDE (como GitHub Copilot)
215
215
 
216
- 7. **Optimizar el rendimiento de carga**
217
- - Si un componente se carga de forma diferida (lazy-loaded), su contenido relacionado se cargará al mismo tiempo
218
-
219
216
  ## Características adicionales de Intlayer
220
217
 
221
218
  | Funcionalidad | Descripción |
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-08-11
3
3
  updatedAt: 2025-08-11
4
4
  title: Comenzando con Intlayer en TanStack Start (React)
5
- description: Añade i18n a tu aplicación TanStack Start usando Intlayerdiccionarios a nivel de componente, URLs localizadas y metadatos amigables para SEO.
5
+ description: Añade i18n a tu aplicación TanStack Start usando Intlayer-diccionarios a nivel de componente, URLs localizadas y metadatos amigables para SEO.
6
6
  keywords:
7
7
  - Internacionalización
8
8
  - Documentación
@@ -32,8 +32,8 @@ Intlayer también proporciona un editor visual opcional que te permite editar y
32
32
  .
33
33
  └── Components
34
34
  └── MyComponent
35
- ├── index.content.cjs
36
- └── index.mjs
35
+ ├── index.content.ts
36
+ └── index.tsx
37
37
  ```
38
38
 
39
39
  ```tsx fileName="src/components/MyComponent/index.content.ts" contentDeclarationFormat="typescript"