@intlayer/docs 8.0.0 → 8.0.1-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/generated/docs.entry.cjs +160 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +160 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +8 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_adonisjs.md +394 -0
- package/docs/ar/intlayer_with_hono.md +223 -0
- package/docs/ar/intlayer_with_vite+preact.md +317 -675
- package/docs/ar/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ar/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ar/packages/adonis-intlayer/t.md +149 -0
- package/docs/ar/packages/hono-intlayer/exports.md +59 -0
- package/docs/ar/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ar/packages/hono-intlayer/t.md +268 -0
- package/docs/de/intlayer_with_adonisjs.md +392 -0
- package/docs/de/intlayer_with_hono.md +418 -0
- package/docs/de/intlayer_with_vite+preact.md +272 -632
- package/docs/de/packages/adonis-intlayer/exports.md +50 -0
- package/docs/de/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/de/packages/adonis-intlayer/t.md +149 -0
- package/docs/de/packages/hono-intlayer/exports.md +59 -0
- package/docs/de/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/de/packages/hono-intlayer/t.md +316 -0
- package/docs/en/index.md +8 -0
- package/docs/en/intlayer_with_adonisjs.md +388 -0
- package/docs/en/intlayer_with_hono.md +418 -0
- package/docs/en/intlayer_with_vite+preact.md +171 -556
- package/docs/en/introduction.md +1 -0
- package/docs/en/packages/adonis-intlayer/exports.md +50 -0
- package/docs/en/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/en/packages/adonis-intlayer/t.md +149 -0
- package/docs/en/packages/hono-intlayer/exports.md +59 -0
- package/docs/en/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/en/packages/hono-intlayer/t.md +316 -0
- package/docs/en-GB/intlayer_with_adonisjs.md +394 -0
- package/docs/en-GB/intlayer_with_hono.md +418 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +236 -583
- package/docs/en-GB/packages/adonis-intlayer/exports.md +50 -0
- package/docs/en-GB/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/en-GB/packages/adonis-intlayer/t.md +149 -0
- package/docs/en-GB/packages/hono-intlayer/exports.md +59 -0
- package/docs/en-GB/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/en-GB/packages/hono-intlayer/t.md +316 -0
- package/docs/es/intlayer_with_adonisjs.md +388 -0
- package/docs/es/intlayer_with_hono.md +418 -0
- package/docs/es/intlayer_with_vite+preact.md +286 -650
- package/docs/es/packages/adonis-intlayer/exports.md +50 -0
- package/docs/es/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/es/packages/adonis-intlayer/t.md +149 -0
- package/docs/es/packages/hono-intlayer/exports.md +59 -0
- package/docs/es/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/es/packages/hono-intlayer/t.md +316 -0
- package/docs/fr/intlayer_with_adonisjs.md +388 -0
- package/docs/fr/intlayer_with_hono.md +418 -0
- package/docs/fr/intlayer_with_vite+preact.md +274 -614
- package/docs/fr/packages/adonis-intlayer/exports.md +50 -0
- package/docs/fr/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/fr/packages/adonis-intlayer/t.md +149 -0
- package/docs/fr/packages/hono-intlayer/exports.md +59 -0
- package/docs/fr/packages/hono-intlayer/intlayer.md +59 -0
- package/docs/fr/packages/hono-intlayer/t.md +316 -0
- package/docs/hi/intlayer_with_adonisjs.md +394 -0
- package/docs/hi/intlayer_with_hono.md +227 -0
- package/docs/hi/intlayer_with_vite+preact.md +304 -680
- package/docs/hi/packages/adonis-intlayer/exports.md +50 -0
- package/docs/hi/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/hi/packages/adonis-intlayer/t.md +149 -0
- package/docs/hi/packages/hono-intlayer/exports.md +59 -0
- package/docs/hi/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/hi/packages/hono-intlayer/t.md +268 -0
- package/docs/id/intlayer_with_adonisjs.md +394 -0
- package/docs/id/intlayer_with_hono.md +227 -0
- package/docs/id/intlayer_with_vite+preact.md +297 -697
- package/docs/id/packages/adonis-intlayer/exports.md +50 -0
- package/docs/id/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/id/packages/adonis-intlayer/t.md +149 -0
- package/docs/id/packages/hono-intlayer/exports.md +59 -0
- package/docs/id/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/id/packages/hono-intlayer/t.md +268 -0
- package/docs/it/intlayer_with_adonisjs.md +394 -0
- package/docs/it/intlayer_with_hono.md +227 -0
- package/docs/it/intlayer_with_vite+preact.md +290 -659
- package/docs/it/packages/adonis-intlayer/exports.md +50 -0
- package/docs/it/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/it/packages/adonis-intlayer/t.md +149 -0
- package/docs/it/packages/hono-intlayer/exports.md +59 -0
- package/docs/it/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/it/packages/hono-intlayer/t.md +268 -0
- package/docs/ja/intlayer_with_adonisjs.md +394 -0
- package/docs/ja/intlayer_with_hono.md +227 -0
- package/docs/ja/intlayer_with_vite+preact.md +307 -662
- package/docs/ja/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ja/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ja/packages/adonis-intlayer/t.md +149 -0
- package/docs/ja/packages/hono-intlayer/exports.md +59 -0
- package/docs/ja/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ja/packages/hono-intlayer/t.md +268 -0
- package/docs/ko/intlayer_with_adonisjs.md +394 -0
- package/docs/ko/intlayer_with_hono.md +227 -0
- package/docs/ko/intlayer_with_vite+preact.md +303 -703
- package/docs/ko/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ko/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ko/packages/adonis-intlayer/t.md +149 -0
- package/docs/ko/packages/hono-intlayer/exports.md +59 -0
- package/docs/ko/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ko/packages/hono-intlayer/t.md +268 -0
- package/docs/pl/intlayer_with_adonisjs.md +394 -0
- package/docs/pl/intlayer_with_hono.md +227 -0
- package/docs/pl/intlayer_with_vite+preact.md +289 -690
- package/docs/pl/packages/adonis-intlayer/exports.md +50 -0
- package/docs/pl/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/pl/packages/adonis-intlayer/t.md +149 -0
- package/docs/pl/packages/hono-intlayer/exports.md +59 -0
- package/docs/pl/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/pl/packages/hono-intlayer/t.md +268 -0
- package/docs/pt/intlayer_with_adonisjs.md +394 -0
- package/docs/pt/intlayer_with_hono.md +227 -0
- package/docs/pt/intlayer_with_vite+preact.md +275 -637
- package/docs/pt/packages/adonis-intlayer/exports.md +50 -0
- package/docs/pt/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/pt/packages/adonis-intlayer/t.md +149 -0
- package/docs/pt/packages/hono-intlayer/exports.md +59 -0
- package/docs/pt/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/pt/packages/hono-intlayer/t.md +268 -0
- package/docs/ru/intlayer_with_adonisjs.md +393 -0
- package/docs/ru/intlayer_with_hono.md +223 -0
- package/docs/ru/intlayer_with_vite+preact.md +319 -683
- package/docs/ru/packages/adonis-intlayer/exports.md +50 -0
- package/docs/ru/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/ru/packages/adonis-intlayer/t.md +149 -0
- package/docs/ru/packages/hono-intlayer/exports.md +59 -0
- package/docs/ru/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/ru/packages/hono-intlayer/t.md +268 -0
- package/docs/tr/intlayer_with_adonisjs.md +394 -0
- package/docs/tr/intlayer_with_hono.md +227 -0
- package/docs/tr/intlayer_with_vite+preact.md +332 -665
- package/docs/tr/packages/adonis-intlayer/exports.md +50 -0
- package/docs/tr/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/tr/packages/adonis-intlayer/t.md +149 -0
- package/docs/tr/packages/hono-intlayer/exports.md +59 -0
- package/docs/tr/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/tr/packages/hono-intlayer/t.md +268 -0
- package/docs/uk/intlayer_with_adonisjs.md +394 -0
- package/docs/uk/intlayer_with_hono.md +227 -0
- package/docs/uk/intlayer_with_vite+preact.md +228 -626
- package/docs/uk/packages/adonis-intlayer/exports.md +50 -0
- package/docs/uk/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/uk/packages/adonis-intlayer/t.md +149 -0
- package/docs/uk/packages/hono-intlayer/exports.md +59 -0
- package/docs/uk/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/uk/packages/hono-intlayer/t.md +268 -0
- package/docs/vi/intlayer_with_adonisjs.md +394 -0
- package/docs/vi/intlayer_with_hono.md +227 -0
- package/docs/vi/intlayer_with_vite+preact.md +294 -679
- package/docs/vi/packages/adonis-intlayer/exports.md +50 -0
- package/docs/vi/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/vi/packages/adonis-intlayer/t.md +149 -0
- package/docs/vi/packages/hono-intlayer/exports.md +59 -0
- package/docs/vi/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/vi/packages/hono-intlayer/t.md +268 -0
- package/docs/zh/intlayer_with_adonisjs.md +393 -0
- package/docs/zh/intlayer_with_hono.md +418 -0
- package/docs/zh/intlayer_with_vite+preact.md +338 -743
- package/docs/zh/packages/adonis-intlayer/exports.md +50 -0
- package/docs/zh/packages/adonis-intlayer/intlayer.md +54 -0
- package/docs/zh/packages/adonis-intlayer/t.md +149 -0
- package/docs/zh/packages/hono-intlayer/exports.md +59 -0
- package/docs/zh/packages/hono-intlayer/intlayer.md +60 -0
- package/docs/zh/packages/hono-intlayer/t.md +294 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +160 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: AdonisJS i18n - Como traduzir sua aplicação AdonisJS – guia 2026
|
|
5
|
+
description: Descubra como tornar o seu backend AdonisJS multilíngue. Siga a documentação para internacionalizar (i18n) e traduzir.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internacionalização
|
|
8
|
+
- Documentação
|
|
9
|
+
- Intlayer
|
|
10
|
+
- AdonisJS
|
|
11
|
+
- JavaScript
|
|
12
|
+
- Backend
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- adonisjs
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-adonisjs-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 8.0.0
|
|
20
|
+
date: 2025-12-30
|
|
21
|
+
changes: Inicializar histórico
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Traduza seu backend AdonisJS usando Intlayer | Internacionalização (i18n)
|
|
25
|
+
|
|
26
|
+
O `adonis-intlayer` é um poderoso pacote de internacionalização (i18n) para aplicações AdonisJS, projetado para tornar seus serviços de backend acessíveis globalmente, fornecendo respostas localizadas com base nas preferências do cliente.
|
|
27
|
+
|
|
28
|
+
### Casos de Uso Práticos
|
|
29
|
+
|
|
30
|
+
- **Exibição de Erros do Backend no Idioma do Usuário**: Quando ocorre um erro, exibir mensagens no idioma nativo do usuário melhora a compreensão e reduz a frustração. Isso é especialmente útil para mensagens de erro dinâmicas que podem ser exibidas em componentes de front-end, como toasts ou modais.
|
|
31
|
+
|
|
32
|
+
- **Recuperação de Conteúdo Multilíngue**: Para aplicações que extraem conteúdo de um banco de dados, a internacionalização garante que você possa servir esse conteúdo em vários idiomas. Isso é crucial para plataformas como sites de e-commerce ou sistemas de gerenciamento de conteúdo que precisam exibir descrições de produtos, artigos e outros conteúdos no idioma preferido do usuário.
|
|
33
|
+
|
|
34
|
+
- **Envio de E-mails Multilíngues**: Seja para e-mails transacionais, campanhas de marketing ou notificações, o envio de e-mails no idioma do destinatário pode aumentar significativamente o engajamento e a eficácia.
|
|
35
|
+
|
|
36
|
+
- **Notificações Push Multilíngues**: Para aplicações móveis, o envio de notificações push no idioma preferido do usuário pode aumentar a interação e a retenção. Esse toque pessoal pode fazer com que as notificações pareçam mais relevantes e acionáveis.
|
|
37
|
+
|
|
38
|
+
- **Outras Comunicações**: Qualquer forma de comunicação do backend, como mensagens SMS, alertas do sistema ou atualizações da interface do usuário, beneficia-se de estar no idioma do usuário, garantindo clareza e melhorando a experiência geral do usuário.
|
|
39
|
+
|
|
40
|
+
Ao internacionalizar o backend, sua aplicação não apenas respeita as diferenças culturais, mas também se alinha melhor às necessidades do mercado global, tornando-se um passo fundamental para escalar seus serviços em todo o mundo.
|
|
41
|
+
|
|
42
|
+
## Primeiros Passos
|
|
43
|
+
|
|
44
|
+
### Instalação
|
|
45
|
+
|
|
46
|
+
Para começar a usar o `adonis-intlayer`, instale o pacote usando o npm:
|
|
47
|
+
|
|
48
|
+
```bash packageManager="npm"
|
|
49
|
+
npm install intlayer adonis-intlayer
|
|
50
|
+
npx intlayer init
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer adonis-intlayer
|
|
55
|
+
pnpm intlayer init
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```bash packageManager="yarn"
|
|
59
|
+
yarn add intlayer adonis-intlayer
|
|
60
|
+
yarn intlayer init
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```bash packageManager="bun"
|
|
64
|
+
bun add intlayer adonis-intlayer
|
|
65
|
+
bunx intlayer init
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Configuração
|
|
69
|
+
|
|
70
|
+
Configure as definições de internacionalização criando um `intlayer.config.ts` na raiz do seu projeto:
|
|
71
|
+
|
|
72
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
73
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
74
|
+
|
|
75
|
+
const config: IntlayerConfig = {
|
|
76
|
+
internationalization: {
|
|
77
|
+
locales: [
|
|
78
|
+
Locales.ENGLISH,
|
|
79
|
+
Locales.RUSSIAN,
|
|
80
|
+
Locales.JAPANESE,
|
|
81
|
+
Locales.FRENCH,
|
|
82
|
+
Locales.KOREAN,
|
|
83
|
+
Locales.CHINESE,
|
|
84
|
+
Locales.SPANISH,
|
|
85
|
+
Locales.GERMAN,
|
|
86
|
+
Locales.ARABIC,
|
|
87
|
+
Locales.ITALIAN,
|
|
88
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
89
|
+
Locales.PORTUGUESE,
|
|
90
|
+
Locales.HINDI,
|
|
91
|
+
Locales.TURKISH,
|
|
92
|
+
Locales.POLISH,
|
|
93
|
+
Locales.INDONESIAN,
|
|
94
|
+
Locales.VIETNAMESE,
|
|
95
|
+
Locales.UKRAINIAN,
|
|
96
|
+
],
|
|
97
|
+
defaultLocale: Locales.ENGLISH,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export default config;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
105
|
+
import { Locales } from "intlayer";
|
|
106
|
+
|
|
107
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
108
|
+
const config = {
|
|
109
|
+
internationalization: {
|
|
110
|
+
locales: [
|
|
111
|
+
Locales.ENGLISH,
|
|
112
|
+
Locales.RUSSIAN,
|
|
113
|
+
Locales.JAPANESE,
|
|
114
|
+
Locales.FRENCH,
|
|
115
|
+
Locales.KOREAN,
|
|
116
|
+
Locales.CHINESE,
|
|
117
|
+
Locales.SPANISH,
|
|
118
|
+
Locales.GERMAN,
|
|
119
|
+
Locales.ARABIC,
|
|
120
|
+
Locales.ITALIAN,
|
|
121
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
122
|
+
Locales.PORTUGUESE,
|
|
123
|
+
Locales.HINDI,
|
|
124
|
+
Locales.TURKISH,
|
|
125
|
+
Locales.POLISH,
|
|
126
|
+
Locales.INDONESIAN,
|
|
127
|
+
Locales.VIETNAMESE,
|
|
128
|
+
Locales.UKRAINIAN,
|
|
129
|
+
],
|
|
130
|
+
defaultLocale: Locales.ENGLISH,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export default config;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
138
|
+
const { Locales } = require("intlayer");
|
|
139
|
+
|
|
140
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
141
|
+
const config = {
|
|
142
|
+
internationalization: {
|
|
143
|
+
locales: [
|
|
144
|
+
Locales.ENGLISH,
|
|
145
|
+
Locales.RUSSIAN,
|
|
146
|
+
Locales.JAPANESE,
|
|
147
|
+
Locales.FRENCH,
|
|
148
|
+
Locales.KOREAN,
|
|
149
|
+
Locales.CHINESE,
|
|
150
|
+
Locales.SPANISH,
|
|
151
|
+
Locales.GERMAN,
|
|
152
|
+
Locales.ARABIC,
|
|
153
|
+
Locales.ITALIAN,
|
|
154
|
+
Locales.ENGLISH_UNITED_KINGDOM,
|
|
155
|
+
Locales.PORTUGUESE,
|
|
156
|
+
Locales.HINDI,
|
|
157
|
+
Locales.TURKISH,
|
|
158
|
+
Locales.POLISH,
|
|
159
|
+
Locales.INDONESIAN,
|
|
160
|
+
Locales.VIETNAMESE,
|
|
161
|
+
Locales.UKRAINIAN,
|
|
162
|
+
],
|
|
163
|
+
defaultLocale: Locales.ENGLISH,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
module.exports = config;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Declarar Seu Conteúdo
|
|
171
|
+
|
|
172
|
+
Crie e gerencie suas declarações de conteúdo para armazenar traduções:
|
|
173
|
+
|
|
174
|
+
```typescript fileName="app/index.content.ts" contentDeclarationFormat="typescript"
|
|
175
|
+
import { t, type Dictionary } from "intlayer";
|
|
176
|
+
|
|
177
|
+
const indexContent = {
|
|
178
|
+
key: "index",
|
|
179
|
+
content: {
|
|
180
|
+
exampleOfContent: t({
|
|
181
|
+
en: "Example of returned content in English",
|
|
182
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
183
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
184
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
185
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
} satisfies Dictionary;
|
|
189
|
+
|
|
190
|
+
export default indexContent;
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```javascript fileName="app/index.content.mjs" contentDeclarationFormat="esm"
|
|
194
|
+
import { t } from "intlayer";
|
|
195
|
+
|
|
196
|
+
/** @type {import('intlayer').Dictionary} */
|
|
197
|
+
const indexContent = {
|
|
198
|
+
key: "index",
|
|
199
|
+
content: {
|
|
200
|
+
exampleOfContent: t({
|
|
201
|
+
en: "Example of returned content in English",
|
|
202
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
203
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
204
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
205
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
206
|
+
}),
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export default indexContent;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
```javascript fileName="app/index.content.cjs" contentDeclarationFormat="commonjs"
|
|
214
|
+
const { t } = require("intlayer");
|
|
215
|
+
|
|
216
|
+
/** @type {import('intlayer').Dictionary} */
|
|
217
|
+
const indexContent = {
|
|
218
|
+
key: "index",
|
|
219
|
+
content: {
|
|
220
|
+
exampleOfContent: t({
|
|
221
|
+
en: "Example of returned content in English",
|
|
222
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
223
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
224
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
225
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
226
|
+
}),
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
module.exports = indexContent;
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```json fileName="app/index.content.json" contentDeclarationFormat="json"
|
|
234
|
+
{
|
|
235
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
236
|
+
"key": "index",
|
|
237
|
+
"content": {
|
|
238
|
+
"exampleOfContent": {
|
|
239
|
+
"nodeType": "translation",
|
|
240
|
+
"translation": {
|
|
241
|
+
"en": "Example of returned content in English",
|
|
242
|
+
"fr": "Exemple de contenu renvoyé en français",
|
|
243
|
+
"pt": "Exemplo de conteúdo retornado em português",
|
|
244
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
245
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
> Suas declarações de conteúdo podem ser definidas em qualquer lugar da sua aplicação, desde que estejam incluídas no diretório `contentDir` (por padrão, `./src` ou `./app`) e correspondam à extensão de arquivo de declaração de conteúdo (por padrão, `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
253
|
+
|
|
254
|
+
> 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).
|
|
255
|
+
|
|
256
|
+
### Configuração da Aplicação AdonisJS
|
|
257
|
+
|
|
258
|
+
Configure sua aplicação AdonisJS para usar o `adonis-intlayer`.
|
|
259
|
+
|
|
260
|
+
#### Registrar o middleware
|
|
261
|
+
|
|
262
|
+
Primeiro, você precisa registrar o middleware `intlayer` na sua aplicação.
|
|
263
|
+
|
|
264
|
+
```typescript fileName="start/kernel.ts"
|
|
265
|
+
router.use([() => import("adonis-intlayer/middleware")]);
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
#### Definir suas rotas
|
|
269
|
+
|
|
270
|
+
```typescript fileName="start/routes.ts"
|
|
271
|
+
import router from "@adonisjs/core/services/router";
|
|
272
|
+
import { t, getIntlayer, getDictionary } from "adonis-intlayer";
|
|
273
|
+
import indexContent from "../app/index.content";
|
|
274
|
+
|
|
275
|
+
router.get("/t_example", async () => {
|
|
276
|
+
return t({
|
|
277
|
+
en: "Example of returned content in English",
|
|
278
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
279
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
280
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
281
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
router.get("/getIntlayer_example", async () => {
|
|
286
|
+
return getIntlayer("index").exampleOfContent;
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
router.get("/getDictionary_example", async () => {
|
|
290
|
+
return getDictionary(indexContent).exampleOfContent;
|
|
291
|
+
});
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
#### Funções
|
|
295
|
+
|
|
296
|
+
O `adonis-intlayer` exporta várias funções para lidar com a internacionalização na sua aplicação:
|
|
297
|
+
|
|
298
|
+
- `t(content, locale?)`: Função básica de tradução.
|
|
299
|
+
- `getIntlayer(key, locale?)`: Recupera o conteúdo por chave dos seus dicionários.
|
|
300
|
+
- `getDictionary(dictionary, locale?)`: Recupera o conteúdo de um objeto de dicionário específico.
|
|
301
|
+
- `getLocale()`: Recupera a localidade atual do contexto da requisição.
|
|
302
|
+
|
|
303
|
+
#### Uso em Controllers
|
|
304
|
+
|
|
305
|
+
```typescript fileName="app/controllers/example_controller.ts"
|
|
306
|
+
import type { HttpContext } from "@adonisjs/core/http";
|
|
307
|
+
import { t } from "adonis-intlayer";
|
|
308
|
+
|
|
309
|
+
export default class ExampleController {
|
|
310
|
+
async index({ response }: HttpContext) {
|
|
311
|
+
return response.send(
|
|
312
|
+
t({
|
|
313
|
+
en: "Hello from controller",
|
|
314
|
+
fr: "Bonjour depuis le contrôleur",
|
|
315
|
+
pt: "Olá do controlador",
|
|
316
|
+
})
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Compatibilidade
|
|
323
|
+
|
|
324
|
+
O `adonis-intlayer` é totalmente compatível com:
|
|
325
|
+
|
|
326
|
+
- [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/index.md) para aplicações React
|
|
327
|
+
- [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/next-intlayer/index.md) para aplicações Next.js
|
|
328
|
+
- [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/vite-intlayer/index.md) para aplicações Vite
|
|
329
|
+
|
|
330
|
+
Também funciona perfeitamente com qualquer solução de internacionalização em vários ambientes, incluindo navegadores e requisições de API. Você pode personalizar o middleware para detectar a localidade por meio de cabeçalhos ou cookies:
|
|
331
|
+
|
|
332
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
333
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
334
|
+
|
|
335
|
+
const config: IntlayerConfig = {
|
|
336
|
+
// ... Outras opções de configuração
|
|
337
|
+
middleware: {
|
|
338
|
+
headerName: "my-locale-header",
|
|
339
|
+
cookieName: "my-locale-cookie",
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
export default config;
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Por padrão, o `adonis-intlayer` interpretará o cabeçalho `Accept-Language` para determinar o idioma preferido do cliente.
|
|
347
|
+
|
|
348
|
+
> Para mais informações sobre configuração e tópicos avançados, visite nossa [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
|
|
349
|
+
|
|
350
|
+
### Configurar TypeScript
|
|
351
|
+
|
|
352
|
+
O `adonis-intlayer` aproveita as robustas capacidades do TypeScript para aprimorar o processo de internacionalização. A tipagem estática do TypeScript garante que cada chave de tradução seja contabilizada, reduzindo o risco de traduções ausentes e melhorando a manutenibilidade.
|
|
353
|
+
|
|
354
|
+

|
|
355
|
+
|
|
356
|
+

|
|
357
|
+
|
|
358
|
+
Certifique-se de que os tipos autogerados (por padrão em ./types/intlayer.d.ts) estão incluídos no seu arquivo tsconfig.json.
|
|
359
|
+
|
|
360
|
+
```json5 fileName="tsconfig.json"
|
|
361
|
+
{
|
|
362
|
+
// ... Suas configurações de TypeScript existentes
|
|
363
|
+
"include": [
|
|
364
|
+
// ... Suas configurações de TypeScript existentes
|
|
365
|
+
".intlayer/**/*.ts", // Incluir os tipos autogerados
|
|
366
|
+
],
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Extensão para VS Code
|
|
371
|
+
|
|
372
|
+
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a **Extensão oficial do Intlayer para VS Code**.
|
|
373
|
+
|
|
374
|
+
[Instalar a partir do VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
375
|
+
|
|
376
|
+
Esta extensão oferece:
|
|
377
|
+
|
|
378
|
+
- **Autocompletar** para chaves de tradução.
|
|
379
|
+
- **Detecção de erros em tempo real** para traduções ausentes.
|
|
380
|
+
- **Visualizações inline** de conteúdo traduzido.
|
|
381
|
+
- **Ações rápidas** para criar e atualizar traduções facilmente.
|
|
382
|
+
|
|
383
|
+
Para mais detalhes sobre como usar a extensão, consulte a [documentação da Extensão do Intlayer para VS Code](https://intlayer.org/pt/doc/vs-code-extension).
|
|
384
|
+
|
|
385
|
+
### Configuração do Git
|
|
386
|
+
|
|
387
|
+
Recomenda-se ignorar os arquivos gerados pelo Intlayer. Isso permite que você evite commitá-los no seu repositório Git.
|
|
388
|
+
|
|
389
|
+
Para fazer isso, você pode adicionar as seguintes instruções ao seu arquivo `.gitignore`:
|
|
390
|
+
|
|
391
|
+
```plaintext fileName=".gitignore"
|
|
392
|
+
# Ignorar os arquivos gerados pelo Intlayer
|
|
393
|
+
.intlayer
|
|
394
|
+
```
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: i18n Hono - Como traduzir sua aplicação Hono – guia 2026
|
|
5
|
+
description: Descubra como tornar seu back-end Hono multilíngue. Siga a documentação para internacionalizar (i18n) e traduzi-lo.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internacionalização
|
|
8
|
+
- Documentação
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Hono
|
|
11
|
+
- JavaScript
|
|
12
|
+
- Back-end
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- hono
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-hono-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.5.9
|
|
20
|
+
date: 2025-12-30
|
|
21
|
+
changes: Adicionar comando init
|
|
22
|
+
- version: 5.5.10
|
|
23
|
+
date: 2025-06-29
|
|
24
|
+
changes: Inicialização do histórico
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Traduza seu site back-end Hono usando Intlayer | Internacionalização (i18n)
|
|
28
|
+
|
|
29
|
+
`hono-intlayer` é um poderoso middleware de internacionalização (i18n) para aplicações Hono, projetado para tornar seus serviços de back-end acessíveis globalmente, fornecendo respostas localizadas com base nas preferências do cliente.
|
|
30
|
+
|
|
31
|
+
### Casos de Uso Práticos
|
|
32
|
+
|
|
33
|
+
- **Exibindo Erros de Back-end no Idioma do Usuário**: Quando ocorre um erro, a exibição de mensagens no idioma nativo do usuário melhora a compreensão e reduz a frustração. Isso é especialmente útil para mensagens de erro dinâmicas que podem ser mostradas em componentes front-end como toasts ou modais.
|
|
34
|
+
|
|
35
|
+
- **Recuperando Conteúdo Multilíngue**: Para aplicações que extraem conteúdo de um banco de dados, a internacionalização garante que você possa servir esse conteúdo em vários idiomas. Isso é crucial para plataformas como sites de comércio eletrônico ou sistemas de gerenciamento de conteúdo que precisam exibir descrições de produtos, artigos e outros conteúdos no idioma de preferência do usuário.
|
|
36
|
+
|
|
37
|
+
- **Enviando E-mails Multilíngues**: Sejam e-mails transacionais, campanhas de marketing ou notificações, enviar e-mails no idioma do destinatário pode aumentar significativamente o engajamento e a eficácia.
|
|
38
|
+
|
|
39
|
+
- **Notificações Push Multilíngues**: Para aplicações móveis, enviar notificações push no idioma de preferência de um usuário pode melhorar a interação e a retenção. Esse toque pessoal pode fazer com que as notificações pareçam mais relevantes e acionáveis.
|
|
40
|
+
|
|
41
|
+
- **Outras Comunicações**: Qualquer forma de comunicação do back-end, como mensagens SMS, alertas do sistema ou atualizações da interface do usuário, beneficia-se de estar no idioma do usuário, garantindo clareza e aprimorando a experiência geral do usuário.
|
|
42
|
+
|
|
43
|
+
Ao internacionalizar o back-end, sua aplicação não apenas respeita as diferenças culturais, mas também se alinha melhor com as necessidades do mercado global, tornando-se um passo fundamental na expansão de seus serviços em todo o mundo.
|
|
44
|
+
|
|
45
|
+
## Primeiros Passos
|
|
46
|
+
|
|
47
|
+
### Instalação
|
|
48
|
+
|
|
49
|
+
Para começar a usar o `hono-intlayer`, instale o pacote usando o npm:
|
|
50
|
+
|
|
51
|
+
```bash packageManager="npm"
|
|
52
|
+
npm install intlayer hono-intlayer
|
|
53
|
+
npx intlayer init
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```bash packageManager="pnpm"
|
|
57
|
+
pnpm add intlayer hono-intlayer
|
|
58
|
+
pnpm intlayer init
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```bash packageManager="yarn"
|
|
62
|
+
yarn add intlayer hono-intlayer
|
|
63
|
+
yarn intlayer init
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash packageManager="bun"
|
|
67
|
+
bun add intlayer hono-intlayer
|
|
68
|
+
bunx intlayer init
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Configuração
|
|
72
|
+
|
|
73
|
+
Configure as definições de internacionalização criando um `intlayer.config.ts` na raiz do seu projeto:
|
|
74
|
+
|
|
75
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
76
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
77
|
+
|
|
78
|
+
const config: IntlayerConfig = {
|
|
79
|
+
internationalization: {
|
|
80
|
+
locales: [
|
|
81
|
+
Locales.ENGLISH,
|
|
82
|
+
Locales.FRENCH,
|
|
83
|
+
Locales.SPANISH_MEXICO,
|
|
84
|
+
Locales.SPANISH_SPAIN,
|
|
85
|
+
Locales.PORTUGUESE,
|
|
86
|
+
],
|
|
87
|
+
defaultLocale: Locales.ENGLISH,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export default config;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Declare Seu Conteúdo
|
|
95
|
+
|
|
96
|
+
Crie e gerencie suas declarações de conteúdo para armazenar traduções:
|
|
97
|
+
|
|
98
|
+
```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
|
|
99
|
+
import { t, type Dictionary } from "intlayer";
|
|
100
|
+
|
|
101
|
+
const indexContent = {
|
|
102
|
+
key: "index",
|
|
103
|
+
content: {
|
|
104
|
+
exampleOfContent: t({
|
|
105
|
+
en: "Example of returned content in English",
|
|
106
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
107
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
108
|
+
}),
|
|
109
|
+
},
|
|
110
|
+
} satisfies Dictionary;
|
|
111
|
+
|
|
112
|
+
export default indexContent;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
> Suas declarações de conteúdo podem ser definidas em qualquer lugar da sua aplicação, desde que sejam incluídas no diretório `contentDir` (por padrão, `./src`). E correspondam à extensão do arquivo de declaração de conteúdo (por padrão, `.content.{json,ts,tsx,js,jsx,mjs,cjs}`).
|
|
116
|
+
|
|
117
|
+
> 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).
|
|
118
|
+
|
|
119
|
+
### Configuração da Aplicação Hono
|
|
120
|
+
|
|
121
|
+
Configure sua aplicação Hono para usar o `hono-intlayer`:
|
|
122
|
+
|
|
123
|
+
```typescript fileName="src/index.ts" codeFormat="typescript"
|
|
124
|
+
import { Hono } from "hono";
|
|
125
|
+
import { intlayer, t, getDictionary, getIntlayer } from "hono-intlayer";
|
|
126
|
+
import dictionaryExample from "./index.content";
|
|
127
|
+
|
|
128
|
+
const app = new Hono();
|
|
129
|
+
|
|
130
|
+
// Carregar manipulador de solicitação de internacionalização
|
|
131
|
+
app.use("*", intlayer());
|
|
132
|
+
|
|
133
|
+
// Rotas
|
|
134
|
+
app.get("/t_example", (c) => {
|
|
135
|
+
return c.text(
|
|
136
|
+
t({
|
|
137
|
+
en: "Example of returned content in English",
|
|
138
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
139
|
+
pt: "Exemplo de conteúdo retornado em português",
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
app.get("/getIntlayer_example", (c) => {
|
|
145
|
+
return c.json(getIntlayer("index").exampleOfContent);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
app.get("/getDictionary_example", (c) => {
|
|
149
|
+
return c.json(getDictionary(dictionaryExample).exampleOfContent);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
export default app;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Compatibilidade
|
|
156
|
+
|
|
157
|
+
O `hono-intlayer` é totalmente compatível com:
|
|
158
|
+
|
|
159
|
+
- [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/index.md) para aplicações React
|
|
160
|
+
- [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/next-intlayer/index.md) para aplicações Next.js
|
|
161
|
+
- [`vite-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/vite-intlayer/index.md) para aplicações Vite
|
|
162
|
+
|
|
163
|
+
Ele também funciona perfeitamente com qualquer solução de internacionalização em vários ambientes, incluindo navegadores e solicitações de API. Você pode personalizar o middleware para detectar a localidade por meio de cabeçalhos ou cookies:
|
|
164
|
+
|
|
165
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
166
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
167
|
+
|
|
168
|
+
const config: IntlayerConfig = {
|
|
169
|
+
// ... Outras opções de configuração
|
|
170
|
+
middleware: {
|
|
171
|
+
headerName: "my-locale-header",
|
|
172
|
+
cookieName: "my-locale-cookie",
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export default config;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Por padrão, o `hono-intlayer` interpretará o cabeçalho `Accept-Language` para determinar o idioma de preferência do cliente.
|
|
180
|
+
|
|
181
|
+
> Para mais informações sobre configuração e tópicos avançados, visite nossa [documentação](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md).
|
|
182
|
+
|
|
183
|
+
### Configurar TypeScript
|
|
184
|
+
|
|
185
|
+
O `hono-intlayer` aproveita as capacidades robustas do TypeScript para aprimorar o processo de internacionalização. A tipagem estática do TypeScript garante que cada chave de tradução seja considerada, reduzindo o risco de traduções ausentes e melhorando a manutenibilidade.
|
|
186
|
+
|
|
187
|
+

|
|
188
|
+
|
|
189
|
+

|
|
190
|
+
|
|
191
|
+
Certifique-se de que os tipos gerados automaticamente (por padrão em ./types/intlayer.d.ts) estejam incluídos no seu arquivo tsconfig.json.
|
|
192
|
+
|
|
193
|
+
```json5 fileName="tsconfig.json"
|
|
194
|
+
{
|
|
195
|
+
// ... Suas configurações existentes do TypeScript
|
|
196
|
+
"include": [
|
|
197
|
+
// ... Suas configurações existentes do TypeScript
|
|
198
|
+
".intlayer/**/*.ts", // Incluir os tipos gerados automaticamente
|
|
199
|
+
],
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Extensão do VS Code
|
|
204
|
+
|
|
205
|
+
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a **Extensão oficial do Intlayer para VS Code**.
|
|
206
|
+
|
|
207
|
+
[Instalar a partir do VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
208
|
+
|
|
209
|
+
Esta extensão fornece:
|
|
210
|
+
|
|
211
|
+
- **Autocompletar** para chaves de tradução.
|
|
212
|
+
- **Detecção de erro em tempo real** para traduções ausentes.
|
|
213
|
+
- **Pré-visualizações in-line** de conteúdo traduzido.
|
|
214
|
+
- **Ações rápidas** para criar e atualizar traduções facilmente.
|
|
215
|
+
|
|
216
|
+
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).
|
|
217
|
+
|
|
218
|
+
### Configuração do Git
|
|
219
|
+
|
|
220
|
+
É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite evitar o commit deles no seu repositório Git.
|
|
221
|
+
|
|
222
|
+
Para fazer isso, você pode adicionar as seguintes instruções ao seu arquivo `.gitignore`:
|
|
223
|
+
|
|
224
|
+
```plaintext fileName=".gitignore"
|
|
225
|
+
# Ignorar os arquivos gerados pelo Intlayer
|
|
226
|
+
.intlayer
|
|
227
|
+
```
|