@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
@@ -10,9 +10,10 @@ keywords:
10
10
  - Devise
11
11
  - Pourcentage
12
12
  - Date
13
- - Temps Relatif
13
+ - Temps relatif
14
14
  - Unités
15
15
  - Compact
16
+ - Liste
16
17
  - Internationalisation
17
18
  slugs:
18
19
  - doc
@@ -23,9 +24,9 @@ slugs:
23
24
 
24
25
  ## Vue d'ensemble
25
26
 
26
- Intlayer fournit un ensemble d'aides légères construites au-dessus des API natives `Intl`, ainsi qu'un wrapper `Intl` mis en cache pour éviter de reconstruire à plusieurs reprises des formatteurs lourds. Ces utilitaires sont entièrement sensibles à la locale et peuvent être utilisés depuis le package principal `intlayer`.
27
+ Intlayer fournit un ensemble d'aides légères construites sur les API natives `Intl`, ainsi qu'un wrapper `Intl` mis en cache pour éviter de reconstruire à plusieurs reprises des formatteurs lourds. Ces utilitaires sont entièrement sensibles à la locale et peuvent être utilisés depuis le package principal `intlayer`.
27
28
 
28
- ### Import
29
+ ### Importation
29
30
 
30
31
  ```ts
31
32
  import {
@@ -37,6 +38,18 @@ 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
 
@@ -44,26 +57,276 @@ Si vous utilisez React, des hooks sont également disponibles ; voir `react-intl
44
57
 
45
58
  ## Intl mis en cache
46
59
 
47
- L'`Intl` exporté est un wrapper léger et mis en cache autour de l'`Intl` global. Il mémorise les instances de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, ce qui évite de reconstruire le même formateur à plusieurs reprises.
60
+ L'`Intl` exporté est un wrapper léger et mis en cache autour de l'`Intl` global. Il mémorise les instances de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` et `PluralRules`, ce qui évite de reconstruire plusieurs fois le même formateur.
48
61
 
49
- Comme la construction des formatteurs est relativement coûteuse, cette mise en cache améliore les performances sans changer le comportement. Le wrapper expose la même API que l'`Intl` natif, donc l'utilisation est identique.
62
+ Parce que la construction des formateurs est relativement coûteuse, cette mise en cache améliore les performances sans changer le comportement. Le wrapper expose la même API que l'`Intl` natif, donc l'utilisation est identique.
50
63
 
51
64
  - La mise en cache est par processus et transparente pour les appelants.
52
65
 
53
66
  > Si `Intl.DisplayNames` n'est pas disponible dans l'environnement, un seul avertissement destiné aux développeurs est affiché (envisagez un polyfill).
54
67
 
55
- Exemple :
68
+ Exemples :
56
69
 
57
70
  ```ts
58
71
  import { Intl } from "intlayer";
59
72
 
