@intlayer/docs 5.7.2-canary.3 → 5.7.3

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 (48) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +82 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +82 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +2 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/dictionary/gender.md +275 -0
  8. package/docs/ar/how_works_intlayer.md +1 -1
  9. package/docs/ar/locale_mapper.md +246 -0
  10. package/docs/de/dictionary/gender.md +316 -0
  11. package/docs/de/how_works_intlayer.md +1 -1
  12. package/docs/de/locale_mapper.md +244 -0
  13. package/docs/en/dictionary/gender.md +275 -0
  14. package/docs/en/how_works_intlayer.md +1 -1
  15. package/docs/en/index.md +3 -0
  16. package/docs/en/locale_mapper.md +244 -0
  17. package/docs/en-GB/dictionary/gender.md +275 -0
  18. package/docs/en-GB/how_works_intlayer.md +1 -1
  19. package/docs/en-GB/locale_mapper.md +244 -0
  20. package/docs/es/dictionary/gender.md +275 -0
  21. package/docs/es/how_works_intlayer.md +1 -1
  22. package/docs/es/locale_mapper.md +244 -0
  23. package/docs/fr/dictionary/gender.md +276 -0
  24. package/docs/fr/how_works_intlayer.md +1 -1
  25. package/docs/fr/locale_mapper.md +244 -0
  26. package/docs/hi/dictionary/gender.md +276 -0
  27. package/docs/hi/how_works_intlayer.md +1 -1
  28. package/docs/hi/locale_mapper.md +244 -0
  29. package/docs/it/dictionary/gender.md +275 -0
  30. package/docs/it/how_works_intlayer.md +1 -1
  31. package/docs/it/locale_mapper.md +244 -0
  32. package/docs/ja/dictionary/gender.md +275 -0
  33. package/docs/ja/how_works_intlayer.md +1 -1
  34. package/docs/ja/locale_mapper.md +244 -0
  35. package/docs/ko/dictionary/gender.md +275 -0
  36. package/docs/ko/how_works_intlayer.md +1 -1
  37. package/docs/ko/locale_mapper.md +244 -0
  38. package/docs/pt/dictionary/gender.md +275 -0
  39. package/docs/pt/how_works_intlayer.md +1 -1
  40. package/docs/pt/locale_mapper.md +244 -0
  41. package/docs/ru/dictionary/gender.md +275 -0
  42. package/docs/ru/how_works_intlayer.md +1 -1
  43. package/docs/ru/locale_mapper.md +244 -0
  44. package/docs/zh/dictionary/gender.md +275 -0
  45. package/docs/zh/how_works_intlayer.md +1 -1
  46. package/docs/zh/locale_mapper.md +244 -0
  47. package/package.json +11 -11
  48. package/src/generated/docs.entry.ts +82 -0
