@intlayer/docs 7.5.9 → 7.5.11

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 (196) hide show
  1. package/README.md +9 -2
  2. package/dist/cjs/generated/docs.entry.cjs +57 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +57 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +3 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/cli/ci.md +137 -0
  9. package/docs/ar/cli/index.md +7 -1
  10. package/docs/ar/cli/list.md +39 -2
  11. package/docs/ar/cli/list_projects.md +131 -0
  12. package/docs/ar/cli/push.md +1 -1
  13. package/docs/ar/configuration.md +3 -3
  14. package/docs/ar/interest_of_intlayer.md +1 -1
  15. package/docs/ar/intlayer_CMS.md +25 -5
  16. package/docs/ar/intlayer_with_express.md +1 -0
  17. package/docs/ar/intlayer_with_fastify.md +516 -0
  18. package/docs/ar/readme.md +1 -1
  19. package/docs/de/cli/ci.md +137 -0
  20. package/docs/de/cli/index.md +7 -1
  21. package/docs/de/cli/list.md +39 -2
  22. package/docs/de/cli/list_projects.md +130 -0
  23. package/docs/de/cli/push.md +1 -1
  24. package/docs/de/configuration.md +3 -3
  25. package/docs/de/interest_of_intlayer.md +1 -1
  26. package/docs/de/intlayer_CMS.md +25 -5
  27. package/docs/de/intlayer_with_express.md +1 -0
  28. package/docs/de/intlayer_with_fastify.md +449 -0
  29. package/docs/de/readme.md +1 -1
  30. package/docs/en/cli/ci.md +137 -0
  31. package/docs/en/cli/index.md +14 -1
  32. package/docs/en/cli/list.md +39 -2
  33. package/docs/en/cli/list_projects.md +128 -0
  34. package/docs/en/cli/push.md +1 -1
  35. package/docs/en/configuration.md +3 -3
  36. package/docs/en/interest_of_intlayer.md +2 -2
  37. package/docs/en/intlayer_CMS.md +25 -5
  38. package/docs/en/intlayer_with_express.md +1 -0
  39. package/docs/en/intlayer_with_fastify.md +439 -0
  40. package/docs/en/readme.md +3 -1
  41. package/docs/en-GB/cli/ci.md +137 -0
  42. package/docs/en-GB/cli/index.md +7 -1
  43. package/docs/en-GB/cli/list.md +39 -2
  44. package/docs/en-GB/cli/list_projects.md +130 -0
  45. package/docs/en-GB/cli/push.md +1 -1
  46. package/docs/en-GB/configuration.md +3 -3
  47. package/docs/en-GB/interest_of_intlayer.md +1 -1
  48. package/docs/en-GB/intlayer_CMS.md +25 -5
  49. package/docs/en-GB/intlayer_with_express.md +1 -0
  50. package/docs/en-GB/intlayer_with_fastify.md +445 -0
  51. package/docs/en-GB/readme.md +3 -1
  52. package/docs/es/cli/ci.md +137 -0
  53. package/docs/es/cli/index.md +7 -1
  54. package/docs/es/cli/list.md +39 -2
  55. package/docs/es/cli/list_projects.md +130 -0
  56. package/docs/es/cli/push.md +1 -1
  57. package/docs/es/configuration.md +3 -3
  58. package/docs/es/interest_of_intlayer.md +1 -1
  59. package/docs/es/intlayer_CMS.md +25 -5
  60. package/docs/es/intlayer_with_express.md +1 -0
  61. package/docs/es/intlayer_with_fastify.md +480 -0
  62. package/docs/es/readme.md +1 -1
  63. package/docs/fr/cli/ci.md +137 -0
  64. package/docs/fr/cli/index.md +7 -1
  65. package/docs/fr/cli/list.md +39 -2
  66. package/docs/fr/cli/list_projects.md +131 -0
  67. package/docs/fr/cli/push.md +1 -1
  68. package/docs/fr/configuration.md +3 -3
  69. package/docs/fr/interest_of_intlayer.md +1 -1
  70. package/docs/fr/intlayer_CMS.md +25 -5
  71. package/docs/fr/intlayer_with_express.md +1 -0
  72. package/docs/fr/intlayer_with_fastify.md +439 -0
  73. package/docs/fr/readme.md +1 -1
  74. package/docs/hi/cli/ci.md +137 -0
  75. package/docs/hi/cli/index.md +7 -1
  76. package/docs/hi/cli/list.md +38 -1
  77. package/docs/hi/cli/list_projects.md +130 -0
  78. package/docs/hi/cli/push.md +1 -1
  79. package/docs/hi/configuration.md +3 -3
  80. package/docs/hi/interest_of_intlayer.md +1 -1
  81. package/docs/hi/intlayer_CMS.md +25 -5
  82. package/docs/hi/intlayer_with_express.md +1 -0
  83. package/docs/hi/intlayer_with_fastify.md +540 -0
  84. package/docs/hi/readme.md +1 -1
  85. package/docs/id/cli/ci.md +137 -0
  86. package/docs/id/cli/index.md +7 -1
  87. package/docs/id/cli/list.md +38 -1
  88. package/docs/id/cli/list_projects.md +128 -0
  89. package/docs/id/cli/push.md +1 -1
  90. package/docs/id/configuration.md +3 -3
  91. package/docs/id/interest_of_intlayer.md +1 -1
  92. package/docs/id/intlayer_CMS.md +25 -5
  93. package/docs/id/intlayer_with_express.md +1 -0
  94. package/docs/id/intlayer_with_fastify.md +470 -0
  95. package/docs/id/readme.md +1 -1
  96. package/docs/it/cli/ci.md +137 -0
  97. package/docs/it/cli/index.md +7 -1
  98. package/docs/it/cli/list.md +39 -2
  99. package/docs/it/cli/list_projects.md +130 -0
  100. package/docs/it/cli/push.md +1 -1
  101. package/docs/it/configuration.md +3 -3
  102. package/docs/it/interest_of_intlayer.md +1 -1
  103. package/docs/it/intlayer_CMS.md +25 -5
  104. package/docs/it/intlayer_with_express.md +1 -0
  105. package/docs/it/intlayer_with_fastify.md +445 -0
  106. package/docs/it/readme.md +1 -1
  107. package/docs/ja/cli/ci.md +137 -0
  108. package/docs/ja/cli/index.md +7 -1
  109. package/docs/ja/cli/list.md +38 -1
  110. package/docs/ja/cli/list_projects.md +136 -0
  111. package/docs/ja/cli/push.md +1 -1
  112. package/docs/ja/configuration.md +3 -3
  113. package/docs/ja/interest_of_intlayer.md +1 -1
  114. package/docs/ja/intlayer_CMS.md +25 -5
  115. package/docs/ja/intlayer_with_express.md +1 -0
  116. package/docs/ja/intlayer_with_fastify.md +516 -0
  117. package/docs/ja/readme.md +1 -1
  118. package/docs/ko/cli/ci.md +137 -0
  119. package/docs/ko/cli/index.md +7 -1
  120. package/docs/ko/cli/list.md +38 -1
  121. package/docs/ko/cli/list_projects.md +128 -0
  122. package/docs/ko/cli/push.md +1 -1
  123. package/docs/ko/configuration.md +3 -3
  124. package/docs/ko/interest_of_intlayer.md +1 -1
  125. package/docs/ko/intlayer_CMS.md +25 -5
  126. package/docs/ko/intlayer_with_express.md +1 -0
  127. package/docs/ko/intlayer_with_fastify.md +463 -0
  128. package/docs/ko/readme.md +1 -1
  129. package/docs/pl/cli/ci.md +137 -0
  130. package/docs/pl/cli/index.md +7 -1
  131. package/docs/pl/cli/list.md +39 -2
  132. package/docs/pl/cli/list_projects.md +130 -0
  133. package/docs/pl/cli/push.md +1 -1
  134. package/docs/pl/configuration.md +3 -3
  135. package/docs/pl/interest_of_intlayer.md +1 -1
  136. package/docs/pl/intlayer_CMS.md +25 -5
  137. package/docs/pl/intlayer_with_express.md +1 -0
  138. package/docs/pl/intlayer_with_fastify.md +457 -0
  139. package/docs/pl/readme.md +1 -1
  140. package/docs/pt/cli/ci.md +137 -0
  141. package/docs/pt/cli/index.md +7 -1
  142. package/docs/pt/cli/list.md +39 -2
  143. package/docs/pt/cli/list_projects.md +134 -0
  144. package/docs/pt/cli/push.md +1 -1
  145. package/docs/pt/configuration.md +3 -3
  146. package/docs/pt/interest_of_intlayer.md +1 -1
  147. package/docs/pt/intlayer_CMS.md +25 -5
  148. package/docs/pt/intlayer_with_express.md +1 -0
  149. package/docs/pt/intlayer_with_fastify.md +502 -0
  150. package/docs/pt/readme.md +1 -1
  151. package/docs/ru/cli/ci.md +137 -0
  152. package/docs/ru/cli/index.md +7 -1
  153. package/docs/ru/cli/list.md +39 -2
  154. package/docs/ru/cli/list_projects.md +130 -0
  155. package/docs/ru/cli/push.md +1 -1
  156. package/docs/ru/configuration.md +3 -3
  157. package/docs/ru/interest_of_intlayer.md +1 -1
  158. package/docs/ru/intlayer_CMS.md +25 -5
  159. package/docs/ru/intlayer_with_express.md +1 -0
  160. package/docs/ru/intlayer_with_fastify.md +468 -0
  161. package/docs/ru/readme.md +1 -1
  162. package/docs/tr/cli/ci.md +137 -0
  163. package/docs/tr/cli/index.md +7 -1
  164. package/docs/tr/cli/list.md +39 -2
  165. package/docs/tr/cli/list_projects.md +134 -0
  166. package/docs/tr/cli/push.md +1 -1
  167. package/docs/tr/configuration.md +3 -3
  168. package/docs/tr/interest_of_intlayer.md +1 -1
  169. package/docs/tr/intlayer_CMS.md +25 -5
  170. package/docs/tr/intlayer_with_express.md +1 -0
  171. package/docs/tr/intlayer_with_fastify.md +471 -0
  172. package/docs/tr/readme.md +1 -1
  173. package/docs/vi/cli/ci.md +137 -0
  174. package/docs/vi/cli/index.md +7 -1
  175. package/docs/vi/cli/list.md +38 -1
  176. package/docs/vi/cli/list_projects.md +130 -0
  177. package/docs/vi/cli/push.md +1 -1
  178. package/docs/vi/configuration.md +3 -3
  179. package/docs/vi/interest_of_intlayer.md +1 -1
  180. package/docs/vi/intlayer_CMS.md +25 -5
  181. package/docs/vi/intlayer_with_express.md +1 -0
  182. package/docs/vi/intlayer_with_fastify.md +490 -0
  183. package/docs/vi/readme.md +1 -1
  184. package/docs/zh/cli/ci.md +137 -0
  185. package/docs/zh/cli/index.md +7 -1
  186. package/docs/zh/cli/list.md +38 -1
  187. package/docs/zh/cli/list_projects.md +130 -0
  188. package/docs/zh/cli/push.md +1 -1
  189. package/docs/zh/configuration.md +3 -3
  190. package/docs/zh/interest_of_intlayer.md +1 -1
  191. package/docs/zh/intlayer_CMS.md +25 -5
  192. package/docs/zh/intlayer_with_express.md +1 -0
  193. package/docs/zh/intlayer_with_fastify.md +451 -0
  194. package/docs/zh/readme.md +1 -1
  195. package/package.json +6 -6
  196. package/src/generated/docs.entry.ts +57 -0