73
+ // Formatage des nombres
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
+ // Noms affichés pour les langues, régions, etc.
81
+ const displayNames = new Intl.DisplayNames("fr", { type: "language" });
82
+ displayNames.of("en"); // "anglais"
83
+
84
+ // Collation pour le tri
85
+ const collator = new Intl.Collator("fr", { sensitivity: "base" });
86
+ collator.compare("é", "e"); // 0 (égal)
87
+
88
+ // Règles de pluriel
89
+ const pluralRules = new Intl.PluralRules("fr");
90
+ pluralRules.select(1); // "one"
91
+ pluralRules.select(2); // "other"
92
+ ```
93
+
94
+ ## Utilitaires Intl supplémentaires
95
+
96
+ Au-delà des helpers de formatage, vous pouvez également utiliser directement le wrapper Intl mis en cache pour d'autres fonctionnalités Intl :
97
+
98
+ ### `Intl.DisplayNames`
99
+
100
+ Pour les noms localisés des langues, régions, devises et scripts :
101
+
102
+ ```ts
103
+ import { Intl } from "intlayer";
104
+
105
+ const languageNames = new Intl.DisplayNames("en", { type: "language" });
106
+ languageNames.of("fr"); // "French"
107
+
108
+ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
109
+ regionNames.of("US"); // "États-Unis"
110
+ ```
111
+
112
+ ### `Intl.Collator`
113
+
114
+ Pour la comparaison et le tri de chaînes sensibles à la 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
+ Pour déterminer les formes plurielles dans différentes 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
+ ## Utilitaires de locale
144
+
145
+ ### `getLocaleName(displayLocale, targetLocale?)`
146
+
147
+ Obtient le nom localisé d'une locale dans une autre 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** : La locale pour laquelle obtenir le nom
158
+ - **targetLocale** : La locale dans laquelle afficher le nom (par défaut displayLocale)
159
+
160
+ ### `getLocaleLang(locale?)`
161
+
162
+ Extrait le code langue d'une chaîne 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** : La locale dont extraire la langue (par défaut la locale courante)
173
+
174
+ ### `getLocaleFromPath(inputUrl)`
175
+
176
+ Extrait le segment de locale d'une URL ou d'un chemin :
177
+
178
+ ```ts
179
+ import { getLocaleFromPath } from "intlayer";
180
+
181
+ getLocaleFromPath("/en/dashboard"); // "en"
182
+ getLocaleFromPath("/fr/dashboard"); // "fr"
183
+ getLocaleFromPath("/dashboard"); // "en" (locale par défaut)
184
+ getLocaleFromPath("https://example.com/es/about"); // "es"
185
+ ```
186
+
187
+ - **inputUrl** : La chaîne complète de l'URL ou le chemin à traiter
188
+ - **returns** : La locale détectée ou la locale par défaut si aucune locale n'est trouvée
189
+
190
+ ### `getPathWithoutLocale(inputUrl, locales?)`
191
+
192
+ Supprime le segment de locale d'une URL ou d'un chemin :
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 chaîne complète de l'URL ou le chemin à traiter
203
+ - **locales** : Tableau optionnel des locales supportées (par défaut les locales configurées)
204
+ - **returns** : L’URL sans le segment de locale
205
+
206
+ ### `getLocalizedUrl(url, currentLocale, locales?, defaultLocale?, prefixDefault?)`
207
+
208
+ Génère une URL localisée pour la locale courante :
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** : L’URL originale à localiser
219
+ - **currentLocale** : La locale courante
220
+ - **locales** : Tableau optionnel des locales supportées (par défaut les locales configurées)
221
+ - **defaultLocale** : Locale par défaut optionnelle (par défaut la locale par défaut configurée)
222
+ - **prefixDefault** : Indique s’il faut préfixer la locale par défaut (par défaut la valeur configurée)
223
+
224
+ ### `getHTMLTextDir(locale?)`
225
+
226
+ Retourne la direction du texte pour une 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** : La locale pour laquelle obtenir la direction du texte (par défaut la locale courante)
237
+ - **returns** : `"ltr"`, `"rtl"`, ou `"auto"`
238
+
239
+ ## Utilitaires de gestion de contenu
240
+
241
+ ### `getContent(node, nodeProps, locale?)`
242
+
243
+ Transforme un nœud de contenu avec tous les plugins disponibles (traduction, énumération, insertion, 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** : Le nœud de contenu à transformer
256
+ - **nodeProps** : Propriétés pour le contexte de transformation
257
+ - **locale** : Locale optionnelle (par défaut la locale par défaut configurée)
258
+
259
+ ### `getLocalisedContent(node, locale, nodeProps, fallback?)`
260
+
261
+ Transforme un nœud de contenu avec uniquement le plugin de traduction :
262
+
263
+ ```ts
264
+ import { getLocalisedContent } from "intlayer";
265
+
266
+ const content = getLocalisedContent(
267
+ contentNode,
268
+ "fr",
269
+ { dictionaryKey: "common" },
270
+ true // retour à la locale par défaut si la traduction est manquante
271
+ );
272
+ ```
273
+
274
+ - **node** : Le nœud de contenu à transformer
275
+ - **locale** : La locale à utiliser pour la traduction
276
+ - **nodeProps** : Propriétés pour le contexte de transformation
277
+ - **fallback** : Indique s'il faut revenir à la locale par défaut (par défaut à false)
278
+
279
+ ### `getTranslation(languageContent, locale?, fallback?)`
280
+
281
+ Extrait le contenu pour une locale spécifique à partir d'un objet de contenu multilingue :
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** : Objet associant les locales au contenu
298
+ - **locale** : Locale cible (par défaut la locale par défaut configurée)
299
+ - **fallback** : Indique s'il faut revenir à la locale par défaut (par défaut à true)
300
+
301
+ ### `getIntlayer(dictionaryKey, locale?, plugins?)`
302
+
303
+ Récupère et transforme le contenu d'un dictionnaire par clé :
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 clé du dictionnaire à récupérer
313
+ - **locale** : Locale optionnelle (par défaut la locale configurée par défaut)
314
+ - **plugins** : Tableau optionnel de plugins de transformation personnalisés
315
+
316
+ ### `getIntlayerAsync(dictionaryKey, locale?, plugins?)`
317
+
318
+ Récupère de manière asynchrone le contenu d'un dictionnaire distant :
319
+
320
+ ```ts
321
+ import { getIntlayerAsync } from "intlayer";
322
+
323
+ const content = await getIntlayerAsync("common", "fr");
324
+ ```
325
+
326
+ - **dictionaryKey** : La clé du dictionnaire à récupérer
327
+ - **locale** : Locale optionnelle (par défaut la locale configurée par défaut)
328
+ - **plugins** : Tableau optionnel de plugins de transformation personnalisés
329
+
67
330
  ## Formatteurs
68
331
 
69
332
  Tous les helpers ci-dessous sont exportés depuis `intlayer`.
@@ -81,7 +344,7 @@ Exemples :
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
 
@@ -106,27 +369,27 @@ percentage(0.237, { minimumFractionDigits: 1 }); // "23,7%"
106
369
 
107
370
  ### `currency(value, options?)`
108
371
 
109
- Formate une valeur en devise localisée. Par défaut, la devise est `USD` avec deux chiffres fractionnaires.
372
+ Formate une valeur en devise localisée. Par défaut en `USD` avec deux chiffres fractionnaires.
110
373
 
111
374
  - **value** : `number | string`
112
375
  - **options** : `Intl.NumberFormatOptions & { locale?: LocalesValues }`
113
- - Champs courants : `currency` (ex. `"EUR"`), `currencyDisplay` (`"symbol" | "code" | "name"`)
376
+ - Champs communs : `currency` (ex. : `"EUR"`), `currencyDisplay` (`"symbol" | "code" | "name"`)
114
377
 
115
378
  Exemples :
116
379
 
117
380
  ```ts
