@intlayer/docs 5.7.2 → 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 +12 -12
  48. package/src/generated/docs.entry.ts +82 -0
@@ -0,0 +1,275 @@
1
+ ---
2
+ createdAt: 2025-07-27
3
+ updatedAt: 2025-07-27
4
+ title: Contenido Basado en Género
5
+ description: Aprende cómo usar contenido basado en género en Intlayer para mostrar contenido dinámicamente según el género. Sigue esta documentación para implementar contenido específico por género de manera eficiente en tu proyecto.
6
+ keywords:
7
+ - Contenido Basado en Género
8
+ - Renderizado Dinámico
9
+ - Documentación
10
+ - Intlayer
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - concepto
17
+ - contenido
18
+ - genero
19
+ ---
20
+
21
+ # Contenido Basado en Género / Género en Intlayer
22
+
23
+ ## Cómo Funciona el Género
24
+
25
+ En Intlayer, el contenido basado en género se logra mediante la función `gender`, que asigna valores específicos de género ('male', 'female') a su contenido correspondiente. Este enfoque te permite seleccionar dinámicamente el contenido según un género dado. Cuando se integra con React Intlayer o Next Intlayer, el contenido apropiado se selecciona automáticamente según el género proporcionado en tiempo de ejecución.
26
+
27
+ ## Configuración de Contenido Basado en Género
28
+
29
+ Para configurar contenido basado en género en tu proyecto Intlayer, crea un módulo de contenido que incluya tus definiciones específicas por género. A continuación, se muestran ejemplos en varios formatos.
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: "mi contenido para usuarios masculinos",
39
+ female: "mi contenido para usuarias femeninas",
40
+ fallback: "mi contenido cuando el género no está especificado", // Opcional
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: "mi contenido para usuarios masculinos",
57
+ female: "mi contenido para usuarias femeninas",
58
+ fallback: "mi contenido cuando el género no está especificado", // Opcional
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: "mi contenido para usuarios masculinos",
75
+ female: "mi contenido para usuarias femeninas",
76
+ fallback: "mi contenido cuando el género no está especificado", // Opcional
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": "mi contenido para usuarios masculinos",
93
+ "female": "mi contenido para usuarias femeninas",
94
+ "fallback": "mi contenido cuando el género no está especificado", // Opcional
95
+ },
96
+ },
97
+ },
98
+ }
99
+ ```
100
+
101
+ > Si no se declara un valor de reserva (fallback), se tomará la última clave declarada como reserva si el género no está especificado o no coincide con ningún género definido.
102
+
103
+ ## Uso de contenido basado en género con React Intlayer
104
+
105
+ Para utilizar contenido basado en género dentro de un componente React, importa y usa el hook `useIntlayer` del paquete `react-intlayer`. Este hook obtiene el contenido para la clave especificada y permite pasar un género para seleccionar la salida apropiada.
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
+ /* Salida: mi contenido para usuarios masculinos */
119
+ myGender("male")
120
+ }
121
+ </p>
122
+ <p>
123
+ {
124
+ /* Salida: mi contenido para usuarios femeninos */
125
+ myGender("female")
126
+ }
127
+ </p>
128
+ <p>
129
+ {
130
+ /* Salida: mi contenido para usuarios masculinos */
131
+ myGender("m")
132
+ }
133
+ </p>
134
+ <p>
135
+ {
136
+ /* Salida: mi contenido para usuarios femeninos */
137
+ myGender("f")
138
+ }
139
+ </p>
140
+ <p>
141
+ {
142
+ /* Salida: mi contenido cuando el género no está especificado */
143
+ myGender("")
144
+ }
145
+ </p>
146
+ <p>
147
+ {
148
+ /* Salida: mi contenido cuando el género no está especificado */
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
+ /* Salida: mi contenido para usuarios masculinos */
170
+ myGender("male")
171
+ }
172
+ </p>
173
+ <p>
174
+ {
175
+ /* Salida: mi contenido para usuarios femeninos */
176
+ myGender("female")
177
+ }
178
+ </p>
179
+ <p>
180
+ {
181
+ /* Salida: mi contenido para usuarios masculinos */
182
+ myGender("m")
183
+ }
184
+ </p>
185
+ <p>
186
+ {
187
+ /* Salida: mi contenido para usuarios femeninos */
188
+ myGender("f")
189
+ }
190
+ </p>
191
+ <p>
192
+ {
193
+ /* Salida: mi contenido cuando el género no está especificado */
194
+ myGender("")
195
+ }
196
+ </p>
197
+ <p>
198
+ {
199
+ /* Salida: mi contenido cuando el género no está especificado */
200
+ myGender(undefined)
201
+ }
202
+ </p>
203
+ </div>
204
+ );
205
+ };
206
+
207
+ export default GenderComponent;
208
+ ```
209
+
210
+ ```javascript fileName="**/*.cjs" codeFormat="commonjs"
211
+ const { useIntlayer } = require("react-intlayer");
212
+
213
+ const GenderComponent = () => {
214
+ const { myGender } = useIntlayer("my_key");
215
+
216
+ return (
217
+ <div>
218
+ <p>
219
+ {
220
+ /* Salida: mi contenido para usuarios masculinos */
221
+ myGender("male")
222
+ }
223
+ </p>
224
+ <p>
225
+ {
226
+ /* Salida: mi contenido para usuarios femeninos */
227
+ myGender("female")
228
+ }
229
+ </p>
230
+ <p>
231
+ {
232
+ /* Salida: mi contenido para usuarios masculinos */
233
+ myGender("m")
234
+ }
235
+ </p>
236
+ <p>
237
+ {
238
+ /* Salida: mi contenido para usuarios femeninos */
239
+ myGender("f")
240
+ }
241
+ </p>
242
+ <p>
243
+ {
244
+ /* Salida: mi contenido cuando el género no está especificado */
245
+ myGender("")
246
+ }
247
+ </p>
248
+ <p>
249
+ {
250
+ /* Salida: mi contenido cuando el género no está especificado */
251
+ myGender(undefined)
252
+ }
253
+ </p>
254
+ </div>
255
+ );
256
+ };
257
+
258
+ module.exports = GenderComponent;
259
+ ```
260
+
261
+ ## Recursos Adicionales
262
+
263
+ Para obtener información más detallada sobre la configuración y el uso, consulte los siguientes recursos:
264
+
265
+ - [Documentación de Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_cli.md)
266
+ - [Documentación de React Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_create_react_app.md)
267
+ - [Documentación de Next Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_15.md)
268
+
269
+ Estos recursos ofrecen una visión más profunda sobre la configuración y el uso de Intlayer en diversos entornos y frameworks.
270
+
271
+ ## Historial del Documento
272
+
273
+ | Versión | Fecha | Cambios |
274
+ | ------- | ---------- | ------------------------------------------ |
275
+ | 5.7.2 | 2025-07-27 | Introducción de contenido basado en género |
@@ -94,7 +94,7 @@ Intlayer también proporciona un editor visual para permitirte editar tu conteni
94
94
 