@@ -0,0 +1,502 @@
1
+ ---
2
+ createdAt: 2025-12-30
3
+ updatedAt: 2025-12-30
4
+ title: Como traduzir seu backend Fastify – guia i18n 2026
5
+ description: Descubra como tornar seu backend Fastify multilíngue. Siga a documentação para internacionalizar (i18n) e traduzir.
6
+ keywords:
7
+ - Internacionalização
8
+ - Documentação
9
+ - Intlayer
10
+ - Fastify
11
+ - JavaScript
12
+ - Backend
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - fastify
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-fastify-template
18
+ history:
19
+ - version: 7.6.0
20
+ date: 2025-12-31
21
+ changes: Adicionar comando init
22
+ - version: 7.6.0
23
+ date: 2025-12-31
24
+ changes: Histórico inicial
25
+ ---
26
+
27
+ # Traduza seu backend Fastify usando o Intlayer | Internacionalização (i18n)
28
+
29
+ `fastify-intlayer` é um plugin poderoso de internacionalização (i18n) para aplicações Fastify, concebido para tornar seus serviços backend acessíveis globalmente, fornecendo respostas localizadas com base nas preferências do cliente.
30
+
31
+ ### Casos de uso práticos
32
+
33
+ - **Exibir erros do backend no idioma do usuário**: Quando um erro ocorre, 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 front-end, como toasts ou modals.
34
+ - **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 fornecer esse conteúdo em vários idiomas. Isso é crucial para plataformas como sites de e-commerce ou sistemas de gestão de conteúdo que precisam exibir descrições de produtos, artigos e outros conteúdos no idioma preferido pelo usuário.
35
+ - **Envio de E-mails Multilíngues**: Seja para 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.
36
+ - **Notificações Push Multilíngues**: Para aplicações móveis, enviar 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
+ - **Outras Comunicações**: Qualquer forma de comunicação proveniente do backend, como mensagens SMS, alertas do sistema ou atualizações da interface do usuário, se beneficia por estar no idioma do usuário, garantindo clareza e melhorando a experiência geral do usuário.
38
+
39
+ 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-chave para escalar seus serviços mundialmente.
40
+
41
+ ## Primeiros Passos
42
+
43
+ ### Instalação
44
+
45
+ Para começar a usar `fastify-intlayer`, instale o pacote usando npm:
46
+
47
+ ```bash packageManager="npm"
48
+ npm install intlayer fastify-intlayer
49
+ npx intlayer init
50
+
51
+ ```
52
+
53
+ ```bash packageManager="pnpm"
54
+ pnpm add intlayer fastify-intlayer
55
+ pnpm intlayer init
56
+
57
+ ```
58
+
59
+ ```bash packageManager="yarn"
60
+ yarn add intlayer fastify-intlayer
61
+ yarn intlayer init
62
+
63
+ ```
64
+
65
+ ```bash packageManager="bun"
66
+ bun add intlayer fastify-intlayer
67
+ bunx intlayer init
68
+
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
+ ],
86
+ defaultLocale: Locales.ENGLISH,
87
+ },
88
+ };
89
+
90
+ export default config;
91
+ ```
92
+
93
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
94
+ import { Locales } from "intlayer";
95
+
96
+ /** @type {import('intlayer').IntlayerConfig} */
97
+ const config = {
98
+ internationalization: {
99
+ locales: [
100
+ Locales.ENGLISH,
101
+ Locales.FRENCH,
102
+ Locales.SPANISH_MEXICO,
103
+ Locales.SPANISH_SPAIN,
104
+ ],
105
+ defaultLocale: Locales.ENGLISH,
106
+ },
107
+ };
108
+
109
+ export default config;
110
+ ```
111
+
112
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
113
+ const { Locales } = require("intlayer");
114
+
115
+ /** @type {import('intlayer').IntlayerConfig} */
116
+ const config = {
117
+ internationalization: {
118
+ locales: [
119
+ Locales.ENGLISH,
120
+ Locales.FRENCH,
121
+ Locales.SPANISH_MEXICO,
122
+ Locales.SPANISH_SPAIN,
123
+ ],
124
+ defaultLocale: Locales.ENGLISH,
125
+ },
126
+ };
127
+
128
+ export default config;
129
+ ```
130
+
131
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
132
+ import { Locales } from "intlayer";
133
+
134
+ /** @type {import('intlayer').IntlayerConfig} */
135
+ const config = {
136
+ internationalization: {
137
+ locales: [
138
+ Locales.ENGLISH,
139
+ Locales.FRENCH,
140
+ Locales.SPANISH_MEXICO,
141
+ Locales.SPANISH_SPAIN,
142
+ ],
143
+ defaultLocale: Locales.ENGLISH,
144
+ },
145
+ };
146
+
147
+ export default config;
148
+ ```
149
+
150
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
151
+ const { Locales } = require("intlayer");
152
+
153
+ /** @type {import('intlayer').IntlayerConfig} */
154
+ const config = {
155
+ internationalization: {
156
+ locales: [
157
+ Locales.ENGLISH,
158
+ Locales.FRENCH,
159
+ Locales.SPANISH_MEXICO,
160
+ Locales.SPANISH_SPAIN,
161
+ ],
162
+ defaultLocale: Locales.ENGLISH,
163
+ },
164
+ };
165
+
166
+ module.exports = config;
167
+ ```
168
+
169
+ ### Declare o seu conteúdo
170
+
171
+ Crie e gerencie as suas declarações de conteúdo para armazenar traduções:
172
+
173
+ ```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
174
+ import { t, type Dictionary } from "intlayer";
175
+
176
+ const indexContent = {
177
+ key: "index",
178
+ content: {
179
+ exampleOfContent: t({
180
+ pt: "Exemplo de conteúdo retornado em português",
181
+ en: "Example of returned content in English",
182
+ fr: "Exemple de contenu renvoyé en français",
183
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
184
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
185
+ }),
186
+ },
187
+ } satisfies Dictionary;
188
+
189
+ export default indexContent;
190
+ ```
191
+
192
+ ```javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
193
+ import { t } from "intlayer";
194
+
195
+ /** @type {import('intlayer').Dictionary} */
196
+ const indexContent = {
197
+ key: "index",
198
+ content: {
199
+ exampleOfContent: t({
200
+ pt: "Exemplo de conteúdo retornado em inglês",
201
+ en: "Example of returned content in English",
202
+ fr: "Exemple de contenu renvoyé en français",
203
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
204
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
205
+ }),
206
+ },
207
+ };
208
+
209
+ export default indexContent;
210
+ ```
211
+
212
+ ```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
213
+ const { t } = require("intlayer");
214
+
215
+ /** @type {import('intlayer').Dictionary} */
216
+ const indexContent = {
217
+ key: "index",
218
+ content: {
219
+ exampleOfContent: t({
220
+ pt: "Exemplo de conteúdo retornado em inglês",
221
+ en: "Example of returned content in English",
222
+ fr: "Exemple de contenu renvoyé en français",
223
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
224
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
225
+ }),
226
+ },
227
+ };
228
+
229
+ module.exports = indexContent;
230
+ ```
231
+
232
+ ```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
233
+ const { t } = require("intlayer");
234
+
235
+ /** @type {import('intlayer').Dictionary} */
236
+ const indexContent = {
237
+ key: "index",
238
+ content: {
239
+ exampleOfContent: t({
240
+ pt: "Exemplo de conteúdo retornado em português",
241
+ en: "Example of returned content in English",
242
+ fr: "Exemple de contenu renvoyé en français",
243
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
244
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
245
+ }),
246
+ },
247
+ };
248
+
249
+ module.exports = indexContent;
250
+ ```
251
+
252
+ ```json fileName="src/index.content.json" contentDeclarationFormat="json"
253
+ {
254
+ "$schema": "https://intlayer.org/schema.json",
255
+ "key": "index",
256
+ "content": {
257
+ "exampleOfContent": {
258
+ "nodeType": "translation",
259
+ "translation": {
260
+ "pt": "Exemplo de conteúdo retornado em português",
261
+ "en": "Example of returned content in English",
262
+ "fr": "Exemple de contenu renvoyé en français",
263
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
264
+ "es-MX": "Ejemplo de contenido devuelto en español (México)"
265
+ }
266
+ }
267
+ }
268
+ }
269
+ ```
270
+
271
+ > As 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`). E correspondam à extensão de ficheiro de declaração de conteúdo (por padrão, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
272
+
273
+ > 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).
274
+
275
+ ### Configuração da aplicação Fastify
276
+
277
+ Configure sua aplicação Fastify para usar `fastify-intlayer`:
278
+
279
+ ```typescript fileName="src/index.ts" codeFormat="typescript"
280
+ import Fastify from "fastify";
281
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
282
+ import dictionaryExample from "./index.content";
283
+
284
+ const fastify = Fastify({ logger: true });
285
+
286
+ // Carregar plugin de internacionalização
287
+ await fastify.register(intlayer);
288
+
289
+ // Rotas
290
+ fastify.get("/t_example", async (_req, reply) => {
291
+ return t({
292
+ pt: "Exemplo de conteúdo retornado em inglês",
293
+ en: "Example of returned content in English",
294
+ fr: "Exemple de contenu renvoyé en français",
295
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
296
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
297
+ });
298
+ });
299
+
300
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
301
+ return getIntlayer("index").exampleOfContent;
302
+ });
303
+
304
+ fastify.get("/getDictionary_example", async (_req, reply) => {
305
+ return getDictionary(dictionaryExample).exampleOfContent;
306
+ });
307
+
308
+ // Iniciar servidor
309
+ const start = async () => {
310
+ try {
311
+ await fastify.listen({ port: 3000 });
312
+ } catch (err) {
313
+ fastify.log.error(err);
314
+ process.exit(1);
315
+ }
316
+ };
317
+
318
+ start();
319
+ ```
320
+
321
+ ```javascript fileName="src/index.mjs" codeFormat="esm"
322
+ import Fastify from "fastify";
323
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
324
+ import dictionaryExample from "./index.content";
325
+
326
+ const fastify = Fastify({ logger: true });
327
+
328
+ // Carregar plugin de internacionalização
329
+ await fastify.register(intlayer);
330
+
331
+ // Rotas
332
+ fastify.get("/t_example", async (_req, reply) => {
333
+ return t({
334
+ en: "Example of returned content in English",
335
+ fr: "Exemple de contenu renvoyé en français",
336
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
337
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
338
+ });
339
+ });
340
+
341
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
342
+ return getIntlayer("index").exampleOfContent;
343
+ });
344
+
345
+ fastify.get("/getDictionary_example", async (_req, reply) => {
346
+ return getDictionary(dictionaryExample).exampleOfContent;
347
+ });
348
+
349
+ // Iniciar o servidor
350
+ const start = async () => {
351
+ try {
352
+ await fastify.listen({ port: 3000 });
353
+ } catch (err) {
354
+ fastify.log.error(err);
355
+ process.exit(1);
356
+ }
357
+ };
358
+
359
+ start();
360
+ ```
361
+
362
+ ```javascript fileName="src/index.cjs" codeFormat="commonjs"
363
+ const Fastify = require("fastify");
364
+ const { intlayer, t, getDictionary, getIntlayer } = require("fastify-intlayer");
365
+ const dictionaryExample = require("./index.content");
366
+
367
+ const fastify = Fastify({ logger: true });
368
+
369
+ // Início do wrapper do servidor para async/await
370
+ const start = async () => {
371
+ try {
372
+ // Carrega o plugin de internacionalização
373
+ await fastify.register(intlayer);
374
+
375
+ // Rotas
376
+ fastify.get("/t_example", async (_req, reply) => {
377
+ return t({
378
+ pt: "Exemplo de conteúdo retornado em inglês",
379
+ en: "Example of returned content in English",
380
+ fr: "Exemple de contenu renvoyé en français",
381
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
382
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
383
+ });
384
+ });
385
+
386
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
387
+ return getIntlayer("index").exampleOfContent;
388
+ });
389
+
390
+ fastify.get("/getDictionary_example", async (_req, reply) => {
391
+ return getDictionary(dictionaryExample).exampleOfContent;
392
+ });
393
+
394
+ await fastify.listen({ port: 3000 });
395
+ } catch (err) {
396
+ fastify.log.error(err);
397
+ process.exit(1);
398
+ }
399
+ };
400
+
401
+ start();
402
+ ```
403
+
404
+ ### Compatibilidade
405
+
406
+ `fastify-intlayer` é totalmente compatível com:
407
+
408
+ - [`react-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/react-intlayer/index.md)>) para aplicações React
409
+ - [`next-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/next-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/next-intlayer/index.md)>) para aplicações Next.js
410
+ - [`vite-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/vite-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/packages/vite-intlayer/index.md)>) para aplicações Vite
411
+
412
+ Também funciona perfeitamente com qualquer solução de internacionalização em vários ambientes, incluindo navegadores e requisições de API. Você pode customizar o middleware para detectar o locale através de headers ou cookies:
413
+
414
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
415
+ import { Locales, type IntlayerConfig } from "intlayer";
416
+
417
+ const config: IntlayerConfig = {
418
+ // ... Outras opções de configuração
419
+ middleware: {
420
+ headerName: "my-locale-header",
421
+ cookieName: "my-locale-cookie",
422
+ },
423
+ };
424
+
425
+ export default config;
426
+ ```
427
+
428
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
429
+ import { Locales } from "intlayer";
430
+
431
+ /** @type {import('intlayer').IntlayerConfig} */
432
+ const config = {
433
+ // ... Outras opções de configuração
434
+ middleware: {
435
+ headerName: "my-locale-header",
436
+ cookieName: "my-locale-cookie",
437
+ },
438
+ };
439
+
440
+ export default config;
441
+ ```
442
+
443
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
444
+ const { Locales } = require("intlayer");
445
+
446
+ /** @type {import('intlayer').IntlayerConfig} */
447
+ const config = {
448
+ // ... Outras opções de configuração
449
+ middleware: {
450
+ headerName: "my-locale-header",
451
+ cookieName: "my-locale-cookie",
452
+ },
453
+ };
454
+
455
+ module.exports = config;
456
+ ```
457
+
458
+ Por padrão, `fastify-intlayer` interpretará o cabeçalho `Accept-Language` para determinar o idioma preferido do cliente.
459
+
460
+ > 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).
461
+
462
+ ### Configurar TypeScript
463
+
464
+ `fastify-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 considerada, reduzindo o risco de traduções faltantes e melhorando a manutenibilidade.
465
+
466
+ Garanta que os tipos gerados automaticamente (por padrão em ./types/intlayer.d.ts) estejam incluídos no seu arquivo tsconfig.json.
467
+
468
+ ```json5 fileName="tsconfig.json"
469
+ {
470
+ // ... Suas configurações TypeScript existentes
471
+ "include": [
472
+ // ... Suas configurações TypeScript existentes
473
+ ".intlayer/**/*.ts", // Incluir os tipos gerados automaticamente
474
+ ],
475
+ }
476
+ ```
477
+
478
+ ### Extensão do VS Code
479
+
480
+ Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a **Extensão Intlayer para VS Code** oficial.
481
+
482
+ [Instalar no VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
483
+
484
+ Esta extensão fornece:
485
+
486
+ - **Autocompletar** para chaves de tradução.
487
+ - **Detecção de erros em tempo real** para traduções ausentes.
488
+ - **Visualizações inline** do conteúdo traduzido.
489
+ - **Ações rápidas** para criar e atualizar traduções com facilidade.
490
+
491
+ 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).
492
+
493
+ ### Configuração do Git
494
+
495
+ Recomenda-se ignorar os arquivos gerados pelo Intlayer. Isso permite evitar que você os envie (commit) para o seu repositório Git.
496
+
497
+ Para isso, você pode adicionar as seguintes instruções ao seu arquivo `.gitignore`:
498
+
499
+ ```plaintext fileName=".gitignore"
500
+ # Ignorar os arquivos gerados pelo Intlayer
501
+ .intlayer
502
+ ```
package/docs/pt/readme.md CHANGED
@@ -50,7 +50,7 @@ Com **arquivos de conteúdo por localidade**, **autocompletar em TypeScript**, *
50
50
  | Recurso | Descrição |