118
381
  import { currency } from "intlayer";
119
382
 
120
- currency(1234.5, { currency: "EUR" }); // "€1234,50"
121
- currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5000,00 CAD"
383
+ currency(1234.5, { currency: "EUR" }); // "€1,234.50"
384
+ currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
122
385
  ```
123
386
 
124
387
  ### `date(date, optionsOrPreset?)`
125
388
 
126
- Formate une valeur de date/heure avec `Intl.DateTimeFormat`.
389
+ Formate une valeur date/heure avec `Intl.DateTimeFormat`.
127
390
 
128
391
  - **date** : `Date | string | number`
129
- - **optionsOrPreset** : `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` ou l'un des préréglages :
392
+ - **optionsOrPreset** : `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` ou lun des préréglages :
130
393
  - Préréglages : `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
131
394
 
132
395
  Exemples :
@@ -134,19 +397,19 @@ Exemples :
134
397
  ```ts
135
398
  import { date } from "intlayer";
136
399
 
137
- date(new Date(), "short"); // par ex., "02/08/25, 14:30"
400
+ date(new Date(), "short"); // ex. : "08/02/25, 14:30"
138
401
  date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
139
402
  ```
140
403
 
141
404
  ### `relativeTime(from, to = new Date(), options?)`
142
405
 
143
- Formate le temps relatif entre deux instants avec `Intl.RelativeTimeFormat`.
406
+ Formate un temps relatif entre deux instants avec `Intl.RelativeTimeFormat`.
144
407
 
145
408
  - Passez "now" comme premier argument et la cible comme second pour obtenir une formulation naturelle.
146
409
  - **from** : `Date | string | number`
147
410
  - **to** : `Date | string | number` (par défaut `new Date()`)
148
411
  - **options** : `{ locale?: LocalesValues; unit?: Intl.RelativeTimeFormatUnit; numeric?: Intl.RelativeTimeFormatNumeric; style?: Intl.RelativeTimeFormatStyle }`
149
- - L'`unit` par défaut est `"second"`.
412
+ - L’`unit` par défaut est `"second"`.
150
413
 
151
414
  Exemples :
152
415
 
@@ -163,11 +426,11 @@ relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "il y a 2
163
426
 
164
427
  ### `units(value, options?)`
165
428
 
166
- Formate une valeur numérique en une chaîne d'unité localisée en utilisant `Intl.NumberFormat` avec `style: 'unit'`.
429
+ Formate une valeur numérique en chaîne localisée avec une unité en utilisant `Intl.NumberFormat` avec `style: 'unit'`.
167
430
 
168
431
  - **value** : `number | string`
169
432
  - **options** : `Intl.NumberFormatOptions & { locale?: LocalesValues }`
