@intlayer/docs 7.5.9 → 7.5.10

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 (128) hide show
  1. package/README.md +9 -2
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/cli/push.md +1 -1
  9. package/docs/ar/configuration.md +3 -3
  10. package/docs/ar/interest_of_intlayer.md +1 -1
  11. package/docs/ar/intlayer_CMS.md +5 -5
  12. package/docs/ar/intlayer_with_express.md +1 -0
  13. package/docs/ar/intlayer_with_fastify.md +516 -0
  14. package/docs/ar/readme.md +1 -1
  15. package/docs/de/cli/push.md +1 -1
  16. package/docs/de/configuration.md +3 -3
  17. package/docs/de/interest_of_intlayer.md +1 -1
  18. package/docs/de/intlayer_CMS.md +5 -5
  19. package/docs/de/intlayer_with_express.md +1 -0
  20. package/docs/de/intlayer_with_fastify.md +449 -0
  21. package/docs/de/readme.md +1 -1
  22. package/docs/en/cli/push.md +1 -1
  23. package/docs/en/configuration.md +3 -3
  24. package/docs/en/interest_of_intlayer.md +1 -1
  25. package/docs/en/intlayer_CMS.md +5 -5
  26. package/docs/en/intlayer_with_express.md +1 -0
  27. package/docs/en/intlayer_with_fastify.md +439 -0
  28. package/docs/en/readme.md +3 -1
  29. package/docs/en-GB/cli/push.md +1 -1
  30. package/docs/en-GB/configuration.md +3 -3
  31. package/docs/en-GB/interest_of_intlayer.md +1 -1
  32. package/docs/en-GB/intlayer_CMS.md +5 -5
  33. package/docs/en-GB/intlayer_with_express.md +1 -0
  34. package/docs/en-GB/intlayer_with_fastify.md +445 -0
  35. package/docs/en-GB/readme.md +3 -1
  36. package/docs/es/cli/push.md +1 -1
  37. package/docs/es/configuration.md +3 -3
  38. package/docs/es/interest_of_intlayer.md +1 -1
  39. package/docs/es/intlayer_CMS.md +5 -5
  40. package/docs/es/intlayer_with_express.md +1 -0
  41. package/docs/es/intlayer_with_fastify.md +480 -0
  42. package/docs/es/readme.md +1 -1
  43. package/docs/fr/cli/push.md +1 -1
  44. package/docs/fr/configuration.md +3 -3
  45. package/docs/fr/interest_of_intlayer.md +1 -1
  46. package/docs/fr/intlayer_CMS.md +5 -5
  47. package/docs/fr/intlayer_with_express.md +1 -0
  48. package/docs/fr/intlayer_with_fastify.md +439 -0
  49. package/docs/fr/readme.md +1 -1
  50. package/docs/hi/cli/push.md +1 -1
  51. package/docs/hi/configuration.md +3 -3
  52. package/docs/hi/interest_of_intlayer.md +1 -1
  53. package/docs/hi/intlayer_CMS.md +5 -5
  54. package/docs/hi/intlayer_with_express.md +1 -0
  55. package/docs/hi/intlayer_with_fastify.md +540 -0
  56. package/docs/hi/readme.md +1 -1
  57. package/docs/id/cli/push.md +1 -1
  58. package/docs/id/configuration.md +3 -3
  59. package/docs/id/interest_of_intlayer.md +1 -1
  60. package/docs/id/intlayer_CMS.md +5 -5
  61. package/docs/id/intlayer_with_express.md +1 -0
  62. package/docs/id/intlayer_with_fastify.md +470 -0
  63. package/docs/id/readme.md +1 -1
  64. package/docs/it/cli/push.md +1 -1
  65. package/docs/it/configuration.md +3 -3
  66. package/docs/it/interest_of_intlayer.md +1 -1
  67. package/docs/it/intlayer_CMS.md +5 -5
  68. package/docs/it/intlayer_with_express.md +1 -0
  69. package/docs/it/intlayer_with_fastify.md +445 -0
  70. package/docs/it/readme.md +1 -1
  71. package/docs/ja/cli/push.md +1 -1
  72. package/docs/ja/configuration.md +3 -3
  73. package/docs/ja/interest_of_intlayer.md +1 -1
  74. package/docs/ja/intlayer_CMS.md +5 -5
  75. package/docs/ja/intlayer_with_express.md +1 -0
  76. package/docs/ja/intlayer_with_fastify.md +516 -0
  77. package/docs/ja/readme.md +1 -1
  78. package/docs/ko/cli/push.md +1 -1
  79. package/docs/ko/configuration.md +3 -3
  80. package/docs/ko/interest_of_intlayer.md +1 -1
  81. package/docs/ko/intlayer_CMS.md +5 -5
  82. package/docs/ko/intlayer_with_express.md +1 -0
  83. package/docs/ko/intlayer_with_fastify.md +463 -0
  84. package/docs/ko/readme.md +1 -1
  85. package/docs/pl/cli/push.md +1 -1
  86. package/docs/pl/configuration.md +3 -3
  87. package/docs/pl/interest_of_intlayer.md +1 -1
  88. package/docs/pl/intlayer_CMS.md +5 -5
  89. package/docs/pl/intlayer_with_express.md +1 -0
  90. package/docs/pl/intlayer_with_fastify.md +457 -0
  91. package/docs/pl/readme.md +1 -1
  92. package/docs/pt/cli/push.md +1 -1
  93. package/docs/pt/configuration.md +3 -3
  94. package/docs/pt/interest_of_intlayer.md +1 -1
  95. package/docs/pt/intlayer_CMS.md +5 -5
  96. package/docs/pt/intlayer_with_express.md +1 -0
  97. package/docs/pt/intlayer_with_fastify.md +502 -0
  98. package/docs/pt/readme.md +1 -1
  99. package/docs/ru/cli/push.md +1 -1
  100. package/docs/ru/configuration.md +3 -3
  101. package/docs/ru/interest_of_intlayer.md +1 -1
  102. package/docs/ru/intlayer_CMS.md +5 -5
  103. package/docs/ru/intlayer_with_express.md +1 -0
  104. package/docs/ru/intlayer_with_fastify.md +468 -0
  105. package/docs/ru/readme.md +1 -1
  106. package/docs/tr/cli/push.md +1 -1
  107. package/docs/tr/configuration.md +3 -3
  108. package/docs/tr/interest_of_intlayer.md +1 -1
  109. package/docs/tr/intlayer_CMS.md +5 -5
  110. package/docs/tr/intlayer_with_express.md +1 -0
  111. package/docs/tr/intlayer_with_fastify.md +471 -0
  112. package/docs/tr/readme.md +1 -1
  113. package/docs/vi/cli/push.md +1 -1
  114. package/docs/vi/configuration.md +3 -3
  115. package/docs/vi/interest_of_intlayer.md +1 -1
  116. package/docs/vi/intlayer_CMS.md +5 -5
  117. package/docs/vi/intlayer_with_express.md +1 -0
  118. package/docs/vi/intlayer_with_fastify.md +490 -0
  119. package/docs/vi/readme.md +1 -1
  120. package/docs/zh/cli/push.md +1 -1
  121. package/docs/zh/configuration.md +3 -3
  122. package/docs/zh/interest_of_intlayer.md +1 -1
  123. package/docs/zh/intlayer_CMS.md +5 -5
  124. package/docs/zh/intlayer_with_express.md +1 -0
  125. package/docs/zh/intlayer_with_fastify.md +451 -0
  126. package/docs/zh/readme.md +1 -1
  127. package/package.json +6 -6
  128. package/src/generated/docs.entry.ts +19 -0