51
51
  | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
52
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true" alt="Feature" width="700"> | **Suporte Multiplataformas**<br><br>Intlayer é compatível com todos os principais frameworks e bibliotecas, incluindo Next.js, React, Vite, Vue.js, Nuxt, Preact, Express e muito mais. |
53
- | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.png?raw=true" alt="Feature" width="700"> | **Gestão de Conteúdo com JavaScript**<br><br>Aproveite a flexibilidade do JavaScript para definir e gerir o seu conteúdo de forma eficiente. <br><br> - [Declaração de conteúdo](https://intlayer.org/doc/concept/content) |
53
+ | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true" alt="Feature" width="700"> | **Gestão de Conteúdo com JavaScript**<br><br>Aproveite a flexibilidade do JavaScript para definir e gerir o seu conteúdo de forma eficiente. <br><br> - [Declaração de conteúdo](https://intlayer.org/doc/concept/content) |
54
54
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true" alt="Feature" width="700"> | **Ficheiro de Declaração de Conteúdo por Localidade**<br><br>Acelere o seu desenvolvimento declarando o seu conteúdo uma única vez, antes da geração automática.<br><br> - [Ficheiro de Declaração de Conteúdo por Localidade](https://intlayer.org/doc/concept/per-locale-file) |
55
55
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true" alt="Feature" width="700"> | **Ambiente com Tipagem Segura**<br><br>Aproveite o TypeScript para garantir que as suas definições de conteúdo e código estão livres de erros, beneficiando também da autocompletação no IDE.<br><br> - [Configuração do TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
56
56
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true" alt="Feature" width="700"> | **Configuração Simplificada**<br><br>Comece rapidamente com uma configuração mínima. Ajuste facilmente as definições para internacionalização, roteamento, IA, build e manipulação de conteúdo.<br><br> - [Explore a integração com Next.js](https://intlayer.org/doc/environment/nextjs) |
@@ -0,0 +1,137 @@
1
+ ---
2
+ createdAt: 2026-01-06
3
+ updatedAt: 2026-01-06
4
+ title: Команда CI
5
+ description: Узнайте, как использовать команду Intlayer CI для запуска команд Intlayer с автоматически внедренными учетными данными в CI/CD конвейерах и монорепозиториях.
6
+ keywords:
7
+ - CI
8
+ - CI/CD
9
+ - Автоматизация
10
+ - Монорепозиторий
11
+ - Учетные данные
12
+ - CLI
13
+ - Intlayer
14
+ slugs:
15
+ - doc
16
+ - concept
17
+ - cli
18
+ - ci
19
+ history:
20
+ - version: 7.5.11
21
+ date: 2026-01-06
22
+ changes: Добавить команду CI
23
+ ---
24
+
25
+ # Команда CI
26
+
27
+ ```bash
28
+ npx intlayer ci <command...>
29
+ ```
30
+
31
+ Команда CI предназначена для автоматизации и CI/CD конвейеров. Она автоматически внедряет учетные данные из переменной окружения `INTLAYER_PROJECT_CREDENTIALS` и может запускать команды Intlayer для нескольких проектов в монорепозитории.
32
+
33
+ ## Как это работает
34
+
35
+ Команда CI работает в двух режимах:
36
+
37
+ 1. **Режим одного проекта**: Если текущий рабочий каталог соответствует одному из путей проектов в `INTLAYER_PROJECT_CREDENTIALS`, она запускает команду только для этого конкретного проекта.
38
+
39
+ 2. **Режим итерации**: Если не обнаружен конкретный контекст проекта, она перебирает все настроенные проекты и запускает команду для каждого из них.
40
+
41
+ ## Переменная окружения
42
+
43
+ Команда требует установки переменной окружения `INTLAYER_PROJECT_CREDENTIALS`. Эта переменная должна содержать JSON-объект, сопоставляющий пути проектов с их учетными данными:
44
+
45
+ ```json
46
+ {
47
+ "packages/app": {
48
+ "clientId": "your-client-id-1",
49
+ "clientSecret": "your-client-secret-1"
50
+ },
51
+ "packages/admin": {
52
+ "clientId": "your-client-id-2",
53
+ "clientSecret": "your-client-secret-2"
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Определение менеджера пакетов
59
+
60
+ Команда CI автоматически определяет, какой менеджер пакетов используется (npm, yarn, pnpm или bun), на основе переменной окружения `npm_config_user_agent` и использует соответствующую команду для выполнения Intlayer.
61
+
62
+ ## Аргументы
63
+
64
+ - **`<command...>`**: Команда Intlayer для выполнения (например, `fill`, `push`, `build`). Вы можете передать любую команду Intlayer и ее аргументы.
65
+
66
+ > Пример: `npx intlayer ci fill --verbose`
67
+ >
68
+ > Пример: `npx intlayer ci push`
69
+ >
70
+ > Пример: `npx intlayer ci build`
71
+
72
+ ## Примеры
73
+
74
+ ### Запуск команды в режиме одного проекта
75
+
76
+ Если вы находитесь в каталоге проекта, который соответствует одному из путей в `INTLAYER_PROJECT_CREDENTIALS`:
77
+
78
+ ```bash
79
+ cd packages/app
80
+ npx intlayer ci fill
81
+ ```
82
+
83
+ Это запустит команду `fill` с автоматически внедренными учетными данными для проекта `packages/app`.
84
+
85
+ ### Запуск команды для всех проектов
86
+
87
+ Если вы находитесь в каталоге, который не соответствует ни одному пути проекта, команда переберет все настроенные проекты:
88
+
89
+ ```bash
90
+ cd /path/to/monorepo
91
+ npx intlayer ci push
92
+ ```
93
+
94
+ Это запустит команду `push` для каждого проекта, настроенного в `INTLAYER_PROJECT_CREDENTIALS`.
95
+
96
+ ### Передача дополнительных флагов
97
+
98
+ Вы можете передать любые флаги в базовую команду Intlayer:
99
+
100
+ ```bash
101
+ npx intlayer ci fill --verbose --mode complete
102
+ ```
103
+
104
+ ### Использование в CI/CD конвейерах
105
+
106
+ В вашей конфигурации CI/CD (например, GitHub Actions, GitLab CI) установите `INTLAYER_PROJECT_CREDENTIALS` как секрет:
107
+
108
+ ```yaml
109
+ # Пример GitHub Actions
110
+ env:
111
+ INTLAYER_PROJECT_CREDENTIALS: ${{ secrets.INTLAYER_PROJECT_CREDENTIALS }}
112
+
113
+ steps:
114
+ - name: Заполнить словари
115
+ run: npx intlayer ci fill
116
+ ```
117
+
118
+ ## Обработка ошибок
119
+
120
+ - Если `INTLAYER_PROJECT_CREDENTIALS` не установлена, команда завершится с ошибкой.
121
+ - Если `INTLAYER_PROJECT_CREDENTIALS` не является допустимым JSON, команда завершится с ошибкой.
122
+ - Если путь проекта не существует, он будет пропущен с предупреждением.
123
+ - Если какой-либо проект завершится неудачей, команда завершится с ненулевым кодом состояния.
124
+
125
+ ## Случаи использования
126
+
127
+ - **Автоматизация монорепозитория**: Запуск команд Intlayer для нескольких проектов в монорепозитории
128
+ - **CI/CD конвейеры**: Автоматизация управления словарями в рабочих процессах непрерывной интеграции
129
+ - **Массовые операции**: Выполнение одной и той же операции для нескольких проектов Intlayer одновременно
130
+ - **Управление секретами**: Безопасное управление учетными данными для нескольких проектов с использованием переменных окружения
131
+
132
+ ## Рекомендации по безопасности
133
+
134
+ - Храните `INTLAYER_PROJECT_CREDENTIALS` как зашифрованные секреты в вашей платформе CI/CD
135
+ - Никогда не коммитьте учетные данные в систему контроля версий
136
+ - Используйте учетные данные, специфичные для окружения, для различных сред развертывания
137
+ - Регулярно обновляйте учетные данные