@intlayer/docs 7.1.9 → 7.2.2

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 (45) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_svelte_kit.md +738 -0
  9. package/docs/ar/intlayer_with_vite+svelte.md +288 -104
  10. package/docs/de/intlayer_with_svelte_kit.md +738 -0
  11. package/docs/de/intlayer_with_vite+svelte.md +302 -101
  12. package/docs/en/intlayer_with_nextjs_16.md +10 -2
  13. package/docs/en/intlayer_with_svelte_kit.md +570 -0
  14. package/docs/en/intlayer_with_vite+svelte.md +22 -6
  15. package/docs/en/introduction.md +2 -0
  16. package/docs/en-GB/intlayer_with_svelte_kit.md +738 -0
  17. package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
  18. package/docs/es/intlayer_with_svelte_kit.md +738 -0
  19. package/docs/es/intlayer_with_vite+svelte.md +300 -107
  20. package/docs/fr/intlayer_with_svelte_kit.md +770 -0
  21. package/docs/fr/intlayer_with_vite+svelte.md +297 -101
  22. package/docs/hi/intlayer_with_svelte_kit.md +738 -0
  23. package/docs/hi/intlayer_with_vite+svelte.md +298 -108
  24. package/docs/id/intlayer_with_svelte_kit.md +738 -0
  25. package/docs/id/intlayer_with_vite+svelte.md +277 -99
  26. package/docs/it/intlayer_with_svelte_kit.md +770 -0
  27. package/docs/it/intlayer_with_vite+svelte.md +275 -99
  28. package/docs/ja/intlayer_with_svelte_kit.md +738 -0
  29. package/docs/ja/intlayer_with_vite+svelte.md +295 -110
  30. package/docs/ko/intlayer_with_svelte_kit.md +738 -0
  31. package/docs/ko/intlayer_with_vite+svelte.md +286 -199
  32. package/docs/pl/intlayer_with_svelte_kit.md +740 -0
  33. package/docs/pl/intlayer_with_vite+svelte.md +273 -101
  34. package/docs/pt/intlayer_with_svelte_kit.md +772 -0
  35. package/docs/pt/intlayer_with_vite+svelte.md +290 -96
  36. package/docs/ru/intlayer_with_svelte_kit.md +738 -0
  37. package/docs/ru/intlayer_with_vite+svelte.md +275 -99
  38. package/docs/tr/intlayer_with_svelte_kit.md +738 -0
  39. package/docs/tr/intlayer_with_vite+svelte.md +297 -119
  40. package/docs/vi/intlayer_with_svelte_kit.md +738 -0
  41. package/docs/vi/intlayer_with_vite+svelte.md +275 -102
  42. package/docs/zh/intlayer_with_svelte_kit.md +738 -0
  43. package/docs/zh/intlayer_with_vite+svelte.md +309 -107
  44. package/package.json +9 -9
  45. package/src/generated/docs.entry.ts +19 -0
