@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.
- package/dist/cjs/generated/docs.entry.cjs +82 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +82 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/dictionary/gender.md +275 -0
- package/docs/ar/how_works_intlayer.md +1 -1
- package/docs/ar/locale_mapper.md +246 -0
- package/docs/de/dictionary/gender.md +316 -0
- package/docs/de/how_works_intlayer.md +1 -1
- package/docs/de/locale_mapper.md +244 -0
- package/docs/en/dictionary/gender.md +275 -0
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +3 -0
- package/docs/en/locale_mapper.md +244 -0
- package/docs/en-GB/dictionary/gender.md +275 -0
- package/docs/en-GB/how_works_intlayer.md +1 -1
- package/docs/en-GB/locale_mapper.md +244 -0
- package/docs/es/dictionary/gender.md +275 -0
- package/docs/es/how_works_intlayer.md +1 -1
- package/docs/es/locale_mapper.md +244 -0
- package/docs/fr/dictionary/gender.md +276 -0
- package/docs/fr/how_works_intlayer.md +1 -1
- package/docs/fr/locale_mapper.md +244 -0
- package/docs/hi/dictionary/gender.md +276 -0
- package/docs/hi/how_works_intlayer.md +1 -1
- package/docs/hi/locale_mapper.md +244 -0
- package/docs/it/dictionary/gender.md +275 -0
- package/docs/it/how_works_intlayer.md +1 -1
- package/docs/it/locale_mapper.md +244 -0
- package/docs/ja/dictionary/gender.md +275 -0
- package/docs/ja/how_works_intlayer.md +1 -1
- package/docs/ja/locale_mapper.md +244 -0
- package/docs/ko/dictionary/gender.md +275 -0
- package/docs/ko/how_works_intlayer.md +1 -1
- package/docs/ko/locale_mapper.md +244 -0
- package/docs/pt/dictionary/gender.md +275 -0
- package/docs/pt/how_works_intlayer.md +1 -1
- package/docs/pt/locale_mapper.md +244 -0
- package/docs/ru/dictionary/gender.md +275 -0
- package/docs/ru/how_works_intlayer.md +1 -1
- package/docs/ru/locale_mapper.md +244 -0
- package/docs/zh/dictionary/gender.md +275 -0
- package/docs/zh/how_works_intlayer.md +1 -1
- package/docs/zh/locale_mapper.md +244 -0
- package/package.json +11 -11
- 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.
|
|
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 |
|