@intlayer/docs 5.7.7 → 5.8.0-canary.0
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/blog/ar/intlayer_with_next-i18next.md +3 -4
- package/blog/ar/intlayer_with_next-intl.md +3 -4
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/de/intlayer_with_next-i18next.md +3 -4
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/en/intlayer_with_next-i18next.md +3 -4
- package/blog/en/intlayer_with_next-intl.md +3 -4
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -4
- package/blog/en-GB/intlayer_with_next-intl.md +3 -4
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/es/intlayer_with_next-i18next.md +3 -4
- package/blog/es/intlayer_with_next-intl.md +3 -4
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/fr/intlayer_with_next-i18next.md +3 -4
- package/blog/fr/intlayer_with_next-intl.md +3 -4
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/hi/intlayer_with_next-i18next.md +3 -4
- package/blog/hi/intlayer_with_next-intl.md +3 -4
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/it/intlayer_with_next-i18next.md +3 -4
- package/blog/it/intlayer_with_next-intl.md +3 -4
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/ja/intlayer_with_next-i18next.md +3 -4
- package/blog/ja/intlayer_with_next-intl.md +3 -4
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ko/intlayer_with_next-i18next.md +3 -4
- package/blog/ko/intlayer_with_next-intl.md +3 -4
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/pt/intlayer_with_next-i18next.md +3 -4
- package/blog/pt/intlayer_with_next-intl.md +3 -4
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/ru/intlayer_with_next-i18next.md +3 -4
- package/blog/ru/intlayer_with_next-intl.md +3 -4
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/zh/intlayer_with_next-i18next.md +3 -4
- package/blog/zh/intlayer_with_next-intl.md +3 -4
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/dist/cjs/generated/docs.entry.cjs +41 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +41 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/CI_CD.md +67 -41
- package/docs/ar/formatters.md +239 -0
- package/docs/ar/interest_of_intlayer.md +162 -49
- package/docs/ar/introduction.md +3 -3
- package/docs/ar/packages/intlayer/index.md +3 -3
- package/docs/ar/packages/next-intlayer/index.md +3 -3
- package/docs/de/CI_CD.md +63 -37
- package/docs/de/formatters.md +239 -0
- package/docs/de/interest_of_intlayer.md +161 -47
- package/docs/de/introduction.md +3 -3
- package/docs/de/packages/intlayer/index.md +3 -3
- package/docs/de/packages/next-intlayer/index.md +3 -3
- package/docs/de/packages/react-intlayer/index.md +3 -3
- package/docs/en/CI_CD.md +51 -27
- package/docs/en/formatters.md +250 -0
- package/docs/en/interest_of_intlayer.md +159 -46
- package/docs/en/introduction.md +3 -3
- package/docs/en/packages/intlayer/index.md +3 -3
- package/docs/en/packages/next-intlayer/index.md +3 -3
- package/docs/en/packages/react-intlayer/index.md +3 -3
- package/docs/en-GB/CI_CD.md +58 -32
- package/docs/en-GB/formatters.md +239 -0
- package/docs/en-GB/interest_of_intlayer.md +160 -53
- package/docs/en-GB/packages/intlayer/index.md +3 -3
- package/docs/en-GB/packages/next-intlayer/index.md +3 -3
- package/docs/en-GB/packages/react-intlayer/index.md +3 -3
- package/docs/es/CI_CD.md +68 -42
- package/docs/es/formatters.md +239 -0
- package/docs/es/interest_of_intlayer.md +159 -47
- package/docs/es/introduction.md +3 -3
- package/docs/es/packages/intlayer/index.md +3 -3
- package/docs/es/packages/next-intlayer/index.md +3 -3
- package/docs/fr/formatters.md +239 -0
- package/docs/fr/interest_of_intlayer.md +160 -46
- package/docs/fr/introduction.md +3 -3
- package/docs/fr/packages/intlayer/index.md +3 -3
- package/docs/fr/packages/next-intlayer/index.md +3 -3
- package/docs/fr/packages/react-intlayer/index.md +3 -3
- package/docs/hi/CI_CD.md +69 -44
- package/docs/hi/formatters.md +239 -0
- package/docs/hi/interest_of_intlayer.md +158 -42
- package/docs/hi/introduction.md +3 -3
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/hi/packages/next-intlayer/index.md +3 -3
- package/docs/hi/packages/react-intlayer/index.md +3 -3
- package/docs/it/CI_CD.md +67 -41
- package/docs/it/formatters.md +239 -0
- package/docs/it/interest_of_intlayer.md +160 -46
- package/docs/it/introduction.md +3 -3
- package/docs/it/packages/intlayer/index.md +3 -3
- package/docs/it/packages/next-intlayer/index.md +3 -3
- package/docs/it/packages/react-intlayer/index.md +3 -3
- package/docs/ja/CI_CD.md +67 -41
- package/docs/ja/formatters.md +261 -0
- package/docs/ja/interest_of_intlayer.md +157 -48
- package/docs/ja/introduction.md +3 -3
- package/docs/ja/packages/intlayer/index.md +3 -3
- package/docs/ja/packages/next-intlayer/index.md +3 -3
- package/docs/ja/packages/react-intlayer/index.md +3 -3
- package/docs/ko/CI_CD.md +63 -37
- package/docs/ko/formatters.md +258 -0
- package/docs/ko/interest_of_intlayer.md +160 -48
- package/docs/ko/introduction.md +3 -3
- package/docs/ko/packages/intlayer/index.md +3 -3
- package/docs/ko/packages/next-intlayer/index.md +3 -3
- package/docs/ko/packages/react-intlayer/index.md +3 -3
- package/docs/pt/CI_CD.md +67 -41
- package/docs/pt/formatters.md +239 -0
- package/docs/pt/interest_of_intlayer.md +162 -47
- package/docs/pt/introduction.md +3 -3
- package/docs/pt/packages/intlayer/index.md +3 -3
- package/docs/pt/packages/next-intlayer/index.md +3 -3
- package/docs/pt/packages/react-intlayer/index.md +3 -3
- package/docs/ru/CI_CD.md +70 -44
- package/docs/ru/formatters.md +239 -0
- package/docs/ru/interest_of_intlayer.md +168 -50
- package/docs/ru/introduction.md +3 -3
- package/docs/ru/packages/intlayer/index.md +3 -3
- package/docs/ru/packages/next-intlayer/index.md +3 -3
- package/docs/ru/packages/react-intlayer/index.md +3 -3
- package/docs/zh/CI_CD.md +62 -36
- package/docs/zh/formatters.md +239 -0
- package/docs/zh/interest_of_intlayer.md +158 -48
- package/docs/zh/introduction.md +3 -3
- package/docs/zh/packages/intlayer/index.md +3 -3
- package/docs/zh/packages/next-intlayer/index.md +3 -3
- package/docs/zh/packages/react-intlayer/index.md +3 -3
- package/package.json +12 -12
- package/src/generated/docs.entry.ts +41 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-14
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-08-20
|
|
4
4
|
title: Interesse do Intlayer
|
|
5
5
|
description: Descubra os benefícios e vantagens de usar o Intlayer em seus projetos. Entenda por que o Intlayer se destaca entre outros frameworks.
|
|
6
6
|
keywords:
|
|
@@ -11,41 +11,104 @@ keywords:
|
|
|
11
11
|
- Comparação
|
|
12
12
|
slugs:
|
|
13
13
|
- doc
|
|
14
|
-
-
|
|
15
|
-
- interest
|
|
14
|
+
- why
|
|
16
15
|
---
|
|
17
16
|
|
|
18
|
-
#
|
|
17
|
+
# Por que você deve considerar o Intlayer?
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## O que é o Intlayer?
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
**Intlayer** é uma biblioteca de internacionalização projetada especificamente para desenvolvedores JavaScript. Ela permite a declaração do seu conteúdo em qualquer lugar do seu código. Converte declarações de conteúdo multilíngue em dicionários estruturados para integrar facilmente no seu código. Usando TypeScript, o **Intlayer** torna seu desenvolvimento mais robusto e eficiente.
|
|
22
|
+
|
|
23
|
+
## Por que o Intlayer foi criado?
|
|
24
|
+
|
|
25
|
+
O Intlayer foi criado para resolver um problema comum que afeta todas as bibliotecas i18n comuns, como `next-intl`, `react-i18next`, `react-intl`, `next-i18next`, `react-intl` e `vue-i18n`.
|
|
26
|
+
|
|
27
|
+
Todas essas soluções adotam uma abordagem centralizada para listar e gerenciar seu conteúdo. Por exemplo:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
.
|
|
31
|
+
├── locales
|
|
32
|
+
│ ├── en.json
|
|
33
|
+
│ ├── fr.json
|
|
34
|
+
│ └── es.json
|
|
35
|
+
├── i18n.ts
|
|
36
|
+
└── src
|
|
37
|
+
└── components
|
|
38
|
+
└── MyComponent
|
|
39
|
+
└── index.tsx
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Ou aqui usando namespaces:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
.
|
|
46
|
+
├── locales
|
|
47
|
+
│ ├── en
|
|
48
|
+
│ │ ├── footer.json
|
|
49
|
+
│ │ └── navbar.json
|
|
50
|
+
│ ├── fr
|
|
51
|
+
│ │ ├── footer.json
|
|
52
|
+
│ │ └── navbar.json
|
|
53
|
+
│ └── es
|
|
54
|
+
│ ├── footer.json
|
|
55
|
+
│ └── navbar.json
|
|
56
|
+
├── i18n.ts
|
|
57
|
+
└── src
|
|
58
|
+
└── components
|
|
59
|
+
└── MyComponent
|
|
60
|
+
└── index.tsx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Esse tipo de arquitetura desacelera o processo de desenvolvimento e torna a base de código mais complexa de manter por várias razões:
|
|
64
|
+
|
|
65
|
+
1. **Para qualquer novo componente criado, você deve:**
|
|
66
|
+
- Criar o novo recurso/namespace na pasta `locales`
|
|
67
|
+
- Lembrar de importar o novo namespace na sua página
|
|
68
|
+
- Traduzir seu conteúdo (frequentemente feito manualmente por copiar/colar de provedores de IA)
|
|
69
|
+
|
|
70
|
+
2. **Para qualquer alteração feita nos seus componentes, você deve:**
|
|
71
|
+
- Procurar o recurso/namespace relacionado (longe do componente)
|
|
72
|
+
- Traduzir seu conteúdo
|
|
73
|
+
- Garantir que seu conteúdo esteja atualizado para qualquer localidade
|
|
74
|
+
- Verificar se seu namespace não inclui chaves/valores não usados
|
|
75
|
+
- Garantir que a estrutura dos seus arquivos JSON seja a mesma para todas as localidades
|
|
76
|
+
|
|
77
|
+
Em projetos profissionais que utilizam essas soluções, plataformas de localização são frequentemente usadas para ajudar a gerenciar a tradução do seu conteúdo. No entanto, isso pode rapidamente se tornar caro para projetos grandes.
|
|
78
|
+
|
|
79
|
+
Para resolver esse problema, o Intlayer adota uma abordagem que delimita seu conteúdo por componente e mantém seu conteúdo próximo ao seu componente, assim como frequentemente fazemos com CSS (`styled-components`), tipos, documentação (`storybook`) ou testes unitários (`jest`).
|
|
23
80
|
|
|
24
81
|
```bash codeFormat="typescript"
|
|
25
82
|
.
|
|
26
|
-
└──
|
|
83
|
+
└── components
|
|
27
84
|
└── MyComponent
|
|
28
85
|
├── index.content.ts
|
|
86
|
+
├── index.test.tsx
|
|
87
|
+
├── index.stories.tsx
|
|
29
88
|
└── index.tsx
|
|
30
89
|
```
|
|
31
90
|
|
|
32
91
|
```bash codeFormat="commonjs"
|
|
33
92
|
.
|
|
34
|
-
└──
|
|
93
|
+
└── components
|
|
35
94
|
└── MyComponent
|
|
36
95
|
├── index.content.cjs
|
|
37
|
-
|
|
96
|
+
├── index.test.mjs
|
|
97
|
+
├── index.stories.mjs
|
|
98
|
+
└── index.tsx
|
|
38
99
|
```
|
|
39
100
|
|
|
40
101
|
```bash codeFormat="esm"
|
|
41
102
|
.
|
|
42
|
-
└──
|
|
103
|
+
└── components
|
|
43
104
|
└── MyComponent
|
|
44
105
|
├── index.content.mjs
|
|
45
|
-
|
|
106
|
+
├── index.test.mjs
|
|
107
|
+
├── index.stories.mjs
|
|
108
|
+
└── index.tsx
|
|
46
109
|
```
|
|
47
110
|
|
|
48
|
-
```tsx fileName="./
|
|
111
|
+
```tsx fileName="./components/MyComponent/index.content.ts" codeFormat="typescript"
|
|
49
112
|
import { t, type Dictionary } from "intlayer";
|
|
50
113
|
|
|
51
114
|
const componentExampleContent = {
|
|
@@ -53,8 +116,8 @@ const componentExampleContent = {
|
|
|
53
116
|
content: {
|
|
54
117
|
myTranslatedContent: t({
|
|
55
118
|
en: "Hello World",
|
|
56
|
-
fr: "Bonjour le monde",
|
|
57
119
|
es: "Hola Mundo",
|
|
120
|
+
fr: "Bonjour le monde",
|
|
58
121
|
}),
|
|
59
122
|
},
|
|
60
123
|
} satisfies Dictionary;
|
|
@@ -62,18 +125,18 @@ const componentExampleContent = {
|
|
|
62
125
|
export default componentExampleContent;
|
|
63
126
|
```
|
|
64
127
|
|
|
65
|
-
```jsx fileName="./
|
|
128
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
66
129
|
import { t } from "intlayer";
|
|
67
130
|
|
|
68
131
|
/** @type {import('intlayer').Dictionary} */
|
|
69
|
-
// Conteúdo de exemplo do componente com traduções multilíngues
|
|
70
132
|
const componentExampleContent = {
|
|
71
133
|
key: "component-example",
|
|
72
134
|
content: {
|
|
73
135
|
myTranslatedContent: t({
|
|
136
|
+
pt: "Olá Mundo",
|
|
74
137
|
en: "Hello World",
|
|
75
|
-
fr: "Bonjour le monde",
|
|
76
138
|
es: "Hola Mundo",
|
|
139
|
+
fr: "Bonjour le monde",
|
|
77
140
|
}),
|
|
78
141
|
},
|
|
79
142
|
};
|
|
@@ -81,18 +144,18 @@ const componentExampleContent = {
|
|
|
81
144
|
export default componentExampleContent;
|
|
82
145
|
```
|
|
83
146
|
|
|
84
|
-
```jsx fileName="./
|
|
147
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
85
148
|
const { t } = require("intlayer");
|
|
86
149
|
|
|
87
150
|
/** @type {import('intlayer').Dictionary} */
|
|
88
|
-
// Conteúdo de exemplo do componente com traduções multilíngues
|
|
89
151
|
const componentExampleContent = {
|
|
90
152
|
key: "component-example",
|
|
91
153
|
content: {
|
|
92
154
|
myTranslatedContent: t({
|
|
155
|
+
pt: "Olá Mundo",
|
|
93
156
|
en: "Hello World",
|
|
94
|
-
fr: "Bonjour le monde",
|
|
95
157
|
es: "Hola Mundo",
|
|
158
|
+
fr: "Bonjour le monde",
|
|
96
159
|
}),
|
|
97
160
|
},
|
|
98
161
|
};
|
|
@@ -100,7 +163,7 @@ const componentExampleContent = {
|
|
|
100
163
|
module.exports = componentExampleContent;
|
|
101
164
|
```
|
|
102
165
|
|
|
103
|
-
```tsx fileName="./
|
|
166
|
+
```tsx fileName="./components/MyComponent/index.tsx" codeFormat="typescript"
|
|
104
167
|
import { useIntlayer } from "react-intlayer";
|
|
105
168
|
|
|
106
169
|
export const ComponentExample = () => {
|
|
@@ -110,7 +173,7 @@ export const ComponentExample = () => {
|
|
|
110
173
|
};
|
|
111
174
|
```
|
|
112
175
|
|
|
113
|
-
```jsx fileName="./
|
|
176
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
114
177
|
import { useIntlayer } from "react-intlayer";
|
|
115
178
|
|
|
116
179
|
const ComponentExample = () => {
|
|
@@ -120,8 +183,8 @@ const ComponentExample = () => {
|
|
|
120
183
|
};
|
|
121
184
|
```
|
|
122
185
|
|
|
123
|
-
```jsx fileName="./
|
|
124
|
-
const { useIntlayer } = require("react-
|
|
186
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
187
|
+
const { useIntlayer } = require("react-layer");
|
|
125
188
|
|
|
126
189
|
const ComponentExample = () => {
|
|
127
190
|
const { myTranslatedContent } = useIntlayer("component-example");
|
|
@@ -130,27 +193,79 @@ const ComponentExample = () => {
|
|
|
130
193
|
};
|
|
131
194
|
```
|
|
132
195
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
-
|
|
196
|
+
Esta abordagem permite que você:
|
|
197
|
+
|
|
198
|
+
1. **Aumente a velocidade de desenvolvimento**
|
|
199
|
+
- Arquivos `.content.{{ts|mjs|cjs|json}}` podem ser criados usando uma extensão do VSCode
|
|
200
|
+
- Ferramentas de autocompletar com IA no seu IDE (como o GitHub Copilot) podem ajudar a declarar seu conteúdo, reduzindo copiar/colar
|
|
201
|
+
|
|
202
|
+
2. **Reduzir a complexidade da sua base de código**
|
|
203
|
+
|
|
204
|
+
3. **Aumentar a manutenibilidade da sua base de código**
|
|
205
|
+
|
|
206
|
+
4. **Duplicar seus componentes e seus conteúdos relacionados com mais facilidade (Exemplo: componentes de login/registro, etc.)**
|
|
207
|
+
- Limitando o risco de impactar o conteúdo de outros componentes
|
|
208
|
+
- Copiando/colando seu conteúdo de uma aplicação para outra sem dependências externas
|
|
209
|
+
|
|
210
|
+
5. **Evitar poluir sua base de código com chaves/valores não usados para componentes não utilizados**
|
|
211
|
+
- Se você não usa um componente, não precisa importar seu conteúdo
|
|
212
|
+
- Se você excluir um componente, será mais fácil lembrar de remover seu conteúdo relacionado, pois estará presente na mesma pasta
|
|
213
|
+
|
|
214
|
+
6. **Reduzir o custo de raciocínio para agentes de IA declararem seu conteúdo multilíngue**
|
|
215
|
+
- O agente de IA não precisará escanear toda a sua base de código para saber onde implementar seu conteúdo
|
|
216
|
+
- As traduções podem ser facilmente feitas por ferramentas de autocompletar com IA no seu IDE (como o GitHub Copilot)
|
|
217
|
+
|
|
218
|
+
7. **Otimizar o desempenho de carregamento**
|
|
219
|
+
- Se um componente for carregado de forma preguiçosa (lazy-loaded), seu conteúdo relacionado será carregado ao mesmo tempo
|
|
220
|
+
|
|
221
|
+
## Recursos adicionais do Intlayer
|
|
222
|
+
|
|
223
|
+
| Recurso | Descrição |
|
|
224
|
+
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
225
|
+
|  | **Suporte Multiplataformas**<br><br>O Intlayer é compatível com todos os principais frameworks e bibliotecas, incluindo Next.js, React, Vite, Vue.js, Nuxt, Preact, Express, e mais. |
|
|
226
|
+
|  | **Gestão de Conteúdo com JavaScript**<br><br>Aproveite a flexibilidade do JavaScript para definir e gerir o seu conteúdo de forma eficiente. <br><br> - [Declaração de conteúdo](https://intlayer.org/doc/concept/content) |
|
|
227
|
+
|  | **Ficheiro de Declaração de Conteúdo por Localidade**<br><br>Acelere o seu desenvolvimento declarando o seu conteúdo uma vez, antes da geração automática.<br><br> - [Ficheiro de Declaração de Conteúdo por Localidade](https://intlayer.org/doc/concept/per-locale-file) |
|
|
228
|
+
|  | **Ambiente com Tipagem Segura**<br><br>Aproveite o TypeScript para garantir que suas definições de conteúdo e código estejam livres de erros, além de beneficiar-se do autocompletar do IDE.<br><br> - [Configuração do TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
229
|
+
|  | **Configuração Simplificada**<br><br>Comece rapidamente com configuração mínima. Ajuste facilmente as configurações para internacionalização, roteamento, IA, build e gerenciamento de conteúdo.<br><br> - [Explore a integração com Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
230
|
+
|  | **Recuperação de Conteúdo Simplificada**<br><br>Não é necessário chamar sua função `t` para cada pedaço de conteúdo. Recupere todo o seu conteúdo diretamente usando um único hook.<br><br> - [Integração com React](https://intlayer.org/doc/environment/create-react-app) |
|
|
231
|
+
|  | **Implementação Consistente de Componentes no Servidor**<br><br>Perfeitamente adequado para componentes de servidor Next.js, use a mesma implementação para componentes cliente e servidor, sem necessidade de passar sua função `t` por cada componente de servidor. <br><br> - [Componentes de Servidor](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
|
|
232
|
+
|  | **Base de Código Organizada**<br><br>Mantenha sua base de código mais organizada: 1 componente = 1 dicionário na mesma pasta. Traduções próximas aos seus respectivos componentes aumentam a manutenibilidade e clareza. <br><br> - [Como o Intlayer funciona](https://intlayer.org/doc/concept/how-works-intlayer) |
|
|
233
|
+
|  | **Roteamento Aprimorado**<br><br>Suporte completo ao roteamento de aplicativos, adaptando-se perfeitamente a estruturas complexas de aplicações, para Next.js, React, Vite, Vue.js, etc.<br><br> - [Explore a integração com Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
234
|
+
|  | **Suporte a Markdown**<br><br>Importe e interprete arquivos de localidade e Markdown remoto para conteúdo multilíngue, como políticas de privacidade, documentação, etc. Interprete e torne os metadados do Markdown acessíveis no seu código.<br><br> - [Arquivos de conteúdo](https://intlayer.org/doc/concept/content/file) |
|
|
235
|
+
|  | **Editor Visual e CMS Gratuitos**<br><br>Um editor visual gratuito e CMS estão disponíveis para escritores de conteúdo, eliminando a necessidade de uma plataforma de localização. Mantenha seu conteúdo sincronizado usando Git, ou externalize-o total ou parcialmente com o CMS.<br><br> - [Editor Intlayer](https://intlayer.org/doc/concept/editor) <br> - [CMS Intlayer](https://intlayer.org/doc/concept/cms) |
|
|
236
|
+
|  | **Conteúdo Tree-shakable**<br><br>Conteúdo tree-shakable, reduzindo o tamanho do pacote final. Carrega o conteúdo por componente, excluindo qualquer conteúdo não utilizado do seu pacote. Suporta carregamento preguiçoso para melhorar a eficiência do carregamento do aplicativo. <br><br> - [Otimização da construção do aplicativo](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
|
|
237
|
+
|  | **Renderização Estática**<br><br>Não bloqueia a Renderização Estática. <br><br> - [Integração Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
238
|
+
|  | **Tradução com IA**<br><br>Transforme seu site em 231 idiomas com apenas um clique usando as avançadas ferramentas de tradução com IA da Intlayer, utilizando seu próprio provedor de IA/chave API. <br><br> - [Integração CI/CD](https://intlayer.org/doc/concept/ci-cd) <br> - [CLI Intlayer](https://intlayer.org/doc/concept/cli) <br> - [Preenchimento automático](https://intlayer.org/doc/concept/auto-fill) |
|
|
239
|
+
|  | **Integração do Servidor MCP**<br><br>Fornece um servidor MCP (Model Context Protocol) para automação de IDE, permitindo um gerenciamento de conteúdo e fluxos de trabalho i18n contínuos diretamente no seu ambiente de desenvolvimento. <br><br> - [Servidor MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/mcp_server.md) |
|
|
240
|
+
|  | **Extensão VSCode**<br><br>O Intlayer fornece uma extensão para VSCode para ajudar você a gerenciar seu conteúdo e traduções, construir seus dicionários, traduzir seu conteúdo e muito mais. <br><br> - [Extensão VSCode](https://intlayer.org/doc/vs-code-extension) |
|
|
241
|
+
|  | **Interoperabilidade**<br><br>Permite interoperabilidade com react-i18next, next-i18next, next-intl e react-intl. <br><br> - [Intlayer e react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer e next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer e next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
|
|
242
|
+
|
|
243
|
+
## Comparação do Intlayer com outras soluções
|
|
244
|
+
|
|
245
|
+
| Funcionalidade | Intlayer | React-i18next / i18next | React-Intl (FormatJS) | LinguiJS | next-intl | next-i18next | vue-i18n |
|
|
246
|
+
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
247
|
+
| **Traduções Próximas aos Componentes** | Sim, conteúdo colocalizado com cada componente | Não | Não | Não | Não | Não | Sim - usando `Componentes de Arquivo Único` (SFCs) |
|
|
248
|
+
| **Integração com TypeScript** | Avançada, tipos estritos gerados automaticamente | Básica; configuração extra para segurança | Boa, mas menos estrita | Tipagens, necessita configuração | Boa | Básica | Boa (tipos disponíveis; segurança de chaves requer configuração) |
|
|
249
|
+
| **Detecção de Tradução Ausente** | Erro/aviso em tempo de compilação | Principalmente strings de fallback em tempo de execução | Strings de fallback | Requer configuração extra | Fallback em tempo de execução | Fallback em tempo de execução | Fallback/avisos em tempo de execução (configurável) |
|
|
250
|
+
| **Conteúdo Rico (JSX/Markdown/componentes)** | Suporte direto, até mesmo para nós React | Limitado / apenas interpolação | Sintaxe ICU, não JSX real | Limitado | Não projetado para nós ricos | Limitado | Limitado (componentes via `<i18n-t>`, Markdown via plugins) |
|
|
251
|
+
| **Tradução com IA** | Sim, suporta múltiplos provedores de IA. Usável com suas próprias chaves de API. Considera o contexto da sua aplicação e o escopo do conteúdo | Não | Não | Não | Não | Não | Não |
|
|
252
|
+
| **Editor Visual** | Sim, Editor Visual local + CMS opcional; pode externalizar conteúdo da base de código; incorporável | Não / disponível via plataformas externas de localização | Não / disponível via plataformas externas de localização | Não / disponível via plataformas externas de localização | Não / disponível via plataformas externas de localização | Não / disponível via plataformas externas de localização | Não / disponível via plataformas externas de localização |
|
|
253
|
+
| **Roteamento Localizado** | Integrado, suporte a middleware | Plugins ou configuração manual | Não integrado | Plugin/configuração manual | Integrado | Integrado | Manual via Vue Router (Nuxt i18n gerencia isso) |
|
|
254
|
+
| **Geração Dinâmica de Rotas** | Sim | Plugin/ecossistema ou configuração manual | Não fornecido | Plugin/manual | Sim | Sim | Não fornecido (Nuxt i18n fornece) |
|
|
255
|
+
| **Pluralização** | Padrões baseados em enumeração; veja a documentação | Configurável (plugins como i18next-icu) | Avançado (ICU) | Avançado (ICU/messageformat) | Bom | Bom | Avançado (regras de plural embutidas) |
|
|
256
|
+
| **Formatação (datas, números, moedas)** | Formatadores otimizados (Intl por baixo dos panos) | Via plugins ou uso customizado do Intl | Formatadores avançados ICU | Helpers ICU/CLI | Bom (helpers Intl) | Bom (helpers Intl) | Formatadores embutidos de data/número (Intl) |
|
|
257
|
+
| **Formato de Conteúdo** | .tsx, .ts, .js, .json, .md, .txt | .json | .json, .js | .po, .json | .json, .js, .ts | .json | .json, .js |
|
|
258
|
+
| **Suporte ICU** | Em desenvolvimento (ICU nativo) | Via plugin (i18next-icu) | Sim | Sim | Sim | Via plugin (i18next-icu) | Via formatador/compilador personalizado |
|
|
259
|
+
| **Ajuda para SEO (hreflang, sitemap)** | Ferramentas embutidas: helpers para sitemap, **robots.txt**, metadados | Plugins da comunidade/manual | Não é núcleo | Não é núcleo | Bom | Bom | Não é núcleo (Nuxt i18n fornece helpers) |
|
|
260
|
+
| **Ecossistema / Comunidade** | Menor, mas crescendo rápido e reativa | Maior e mais madura | Grande, empresarial | Em crescimento, menor | Médio porte, focado em Next.js | Médio porte, focado em Next.js | Grande no ecossistema Vue |
|
|
261
|
+
| **Renderização do lado do servidor & Componentes de Servidor** | Sim, otimizado para SSR / Componentes de Servidor React | Suportado, alguma configuração necessária | Suportado no Next.js | Suportado | Suporte completo | Suporte completo | SSR via Nuxt/Vue SSR (sem RSC) |
|
|
262
|
+
| **Tree-shaking (carregar apenas o conteúdo usado)** | Sim, por componente em tempo de build via plugins Babel/SWC | Geralmente carrega tudo (pode ser melhorado com namespaces/divisão de código) | Geralmente carrega tudo | Não é padrão | Parcial | Parcial | Parcial (com divisão de código/configuração manual) |
|
|
263
|
+
| **Carregamento preguiçoso (Lazy loading)** | Sim, por localidade/por componente | Sim (ex: backends/namespaces sob demanda) | Sim (divisão de pacotes por localidade) | Sim (importações dinâmicas de catálogos) | Sim (por rota/por localidade) | Sim (por rota/por localidade) | Sim (mensagens de localidade assíncronas) |
|
|
264
|
+
| **Gestão de Grandes Projetos** | Incentiva modularidade, adequado para design-system | Requer boa disciplina de arquivos | Catálogos centrais podem ficar grandes | Pode se tornar complexo | Modular com configuração | Modular com configuração | Modular com Vue Router/Nuxt i18n setup |
|
|
265
|
+
|
|
266
|
+
## Histórico do Documento
|
|
267
|
+
|
|
268
|
+
| Versão | Data | Alterações |
|
|
269
|
+
| ------ | ---------- | --------------------------------- |
|
|
270
|
+
| 5.8.0 | 2025-08-19 | Atualização da tabela comparativa |
|
|
271
|
+
| 5.5.10 | 2025-06-29 | Histórico inicial |
|
package/docs/pt/introduction.md
CHANGED
|
@@ -44,8 +44,8 @@ const componentContent = {
|
|
|
44
44
|
content: {
|
|
45
45
|
myTranslatedContent: t({
|
|
46
46
|
en: "Hello World",
|
|
47
|
-
fr: "Bonjour le monde",
|
|
48
47
|
es: "Hola Mundo",
|
|
48
|
+
fr: "Bonjour le monde",
|
|
49
49
|
}),
|
|
50
50
|
},
|
|
51
51
|
} satisfies Dictionary;
|
|
@@ -63,8 +63,8 @@ const componentContent = {
|
|
|
63
63
|
content: {
|
|
64
64
|
myTranslatedContent: t({
|
|
65
65
|
en: "Hello World",
|
|
66
|
-
fr: "Bonjour le monde",
|
|
67
66
|
es: "Hola Mundo",
|
|
67
|
+
fr: "Bonjour le monde",
|
|
68
68
|
}),
|
|
69
69
|
},
|
|
70
70
|
};
|
|
@@ -81,8 +81,8 @@ const componentContent = {
|
|
|
81
81
|
content: {
|
|
82
82
|
myTranslatedContent: t({
|
|
83
83
|
en: "Hello World",
|
|
84
|
-
fr: "Bonjour le monde",
|
|
85
84
|
es: "Hola Mundo",
|
|
85
|
+
fr: "Bonjour le monde",
|
|
86
86
|
}),
|
|
87
87
|
},
|
|
88
88
|
};
|
|
@@ -149,8 +149,8 @@ const clientComponentContent = {
|
|
|
149
149
|
content: {
|
|
150
150
|
myTranslatedContent: t({
|
|
151
151
|
en: "Hello World",
|
|
152
|
-
fr: "Bonjour le monde",
|
|
153
152
|
es: "Hola Mundo",
|
|
153
|
+
fr: "Bonjour le monde",
|
|
154
154
|
}),
|
|
155
155
|
numberOfCar: enu({
|
|
156
156
|
"<-1": "Less than minus one car",
|
|
@@ -175,8 +175,8 @@ const clientComponentContent = {
|
|
|
175
175
|
content: {
|
|
176
176
|
myTranslatedContent: t({
|
|
177
177
|
en: "Hello World",
|
|
178
|
-
fr: "Bonjour le monde",
|
|
179
178
|
es: "Hola Mundo",
|
|
179
|
+
fr: "Bonjour le monde",
|
|
180
180
|
}),
|
|
181
181
|
numberOfCar: enu({
|
|
182
182
|
"<-1": "Menos que menos um carro",
|
|
@@ -201,8 +201,8 @@ const clientComponentContent = {
|
|
|
201
201
|
content: {
|
|
202
202
|
myTranslatedContent: t({
|
|
203
203
|
en: "Hello World",
|
|
204
|
-
fr: "Bonjour le monde",
|
|
205
204
|
es: "Hola Mundo",
|
|
205
|
+
fr: "Bonjour le monde",
|
|
206
206
|
}),
|
|
207
207
|
numberOfCar: enu({
|
|
208
208
|
"<-1": "Menos que menos um carro",
|
|
@@ -110,8 +110,8 @@ const clientComponentContent = {
|
|
|
110
110
|
content: {
|
|
111
111
|
myTranslatedContent: t({
|
|
112
112
|
en: "Hello World",
|
|
113
|
-
fr: "Bonjour le monde",
|
|
114
113
|
es: "Hola Mundo",
|
|
114
|
+
fr: "Bonjour le monde",
|
|
115
115
|
}),
|
|
116
116
|
numberOfCar: enu({
|
|
117
117
|
"<-1": "Less than minus one car",
|
|
@@ -136,8 +136,8 @@ const clientComponentContent = {
|
|
|
136
136
|
content: {
|
|
137
137
|
myTranslatedContent: t({
|
|
138
138
|
en: "Hello World",
|
|
139
|
-
fr: "Bonjour le monde",
|
|
140
139
|
es: "Hola Mundo",
|
|
140
|
+
fr: "Bonjour le monde",
|
|
141
141
|
}),
|
|
142
142
|
numberOfCar: enu({
|
|
143
143
|
"<-1": "Menos que menos um carro",
|
|
@@ -162,8 +162,8 @@ const clientComponentContent = {
|
|
|
162
162
|
content: {
|
|
163
163
|
myTranslatedContent: t({
|
|
164
164
|
en: "Hello World",
|
|
165
|
-
fr: "Bonjour le monde",
|
|
166
165
|
es: "Hola Mundo",
|
|
166
|
+
fr: "Bonjour le monde",
|
|
167
167
|
}),
|
|
168
168
|
numberOfCar: enu({
|
|
169
169
|
"<-1": "Menos que menos um carro",
|
|
@@ -110,8 +110,8 @@ const component1Content = {
|
|
|
110
110
|
content: {
|
|
111
111
|
myTranslatedContent: t({
|
|
112
112
|
en: "Hello World",
|
|
113
|
-
fr: "Bonjour le monde",
|
|
114
113
|
es: "Hola Mundo",
|
|
114
|
+
fr: "Bonjour le monde",
|
|
115
115
|
}),
|
|
116
116
|
numberOfCar: enu({
|
|
117
117
|
"<-1": "Menos que menos um carro",
|
|
@@ -136,8 +136,8 @@ const component1Content = {
|
|
|
136
136
|
content: {
|
|
137
137
|
myTranslatedContent: t({
|
|
138
138
|
en: "Hello World",
|
|
139
|
-
fr: "Bonjour le monde",
|
|
140
139
|
es: "Hola Mundo",
|
|
140
|
+
fr: "Bonjour le monde",
|
|
141
141
|
}),
|
|
142
142
|
numberOfCar: enu({
|
|
143
143
|
"<-1": "Menos que menos um carro",
|
|
@@ -162,8 +162,8 @@ const component1Content = {
|
|
|
162
162
|
content: {
|
|
163
163
|
myTranslatedContent: t({
|
|
164
164
|
en: "Hello World",
|
|
165
|
-
fr: "Bonjour le monde",
|
|
166
165
|
es: "Hola Mundo",
|
|
166
|
+
fr: "Bonjour le monde",
|
|
167
167
|
}),
|
|
168
168
|
numberOfCar: enu({
|
|
169
169
|
"<-1": "Menos que menos um carro",
|