@@ -0,0 +1,772 @@
1
+ ---
2
+ createdAt: 2025-11-20
3
+ updatedAt: 2025-11-20
4
+ title: Como traduzir sua aplicação SvelteKit – guia i18n 2025
5
+ description: Descubra como tornar seu site SvelteKit multilíngue. Siga a documentação para internacionalizar (i18n) e traduzir usando Server-Side Rendering (SSR).
6
+ keywords:
7
+ - Internacionalização
8
+ - Documentação
9
+ - Intlayer
10
+ - SvelteKit
11
+ - JavaScript
12
+ - SSR
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - sveltekit
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
18
+ history:
19
+ - version: 7.1.10
20
+ date: 2025-11-20
21
+ changes: Histórico inicial
22
+ ---
23
+
24
+ # Traduza seu site SvelteKit usando Intlayer | Internacionalização (i18n)
25
+
26
+ ## Índice
27
+
28
+ <TOC/>
29
+
30
+ ## O que é o Intlayer?
31
+
32
+ **Intlayer** é uma biblioteca inovadora e open-source de internacionalização (i18n) projetada para simplificar o suporte multilíngue em aplicações web modernas. Ela funciona perfeitamente com as capacidades de Server-Side Rendering (SSR) do **SvelteKit**.
33
+
34
+ Com o Intlayer, você pode:
35
+
36
+ - **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
37
+ - **Localizar dinamicamente metadados**, rotas e conteúdo.
38
+ - **Garantir suporte ao TypeScript** com tipos gerados automaticamente.
39
+ - **Aproveitar o SSR do SvelteKit** para uma internacionalização amigável ao SEO.
40
+
41
+ ---
42
+
43
+ ## Guia Passo a Passo para Configurar o Intlayer em uma Aplicação SvelteKit
44
+
45
+ Para começar, crie um novo projeto SvelteKit. Aqui está a estrutura final que iremos criar:
46
+
47
+ <iframe
48
+ src="https://stackblitz.com/github/aymericzip/intlayer-sveltekit-template?embed=1&ctl=1&file=intlayer.config.ts"
49
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
50
+ title="Demo CodeSandbox - Cách quốc tế hóa ứng dụng của bạn bằng Intlayer"
51
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
52
+ loading="lazy"
53
+ />
54
+
55
+ ```bash
56
+ .
57
+ ├── intlayer.config.ts
58
+ ├── package.json
59
+ ├── src
60
+ │ ├── app.d.ts
61
+ │   ├── app.html
62
+ │   ├── hooks.server.ts
63
+ │   ├── lib
64
+ │   │   ├── getLocale.ts
65
+ │   │   ├── LocaleSwitcher.svelte
66
+ │   │   └── LocalizedLink.svelte
67
+ │   ├── params
68
+ │   │   └── locale.ts
69
+ │   └── routes
70
+ │   ├── [[locale=locale]]
71
+ │   │   ├── +layout.svelte
72
+ │   │   ├── +layout.ts
73
+ │   │   ├── +page.svelte
74
+ │   │   ├── +page.ts
75
+ │   │   ├── about
76
+ │   │   │   ├── +page.svelte
77
+ │   │   │   ├── +page.ts
78
+ │   │   │   └── page.content.ts
79
+ │   │   ├── Counter.content.ts
80
+ │   │   ├── Counter.svelte
81
+ │   │   ├── Header.content.ts
82
+ │   │   ├── Header.svelte
83
+ │   │   ├── home.content.ts
84
+ │   │   └── layout.content.ts
85
+ │   ├── +layout.svelte
86
+ │   └── layout.css
87
+ ├── static
88
+ │   ├── favicon.svg
89
+ │   └── robots.txt
90
+ ├── svelte.config.js
91
+ ├── tsconfig.json
92
+ └── vite.config.ts
93
+ ```
94
+
95
+ ### Passo 1: Instalar Dependências
96
+
97
+ Instale os pacotes necessários usando npm:
98
+
99
+ ```bash packageManager="npm"
100
+ npm install intlayer svelte-intlayer
101
+ npm install vite-intlayer --save-dev
102
+ ```
103
+
104
+ ```bash packageManager="pnpm"
105
+ pnpm add intlayer svelte-intlayer
106
+ pnpm add vite-intlayer --save-dev
107
+ ```
108
+
109
+ ```bash packageManager="yarn"
110
+ yarn add intlayer svelte-intlayer
111
+ yarn add vite-intlayer --save-dev
112
+ ```
113
+
114
+ ```bash packageManager="bun"
115
+ bun add intlayer svelte-intlayer
116
+ bun add vite-intlayer --save-dev
117
+ ```
118
+
119
+ - **intlayer**: O pacote principal de i18n.
120
+ - **svelte-intlayer**: Fornece context providers e stores para Svelte/SvelteKit.
121
+ - **vite-intlayer**: O plugin do Vite para integrar as declarações de conteúdo com o processo de build.
122
+
123
+ ### Passo 2: Configuração do seu projeto
124
+
125
+ Crie um arquivo de configuração na raiz do seu projeto:
126
+
127
+ ```typescript fileName="intlayer.config.ts"
128
+ import { Locales, type IntlayerConfig } from "intlayer";
129
+
130
+ const config: IntlayerConfig = {
131
+ internationalization: {
132
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
133
+ defaultLocale: Locales.ENGLISH,
134
+ },
135
+ };
136
+
137
+ export default config;
138
+ ```
139
+
140
+ ### Passo 3: Integre o Intlayer na sua Configuração do Vite
141
+
142
+ Atualize seu `vite.config.ts` para incluir o plugin Intlayer. Este plugin gerencia a transpiração dos seus arquivos de conteúdo.
143
+
144
+ ```typescript fileName="vite.config.ts"
145
+ import { sveltekit } from "@sveltejs/kit/vite";
146
+ import { defineConfig } from "vite";
147
+ import { intlayer } from "vite-intlayer";
148
+
149
+ export default defineConfig({
150
+ plugins: [intlayer(), sveltekit()], // a ordem importa, Intlayer deve ser colocado antes do SvelteKit
151
+ });
152
+ ```
153
+
154
+ ### Passo 4: Declare Seu Conteúdo
155
+
156
+ Crie seus arquivos de declaração de conteúdo em qualquer lugar dentro da sua pasta `src` (por exemplo, `src/lib/content` ou junto aos seus componentes). Esses arquivos definem o conteúdo traduzível para sua aplicação usando a função `t()` para cada locale.
157
+
158
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
159
+ import { t, type Dictionary } from "intlayer";
160
+
161
+ const heroContent = {
162
+ key: "hero-section",
163
+ content: {
164
+ title: t({
165
+ en: "Welcome to SvelteKit",
166
+ fr: "Bienvenue sur SvelteKit",
167
+ es: "Bienvenido a SvelteKit",
168
+ }),
169
+ },
170
+ } satisfies Dictionary;
171
+
172
+ export default heroContent;
173
+ ```
174
+
175
+ ### Passo 5: Utilize o Intlayer em Seus Componentes
176
+
177
+ ### Passo 5: Utilize o Intlayer em Seus Componentes
178
+
179
+ Agora você pode usar a função `useIntlayer` em qualquer componente Svelte. Ela retorna uma store reativa que atualiza automaticamente quando o locale muda. A função respeitará automaticamente o locale atual (tanto durante SSR quanto na navegação do lado do cliente).
180
+
181
+ > **Nota:** `useIntlayer` retorna uma store do Svelte, então você precisa usar o prefixo `---
182
+ > createdAt: 2025-11-20
183
+ > updatedAt: 2025-11-20
184
+ > title: Como traduzir sua aplicação SvelteKit – guia i18n 2025
185
+ > description: Descubra como tornar seu site SvelteKit multilíngue. Siga a documentação para internacionalizar (i18n) e traduzir usando Server-Side Rendering (SSR).
186
+ > keywords:
187
+
188
+ - Internacionalização
189
+ - Documentação
190
+ - Intlayer
191
+ - SvelteKit
192
+ - JavaScript
193
+ - SSR
194
+ slugs:
195
+ - doc
196
+ - environment
197
+ - sveltekit
198
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
199
+ history:
200
+ - version: 7.1.10
201
+ date: 2025-11-20
202
+ changes: Histórico inicial
203
+
204
+ ---
205
+
206
+ # Traduza seu site SvelteKit usando Intlayer | Internacionalização (i18n)
207
+
208
+ ## Índice
209
+
210
+ <TOC/>
211
+
212
+ ## O que é o Intlayer?
213
+
214
+ **Intlayer** é uma biblioteca inovadora e open-source de internacionalização (i18n) projetada para simplificar o suporte multilíngue em aplicações web modernas. Ela funciona perfeitamente com as capacidades de Server-Side Rendering (SSR) do **SvelteKit**.
215
+
216
+ Com o Intlayer, você pode:
217
+
218
+ - **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
219
+ - **Localizar dinamicamente metadados**, rotas e conteúdo.
220
+ - **Garantir suporte ao TypeScript** com tipos gerados automaticamente.
221
+ - **Aproveitar o SSR do SvelteKit** para uma internacionalização amigável ao SEO.
222
+
223
+ ---
224
+
225
+ ## Guia Passo a Passo para Configurar o Intlayer em uma Aplicação SvelteKit
226
+
227
+ Para começar, crie um novo projeto SvelteKit. Aqui está a estrutura final que iremos criar:
228
+
229
+ ```bash
230
+ .
231
+ ├── intlayer.config.ts
232
+ ├── package.json
233
+ ├── src
234
+ │ ├── app.d.ts
235
+ │   ├── app.html
236
+ │   ├── hooks.server.ts
237
+ │   ├── lib
238
+ │   │   ├── getLocale.ts
239
+ │   │   ├── LocaleSwitcher.svelte
240
+ │   │   └── LocalizedLink.svelte
241
+ │   ├── params
242
+ │   │   └── locale.ts
243
+ │   └── routes
244
+ │   ├── [[locale=locale]]
245
+ │   │   ├── +layout.svelte
246
+ │   │   ├── +layout.ts
247
+ │   │   ├── +page.svelte
248
+ │   │   ├── +page.ts
249
+ │   │   ├── about
250
+ │   │   │   ├── +page.svelte
251
+ │   │   │   ├── +page.ts
252
+ │   │   │   └── page.content.ts
253
+ │   │   ├── Counter.content.ts
254
+ │   │   ├── Counter.svelte
255
+ │   │   ├── Header.content.ts
256
+ │   │   ├── Header.svelte
257
+ │   │   ├── home.content.ts
258
+ │   │   └── layout.content.ts
259
+ │   ├── +layout.svelte
260
+ │   └── layout.css
261
+ ├── static
262
+ │   ├── favicon.svg
263
+ │   └── robots.txt
264
+ ├── svelte.config.js
265
+ ├── tsconfig.json
266
+ └── vite.config.ts
267
+ ```
268
+
269
+ ### Passo 1: Instalar Dependências
270
+
271
+ Instale os pacotes necessários usando npm:
272
+
273
+ ```bash packageManager="npm"
274
+ npm install intlayer svelte-intlayer
275
+ npm install vite-intlayer --save-dev
276
+ ```
277
+
278
+ ```bash packageManager="pnpm"
279
+ pnpm add intlayer svelte-intlayer
280
+ pnpm add vite-intlayer --save-dev
281
+ ```
282
+
283
+ ```bash packageManager="yarn"
284
+ yarn add intlayer svelte-intlayer
285
+ yarn add vite-intlayer --save-dev
286
+ ```
287
+
288
+ ```bash packageManager="bun"
289
+ bun add intlayer svelte-intlayer
290
+ bun add vite-intlayer --save-dev
291
+ ```
292
+
293
+ - **intlayer**: O pacote principal de i18n.
294
+ - **svelte-intlayer**: Fornece context providers e stores para Svelte/SvelteKit.
295
+ - **vite-intlayer**: O plugin do Vite para integrar as declarações de conteúdo com o processo de build.
296
+
297
+ ### Passo 2: Configuração do seu projeto
298
+
299
+ Crie um arquivo de configuração na raiz do seu projeto:
300
+
301
+ ```typescript fileName="intlayer.config.ts"
302
+ import { Locales, type IntlayerConfig } from "intlayer";
303
+
304
+ const config: IntlayerConfig = {
305
+ internationalization: {
306
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
307
+ defaultLocale: Locales.ENGLISH,
308
+ },
309
+ };
310
+
311
+ export default config;
312
+ ```
313
+
314
+ ### Passo 3: Integre o Intlayer na sua Configuração do Vite
315
+
316
+ Atualize seu `vite.config.ts` para incluir o plugin Intlayer. Este plugin gerencia a transpiração dos seus arquivos de conteúdo.
317
+
318
+ ```typescript fileName="vite.config.ts"
319
+ import { sveltekit } from "@sveltejs/kit/vite";
320
+ import { defineConfig } from "vite";
321
+ import { intlayer } from "vite-intlayer";
322
+
323
+ export default defineConfig({
324
+ plugins: [intlayer(), sveltekit()], // a ordem importa, Intlayer deve ser colocado antes do SvelteKit
325
+ });
326
+ ```
327
+
328
+ ### Passo 4: Declare Seu Conteúdo
329
+
330
+ Crie seus arquivos de declaração de conteúdo em qualquer lugar dentro da sua pasta `src` (por exemplo, `src/lib/content` ou junto aos seus componentes). Esses arquivos definem o conteúdo traduzível para sua aplicação usando a função `t()` para cada locale.
331
+
332
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
333
+ import { t, type Dictionary } from "intlayer";
334
+
335
+ const heroContent = {
336
+ key: "hero-section",
337
+ content: {
338
+ title: t({
339
+ en: "Welcome to SvelteKit",
340
+ fr: "Bienvenue sur SvelteKit",
341
+ es: "Bienvenido a SvelteKit",
342
+ }),
343
+ },
344
+ } satisfies Dictionary;
345
+
346
+ export default heroContent;
347
+ ```
348
+
349
+ ### Passo 5: Utilize o Intlayer em Seus Componentes
350
+
351
+ para acessar seu valor reativo (por exemplo, `$content.title`).
352
+
353
+ ```svelte fileName="src/lib/components/Component.svelte"
354
+ <script lang="ts">
355
+ import { useIntlayer } from "svelte-intlayer";
356
+
357
+ // "hero-section" corresponde à chave definida no Passo 4
358
+ const content = useIntlayer("hero-section");
359
+ </script>
360
+
361
+ <!-- Renderizar conteúdo como conteúdo simples -->
362
+ <h1>{$content.title}</h1>
363
+ <!-- Para renderizar o conteúdo editável usando o editor -->
364
+ <h1><svelte:component this={$content.title} /></h1>
365
+ <!-- Para renderizar o conteúdo como uma string -->
366
+ <div aria-label={$content.title.value}></div>
367
+ ```
368
+
369
+ ### (Opcional) Passo 6: Configurar o roteamento
370
+
371
+ Os passos a seguir mostram como configurar o roteamento baseado em locale no SvelteKit. Isso permite que suas URLs incluam o prefixo do locale (ex.: `/en/about`, `/fr/about`) para melhor SEO e experiência do usuário.
372
+
373
+ ```bash
374
+ .
375
+ └─── src
376
+ ├── app.d.ts # Definir o tipo de locale
377
+ ├── hooks.server.ts # Gerenciar o roteamento do locale
378
+ ├── lib
379
+ │   └── getLocale.ts # Verificar o locale a partir do header, cookies
380
+ ├── params
381
+ │   └── locale.ts # Definir o parâmetro do locale
382
+ └── routes
383
+ ├── [[locale=locale]] # Envolver em um grupo de rotas para definir o locale
384
+ │   ├── +layout.svelte # Layout local para a rota
385
+ │   ├── +layout.ts
386
+ │   ├── +page.svelte
387
+ │   ├── +page.ts
388
+ │   └── about
389
+ │      ├── +page.svelte
390
+ │      └── +page.ts
391
+ └── +layout.svelte # Layout raiz para fontes e estilos globais
392
+ ```
393
+
394
+ ### Passo 7: Gerenciar a Detecção de Locale no Lado do Servidor (Hooks)
395
+
396
+ No SvelteKit, o servidor precisa saber o locale do usuário para renderizar o conteúdo correto durante o SSR. Usamos `hooks.server.ts` para detectar o locale a partir da URL ou dos cookies.
397
+
398
+ Crie ou modifique `src/hooks.server.ts`:
399
+
400
+ ```typescript fileName="src/hooks.server.ts"
401
+ import type { Handle } from "@sveltejs/kit";
402
+ import { getLocalizedUrl } from "intlayer";
403
+ import { getLocale } from "$lib/getLocale";
404
+
405
+ export const handle: Handle = async ({ event, resolve }) => {
406
+ const detectedLocale = getLocale(event);
407
+
408
+ // Verifica se o caminho atual já começa com uma localidade (ex: /fr, /en)
409
+ const pathname = event.url.pathname;
410
+ const targetPathname = getLocalizedUrl(pathname, detectedLocale);
411
+
412
+ // Se NÃO houver localidade presente na URL (ex: usuário visita "/"), redireciona
413
+ if (targetPathname !== pathname) {
414
+ return new Response(undefined, {
415
+ headers: { Location: targetPathname },
416
+ status: 307, // Redirecionamento temporário
417
+ });
418
+ }
419
+
420
+ return resolve(event, {
421
+ transformPageChunk: ({ html }) => html.replace("%lang%", detectedLocale),
422
+ });
423
+ };
424
+ ```
425
+
426
+ Em seguida, crie um helper para obter a localidade do usuário a partir do evento da requisição:
427
+
428
+ ```typescript fileName="src/lib/getLocale.ts"
429
+ import {
430
+ configuration,
431
+ getLocaleFromStorage,
432
+ localeDetector,
433
+ type Locale,
434
+ } from "intlayer";
435
+ import type { RequestEvent } from "@sveltejs/kit";
436
+
437
+ /**
438
+ * Obtém a localidade do usuário a partir do evento de requisição.
439
+ * Esta função é usada no hook `handle` em `src/hooks.server.ts`.
440
+ *
441
+ * Primeiro, tenta obter a localidade do armazenamento do Intlayer (cookies ou cabeçalhos personalizados).
442
+ * Se a localidade não for encontrada, recorre à negociação "Accept-Language" do navegador.
443
+ *
444
+ * @param event - O evento de requisição do SvelteKit
445
+ * @returns A localidade do usuário
446
+ */
447
+ export const getLocale = (event: RequestEvent): Locale => {
448
+ const defaultLocale = configuration?.internationalization?.defaultLocale;
449
+
450
+ // Tenta obter a localidade do armazenamento do Intlayer (Cookies ou cabeçalhos)
451
+ const storedLocale = getLocaleFromStorage({
452
+ // Acesso aos cookies do SvelteKit
453
+ getCookie: (name: string) => event.cookies.get(name) ?? null,
454
+ // Acesso aos headers do SvelteKit
455
+ getHeader: (name: string) => event.request.headers.get(name) ?? null,
456
+ });
457
+
458
+ if (storedLocale) {
459
+ return storedLocale;
460
+ }
461
+
462
+ // Recurso de fallback para a negociação "Accept-Language" do navegador
463
+ const negotiatorHeaders: Record<string, string> = {};
464
+
465
+ // Converte o objeto Headers do SvelteKit para um Record<string, string> simples
466
+ event.request.headers.forEach((value, key) => {
467
+ negotiatorHeaders[key] = value;
468
+ });
469
+
470
+ // Verifica a localidade a partir do header `Accept-Language`
471
+ const userFallbackLocale = localeDetector(negotiatorHeaders);
472
+
473
+ if (userFallbackLocale) {
474
+ return userFallbackLocale;
475
+ }
476
+
477
+ // Retorna a localidade padrão se nenhuma correspondência for encontrada
478
+ return defaultLocale;
479
+ };
480
+ ```
481
+
482
+ > `getLocaleFromStorage` verificará o locale a partir do header ou cookie dependendo da sua configuração. Veja [Configuração](https://intlayer.org/doc/configuration) para mais detalhes.
483
+
484
+ > A função `localeDetector` tratará o header `Accept-Language` e retornará a melhor correspondência.
485
+
486
+ Se o locale não estiver configurado, queremos retornar um erro 404. Para facilitar, podemos criar uma função `match` para verificar se o locale é válido:
487
+
488
+ ```ts fileName="/src/params/locale.ts"
489
+ import { configuration, type Locale } from "intlayer";
490
+
491
+ export const match = (
492
+ param: Locale = configuration.internationalization.defaultLocale
493
+ ): boolean => {
494
+ return configuration.internationalization.locales.includes(param);
495
+ };
496
+ ```
497
+
498
+ > **Nota:** Certifique-se de que seu arquivo `src/app.d.ts` inclua a definição do locale:
499
+ >
500
+ > ```typescript
501
+ > declare global {
502
+ > namespace App {
503
+ > interface Locals {
504
+ > locale: import("intlayer").Locale;
505
+ > }
506
+ > }
507
+ > }
508
+ > ```
509
+
510
+ Para o arquivo `+layout.svelte`, podemos remover tudo, para manter apenas conteúdo estático, não relacionado à i18n:
511
+
512
+ ```svelte fileName="src/+layout.svelte"
513
+ <script lang="ts">
514
+ import './layout.css';
515
+
516
+ let { children } = $props();
517
+ </script>
518
+
519
+ <div class="app">
520
+ {@render children()}
521
+ </div>
522
+
523
+ <style>
524
+ .app {
525
+ /* */
526
+ }
527
+ </style>
528
+ ```
529
+
530
+ Em seguida, crie uma nova página e layout dentro do grupo `[[locale=locale]]`:
531
+
532
+ ```ts fileName="src/routes/[[locale=locale]]/+layout.ts"
533
+ import type { Load } from "@sveltejs/kit";
534
+ import { configuration, type Locale } from "intlayer";
535
+
536
+ export const prerender = true;
537
+
538
+ // Use o tipo genérico Load
539
+ export const load: Load = ({ params }) => {
540
+ const locale: Locale =
541
+ (params.locale as Locale) ??
542
+ configuration.internationalization.defaultLocale;
543
+
544
+ return {
545
+ locale,
546
+ };
547
+ };
548
+ ```
549
+
550
+ ```svelte fileName="src/routes/[[locale=locale]]/+layout.svelte"
551
+ <script lang="ts">
552
+ import type { Snippet } from 'svelte';
553
+ import { useIntlayer, setupIntlayer } from 'svelte-intlayer';
554
+ import Header from './Header.svelte';
555
+ import type { LayoutData } from './$types';
556
+
557
+ let { children, data }: { children: Snippet, data: LayoutData } = $props();
558
+
559
+ // Inicializar o Intlayer com a locale da rota
560
+ setupIntlayer(data.locale);
561
+
562
+ // Usar o dicionário de conteúdo do layout
563
+ const layoutContent = useIntlayer('layout');
564
+ </script>
565
+
566
+ <Header />
567
+
568
+ <main>
569
+ {@render children()}
570
+ </main>
571
+
572
+ <footer>
573
+ <p>
574
+ {$layoutContent.footer.prefix.value}{' '}
575
+ <a href="https://svelte.dev/docs/kit">{$layoutContent.footer.linkLabel.value}</a>{' '}
576
+ {$layoutContent.footer.suffix.value}
577
+ </p>
578
+ </footer>
579
+
580
+ <style>
581
+ /* */
582
+ </style>
583
+ ```
584
+
585
+ ```ts fileName="src/routes/[[locale=locale]]/+page.ts"
586
+ export const prerender = true;
587
+ ```
588
+
589
+ ```svelte fileName="src/routes/[[locale=locale]]/+page.svelte"
590
+ <script lang="ts">
591
+ import { useIntlayer } from 'svelte-intlayer';
592
+
593
+ // Usar o dicionário de conteúdo da home
594
+ const homeContent = useIntlayer('home');
595
+ </script>
596
+
597
+ <svelte:head>
598
+ <title>{$homeContent.title.value}</title>
599
+ </svelte:head>
600
+
601
+ <section>
602
+ <h1>
603
+ {$homeContent.title}
604
+ </h1>
605
+ </section>
606
+
607
+ <style>
608
+ /* */
609
+ </style>
610
+ ```
611
+
612
+ ### (Opcional) Passo 8: Links Internacionalizados
613
+
614
+ Para SEO, é recomendado prefixar suas rotas com a localidade (ex: `/en/about`, `/fr/about`). Este componente automaticamente prefixa qualquer link com a localidade atual.
615
+
616
+ ```svelte fileName="src/lib/components/LocalizedLink.svelte"
617
+ <script lang="ts">
618
+ import { getLocalizedUrl } from "intlayer";
619
+ import { useLocale } from 'svelte-intlayer';
620
+
621
+ let { href = "" } = $props();
622
+ const { locale } = useLocale();
623
+
624
+ // Auxiliar para prefixar URL com a localidade atual
625
+ $: localizedHref = getLocalizedUrl(href, $locale);
626
+ </script>
627
+
628
+ <a href={localizedHref}>
629
+ <slot />
630
+ </a>
631
+ ```
632
+
633
+ Se você usar `goto` do SvelteKit, pode usar a mesma lógica com `getLocalizedUrl` para navegar para a URL localizada:
634
+
635
+ ```typescript
636
+ import { goto } from "$app/navigation";
637
+ import { getLocalizedUrl } from "intlayer";
638
+ import { useLocale } from "svelte-intlayer";
639
+
640
+ const { locale } = useLocale();
641
+ const localizedPath = getLocalizedUrl("/about", $locale);
642
+ goto(localizedPath); // Navega para /en/about ou /fr/about dependendo da localidade
643
+ ```
644
+
645
+ ### (Opcional) Passo 9: Seletor de Idioma
646
+
647
+ Para permitir que os usuários mudem de idioma, atualize a URL.
648
+
649
+ ```svelte fileName="src/lib/components/LanguageSwitcher.svelte"
650
+ <script lang="ts">
651
+ import { getLocalizedUrl, getLocaleName } from 'intlayer';
652
+ import { useLocale } from 'svelte-intlayer';
653
+ import { page } from '$app/stores';
654
+ import { goto } from '$app/navigation';
655
+
656
+ const { locale, setLocale, availableLocales } = useLocale({
657
+ onLocaleChange: (newLocale) => {
658
+ const localizedPath = getLocalizedUrl($page.url.pathname, newLocale);
659
+ goto(localizedPath);
660
+ },
661
+ });
662
+ </script>
663
+
664
+ <ul class="locale-list">
665
+ {#each availableLocales as localeEl}
666
+ <li>
667
+ <a
668
+ href={getLocalizedUrl($page.url.pathname, localeEl)}
669
+ onclick={(e) => {
670
+ e.preventDefault();
671
+ setLocale(localeEl); // Vai definir a localidade na store e disparar onLocaleChange
672
+ }}
673
+ class:active={$locale === localeEl}
674
+ >
675
+ {getLocaleName(localeEl)}
676
+ </a>
677
+ </li>
678
+ {/each}
679
+ </ul>
680
+
681
+ <style>
682
+ /* */
683
+ </style>
684
+ ```
685
+
686
+ ### (Opcional) Passo 10: Adicionar proxy backend
687
+
688
+ Para adicionar um proxy backend à sua aplicação SvelteKit, você pode usar a função `intlayerProxy` fornecida pelo plugin `vite-intlayer`. Este plugin detectará automaticamente a melhor localidade para o usuário com base na URL, cookies e preferências de idioma do navegador.
689
+
690
+ ```ts fileName="vite.config.ts"
691
+ import { defineConfig } from "vite";
692
+ import { intlayer, intlayerProxy } from "vite-intlayer";
693
+ import { sveltekit } from "@sveltejs/kit/vite";
694
+
695
+ // https://vitejs.dev/config/
696
+ export default defineConfig({
697
+ plugins: [intlayer(), intlayerProxy(), sveltekit()],
698
+ });
699
+ ```
700
+
701
+ ### (Opcional) Passo 11: Configurar o editor / CMS do intlayer
702
+
703
+ Para configurar o editor do intlayer, você deve seguir a [documentação do editor intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md).
704
+
705
+ Para configurar o CMS do intlayer, você deve seguir a [documentação do CMS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md).
706
+
707
+ Para poder visualizar o seletor do editor intlayer, você deverá usar a sintaxe de componente no seu conteúdo intlayer.
708
+
709
+ ```svelte fileName="Component.svelte"
710
+ <script lang="ts">
711
+ import { useIntlayer } from "svelte-intlayer";
712
+
713
+ const content = useIntlayer("component");
714
+ </script>
715
+
716
+ <div>
717
+
718
+ <!-- Renderizar conteúdo como conteúdo simples -->
719
+ <h1>{$content.title}</h1>
720
+
721
+ <!-- Renderizar conteúdo como um componente (requerido pelo editor) -->
722
+ <svelte:component this={$content.component} />
723
+ </div>
724
+ ```
725
+
726
+ ### Configuração do Git
727
+
728
+ É recomendado ignorar os arquivos gerados pelo Intlayer.
729
+
730
+ ```plaintext fileName=".gitignore"
731
+ # Ignorar os arquivos gerados pelo Intlayer
732
+ .intlayer
733
+ ```
734
+
735
+ ---
736
+
737
+ ### Ir Além
738
+
739
+ Para poder visualizar o seletor do editor intlayer, você terá que usar a sintaxe de componente no seu conteúdo intlayer.
740
+
741
+ ```svelte fileName="Component.svelte"
742
+ <script lang="ts">
743
+ import { useIntlayer } from "svelte-intlayer";
744
+
745
+ const content = useIntlayer("component");
746
+ </script>
747
+
748
+ <div>
749
+
750
+ <!-- Renderizar conteúdo como conteúdo simples -->
751
+ <h1>{$content.title}</h1>
752
+
753
+ <!-- Renderizar conteúdo como um componente (requerido pelo editor) -->
754
+ <svelte:component this={$content.component} />
755
+ </div>
756
+ ```
757
+
758
+ ### Configuração do Git
759
+
760
+ É recomendado ignorar os arquivos gerados pelo Intlayer.
761
+
762
+ ```plaintext fileName=".gitignore"
763
+ # Ignorar os arquivos gerados pelo Intlayer
764
+ .intlayer
765
+ ```
766
+
767
+ ---
768
+
769
+ ### Ir Além
770
+
771
+ - **Editor Visual**: Integre o [Editor Visual Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md) para editar traduções diretamente pela interface.
772
+ - **CMS**: Externalize o gerenciamento do seu conteúdo usando o [CMS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md).