@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,470 @@
1
+ ---
2
+ createdAt: 2025-12-30
3
+ updatedAt: 2025-12-30
4
+ title: Cara menerjemahkan backend Fastify Anda – i18n guide 2026
5
+ description: Temukan cara membuat backend Fastify Anda mendukung banyak bahasa. Ikuti dokumentasi untuk menginternasionalisasi (i18n) dan menerjemahkannya.
6
+ keywords:
7
+ - Internationalization
8
+ - Dokumentasi
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: Menambahkan perintah init
22
+ - version: 7.6.0
23
+ date: 2025-12-31
24
+ changes: Riwayat awal
25
+ ---
26
+
27
+ # Terjemahkan situs backend Fastify Anda menggunakan Intlayer | Internationalization (i18n)
28
+
29
+ `fastify-intlayer` adalah plugin Internationalization (i18n) yang kuat untuk aplikasi Fastify, dirancang untuk membuat layanan backend Anda dapat diakses secara global dengan menyediakan respons yang dilokalisasi berdasarkan preferensi klien.
30
+
31
+ ### Kasus Penggunaan Praktis
32
+
33
+ - **Menampilkan Error Backend dalam Bahasa Pengguna**: Ketika terjadi error, menampilkan pesan dalam bahasa asli pengguna meningkatkan pemahaman dan mengurangi frustrasi. Ini sangat berguna untuk pesan error dinamis yang mungkin ditampilkan di komponen front-end seperti toast atau modal.
34
+
35
+ `fastify-intlayer` adalah plugin internationalization (i18n) yang kuat untuk aplikasi Fastify, dirancang agar layanan backend Anda dapat diakses secara global dengan menyediakan respons yang dilokalkan berdasarkan preferensi klien.
36
+
37
+ ### Kasus Penggunaan Praktis
38
+
39
+ - **Menampilkan Kesalahan Backend dalam Bahasa Pengguna**: Ketika terjadi kesalahan, menampilkan pesan dalam bahasa asli pengguna meningkatkan pemahaman dan mengurangi frustrasi. Ini sangat berguna untuk pesan error dinamis yang mungkin ditampilkan di komponen frontend seperti toasts atau modals.
40
+ - **Mengambil Konten Multibahasa**: Untuk aplikasi yang mengambil konten dari database, internationalization memastikan bahwa Anda dapat menyajikan konten ini dalam berbagai bahasa. Ini sangat penting untuk platform seperti situs e-commerce atau sistem manajemen konten yang perlu menampilkan deskripsi produk, artikel, dan konten lain dalam bahasa yang dipilih pengguna.
41
+ - **Mengirim Email Multibahasa**: Baik itu email transaksional, kampanye pemasaran, atau notifikasi, mengirim email dalam bahasa penerima dapat secara signifikan meningkatkan keterlibatan dan efektivitas.
42
+ - **Notifikasi Push Multibahasa**: Untuk aplikasi seluler, mengirim notifikasi push dalam bahasa yang dipilih pengguna dapat meningkatkan interaksi dan retensi. Sentuhan personal ini membuat notifikasi terasa lebih relevan dan lebih mudah ditindaklanjuti.
43
+ - **Komunikasi Lainnya**: Bentuk komunikasi apa pun dari backend, seperti pesan SMS, peringatan sistem, atau pembaruan antarmuka pengguna, mendapat manfaat bila disampaikan dalam bahasa pengguna, sehingga memastikan kejelasan dan meningkatkan pengalaman pengguna secara keseluruhan.
44
+
45
+ Dengan melakukan internasionalisasi pada backend, aplikasi Anda tidak hanya menghormati perbedaan budaya tetapi juga lebih selaras dengan kebutuhan pasar global, menjadikannya langkah penting untuk menskalakan layanan Anda secara internasional.
46
+
47
+ ## Memulai
48
+
49
+ ### Instalasi
50
+
51
+ Untuk mulai menggunakan `fastify-intlayer`, pasang paket menggunakan npm:
52
+
53
+ ```bash packageManager="npm"
54
+ npm install intlayer fastify-intlayer
55
+ npx intlayer init
56
+
57
+ ```
58
+
59
+ ```bash packageManager="pnpm"
60
+ pnpm add intlayer fastify-intlayer
61
+ pnpm intlayer init
62
+
63
+ ```
64
+
65
+ ```bash packageManager="yarn"
66
+ yarn add intlayer fastify-intlayer
67
+ yarn intlayer init
68
+
69
+ ```
70
+
71
+ ```bash packageManager="bun"
72
+ bun add intlayer fastify-intlayer
73
+ bunx intlayer init
74
+
75
+ ```
76
+
77
+ ### Penyiapan
78
+
79
+ Konfigurasikan pengaturan internationalization dengan membuat sebuah `intlayer.config.ts` di root proyek Anda:
80
+
81
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
82
+ import { Locales, type IntlayerConfig } from "intlayer";
83
+
84
+ const config: IntlayerConfig = {
85
+ internationalization: {
86
+ locales: [
87
+ Locales.ENGLISH,
88
+ Locales.FRENCH,
89
+ Locales.SPANISH_MEXICO,
90
+ Locales.SPANISH_SPAIN,
91
+ ],
92
+ defaultLocale: Locales.ENGLISH,
93
+ },
94
+ };
95
+
96
+ export default config;
97
+ ```
98
+
99
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
100
+ import { Locales } from "intlayer";
101
+
102
+ /** @type {import('intlayer').IntlayerConfig} */
103
+ const config = {
104
+ internationalization: {
105
+ locales: [
106
+ Locales.ENGLISH,
107
+ Locales.FRENCH,
108
+ Locales.SPANISH_MEXICO,
109
+ Locales.SPANISH_SPAIN,
110
+ ],
111
+ defaultLocale: Locales.ENGLISH,
112
+ },
113
+ };
114
+
115
+ export default config;
116
+ ```
117
+
118
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
119
+ const { Locales } = require("intlayer");
120
+
121
+ /** @type {import('intlayer').IntlayerConfig} */
122
+ const config = {
123
+ internationalization: {
124
+ locales: [
125
+ Locales.ENGLISH,
126
+ Locales.FRENCH,
127
+ Locales.SPANISH_MEXICO,
128
+ Locales.SPANISH_SPAIN,
129
+ ],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+ };
133
+
134
+ module.exports = config;
135
+ ```
136
+
137
+ ### Deklarasikan Konten Anda
138
+
139
+ Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
140
+
141
+ ```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
142
+ import { t, type Dictionary } from "intlayer";
143
+
144
+ const indexContent = {
145
+ key: "index",
146
+ content: {
147
+ exampleOfContent: t({
148
+ id: "Contoh konten yang dikembalikan dalam Bahasa Indonesia",
149
+ en: "Example of returned content in English",
150
+ fr: "Exemple de contenu renvoyé en français",
151
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
152
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
153
+ }),
154
+ },
155
+ } satisfies Dictionary;
156
+
157
+ export default indexContent;
158
+ ```
159
+
160
+ ```javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
161
+ import { t } from "intlayer";
162
+
163
+ /** @type {import('intlayer').Dictionary} */
164
+ const indexContent = {
165
+ key: "index",
166
+ content: {
167
+ exampleOfContent: t({
168
+ id: "Contoh konten yang dikembalikan dalam Bahasa Indonesia",
169
+ en: "Example of returned content in English",
170
+ fr: "Exemple de contenu renvoyé en français",
171
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
172
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
173
+ }),
174
+ },
175
+ };
176
+
177
+ export default indexContent;
178
+
179
+ /** @type {import('intlayer').Dictionary} */
180
+ const indexContent = {
181
+ key: "index",
182
+ content: {
183
+ exampleOfContent: t({
184
+ id: "Contoh konten yang dikembalikan dalam bahasa Inggris",
185
+ en: "Example of returned content in English",
186
+ fr: "Exemple de contenu renvoyé en français",
187
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
188
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
189
+ }),
190
+ },
191
+ };
192
+
193
+ export default indexContent;
194
+ ```
195
+
196
+ ```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
197
+ const { t } = require("intlayer");
198
+
199
+ /** @type {import('intlayer').Dictionary} */
200
+ const indexContent = {
201
+ key: "index",
202
+ content: {
203
+ exampleOfContent: t({
204
+ id: "Contoh konten yang dikembalikan dalam bahasa Inggris",
205
+ en: "Example of returned content in English",
206
+ fr: "Exemple de contenu renvoyé en français",
207
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
208
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
209
+ }),
210
+ },
211
+ };
212
+
213
+ module.exports = indexContent;
214
+ ```
215
+
216
+ ```json fileName="src/index.content.json" contentDeclarationFormat="json"
217
+ {
218
+ "$schema": "https://intlayer.org/schema.json",
219
+ "key": "index",
220
+ "content": {
221
+ "exampleOfContent": {
222
+ "nodeType": "translation",
223
+ "translation": {
224
+ "id": "Contoh konten yang dikembalikan dalam bahasa Indonesia",
225
+ "en": "Example of returned content in English",
226
+ "fr": "Exemple de contenu renvoyé en français",
227
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
228
+ "es-MX": "Ejemplo de contenido devuelto en español (México)"
229
+ }
230
+ }
231
+ }
232
+ }
233
+ ```
234
+
235
+ > Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama mereka dimasukkan ke direktori `contentDir` (secara default, `./src`). Dan cocokkan ekstensi file deklarasi konten (secara default, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
236
+
237
+ > Untuk detail lebih lanjut, lihat [dokumentasi deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
238
+
239
+ ### Pengaturan Aplikasi Fastify
240
+
241
+ Siapkan aplikasi Fastify Anda untuk menggunakan `fastify-intlayer`:
242
+
243
+ ```typescript fileName="src/index.ts" codeFormat="typescript"
244
+ import Fastify from "fastify";
245
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
246
+ import dictionaryExample from "./index.content";
247
+
248
+ const fastify = Fastify({ logger: true });
249
+
250
+ typescript fileName="src/index.ts" codeFormat="typescript"
251
+ // Muat plugin internasionalisasi
252
+ await fastify.register(intlayer);
253
+
254
+ // Rute
255
+ fastify.get("/t_example", async (_req, reply) => {
256
+ return t({
257
+ en: "Example of returned content in English",
258
+ fr: "Exemple de contenu renvoyé en français",
259
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
260
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
261
+ });
262
+ });
263
+
264
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
265
+ return getIntlayer("index").exampleOfContent;
266
+ });
267
+
268
+ fastify.get("/getDictionary_example", async (_req, reply) => {
269
+ return getDictionary(dictionaryExample).exampleOfContent;
270
+ });
271
+
272
+ // Mulai server
273
+ const start = async () => {
274
+ try {
275
+ await fastify.listen({ port: 3000 });
276
+ } catch (err) {
277
+ fastify.log.error(err);
278
+ process.exit(1);
279
+ }
280
+ };
281
+
282
+ start();
283
+ ```
284
+
285
+ ```javascript fileName="src/index.mjs" codeFormat="esm"
286
+ import Fastify from "fastify";
287
+ import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
288
+ import dictionaryExample from "./index.content";
289
+
290
+ const fastify = Fastify({ logger: true });
291
+
292
+ // Muat plugin internasionalisasi
293
+ await fastify.register(intlayer);
294
+
295
+ // Rute
296
+ fastify.get("/t_example", async (_req, reply) => {
297
+ return t({
298
+ id: "Contoh konten yang dikembalikan dalam bahasa Inggris",
299
+ en: "Example of returned content in English",
300
+ fr: "Exemple de contenu renvoyé en français",
301
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
302
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
303
+ });
304
+ });
305
+
306
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
307
+ return getIntlayer("index").exampleOfContent;
308
+ });
309
+
310
+ fastify.get("/getDictionary_example", async (_req, reply) => {
311
+ return getDictionary(dictionaryExample).exampleOfContent;
312
+ });
313
+
314
+ // Mulai server
315
+ const start = async () => {
316
+ try {
317
+ await fastify.listen({ port: 3000 });
318
+ } catch (err) {
319
+ fastify.log.error(err);
320
+ process.exit(1);
321
+ }
322
+ };
323
+
324
+ start();
325
+ ```
326
+
327
+ ```javascript fileName="src/index.cjs" codeFormat="commonjs"
328
+ const Fastify = require("fastify");
329
+ const { intlayer, t, getDictionary, getIntlayer } = require("fastify-intlayer");
330
+ const dictionaryExample = require("./index.content");
331
+
332
+ const fastify = Fastify({ logger: true });
333
+
334
+ // Pembungkus untuk memulai server (async/await)
335
+ const start = async () => {
336
+ try {
337
+ // Muat plugin internasionalisasi
338
+ await fastify.register(intlayer);
339
+
340
+ // Rute
341
+ fastify.get("/t_example", async (_req, reply) => {
342
+ return t({
343
+ id: "Contoh konten yang dikembalikan dalam bahasa Indonesia",
344
+ en: "Example of returned content in English",
345
+ fr: "Exemple de contenu renvoyé en français",
346
+ "es-ES": "Ejemplo de contenido devuelto en español (España)",
347
+ "es-MX": "Ejemplo de contenido devuelto en español (México)",
348
+ });
349
+ });
350
+
351
+ fastify.get("/getIntlayer_example", async (_req, reply) => {
352
+ return getIntlayer("index").exampleOfContent;
353
+ });
354
+
355
+ fastify.get("/getDictionary_example", async (_req, reply) => {
356
+ return getDictionary(dictionaryExample).exampleOfContent;
357
+ });
358
+
359
+ await fastify.listen({ port: 3000 });
360
+ } catch (err) {
361
+ fastify.log.error(err);
362
+ process.exit(1);
363
+ }
364
+ };
365
+
366
+ start();
367
+ ```
368
+
369
+ ### Kompatibilitas
370
+
371
+ `fastify-intlayer` sepenuhnya kompatibel dengan:
372
+
373
+ - [`react-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/react-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/react-intlayer/index.md)>) untuk aplikasi React
374
+ - [`next-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/next-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/next-intlayer/index.md)>) untuk aplikasi Next.js
375
+
376
+ - [`react-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/react-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/react-intlayer/index.md)>) untuk aplikasi React
377
+ - [`next-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/next-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/next-intlayer/index.md)>) untuk aplikasi Next.js
378
+ - [`vite-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/vite-intlayer/index.md)>) untuk aplikasi Vite
379
+
380
+ Ini juga berfungsi mulus dengan solusi internasionalisasi apa pun di berbagai lingkungan, termasuk browser dan permintaan API. Anda dapat menyesuaikan middleware untuk mendeteksi locale melalui header atau cookie:
381
+
382
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
383
+ import { Locales, type IntlayerConfig } from "intlayer";
384
+
385
+ const config: IntlayerConfig = {
386
+ // ... Opsi konfigurasi lainnya
387
+ middleware: {
388
+ headerName: "my-locale-header",
389
+ cookieName: "my-locale-cookie",
390
+ },
391
+ };
392
+
393
+ export default config;
394
+ ```
395
+
396
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
397
+ import { Locales } from "intlayer";
398
+
399
+ /** @type {import('intlayer').IntlayerConfig} */
400
+ const config = {
401
+ // ... Opsi konfigurasi lainnya
402
+ middleware: {
403
+ headerName: "my-locale-header",
404
+ cookieName: "my-locale-cookie",
405
+ },
406
+ };
407
+
408
+ export default config;
409
+ ```
410
+
411
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
412
+ const { Locales } = require("intlayer");
413
+
414
+ /** @type {import('intlayer').IntlayerConfig} */
415
+ const config = {
416
+ // ... Opsi konfigurasi lainnya
417
+ middleware: {
418
+ headerName: "my-locale-header",
419
+ cookieName: "my-locale-cookie",
420
+ },
421
+ };
422
+
423
+ module.exports = config;
424
+ ```
425
+
426
+ Secara default, `fastify-intlayer` akan menginterpretasikan header `Accept-Language` untuk menentukan bahasa yang dipilih klien.
427
+
428
+ > Untuk informasi lebih lanjut tentang konfigurasi dan topik lanjutan, kunjungi [dokumentasi kami](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md).
429
+
430
+ ### Konfigurasi TypeScript
431
+
432
+ `fastify-intlayer` memanfaatkan kemampuan kuat TypeScript untuk meningkatkan proses internasionalisasi. Tipe statis TypeScript memastikan setiap kunci terjemahan tercakup, mengurangi risiko terjemahan yang hilang dan meningkatkan pemeliharaan.
433
+
434
+ Pastikan tipe yang dihasilkan secara otomatis (secara default di ./types/intlayer.d.ts) disertakan dalam file tsconfig.json Anda.
435
+
436
+ ```json5 fileName="tsconfig.json"
437
+ {
438
+ // ... Konfigurasi TypeScript Anda yang sudah ada
439
+ "include": [
440
+ // ... Konfigurasi TypeScript Anda yang sudah ada
441
+ ".intlayer/**/*.ts", // Sertakan tipe yang dihasilkan otomatis
442
+ ],
443
+ }
444
+ ```
445
+
446
+ ### Ekstensi VS Code
447
+
448
+ Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat memasang **Ekstensi Intlayer untuk VS Code** resmi.
449
+
450
+ [Pasang dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
451
+
452
+ Ekstensi ini menyediakan:
453
+
454
+ - **Autocompletion** untuk kunci terjemahan.
455
+ - **Deteksi kesalahan real-time** untuk terjemahan yang hilang.
456
+ - **Pratinjau inline** untuk konten yang diterjemahkan.
457
+ - **Tindakan cepat** untuk memudahkan pembuatan dan pembaruan terjemahan.
458
+
459
+ Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi Intlayer untuk VS Code](https://intlayer.org/doc/vs-code-extension).
460
+
461
+ ### Konfigurasi Git
462
+
463
+ Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Hal ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.
464
+
465
+ Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:
466
+
467
+ ```plaintext fileName=".gitignore"
468
+ # Abaikan file yang dihasilkan oleh Intlayer
469
+ .intlayer
470
+ ```
package/docs/id/readme.md CHANGED
@@ -50,7 +50,7 @@ Dengan **file konten per-locale**, **autocompletion TypeScript**, **kamus tree-s
50
50
  | Fitur | Deskripsi |
51
51
  | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
52
  | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true" alt="Fitur" width="700"> | **Dukungan Lintas-Framework**<br><br>Intlayer kompatibel dengan semua framework dan pustaka utama, termasuk Next.js, React, Vite, Vue.js, Nuxt, Preact, Express, dan lainnya. |
53
- | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.png?raw=true" alt="Fitur" width="700"> | **Manajemen Konten Berbasis JavaScript**<br><br>Manfaatkan fleksibilitas JavaScript untuk mendefinisikan dan mengelola konten Anda secara efisien. <br><br> - [Deklarasi Konten](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="Fitur" width="700"> | **Manajemen Konten Berbasis JavaScript**<br><br>Manfaatkan fleksibilitas JavaScript untuk mendefinisikan dan mengelola konten Anda secara efisien. <br><br> - [Deklarasi Konten](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="Fitur" width="700"> | **File Deklarasi Konten Per-Locale**<br><br>Percepat pengembangan Anda dengan mendeklarasikan konten sekali saja, sebelum auto generation.<br><br> - [File Deklarasi Konten Per-Locale](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="Fitur" width="700"> | **Lingkungan Aman-Tipe**<br><br>Manfaatkan TypeScript untuk memastikan definisi konten dan kode Anda bebas dari kesalahan, sekaligus mendapatkan keuntungan dari autocompletion IDE.<br><br> - [Konfigurasi 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="Fitur" width="700"> | **Pengaturan yang Disederhanakan**<br><br>Mulai dengan cepat menggunakan konfigurasi minimal. Sesuaikan pengaturan untuk internasionalisasi, routing, AI, build, dan penanganan konten dengan mudah.<br><br> - [Jelajahi integrasi 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: Comando CI
5
+ description: Impara come usare il comando Intlayer CI per eseguire comandi Intlayer con credenziali auto-iniettate nelle pipeline CI/CD e nei monorepo.
6
+ keywords:
7
+ - CI
8
+ - CI/CD
9
+ - Automatizzazione
10
+ - Monorepo
11
+ - Credenziali
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: Aggiungere comando CI
23
+ ---
24
+
25
+ # Comando CI
26
+
27
+ ```bash
28
+ npx intlayer ci <command...>
29
+ ```
30
+
31
+ Il comando CI è progettato per l'automazione e le pipeline CI/CD. Inietta automaticamente le credenziali dalla variabile d'ambiente `INTLAYER_PROJECT_CREDENTIALS` e può eseguire comandi Intlayer su più progetti in un monorepo.
32
+
33
+ ## Come funziona
34
+
35
+ Il comando CI opera in due modalità:
36
+
37
+ 1. **Modalità progetto singolo**: Se la directory di lavoro corrente corrisponde a uno dei percorsi del progetto in `INTLAYER_PROJECT_CREDENTIALS`, esegue il comando solo per quel progetto specifico.
38
+
39
+ 2. **Modalità iterazione**: Se non viene rilevato un contesto di progetto specifico, itera su tutti i progetti configurati ed esegue il comando per ciascuno.
40
+
41
+ ## Variabile d'ambiente
42
+
43
+ Il comando richiede che la variabile d'ambiente `INTLAYER_PROJECT_CREDENTIALS` sia impostata. Questa variabile deve contenere un oggetto JSON che mappa i percorsi del progetto alle loro credenziali:
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
+ ## Rilevamento del gestore di pacchetti
59
+
60
+ Il comando CI rileva automaticamente quale gestore di pacchetti viene utilizzato (npm, yarn, pnpm o bun) in base alla variabile d'ambiente `npm_config_user_agent` e utilizza il comando appropriato per eseguire Intlayer.
61
+
62
+ ## Argomenti
63
+
64
+ - **`<command...>`**: Il comando Intlayer da eseguire (ad esempio, `fill`, `push`, `build`). Puoi passare qualsiasi comando Intlayer e i suoi argomenti.
65
+
66
+ > Esempio: `npx intlayer ci fill --verbose`
67
+ >
68
+ > Esempio: `npx intlayer ci push`
69
+ >
70
+ > Esempio: `npx intlayer ci build`
71
+
72
+ ## Esempi
73
+
74
+ ### Eseguire un comando in modalità progetto singolo
75
+
76
+ Se ti trovi in una directory di progetto che corrisponde a uno dei percorsi in `INTLAYER_PROJECT_CREDENTIALS`:
77
+
78
+ ```bash
79
+ cd packages/app
80
+ npx intlayer ci fill
81
+ ```
82
+
83
+ Questo eseguirà il comando `fill` con le credenziali iniettate automaticamente per il progetto `packages/app`.
84
+
85
+ ### Eseguire un comando su tutti i progetti
86
+
87
+ Se ti trovi in una directory che non corrisponde a nessun percorso di progetto, il comando itererà su tutti i progetti configurati:
88
+
89
+ ```bash
90
+ cd /path/to/monorepo
91
+ npx intlayer ci push
92
+ ```
93
+
94
+ Questo eseguirà il comando `push` per ogni progetto configurato in `INTLAYER_PROJECT_CREDENTIALS`.
95
+
96
+ ### Passare flag aggiuntivi
97
+
98
+ Puoi passare qualsiasi flag al comando Intlayer sottostante:
99
+
100
+ ```bash
101
+ npx intlayer ci fill --verbose --mode complete
102
+ ```
103
+
104
+ ### Utilizzare nelle pipeline CI/CD
105
+
106
+ Nella tua configurazione CI/CD (ad esempio, GitHub Actions, GitLab CI), imposta `INTLAYER_PROJECT_CREDENTIALS` come segreto:
107
+
108
+ ```yaml
109
+ # Esempio GitHub Actions
110
+ env:
111
+ INTLAYER_PROJECT_CREDENTIALS: ${{ secrets.INTLAYER_PROJECT_CREDENTIALS }}
112
+
113
+ steps:
114
+ - name: Riempire dizionari
115
+ run: npx intlayer ci fill
116
+ ```
117
+
118
+ ## Gestione degli errori
119
+
120
+ - Se `INTLAYER_PROJECT_CREDENTIALS` non è impostata, il comando terminerà con un errore.
121
+ - Se `INTLAYER_PROJECT_CREDENTIALS` non è un JSON valido, il comando terminerà con un errore.
122
+ - Se un percorso di progetto non esiste, verrà saltato con un avviso.
123
+ - Se un progetto fallisce, il comando terminerà con un codice di stato diverso da zero.
124
+
125
+ ## Casi d'uso
126
+
127
+ - **Automatizzazione monorepo**: Eseguire comandi Intlayer su più progetti in un monorepo
128
+ - **Pipeline CI/CD**: Automatizzare la gestione dei dizionari nei flussi di lavoro di integrazione continua
129
+ - **Operazioni in batch**: Eseguire la stessa operazione su più progetti Intlayer contemporaneamente
130
+ - **Gestione dei segreti**: Gestire in modo sicuro le credenziali per più progetti utilizzando variabili d'ambiente
131
+
132
+ ## Best practice di sicurezza
133
+
134
+ - Archivia `INTLAYER_PROJECT_CREDENTIALS` come segreti crittografati nella tua piattaforma CI/CD
135
+ - Non committare mai le credenziali nel controllo versione
136
+ - Usa credenziali specifiche dell'ambiente per diversi ambienti di distribuzione
137
+ - Ruota le credenziali regolarmente
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-11
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-01-06
4
4
  title: CLI
5
5
  description: Scopri come utilizzare la CLI di Intlayer per gestire il tuo sito web multilingue. Segui i passaggi in questa documentazione online per configurare il tuo progetto in pochi minuti.
6
6
  keywords:
@@ -17,6 +17,9 @@ slugs:
17
17
  - concept
18
18
  - cli
19
19
  history:
20
+ - version: 7.5.11
21
+ date: 2026-01-06
22
+ changes: Aggiunto comando projects list
20
23
  - version: 7.5.9
21
24
  date: 2025-12-30
22
25
  changes: Aggiunto comando init
@@ -119,6 +122,7 @@ Per vedere come configurare le localizzazioni disponibili o altri parametri, con
119
122
  - **[Build Dictionaries](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/cli/build.md)** - Costruisci i tuoi dizionari dai file di dichiarazione dei contenuti
120
123
  - **[Watch Dictionaries](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/cli/watch.md)** - Monitora le modifiche e costruisci automaticamente i dizionari
121
124
  - **[Check CLI Version](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/cli/version.md)** - Controlla la versione installata della CLI di Intlayer
125
+ - **[Elenca Progetti](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/cli/list_projects.md)** - Elenca tutti i progetti Intlayer in una directory o repository git
122
126
 
123
127
  ### Gestione dei Dizionari
124
128
 
@@ -161,6 +165,7 @@ Per vedere come configurare le localizzazioni disponibili o altri parametri, con
161
165
  "intlayer:list": "npx intlayer content list",
162
166
  "intlayer:test": "npx intlayer content test",
163
167
  "intlayer:transform": "npx intlayer transform",
168
+ "intlayer:projects": "npx intlayer projects list",
164
169
  "intlayer:doc:translate": "npx intlayer doc translate",
165
170
  "intlayer:doc:review": "npx intlayer doc review"
166
171
  }
@@ -170,3 +175,4 @@ Per vedere come configurare le localizzazioni disponibili o altri parametri, con
170
175
  >
171
176
  > - `npx intlayer list` invece di `npx intlayer content list`
172
177
  > - `npx intlayer test` invece di `npx intlayer content test`
178
+ > - `npx intlayer projects-list` o `npx intlayer pl` invece di `npx intlayer projects list`