@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: Conteúdo Baseado em Gênero
5
+ description: Aprenda como usar conteúdo baseado em gênero no Intlayer para exibir conteúdo dinamicamente com base no gênero. Siga esta documentação para implementar conteúdo específico por gênero de forma eficiente em seu projeto.
6
+ keywords:
7
+ - Conteúdo Baseado em Gênero
8
+ - Renderização Dinâmica
9
+ - Documentação
10
+ - Intlayer
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - concept
17
+ - content
18
+ - gender
19
+ ---
20
+
21
+ # Conteúdo Baseado em Gênero / Gênero no Intlayer
22
+
23
+ ## Como o Gênero Funciona
24
+
25
+ No Intlayer, o conteúdo baseado em gênero é realizado por meio da função `gender`, que mapeia valores específicos de gênero ('male', 'female') para seus conteúdos correspondentes. Essa abordagem permite selecionar dinamicamente o conteúdo com base em um gênero fornecido. Quando integrado com React Intlayer ou Next Intlayer, o conteúdo apropriado é automaticamente escolhido de acordo com o gênero fornecido em tempo de execução.
26
+
27
+ ## Configurando Conteúdo Baseado em Gênero
28
+
29
+ Para configurar conteúdo baseado em gênero em seu projeto Intlayer, crie um módulo de conteúdo que inclua suas definições específicas por gênero. Abaixo estão exemplos em vários 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: "meu conteúdo para usuários do sexo masculino",
39
+ female: "meu conteúdo para usuários do sexo feminino",
40
+ fallback: "meu conteúdo quando o gênero não é 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: "meu conteúdo para usuários do sexo masculino",
57
+ female: "meu conteúdo para usuários do sexo feminino",
58
+ fallback: "meu conteúdo quando o gênero não é 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: "meu conteúdo para usuários do sexo masculino",
75
+ female: "meu conteúdo para usuários do sexo feminino",
76
+ fallback: "meu conteúdo quando o gênero não é 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": "meu conteúdo para usuários do sexo masculino",
93
+ "female": "meu conteúdo para usuários do sexo feminino",
94
+ "fallback": "meu conteúdo quando o gênero não é especificado", // Opcional
95
+ },
96
+ },
97
+ },
98
+ }
99
+ ```
100
+
101
+ > Se nenhum fallback for declarado, a última chave declarada será usada como fallback caso o gênero não seja especificado ou não corresponda a nenhum gênero definido.
102
+
103
+ ## Usando Conteúdo Baseado em Gênero com React Intlayer
104
+
105
+ Para utilizar conteúdo baseado em gênero dentro de um componente React, importe e use o hook `useIntlayer` do pacote `react-intlayer`. Esse hook busca o conteúdo para a chave especificada e permite que você passe um gênero para selecionar a saída apropriada.
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
+ /* Saída: meu conteúdo para usuários do sexo masculino */
119
+ myGender("male")
120
+ }
121
+ </p>
122
+ <p>
123
+ {
124
+ /* Saída: meu conteúdo para usuárias */
125
+ myGender("female")
126
+ }
127
+ </p>
128
+ <p>
129
+ {
130
+ /* Saída: meu conteúdo para usuários */
131
+ myGender("m")
132
+ }
133
+ </p>
134
+ <p>
135
+ {
136
+ /* Saída: meu conteúdo para usuárias */
137
+ myGender("f")
138
+ }
139
+ </p>
140
+ <p>
141
+ {
142
+ /* Saída: meu conteúdo quando o gênero não é especificado */
143
+ myGender("")
144
+ }
145
+ </p>
146
+ <p>
147
+ {
148
+ /* Saída: meu conteúdo quando o gênero não é 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
+ /* Saída: meu conteúdo para usuários */
170
+ myGender("male")
171
+ }
172
+ </p>
173
+ <p>
174
+ {
175
+ /* Saída: meu conteúdo para usuárias */
176
+ myGender("female")
177
+ }
178
+ </p>
179
+ <p>
180
+ {
181
+ /* Saída: meu conteúdo para usuários */
182
+ myGender("m")
183
+ }
184
+ </p>
185
+ <p>
186
+ {
187
+ /* Saída: meu conteúdo para usuárias */
188
+ myGender("f")
189
+ }
190
+ </p>
191
+ <p>
192
+ {
193
+ /* Saída: meu conteúdo quando o gênero não é especificado */
194
+ myGender("")
195
+ }
196
+ </p>
197
+ <p>
198
+ {
199
+ /* Saída: meu conteúdo quando o gênero não é 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
+ /* Saída: meu conteúdo para usuários */
221
+ myGender("male")
222
+ }
223
+ </p>
224
+ <p>
225
+ {
226
+ /* Saída: meu conteúdo para usuárias */
227
+ myGender("female")
228
+ }
229
+ </p>
230
+ <p>
231
+ {
232
+ /* Saída: meu conteúdo para usuários */
233
+ myGender("m")
234
+ }
235
+ </p>
236
+ <p>
237
+ {
238
+ /* Saída: meu conteúdo para usuárias */
239
+ myGender("f")
240
+ }
241
+ </p>
242
+ <p>
243
+ {
244
+ /* Saída: meu conteúdo quando o gênero não é especificado */
245
+ myGender("")
246
+ }
247
+ </p>
248
+ <p>
249
+ {
250
+ /* Saída: meu conteúdo quando o gênero não é especificado */
251
+ myGender(undefined)
252
+ }
253
+ </p>
254
+ </div>
255
+ );
256
+ };
257
+
258
+ module.exports = GenderComponent;
259
+ ```
260
+
261
+ ## Recursos Adicionais
262
+
263
+ Para informações mais detalhadas sobre configuração e uso, consulte os seguintes recursos:
264
+
265
+ - [Documentação do Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_cli.md)
266
+ - [Documentação do React Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_with_create_react_app.md)
267
+ - [Documentação do Next Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_with_nextjs_15.md)
268
+
269
+ Estes recursos oferecem mais informações sobre a configuração e o uso do Intlayer em vários ambientes e frameworks.
270
+
271
+ ## Histórico do Documento
272
+
273
+ | Versão | Data | Alterações |
274
+ | ------ | ---------- | ---------------------------------------- |
275
+ | 5.7.2 | 2025-07-27 | Introdução de conteúdo baseado em gênero |
@@ -94,7 +94,7 @@ O Intlayer também fornece um editor visual para permitir que você edite seu co
94
94
 
