@intlayer/docs 8.6.0 → 8.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/cjs/doc.cjs.map +1 -1
  2. package/dist/cjs/generated/docs.entry.cjs +60 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/doc.mjs.map +1 -1
  5. package/dist/esm/generated/docs.entry.mjs +60 -0
  6. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  7. package/dist/types/doc.d.ts.map +1 -1
  8. package/dist/types/generated/docs.entry.d.ts +3 -0
  9. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  10. package/docs/ar/cli/index.md +54 -42
  11. package/docs/ar/cli/init.md +32 -20
  12. package/docs/ar/cli/standalone.md +91 -0
  13. package/docs/ar/configuration.md +39 -7
  14. package/docs/ar/custom_domains.md +250 -0
  15. package/docs/ar/intlayer_with_tanstack+solid.md +14 -33
  16. package/docs/ar/intlayer_with_tanstack.md +25 -16
  17. package/docs/ar/intlayer_with_vanilla.md +506 -0
  18. package/docs/bn/cli/index.md +195 -0
  19. package/docs/bn/cli/init.md +96 -0
  20. package/docs/bn/cli/standalone.md +91 -0
  21. package/docs/bn/configuration.md +46 -14
  22. package/docs/bn/custom_domains.md +250 -0
  23. package/docs/bn/intlayer_with_vanilla.md +506 -0
  24. package/docs/cs/cli/index.md +195 -0
  25. package/docs/cs/cli/init.md +96 -0
  26. package/docs/cs/cli/standalone.md +91 -0
  27. package/docs/cs/configuration.md +46 -7
  28. package/docs/cs/custom_domains.md +250 -0
  29. package/docs/cs/intlayer_with_vanilla.md +506 -0
  30. package/docs/de/cli/index.md +53 -41
  31. package/docs/de/cli/standalone.md +91 -0
  32. package/docs/de/configuration.md +46 -7
  33. package/docs/de/custom_domains.md +250 -0
  34. package/docs/de/intlayer_with_tanstack+solid.md +15 -36
  35. package/docs/de/intlayer_with_tanstack.md +25 -16
  36. package/docs/de/intlayer_with_vanilla.md +506 -0
  37. package/docs/en/bundle_optimization.md +288 -23
  38. package/docs/en/cli/index.md +6 -1
  39. package/docs/en/cli/init.md +13 -1
  40. package/docs/en/cli/standalone.md +91 -0
  41. package/docs/en/configuration.md +46 -7
  42. package/docs/en/custom_domains.md +245 -0
  43. package/docs/en/intlayer_with_tanstack+solid.md +15 -36
  44. package/docs/en/intlayer_with_tanstack.md +25 -16
  45. package/docs/en/intlayer_with_vanilla.md +506 -0
  46. package/docs/en-GB/cli/index.md +56 -44
  47. package/docs/en-GB/cli/init.md +28 -21
  48. package/docs/en-GB/cli/standalone.md +91 -0
  49. package/docs/en-GB/configuration.md +53 -14
  50. package/docs/en-GB/custom_domains.md +250 -0
  51. package/docs/en-GB/intlayer_with_tanstack+solid.md +15 -36
  52. package/docs/en-GB/intlayer_with_tanstack.md +25 -16
  53. package/docs/en-GB/intlayer_with_vanilla.md +506 -0
  54. package/docs/es/cli/index.md +65 -53
  55. package/docs/es/cli/init.md +33 -21
  56. package/docs/es/cli/standalone.md +91 -0
  57. package/docs/es/configuration.md +39 -1
  58. package/docs/es/custom_domains.md +250 -0
  59. package/docs/es/intlayer_with_tanstack+solid.md +15 -36
  60. package/docs/es/intlayer_with_tanstack.md +25 -16
  61. package/docs/es/intlayer_with_vanilla.md +506 -0
  62. package/docs/fr/cli/index.md +43 -31
  63. package/docs/fr/cli/init.md +37 -25
  64. package/docs/fr/cli/standalone.md +91 -0
  65. package/docs/fr/configuration.md +46 -7
  66. package/docs/fr/custom_domains.md +250 -0
  67. package/docs/fr/intlayer_with_tanstack+solid.md +15 -36
  68. package/docs/fr/intlayer_with_tanstack.md +25 -16
  69. package/docs/fr/intlayer_with_vanilla.md +506 -0
  70. package/docs/hi/cli/index.md +71 -59
  71. package/docs/hi/cli/init.md +37 -33
  72. package/docs/hi/cli/standalone.md +91 -0
  73. package/docs/hi/configuration.md +39 -7
  74. package/docs/hi/custom_domains.md +250 -0
  75. package/docs/hi/intlayer_with_tanstack+solid.md +14 -33
  76. package/docs/hi/intlayer_with_tanstack.md +25 -16
  77. package/docs/hi/intlayer_with_vanilla.md +506 -0
  78. package/docs/id/cli/index.md +59 -47
  79. package/docs/id/cli/init.md +32 -25
  80. package/docs/id/cli/standalone.md +91 -0
  81. package/docs/id/configuration.md +46 -7
  82. package/docs/id/custom_domains.md +250 -0
  83. package/docs/id/intlayer_with_tanstack+solid.md +14 -33
  84. package/docs/id/intlayer_with_tanstack.md +25 -16
  85. package/docs/id/intlayer_with_vanilla.md +506 -0
  86. package/docs/it/cli/index.md +58 -41
  87. package/docs/it/cli/init.md +37 -38
  88. package/docs/it/cli/standalone.md +91 -0
  89. package/docs/it/configuration.md +46 -7
  90. package/docs/it/custom_domains.md +250 -0
  91. package/docs/it/intlayer_with_tanstack+solid.md +15 -36
  92. package/docs/it/intlayer_with_tanstack.md +25 -16
  93. package/docs/it/intlayer_with_vanilla.md +506 -0
  94. package/docs/ja/cli/index.md +59 -47
  95. package/docs/ja/cli/init.md +36 -24
  96. package/docs/ja/cli/standalone.md +91 -0
  97. package/docs/ja/configuration.md +46 -7
  98. package/docs/ja/custom_domains.md +250 -0
  99. package/docs/ja/intlayer_with_tanstack+solid.md +15 -36
  100. package/docs/ja/intlayer_with_tanstack.md +25 -16
  101. package/docs/ja/intlayer_with_vanilla.md +506 -0
  102. package/docs/ko/cli/index.md +58 -46
  103. package/docs/ko/cli/init.md +39 -35
  104. package/docs/ko/cli/standalone.md +91 -0
  105. package/docs/ko/configuration.md +47 -8
  106. package/docs/ko/custom_domains.md +250 -0
  107. package/docs/ko/intlayer_with_tanstack+solid.md +15 -36
  108. package/docs/ko/intlayer_with_tanstack.md +25 -16
  109. package/docs/ko/intlayer_with_vanilla.md +506 -0
  110. package/docs/nl/cli/index.md +195 -0
  111. package/docs/nl/cli/init.md +96 -0
  112. package/docs/nl/cli/standalone.md +91 -0
  113. package/docs/nl/configuration.md +46 -7
  114. package/docs/nl/custom_domains.md +250 -0
  115. package/docs/nl/intlayer_with_vanilla.md +506 -0
  116. package/docs/pl/cli/index.md +56 -44
  117. package/docs/pl/cli/init.md +36 -32
  118. package/docs/pl/cli/standalone.md +91 -0
  119. package/docs/pl/configuration.md +46 -7
  120. package/docs/pl/custom_domains.md +250 -0
  121. package/docs/pl/intlayer_with_tanstack+solid.md +14 -33
  122. package/docs/pl/intlayer_with_tanstack.md +25 -16
  123. package/docs/pl/intlayer_with_vanilla.md +506 -0
  124. package/docs/pt/cli/index.md +64 -52
  125. package/docs/pt/cli/init.md +35 -31
  126. package/docs/pt/cli/standalone.md +91 -0
  127. package/docs/pt/configuration.md +46 -7
  128. package/docs/pt/custom_domains.md +250 -0
  129. package/docs/pt/intlayer_with_tanstack+solid.md +15 -36
  130. package/docs/pt/intlayer_with_tanstack.md +25 -16
  131. package/docs/pt/intlayer_with_vanilla.md +506 -0
  132. package/docs/ru/cli/index.md +54 -42
  133. package/docs/ru/cli/init.md +31 -27
  134. package/docs/ru/cli/standalone.md +91 -0
  135. package/docs/ru/configuration.md +46 -7
  136. package/docs/ru/custom_domains.md +250 -0
  137. package/docs/ru/intlayer_with_tanstack+solid.md +15 -36
  138. package/docs/ru/intlayer_with_tanstack.md +25 -16
  139. package/docs/ru/intlayer_with_vanilla.md +506 -0
  140. package/docs/tr/cli/index.md +64 -52
  141. package/docs/tr/cli/init.md +37 -30
  142. package/docs/tr/cli/standalone.md +91 -0
  143. package/docs/tr/configuration.md +46 -7
  144. package/docs/tr/custom_domains.md +250 -0
  145. package/docs/tr/intlayer_with_tanstack+solid.md +14 -33
  146. package/docs/tr/intlayer_with_tanstack.md +25 -16
  147. package/docs/tr/intlayer_with_vanilla.md +506 -0
  148. package/docs/uk/cli/index.md +60 -55
  149. package/docs/uk/cli/init.md +32 -20
  150. package/docs/uk/cli/standalone.md +91 -0
  151. package/docs/uk/configuration.md +46 -7
  152. package/docs/uk/custom_domains.md +250 -0
  153. package/docs/uk/intlayer_with_tanstack+solid.md +14 -33
  154. package/docs/uk/intlayer_with_tanstack.md +25 -16
  155. package/docs/uk/intlayer_with_vanilla.md +506 -0
  156. package/docs/ur/cli/index.md +195 -0
  157. package/docs/ur/cli/init.md +96 -0
  158. package/docs/ur/cli/standalone.md +91 -0
  159. package/docs/ur/configuration.md +46 -7
  160. package/docs/ur/custom_domains.md +250 -0
  161. package/docs/ur/intlayer_with_vanilla.md +506 -0
  162. package/docs/vi/cli/index.md +72 -61
  163. package/docs/vi/cli/init.md +33 -21
  164. package/docs/vi/cli/standalone.md +91 -0
  165. package/docs/vi/configuration.md +46 -7
  166. package/docs/vi/custom_domains.md +250 -0
  167. package/docs/vi/intlayer_with_tanstack+solid.md +14 -33
  168. package/docs/vi/intlayer_with_tanstack.md +25 -16
  169. package/docs/vi/intlayer_with_vanilla.md +506 -0
  170. package/docs/zh/cli/index.md +56 -49
  171. package/docs/zh/cli/init.md +30 -18
  172. package/docs/zh/cli/standalone.md +91 -0
  173. package/docs/zh/configuration.md +46 -7
  174. package/docs/zh/custom_domains.md +250 -0
  175. package/docs/zh/intlayer_with_tanstack+solid.md +15 -36
  176. package/docs/zh/intlayer_with_tanstack.md +25 -16
  177. package/docs/zh/intlayer_with_vanilla.md +506 -0
  178. package/package.json +8 -8
  179. package/src/doc.ts +4 -1
  180. package/src/generated/docs.entry.ts +60 -0
  181. package/docs/ar/bundle_optimization.md +0 -185
  182. package/docs/de/bundle_optimization.md +0 -195
  183. package/docs/en-GB/bundle_optimization.md +0 -184
  184. package/docs/es/bundle_optimization.md +0 -194
  185. package/docs/fr/bundle_optimization.md +0 -184
  186. package/docs/hi/bundle_optimization.md +0 -185
  187. package/docs/id/bundle_optimization.md +0 -185
  188. package/docs/it/bundle_optimization.md +0 -185
  189. package/docs/ja/bundle_optimization.md +0 -185
  190. package/docs/ko/bundle_optimization.md +0 -185
  191. package/docs/pl/bundle_optimization.md +0 -185
  192. package/docs/pt/bundle_optimization.md +0 -184
  193. package/docs/ru/bundle_optimization.md +0 -185
  194. package/docs/tr/bundle_optimization.md +0 -184
  195. package/docs/uk/bundle_optimization.md +0 -186
  196. package/docs/vi/bundle_optimization.md +0 -185
  197. package/docs/zh/bundle_optimization.md +0 -185