95
95
  - El servidor es una aplicación simple de Express que escucha las solicitudes del cliente y recupera el contenido de tu aplicación, como los `dictionaries` y la configuración para hacerlo accesible en el lado del cliente.
96
96
  - Por otro lado, el cliente es una aplicación React que se usa para interactuar con tu contenido mediante una interfaz visual.
97
- Cuando llamas a tu contenido usando `useIntlayer` y el editor está habilitado, automáticamente envuelve tus cadenas con un objeto Proxy llamado `IntlayerNode`. Este nodo utiliza `window.sendMessage` para comunicarse con un iframe envuelto que contiene la interfaz del editor visual.
97
+ Cuando llamas a tu contenido usando `useIntlayer` y el editor está habilitado, automáticamente envuelve tus cadenas con un objeto Proxy llamado `IntlayerNode`. Este nodo utiliza `window.postMessage` para comunicarse con un iframe envuelto que contiene la interfaz del editor visual.
98
98
  En el lado del editor, este escucha estos mensajes y simula una interacción real con tu contenido, permitiéndote editar el texto directamente en el contexto de tu aplicación.
99
99
 
100
100
  ## Optimización de la construcción de la aplicación
@@ -0,0 +1,244 @@
1
+ ---
2
+ createdAt: 2025-07-27
3
+ updatedAt: 2025-07-27
4
+ title: Mapeador de Locales
5
+ description: Descubre cómo funciona el Mapeador de Locales. Ve los pasos que utiliza el Mapeador de Locales en tu aplicación. Descubre qué hacen los diferentes paquetes.
6
+ keywords:
7
+ - Mapeador de Locales
8
+ - Comenzar
9
+ - Intlayer
10
+ - Aplicación
11
+ - Paquetes
12
+ slugs:
13
+ - doc
14
+ - mapeador-locales
15
+ ---
16
+
17
+ # Mapeador de Locales
18
+
19
+ El Mapeador de Locales es una utilidad poderosa que te ayuda a trabajar con datos de internacionalización en tu aplicación Intlayer. Proporciona tres funciones principales para transformar y organizar datos específicos de cada locale: `localeMap`, `localeFlatMap` y `localeRecord`.
20
+
21
+ ## Cómo Funciona el Mapeador de Locales
22
+
23
+ El Mapeador de Locales opera sobre un objeto `LocaleData` que contiene toda la información necesaria sobre un locale:
24
+
25
+ ```typescript
26
+ type LocaleData = {
27
+ locale: LocalesValues; // Código del locale actual (por ejemplo, 'en', 'fr')
28
+ defaultLocale: LocalesValues; // Código del locale por defecto
29
+ isDefault: boolean; // Indica si este es el locale por defecto
30
+ locales: LocalesValues[]; // Array de todos los locales disponibles
31
+ urlPrefix: string; // Prefijo de URL para este locale (por ejemplo, '/fr' o '')
32
+ };
33
+ ```
34
+
35
+ Las funciones del mapeador generan automáticamente estos datos para cada locale en tu configuración, teniendo en cuenta:
36
+
37
+ - La lista de locales configurados
38
+ - La configuración del locale por defecto
39
+ - Si el locale por defecto debe tener prefijo en las URLs
40
+
41
+ ## Funciones Principales
42
+
43
+ ### `localeMap`
44
+
45
+ Transforma cada locale en un único objeto usando una función mapeadora.
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
+ **Ejemplo: Creando objetos de rutas**
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
+ // Resultado:
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
+ Similar a `localeMap`, pero la función mapper devuelve un arreglo de objetos que se aplanan en un solo arreglo.
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
+ **Ejemplo: Creando múltiples rutas por cada 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
+ // Resultado:
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
+ Crea un objeto tipo registro donde cada locale es una clave que mapea a un valor transformado por la función mapper.
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
+ **Ejemplo: Cargando archivos de traducción**
133
+
134
+ ```typescript
135
+ import { localeRecord } from "intlayer";
136
+
137
+ const translations = localeRecord(({ locale }) =>
138
+ require(`./translations/${locale}.json`)
139
+ );
140
+
141
+ /// Resultado:
142
+ // {
143
+ // en: { welcome: 'Welcome', hello: 'Hello' },
144
+ // fr: { welcome: 'Bienvenue', hello: 'Bonjour' },
145
+ // es: { welcome: 'Bienvenido', hello: 'Hola' }
146
+ // }
147
+ ```
148
+
149
+ ## Configuración del Locale Mapper
150
+
151
+ El Locale Mapper utiliza automáticamente la configuración de Intlayer, pero puedes sobrescribir los valores predeterminados pasando parámetros:
152
+
153
+ ### Usando la Configuración Predeterminada
154
+
155
+ ```typescript
156
+ import { localeMap } from "intlayer";
157
+
158
+ // Usa la configuración de intlayer.config.ts
159
+ const routes = localeMap((data) => ({
160
+ path: data.urlPrefix,
161
+ locale: data.locale,
162
+ }));
163
+ ```
164
+
165
+ ### Sobrescribiendo la Configuración
166
+
167
+ ```typescript
168
+ import { localeMap } from "intlayer";
169
+
170
+ // Sobrescribe locales y locale predeterminado
171
+ const customRoutes = localeMap(
172
+ (data) => ({ path: data.urlPrefix, locale: data.locale }),
173
+ ["en", "fr", "de"], // Locales personalizadas
174
+ "en", // Locale predeterminada personalizada
175
+ true // Prefijar locale predeterminada en las URLs
176
+ );
177
+ ```
178
+
179
+ ## Ejemplos de Uso Avanzado
180
+
181
+ ### Creación de Menús de Navegación
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
+ ### Generación de Datos para 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: "monthly",
210
+ priority: data.isDefault ? 0.8 : 0.6,
211
+ },
212
+ ]);
213
+ ```
214
+
215
+ ### Carga Dinámica de Traducciones
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
+ ## Integración de Configuración
231
+
232
+ El Locale Mapper se integra perfectamente con la configuración de Intlayer:
233
+
234
+ - **Locales**: Utiliza automáticamente `configuration.internationalization.locales`
235
+ - **Locale Predeterminada**: Usa `configuration.internationalization.defaultLocale`
236
+ - **Prefijo en URL**: Respeta `configuration.middleware.prefixDefault`
237
+
238
+ Esto garantiza la coherencia en toda su aplicación y reduce la duplicación de configuraciones.
239
+
240
+ ## Historial de Documentación
241
+
242
+ | Versión | Fecha | Cambios |
243
+ | ------- | ---------- | --------------------------------------------- |
244
+ | 5.7.2 | 2025-07-27 | Añadida documentación del mapeador de locales |