95
95
  - O servidor é uma aplicação simples em Express que escuta requisições do cliente e recupera o conteúdo da sua aplicação, como os `dictionaries` e a configuração para torná-los acessíveis no lado do cliente.
96
96
  - Por outro lado, o cliente é uma aplicação React que é usada para interagir com seu conteúdo usando uma interface visual.
97
- Quando você chama seu conteúdo usando `useIntlayer` e o editor está ativado, ele automaticamente envolve suas strings com um objeto Proxy chamado `IntlayerNode`. Esse nó usa `window.sendMessage` para se comunicar com um iframe encapsulado que contém a interface do editor visual.
97
+ Quando você chama seu conteúdo usando `useIntlayer` e o editor está ativado, ele automaticamente envolve suas strings com um objeto Proxy chamado `IntlayerNode`. Esse nó usa `window.postMessage` para se comunicar com um iframe encapsulado que contém a interface do editor visual.
98
98
  No lado do editor, ele escuta essas mensagens e simula uma interação real com seu conteúdo, permitindo que você edite o texto diretamente no contexto da sua aplicação.
99
99
 
100
100
  ## Otimização da construção do aplicativo
@@ -0,0 +1,244 @@
1
+ ---
2
+ createdAt: 2025-07-27
3
+ updatedAt: 2025-07-27
4
+ title: Mapeador de Locale
5
+ description: Descubra como o Mapeador de Locale funciona. Veja os passos usados pelo Mapeador de Locale na sua aplicação. Veja o que os diferentes pacotes fazem.
6
+ keywords:
7
+ - Mapeador de Locale
8
+ - Começar
9
+ - Intlayer
10
+ - Aplicação
11
+ - Pacotes
12
+ slugs:
13
+ - doc
14
+ - locale-mapper
15
+ ---
16
+
17
+ # Mapeador de Locale
18
+
19
+ O Mapeador de Locale é uma ferramenta poderosa que ajuda você a trabalhar com dados de internacionalização na sua aplicação Intlayer. Ele fornece três funções principais para transformar e organizar dados específicos de locale: `localeMap`, `localeFlatMap` e `localeRecord`.
20
+
21
+ ## Como o Mapeador de Locale Funciona
22
+
23
+ O Mapeador de Locale opera sobre um objeto `LocaleData` que contém todas as informações necessárias sobre um locale:
24
+
25
+ ```typescript
26
+ type LocaleData = {
27
+ locale: LocalesValues; // Código do locale atual (ex.: 'en', 'fr')
28
+ defaultLocale: LocalesValues; // Código do locale padrão
29
+ isDefault: boolean; // Indica se este é o locale padrão
30
+ locales: LocalesValues[]; // Array de todos os locales disponíveis
31
+ urlPrefix: string; // Prefixo de URL para este locale (ex.: '/fr' ou '')
32
+ };
33
+ ```
34
+
35
+ As funções do mapeador geram automaticamente esses dados para cada locale na sua configuração, levando em consideração:
36
+
37
+ - Sua lista de locales configurados
38
+ - A configuração do locale padrão
39
+ - Se o locale padrão deve ser prefixado nas URLs
40
+
41
+ ## Funções Principais
42
+
43
+ ### `localeMap`
44
+
45
+ Transforma cada locale em um único objeto usando uma função 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
+ **Exemplo: Criando objetos de rotas**
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 to `localeMap`, but the mapper function returns an array of objects that gets flattened into a single array.
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
+ **Exemplo: Criando múltiplas rotas por localidade**
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
+ Cria um objeto record onde cada localidade é uma chave que mapeia para um valor transformado pela função 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
+ **Exemplo: Carregando arquivos de tradução**
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
+ ## Configurando o Locale Mapper
150
+
151
+ O Locale Mapper usa automaticamente a configuração do seu Intlayer, mas você pode sobrescrever os padrões passando parâmetros:
152
+
153
+ ### Usando Configuração Padrão
154
+
155
+ ```typescript
156
+ import { localeMap } from "intlayer";
157
+
158
+ // Usa a configuração do intlayer.config.ts
159
+ const routes = localeMap((data) => ({
160
+ path: data.urlPrefix,
161
+ locale: data.locale,
162
+ }));
163
+ ```
164
+
165
+ ### Sobrescrevendo a Configuração
166
+
167
+ ```typescript
168
+ import { localeMap } from "intlayer";
169
+
170
+ // Sobrescreve os locais e o local padrão
171
+ const customRoutes = localeMap(
172
+ (data) => ({ path: data.urlPrefix, locale: data.locale }),
173
+ // ["en", "fr", "de"], // Locais personalizados
174
+ "en", // Local padrão personalizado
175
+ true // Prefixar local padrão nas URLs
176
+ );
177
+ ```
178
+
179
+ ## Exemplos Avançados de Uso
180
+
181
+ ### Criando Menus de Navegação
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
+ ### Gerando Dados 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
+ ### Carregamento Dinâmico de Traduções
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
+ ## Integração com Configuração
231
+
232
+ O Locale Mapper integra-se perfeitamente com a sua configuração Intlayer:
233
+
234
+ - **Locales**: Usa automaticamente `configuration.internationalization.locales`
235
+ - **Local Padrão**: Usa `configuration.internationalization.defaultLocale`
236
+ - **Prefixo de URL**: Respeita `configuration.middleware.prefixDefault`
237
+
238
+ Isso garante consistência em toda a sua aplicação e reduz a duplicação de configuração.
239
+
240
+ ## Histórico da Documentação
241
+
242
+ | Versão | Data | Alterações |
243
+ | ------ | ---------- | -------------------------------------- |
244
+ | 5.7.2 | 2025-07-27 | Adiciona documentação do locale mapper |