@@ -0,0 +1,276 @@
1
+ ---
2
+ createdAt: 2025-07-27
3
+ updatedAt: 2025-07-27
4
+ title: Contenu basé sur le genre
5
+ description: Apprenez à utiliser le contenu basé sur le genre dans Intlayer pour afficher dynamiquement du contenu selon le genre. Suivez cette documentation pour implémenter efficacement du contenu spécifique au genre dans votre projet.
6
+ keywords:
7
+ - Contenu basé sur le genre
8
+ - Rendu dynamique
9
+ - Documentation
10
+ - Intlayer
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - concept
17
+ - content
18
+ - gender
19
+ ---
20
+
21
+ # Contenu basé sur le genre / Genre dans Intlayer
22
+
23
+ ## Comment fonctionne le genre
24
+
25
+ Dans Intlayer, le contenu basé sur le genre est réalisé grâce à la fonction `gender`, qui associe des valeurs de genre spécifiques ('male', 'female') à leur contenu correspondant. Cette approche vous permet de sélectionner dynamiquement du contenu en fonction d'un genre donné. Lorsqu'elle est intégrée avec React Intlayer ou Next Intlayer, le contenu approprié est automatiquement choisi en fonction du genre fourni à l'exécution.
26
+
27
+ ## Configuration du contenu basé sur le genre
28
+
29
+ Pour configurer du contenu basé sur le genre dans votre projet Intlayer, créez un module de contenu qui inclut vos définitions spécifiques au genre. Voici des exemples dans différents formats.
30
+
31
+ ```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
32
+ import { gender, type Dictionary } from "intlayer";
33
+
34
+ const myGenderContent = {
35
+ key: "my_key",
36
+ content: {
37
+ myGender: gender({
38
+ male: "mon contenu pour les utilisateurs masculins",
39
+ female: "mon contenu pour les utilisatrices féminines",
40
+ fallback: "mon contenu lorsque le genre n'est pas spécifié", // Optionnel
41
+ }),
42
+ },
43
+ } satisfies Dictionary;
44
+
45
+ export default myGenderContent;
46
+ ```
47
+
48
+ ```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
49
+ import { gender } from "intlayer";
50
+
51
+ /** @type {import('intlayer').Dictionary} */
52
+ const myGenderContent = {
53
+ key: "my_key",
54
+ content: {
55
+ myGender: gender({
56
+ male: "mon contenu pour les utilisateurs masculins",
57
+ female: "mon contenu pour les utilisatrices féminines",
58
+ fallback: "mon contenu lorsque le genre n'est pas spécifié", // Optionnel
59
+ }),
60
+ },
61
+ };
62
+
63
+ export default myGenderContent;
64
+ ```
65
+
66
+ ```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
67
+ const { gender } = require("intlayer");
68
+
69
+ /** @type {import('intlayer').Dictionary} */
70
+ const myGenderContent = {
71
+ key: "my_key",
72
+ content: {
73
+ myGender: gender({
74
+ male: "mon contenu pour les utilisateurs masculins",
75
+ female: "mon contenu pour les utilisatrices féminines",
76
+ fallback: "mon contenu lorsque le genre n'est pas spécifié", // Optionnel
77
+ }),
78
+ },
79
+ };
80
+
81
+ module.exports = myGenderContent;
82
+ ```
83
+
84
+ ```json5 fileName="**/*.content.json" contentDeclarationFormat="json"
85
+ {
86
+ "$schema": "https://intlayer.org/schema.json",
87
+ "key": "my_key",
88
+ "content": {
89
+ "myGender": {
90
+ "nodeType": "gender",
91
+ "gender": {
92
+ "male": "mon contenu pour les utilisateurs masculins",
93
+ "female": "mon contenu pour les utilisatrices féminines",
94
+ "fallback": "mon contenu lorsque le genre n'est pas spécifié", // Optionnel
95
+ },
96
+ },
97
+ },
98
+ }
99
+ ```
100
+
101
+ > Si aucun fallback n'est déclaré, la dernière clé déclarée sera prise comme fallback si le genre n'est pas spécifié ou ne correspond à aucun genre défini.
102
+
103
+ ## Utilisation du contenu basé sur le genre avec React Intlayer
104
+
105
+ Pour utiliser du contenu basé sur le genre dans un composant React, importez et utilisez le hook `useIntlayer` depuis le package `react-intlayer`. Ce hook récupère le contenu pour la clé spécifiée et vous permet de passer un genre pour sélectionner la sortie appropriée.
106
+
107
+ ```tsx fileName="**/*.tsx" codeFormat="typescript"
108
+ import type { FC } from "react";
109
+ import { useIntlayer } from "react-intlayer";
110
+
111
+ const GenderComponent: FC = () => {
112
+ const { myGender } = useIntlayer("my_key");
113
+
114
+ return (
115
+ <div>
116
+ <p>
117
+ {
118
+ /* Sortie : mon contenu pour les utilisateurs masculins */
119
+ myGender("male")
120
+ }
121
+ </p>
122
+ <p>
123
+ {
124
+ /* Sortie : mon contenu pour les utilisatrices */
125
+ myGender("female")
126
+ }
127
+ </p>
128
+ <p>
129
+ {
130
+ /* Sortie : mon contenu pour les utilisateurs masculins */
131
+ myGender("m")
132
+ }
133
+ </p>
134
+ <p>
135
+ {
136
+ /* Sortie : mon contenu pour les utilisatrices */
137
+ myGender("f")
138
+ }
139
+ </p>
140
+ <p>
141
+ {
142
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
143
+ myGender("")
144
+ }
145
+ </p>
146
+ <p>
147
+ {
148
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
149
+ myGender(undefined)
150
+ }
151
+ </p>
152
+ </div>
153
+ );
154
+ };
155
+
156
+ export default GenderComponent;
157
+ ```
158
+
159
+ ```javascript fileName="**/*.mjx" codeFormat="esm"
160
+ import { useIntlayer } from "react-intlayer";
161
+
162
+ const GenderComponent = () => {
163
+ const { myGender } = useIntlayer("my_key");
164
+
165
+ return (
166
+ <div>
167
+ <p>
168
+ {
169
+ /* Sortie : mon contenu pour les utilisateurs masculins */
170
+ myGender("male")
171
+ }
172
+ </p>
173
+ <p>
174
+ {
175
+ /* Sortie : mon contenu pour les utilisatrices */
176
+ myGender("female")
177
+ }
178
+ </p>
179
+ <p>
180
+ {
181
+ /* Sortie : mon contenu pour les utilisateurs masculins */
182
+ myGender("m")
183
+ }
184
+ </p>
185
+ <p>
186
+ {
187
+ /* Sortie : mon contenu pour les utilisatrices */
188
+ myGender("f")
189
+ }
190
+ </p>
191
+ <p>
192
+ {
193
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
194
+ myGender("")
195
+ }
196
+ </p>
197
+ <p>
198
+ {
199
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
200
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
201
+ myGender(undefined)
202
+ }
203
+ </p>
204
+ </div>
205
+ );
206
+ };
207
+
208
+ export default GenderComponent;
209
+ ```
210
+
211
+ ```javascript fileName="**/*.cjs" codeFormat="commonjs"
212
+ const { useIntlayer } = require("react-intlayer");
213
+
214
+ const GenderComponent = () => {
215
+ const { myGender } = useIntlayer("my_key");
216
+
217
+ return (
218
+ <div>
219
+ <p>
220
+ {
221
+ /* Sortie : mon contenu pour les utilisateurs masculins */
222
+ myGender("male")
223
+ }
224
+ </p>
225
+ <p>
226
+ {
227
+ /* Sortie : mon contenu pour les utilisatrices */
228
+ myGender("female")
229
+ }
230
+ </p>
231
+ <p>
232
+ {
233
+ /* Sortie : mon contenu pour les utilisateurs masculins */
234
+ myGender("m")
235
+ }
236
+ </p>
237
+ <p>
238
+ {
239
+ /* Sortie : mon contenu pour les utilisatrices */
240
+ myGender("f")
241
+ }
242
+ </p>
243
+ <p>
244
+ {
245
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
246
+ myGender("")
247
+ }
248
+ </p>
249
+ <p>
250
+ {
251
+ /* Sortie : mon contenu lorsque le genre n'est pas spécifié */
252
+ myGender(undefined)
253
+ }
254
+ </p>
255
+ </div>
256
+ );
257
+ };
258
+
259
+ module.exports = GenderComponent;
260
+ ```
261
+
262
+ ## Ressources supplémentaires
263
+
264
+ Pour des informations plus détaillées sur la configuration et l'utilisation, consultez les ressources suivantes :
265
+
266
+ - [Documentation CLI Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_cli.md)
267
+ - [Documentation React Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_with_create_react_app.md)
268
+ - [Documentation Next Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_with_nextjs_15.md)
269
+
270
+ Ces ressources offrent des informations supplémentaires sur la configuration et l'utilisation d'Intlayer dans divers environnements et frameworks.
271
+
272
+ ## Historique de la documentation
273
+
274
+ | Version | Date | Modifications |
275
+ | ------- | ---------- | ----------------------------------------- |
276
+ | 5.7.2 | 2025-07-27 | Introduction du contenu basé sur le genre |
@@ -95,7 +95,7 @@ Intlayer fournit également un éditeur visuel pour vous permettre d'éditer vot
95
95
 