@@ -0,0 +1,506 @@
1
+ ---
2
+ createdAt: 2026-03-31
3
+ updatedAt: 2026-03-31
4
+ title: i18n Vanilla JS - Como traduzir uma aplicação Vanilla JS em 2026
5
+ description: Descubra como tornar o seu site Vanilla JS multilíngue. Siga a documentação para internacionalizar (i18n) e traduzi-lo.
6
+ keywords:
7
+ - Internacionalização
8
+ - Documentação
9
+ - Intlayer
10
+ - Vanilla JS
11
+ - JavaScript
12
+ - TypeScript
13
+ - HTML
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - vanilla
18
+ applicationTemplate: https://github.com/aymericzip/intlayer-vanilla-template
19
+ history:
20
+ - version: 8.4.10
21
+ date: 2026-03-31
22
+ changes: "Início do histórico"
23
+ ---
24
+
25
+ # Traduza o seu site Vanilla JS usando Intlayer | Internacionalização (i18n)
26
+
27
+ ## Índice
28
+
29
+ <TOC/>
30
+
31
+ ## O que é o Intlayer?
32
+
33
+ O **Intlayer** é uma biblioteca de internacionalização (i18n) inovadora e de código aberto, projetada para simplificar o suporte multilíngue em aplicações web modernas.
34
+
35
+ Com o Intlayer, você pode:
36
+
37
+ - **Gerir facilmente as traduções** utilizando dicionários declarativos ao nível dos componentes.
38
+ - **Localizar dinamicamente metadados**, rotas e conteúdo.
39
+ - **Garantir suporte TypeScript** com tipos autogerados, melhorando o preenchimento automático e a deteção de erros.
40
+ - **Beneficiar de funcionalidades avançadas**, como deteção e troca dinâmica de idioma.
41
+
42
+ Este guia demonstra como utilizar o Intlayer numa aplicação Vanilla JavaScript **sem utilizar um gestor de pacotes ou um bundler** (como Vite, Webpack, etc.).
43
+
44
+ Se a sua aplicação utiliza um bundler (como o Vite), recomendamos seguir o [Guia Vite + Vanilla JS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_with_vite+vanilla.md) em vez disso.
45
+
46
+ Utilizando o bundle standalone, pode importar o Intlayer diretamente nos seus ficheiros HTML através de um único ficheiro JavaScript, tornando-o perfeito para projetos legados ou sites estáticos simples.
47
+
48
+ ---
49
+
50
+ ## Guia Passo a Passo para Configurar o Intlayer numa Aplicação Vanilla JS
51
+
52
+ ### Passo 1: Instalar Dependências
53
+
54
+ Instale os pacotes necessários utilizando o npm:
55
+
56
+ ```bash packageManager="npm"
57
+ # Gerar um bundle standalone do intlayer e vanilla-intlayer
58
+ # Este ficheiro será importado no seu ficheiro HTML
59
+ npx intlayer standalone --packages intlayer vanilla-intlayer --outfile intlayer.js
60
+
61
+ # Inicializar o intlayer com o ficheiro de configuração
62
+ npx intlayer init --no-gitignore
63
+
64
+ # Construir os dicionários
65
+ npx intlayer build
66
+ ```
67
+
68
+ ```bash packageManager="pnpm"
69
+ # Gerar um bundle standalone do intlayer e vanilla-intlayer
70
+ # Este ficheiro será importado no seu ficheiro HTML
71
+ pnpm intlayer standalone --packages intlayer vanilla-intlayer --outfile intlayer.js
72
+
73
+ # Inicializar o intlayer com o ficheiro de configuração
74
+ pnpm intlayer init --no-gitignore
75
+
76
+ # Construir os dicionários
77
+ pnpm intlayer build
78
+ ```
79
+
80
+ ```bash packageManager="yarn"
81
+ # Gerar um bundle standalone do intlayer e vanilla-intlayer
82
+ # Este ficheiro será importado no seu ficheiro HTML
83
+ yarn intlayer standalone --packages intlayer vanilla-intlayer --outfile intlayer.js
84
+
85
+ # Inicializar o ficheiro de configuração intlayer, TypeScript se configurado, variáveis de ambiente
86
+ yarn intlayer init --no-gitignore
87
+
88
+ # Construir os dicionários
89
+ yarn intlayer build
90
+ ```
91
+
92
+ ```bash packageManager="bun"
93
+ # Gerar um bundle standalone do intlayer e vanilla-intlayer
94
+ # Este ficheiro será importado no seu ficheiro HTML
95
+ bun x intlayer standalone --packages intlayer vanilla-intlayer --outfile intlayer.js
96
+
97
+ # Inicializar o intlayer com o ficheiro de configuração
98
+ bun x intlayer init --no-gitignore
99
+
100
+ # Construir os dicionários
101
+ bun x intlayer build
102
+ ```
103
+
104
+ - **intlayer**
105
+ O pacote principal que fornece ferramentas de internacionalização para gestão de configuração, tradução, [declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/content_file.md), transpilação e [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/index.md).
106
+
107
+ - **vanilla-intlayer**
108
+ O pacote que integra o Intlayer com aplicações puras JavaScript / TypeScript. Fornece um singleton pub/sub (`IntlayerClient`) e auxiliares baseados em callbacks (`useIntlayer`, `useLocale`, etc.) para que qualquer parte da sua aplicação possa reagir a mudanças de idioma sem depender de uma framework de UI.
109
+
110
+ > A exportação de empacotamento (bundling) do CLI `intlayer standalone` produz uma build otimizada através do tree-shaking de pacotes não utilizados, idiomas e lógica não essencial (como redirecionamentos ou prefixos) específica para a sua configuração.
111
+
112
+ ### Passo 2: Configuração do seu projeto
113
+
114
+ Crie um ficheiro de configuração para configurar os idiomas da sua aplicação:
115
+
116
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
117
+ import { Locales, type IntlayerConfig } from "intlayer";
118
+
119
+ const config: IntlayerConfig = {
120
+ internationalization: {
121
+ locales: [
122
+ Locales.ENGLISH,
123
+ Locales.FRENCH,
124
+ Locales.SPANISH,
125
+ // Seus outros idiomas
126
+ ],
127
+ defaultLocale: Locales.ENGLISH,
128
+ },
129
+ };
130
+
131
+ export default config;
132
+ ```
133
+
134
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
135
+ import { Locales } from "intlayer";
136
+
137
+ /** @type {import('intlayer').IntlayerConfig} */
138
+ const config = {
139
+ internationalization: {
140
+ locales: [
141
+ Locales.ENGLISH,
142
+ Locales.FRENCH,
143
+ Locales.SPANISH,
144
+ // Seus outros idiomas
145
+ ],
146
+ defaultLocale: Locales.ENGLISH,
147
+ },
148
+ };
149
+
150
+ export default config;
151
+ ```
152
+
153
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
154
+ const { Locales } = require("intlayer");
155
+
156
+ /** @type {import('intlayer').IntlayerConfig} */
157
+ const config = {
158
+ internationalization: {
159
+ locales: [
160
+ Locales.ENGLISH,
161
+ Locales.FRENCH,
162
+ Locales.SPANISH,
163
+ // Seus outros idiomas
164
+ ],
165
+ defaultLocale: Locales.ENGLISH,
166
+ },
167
+ };
168
+
169
+ module.exports = config;
170
+ ```
171
+
172
+ > Através deste ficheiro de configuração, pode configurar URLs localizados, redirecionamento de middleware, nomes de cookies, a localização e extensão das suas declarações de conteúdo, desativar logs do Intlayer na consola e muito mais. Para uma lista completa de parâmetros disponíveis, consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
173
+
174
+ ### Passo 3: Importar o bundle no seu HTML
175
+
176
+ Depois de gerar o bundle `intlayer.js`, pode importá-lo no seu ficheiro HTML:
177
+
178
+ ```html fileName="index.html"
179
+ <!DOCTYPE html>
180
+ <html lang="pt">
181
+ <head>
182
+ <meta charset="UTF-8" />
183
+
184
+ <!-- Importar o bundle -->
185
+ <script src="./intlayer.js" defer></script>
186
+ <!-- Importar o seu script principal -->
187
+ <script src="./src/main.js" defer></script>
188
+ </head>
189
+ <body>
190
+ <h1 id="title"></h1>
191
+ <p class="read-the-docs"></p>
192
+ </body>
193
+ </html>
194
+ ```
195
+
196
+ O bundle expõe o `Intlayer` e o `VanillaIntlayer` como objetos globais no `window`.
197
+
198
+ ### Passo 4: Bootstrapper do Intlayer no seu ponto de entrada
199
+
200
+ No seu `src/main.js`, chame `installIntlayer()` **antes** de qualquer conteúdo ser renderizado, para que o singleton global de idioma esteja pronto.
201
+
202
+ ```javascript fileName="src/main.js"
203
+ const { installIntlayer } = window.VanillaIntlayer;
204
+
205
+ // Deve ser chamado antes de renderizar qualquer conteúdo i18n.
206
+ installIntlayer();
207
+ ```
208
+
209
+ Se também pretender utilizar o renderizador de markdown, chame `installIntlayerMarkdown()`:
210
+
211
+ ```javascript fileName="src/main.js"
212
+ const { installIntlayer, installIntlayerMarkdown } = window.VanillaIntlayer;
213
+
214
+ installIntlayer();
215
+ installIntlayerMarkdown();
216
+ ```
217
+
218
+ ### Passo 5: Declarar o Seu Conteúdo
219
+
220
+ Crie e gira as suas declarações de conteúdo para armazenar traduções:
221
+
222
+ ```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
223
+ import { insert, t, type Dictionary } from "intlayer";
224
+
225
+ const appContent = {
226
+ key: "app",
227
+ content: {
228
+ title: "Vite + Vanilla",
229
+
230
+ viteLogoLabel: t({
231
+ en: "Vite Logo",
232
+ fr: "Logo Vite",
233
+ es: "Logo Vite",
234
+ }),
235
+
236
+ count: insert(
237
+ t({
238
+ en: "count is {{count}}",
239
+ fr: "le compte est {{count}}",
240
+ es: "el recuento es {{count}}",
241
+ })
242
+ ),
243
+
244
+ readTheDocs: t({
245
+ en: "Click on the Vite logo to learn more",
246
+ fr: "Cliquez sur le logo Vite pour en savoir plus",
247
+ es: "Haga clic no logotipo do Vite para saber mais",
248
+ }),
249
+ },
250
+ } satisfies Dictionary;
251
+
252
+ export default appContent;
253
+ ```
254
+
255
+ ```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
256
+ import { insert, t } from "intlayer";
257
+
258
+ /** @type {import('intlayer').Dictionary} */
259
+ const appContent = {
260
+ key: "app",
261
+ content: {
262
+ title: "Vite + Vanilla",
263
+
264
+ viteLogoLabel: t({
265
+ en: "Vite Logo",
266
+ fr: "Logo Vite",
267
+ es: "Logo Vite",
268
+ }),
269
+
270
+ count: insert(
271
+ t({
272
+ en: "count is {{count}}",
273
+ fr: "le compte est {{count}}",
274
+ es: "el recuento es {{count}}",
275
+ })
276
+ ),
277
+
278
+ readTheDocs: t({
279
+ en: "Click on the Vite logo to learn more",
280
+ fr: "Cliquez sur le logo Vite pour en savoir plus",
281
+ es: "Haga clic no logotipo do Vite para saber mais",
282
+ }),
283
+ },
284
+ };
285
+
286
+ export default appContent;
287
+ ```
288
+
289
+ ```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
290
+ const { insert, t } = require("intlayer");
291
+
292
+ /** @type {import('intlayer').Dictionary} */
293
+ const appContent = {
294
+ key: "app",
295
+ content: {
296
+ title: "Vite + Vanilla",
297
+
298
+ viteLogoLabel: t({
299
+ en: "Vite Logo",
300
+ fr: "Logo Vite",
301
+ es: "Logo Vite",
302
+ }),
303
+
304
+ count: insert(
305
+ t({
306
+ en: "count is {{count}}",
307
+ fr: "le compte est {{count}}",
308
+ es: "el recuento es {{count}}",
309
+ })
310
+ ),
311
+
312
+ readTheDocs: t({
313
+ en: "Click on the Vite logo to learn more",
314
+ fr: "Cliquez sur le logo Vite pour en savoir plus",
315
+ es: "Haga clic no logotipo do Vite para saber mais",
316
+ }),
317
+ },
318
+ };
319
+
320
+ module.exports = appContent;
321
+ ```
322
+
323
+ ```json fileName="src/app.content.json" contentDeclarationFormat="json"
324
+ {
325
+ "$schema": "https://intlayer.org/schema.json",
326
+ "key": "app",
327
+ "content": {
328
+ "title": "Vite + Vanilla",
329
+ "viteLogoLabel": {
330
+ "nodeType": "translation",
331
+ "translation": {
332
+ "en": "Vite Logo",
333
+ "fr": "Logo Vite",
334
+ "es": "Logo Vite"
335
+ }
336
+ },
337
+ "count": {
338
+ "nodeType": "insertion",
339
+ "insertion": {
340
+ "nodeType": "translation",
341
+ "translation": {
342
+ "en": "count is {{count}}",
343
+ "fr": "le compte est {{count}}",
344
+ "es": "el recuento es {{count}}"
345
+ }
346
+ }
347
+ },
348
+ "readTheDocs": {
349
+ "nodeType": "translation",
350
+ "translation": {
351
+ "en": "Click on the Vite logo to learn more",
352
+ "fr": "Cliquez sur le logo Vite pour en savoir plus",
353
+ "es": "Haga clic no logotipo do Vite para obter mais informações"
354
+ }
355
+ }
356
+ }
357
+ }
358
+ ```
359
+
360
+ > As suas declarações de conteúdo podem ser definidas em qualquer lugar na sua aplicação desde que estejam incluídas no diretório `contentDir` (por defeito, `./src`). E correspondam à extensão do ficheiro de declaração de conteúdo (por defeito, `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
361
+ >
362
+ > Para mais detalhes, consulte a [documentação de declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/content_file.md).
363
+
364
+ ### Passo 6: Utilizar o Intlayer no seu JavaScript
365
+
366
+ O objeto `window.VanillaIntlayer` fornece auxiliares de API: `useIntlayer(key, locale?)` devolve o conteúdo traduzido para uma determinada chave.
367
+
368
+ ```javascript fileName="src/main.js"
369
+ const { installIntlayer, useIntlayer } = window.VanillaIntlayer;
370
+
371
+ installIntlayer();
372
+
373
+ // Obter o conteúdo inicial para o idioma atual.
374
+ // Encadeie .onChange() para ser notificado sempre que o idioma mudar.
375
+ const content = useIntlayer("app").onChange((newContent) => {
376
+ // Re-renderizar ou atualizar apenas os nós DOM afetados
377
+ document.querySelector("h1").textContent = String(newContent.title);
378
+ document.querySelector(".read-the-docs").textContent = String(
379
+ newContent.readTheDocs
380
+ );
381
+ });
382
+
383
+ // Renderização inicial
384
+ document.querySelector("h1").textContent = String(content.title);
385
+ document.querySelector(".read-the-docs").textContent = String(
386
+ content.readTheDocs
387
+ );
388
+ ```
389
+
390
+ > Aceda aos valores finais como strings envolvendo-os em `String()`, que chama o método `toString()` do nó e devolve o texto traduzido.
391
+ >
392
+ > Quando precisar do valor para um atributo HTML nativo (ex: `alt`, `aria-label`), utilize `.value` diretamente:
393
+ >
394
+ > ```javascript
395
+ > img.alt = content.viteLogoLabel.value;
396
+ > ```
397
+
398
+ ### (Opcional) Passo 7: Alterar o idioma do seu conteúdo
399
+
400
+ Para alterar o idioma do seu conteúdo, utilize a função `setLocale` exposta pelo `useLocale`.
401
+
402
+ ```javascript fileName="src/locale-switcher.js"
403
+ const { getLocaleName } = window.Intlayer;
404
+ const { useLocale } = window.VanillaIntlayer;
405
+
406
+ export function setupLocaleSwitcher(container) {
407
+ const { locale, availableLocales, setLocale, subscribe } = useLocale();
408
+
409
+ const select = document.createElement("select");
410
+ select.setAttribute("aria-label", "Idioma");
411
+
412
+ const render = (currentLocale) => {
413
+ select.innerHTML = availableLocales
414
+ .map(
415
+ (loc) =>
416
+ `<option value="${loc}"${loc === currentLocale ? " selected" : ""}>
417
+ ${getLocaleName(loc)}
418
+ </option>`
419
+ )
420
+ .join("");
421
+ };
422
+
423
+ render(locale);
424
+ container.appendChild(select);
425
+
426
+ select.addEventListener("change", () => setLocale(select.value));
427
+
428
+ // Manter o dropdown sincronizado quando o idioma mudar de outro local
429
+ return subscribe((newLocale) => render(newLocale));
430
+ }
431
+ ```
432
+
433
+ ### (Opcional) Passo 8: Alternar os atributos HTML de Idioma e Direção
434
+
435
+ Atualize os atributos `lang` e `dir` da tag `<html>` para corresponderem ao idioma atual para acessibilidade e SEO.
436
+
437
+ ```javascript fileName="src/main.js"
438
+ const { getHTMLTextDir } = window.Intlayer;
439
+ const { installIntlayer, useLocale } = window.VanillaIntlayer;
440
+
441
+ installIntlayer();
442
+
443
+ useLocale({
444
+ onLocaleChange: (locale) => {
445
+ document.documentElement.lang = locale;
446
+ document.documentElement.dir = getHTMLTextDir(locale);
447
+ },
448
+ });
449
+ ```
450
+
451
+ ### (Opcional) Passo 9: Carregamento lento de dicionários por idioma
452
+
453
+ Se pretender carregar dicionários de forma lenta por idioma, pode utilizar `useDictionaryDynamic`. Isto é útil se não quiser incluir todas as traduções no ficheiro inicial `intlayer.js`.
454
+
455
+ ```javascript fileName="src/app.js"
456
+ const { installIntlayer, useDictionaryDynamic } = window.VanillaIntlayer;
457
+
458
+ installIntlayer();
459
+
460
+ const unsubscribe = useDictionaryDynamic(
461
+ {
462
+ en: () => import("../.intlayer/dictionaries/en/app.mjs"),
463
+ fr: () => import("../.intlayer/dictionaries/fr/app.mjs"),
464
+ es: () => import("../.intlayer/dictionaries/es/app.mjs"),
465
+ },
466
+ "app"
467
+ ).onChange((content) => {
468
+ document.querySelector("h1").textContent = String(content.title);
469
+ });
470
+ ```
471
+
472
+ > Nota: o `useDictionaryDynamic` requer que os dicionários estejam disponíveis como ficheiros ESM separados. Esta abordagem é tipicamente utilizada se tiver um servidor web a servir os dicionários.
473
+
474
+ ### Configurar TypeScript
475
+
476
+ Certifique-se de que a sua configuração TypeScript inclui os tipos autogerados.
477
+
478
+ ```json5 fileName="tsconfig.json"
479
+ {
480
+ "compilerOptions": {
481
+ // ...
482
+ },
483
+ "include": ["src", ".intlayer/**/*.ts"],
484
+ }
485
+ ```
486
+
487
+ ### Extensão VS Code
488
+
489
+ Para melhorar a sua experiência de desenvolvimento com o Intlayer, pode instalar a **Extensão oficial do Intlayer para VS Code**.
490
+
491
+ [Instalar a partir do VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
492
+
493
+ Esta extensão fornece:
494
+
495
+ - **Preenchimento automático** para chaves de tradução.
496
+ - **Deteção de erros em tempo real** para traduções em falta.
497
+ - **Pré-visualizações inline** de conteúdo traduzido.
498
+ - **Ações rápidas** para criar e atualizar traduções facilmente.
499
+
500
+ Para mais detalhes sobre como utilizar a extensão, consulte a [documentação da extensão Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).
501
+
502
+ ---
503
+
504
+ ### Ir Mais Longe
505
+
506
+ Para ir mais longe, pode implementar o [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md) ou externalizar o seu conteúdo utilizando o [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md).