@intlayer/docs 8.4.7 → 8.4.8
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/docs/ar/configuration.md +958 -0
- package/docs/cs/configuration.md +958 -0
- package/docs/de/configuration.md +958 -0
- package/docs/en-GB/configuration.md +957 -0
- package/docs/es/configuration.md +161 -133
- package/docs/fr/configuration.md +137 -109
- package/docs/it/configuration.md +958 -0
- package/docs/ja/configuration.md +958 -0
- package/docs/nl/configuration.md +958 -0
- package/docs/pt/configuration.md +958 -0
- package/docs/ru/configuration.md +958 -0
- package/docs/tr/configuration.md +958 -0
- package/package.json +6 -6
|
@@ -0,0 +1,958 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-08-13
|
|
3
|
+
updatedAt: 2026-03-20
|
|
4
|
+
title: Configuração (Configuration)
|
|
5
|
+
description: Saiba como configurar o Intlayer para a sua aplicação. Entenda as várias configurações e opções disponíveis para personalizar o Intlayer conforme as suas necessidades.
|
|
6
|
+
keywords:
|
|
7
|
+
- Configuração
|
|
8
|
+
- Definições
|
|
9
|
+
- Personalização
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Opções
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- concept
|
|
15
|
+
- configuration
|
|
16
|
+
history:
|
|
17
|
+
- version: 8.4.0
|
|
18
|
+
date: 2026-03-20
|
|
19
|
+
changes: Adicionada notação de objeto por localidade para 'compiler.output' e 'dictionary.fill'
|
|
20
|
+
- version: 8.3.0
|
|
21
|
+
date: 2026-03-11
|
|
22
|
+
changes: Movido 'baseDir' da configuração 'content' para a configuração 'system'
|
|
23
|
+
- version: 8.2.0
|
|
24
|
+
date: 2026-03-09
|
|
25
|
+
changes: Atualizadas as opções do compilador, adicionado suporte para 'output' e 'noMetadata'
|
|
26
|
+
- version: 8.1.7
|
|
27
|
+
date: 2026-02-25
|
|
28
|
+
changes: Atualizadas as opções do compilador
|
|
29
|
+
- version: 8.1.5
|
|
30
|
+
date: 2026-02-23
|
|
31
|
+
changes: Adicionada opção do compilador 'build-only' e prefixo do dicionário
|
|
32
|
+
- version: 8.0.6
|
|
33
|
+
date: 2026-02-12
|
|
34
|
+
changes: Adicionado suporte para provedores Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face e Together.ai
|
|
35
|
+
- version: 8.0.5
|
|
36
|
+
date: 2026-02-06
|
|
37
|
+
changes: Adicionado `dataSerialization` à configuração de IA
|
|
38
|
+
- version: 8.0.0
|
|
39
|
+
date: 2026-01-24
|
|
40
|
+
changes: Renomeado o modo de importação `live` para `fetch` para descrever melhor o mecanismo subjacente.
|
|
41
|
+
- version: 8.0.0
|
|
42
|
+
date: 2026-01-22
|
|
43
|
+
changes: Movida a configuração de build `importMode` para a configuração `dictionary`.
|
|
44
|
+
- version: 8.0.0
|
|
45
|
+
date: 2026-01-22
|
|
46
|
+
changes: Adicionada a opção `rewrite` à configuração de roteamento
|
|
47
|
+
- version: 8.0.0
|
|
48
|
+
date: 2026-01-18
|
|
49
|
+
changes: Separada a configuração do sistema da configuração de conteúdo. Movidos os caminhos internos para a propriedade `system`. Adicionado `codeDir` para separar os arquivos de conteúdo da transformação de código.
|
|
50
|
+
- version: 8.0.0
|
|
51
|
+
date: 2026-01-18
|
|
52
|
+
changes: Adicionadas as opções de dicionário `location` e `schema`
|
|
53
|
+
- version: 7.5.1
|
|
54
|
+
date: 2026-01-10
|
|
55
|
+
changes: Adicionado suporte para os formatos de arquivo JSON5 e JSONC
|
|
56
|
+
- version: 7.5.0
|
|
57
|
+
date: 2025-12-17
|
|
58
|
+
changes: Adicionada a opção `buildMode`
|
|
59
|
+
- version: 7.0.0
|
|
60
|
+
date: 2025-10-25
|
|
61
|
+
changes: Adicionada a configuração `dictionary`
|
|
62
|
+
- version: 7.0.0
|
|
63
|
+
date: 2025-10-21
|
|
64
|
+
changes: Substituído `middleware` pela configuração `routing`
|
|
65
|
+
- version: 7.0.0
|
|
66
|
+
date: 2025-10-12
|
|
67
|
+
changes: Adicionada a opção `formatCommand`
|
|
68
|
+
- version: 6.2.0
|
|
69
|
+
date: 2025-10-12
|
|
70
|
+
changes: Atualizada a opção `excludedPath`
|
|
71
|
+
- version: 6.0.2
|
|
72
|
+
date: 2025-09-23
|
|
73
|
+
changes: Adicionada a opção `outputFormat`
|
|
74
|
+
- version: 6.0.0
|
|
75
|
+
date: 2025-09-21
|
|
76
|
+
changes: Removido o campo `dictionaryOutput` e o campo `i18nextResourcesDir`
|
|
77
|
+
- version: 6.0.0
|
|
78
|
+
date: 2025-09-16
|
|
79
|
+
changes: Adicionado o modo de importação `live`
|
|
80
|
+
- version: 6.0.0
|
|
81
|
+
date: 2025-09-04
|
|
82
|
+
changes: Substituído o campo `hotReload` por `liveSync` e adicionados os campos `liveSyncPort` e `liveSyncURL`
|
|
83
|
+
- version: 5.6.1
|
|
84
|
+
date: 2025-07-25
|
|
85
|
+
changes: Substituído `activateDynamicImport` pela opção `importMode`
|
|
86
|
+
- version: 5.6.0
|
|
87
|
+
date: 2025-07-13
|
|
88
|
+
changes: Alterado o `contentDir` padrão de `['src']` para `['.']`
|
|
89
|
+
- version: 5.5.11
|
|
90
|
+
date: 2025-06-29
|
|
91
|
+
changes: Adicionados os comandos `docs`
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
# Documentação de Configuração do Intlayer
|
|
95
|
+
|
|
96
|
+
## Visão Geral
|
|
97
|
+
|
|
98
|
+
Os arquivos de configuração do Intlayer permitem que você personalize vários aspetos do plugin, como internacionalização, middleware e gestão de conteúdo. Este documento fornece uma descrição detalhada de cada propriedade na configuração.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Índice
|
|
103
|
+
|
|
104
|
+
<TOC/>
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Suporte de Ficheiros de Configuração
|
|
109
|
+
|
|
110
|
+
O Intlayer aceita os formatos de ficheiro de configuração JSON, JS, MJS e TS:
|
|
111
|
+
|
|
112
|
+
- `intlayer.config.ts`
|
|
113
|
+
- `intlayer.config.js`
|
|
114
|
+
- `intlayer.config.json`
|
|
115
|
+
- `intlayer.config.json5`
|
|
116
|
+
- `intlayer.config.jsonc`
|
|
117
|
+
- `intlayer.config.cjs`
|
|
118
|
+
- `intlayer.config.mjs`
|
|
119
|
+
- `.intlayerrc`
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Exemplo de Ficheiro de Configuração
|
|
124
|
+
|
|
125
|
+
````typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { nextjsRewrite } from "intlayer/routing";
|
|
128
|
+
import { z } from "zod";
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Exemplo de ficheiro de configuração do Intlayer que mostra todas as opções disponíveis.
|
|
132
|
+
*/
|
|
133
|
+
const config: IntlayerConfig = {
|
|
134
|
+
/**
|
|
135
|
+
* Configuração para as definições de internacionalização.
|
|
136
|
+
*/
|
|
137
|
+
internationalization: {
|
|
138
|
+
/**
|
|
139
|
+
* Lista de idiomas suportados na aplicação.
|
|
140
|
+
* Padrão: [Locales.ENGLISH]
|
|
141
|
+
*/
|
|
142
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Lista de idiomas obrigatórios que devem ser definidos em cada dicionário.
|
|
146
|
+
* Se vazio, todos os idiomas são obrigatórios no modo `strict`.
|
|
147
|
+
* Padrão: []
|
|
148
|
+
*/
|
|
149
|
+
requiredLocales: [Locales.ENGLISH],
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Nível de severidade para o conteúdo internacionalizado.
|
|
153
|
+
* - "strict": Erro se faltar um idioma declarado ou se não estiver declarado.
|
|
154
|
+
* - "inclusive": Aviso se faltar um idioma declarado.
|
|
155
|
+
* - "loose": Aceita qualquer idioma existente.
|
|
156
|
+
* Padrão: "inclusive"
|
|
157
|
+
*/
|
|
158
|
+
strictMode: "inclusive",
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Idioma padrão usado como fallback se o idioma solicitado não for encontrado.
|
|
162
|
+
* Padrão: Locales.ENGLISH
|
|
163
|
+
*/
|
|
164
|
+
defaultLocale: Locales.ENGLISH,
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Configurações que controlam as operações do dicionário e o comportamento de fallback.
|
|
169
|
+
*/
|
|
170
|
+
dictionary: {
|
|
171
|
+
/**
|
|
172
|
+
* Controla como os dicionários são importados.
|
|
173
|
+
* - "static": Importado estaticamente no momento da build.
|
|
174
|
+
* - "dynamic": Importado dinamicamente usando Suspense.
|
|
175
|
+
* - "fetch": Recuperado dinamicamente através da API Live Sync.
|
|
176
|
+
* Padrão: "static"
|
|
177
|
+
*/
|
|
178
|
+
importMode: "static",
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Estratégia para o preenchimento automático de traduções em falta usando IA.
|
|
182
|
+
* Pode ser um booleano ou um padrão de caminho para armazenar o conteúdo preenchido.
|
|
183
|
+
* Padrão: true
|
|
184
|
+
*/
|
|
185
|
+
fill: true,
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Localização física dos ficheiros do dicionário.
|
|
189
|
+
* - "local": Armazenado no sistema de ficheiros local.
|
|
190
|
+
* - "remote": Armazenado no Intlayer CMS.
|
|
191
|
+
* - "hybrid": Armazenado no sistema de ficheiros local e no Intlayer CMS.
|
|
192
|
+
* - "plugin" (ou qualquer string personalizada): Fornecido por um plugin ou fonte personalizada.
|
|
193
|
+
* Padrão: "local"
|
|
194
|
+
*/
|
|
195
|
+
location: "local",
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Se deve transformar automaticamente os conteúdos (ex: Markdown para HTML).
|
|
199
|
+
* Padrão: false
|
|
200
|
+
*/
|
|
201
|
+
contentAutoTransformation: false,
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Configuração de roteamento e middleware.
|
|
206
|
+
*/
|
|
207
|
+
routing: {
|
|
208
|
+
/**
|
|
209
|
+
* Estratégia de roteamento de idiomas.
|
|
210
|
+
* - "prefix-no-default": Prefixo para todos exceto o idioma padrão (ex: /dashboard, /fr/dashboard).
|
|
211
|
+
* - "prefix-all": Prefixo para todos os idiomas (ex: /en/dashboard, /fr/dashboard).
|
|
212
|
+
* - "no-prefix": Sem idioma no URL.
|
|
213
|
+
* - "search-params": Usa ?locale=...
|
|
214
|
+
* Padrão: "prefix-no-default"
|
|
215
|
+
*/
|
|
216
|
+
mode: "prefix-no-default",
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Onde armazenar o idioma selecionado pelo utilizador.
|
|
220
|
+
* Opções: 'cookie', 'localStorage', 'sessionStorage', 'header', ou um array destes.
|
|
221
|
+
* Padrão: ['cookie', 'header']
|
|
222
|
+
*/
|
|
223
|
+
storage: ["cookie", "header"],
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Caminho base para os URLs da aplicação.
|
|
227
|
+
* Padrão: ""
|
|
228
|
+
*/
|
|
229
|
+
basePath: "",
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Regras de reescrita de URL personalizadas para caminhos específicos de idioma.
|
|
233
|
+
*/
|
|
234
|
+
rewrite: nextjsRewrite({
|
|
235
|
+
"/[locale]/about": {
|
|
236
|
+
en: "/[locale]/about",
|
|
237
|
+
fr: "/[locale]/a-propos",
|
|
238
|
+
},
|
|
239
|
+
}),
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Configurações para encontrar e processar ficheiros de conteúdo.
|
|
244
|
+
*/
|
|
245
|
+
content: {
|
|
246
|
+
/**
|
|
247
|
+
* Extensões de ficheiro a analisar para dicionários.
|
|
248
|
+
* Padrão: ['.content.ts', '.content.js', '.content.json', etc.]
|
|
249
|
+
*/
|
|
250
|
+
fileExtensions: [".content.ts", ".content.js", ".content.json"],
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Diretórios onde os ficheiros .content residem.
|
|
254
|
+
* Padrão: ["."]
|
|
255
|
+
*/
|
|
256
|
+
contentDir: ["src"],
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Diretório onde o código fonte reside.
|
|
260
|
+
* Usado para otimização de build e transformação de código.
|
|
261
|
+
* Padrão: ["."]
|
|
262
|
+
*/
|
|
263
|
+
codeDir: ["src"],
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Padrões a excluir da análise.
|
|
267
|
+
* Padrão: ['node_modules', '.intlayer', etc.]
|
|
268
|
+
*/
|
|
269
|
+
excludedPath: ["node_modules"],
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Se deve monitorizar alterações e regenerar dicionários durante o desenvolvimento.
|
|
273
|
+
* Padrão: true em desenvolvimento
|
|
274
|
+
*/
|
|
275
|
+
watch: true,
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Comando para formatar ficheiros .content recém-criados / atualizados.
|
|
279
|
+
*/
|
|
280
|
+
formatCommand: 'npx prettier --write "{{file}}"',
|
|
281
|
+
},
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Configuração do Visual Editor.
|
|
285
|
+
*/
|
|
286
|
+
editor: {
|
|
287
|
+
/**
|
|
288
|
+
* Se o visual editor está ativado.
|
|
289
|
+
* Padrão: false
|
|
290
|
+
*/
|
|
291
|
+
enabled: true,
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* URL da sua aplicação para validação de origem.
|
|
295
|
+
* Padrão: ""
|
|
296
|
+
*/
|
|
297
|
+
applicationURL: "http://localhost:3000",
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Porta para o servidor local do editor.
|
|
301
|
+
* Padrão: 8000
|
|
302
|
+
*/
|
|
303
|
+
port: 8000,
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* URL pública para o editor.
|
|
307
|
+
* Padrão: "http://localhost:8000"
|
|
308
|
+
*/
|
|
309
|
+
editorURL: "http://localhost:8000",
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* URL do Intlayer CMS.
|
|
313
|
+
* Padrão: "https://app.intlayer.org"
|
|
314
|
+
*/
|
|
315
|
+
cmsURL: "https://app.intlayer.org",
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* URL da API do backend.
|
|
319
|
+
* Padrão: "https://back.intlayer.org"
|
|
320
|
+
*/
|
|
321
|
+
backendURL: "https://back.intlayer.org",
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Se deve ativar a sincronização de conteúdo em tempo real.
|
|
325
|
+
* Padrão: false
|
|
326
|
+
*/
|
|
327
|
+
liveSync: true,
|
|
328
|
+
},
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Definições de tradução e geração assistida por IA.
|
|
332
|
+
*/
|
|
333
|
+
ai: {
|
|
334
|
+
/**
|
|
335
|
+
* Provedor de IA a utilizar.
|
|
336
|
+
* Opções: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
|
|
337
|
+
* Padrão: 'openai'
|
|
338
|
+
*/
|
|
339
|
+
provider: "openai",
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Modelo a utilizar do provedor selecionado.
|
|
343
|
+
*/
|
|
344
|
+
model: "gpt-4o",
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Chave da API do provedor.
|
|
348
|
+
*/
|
|
349
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Contexto global para guiar a IA na geração de traduções.
|
|
353
|
+
*/
|
|
354
|
+
applicationContext: "Esta é uma aplicação de reserva de viagens.",
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* URL base para a API de IA.
|
|
358
|
+
*/
|
|
359
|
+
baseURL: "http://localhost:3000",
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Serialização de dados
|
|
363
|
+
*
|
|
364
|
+
* Opções:
|
|
365
|
+
* - "json": Padrão, fiável; consome mais tokens.
|
|
366
|
+
* - "toon": Menos tokens, menos consistente que JSON.
|
|
367
|
+
*
|
|
368
|
+
* Padrão: "json"
|
|
369
|
+
*/
|
|
370
|
+
dataSerialization: "json",
|
|
371
|
+
},
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Configurações de build e otimização.
|
|
375
|
+
*/
|
|
376
|
+
build: {
|
|
377
|
+
/**
|
|
378
|
+
* Modo de execução da build.
|
|
379
|
+
* - "auto": Build automática durante a build da app.
|
|
380
|
+
* - "manual": Requer um comando de build explícito.
|
|
381
|
+
* Padrão: "auto"
|
|
382
|
+
*/
|
|
383
|
+
mode: "auto",
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Se deve otimizar o bundle final removendo dicionários não utilizados.
|
|
387
|
+
* Padrão: true em produção
|
|
388
|
+
*/
|
|
389
|
+
optimize: true,
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Formato de saída para os ficheiros de dicionário gerados.
|
|
393
|
+
* Padrão: ['cjs', 'esm']
|
|
394
|
+
*/
|
|
395
|
+
outputFormat: ["cjs", "esm"],
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Indica se a build deve verificar os tipos TypeScript.
|
|
399
|
+
* Padrão: false
|
|
400
|
+
*/
|
|
401
|
+
checkTypes: false,
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Configuração do Logger.
|
|
406
|
+
*/
|
|
407
|
+
log: {
|
|
408
|
+
/**
|
|
409
|
+
* Nível de registo.
|
|
410
|
+
* - "default": Registo padrão.
|
|
411
|
+
* - "verbose": Registo de depuração detalhado.
|
|
412
|
+
* - "disabled": Sem registo.
|
|
413
|
+
* Padrão: "default"
|
|
414
|
+
*/
|
|
415
|
+
mode: "default",
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Prefixo para todas as mensagens de registo.
|
|
419
|
+
* Padrão: "[intlayer]"
|
|
420
|
+
*/
|
|
421
|
+
prefix: "[intlayer]",
|
|
422
|
+
},
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Configuração do Sistema (Casos de uso avançados)
|
|
426
|
+
*/
|
|
427
|
+
system: {
|
|
428
|
+
/**
|
|
429
|
+
* Diretório para armazenar dicionários localizados.
|
|
430
|
+
*/
|
|
431
|
+
dictionariesDir: ".intlayer/dictionary",
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Diretório para a "module augmentation".
|
|
435
|
+
*/
|
|
436
|
+
moduleAugmentationDir: ".intlayer/types",
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Diretório para armazenar dicionários não fundidos.
|
|
440
|
+
*/
|
|
441
|
+
unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Diretório para armazenar tipos de dicionário.
|
|
445
|
+
*/
|
|
446
|
+
typesDir: ".intlayer/types",
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Diretório onde os ficheiros principais da aplicação estão armazenados.
|
|
450
|
+
*/
|
|
451
|
+
mainDir: ".intlayer/main",
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Diretório onde os ficheiros de configuração estão armazenados.
|
|
455
|
+
*/
|
|
456
|
+
configDir: ".intlayer/config",
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Diretório onde os ficheiros de cache estão armazenados.
|
|
460
|
+
*/
|
|
461
|
+
cacheDir: ".intlayer/cache",
|
|
462
|
+
},
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Configuração do Compilador (Casos de uso avançados)
|
|
466
|
+
*/
|
|
467
|
+
compiler: {
|
|
468
|
+
/**
|
|
469
|
+
* Indica se o compilador deve estar ativado.
|
|
470
|
+
*
|
|
471
|
+
* - false: Desativar compilador.
|
|
472
|
+
* - true: Ativar compilador.
|
|
473
|
+
* - "build-only": Ignorar o compilador durante o desenvolvimento para acelerar o arranque.
|
|
474
|
+
*
|
|
475
|
+
* Padrão: false
|
|
476
|
+
*/
|
|
477
|
+
enabled: true,
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Define o caminho para os ficheiros de saída. Substitui `outputDir`.
|
|
481
|
+
*
|
|
482
|
+
* - Caminhos `./` são resolvidos relativamente ao diretório da componente.
|
|
483
|
+
* - Caminhos `/` são resolvidos relativamente à raiz do projeto (`baseDir`).
|
|
484
|
+
*
|
|
485
|
+
* - Incluir a variável `{{locale}}` no caminho irá ativar a geração de dicionários separados por idioma.
|
|
486
|
+
*
|
|
487
|
+
* Exemplo:
|
|
488
|
+
* ```ts
|
|
489
|
+
* {
|
|
490
|
+
* // Criar ficheiros .content.ts multi-idioma perto da componente
|
|
491
|
+
* output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
492
|
+
*
|
|
493
|
+
* // output: './{{fileName}}{{extension}}', // Equivalente usando template string
|
|
494
|
+
* }
|
|
495
|
+
* ```
|
|
496
|
+
*
|
|
497
|
+
* ```ts
|
|
498
|
+
* {
|
|
499
|
+
* // Criar JSONs centralizados por idioma na raiz do projeto
|
|
500
|
+
* output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
|
|
501
|
+
*
|
|
502
|
+
* // output: '/locales/{{locale}}/{{key}}.content.json', // Equivalente usando template string
|
|
503
|
+
* }
|
|
504
|
+
* ```
|
|
505
|
+
*
|
|
506
|
+
* Lista de variáveis:
|
|
507
|
+
* - `fileName`: O nome do ficheiro.
|
|
508
|
+
* - `key`: A chave do conteúdo.
|
|
509
|
+
* - `locale`: O idioma do conteúdo.
|
|
510
|
+
* - `extension`: A extensão do ficheiro.
|
|
511
|
+
* - `componentFileName`: O nome do ficheiro da componente.
|
|
512
|
+
* - `componentExtension`: A extensão do ficheiro da componente.
|
|
513
|
+
* - `format`: O formato do dicionário.
|
|
514
|
+
* - `componentFormat`: O formato do dicionário da componente.
|
|
515
|
+
* - `componentDirPath`: O caminho do diretório da componente.
|
|
516
|
+
*/
|
|
517
|
+
output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Se deve guardar as componentes após serem transformadas.
|
|
521
|
+
* Desta forma, o compilador pode ser executado apenas uma vez para transformar a app e depois ser removido.
|
|
522
|
+
*/
|
|
523
|
+
saveComponents: false,
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Inserir apenas o conteúdo no ficheiro gerado. Útil para saídas i18next ou ICU MessageFormat JSON por idioma.
|
|
527
|
+
*/
|
|
528
|
+
noMetadata: false,
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Prefixo da chave do dicionário
|
|
532
|
+
*/
|
|
533
|
+
dictionaryKeyPrefix: "", // Adicionar prefixo opcional para as chaves de dicionário extraídas
|
|
534
|
+
},
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Esquemas personalizados para validar o conteúdo dos dicionários.
|
|
538
|
+
*/
|
|
539
|
+
schemas: {
|
|
540
|
+
"my-schema": z.object({
|
|
541
|
+
title: z.string(),
|
|
542
|
+
}),
|
|
543
|
+
},
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Configuração de plugins.
|
|
547
|
+
*/
|
|
548
|
+
plugins: [],
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
export default config;
|
|
552
|
+
````
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Referência de Configuração
|
|
557
|
+
|
|
558
|
+
As secções seguintes descrevem as várias definições de configuração disponíveis para o Intlayer.
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
### Configuração de Internacionalização
|
|
563
|
+
|
|
564
|
+
Define as definições relacionadas com a internacionalização, incluindo os idiomas disponíveis e o idioma padrão para a aplicação.
|
|
565
|
+
|
|
566
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
567
|
+
| ----------------- | -------------------------------------------------------------------------------------------------- | ---------- | ------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
568
|
+
| `locales` | A lista de idiomas suportados na aplicação. | `string[]` | `[Locales.ENGLISH]` | `['en', 'fr', 'es']` | |
|
|
569
|
+
| `requiredLocales` | A lista de idiomas obrigatórios na aplicação. | `string[]` | `[]` | `[]` | • Se vazio, todos os idiomas são obrigatórios no modo `strict`.<br/>• Certifique-se de que os idiomas obrigatórios também estão definidos no campo `locales`. |
|
|
570
|
+
| `strictMode` | Garante implementações robustas de conteúdos internacionalizados usando TypeScript. | `string` | `'inclusive'` | | • Se `"strict"`: a função `t` exige que cada idioma declarado esteja definido — lança um erro se faltar algum ou se não estiver declarado.<br/>• Se `"inclusive"`: avisa sobre idiomas em falta mas aceita idiomas existentes não declarados.<br/>• Se `"loose"`: aceita qualquer idioma existente. |
|
|
571
|
+
| `defaultLocale` | O idioma padrão usado como fallback se o idioma solicitado não for encontrado. | `string` | `Locales.ENGLISH` | `'en'` | Usado para determinar o idioma quando nenhum é especificado no URL, cookie ou cabeçalho. |
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
### Configuração do Editor
|
|
576
|
+
|
|
577
|
+
Define as definições para o editor visual integrado, incluindo a porta do servidor e o estado de ativação.
|
|
578
|
+
|
|
579
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
580
|
+
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
581
|
+
| `applicationURL` | O URL da aplicação. | `string` | `undefined` | `'http://localhost:3000'` <br/> `'https://example.com'` <br/> `process.env.INTLAYER_EDITOR_URL` | • Usado para restringir a origem do editor por razões de segurança.<br/>• Se definido para `'*'`, o editor é acessível a partir de qualquer origem. |
|
|
582
|
+
| `port` | A porta usada pelo servidor do editor visual. | `number` | `8000` | | |
|
|
583
|
+
| `editorURL` | O URL do servidor do editor. | `string` | `'http://localhost:8000'` | `'http://localhost:3000'` <br/> `'https://example.com'` <br/> `process.env.INTLAYER_EDITOR_URL` | • Usado para restringir as origens que podem interagir com a aplicação.<br/>• Se definido para `'*'`, acessível de qualquer origem.<br/>• Deve ser definido se a porta for alterada ou se o editor for alojado num domínio diferente. |
|
|
584
|
+
| `cmsURL` | O URL do Intlayer CMS. | `string` | `'https://app.intlayer.org'` | `'https://app.intlayer.org'` | |
|
|
585
|
+
| `backendURL` | O URL do servidor backend. | `string` | `https://back.intlayer.org` | `http://localhost:4000` | |
|
|
586
|
+
| `enabled` | Se a aplicação interage com o editor visual. | `boolean` | `false` | `process.env.NODE_ENV !== 'production'` | • Se `false`, o editor não pode interagir com a aplicação.<br/>• Desativar para ambientes específicos aumenta a segurança. |
|
|
587
|
+
| `clientId` | Permite que pacotes intlayer se autentiquem com o backend usando oAuth2. Para obter um token de acesso, vá a [intlayer.org/project](https://app.intlayer.org/project). | `string` | <br/> `undefined` | `undefined` | | Para ser mantido secreto; armazenar em variáveis de ambiente. |
|
|
588
|
+
| `clientSecret` | Permite que pacotes intlayer se autentiquem com o backend usando oAuth2. Para obter um token de acesso, vá a [intlayer.org/project](https://app.intlayer.org/project). | `string` | <br/> `undefined` | `undefined` | | Para ser mantido secreto; armazenar em variáveis de ambiente. |
|
|
589
|
+
| `dictionaryPriorityStrategy` | Estratégia para priorizar dicionários quando tanto locais como remotos estão presentes. | `string` | `'local_first'` | `'distant_first'` | • `'distant_first'`: dá prioridade aos remotos sobre os locais.<br/>• `'local_first'`: dá prioridade aos locais sobre os remotos. |
|
|
590
|
+
| `liveSync` | Se o servidor da app deve recarregar conteúdos dinamicamente quando uma alteração é detetada no CMS <br/> Visual Editor <br/> Backend. | `boolean` | `true` | `true` | • Quando um dicionário é adicionado/atualizado, a app atualiza o conteúdo da página.<br/>• O Live Sync externaliza o conteúdo num outro servidor, o que pode afetar ligeiramente o desempenho.<br/>• Recomendado hospedar ambos na mesma máquina. |
|
|
591
|
+
| `liveSyncPort` | A porta do servidor de live sync. | `number` | `4000` | `4000` | |
|
|
592
|
+
| `liveSyncURL` | O URL do servidor de live sync. | `string` | `'http://localhost:{liveSyncPort}'` | `'https://example.com'` | Aponta para o localhost por padrão; pode ser alterado para um servidor de live sync remoto. |
|
|
593
|
+
|
|
594
|
+
---
|
|
595
|
+
|
|
596
|
+
### Configuração de Roteamento
|
|
597
|
+
|
|
598
|
+
Definições que controlam o comportamento do roteamento, incluindo estrutura de URL, armazenamento de idiomas e gestão de middleware.
|
|
599
|
+
|
|
600
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
601
|
+
| ---------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
602
|
+
| `mode` | Modo de roteamento de URL para a gestão de idiomas. | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) ou `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: idioma gerido por outros meios. `'search-params'`: `/dashboard?locale=fr` | Não afeta a gestão de cookies ou armazenamento de idiomas. |
|
|
603
|
+
| `storage` | Configuração para o armazenamento do idioma no cliente. | `false` | <br/> `'cookie'` | <br/> `'localStorage'` | <br/> `'sessionStorage'` | <br/> `'header'` | <br/> `CookiesAttributes` | <br/> `StorageAttributes` | <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | Veja a tabela de Opções de Armazenamento abaixo. |
|
|
604
|
+
| `basePath` | O caminho base para os URLs da aplicação. | `string` | `''` | `'/my-app'` | Se a app está em `https://example.com/my-app`, basePath é `'/my-app'` e os URLs tornam-se `https://example.com/my-app/en`. |
|
|
605
|
+
| `rewrite` | Regras de reescrita de URL personalizadas que anulam o modo de roteamento padrão para caminhos específicos. Suporta parâmetros dinâmicos `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | Veja o exemplo abaixo | • Regras de reescrita têm precedência sobre `mode`.<br/>• Funciona com Next.js e Vite.<br/>• `getLocalizedUrl()` aplica as regras correspondentes automaticamente.<br/>• Veja [Reescritas de URL Personalizadas](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md). |
|
|
606
|
+
|
|
607
|
+
**Exemplo de `rewrite`**:
|
|
608
|
+
|
|
609
|
+
```typescript
|
|
610
|
+
routing: {
|
|
611
|
+
mode: "prefix-no-default", // Estratégia de fallback
|
|
612
|
+
rewrite: nextjsRewrite({
|
|
613
|
+
"/about": {
|
|
614
|
+
en: "/about",
|
|
615
|
+
fr: "/a-propos",
|
|
616
|
+
},
|
|
617
|
+
"/product/[slug]": {
|
|
618
|
+
en: "/product/[slug]",
|
|
619
|
+
fr: "/produit/[slug]",
|
|
620
|
+
},
|
|
621
|
+
"/blog/[category]/[id]": {
|
|
622
|
+
en: "/blog/[category]/[id]",
|
|
623
|
+
fr: "/journal/[category]/[id]",
|
|
624
|
+
},
|
|
625
|
+
}),
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
#### Opções de Armazenamento
|
|
630
|
+
|
|
631
|
+
| Valor | Nota | Descrição |
|
|
632
|
+
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
633
|
+
| `'cookie'` | • Para conformidade com o RGPD, assegure-se do consentimento adequado do utilizador.<br/>• Personalizável via `CookiesAttributes` (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`). | Armazena o idioma em cookies — acessível tanto no cliente como no servidor. |
|
|
634
|
+
| `'localStorage'` | • Sem expiração a menos que seja explicitamente limpo.<br/>• O proxy do Intlayer não consegue aceder a isto.<br/>• Personalizzabile via `StorageAttributes` (`{ type: 'localStorage', name: 'custom-locale' }`). | Armazena o idioma no browser sem expiração — apenas lado do cliente. |
|
|
635
|
+
| `'sessionStorage'` | • Limpo quando o separador/janela é fechado.<br/>• O proxy do Intlayer não consegue aceder a isto.<br/>• Personalizzabile via `StorageAttributes` (`{ type: 'sessionStorage', name: 'custom-locale' }`). | Armazena o idioma pela duração da sessão da página — apenas lado do cliente. |
|
|
636
|
+
| `'header'` | • Útil para chamadas de API.<br/>• Lado do cliente não consegue aceder.<br/>• Personalizzabile via `StorageAttributes` (`{ type: 'header', name: 'custom-locale' }`). | Armazena ou transmite o idioma via cabeçalhos HTTP — apenas lado do servidor. |
|
|
637
|
+
|
|
638
|
+
#### Atributos de Cookies
|
|
639
|
+
|
|
640
|
+
Ao usar armazenamento por cookies, pode configurar atributos adicionais:
|
|
641
|
+
|
|
642
|
+
| Campo | Descrição | Tipo |
|
|
643
|
+
| ---------- | ------------------------------------------ | ----------------------------------------------------- |
|
|
644
|
+
| `name` | Nome do cookie. Padrão: `'INTLAYER_LOCALE'` | `string` |
|
|
645
|
+
| `domain` | Domínio do cookie. Padrão: `undefined` | `string` |
|
|
646
|
+
| `path` | Caminho do cookie. Padrão: `undefined` | `string` |
|
|
647
|
+
| `secure` | Requer HTTPS. Padrão: `undefined` | `boolean` |
|
|
648
|
+
| `httpOnly` | Flag HTTP-only. Padrão: `undefined` | `boolean` |
|
|
649
|
+
| `sameSite` | Política SameSite. | `'strict'` | <br/> `'lax'` | <br/> `'none'` |
|
|
650
|
+
| `expires` | Data de expiração ou dias. Padrão: `undefined` | `Date` | <br/> `number` |
|
|
651
|
+
|
|
652
|
+
#### Atributos de Armazenamento Local
|
|
653
|
+
|
|
654
|
+
Ao usar localStorage ou sessionStorage:
|
|
655
|
+
|
|
656
|
+
| Campo | Descrição | Tipo |
|
|
657
|
+
| ------ | --------------------------------------------- | ------------------------------------------------ |
|
|
658
|
+
| `type` | Tipo de armazenamento. | `'localStorage'` | <br/> `'sessionStorage'` |
|
|
659
|
+
| `name` | Nome da chave de armazenamento. Padrão: `'INTLAYER_LOCALE'` | `string` |
|
|
660
|
+
|
|
661
|
+
#### Exemplos de Configuração
|
|
662
|
+
|
|
663
|
+
Aqui estão alguns exemplos de configuração comuns para a nova estrutura de roteamento v7:
|
|
664
|
+
|
|
665
|
+
**Configuração Básica (Padrão)**:
|
|
666
|
+
|
|
667
|
+
```typescript
|
|
668
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
669
|
+
// intlayer.config.ts
|
|
670
|
+
const config: IntlayerConfig = {
|
|
671
|
+
internationalization: {
|
|
672
|
+
locales: ["en", "fr", "es"],
|
|
673
|
+
defaultLocale: "en",
|
|
674
|
+
},
|
|
675
|
+
routing: {
|
|
676
|
+
mode: "prefix-no-default",
|
|
677
|
+
storage: "localStorage",
|
|
678
|
+
basePath: "",
|
|
679
|
+
},
|
|
680
|
+
};
|
|
681
|
+
|
|
682
|
+
export default config;
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
**Configuração em Conformidade com o RGPD**:
|
|
686
|
+
|
|
687
|
+
```typescript
|
|
688
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
689
|
+
// intlayer.config.ts
|
|
690
|
+
const config: IntlayerConfig = {
|
|
691
|
+
internationalization: {
|
|
692
|
+
locales: ["en", "fr", "es"],
|
|
693
|
+
defaultLocale: "en",
|
|
694
|
+
},
|
|
695
|
+
routing: {
|
|
696
|
+
mode: "prefix-no-default",
|
|
697
|
+
storage: [
|
|
698
|
+
{
|
|
699
|
+
type: "localStorage",
|
|
700
|
+
name: "user-locale",
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
type: "cookie",
|
|
704
|
+
name: "user-locale",
|
|
705
|
+
secure: true,
|
|
706
|
+
sameSite: "strict",
|
|
707
|
+
httpOnly: false,
|
|
708
|
+
},
|
|
709
|
+
],
|
|
710
|
+
basePath: "",
|
|
711
|
+
},
|
|
712
|
+
};
|
|
713
|
+
|
|
714
|
+
export default config;
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
**Modo de Parâmetros de Pesquisa**:
|
|
718
|
+
|
|
719
|
+
```typescript
|
|
720
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
721
|
+
// intlayer.config.ts
|
|
722
|
+
const config: IntlayerConfig = {
|
|
723
|
+
internationalization: {
|
|
724
|
+
locales: ["en", "fr", "es"],
|
|
725
|
+
defaultLocale: "en",
|
|
726
|
+
},
|
|
727
|
+
routing: {
|
|
728
|
+
mode: "search-params",
|
|
729
|
+
storage: "localStorage",
|
|
730
|
+
basePath: "",
|
|
731
|
+
},
|
|
732
|
+
};
|
|
733
|
+
|
|
734
|
+
export default config;
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
**Modo Sem Prefixo com Armazenamento Personalizado**:
|
|
738
|
+
|
|
739
|
+
```typescript
|
|
740
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
741
|
+
// intlayer.config.ts
|
|
742
|
+
const config: IntlayerConfig = {
|
|
743
|
+
internationalization: {
|
|
744
|
+
locales: ["en", "fr", "es"],
|
|
745
|
+
defaultLocale: "en",
|
|
746
|
+
},
|
|
747
|
+
routing: {
|
|
748
|
+
mode: "no-prefix",
|
|
749
|
+
storage: {
|
|
750
|
+
type: "sessionStorage",
|
|
751
|
+
name: "app-locale",
|
|
752
|
+
},
|
|
753
|
+
basePath: "/my-app",
|
|
754
|
+
},
|
|
755
|
+
};
|
|
756
|
+
|
|
757
|
+
export default config;
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
**Reescrita de URL Personalizada com Caminhos Dinâmicos**:
|
|
761
|
+
|
|
762
|
+
```typescript
|
|
763
|
+
// intlayer.config.ts
|
|
764
|
+
import { nextjsRewrite } from "intlayer/routing";
|
|
765
|
+
|
|
766
|
+
const config: IntlayerConfig = {
|
|
767
|
+
internationalization: {
|
|
768
|
+
locales: ["en", "fr"],
|
|
769
|
+
defaultLocale: "en",
|
|
770
|
+
},
|
|
771
|
+
routing: {
|
|
772
|
+
mode: "prefix-no-default", // Fallback para caminhos não reescritos
|
|
773
|
+
storage: "cookie",
|
|
774
|
+
rewrite: nextjsRewrite({
|
|
775
|
+
"/about": {
|
|
776
|
+
en: "/about",
|
|
777
|
+
fr: "/a-propos",
|
|
778
|
+
},
|
|
779
|
+
"/product/[slug]": {
|
|
780
|
+
en: "/product/[slug]",
|
|
781
|
+
fr: "/produit/[slug]",
|
|
782
|
+
},
|
|
783
|
+
"/blog/[category]/[id]": {
|
|
784
|
+
en: "/blog/[category]/[id]",
|
|
785
|
+
fr: "/journal/[category]/[id]",
|
|
786
|
+
},
|
|
787
|
+
}),
|
|
788
|
+
},
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
export default config;
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
---
|
|
795
|
+
|
|
796
|
+
### Configuração de Conteúdo
|
|
797
|
+
|
|
798
|
+
Definições relacionadas à forma como o conteúdo é gerido dentro da aplicação, incluindo nomes de diretórios, extensões de ficheiro e configurações derivadas.
|
|
799
|
+
|
|
800
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
801
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
802
|
+
| `watch` | Indica se o Intlayer deve monitorizar alterações nos ficheiros de declaração de conteúdo para regenerar dicionários. | `boolean` | `true` | | |
|
|
803
|
+
| `fileExtensions` | Extensões de ficheiro para analisar ao compilar dicionários. | `string[]` | `['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.json5', '.content.jsonc', '.content.tsx', '.content.jsx']` | `['.data.ts', '.data.js', '.data.json']` | Personalizar pode ajudar a evitar conflitos. |
|
|
804
|
+
| `contentDir` | O caminho do diretório onde os ficheiros de definição de conteúdo (`.content.*`) estão armazenados. | `string[]` | `['.']` | `['src', '../../ui-library', require.resolve("@my-package/content")]` | Usado para monitorizar ficheiros de conteúdo e regenerar dicionários. |
|
|
805
|
+
| `codeDir` | O caminho do diretório onde o código está armazenado, relativo ao diretório base. | `string[]` | `['.']` | `['src', '../../ui-library']` | • Usado para monitorizar ficheiros de código para transformação (pruning, otimização).<br/>• Separar de `contentDir` pode melhorar o desempenho. |
|
|
806
|
+
| `excludedPath` | Diretórios excluídos da análise de conteúdo. | `string[]` | `['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']` | | Ainda não utilizado; planeado para implementação futura. |
|
|
807
|
+
| `formatCommand` | Comando para formatar ficheiros de conteúdo quando o Intlayer os escreve localmente. | `string` | `undefined` | `'npx prettier --write "{{file}}" --log-level silent'` (Prettier), `'npx biome format "{{file}}" --write --log-level none'` (Biome), `'npx eslint --fix "{{file}}" --quiet'` (ESLint) | • `{{file}}` é substituído pelo caminho do ficheiro.<br/>• Se não definido, o Intlayer deteta automaticamente (testa prettier, biome, eslint). |
|
|
808
|
+
|
|
809
|
+
---
|
|
810
|
+
|
|
811
|
+
### Configuração do Dicionário
|
|
812
|
+
|
|
813
|
+
Parâmetros que controlam as operações do dicionário, incluindo o comportamento de preenchimento automático (auto-fill) e geração de conteúdo.
|
|
814
|
+
|
|
815
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
816
|
+
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
817
|
+
| `fill` | Controla como os ficheiros de saída do preenchimento automático (tradução por IA) são gerados. | `boolean` | <br/> `FilePathPattern` | <br/> `Partial<Record<Locale, boolean | FilePathPattern>>` | `true` | `{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }` | • `true`: caminho padrão (mesmo ficheiro que a origem).<br/>• `false`: desativar.<br/>• Padrão string/função gera ficheiros por idioma.<br/>• Objeto por idioma: cada idioma corresponde ao seu próprio padrão; `false` ignora esse idioma.<br/>• Incluir `{{locale}}` ativa a geração por idioma.<br/>• `fill` ao nível do dicionário tem sempre precedência sobre esta definição global. |
|
|
818
|
+
| `description` | Ajuda o editor e o CMS a compreender o propósito do dicionário. Também usado como contexto para a geração de traduções assistida por IA. | `string` | `undefined` | `'Secção do perfil do utilizador'` | |
|
|
819
|
+
| `locale` | Transforma o dicionário num formato por idioma. Cada campo declarado torna-se um nó de tradução. Se ausente, o dicionário é tratado como multi-idioma. | `LocalesValues` | `undefined` | `'en'` | Use isto quando o dicionário for específico de um único idioma em vez de conter traduções para vários. |
|
|
820
|
+
| `contentAutoTransformation` | Transforma automaticamente as strings de conteúdo em nós tipados (markdown, HTML ou inserção). | `boolean` | <br/> `{ markdown?: boolean; html?: boolean; insertion?: boolean }` | `false` | `true` | • Markdown : `### Title` → `md('### Title')`.<br/>• HTML : `<div>Title</div>` → `html('<div>Title</div>')`.<br/>• Inserção : `Olá {{name}}` → `insert('Olá {{name}}')`. |
|
|
821
|
+
| `location` | Indica onde os ficheiros do dicionário estão armazenados e como são sincronizados com o CMS. | `'local'` | <br/> `'remote'` | <br/> `'hybrid'` | <br/> `'plugin'` | <br/> `string` | `'local'` | `'hybrid'` | • `'local'`: gerido apenas localmente.<br/>• `'remote'`: gerido apenas remotamente (CMS).<br/>• `'hybrid'`: gerido local e remotamente.<br/>• `'plugin'` ou string personalizada: gerido por um plugin ou fonte personalizada. |
|
|
822
|
+
| `importMode` | Controla como os dicionários são importados. | `'static'` | <br/> `'dynamic'` | <br/> `'fetch'` | `'static'` | `'dynamic'` | • `'static'`: importado estaticamente.<br/>• `'dynamic'`: importado dinamicamente usando Suspense.<br/>• `'fetch'`: recuperado via Live Sync API; fallback para `'dynamic'` se falhar.<br/>• Requer plugins `@intlayer/babel` e `@intlayer/swc`.<br/>• Chaves devem ser declaradas estaticamente.<br/>• Ignorado se `optimize` estiver desativado.<br/>• Não afeta `getIntlayer`, `getDictionary`, etc. |
|
|
823
|
+
| `priority` | Prioridade do dicionário. Valores mais altos vencem valores mais baixos na resolução de conflitos entre dicionários. | `number` | `undefined` | `1` | |
|
|
824
|
+
| `live` | Depreciado — use `importMode: 'fetch'` em vez disso. Indicava se o conteúdo do dicionário devia ser recuperado dinamicamente via API Live Sync. | `boolean` | `undefined` | | Renomeado para `importMode: 'fetch'` na v8.0.0. |
|
|
825
|
+
| `schema` | Gerado automaticamente pelo Intlayer para validação de esquema JSON. | `'https://intlayer.org/schema.json'` | auto-gerado | | Não editar manualmente. |
|
|
826
|
+
| `title` | Ajuda a identificar o dicionário no editor e CMS. | `string` | `undefined` | `'Perfil do Utilizador'` | |
|
|
827
|
+
| `tags` | Categoriza dicionários e fornece contexto ou instruções para o editor e IA. | `string[]` | `undefined` | `['utilizador', 'perfil']` | |
|
|
828
|
+
| `version` | Versão do dicionário remoto; ajuda a rastrear a versão atualmente em uso. | `string` | `undefined` | `'1.0.0'` | • Gestível no CMS.<br/>• Não editar localmente. |
|
|
829
|
+
|
|
830
|
+
**Exemplo de `fill`**:
|
|
831
|
+
|
|
832
|
+
```ts
|
|
833
|
+
dictionary: {
|
|
834
|
+
fill: {
|
|
835
|
+
en: "/locales/en/{{key}}.content.json",
|
|
836
|
+
fr: ({ key }) => `/locales/fr/${key}.content.json`,
|
|
837
|
+
es: false,
|
|
838
|
+
},
|
|
839
|
+
};
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
---
|
|
843
|
+
|
|
844
|
+
### Configuração do Logger
|
|
845
|
+
|
|
846
|
+
Definições para personalizar a saída de logs do Intlayer.
|
|
847
|
+
|
|
848
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
849
|
+
| -------- | ----------------------------------------- | -------------------------------------------------------------- | ---------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
850
|
+
| `mode` | Indica o modo do logger. | `'default'` | <br/> `'verbose'` | <br/> `'disabled'` | `'default'` | `'verbose'` | • `'verbose'`: regista mais informações para depuração.<br/>• `'disabled'`: desativa o logger completamente. |
|
|
851
|
+
| `prefix` | O prefixo para as mensagens de registo. | `string` | `'[intlayer] '` | `'[meu prefixo] '` | |
|
|
852
|
+
|
|
853
|
+
---
|
|
854
|
+
|
|
855
|
+
### Configuração de IA
|
|
856
|
+
|
|
857
|
+
Configurações que controlam as funcionalidades de IA do Intlayer, incluindo provedor, modelo e chave de API.
|
|
858
|
+
|
|
859
|
+
Esta configuração é opcional se estiver registado no [Dashboard do Intlayer](https://app.intlayer.org/project) com uma chave de acesso. O Intlayer gerirá automaticamente a solução de IA mais eficiente e económica para as suas necessidades. O uso das opções padrão garante uma melhor manutenibilidade a longo prazo, uma vez que o Intlayer é continuamente atualizado para utilizar os modelos mais relevantes.
|
|
860
|
+
|
|
861
|
+
Se preferir utilizar a sua própria chave de API ou um modelo específico, pode definir a sua configuração de IA personalizada.
|
|
862
|
+
Esta configuração de IA será utilizada globalmente no seu ambiente Intlayer. Os comandos da CLI utilizarão estas definições por defeito para comandos como `fill`, assim como o SDK, o Visual Editor e o CMS. Pode substituir estes valores predefinidos para casos de uso específicos através de parâmetros de comando.
|
|
863
|
+
|
|
864
|
+
O Intlayer suporta múltiplos provedores de IA para máxima flexibilidade. Os provedores atualmente suportados são:
|
|
865
|
+
|
|
866
|
+
- **OpenAI** (Padrão)
|
|
867
|
+
- **Anthropic Claude**
|
|
868
|
+
- **Mistral AI**
|
|
869
|
+
- **DeepSeek**
|
|
870
|
+
- **Google Gemini**
|
|
871
|
+
- **Google AI Studio**
|
|
872
|
+
- **Google Vertex**
|
|
873
|
+
- **Meta Llama**
|
|
874
|
+
- **Ollama**
|
|
875
|
+
- **OpenRouter**
|
|
876
|
+
- **Alibaba Cloud**
|
|
877
|
+
- **Fireworks**
|
|
878
|
+
- **Hugging Face**
|
|
879
|
+
- **Groq**
|
|
880
|
+
- **Amazon Bedrock**
|
|
881
|
+
- **Together.ai**
|
|
882
|
+
|
|
883
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
884
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
885
|
+
| `provider` | O provedor a utilizar para as funcionalidades de IA do Intlayer. | `'openai'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | `undefined` | `'anthropic'` | Diferentes provedores requerem diferentes chaves de API e têm preços diferentes. |
|
|
886
|
+
| `model` | O modelo a utilizar para as funcionalidades de IA. | `string` | Nenhum | `'gpt-4o-2024-11-20'` | O modelo específico varia de acordo com o provedor. |
|
|
887
|
+
| `temperature` | Controla a aleatoriedade das respostas da IA. | `number` | Nenhum | `0.1` | Temperatura mais alta = mais criativo e menos previsível. |
|
|
888
|
+
| `apiKey` | A sua chave de API para o provedor selecionado. | `string` | Nenhum | `process.env.OPENAI_API_KEY` | Para ser mantido secreto; armazenar em variáveis de ambiente. |
|
|
889
|
+
| `applicationContext` | Contexto adicional sobre a sua aplicação para ajudar a IA a gerar traduções mais precisas (domínio, público-alvo, tom, terminologia). | `string` | Nenhum | `'O meu contexto de aplicação'` | Pode ser usado para adicionar regras (ex: `"Não deves transformar os URLs"`). |
|
|
890
|
+
| `baseURL` | O URL base para a API de IA. | `string` | Nenhum | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Pode apontar para um endpoint de API de IA local ou personalizado. |
|
|
891
|
+
| `dataSerialization` | Formato de serialização de dados para as funcionalidades de IA. | `'json'` | <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: padrão, fiável; consome mais tokens.<br/>• `'toon'`: menos tokens, menos consistente.<br/>• Parâmetros adicionais são passados para o modelo como contexto (esforço de raciocínio, etc.). |
|
|
892
|
+
|
|
893
|
+
---
|
|
894
|
+
|
|
895
|
+
### Configuração de Build
|
|
896
|
+
|
|
897
|
+
Parâmetros que controlam como o Intlayer otimiza e compila a internacionalização da sua aplicação.
|
|
898
|
+
|
|
899
|
+
As opções de build aplicam-se aos plugins `@intlayer/babel` e `@intlayer/swc`.
|
|
900
|
+
|
|
901
|
+
> No modo de desenvolvimento, o Intlayer utiliza importações estáticas para os dicionários para simplificar a experiência de desenvolvimento.
|
|
902
|
+
|
|
903
|
+
> Durante a otimização, o Intlayer substituirá as chamadas aos dicionários para otimizar o chunking, de forma a que o bundle final importe apenas os dicionários efetivamente utilizados.
|
|
904
|
+
|
|
905
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
906
|
+
| ----------------- | ----------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
907
|
+
| `mode` | Controla o modo de build. | `'auto'` | <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: build acionada automaticamente durante a build da app.<br/>• `'manual'`: executada apenas quando o comando de build é explicitamente chamado.<br/>• Pode ser usado para desativar builds de dicionários (ex: para evitar a execução em ambientes Node.js). |
|
|
908
|
+
| `optimize` | Controla se a build deve ser otimizada. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • Se não definido, a otimização é acionada na build da framework (Vite/Next.js).<br/>• `true` força a otimização mesmo no modo dev.<br/>• `false` desativa-a.<br/>• Se ativo, substitui chamadas a dicionários para otimizar o chunking.<br/>• Requer plugins `@intlayer/babel` e `@intlayer/swc`. |
|
|
909
|
+
| `checkTypes` | Indica se a build deve verificar os tipos TypeScript e registar erros. | `boolean` | `false` | | Pode tornar o processo de build mais lento. |
|
|
910
|
+
| `outputFormat` | Controla o formato de saída dos dicionários. | `('esm' | 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
|
|
911
|
+
| `traversePattern` | Padrões que definem quais ficheiros percorrer durante a otimização. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | • Limite a otimização a ficheiros relevantes para melhorar o desempenho da build.<br/>• Ignorado se `optimize` estiver desativado.<br/>• Utiliza padrões glob. |
|
|
912
|
+
|
|
913
|
+
---
|
|
914
|
+
|
|
915
|
+
### Configuração do Sistema
|
|
916
|
+
|
|
917
|
+
Estas definições são para casos de uso avançados e configuração interna do Intlayer.
|
|
918
|
+
|
|
919
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
920
|
+
| ------------------------- | ------------------------------------------------------ | -------- | --------------------------------- | ------- | ---- |
|
|
921
|
+
| `dictionariesDir` | Diretório para dicionários compilados. | `string` | `'.intlayer/dictionary'` | | |
|
|
922
|
+
| `moduleAugmentationDir` | Diretório para a augmentation de módulos TypeScript. | `string` | `'.intlayer/types'` | | |
|
|
923
|
+
| `unmergedDictionariesDir` | Diretório para dicionários não fundidos. | `string` | `'.intlayer/unmerged_dictionary'` | | |
|
|
924
|
+
| `typesDir` | Diretório para tipos gerados. | `string` | `'.intlayer/types'` | | |
|
|
925
|
+
| `mainDir` | Diretório do ficheiro principal do Intlayer. | `string` | `'.intlayer/main'` | | |
|
|
926
|
+
| `configDir` | Diretório dos ficheiros de configuração compilados. | `string` | `'.intlayer/config'` | | |
|
|
927
|
+
| `cacheDir` | Diretório dos ficheiros de cache. | `string` | `'.intlayer/cache'` | | |
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
### Configuração do Compilador
|
|
932
|
+
|
|
933
|
+
Configurações que controlam o compilador do Intlayer, que extrai dicionários diretamente das suas componentes.
|
|
934
|
+
|
|
935
|
+
| Campo | Descrição | Tipo | Padrão | Exemplo | Nota |
|
|
936
|
+
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
937
|
+
| `enabled` | Indica se o compilador deve estar ativado para a extração de dicionários. | `boolean` | <br/> `'build-only'` | `true` | `'build-only'` | `'build-only'` ignora o compilador durante o desenvolvimento para acelerar as builds; executado apenas nos comandos de build. |
|
|
938
|
+
| `dictionaryKeyPrefix` | Prefixo para as chaves de dicionário extraídas. | `string` | `''` | `'meu-prefixo-'` | Adicionado à chave gerada (baseada no nome do ficheiro) para evitar conflitos. |
|
|
939
|
+
| `saveComponents` | Se deve guardar as componentes após serem transformadas. | `boolean` | `false` | | • Se `true`, substitui os ficheiros originais pelas versões transformadas.<br/>• O compilador pode ser removido após uma execução. |
|
|
940
|
+
| `output` | Define o caminho para os ficheiros de saída. Substitui `outputDir`. Suporta variáveis de template: `{{fileName}}`, <br/> `{{key}}`, <br/> `{{locale}}`, <br/> `{{extension}}`, <br/> `{{componentFileName}}`, <br/> `{{componentExtension}}`, <br/> `{{format}}`, <br/> `{{componentFormat}}`, <br/> `{{componentDirPath}}`. | `boolean` | <br/> `FilePathPattern` | <br/> `Partial<Record<Locale, boolean | FilePathPattern>>` | `undefined` | `'./{{fileName}}{{extension}}'` <br/> `'/locales/{{locale}}/{{key}}.json'` <br/> `{ en: ({ key }) => './locales/en/${key}.json', fr: '...', es: false }` | • Caminhos `./` são resolvidos em relação ao diretório da componente.<br/>• Caminhos `/` em relação à raiz.<br/>• `{{locale}}` ativa a geração por idioma.<br/>• Suporta notação de objeto por idioma. |
|
|
941
|
+
| `noMetadata` | Se `true`, o compilador omite os metadados do dicionário (chave, wrapper de conteúdo) da saída. | `boolean` | `false` | `false` → `{"key":"minha-chave","content":{"key":"valor"}}` <br/> `true` → `{"key":"valor"}` | • Útil para saídas i18next ou ICU MessageFormat JSON.<br/>• Funciona bem com o plugin `loadJSON`. |
|
|
942
|
+
| `dictionaryKeyPrefix` | Prefixo da chave do dicionário | `string` | `''` | | Adicionar prefixo opcional para as chaves de dicionário extraídas |
|
|
943
|
+
|
|
944
|
+
---
|
|
945
|
+
|
|
946
|
+
### Esquemas Personalizados
|
|
947
|
+
|
|
948
|
+
| Campo | Descrizione | Tipo |
|
|
949
|
+
| --------- | --------------------------------------------------------------------------- | --------------------------- |
|
|
950
|
+
| `schemas` | Permite definir esquemas Zod para validar a estrutura dos seus dicionários. | `Record<string, ZodSchema>` |
|
|
951
|
+
|
|
952
|
+
---
|
|
953
|
+
|
|
954
|
+
### Plugins
|
|
955
|
+
|
|
956
|
+
| Campo | Descrição | Tipo |
|
|
957
|
+
| --------- | ------------------------------------ | ------------------ |
|
|
958
|
+
| `plugins` | Lista de plugins do Intlayer a ativar. | `IntlayerPlugin[]` |
|