170
- - Champs courants : `unit` (par exemple, `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
433
+ - Champs communs : `unit` (par exemple, `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
171
434
  - Valeurs par défaut : `unit: 'day'`, `unitDisplay: 'short'`, `useGrouping: false`
172
435
 
173
436
  Exemples :
@@ -195,45 +458,192 @@ compact(1200); // "1.2K"
195
458
  compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
196
459
  ```
197
460
 
461
+ ### `list(values, options?)`
462
+
463
+ Formate un tableau de valeurs en une chaîne de liste localisée en utilisant `Intl.ListFormat`.
464
+
465
+ - **values** : `(string | number)[]`
466
+ - **options** : `Intl.ListFormatOptions & { locale?: LocalesValues }`
467
+ - Champs communs : `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
468
+ - Valeurs par défaut : `type: 'conjunction'`, `style: 'long'`
469
+
470
+ Exemples :
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"
478
+ ```
479
+
198
480
  ## Notes
199
481
 
200
- - Tous les helpers acceptent des entrées de type `string` ; elles sont converties en interne en nombres ou dates.
482
+ - Tous les helpers acceptent des entrées de type `string` ; elles sont converties en interne en nombres ou en dates.
201
483
  - La locale par défaut est celle configurée dans `internationalization.defaultLocale` si elle n'est pas fournie.
202
- - Ces utilitaires sont des wrappers légers ; pour un formatage avancé, utilisez directement les options standard d'`Intl`.
484
+ - Ces utilitaires sont des wrappers légers ; pour un formatage avancé, utilisez directement les options standard de `Intl`.
203
485
 
204
486
  ## Points d'entrée et réexportations (`@index.ts`)
205
487
 
206
- Les formateurs résident dans le package core et sont réexportés depuis des packages de plus haut niveau pour garder des imports ergonomiques à travers les environnements d'exécution :
488
+ Les formateurs résident dans le package core et sont réexportés depuis des packages de niveau supérieur pour garder des imports ergonomiques à travers les environnements d'exécution :
207
489
 
208
490
  Exemples :
209
491
 
210
492
  ```ts
211
493
  // Code de l'application (recommandé)
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
  Composants client :
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
  // ou dans les applications 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
569
  Composants serveur (ou runtime React Server) :
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
  // ou dans les applications 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
595
  > Ces hooks prendront en compte la locale depuis le `IntlayerProvider` ou `IntlayerServerProvider`
234
596
 
597
+ ### Vue
598
+
599
+ Composants client :
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
+ > Ces composables prendront en compte la locale depuis le `IntlayerProvider` injecté
615
+
235
616
  ## Historique de la documentation
236
617
 
237
618
  | Version | Date | Modifications |
238
619
  | ------- | ---------- | ---------------------------------------- |
239
- | 5.8.0 | 2025-08-18 | Ajout de la documentation des formatters |
620
+ | 5.8.0 | 2025-08-20 | Ajout des formateurs vue |
621
+ | 5.8.0 | 2025-08-18 | Ajout de la documentation des formateurs |
622
+
623
+ Composants client :
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
+ > Ces composables prendront en compte la locale depuis le `IntlayerProvider` injecté
639
+
640
+ ## Historique de la documentation
641
+
642
+ | Version | Date | Modifications |
643
+ | ------- | ---------- | ----------------------------------------------------------------------------------------- |
644
+ | 5.8.0 | 2025-08-20 | Ajout des formateurs vue |
645
+ | 5.8.0 | 2025-08-18 | Ajout de la documentation des formateurs |
646
+ | 5.8.0 | 2025-08-20 | Ajout de la documentation du formateur de liste |
647
+ | 5.8.0 | 2025-08-20 | Ajout d'utilitaires Intl supplémentaires (DisplayNames, Collator, PluralRules) |
648
+ | 5.8.0 | 2025-08-20 | Ajout d'utilitaires de locale (getLocaleName, getLocaleLang, getLocaleFromPath, etc.) |
649
+ | 5.8.0 | 2025-08-20 | Ajout d'utilitaires de gestion de contenu (getContent, getTranslation, getIntlayer, etc.) |
@@ -25,8 +25,8 @@ L'idée principale derrière Intlayer est d'adopter une gestion de contenu par 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
  Pour ce faire, le rôle d'Intlayer est de trouver tous vos `fichiers de déclaration de contenu`, dans tous les formats différents présents dans votre projet, puis de générer les `dictionnaires` à partir de ceux-ci.
@@ -45,12 +45,10 @@ L'étape de construction peut être réalisée de trois manières :
45
45
  - en utilisant les plugins d'application tels que le package [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/index.md), ou leurs équivalents pour [Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/next-intlayer/index.md). Lorsque vous utilisez l'un de ces plugins, Intlayer construira automatiquement vos dictionnaires lorsque vous démarrez (dev) ou construisez (prod) votre application.
46
46
 
47
47
  1. Déclaration des fichiers de contenu
48
-
49
48
  - Les fichiers de contenu peuvent être définis dans divers formats, tels que TypeScript, ECMAScript, CommonJS ou JSON.
50
49
  - Les fichiers de contenu peuvent être définis partout dans le projet, ce qui permet une meilleure maintenance et évolutivité. Il est important de respecter les conventions d'extension de fichier pour les fichiers de contenu. Cette extension est par défaut `*.content.{js|cjs|mjs|ts|tsx|json}`, mais elle peut être modifiée dans le [fichier de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
51
50
 
52
51
  2. Génération des `dictionnaires`
53
-
54
52
  - Les dictionnaires sont générés à partir des fichiers de contenu. Par défaut, les dictionnaires Intlayer sont générés dans le répertoire `.intlayer/dictionaries` du projet.
55
53
  - Ces dictionnaires sont générés dans différents formats pour répondre à tous les besoins et optimiser les performances de l'application.
56
54
 
@@ -198,25 +198,22 @@ Cette approche vous permet de :
198
198
  - Les fichiers `.content.{{ts|mjs|cjs|json}}` peuvent être créés à l'aide d'une extension VSCode
199
199
  - Les outils d'autocomplétion IA dans votre IDE (comme GitHub Copilot) peuvent vous aider à déclarer votre contenu, réduisant ainsi le copier/coller
200
200
 
201
- 2. **Réduire la complexité de votre base de code**
201
+ 2. **Nettoyer votre base de code**
202
+ - Réduire la complexité
203
+ - Augmenter la maintenabilité
202
204
 
203
- 3. **Augmenter la maintenabilité de votre base de code**
204
-
205
- 4. **Dupliquer plus facilement vos composants et leur contenu associé (Exemple : composants de connexion/inscription, etc.)**
205
+ 3. **Dupliquer plus facilement vos composants et leur contenu associé (Exemple : composants de connexion/inscription, etc.)**
206
206
  - En limitant le risque d'impacter le contenu d'autres composants
207
207
  - En copiant/collant votre contenu d'une application à une autre sans dépendances externes
208
208
 
209
- 5. **Éviter de polluer votre base de code avec des clés/valeurs inutilisées pour des composants non utilisés**
210
- - Si vous n'utilisez pas un composant, vous n'avez pas besoin d'importer son contenu
209
+ 4. **Éviter de polluer votre base de code avec des clés/valeurs inutilisées pour des composants non utilisés**
210
+ - Si vous ne utilisez pas un composant, Intlayer ne l'importera pas
211
211
  - Si vous supprimez un composant, vous vous souviendrez plus facilement de supprimer son contenu associé puisqu'il sera présent dans le même dossier
212
212
 
213
- 6. **Réduire le coût de raisonnement pour les agents IA afin de déclarer votre contenu multilingue**
213
+ 5. **Réduire le coût de raisonnement pour les agents IA afin de déclarer votre contenu multilingue**
214
214
  - L'agent IA n'aura pas à scanner l'ensemble de votre base de code pour savoir où implémenter votre contenu
215
215
  - Les traductions peuvent facilement être réalisées par des outils d'autocomplétion IA dans votre IDE (comme GitHub Copilot)
216
216
 
217
- 7. **Optimiser les performances de chargement**
218
- - Si un composant est chargé de manière paresseuse (lazy-loaded), son contenu associé sera chargé en même temps
219
-
220
217
  ## Fonctionnalités supplémentaires d'Intlayer
221
218
 
222
219
  | Fonctionnalité | Description |
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-08-11
3
3
  updatedAt: 2025-08-11
4
4
  title: Prise en main d'Intlayer avec TanStack Start (React)
5
- description: Ajoutez l'internationalisation à votre application TanStack Start avec Intlayer dictionnaires au niveau des composants, URLs localisées et métadonnées optimisées pour le SEO.
5
+ description: Ajoutez l'internationalisation à votre application TanStack Start avec Intlayer - dictionnaires au niveau des composants, URLs localisées et métadonnées optimisées pour le SEO.
6
6
  keywords:
7
7
  - Internationalisation
8
8
  - Documentation
@@ -32,8 +32,8 @@ Intlayer propose également un éditeur visuel optionnel qui vous permet de modi
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"