96
96
  - Le serveur est une simple application Express qui écoute les requêtes du client et récupère le contenu de votre application, tels que les `dictionaries` et la configuration pour le rendre accessible côté client.
97
97
  - D'autre part, le client est une application React utilisée pour interagir avec votre contenu via une interface visuelle.
98
- Lorsque vous appelez votre contenu en utilisant `useIntlayer` et que l'éditeur est activé, il enveloppe automatiquement vos chaînes avec un objet Proxy nommé `IntlayerNode`. Ce nœud utilise `window.sendMessage` pour communiquer avec un iframe encapsulé contenant l'interface de l'éditeur visuel.
98
+ Lorsque vous appelez votre contenu en utilisant `useIntlayer` et que l'éditeur est activé, il enveloppe automatiquement vos chaînes avec un objet Proxy nommé `IntlayerNode`. Ce nœud utilise `window.postMessage` pour communiquer avec un iframe encapsulé contenant l'interface de l'éditeur visuel.
99
99
  Du côté de l'éditeur, celui-ci écoute ces messages et simule une interaction réelle avec votre contenu, vous permettant d'éditer le texte directement dans le contexte de votre application.
100
100
 
101
101
  ## Optimisation de la construction de l'application
@@ -0,0 +1,244 @@
1
+ ---
2
+ createdAt: 2025-07-27
3
+ updatedAt: 2025-07-27
4
+ title: Locale Mapper
5
+ description: Découvrez comment fonctionne Locale Mapper. Voyez les étapes utilisées par Locale Mapper dans votre application. Découvrez ce que font les différents packages.
6
+ keywords:
7
+ - Locale Mapper
8
+ - Démarrer
9
+ - Intlayer
10
+ - Application
11
+ - Packages
12
+ slugs:
13
+ - doc
14
+ - locale-mapper
15
+ ---
16
+
17
+ # Locale Mapper
18
+
19
+ Locale Mapper est un utilitaire puissant qui vous aide à travailler avec les données d'internationalisation dans votre application Intlayer. Il fournit trois fonctions principales pour transformer et organiser les données spécifiques à une locale : `localeMap`, `localeFlatMap` et `localeRecord`.
20
+
21
+ ## Comment fonctionne Locale Mapper
22
+
23
+ Locale Mapper opère sur un objet `LocaleData` qui contient toutes les informations nécessaires sur une locale :
24
+
25
+ ```typescript
26
+ type LocaleData = {
27
+ locale: LocalesValues; // Code de la locale actuelle (ex. : 'en', 'fr')
28
+ defaultLocale: LocalesValues; // Code de la locale par défaut
29
+ isDefault: boolean; // Indique si c'est la locale par défaut
30
+ locales: LocalesValues[]; // Tableau de toutes les locales disponibles
31
+ urlPrefix: string; // Préfixe URL pour cette locale (ex. : '/fr' ou '')
32
+ };
33
+ ```
34
+
35
+ Les fonctions du mapper génèrent automatiquement ces données pour chaque locale dans votre configuration, en tenant compte de :
36
+
37
+ - Votre liste de locales configurées
38
+ - La locale par défaut définie
39
+ - Si la locale par défaut doit être préfixée dans les URLs
40
+
41
+ ## Fonctions principales
42
+
43
+ ### `localeMap`
44
+
45
+ Transforme chaque locale en un objet unique en utilisant une fonction de mapping.
46
+
47
+ ```typescript
48
+ localeMap<T>(
49
+ mapper: (locale: LocaleData) => T,
50
+ locales?: LocalesValues[],
51
+ defaultLocale?: LocalesValues,
52
+ prefixDefault?: boolean
53
+ ): T[]
54
+ ```
55
+
56
+ **Exemple : Création d'objets de routes**
57
+
58
+ ```typescript
59
+ import { localeMap } from "intlayer";
60
+
61
+ const routes = localeMap((localizedData) => ({
62
+ path: localizedData.urlPrefix,
63
+ name: localizedData.locale,
64
+ isDefault: localizedData.isDefault,
65
+ locales: localizedData.locales,
66
+ defaultLocale: localizedData.defaultLocale,
67
+ }));
68
+
69
+ // Résultat :
70
+ // [
71
+ // { path: '/', name: 'en', isDefault: true, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },
72
+ // { path: '/fr', name: 'fr', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },
73
+ // { path: '/es', name: 'es', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' }
74
+ // ]
75
+ ```
76
+
77
+ ### `localeFlatMap`
78
+
79
+ Semblable à `localeMap`, mais la fonction de mappage retourne un tableau d'objets qui est aplati en un seul tableau.
80
+
81
+ ```typescript
82
+ localeFlatMap<T>(
83
+ mapper: (locale: LocaleData) => T[],
84
+ locales?: LocalesValues[],
85
+ defaultLocale?: LocalesValues,
86
+ prefixDefault?: boolean
87
+ ): T[]
88
+ ```
89
+
90
+ **Exemple : Création de plusieurs routes par locale**
91
+
92
+ ```typescript
93
+ import { localeFlatMap } from "intlayer";
94
+
95
+ const routes = localeFlatMap((localizedData) => [
96
+ {
97
+ path: localizedData.urlPrefix,
98
+ name: localizedData.locale,
99
+ isDefault: localizedData.isDefault,
100
+ },
101
+ {
102
+ path: `${localizedData.urlPrefix}/about`,
103
+ name: `${localizedData.locale}-about`,
104
+ isDefault: localizedData.isDefault,
105
+ },
106
+ ]);
107
+
108
+ // Résultat :
109
+ // [
110
+ // { path: '/', name: 'en', isDefault: true },
111
+ // { path: '/about', name: 'en-about', isDefault: true },
112
+ // { path: '/fr', name: 'fr', isDefault: false },
113
+ // { path: '/fr/about', name: 'fr-about', isDefault: false },
114
+ // { path: '/es', name: 'es', isDefault: false },
115
+ // { path: '/es/about', name: 'es-about', isDefault: false }
116
+ // ]
117
+ ```
118
+
119
+ ### `localeRecord`
120
+
121
+ Crée un objet record où chaque locale est une clé mappée à une valeur transformée par la fonction de mappage.
122
+
123
+ ```typescript
124
+ localeRecord<T>(
125
+ mapper: (locale: LocaleData) => T,
126
+ locales?: Locales[],
127
+ defaultLocale?: Locales,
128
+ prefixDefault?: boolean
129
+ ): Record<Locales, T>
130
+ ```
131
+
132
+ **Exemple : Chargement des fichiers de traduction**
133
+
134
+ ```typescript
135
+ import { localeRecord } from "intlayer";
136
+
137
+ const translations = localeRecord(({ locale }) =>
138
+ require(`./translations/${locale}.json`)
139
+ );
140
+
141
+ // Résultat :
142
+ // {
143
+ // en: { welcome: 'Welcome', hello: 'Hello' },
144
+ // fr: { welcome: 'Bienvenue', hello: 'Bonjour' },
145
+ // es: { welcome: 'Bienvenido', hello: 'Hola' }
146
+ // }
147
+ ```
148
+
149
+ ## Configuration du Locale Mapper
150
+
151
+ Le Locale Mapper utilise automatiquement votre configuration Intlayer, mais vous pouvez remplacer les valeurs par défaut en passant des paramètres :
152
+
153
+ ### Utilisation de la configuration par défaut
154
+
155
+ ```typescript
156
+ import { localeMap } from "intlayer";
157
+
158
+ // Utilise la configuration de intlayer.config.ts
159
+ const routes = localeMap((data) => ({
160
+ path: data.urlPrefix,
161
+ locale: data.locale,
162
+ }));
163
+ ```
164
+
165
+ ### Surcharge de la configuration
166
+
167
+ ```typescript
168
+ import { localeMap } from "intlayer";
169
+
170
+ // Remplace les locales et la locale par défaut
171
+ const customRoutes = localeMap(
172
+ (data) => ({ path: data.urlPrefix, locale: data.locale }),
173
+ ["en", "fr", "de"], // Langues personnalisées
174
+ "en", // Langue par défaut personnalisée
175
+ true // Préfixer la langue par défaut dans les URLs
176
+ );
177
+ ```
178
+
179
+ ## Exemples d'utilisation avancée
180
+
181
+ ### Création de menus de navigation
182
+
183
+ ```typescript
184
+ import { localeMap } from "intlayer";
185
+
186
+ const navigationItems = localeMap((data) => ({
187
+ label: data.locale.toUpperCase(),
188
+ href: data.urlPrefix || "/",
189
+ isActive: data.isDefault,
190
+ flag: `/flags/${data.locale}.svg`,
191
+ }));
192
+ ```
193
+
194
+ ### Génération des données du sitemap
195
+
196
+ ```typescript
197
+ import { localeFlatMap } from "intlayer";
198
+
199
+ const sitemapUrls = localeFlatMap((data) => [
200
+ {
201
+ url: `${data.urlPrefix}/`,
202
+ lastmod: new Date().toISOString(),
203
+ changefreq: "daily",
204
+ priority: data.isDefault ? 1.0 : 0.8,
205
+ },
206
+ {
207
+ url: `${data.urlPrefix}/about`,
208
+ lastmod: new Date().toISOString(),
209
+ changefreq: "mensuel",
210
+ priority: data.isDefault ? 0.8 : 0.6,
211
+ },
212
+ ]);
213
+ ```
214
+
215
+ ### Chargement dynamique des traductions
216
+
217
+ ```typescript
218
+ import { localeRecord } from "intlayer";
219
+
220
+ const translationModules = localeRecord(({ locale }) => ({
221
+ messages: import(`./locales/${locale}/messages.json`),
222
+ validation: import(`./locales/${locale}/validation.json`),
223
+ metadata: {
224
+ locale,
225
+ direction: ["ar", "he", "fa"].includes(locale) ? "rtl" : "ltr",
226
+ },
227
+ }));
228
+ ```
229
+
230
+ ## Intégration à la configuration
231
+
232
+ Le Locale Mapper s'intègre parfaitement à votre configuration Intlayer :
233
+
234
+ - **Locales** : Utilise automatiquement `configuration.internationalization.locales`
235
+ - **Langue par défaut** : Utilise `configuration.internationalization.defaultLocale`
236
+ - **Préfixage des URLs** : Respecte `configuration.middleware.prefixDefault`
237
+
238
+ Cela garantit la cohérence dans toute votre application et réduit la duplication de la configuration.
239
+
240
+ ## Historique de la documentation
241
+
242
+ | Version | Date | Modifications |
243
+ | ------- | ---------- | ------------------------------------------------ |
244
+ | 5.7.2 | 2025-07-27 | Ajout de la documentation du mappage des locales |