@intlayer/docs 6.1.6-canary.0 → 6.1.6
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/en/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -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/intlayer_with_angular.md +2 -2
- package/docs/ar/intlayer_with_astro.md +246 -0
- package/docs/ar/intlayer_with_create_react_app.md +3 -2
- package/docs/ar/intlayer_with_express.md +2 -2
- package/docs/ar/intlayer_with_nestjs.md +2 -2
- package/docs/ar/intlayer_with_nextjs_14.md +2 -2
- package/docs/ar/intlayer_with_nextjs_15.md +2 -2
- package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ar/intlayer_with_nuxt.md +2 -2
- package/docs/ar/intlayer_with_react_native+expo.md +11 -20
- package/docs/ar/intlayer_with_react_router_v7.md +195 -241
- package/docs/ar/intlayer_with_tanstack.md +198 -272
- package/docs/ar/intlayer_with_vite+preact.md +9 -9
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/de/intlayer_with_angular.md +2 -2
- package/docs/de/intlayer_with_astro.md +246 -0
- package/docs/de/intlayer_with_create_react_app.md +2 -2
- package/docs/de/intlayer_with_express.md +2 -2
- package/docs/de/intlayer_with_nestjs.md +2 -2
- package/docs/de/intlayer_with_nextjs_14.md +2 -2
- package/docs/de/intlayer_with_nextjs_15.md +2 -2
- package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/de/intlayer_with_nuxt.md +2 -2
- package/docs/de/intlayer_with_react_native+expo.md +11 -20
- package/docs/de/intlayer_with_react_router_v7.md +193 -242
- package/docs/de/intlayer_with_tanstack.md +194 -266
- package/docs/de/intlayer_with_vite+preact.md +9 -9
- package/docs/de/intlayer_with_vite+react.md +9 -9
- package/docs/de/intlayer_with_vite+vue.md +11 -11
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +1 -1
- package/docs/en/intlayer_cli.md +1 -1
- package/docs/en/intlayer_with_angular.md +4 -4
- package/docs/en/intlayer_with_astro.md +246 -0
- package/docs/en/intlayer_with_create_react_app.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +13 -4
- package/docs/en/intlayer_with_nextjs_15.md +13 -4
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/en/intlayer_with_nuxt.md +4 -4
- package/docs/en/intlayer_with_react_native+expo.md +46 -24
- package/docs/en/intlayer_with_react_router_v7.md +164 -211
- package/docs/en/intlayer_with_tanstack.md +166 -241
- package/docs/en/intlayer_with_vite+preact.md +12 -12
- package/docs/en/intlayer_with_vite+react.md +12 -12
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +12 -12
- package/docs/en/introduction.md +1 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/react-intlayer/useI18n.md +1 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/releases/v6.md +1 -0
- package/docs/en/roadmap.md +1 -1
- package/docs/en-GB/intlayer_with_angular.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +246 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
- package/docs/en-GB/intlayer_with_express.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
- package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/en-GB/intlayer_with_nuxt.md +2 -2
- package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
- package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
- package/docs/en-GB/intlayer_with_tanstack.md +174 -248
- package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
- package/docs/en-GB/intlayer_with_vite+react.md +9 -9
- package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
- package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/es/intlayer_with_angular.md +2 -2
- package/docs/es/intlayer_with_astro.md +246 -0
- package/docs/es/intlayer_with_create_react_app.md +3 -2
- package/docs/es/intlayer_with_express.md +2 -2
- package/docs/es/intlayer_with_nextjs_14.md +2 -2
- package/docs/es/intlayer_with_nextjs_15.md +2 -2
- package/docs/es/intlayer_with_react_native+expo.md +11 -20
- package/docs/es/intlayer_with_react_router_v7.md +188 -232
- package/docs/es/intlayer_with_tanstack.md +203 -273
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/intlayer_with_angular.md +2 -2
- package/docs/fr/intlayer_with_astro.md +246 -0
- package/docs/fr/intlayer_with_create_react_app.md +3 -2
- package/docs/fr/intlayer_with_express.md +2 -2
- package/docs/fr/intlayer_with_nestjs.md +2 -2
- package/docs/fr/intlayer_with_nextjs_14.md +2 -2
- package/docs/fr/intlayer_with_react_native+expo.md +11 -20
- package/docs/fr/intlayer_with_react_router_v7.md +188 -248
- package/docs/fr/intlayer_with_tanstack.md +192 -265
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/intlayer_cli.md +1 -4
- package/docs/hi/intlayer_with_angular.md +2 -2
- package/docs/hi/intlayer_with_astro.md +246 -0
- package/docs/hi/intlayer_with_create_react_app.md +2 -2
- package/docs/hi/intlayer_with_express.md +2 -2
- package/docs/hi/intlayer_with_nestjs.md +2 -2
- package/docs/hi/intlayer_with_nextjs_14.md +2 -2
- package/docs/hi/intlayer_with_nextjs_15.md +2 -2
- package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/hi/intlayer_with_nuxt.md +2 -2
- package/docs/hi/intlayer_with_react_native+expo.md +11 -20
- package/docs/hi/intlayer_with_react_router_v7.md +199 -243
- package/docs/hi/intlayer_with_tanstack.md +210 -285
- package/docs/hi/intlayer_with_vite+preact.md +9 -9
- package/docs/hi/intlayer_with_vite+react.md +9 -9
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +11 -11
- package/docs/it/intlayer_with_angular.md +2 -2
- package/docs/it/intlayer_with_astro.md +246 -0
- package/docs/it/intlayer_with_create_react_app.md +3 -2
- package/docs/it/intlayer_with_express.md +2 -2
- package/docs/it/intlayer_with_nestjs.md +2 -2
- package/docs/it/intlayer_with_nextjs_14.md +2 -2
- package/docs/it/intlayer_with_nextjs_15.md +2 -2
- package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/it/intlayer_with_nuxt.md +2 -2
- package/docs/it/intlayer_with_react_native+expo.md +11 -21
- package/docs/it/intlayer_with_react_router_v7.md +195 -242
- package/docs/it/intlayer_with_tanstack.md +203 -267
- package/docs/it/intlayer_with_vite+preact.md +9 -9
- package/docs/it/intlayer_with_vite+react.md +13 -11
- package/docs/it/intlayer_with_vite+vue.md +11 -11
- package/docs/ja/intlayer_with_angular.md +2 -2
- package/docs/ja/intlayer_with_astro.md +246 -0
- package/docs/ja/intlayer_with_create_react_app.md +3 -2
- package/docs/ja/intlayer_with_express.md +2 -2
- package/docs/ja/intlayer_with_nestjs.md +2 -2
- package/docs/ja/intlayer_with_nextjs_14.md +2 -2
- package/docs/ja/intlayer_with_nextjs_15.md +2 -2
- package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ja/intlayer_with_nuxt.md +2 -2
- package/docs/ja/intlayer_with_react_native+expo.md +18 -29
- package/docs/ja/intlayer_with_react_router_v7.md +204 -250
- package/docs/ja/intlayer_with_tanstack.md +218 -286
- package/docs/ja/intlayer_with_vite+preact.md +9 -9
- package/docs/ja/intlayer_with_vite+react.md +11 -11
- package/docs/ja/intlayer_with_vite+vue.md +11 -11
- package/docs/ko/intlayer_with_angular.md +2 -2
- package/docs/ko/intlayer_with_astro.md +246 -0
- package/docs/ko/intlayer_with_create_react_app.md +3 -2
- package/docs/ko/intlayer_with_express.md +2 -2
- package/docs/ko/intlayer_with_nestjs.md +2 -2
- package/docs/ko/intlayer_with_nextjs_14.md +2 -2
- package/docs/ko/intlayer_with_nextjs_15.md +2 -2
- package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ko/intlayer_with_nuxt.md +2 -2
- package/docs/ko/intlayer_with_react_native+expo.md +19 -28
- package/docs/ko/intlayer_with_react_router_v7.md +190 -244
- package/docs/ko/intlayer_with_tanstack.md +200 -270
- package/docs/ko/intlayer_with_vite+preact.md +9 -9
- package/docs/ko/intlayer_with_vite+react.md +9 -9
- package/docs/ko/intlayer_with_vite+vue.md +11 -11
- package/docs/pt/intlayer_with_angular.md +2 -2
- package/docs/pt/intlayer_with_astro.md +246 -0
- package/docs/pt/intlayer_with_create_react_app.md +3 -2
- package/docs/pt/intlayer_with_express.md +2 -2
- package/docs/pt/intlayer_with_nestjs.md +2 -2
- package/docs/pt/intlayer_with_nextjs_14.md +2 -2
- package/docs/pt/intlayer_with_nextjs_15.md +2 -2
- package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/pt/intlayer_with_nuxt.md +2 -2
- package/docs/pt/intlayer_with_react_native+expo.md +11 -20
- package/docs/pt/intlayer_with_react_router_v7.md +7 -13
- package/docs/pt/intlayer_with_tanstack.md +183 -258
- package/docs/pt/intlayer_with_vite+preact.md +9 -9
- package/docs/pt/intlayer_with_vite+react.md +9 -9
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/intlayer_with_angular.md +2 -2
- package/docs/ru/intlayer_with_astro.md +246 -0
- package/docs/ru/intlayer_with_create_react_app.md +3 -2
- package/docs/ru/intlayer_with_express.md +2 -2
- package/docs/ru/intlayer_with_nestjs.md +2 -2
- package/docs/ru/intlayer_with_nextjs_14.md +2 -2
- package/docs/ru/intlayer_with_nextjs_15.md +2 -2
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +2 -2
- package/docs/ru/intlayer_with_react_native+expo.md +11 -20
- package/docs/ru/intlayer_with_react_router_v7.md +192 -238
- package/docs/ru/intlayer_with_tanstack.md +197 -269
- package/docs/ru/intlayer_with_vite+preact.md +9 -9
- package/docs/ru/intlayer_with_vite+react.md +9 -9
- package/docs/ru/intlayer_with_vite+vue.md +11 -11
- package/docs/tr/how_works_intlayer.md +1 -1
- package/docs/tr/index.md +1 -1
- package/docs/tr/intlayer_cli.md +1 -1
- package/docs/tr/intlayer_with_angular.md +4 -4
- package/docs/tr/intlayer_with_astro.md +246 -0
- package/docs/tr/intlayer_with_create_react_app.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +2 -2
- package/docs/tr/intlayer_with_nextjs_14.md +2 -2
- package/docs/tr/intlayer_with_nextjs_15.md +4 -4
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/tr/intlayer_with_nuxt.md +4 -4
- package/docs/tr/intlayer_with_react_native+expo.md +12 -21
- package/docs/tr/intlayer_with_react_router_v7.md +222 -267
- package/docs/tr/intlayer_with_tanstack.md +400 -303
- package/docs/tr/intlayer_with_vite+preact.md +12 -12
- package/docs/tr/intlayer_with_vite+react.md +12 -12
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +12 -12
- package/docs/tr/introduction.md +1 -1
- package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
- package/docs/tr/roadmap.md +1 -1
- package/docs/zh/intlayer_with_angular.md +2 -2
- package/docs/zh/intlayer_with_astro.md +246 -0
- package/docs/zh/intlayer_with_create_react_app.md +3 -2
- package/docs/zh/intlayer_with_express.md +2 -2
- package/docs/zh/intlayer_with_nestjs.md +2 -2
- package/docs/zh/intlayer_with_nextjs_14.md +2 -2
- package/docs/zh/intlayer_with_nextjs_15.md +2 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/zh/intlayer_with_nuxt.md +2 -2
- package/docs/zh/intlayer_with_react_native+expo.md +19 -28
- package/docs/zh/intlayer_with_react_router_v7.md +200 -248
- package/docs/zh/intlayer_with_tanstack.md +208 -283
- package/docs/zh/intlayer_with_vite+preact.md +9 -9
- package/docs/zh/intlayer_with_vite+react.md +9 -9
- package/docs/zh/intlayer_with_vite+vue.md +9 -9
- package/package.json +11 -11
- package/src/generated/docs.entry.ts +16 -0
|
@@ -15,10 +15,8 @@ keywords:
|
|
|
15
15
|
slugs:
|
|
16
16
|
- doc
|
|
17
17
|
- environment
|
|
18
|
-
- vite-and-react
|
|
19
18
|
- tanstack-start
|
|
20
|
-
applicationTemplate: https://github.com/
|
|
21
|
-
author: AydinTheFirst
|
|
19
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
|
|
22
20
|
---
|
|
23
21
|
|
|
24
22
|
# Começando a Internacionalizar (i18n) com Intlayer e Tanstack Start
|
|
@@ -27,15 +25,15 @@ Este guia demonstra como integrar o **Intlayer** para uma internacionalização
|
|
|
27
25
|
|
|
28
26
|
## O que é o Intlayer?
|
|
29
27
|
|
|
30
|
-
**Intlayer** é uma biblioteca inovadora e
|
|
28
|
+
**Intlayer** é uma biblioteca inovadora e de código aberto para internacionalização (i18n) projetada para simplificar o suporte multilíngue em aplicações web modernas.
|
|
31
29
|
|
|
32
30
|
Com o Intlayer, você pode:
|
|
33
31
|
|
|
34
32
|
- **Gerenciar traduções facilmente** usando dicionários declarativos no nível do componente.
|
|
35
33
|
- **Localizar dinamicamente metadados**, rotas e conteúdo.
|
|
36
34
|
- **Garantir suporte a TypeScript** com tipos gerados automaticamente, melhorando o autocompletar e a detecção de erros.
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
35
|
+
- **Aproveitar recursos avançados**, como detecção e troca dinâmica de locale.
|
|
36
|
+
- **Ativar roteamento sensível ao locale** com o sistema de roteamento baseado em arquivos do Tanstack Start.
|
|
39
37
|
|
|
40
38
|
---
|
|
41
39
|
|
|
@@ -43,7 +41,7 @@ Com o Intlayer, você pode:
|
|
|
43
41
|
|
|
44
42
|
### Passo 1: Criar o Projeto
|
|
45
43
|
|
|
46
|
-
Comece criando um novo projeto TanStack Start seguindo o guia [
|
|
44
|
+
Comece criando um novo projeto TanStack Start seguindo o guia [Iniciar novo projeto](https://tanstack.com/start/latest/docs/framework/react/quick-start) no site do TanStack Start.
|
|
47
45
|
|
|
48
46
|
### Passo 2: Instalar os Pacotes do Intlayer
|
|
49
47
|
|
|
@@ -69,13 +67,13 @@ pnpm add vite-intlayer --save-dev
|
|
|
69
67
|
O pacote que integra o Intlayer com aplicações React. Ele fornece provedores de contexto e hooks para internacionalização em React.
|
|
70
68
|
|
|
71
69
|
- **vite-intlayer**
|
|
72
|
-
Inclui o plugin Vite para integrar o Intlayer com o [empacotador Vite](https://vite.dev/guide/why.html#why-bundle-for-production),
|
|
70
|
+
Inclui o plugin Vite para integrar o Intlayer com o [empacotador Vite](https://vite.dev/guide/why.html#why-bundle-for-production), assim como middleware para detectar o locale preferido do usuário, gerenciar cookies e lidar com redirecionamento de URLs.
|
|
73
71
|
|
|
74
72
|
### Passo 3: Configuração do seu projeto
|
|
75
73
|
|
|
76
74
|
Crie um arquivo de configuração para configurar os idiomas da sua aplicação:
|
|
77
75
|
|
|
78
|
-
```typescript fileName="intlayer.config.ts"
|
|
76
|
+
```typescript fileName="intlayer.config.ts"
|
|
79
77
|
import type { IntlayerConfig } from "intlayer";
|
|
80
78
|
|
|
81
79
|
import { Locales } from "intlayer";
|
|
@@ -83,90 +81,40 @@ import { Locales } from "intlayer";
|
|
|
83
81
|
const config: IntlayerConfig = {
|
|
84
82
|
internationalization: {
|
|
85
83
|
defaultLocale: Locales.ENGLISH,
|
|
86
|
-
locales: [
|
|
87
|
-
Locales.ENGLISH,
|
|
88
|
-
Locales.FRENCH,
|
|
89
|
-
Locales.SPANISH,
|
|
90
|
-
// Seus outros idiomas
|
|
91
|
-
],
|
|
84
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
92
85
|
},
|
|
93
86
|
};
|
|
94
87
|
|
|
95
88
|
export default config;
|
|
96
89
|
```
|
|
97
90
|
|
|
98
|
-
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
99
|
-
import { Locales } from "intlayer";
|
|
100
|
-
|
|
101
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
102
|
-
const config = {
|
|
103
|
-
internationalization: {
|
|
104
|
-
defaultLocale: Locales.ENGLISH,
|
|
105
|
-
locales: [
|
|
106
|
-
Locales.ENGLISH,
|
|
107
|
-
Locales.FRENCH,
|
|
108
|
-
Locales.SPANISH,
|
|
109
|
-
// Seus outros idiomas
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export default config;
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
118
|
-
const { Locales } = require("intlayer");
|
|
119
|
-
|
|
120
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
121
|
-
const config = {
|
|
122
|
-
internationalization: {
|
|
123
|
-
defaultLocale: Locales.ENGLISH,
|
|
124
|
-
locales: [
|
|
125
|
-
Locales.ENGLISH,
|
|
126
|
-
Locales.FRENCH,
|
|
127
|
-
Locales.SPANISH,
|
|
128
|
-
// Seus outros idiomas
|
|
129
|
-
],
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
module.exports = config;
|
|
134
|
-
```
|
|
135
|
-
|
|
136
91
|
> Através deste arquivo de configuração, você pode configurar URLs localizadas, redirecionamento de middleware, nomes de cookies, a localização e extensão das suas declarações de conteúdo, desabilitar logs do Intlayer no console, e muito mais. Para uma lista completa dos parâmetros disponíveis, consulte a [documentação de configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
|
|
137
92
|
|
|
138
93
|
### Passo 4: Integre o Intlayer na sua Configuração do Vite
|
|
139
94
|
|
|
140
95
|
Adicione o plugin intlayer na sua configuração:
|
|
141
96
|
|
|
142
|
-
```typescript fileName="vite.config.ts"
|
|
97
|
+
```typescript fileName="vite.config.ts"
|
|
143
98
|
import { reactRouter } from "@react-router/dev/vite";
|
|
144
99
|
import { defineConfig } from "vite";
|
|
145
|
-
import {
|
|
100
|
+
import { intlayer } from "vite-intlayer";
|
|
146
101
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
147
102
|
|
|
148
103
|
export default defineConfig({
|
|
149
|
-
plugins: [
|
|
150
|
-
reactRouter(),
|
|
151
|
-
tsconfigPaths(),
|
|
152
|
-
intlayer(),
|
|
153
|
-
intlayerMiddlewarePlugin(),
|
|
154
|
-
],
|
|
104
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
155
105
|
});
|
|
156
106
|
```
|
|
157
107
|
|
|
158
|
-
> O plugin `intlayer()`
|
|
108
|
+
> O plugin `intlayer()` para Vite é usado para integrar o Intlayer com o Vite. Ele garante a construção dos arquivos de declaração de conteúdo e os monitora no modo de desenvolvimento. Define as variáveis de ambiente do Intlayer dentro da aplicação Vite. Além disso, fornece aliases para otimizar o desempenho.
|
|
159
109
|
|
|
160
110
|
### Passo 5: Crie Componentes de Layout
|
|
161
111
|
|
|
162
|
-
Configure seu layout raiz e layouts específicos
|
|
112
|
+
Configure seu layout raiz e layouts específicos para cada localidade:
|
|
163
113
|
|
|
164
114
|
#### Layout Raiz
|
|
165
115
|
|
|
166
|
-
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
167
|
-
// src/routes/{-$locale}/route.tsx
|
|
116
|
+
```tsx fileName="src/routes/{-$locale}/route.tsx"
|
|
168
117
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
169
|
-
import { configuration } from "intlayer";
|
|
170
118
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
171
119
|
|
|
172
120
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
|
|
@@ -176,10 +124,11 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
176
124
|
});
|
|
177
125
|
|
|
178
126
|
function LayoutComponent() {
|
|
127
|
+
const { defaultLocale } = useLocale();
|
|
179
128
|
const { locale } = Route.useParams();
|
|
180
129
|
|
|
181
130
|
return (
|
|
182
|
-
<IntlayerProvider locale={
|
|
131
|
+
<IntlayerProvider locale={defaultLocale}>
|
|
183
132
|
<Outlet />
|
|
184
133
|
</IntlayerProvider>
|
|
185
134
|
);
|
|
@@ -190,7 +139,7 @@ function LayoutComponent() {
|
|
|
190
139
|
|
|
191
140
|
Crie e gerencie suas declarações de conteúdo para armazenar traduções:
|
|
192
141
|
|
|
193
|
-
```tsx fileName="src/contents/page.content.ts"
|
|
142
|
+
```tsx fileName="src/contents/page.content.ts"
|
|
194
143
|
import type { Dictionary } from "intlayer";
|
|
195
144
|
|
|
196
145
|
import { t } from "intlayer";
|
|
@@ -199,30 +148,31 @@ const appContent = {
|
|
|
199
148
|
content: {
|
|
200
149
|
links: {
|
|
201
150
|
about: t({
|
|
151
|
+
pt: "Sobre",
|
|
202
152
|
en: "About",
|
|
203
153
|
es: "Acerca de",
|
|
204
154
|
fr: "À propos",
|
|
205
155
|
}),
|
|
206
156
|
home: t({
|
|
157
|
+
pt: "Início",
|
|
207
158
|
en: "Home",
|
|
208
159
|
es: "Inicio",
|
|
209
160
|
fr: "Accueil",
|
|
210
|
-
pt: "Início",
|
|
211
161
|
}),
|
|
212
162
|
},
|
|
213
163
|
meta: {
|
|
214
164
|
description: t({
|
|
165
|
+
pt: "Este é um exemplo de uso do Intlayer com TanStack Router",
|
|
215
166
|
en: "This is an example of using Intlayer with TanStack Router",
|
|
216
167
|
es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
|
|
217
168
|
fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
|
|
218
|
-
pt: "Este é um exemplo de uso do Intlayer com TanStack Router",
|
|
219
169
|
}),
|
|
220
170
|
},
|
|
221
171
|
title: t({
|
|
172
|
+
pt: "Bem-vindo ao Intlayer + TanStack Router",
|
|
222
173
|
en: "Welcome to Intlayer + TanStack Router",
|
|
223
174
|
es: "Bienvenido a Intlayer + TanStack Router",
|
|
224
175
|
fr: "Bienvenue à Intlayer + TanStack Router",
|
|
225
|
-
pt: "Bem-vindo ao Intlayer + TanStack Router",
|
|
226
176
|
}),
|
|
227
177
|
},
|
|
228
178
|
key: "app",
|
|
@@ -235,63 +185,103 @@ export default appContent;
|
|
|
235
185
|
|
|
236
186
|
> Para mais detalhes, consulte a [documentação de declaração de conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/get_started.md).
|
|
237
187
|
|
|
238
|
-
### Passo 7:
|
|
188
|
+
### Passo 7: Crie Componentes e Hooks Sensíveis ao Locale
|
|
239
189
|
|
|
240
190
|
Crie um componente `LocalizedLink` para navegação sensível ao locale:
|
|
241
191
|
|
|
242
|
-
```tsx fileName="src/components/localized-link.tsx"
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
import { Link, type
|
|
246
|
-
import { getLocalizedUrl } from "intlayer";
|
|
192
|
+
```tsx fileName="src/components/localized-link.tsx"
|
|
193
|
+
import type { FC } from "react";
|
|
194
|
+
|
|
195
|
+
import { Link, type LinkComponentProps } from "@tanstack/react-router";
|
|
247
196
|
import { useLocale } from "react-intlayer";
|
|
248
197
|
|
|
198
|
+
export const LOCALE_ROUTE = "{-$locale}" as const;
|
|
199
|
+
|
|
200
|
+
// Utilitário principal
|
|
201
|
+
export type RemoveLocaleParam<T> = T extends string
|
|
202
|
+
? RemoveLocaleFromString<T>
|
|
203
|
+
: T;
|
|
204
|
+
|
|
205
|
+
export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
|
|
206
|
+
|
|
207
|
+
type CollapseDoubleSlashes<S extends string> =
|
|
208
|
+
S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
|
|
209
|
+
|
|
249
210
|
type LocalizedLinkProps = {
|
|
250
|
-
to
|
|
251
|
-
} & Omit<
|
|
211
|
+
to?: To;
|
|
212
|
+
} & Omit<LinkComponentProps, "to">;
|
|
252
213
|
|
|
253
|
-
|
|
254
|
-
|
|
214
|
+
// Auxiliares
|
|
215
|
+
type RemoveAll<
|
|
216
|
+
S extends string,
|
|
217
|
+
Sub extends string,
|
|
218
|
+
> = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
|
|
255
219
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
220
|
+
type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
|
|
221
|
+
RemoveAll<S, typeof LOCALE_ROUTE>
|
|
222
|
+
>;
|
|
259
223
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
: getLocalizedUrl(props.to, locale);
|
|
224
|
+
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
|
|
225
|
+
const { locale } = useLocale();
|
|
263
226
|
|
|
264
|
-
return
|
|
265
|
-
|
|
227
|
+
return (
|
|
228
|
+
<Link
|
|
229
|
+
{...props}
|
|
230
|
+
params={{
|
|
231
|
+
locale,
|
|
232
|
+
...(typeof props?.params === "object" ? props?.params : {}),
|
|
233
|
+
}}
|
|
234
|
+
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
|
|
235
|
+
/>
|
|
236
|
+
);
|
|
237
|
+
};
|
|
266
238
|
```
|
|
267
239
|
|
|
268
|
-
|
|
240
|
+
Este componente tem dois objetivos:
|
|
269
241
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
// eslint-disable-next-line no-restricted-imports
|
|
273
|
-
import { NavigateOptions, useNavigate } from "@tanstack/react-router";
|
|
274
|
-
import { getLocalizedUrl } from "intlayer";
|
|
275
|
-
import { useLocale } from "react-intlayer";
|
|
242
|
+
- Remover o prefixo `{-$locale}` desnecessário da URL.
|
|
243
|
+
- Injetar o parâmetro de locale na URL para garantir que o usuário seja redirecionado diretamente para a rota localizada.
|
|
276
244
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
245
|
+
Então, podemos criar um hook `useLocalizedNavigate` para navegação programática:
|
|
246
|
+
|
|
247
|
+
```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
|
|
248
|
+
import { useLocale } from "react-intlayer";
|
|
249
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
250
|
+
import { LOCALE_ROUTE } from "@/components/localized-link";
|
|
251
|
+
import type { FileRouteTypes } from "@/routeTree.gen";
|
|
280
252
|
|
|
281
253
|
export const useLocalizedNavigate = () => {
|
|
282
254
|
const navigate = useNavigate();
|
|
255
|
+
|
|
283
256
|
const { locale } = useLocale();
|
|
284
257
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
258
|
+
type StripLocalePrefix<T extends string> = T extends
|
|
259
|
+
| `/${typeof LOCALE_ROUTE}`
|
|
260
|
+
| `/${typeof LOCALE_ROUTE}/`
|
|
261
|
+
? "/"
|
|
262
|
+
: T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
|
|
263
|
+
? `/${Rest}`
|
|
264
|
+
: never;
|
|
265
|
+
|
|
266
|
+
type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
|
|
267
|
+
|
|
268
|
+
interface LocalizedNavigate {
|
|
269
|
+
(to: LocalizedTo): ReturnType<typeof navigate>;
|
|
270
|
+
(
|
|
271
|
+
opts: { to: LocalizedTo } & Record<string, unknown>
|
|
272
|
+
): ReturnType<typeof navigate>;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const localizedNavigate: LocalizedNavigate = (args: any) => {
|
|
276
|
+
if (typeof args === "string") {
|
|
277
|
+
return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const { to, ...rest } = args;
|
|
288
281
|
|
|
289
|
-
|
|
290
|
-
const to = isExternal(options.to)
|
|
291
|
-
? options.to
|
|
292
|
-
: getLocalizedUrl(options.to, locale);
|
|
282
|
+
const localedTo = `/${LOCALE_ROUTE}${to}` as any;
|
|
293
283
|
|
|
294
|
-
navigate({
|
|
284
|
+
return navigate({ to: localedTo, params: { locale, ...rest } as any });
|
|
295
285
|
};
|
|
296
286
|
|
|
297
287
|
return localizedNavigate;
|
|
@@ -302,23 +292,9 @@ export const useLocalizedNavigate = () => {
|
|
|
302
292
|
|
|
303
293
|
Acesse seus dicionários de conteúdo em toda a sua aplicação:
|
|
304
294
|
|
|
305
|
-
#### Página de Redirecionamento Raiz
|
|
306
|
-
|
|
307
|
-
```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
|
|
308
|
-
// src/routes/page.tsx
|
|
309
|
-
import { useLocale } from "react-intlayer";
|
|
310
|
-
import { Navigate } from "react-router";
|
|
311
|
-
|
|
312
|
-
export default function Page() {
|
|
313
|
-
const { locale } = useLocale();
|
|
314
|
-
|
|
315
|
-
return <Navigate replace to={locale} />;
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
295
|
#### Página Inicial Localizada
|
|
320
296
|
|
|
321
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
297
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
322
298
|
import { createFileRoute } from "@tanstack/react-router";
|
|
323
299
|
import { getIntlayer } from "intlayer";
|
|
324
300
|
import { useIntlayer } from "react-intlayer";
|
|
@@ -347,16 +323,15 @@ function RouteComponent() {
|
|
|
347
323
|
const navigate = useLocalizedNavigate();
|
|
348
324
|
|
|
349
325
|
return (
|
|
350
|
-
<div
|
|
351
|
-
<div
|
|
326
|
+
<div>
|
|
327
|
+
<div>
|
|
352
328
|
{content.title}
|
|
353
329
|
<LocaleSwitcher />
|
|
354
|
-
<div
|
|
355
|
-
<a href="/">Índice</a>
|
|
330
|
+
<div>
|
|
356
331
|
<LocalizedLink to="/">{content.links.home}</LocalizedLink>
|
|
357
332
|
<LocalizedLink to="/about">{content.links.about}</LocalizedLink>
|
|
358
333
|
</div>
|
|
359
|
-
<div
|
|
334
|
+
<div>
|
|
360
335
|
<button onClick={() => navigate({ to: "/" })}>
|
|
361
336
|
{content.links.home}
|
|
362
337
|
</button>
|
|
@@ -376,48 +351,56 @@ function RouteComponent() {
|
|
|
376
351
|
|
|
377
352
|
Crie um componente para permitir que os usuários mudem de idioma:
|
|
378
353
|
|
|
379
|
-
```tsx fileName="src/components/locale-switcher.tsx"
|
|
354
|
+
```tsx fileName="src/components/locale-switcher.tsx"
|
|
355
|
+
import type { FC } from "react";
|
|
356
|
+
|
|
380
357
|
import { useLocation } from "@tanstack/react-router";
|
|
381
|
-
import {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
const {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
const { availableLocales, locale, setLocale } = useLocale({
|
|
394
|
-
onLocaleChange: (newLocale) => {
|
|
395
|
-
const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
|
|
396
|
-
location.replace(pathWithLocale);
|
|
397
|
-
},
|
|
398
|
-
});
|
|
358
|
+
import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
|
|
359
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
360
|
+
|
|
361
|
+
import { LocalizedLink, To } from "./localized-link";
|
|
362
|
+
|
|
363
|
+
export const LocaleSwitcher: FC = () => {
|
|
364
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
365
|
+
const { pathname } = useLocation();
|
|
366
|
+
|
|
367
|
+
const { availableLocales, locale } = useLocale();
|
|
368
|
+
|
|
369
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
399
370
|
|
|
400
371
|
return (
|
|
401
|
-
<
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
372
|
+
<ol>
|
|
373
|
+
{availableLocales.map((localeEl) => (
|
|
374
|
+
<li key={localeEl}>
|
|
375
|
+
<LocalizedLink
|
|
376
|
+
aria-current={localeEl === locale ? "page" : undefined}
|
|
377
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
|
|
378
|
+
onClick={() => setLocaleCookie(localeEl)}
|
|
379
|
+
params={{ locale: localeEl }}
|
|
380
|
+
to={pathWithoutLocale as To}
|
|
381
|
+
>
|
|
382
|
+
<span>
|
|
383
|
+
{/* Local - ex. FR */}
|
|
384
|
+
{localeItem}
|
|
385
|
+
</span>
|
|
386
|
+
<span>
|
|
387
|
+
{/* Idioma na sua própria Localização - ex. Français */}
|
|
388
|
+
{getLocaleName(localeItem, locale)}
|
|
389
|
+
</span>
|
|
390
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
391
|
+
{/* Idioma na Localização atual - ex. Francés com a localização atual definida para Locales.SPANISH */}
|
|
392
|
+
{getLocaleName(localeItem)}
|
|
393
|
+
</span>
|
|
394
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
395
|
+
{/* Idioma em Inglês - ex. French */}
|
|
396
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
397
|
+
</span>
|
|
398
|
+
</LocalizedLink>
|
|
399
|
+
</li>
|
|
417
400
|
))}
|
|
418
|
-
</
|
|
401
|
+
</ol>
|
|
419
402
|
);
|
|
420
|
-
}
|
|
403
|
+
};
|
|
421
404
|
```
|
|
422
405
|
|
|
423
406
|
> Para saber mais sobre o hook `useLocale`, consulte a [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useLocale.md).
|
|
@@ -426,7 +409,7 @@ export default function LocaleSwitcher() {
|
|
|
426
409
|
|
|
427
410
|
Crie um hook para gerenciar os atributos lang e dir do HTML:
|
|
428
411
|
|
|
429
|
-
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
412
|
+
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
|
|
430
413
|
// src/hooks/useI18nHTMLAttributes.tsx
|
|
431
414
|
import { getHTMLTextDir } from "intlayer";
|
|
432
415
|
import { useEffect } from "react";
|
|
@@ -444,9 +427,8 @@ export const useI18nHTMLAttributes = () => {
|
|
|
444
427
|
|
|
445
428
|
Então use-o no seu componente raiz:
|
|
446
429
|
|
|
447
|
-
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
430
|
+
```tsx fileName="src/routes/{-$locale}/index.tsx"
|
|
448
431
|
import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
|
|
449
|
-
import { configuration } from "intlayer";
|
|
450
432
|
import { IntlayerProvider, useLocale } from "react-intlayer";
|
|
451
433
|
|
|
452
434
|
import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // importar o hook
|
|
@@ -456,69 +438,70 @@ export const Route = createFileRoute("/{-$locale}")({
|
|
|
456
438
|
});
|
|
457
439
|
|
|
458
440
|
function LayoutComponent() {
|
|
459
|
-
useI18nHTMLAttributes(); //
|
|
441
|
+
useI18nHTMLAttributes(); // adicionar esta linha
|
|
460
442
|
|
|
443
|
+
const { defaultLocale } = useLocale();
|
|
461
444
|
const { locale } = Route.useParams();
|
|
462
445
|
|
|
463
446
|
return (
|
|
464
|
-
<IntlayerProvider locale={locale}>
|
|
447
|
+
<IntlayerProvider locale={locale ?? defaultLocale}>
|
|
465
448
|
<Outlet />
|
|
466
449
|
</IntlayerProvider>
|
|
467
450
|
);
|
|
468
451
|
}
|
|
469
452
|
```
|
|
470
453
|
|
|
471
|
-
|
|
454
|
+
---
|
|
472
455
|
|
|
473
|
-
|
|
456
|
+
### Passo 11: Adicionar middleware (Opcional)
|
|
474
457
|
|
|
475
|
-
|
|
476
|
-
# Construir os dicionários do Intlayer
|
|
477
|
-
npm run intlayer:build
|
|
458
|
+
Você também pode usar o `intlayerMiddleware` para adicionar roteamento do lado do servidor à sua aplicação. Este plugin detectará automaticamente o idioma atual com base na URL e definirá o cookie de idioma apropriado. Se nenhum idioma for especificado, o plugin determinará o idioma mais adequado com base nas preferências de idioma do navegador do usuário. Se nenhum idioma for detectado, ele redirecionará para o idioma padrão.
|
|
478
459
|
|
|
479
|
-
|
|
480
|
-
npm run dev
|
|
481
|
-
```
|
|
460
|
+
> Observe que, para usar o `intlayerMiddleware` em produção, você precisa mover o pacote `vite-intlayer` de `devDependencies` para `dependencies`.
|
|
482
461
|
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
|
|
462
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
463
|
+
import { reactRouter } from "@react-router/dev/vite";
|
|
464
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
465
|
+
import { defineConfig } from "vite";
|
|
466
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
467
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
486
468
|
|
|
487
|
-
|
|
488
|
-
|
|
469
|
+
export default defineConfig({
|
|
470
|
+
plugins: [
|
|
471
|
+
tailwindcss(),
|
|
472
|
+
reactRouter(),
|
|
473
|
+
tsconfigPaths(),
|
|
474
|
+
intlayer(),
|
|
475
|
+
intlayerMiddleware(),
|
|
476
|
+
],
|
|
477
|
+
});
|
|
489
478
|
```
|
|
490
479
|
|
|
491
|
-
|
|
492
|
-
# Construir os dicionários do Intlayer
|
|
493
|
-
yarn intlayer:build
|
|
494
|
-
|
|
495
|
-
# Iniciar o servidor de desenvolvimento
|
|
496
|
-
yarn dev
|
|
497
|
-
```
|
|
480
|
+
---
|
|
498
481
|
|
|
499
482
|
### Passo 12: Configurar o TypeScript (Opcional)
|
|
500
483
|
|
|
501
|
-
Intlayer
|
|
484
|
+
O Intlayer utiliza a ampliação de módulos para aproveitar os benefícios do TypeScript e fortalecer sua base de código.
|
|
502
485
|
|
|
503
486
|
Certifique-se de que sua configuração do TypeScript inclua os tipos gerados automaticamente:
|
|
504
487
|
|
|
505
488
|
```json5 fileName="tsconfig.json"
|
|
506
489
|
{
|
|
507
|
-
|
|
508
|
-
// ... suas configurações existentes do TypeScript
|
|
509
|
-
},
|
|
490
|
+
// ... suas configurações existentes
|
|
510
491
|
include: [
|
|
511
492
|
// ... seus includes existentes
|
|
512
|
-
".intlayer/**/*.ts", //
|
|
493
|
+
".intlayer/**/*.ts", // Incluir os tipos gerados automaticamente
|
|
513
494
|
],
|
|
514
495
|
}
|
|
515
496
|
```
|
|
516
497
|
|
|
498
|
+
---
|
|
499
|
+
|
|
517
500
|
### Configuração do Git
|
|
518
501
|
|
|
519
|
-
É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite que
|
|
502
|
+
É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite evitar que eles sejam comitados no seu repositório Git.
|
|
520
503
|
|
|
521
|
-
Para isso, você pode adicionar as seguintes instruções
|
|
504
|
+
Para isso, você pode adicionar as seguintes instruções ao seu arquivo `.gitignore`:
|
|
522
505
|
|
|
523
506
|
```plaintext fileName=".gitignore"
|
|
524
507
|
# Ignorar os arquivos gerados pelo Intlayer
|
|
@@ -527,67 +510,9 @@ Para isso, você pode adicionar as seguintes instruções no seu arquivo `.gitig
|
|
|
527
510
|
|
|
528
511
|
---
|
|
529
512
|
|
|
530
|
-
### Passo 13: Criar Redirecionamento (Opcional)
|
|
531
|
-
|
|
532
|
-
```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
|
|
533
|
-
function LayoutComponent() {
|
|
534
|
-
useI18nHTMLAttributes();
|
|
535
|
-
|
|
536
|
-
const { locale } = Route.useParams();
|
|
537
|
-
const { locale: selectedLocale } = useLocale();
|
|
538
|
-
const { defaultLocale } = configuration.internationalization;
|
|
539
|
-
const { prefixDefault } = configuration.middleware;
|
|
540
|
-
|
|
541
|
-
// Redireciona para o locale padrão se nenhum locale estiver presente na URL quando prefixDefault for verdadeiro
|
|
542
|
-
if (selectedLocale === defaultLocale && !locale && prefixDefault) {
|
|
543
|
-
return <Navigate replace to={defaultLocale} />;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
// Redireciona para o locale selecionado se o locale na URL não corresponder ao locale selecionado
|
|
547
|
-
if (selectedLocale !== defaultLocale && !locale) {
|
|
548
|
-
return <Navigate replace to={selectedLocale} />;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
return (
|
|
552
|
-
<IntlayerProvider locale={locale}>
|
|
553
|
-
<Outlet />
|
|
554
|
-
</IntlayerProvider>
|
|
555
|
-
);
|
|
556
|
-
}
|
|
557
|
-
```
|
|
558
|
-
|
|
559
|
-
## Implantação em Produção
|
|
560
|
-
|
|
561
|
-
Ao implantar sua aplicação:
|
|
562
|
-
|
|
563
|
-
1. **Compile sua aplicação:**
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
npm run build
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
2. **Compile os dicionários do Intlayer:**
|
|
570
|
-
|
|
571
|
-
```bash
|
|
572
|
-
npm run intlayer:build
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
3. **Mova `vite-intlayer` para as dependências** se estiver usando middleware em produção:
|
|
576
|
-
```bash
|
|
577
|
-
npm install vite-intlayer --save
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
Sua aplicação agora suportará:
|
|
581
|
-
|
|
582
|
-
- **Estrutura de URL**: `/en`, `/en/about`, `/tr`, `/tr/about`
|
|
583
|
-
- **Detecção automática de localidade** baseada nas preferências do navegador
|
|
584
|
-
- **Roteamento consciente da localidade** com Tanstack Start
|
|
585
|
-
- **Suporte a TypeScript** com tipos gerados automaticamente
|
|
586
|
-
- **Renderização no servidor** com tratamento adequado da localidade
|
|
587
|
-
|
|
588
513
|
## Extensão VS Code
|
|
589
514
|
|
|
590
|
-
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a
|
|
515
|
+
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a **Extensão oficial Intlayer para VS Code**.
|
|
591
516
|
|
|
592
517
|
[Instalar no VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
593
518
|
|
|
@@ -598,13 +523,13 @@ Esta extensão oferece:
|
|
|
598
523
|
- **Visualizações inline** do conteúdo traduzido.
|
|
599
524
|
- **Ações rápidas** para criar e atualizar traduções facilmente.
|
|
600
525
|
|
|
601
|
-
Para mais detalhes sobre como usar a extensão, consulte a [documentação da
|
|
526
|
+
Para mais detalhes sobre como usar a extensão, consulte a [documentação da Extensão Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
602
527
|
|
|
603
528
|
---
|
|
604
529
|
|
|
605
530
|
## Ir Além
|
|
606
531
|
|
|
607
|
-
Para ir
|
|
532
|
+
Para ir além, você pode implementar o [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_visual_editor.md) ou externalizar seu conteúdo usando o [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md).
|
|
608
533
|
|
|
609
534
|
---
|
|
610
535
|
|
|
@@ -613,7 +538,7 @@ Para ir mais longe, você pode implementar o [editor visual](https://github.com/
|
|
|
613
538
|
- [Documentação do Intlayer](https://intlayer.org)
|
|
614
539
|
- [Documentação do Tanstack Start](https://reactrouter.com/)
|
|
615
540
|
- [Hook useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useIntlayer.md)
|
|
616
|
-
- [
|
|
541
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/useLocale.md)
|
|
617
542
|
- [Declaração de Conteúdo](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/get_started.md)
|
|
618
543
|
- [Configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md)
|
|
619
544
|
|