@@ -98,7 +98,7 @@ const config: IntlayerConfig = {
98
98
  *
99
99
  * Client ID dan client secret diperlukan untuk mengaktifkan editor.
100
100
  * Mereka memungkinkan identifikasi pengguna yang sedang mengedit konten.
101
- * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://intlayer.org/dashboard/projects).
101
+ * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
102
102
  * clientId: process.env.INTLAYER_CLIENT_ID,
103
103
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
104
104
  */
@@ -148,7 +148,7 @@ const config = {
148
148
  *
149
149
  * Client ID dan client secret diperlukan untuk mengaktifkan editor.
150
150
  * Mereka memungkinkan identifikasi pengguna yang sedang mengedit konten.
151
- * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://intlayer.org/dashboard/projects).
151
+ * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
152
152
  * clientId: process.env.INTLAYER_CLIENT_ID,
153
153
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
154
154
  */
@@ -198,7 +198,7 @@ const config = {
198
198
  *
199
199
  * Client ID dan client secret diperlukan untuk mengaktifkan editor.
200
200
  * Mereka memungkinkan identifikasi pengguna yang sedang mengedit konten.
201
- * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://intlayer.org/dashboard/projects).
201
+ * Mereka dapat diperoleh dengan membuat client baru di Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
202
202
  * clientId: process.env.INTLAYER_CLIENT_ID,
203
203
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
204
204
  */
@@ -230,7 +230,7 @@ const config = {
230
230
  module.exports = config;
231
231
  ```
232
232
 
233
- > Jika Anda belum memiliki client ID dan client secret, Anda dapat memperolehnya dengan membuat client baru di [Intlayer Dashboard - Projects](https://intlayer.org/dashboard/projects).
233
+ > Jika Anda belum memiliki client ID dan client secret, Anda dapat memperolehnya dengan membuat client baru di [Intlayer Dashboard - Projects](https://app.intlayer.org/projects).
234
234
 
235
235
  > Untuk melihat semua parameter yang tersedia, lihat [dokumentasi konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md).
236
236
 
@@ -270,7 +270,7 @@ Perintah ini mengunggah kamus konten awal Anda, sehingga tersedia untuk pengambi
270
270
 
271
271
  ### Edit kamus
272
272
 
273
- Kemudian Anda akan dapat melihat dan mengelola kamus Anda di [Intlayer CMS](https://intlayer.org/dashboard/content).
273
+ Kemudian Anda akan dapat melihat dan mengelola kamus Anda di [Intlayer CMS](https://app.intlayer.org/content).
274
274
 
275
275
  ## Sinkronisasi langsung
276
276
 
@@ -14,6 +14,7 @@ slugs:
14
14
  - doc
15
15
  - environment
16
16
  - express
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-express-template
17
18
  history:
18
19
  - version: 7.5.9
19
20
  date: 2025-12-30
@@ -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) |
@@ -23,7 +23,7 @@ slugs:
23
23
  npx intlayer dictionary push
24
24
  ```
25
25
 
26
- Se l'[editor di Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md) è installato, puoi anche inviare i dizionari all'editor. Questo comando permette di rendere i dizionari disponibili all'[editor](https://intlayer.org/dashboard). In questo modo, puoi condividere i tuoi dizionari con il tuo team e modificare i contenuti senza dover modificare il codice della tua applicazione.
26
+ Se l'[editor di Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md) è installato, puoi anche inviare i dizionari all'editor. Questo comando permette di rendere i dizionari disponibili all'[editor](https://app.intlayer.org/). In questo modo, puoi condividere i tuoi dizionari con il tuo team e modificare i contenuti senza dover modificare il codice della tua applicazione.
27
27
 
28
28
  ## Alias:
29
29
 
@@ -242,14 +242,14 @@ Definisce le impostazioni relative all'editor integrato, incluso il porto del se
242
242
  - **clientId**:
243
243
  - _Tipo_: `string` | `undefined`
244
244
  - _Predefinito_: `undefined`
245
- - _Descrizione_: clientId e clientSecret permettono ai pacchetti intlayer di autenticarsi con il backend utilizzando l'autenticazione oAuth2. Un token di accesso viene utilizzato per autenticare l'utente relativo al progetto. Per ottenere un token di accesso, vai su https://intlayer.org/dashboard/project e crea un account.
245
+ - _Descrizione_: clientId e clientSecret permettono ai pacchetti intlayer di autenticarsi con il backend utilizzando l'autenticazione oAuth2. Un token di accesso viene utilizzato per autenticare l'utente relativo al progetto. Per ottenere un token di accesso, vai su https://app.intlayer.org/project e crea un account.
246
246
  - _Esempio_: `true`
247
247
  - _Nota_: Importante: clientId e clientSecret devono essere mantenuti segreti e non condivisi pubblicamente. Assicurati di conservarli in un luogo sicuro, come le variabili d'ambiente.
248
248
 
249
249
  - **clientSecret**:
250
250
  - _Tipo_: `string` | `undefined`
251
251
  - _Predefinito_: `undefined`
252
- - _Descrizione_: clientId e clientSecret permettono ai pacchetti intlayer di autenticarsi con il backend utilizzando l'autenticazione oAuth2. Un token di accesso viene utilizzato per autenticare l'utente relativo al progetto. Per ottenere un token di accesso, vai su https://intlayer.org/dashboard/project e crea un account.
252
+ - _Descrizione_: clientId e clientSecret permettono ai pacchetti intlayer di autenticarsi con il backend utilizzando l'autenticazione oAuth2. Un token di accesso viene utilizzato per autenticare l'utente relativo al progetto. Per ottenere un token di accesso, vai su https://app.intlayer.org/project e crea un account.
253
253
  - _Esempio_: `true`
254
254
  - _Nota_: Importante: clientId e clientSecret devono essere mantenuti segreti e non condivisi pubblicamente. Assicurati di conservarli in un luogo sicuro, come variabili d'ambiente.
255
255
 
@@ -465,7 +465,7 @@ Impostazioni che controllano il logger, incluso il prefisso da utilizzare.
465
465
 
466
466
  Impostazioni che controllano le funzionalità AI di Intlayer, inclusi provider, modello e chiave API.
467
467
 
468
- Questa configurazione è opzionale se sei registrato sul [Cruscotto Intlayer](https://intlayer.org/dashboard/project) utilizzando una chiave di accesso. Intlayer gestirà automaticamente la soluzione AI più efficiente e conveniente per le tue esigenze. Utilizzare le opzioni predefinite garantisce una migliore manutenzione a lungo termine poiché Intlayer aggiorna continuamente per utilizzare i modelli più rilevanti.
468
+ Questa configurazione è opzionale se sei registrato sul [Cruscotto Intlayer](https://app.intlayer.org/project) utilizzando una chiave di accesso. Intlayer gestirà automaticamente la soluzione AI più efficiente e conveniente per le tue esigenze. Utilizzare le opzioni predefinite garantisce una migliore manutenzione a lungo termine poiché Intlayer aggiorna continuamente per utilizzare i modelli più rilevanti.
469
469
 
470
470
  Se preferisci utilizzare la tua chiave API o un modello specifico, puoi definire la tua configurazione AI personalizzata.
471
471
  Questa configurazione AI sarà utilizzata globalmente in tutto il tuo ambiente Intlayer. I comandi CLI utilizzeranno queste impostazioni come valori predefiniti per i comandi (ad esempio `fill`), così come l’SDK, l’Editor Visivo e il CMS. Puoi sovrascrivere questi valori predefiniti per casi d’uso specifici utilizzando i parametri dei comandi.
@@ -226,7 +226,7 @@ Questo approccio ti permette di:
226
226
  | Funzionalità | Descrizione |
227
227
  | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
228
228
  | ![Funzionalità](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **Supporto Cross-Framework**<br><br>Intlayer è compatibile con tutti i principali framework e librerie, inclusi Next.js, React, Vite, Vue.js, Nuxt, Preact, Express e altri ancora. |
229
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.png?raw=true) | **Gestione dei Contenuti con JavaScript**<br><br>Sfrutta la flessibilità di JavaScript per definire e gestire i tuoi contenuti in modo efficiente. <br><br> - [Dichiarazione dei contenuti](https://intlayer.org/doc/concept/content) |
229
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **Gestione dei Contenuti con JavaScript**<br><br>Sfrutta la flessibilità di JavaScript per definire e gestire i tuoi contenuti in modo efficiente. <br><br> - [Dichiarazione dei contenuti](https://intlayer.org/doc/concept/content) |
230
230
  | ![Funzionalità](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **File di Dichiarazione del Contenuto per Locale**<br><br>Accelera il tuo sviluppo dichiarando il contenuto una sola volta, prima della generazione automatica.<br><br> - [File di Dichiarazione del Contenuto per Locale](https://intlayer.org/doc/concept/per-locale-file) |
231
231
  | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **Ambiente Type-Safe**<br><br>Sfrutta TypeScript per garantire che le tue definizioni di contenuto e il codice siano privi di errori, beneficiando anche dell'autocompletamento nell'IDE.<br><br> - [Configurazione di TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
232
232
  | ![Funzionalità](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **Configurazione Semplificata**<br><br>Inizia rapidamente con una configurazione minima. Regola facilmente le impostazioni per l'internazionalizzazione, il routing, l'IA, la build e la gestione dei contenuti.<br><br> - [Esplora l'integrazione con Next.js](https://intlayer.org/doc/environment/nextjs) |
@@ -92,7 +92,7 @@ const config: IntlayerConfig = {
92
92
  *
93
93
  * Client ID e client secret sono necessari per abilitare l'editor.
94
94
  * Permettono di identificare l'utente che sta modificando il contenuto.
95
- * Possono essere ottenuti creando un nuovo client nel Dashboard di Intlayer - Progetti (https://intlayer.org/dashboard/projects).
95
+ * Possono essere ottenuti creando un nuovo client nel Dashboard di Intlayer - Progetti (https://app.intlayer.org/projects).
96
96
  * clientId: process.env.INTLAYER_CLIENT_ID,
97
97
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
98
98
  */
@@ -142,7 +142,7 @@ const config = {
142
142
  *
143
143
  * Client ID e client secret sono necessari per abilitare l'editor.
144
144
  * Permettono di identificare l'utente che sta modificando il contenuto.
145
- * Possono essere ottenuti creando un nuovo client nella Dashboard di Intlayer - Progetti (https://intlayer.org/dashboard/projects).
145
+ * Possono essere ottenuti creando un nuovo client nella Dashboard di Intlayer - Progetti (https://app.intlayer.org/projects).
146
146
  * clientId: process.env.INTLAYER_CLIENT_ID,
147
147
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
148
148
  */
@@ -192,7 +192,7 @@ const config = {
192
192
  *
193
193
  * Client ID e client secret sono necessari per abilitare l'editor.
194
194
  * Permettono di identificare l'utente che sta modificando il contenuto.
195
- * Possono essere ottenuti creando un nuovo client nel Intlayer Dashboard - Projects (https://intlayer.org/dashboard/projects).
195
+ * Possono essere ottenuti creando un nuovo client nel Intlayer Dashboard - Projects (https://app.intlayer.org/projects).
196
196
  * clientId: process.env.INTLAYER_CLIENT_ID,
197
197
  * clientSecret: process.env.INTLAYER_CLIENT_SECRET,
198
198
  */
@@ -224,7 +224,7 @@ const config = {
224
224
  module.exports = config;
225
225
  ```
226
226
 
227
- > Se non hai un client ID e un client secret, puoi ottenerli creando un nuovo client nel [Intlayer Dashboard - Projects](https://intlayer.org/dashboard/projects).
227
+ > Se non hai un client ID e un client secret, puoi ottenerli creando un nuovo client nel [Intlayer Dashboard - Projects](https://app.intlayer.org/projects).
228
228
 
229
229
  > Per vedere tutti i parametri disponibili, fai riferimento alla [documentazione di configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md).
230
230
 
@@ -264,7 +264,7 @@ Questo comando carica i tuoi dizionari di contenuti iniziali, rendendoli disponi
264
264
 
265
265
  ### Modifica il dizionario
266
266
 
267
- Successivamente potrai visualizzare e gestire il tuo dizionario nel [Intlayer CMS](https://intlayer.org/dashboard/content).
267
+ Successivamente potrai visualizzare e gestire il tuo dizionario nel [Intlayer CMS](https://app.intlayer.org/content).
268
268
 
269
269
  ## Sincronizzazione live
270
270
 
@@ -14,6 +14,7 @@ slugs:
14
14
  - doc
15
15
  - environment
16
16
  - express
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-express-template
17
18
  history:
18
19
  - version: 7.5.9
19
20
  date: 2025-12-30