@intlayer/docs 8.4.6 → 8.4.7

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 (31) hide show
  1. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  2. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  3. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  4. package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  5. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  6. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  7. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  8. package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  9. package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  10. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1 -3
  11. package/docs/en/configuration.md +115 -137
  12. package/docs/es/configuration.md +14 -6
  13. package/docs/fr/configuration.md +14 -6
  14. package/package.json +6 -6
  15. package/docs/ar/configuration.md +0 -922
  16. package/docs/bn/configuration.md +0 -922
  17. package/docs/de/configuration.md +0 -922
  18. package/docs/en-GB/configuration.md +0 -922
  19. package/docs/hi/configuration.md +0 -922
  20. package/docs/id/configuration.md +0 -922
  21. package/docs/it/configuration.md +0 -923
  22. package/docs/ja/configuration.md +0 -922
  23. package/docs/ko/configuration.md +0 -922
  24. package/docs/pl/configuration.md +0 -922
  25. package/docs/pt/configuration.md +0 -922
  26. package/docs/ru/configuration.md +0 -943
  27. package/docs/tr/configuration.md +0 -922
  28. package/docs/uk/configuration.md +0 -922
  29. package/docs/ur/configuration.md +0 -922
  30. package/docs/vi/configuration.md +0 -922
  31. package/docs/zh/configuration.md +0 -922
@@ -1,922 +0,0 @@
1
- ---
2
- createdAt: 2024-08-13
3
- updatedAt: 2026-03-20
4
- title: Konfigurasi (Configuration)
5
- description: Pelajari cara mengonfigurasi Intlayer untuk aplikasi Anda. Pahami berbagai pengaturan dan opsi yang tersedia untuk menyesuaikan Intlayer sesuai kebutuhan Anda.
6
- keywords:
7
- - Konfigurasi
8
- - Pengaturan
9
- - Kustomisasi
10
- - Intlayer
11
- - Opsi
12
- slugs:
13
- - doc
14
- - concept
15
- - configuration
16
- history:
17
- - version: 8.4.0
18
- date: 2026-03-20
19
- changes: Menambahkan notasi objek per-locale untuk 'compiler.output' dan 'dictionary.fill'
20
- - version: 8.3.0
21
- date: 2026-03-11
22
- changes: Memindahkan 'baseDir' dari konfigurasi 'content' ke konfigurasi 'system'
23
- - version: 8.2.0
24
- date: 2026-03-09
25
- changes: Memperbarui opsi kompiler (compiler), menambahkan dukungan untuk 'output' dan 'noMetadata'
26
- - version: 8.1.7
27
- date: 2026-02-25
28
- changes: Memperbarui opsi kompiler
29
- - version: 8.1.5
30
- date: 2026-02-23
31
- changes: Menambahkan opsi kompiler 'build-only' dan awalan kamus
32
- - version: 8.0.6
33
- date: 2026-02-12
34
- changes: Menambahkan dukungan untuk penyedia Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face, dan Together.ai
35
- - version: 8.0.5
36
- date: 2026-02-06
37
- changes: Menambahkan `dataSerialization` ke konfigurasi AI
38
- - version: 8.0.0
39
- date: 2026-01-24
40
- changes: Mengubah nama mode impor `live` menjadi `fetch` untuk mendeskripsikan mekanisme dasarnya dengan lebih baik.
41
- - version: 8.0.0
42
- date: 2026-01-22
43
- changes: Memindahkan konfigurasi build `importMode` ke konfigurasi `dictionary`.
44
- - version: 8.0.0
45
- date: 2026-01-22
46
- changes: Menambahkan opsi `rewrite` ke konfigurasi routing
47
- - version: 8.0.0
48
- date: 2026-01-18
49
- changes: Memisahkan konfigurasi sistem dari konfigurasi konten. Memindahkan jalur internal ke properti `system`. Menambahkan `codeDir` untuk memisahkan file konten dan transformasi kode.
50
- - version: 8.0.0
51
- date: 2026-01-18
52
- changes: Menambahkan opsi kamus `location` dan `schema`
53
- - version: 7.5.1
54
- date: 2026-01-10
55
- changes: Menambahkan dukungan untuk format file JSON5 dan JSONC
56
- - version: 7.5.0
57
- date: 2025-12-17
58
- changes: Menambahkan opsi `buildMode`
59
- - version: 7.0.0
60
- date: 2025-10-25
61
- changes: Menambahkan konfigurasi `dictionary`
62
- - version: 7.0.0
63
- date: 2025-10-21
64
- changes: Mengganti `middleware` dengan konfigurasi `routing`
65
- - version: 7.0.0
66
- date: 2025-10-12
67
- changes: Menambahkan opsi `formatCommand`
68
- - version: 6.2.0
69
- date: 2025-10-12
70
- changes: Memperbarui opsi `excludedPath`
71
- - version: 6.0.2
72
- date: 2025-09-23
73
- changes: Menambahkan opsi `outputFormat`
74
- - version: 6.0.0
75
- date: 2025-09-21
76
- changes: Menghapus field `dictionaryOutput` dan field `i18nextResourcesDir`
77
- - version: 6.0.0
78
- date: 2025-09-16
79
- changes: Menambahkan mode impor `live`
80
- - version: 6.0.0
81
- date: 2025-09-04
82
- changes: Mengganti field `hotReload` dengan `liveSync` dan menambahkan field `liveSyncPort` serta `liveSyncURL`
83
- - version: 5.6.1
84
- date: 2025-07-25
85
- changes: Mengganti `activateDynamicImport` dengan opsi `importMode`
86
- - version: 5.6.0
87
- date: 2025-07-13
88
- changes: Mengubah default contentDir dari `['src']` menjadi `['.']`
89
- - version: 5.5.11
90
- date: 2025-06-29
91
- changes: Menambahkan perintah `docs`
92
- ---
93
-
94
- # Dokumentasi Konfigurasi Intlayer
95
-
96
- ## Ringkasan
97
-
98
- File konfigurasi Intlayer memungkinkan Anda untuk menyesuaikan berbagai aspek plugin, seperti internasionalisasi (internationalization), middleware, dan penanganan konten. Dokumentasi ini memberikan deskripsi mendalam tentang setiap properti dalam konfigurasi.
99
-
100
- ---
101
-
102
- ## Daftar Isi
103
-
104
- <TOC/>
105
-
106
- ---
107
-
108
- ## Format File Konfigurasi yang Didukung
109
-
110
- Intlayer menerima format file konfigurasi JSON, JS, MJS, dan TS:
111
-
112
- - `intlayer.config.ts`
113
- - `intlayer.config.js`
114
- - `intlayer.config.json`
115
- - `intlayer.config.json5`
116
- - `intlayer.config.jsonc`
117
- - `intlayer.config.cjs`
118
- - `intlayer.config.mjs`
119
- - `.intlayerrc`
120
-
121
- ---
122
-
123
- ## Contoh File Konfigurasi
124
-
125
- ````typescript fileName="intlayer.config.ts" codeFormat="typescript"
126
- import { Locales, type IntlayerConfig } from "intlayer";
127
- import { nextjsRewrite } from "intlayer/routing";
128
- import { z } from "zod";
129
-
130
- /**
131
- * Contoh file konfigurasi Intlayer yang menampilkan semua opsi yang tersedia.
132
- */
133
- const config: IntlayerConfig = {
134
- /**
135
- * Konfigurasi pengaturan internasionalisasi.
136
- */
137
- internationalization: {
138
- /**
139
- * Daftar locale yang didukung dalam aplikasi.
140
- * Default: [Locales.ENGLISH]
141
- */
142
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
143
-
144
- /**
145
- * Daftar locale wajib yang harus didefinisikan dalam setiap kamus.
146
- * Jika kosong, semua locale bersifat wajib dalam mode `strict`.
147
- * Default: []
148
- */
149
- requiredLocales: [Locales.ENGLISH],
150
-
151
- /**
152
- * Tingkat keketatan untuk konten yang diinternasionalisasi.
153
- * - "strict": Error jika locale yang dideklarasikan hilang atau tidak dideklarasikan.
154
- * - "inclusive": Peringatan jika locale yang dideklarasikan hilang.
155
- * - "loose": Menerima locale apa pun yang ada.
156
- * Default: "inclusive"
157
- */
158
- strictMode: "inclusive",
159
-
160
- /**
161
- * Locale default yang digunakan sebagai fallback jika locale yang diminta tidak ditemukan.
162
- * Default: Locales.ENGLISH
163
- */
164
- defaultLocale: Locales.ENGLISH,
165
- },
166
-
167
- /**
168
- * Pengaturan yang mengontrol operasi kamus dan perilaku fallback.
169
- */
170
- dictionary: {
171
- /**
172
- * Mengontrol bagaimana kamus diimpor.
173
- * - "static": Diimpor secara statis saat waktu build.
174
- * - "dynamic": Diimpor secara dinamis menggunakan Suspense.
175
- * - "fetch": Diambil secara dinamis melalui API sinkronisasi langsung (live sync).
176
- * Default: "static"
177
- */
178
- importMode: "static",
179
-
180
- /**
181
- * Strategi untuk mengisi terjemahan yang hilang secara otomatis menggunakan AI.
182
- * Dapat berupa nilai boolean atau pola jalur untuk menyimpan konten yang diisi.
183
- * Default: true
184
- */
185
- fill: true,
186
-
187
- /**
188
- * Lokasi fisik file kamus.
189
- * - "local": Disimpan dalam sistem file lokal.
190
- * - "remote": Disimpan di Intlayer CMS.
191
- * - "hybrid": Disimpan di lokal dan di Intlayer CMS.
192
- * - "plugin" (atau string kustom apa pun): Disediakan oleh plugin atau sumber kustom.
193
- * Default: "local"
194
- */
195
- location: "local",
196
-
197
- /**
198
- * Apakah konten harus ditransformasi secara otomatis (misalnya Markdown ke HTML).
199
- * Default: false
200
- */
201
- contentAutoTransformation: false,
202
- },
203
-
204
- /**
205
- * Konfigurasi routing dan middleware.
206
- */
207
- routing: {
208
- /**
209
- * Strategi routing locale.
210
- * - "prefix-no-default": Menambahkan awalan ke semua kecuali locale default (misalnya /dashboard, /fr/dashboard).
211
- * - "prefix-all": Menambahkan awalan ke semua locale (misalnya /en/dashboard, /fr/dashboard).
212
- * - "no-prefix": Tidak ada locale di URL.
213
- * - "search-params": Menggunakan ?locale=...
214
- * Default: "prefix-no-default"
215
- */
216
- mode: "prefix-no-default",
217
-
218
- /**
219
- * Tempat menyimpan locale yang dipilih pengguna.
220
- * Opsi: 'cookie', 'localStorage', 'sessionStorage', 'header', atau array dari opsi-opsi tersebut.
221
- * Default: ['cookie', 'header']
222
- */
223
- storage: ["cookie", "header"],
224
-
225
- /**
226
- * Jalur dasar untuk URL aplikasi.
227
- * Default: ""
228
- */
229
- basePath: "",
230
-
231
- /**
232
- * Aturan penulisan ulang (rewrite) URL kustom untuk jalur spesifik per-locale.
233
- */
234
- rewrite: nextjsRewrite({
235
- "/[locale]/about": {
236
- en: "/[locale]/about",
237
- fr: "/[locale]/a-propos",
238
- },
239
- }),
240
- },
241
-
242
- /**
243
- * Pengaturan yang berkaitan dengan pencarian dan pemrosesan file konten.
244
- */
245
- content: {
246
- /**
247
- * Ekstensi file untuk memindai kamus.
248
- * Default: ['.content.ts', '.content.js', '.content.json', dll]
249
- */
250
- fileExtensions: [".content.ts", ".content.js", ".content.json"],
251
-
252
- /**
253
- * Direktori tempat file .content berada.
254
- * Default: ["."]
255
- */
256
- contentDir: ["src"],
257
-
258
- /**
259
- * Direktori tempat kode sumber berada.
260
- * Digunakan untuk optimasi build dan transformasi kode.
261
- * Default: ["."]
262
- */
263
- codeDir: ["src"],
264
-
265
- /**
266
- * Pola yang dikecualikan dari pemindaian.
267
- * Default: ['node_modules', '.intlayer', dll]
268
- */
269
- excludedPath: ["node_modules"],
270
-
271
- /**
272
- * Apakah akan memantau perubahan dan membangun kembali kamus selama pengembangan.
273
- * Default: true dalam pengembangan
274
- */
275
- watch: true,
276
-
277
- /**
278
- * Perintah yang digunakan untuk memformat file .content yang baru dibuat / diperbarui.
279
- */
280
- formatCommand: 'npx prettier --write "{{file}}"',
281
- },
282
-
283
- /**
284
- * Konfigurasi Visual Editor.
285
- */
286
- editor: {
287
- /**
288
- * Apakah visual editor diaktifkan.
289
- * Default: false
290
- */
291
- enabled: true,
292
-
293
- /**
294
- * URL aplikasi Anda untuk validasi asal (origin validation).
295
- * Default: ""
296
- */
297
- applicationURL: "http://localhost:3000",
298
-
299
- /**
300
- * Port untuk server editor lokal.
301
- * Default: 8000
302
- */
303
- port: 8000,
304
-
305
- /**
306
- * URL publik untuk editor.
307
- * Default: "http://localhost:8000"
308
- */
309
- editorURL: "http://localhost:8000",
310
-
311
- /**
312
- * URL Intlayer CMS.
313
- * Default: "https://app.intlayer.org"
314
- */
315
- cmsURL: "https://app.intlayer.org",
316
-
317
- /**
318
- * URL API Backend.
319
- * Default: "https://back.intlayer.org"
320
- */
321
- backendURL: "https://back.intlayer.org",
322
-
323
- /**
324
- * Apakah akan mengaktifkan sinkronisasi konten secara real-time.
325
- * Default: false
326
- */
327
- liveSync: true,
328
- },
329
-
330
- /**
331
- * Pengaturan terjemahan dan pembuatan konten berbasis AI.
332
- */
333
- ai: {
334
- /**
335
- * Penyedia AI yang akan digunakan.
336
- * Opsi: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
337
- * Default: 'openai'
338
- */
339
- provider: "openai",
340
-
341
- /**
342
- * Model dari penyedia yang dipilih untuk digunakan.
343
- */
344
- model: "gpt-4o",
345
-
346
- /**
347
- * Kunci API penyedia.
348
- */
349
- apiKey: process.env.OPENAI_API_KEY,
350
-
351
- /**
352
- * Konteks global untuk memandu AI dalam menghasilkan terjemahan.
353
- */
354
- applicationContext: "Ini adalah aplikasi pemesanan perjalanan.",
355
-
356
- /**
357
- * URL dasar untuk API AI.
358
- */
359
- baseURL: "http://localhost:3000",
360
-
361
- /**
362
- * Serialisasi Data (Data Serialization)
363
- *
364
- * Opsi:
365
- * - "json": Default, kuat; menggunakan lebih banyak token.
366
- * - "toon": Menggunakan lebih sedikit token, kurang konsisten dibandingkan JSON.
367
- *
368
- * Default: "json"
369
- */
370
- dataSerialization: "json",
371
- },
372
-
373
- /**
374
- * Pengaturan build dan optimasi.
375
- */
376
- build: {
377
- /**
378
- * Mode eksekusi build.
379
- * - "auto": Build secara otomatis selama build aplikasi.
380
- * - "manual": Memerlukan perintah build eksplisit.
381
- * Default: "auto"
382
- */
383
- mode: "auto",
384
-
385
- /**
386
- * Apakah akan mengoptimalkan bundle akhir dengan menghapus kamus yang tidak digunakan.
387
- * Default: true dalam produksi
388
- */
389
- optimize: true,
390
-
391
- /**
392
- * Format output untuk file kamus yang dihasilkan.
393
- * Default: ['cjs', 'esm']
394
- */
395
- outputFormat: ["cjs", "esm"],
396
-
397
- /**
398
- * Menunjukkan apakah build harus memeriksa tipe TypeScript.
399
- * Default: false
400
- */
401
- checkTypes: false,
402
- },
403
-
404
- /**
405
- * Konfigurasi Logger.
406
- */
407
- log: {
408
- /**
409
- * Tingkat logging.
410
- * - "default": Logging standar.
411
- * - "verbose": Logging debug mendalam.
412
- * - "disabled": Menonaktifkan logging.
413
- * Default: "default"
414
- */
415
- mode: "default",
416
-
417
- /**
418
- * Awalan untuk semua pesan log.
419
- * Default: "[intlayer]"
420
- */
421
- prefix: "[intlayer]",
422
- },
423
-
424
- /**
425
- * Konfigurasi Sistem (Untuk penggunaan tingkat lanjut)
426
- */
427
- system: {
428
- /**
429
- * Direktori untuk menyimpan kamus yang dilokalisasi.
430
- */
431
- dictionariesDir: ".intlayer/dictionary",
432
-
433
- /**
434
- * Direktori untuk augmentasi modul TypeScript.
435
- */
436
- moduleAugmentationDir: ".intlayer/types",
437
-
438
- /**
439
- * Direktori untuk menyimpan kamus yang belum digabungkan.
440
- */
441
- unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
442
-
443
- /**
444
- * Direktori untuk menyimpan tipe kamus.
445
- */
446
- typesDir: ".intlayer/types",
447
-
448
- /**
449
- * Direktori tempat file aplikasi utama disimpan.
450
- */
451
- mainDir: ".intlayer/main",
452
-
453
- /**
454
- * Direktori tempat file konfigurasi disimpan.
455
- */
456
- configDir: ".intlayer/config",
457
-
458
- /**
459
- * Direktori tempat file cache disimpan.
460
- */
461
- cacheDir: ".intlayer/cache",
462
- },
463
-
464
- /**
465
- * Konfigurasi Kompiler (Compiler) (Untuk penggunaan tingkat lanjut)
466
- */
467
- compiler: {
468
- /**
469
- * Menunjukkan apakah kompiler harus diaktifkan.
470
- *
471
- * - false: Menonaktifkan kompiler.
472
- * - true: Mengaktifkan kompiler.
473
- * - "build-only": Melewati kompiler selama pengembangan dan mempercepat waktu startup.
474
- *
475
- * Default: false
476
- */
477
- enabled: true,
478
-
479
- /**
480
- * Mendefinisikan jalur untuk file output. Menggantikan `outputDir`.
481
- *
482
- * - Jalur `./` diselesaikan relatif terhadap direktori komponen.
483
- * - Jalur `/` diselesaikan relatif terhadap akar proyek (`baseDir`).
484
- *
485
- * - Menyertakan variabel `{{locale}}` dalam jalur akan memicu pembuatan kamus terpisah per-bahasa.
486
- *
487
- * Contoh:
488
- * ```ts
489
- * {
490
- * // Buat file .content.ts multilingual di sebelah komponen
491
- * output: ({ fileName, extension }) => `./${fileName}${extension}`,
492
- *
493
- * // output: './{{fileName}}{{extension}}', // Setara menggunakan template string
494
- * }
495
- * ```
496
- *
497
- * ```ts
498
- * {
499
- * // Buat JSON terpusat per-bahasa di akar proyek
500
- * output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
501
- *
502
- * // output: '/locales/{{locale}}/{{key}}.content.json', // Setara menggunakan template string
503
- * }
504
- * ```
505
- *
506
- * Daftar variabel:
507
- * - `fileName`: Nama file.
508
- * - `key`: Kunci konten.
509
- * - `locale`: Locale konten.
510
- * - `extension`: Ekstensi file.
511
- * - `componentFileName`: Nama file komponen.
512
- * - `componentExtension`: Ekstensi file komponen.
513
- * - `format`: Format kamus.
514
- * - `componentFormat`: Format kamus komponen.
515
- * - `componentDirPath`: Jalur direktori komponen.
516
- */
517
- output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
518
-
519
- /**
520
- * Menunjukkan apakah komponen harus disimpan setelah ditransformasi.
521
- * Dengan cara ini, kompiler dapat dijalankan sekali saja untuk mentransformasi aplikasi dan kemudian dapat dihapus.
522
- */
523
- saveComponents: false,
524
-
525
- /**
526
- * Hanya menyisipkan konten ke dalam file yang dihasilkan. Berguna untuk output JSON per-bahasa untuk i18next atau ICU MessageFormat.
527
- */
528
- noMetadata: false,
529
-
530
- /**
531
- * Awalan kunci kamus
532
- */
533
- dictionaryKeyPrefix: "", // Tambahkan awalan opsional ke kunci kamus yang diekstrak
534
- },
535
-
536
- /**
537
- * Schema kustom untuk memvalidasi konten kamus.
538
- */
539
- schemas: {
540
- "my-schema": z.object({
541
- title: z.string(),
542
- }),
543
- },
544
-
545
- /**
546
- * Konfigurasi plugin.
547
- */
548
- plugins: [],
549
- };
550
-
551
- export default config;
552
- ````
553
-
554
- ---
555
-
556
- ## Referensi Konfigurasi (Configuration Reference)
557
-
558
- Bagian berikut menjelaskan berbagai pengaturan konfigurasi yang tersedia di Intlayer.
559
-
560
- ---
561
-
562
- ### Konfigurasi Internasionalisasi (Internationalization Configuration)
563
-
564
- Mendefinisikan pengaturan yang berkaitan dengan internasionalisasi, termasuk locale yang tersedia dan locale default untuk aplikasi.
565
-
566
- | Field | Tipe | Deskripsi | Contoh | Catatan |
567
- | ----------------- | ---------- | ------------------------------------------------------------------------------------------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
568
- | `locales` | `string[]` | Daftar locale yang didukung dalam aplikasi. Default: `[Locales.ENGLISH]` | `['en', 'fr', 'es']` | |
569
- | `requiredLocales` | `string[]` | Daftar locale wajib dalam aplikasi. Default: `[]` | `[]` | Jika kosong, semua locale bersifat wajib dalam mode `strict`. Pastikan locale wajib juga didefinisikan dalam field `locales`. |
570
- | `strictMode` | `string` | Menjamin implementasi konten internasionalisasi yang kuat menggunakan TypeScript. Default: `inclusive` | | Jika `"strict"`: fungsi `t` mengharuskan setiap locale yang dideklarasikan untuk didefinisikan — melemparkan error jika ada yang hilang atau tidak dideklarasikan. Jika `"inclusive"`: memperingatkan tentang locale yang hilang tetapi menerima locale yang ada namun tidak dideklarasikan. Jika `"loose"`: menerima locale apa pun yang ada. |
571
- | `defaultLocale` | `string` | Locale default yang digunakan sebagai fallback jika locale yang diminta tidak ditemukan. Default: `Locales.ENGLISH` | `'en'` | Digunakan untuk menentukan locale ketika tidak ada locale yang ditentukan dalam URL, cookie, atau header. |
572
-
573
- ---
574
-
575
- ### Konfigurasi Editor (Editor Configuration)
576
-
577
- Mendefinisikan pengaturan yang berkaitan dengan editor terintegrasi, termasuk port server dan status aktivitas.
578
-
579
- | Field | Tipe | Deskripsi | Contoh | Catatan |
580
- | ---------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
581
- | `applicationURL` | `string` | URL aplikasi Anda. Default: `''` | `'http://localhost:3000'`, `'https://example.com'`, `process.env.INTLAYER_EDITOR_URL` | Digunakan untuk membatasi asal (origin) editor demi alasan keamanan. Jika disetel ke `'*'`, editor dapat diakses dari asal mana pun. |
582
- | `port` | `number` | Port yang digunakan oleh server Visual Editor. Default: `8000` | | |
583
- | `editorURL` | `string` | URL server editor. Default: `'http://localhost:8000'` | `'http://localhost:3000'`, `'https://example.com'`, `process.env.INTLAYER_EDITOR_URL` | Digunakan untuk membatasi asal yang dapat berinteraksi dengan aplikasi. Jika disetel ke `'*'`, dapat diakses dari asal mana pun. Harus disetel jika mengubah port atau jika editor di-host di domain yang berbeda. |
584
- | `cmsURL` | `string` | URL Intlayer CMS. Default: `'https://intlayer.org'` | `'https://intlayer.org'` | |
585
- | `backendURL` | `string` | URL server backend. Default: `https://back.intlayer.org` | `http://localhost:4000` | |
586
- | `enabled` | `boolean` | Menunjukkan apakah aplikasi akan berinteraksi dengan visual editor. Default: `true` | `process.env.NODE_ENV !== 'production'` | Jika `false`, editor tidak dapat berinteraksi dengan aplikasi. Menonaktifkannya untuk lingkungan tertentu akan meningkatkan keamanan. |
587
- | `clientId` | `string &#124; undefined` | Memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka [intlayer.org/project](https://app.intlayer.org/project). Default: `undefined` | | Jaga kerahasiaannya; simpan dalam variabel lingkungan. |
588
- | `clientSecret` | `string &#124; undefined` | Memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka [intlayer.org/project](https://app.intlayer.org/project). Default: `undefined` | | Jaga kerahasiaannya; simpan dalam variabel lingkungan. |
589
- | `dictionaryPriorityStrategy` | `string` | Strategi untuk memprioritaskan kamus ketika kamus lokal dan jarak jauh ada. Default: `'local_first'` | `'distant_first'` | `'distant_first'`: memprioritaskan jarak jauh daripada lokal. `'local_first'`: memprioritaskan lokal daripada jarak jauh. |
590
- | `liveSync` | `boolean` | Menunjukkan apakah server aplikasi harus memuat ulang konten secara panas (hot-reload) ketika perubahan terdeteksi pada CMS / Visual Editor / Backend. Default: `true` | `true` | Ketika kamus ditambahkan/diperbarui, aplikasi memperbarui konten halaman. Sinkronisasi langsung mengalihdayakan konten ke server lain, yang mungkin sedikit memengaruhi performa. Disarankan untuk menghosting keduanya di mesin yang sama. |
591
- | `liveSyncPort` | `number` | Port server sinkronisasi langsung. Default: `4000` | `4000` | |
592
- | `liveSyncURL` | `string` | URL server sinkronisasi langsung. Default: `'http://localhost:{liveSyncPort}'` | `'https://example.com'` | Menunjuk ke localhost secara default; dapat diubah ke server sinkronisasi langsung jarak jauh. |
593
-
594
- ### Konfigurasi Routing (Routing Configuration)
595
-
596
- Pengaturan yang mengontrol perilaku routing, termasuk struktur URL, penyimpanan locale, dan penanganan middleware.
597
-
598
- | Field | Tipe | Deskripsi | Contoh | Catatan |
599
- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
600
- | `mode` | `'prefix-no-default' &#124; 'prefix-all' &#124; 'no-prefix' &#124; 'search-params'` | Mode routing URL untuk penanganan locale. Default: `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) atau `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: locale ditangani dengan cara lain. `'search-params'`: `/dashboard?locale=fr` | Tidak memengaruhi manajemen cookie atau penyimpanan locale. |
601
- | `storage` | `false &#124; 'cookie' &#124; 'localStorage' &#124; 'sessionStorage' &#124; 'header' &#124; CookiesAttributes &#124; StorageAttributes &#124; Array` | Konfigurasi untuk menyimpan locale pada klien. Default: `['cookie', 'header']` | `'localStorage'`, `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | Lihat tabel Opsi Penyimpanan di bawah. |
602
- | `basePath` | `string` | Jalur dasar untuk URL aplikasi. Default: `''` | `'/my-app'` | Jika aplikasi berada di `https://example.com/my-app`, basePath adalah `'/my-app'` dan URL menjadi `https://example.com/my-app/en`. |
603
- | `rewrite` | `Record<string, StrictModeLocaleMap<string>>` | Aturan penulisan ulang URL kustom yang menggantikan mode routing default untuk jalur tertentu. Mendukung parameter dinamis `[param]`. Default: `undefined` | Lihat contoh di bawah | Aturan penulisan ulang memiliki prioritas di atas `mode`. Berfungsi dengan Next.js dan Vite. `getLocalizedUrl()` secara otomatis menerapkan aturan yang sesuai. Lihat [Penulisan Ulang URL Kustom](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/custom_url_rewrites.md). |
604
-
605
- **Contoh `rewrite`**:
606
-
607
- ```typescript
608
- routing: {
609
- mode: "prefix-no-default", // Strategi fallback
610
- rewrite: nextjsRewrite({
611
- "/about": {
612
- en: "/about",
613
- fr: "/a-propos",
614
- },
615
- "/product/[slug]": {
616
- en: "/product/[slug]",
617
- fr: "/produit/[slug]",
618
- },
619
- "/blog/[category]/[id]": {
620
- en: "/blog/[category]/[id]",
621
- fr: "/journal/[category]/[id]",
622
- },
623
- }),
624
- }
625
- ```
626
-
627
- #### Opsi Penyimpanan (Storage Options)
628
-
629
- | Nilai | Deskripsi | Catatan |
630
- | ------------------ | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
631
- | `'cookie'` | Menyimpan locale dalam cookie — dapat diakses oleh sisi klien dan server. | Untuk kepatuhan GDPR, pastikan mendapatkan persetujuan pengguna yang sesuai. Dapat disesuaikan melalui `CookiesAttributes` (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`). |
632
- | `'localStorage'` | Menyimpan locale di browser tanpa batas waktu — hanya sisi klien. | Tidak berakhir kecuali dihapus secara eksplisit. Proksi Intlayer tidak dapat mengaksesnya. Dapat disesuaikan melalui `StorageAttributes` (`{ type: 'localStorage', name: 'custom-locale' }`). |
633
- | `'sessionStorage'` | Menyimpan locale selama durasi sesi halaman — hanya sisi klien. | Dihapus saat tab/jendela ditutup. Proksi Intlayer tidak dapat mengaksesnya. Dapat disesuaikan melalui `StorageAttributes` (`{ type: 'sessionStorage', name: 'custom-locale' }`). |
634
- | `'header'` | Menyimpan atau mentransmisikan locale melalui header HTTP — hanya sisi server. | Berguna untuk panggilan API. Sisi klien tidak dapat mengaksesnya. Dapat disesuaikan melalui `StorageAttributes` (`{ type: 'header', name: 'custom-locale' }`). |
635
-
636
- #### Atribut Cookie (Cookie Attributes)
637
-
638
- Saat menggunakan penyimpanan cookie, Anda dapat mengonfigurasi atribut cookie tambahan:
639
-
640
- | Field | Tipe | Deskripsi |
641
- | ---------- | ------------------------------------- | ---------------------------------------------------------- |
642
- | `name` | `string` | Nama cookie. Default: `'INTLAYER_LOCALE'` |
643
- | `domain` | `string` | Domain cookie. Default: `undefined` |
644
- | `path` | `string` | Jalur cookie. Default: `undefined` |
645
- | `secure` | `boolean` | Memerlukan HTTPS. Default: `undefined` |
646
- | `httpOnly` | `boolean` | Flag HTTP-only. Default: `undefined` |
647
- | `sameSite` | `'strict' &#124; 'lax' &#124; 'none'` | Kebijakan SameSite. |
648
- | `expires` | `Date &#124; number` | Tanggal kedaluwarsa atau jumlah hari. Default: `undefined` |
649
-
650
- #### Atribut Penyimpanan Locale (Locale Storage Attributes)
651
-
652
- Saat menggunakan localStorage atau sessionStorage:
653
-
654
- | Field | Tipe | Deskripsi |
655
- | ------ | ---------------------------------------- | ---------------------------------------------------- |
656
- | `type` | `'localStorage' &#124; 'sessionStorage'` | Tipe penyimpanan. |
657
- | `name` | `string` | Nama kunci penyimpanan. Default: `'INTLAYER_LOCALE'` |
658
-
659
- #### Contoh Konfigurasi (Configuration Examples)
660
-
661
- Berikut adalah beberapa contoh konfigurasi umum untuk struktur routing v7 yang baru:
662
-
663
- **Konfigurasi Dasar (Default)**:
664
-
665
- ```typescript
666
- import { Locales, type IntlayerConfig } from "intlayer";
667
- // intlayer.config.ts
668
- const config: IntlayerConfig = {
669
- internationalization: {
670
- locales: ["en", "fr", "es"],
671
- defaultLocale: "en",
672
- },
673
- routing: {
674
- mode: "prefix-no-default",
675
- storage: "localStorage",
676
- basePath: "",
677
- },
678
- };
679
-
680
- export default config;
681
- ```
682
-
683
- **Konfigurasi Patuh GDPR**:
684
-
685
- ```typescript
686
- import { Locales, type IntlayerConfig } from "intlayer";
687
- // intlayer.config.ts
688
- const config: IntlayerConfig = {
689
- internationalization: {
690
- locales: ["en", "fr", "es"],
691
- defaultLocale: "en",
692
- },
693
- routing: {
694
- mode: "prefix-no-default",
695
- storage: [
696
- {
697
- type: "localStorage",
698
- name: "user-locale",
699
- },
700
- {
701
- type: "cookie",
702
- name: "user-locale",
703
- secure: true,
704
- sameSite: "strict",
705
- httpOnly: false,
706
- },
707
- ],
708
- basePath: "",
709
- },
710
- };
711
-
712
- export default config;
713
- ```
714
-
715
- **Mode Parameter Pencarian (Search Parameters Mode)**:
716
-
717
- ```typescript
718
- import { Locales, type IntlayerConfig } from "intlayer";
719
- // intlayer.config.ts
720
- const config: IntlayerConfig = {
721
- internationalization: {
722
- locales: ["en", "fr", "es"],
723
- defaultLocale: "en",
724
- },
725
- routing: {
726
- mode: "search-params",
727
- storage: "localStorage",
728
- basePath: "",
729
- },
730
- };
731
-
732
- export default config;
733
- ```
734
-
735
- **Mode Tanpa Awalan (No Prefix Mode) dengan Penyimpanan Kustom**:
736
-
737
- ```typescript
738
- import { Locales, type IntlayerConfig } from "intlayer";
739
- // intlayer.config.ts
740
- const config: IntlayerConfig = {
741
- internationalization: {
742
- locales: ["en", "fr", "es"],
743
- defaultLocale: "en",
744
- },
745
- routing: {
746
- mode: "no-prefix",
747
- storage: {
748
- type: "sessionStorage",
749
- name: "app-locale",
750
- },
751
- basePath: "/my-app",
752
- },
753
- };
754
-
755
- export default config;
756
- ```
757
-
758
- **Penulisan Ulang URL Kustom dengan Jalur Dinamis**:
759
-
760
- ```typescript
761
- // intlayer.config.ts
762
- import { nextjsRewrite } from "intlayer/routing";
763
-
764
- const config: IntlayerConfig = {
765
- internationalization: {
766
- locales: ["en", "fr"],
767
- defaultLocale: "en",
768
- },
769
- routing: {
770
- mode: "prefix-no-default", // Fallback untuk jalur yang tidak ditulis ulang
771
- storage: "cookie",
772
- rewrite: nextjsRewrite({
773
- "/about": {
774
- en: "/about",
775
- fr: "/a-propos",
776
- },
777
- "/product/[slug]": {
778
- en: "/product/[slug]",
779
- fr: "/produit/[slug]",
780
- },
781
- "/blog/[category]/[id]": {
782
- en: "/blog/[category]/[id]",
783
- fr: "/journal/[category]/[id]",
784
- },
785
- }),
786
- },
787
- };
788
-
789
- export default config;
790
- ```
791
-
792
- ---
793
-
794
- ### Konfigurasi Konten (Content Configuration)
795
-
796
- Pengaturan yang berkaitan dengan pemrosesan konten di dalam aplikasi (nama direktori, ekstensi file, dan konfigurasi turunan).
797
-
798
- | Field | Tipe | Deskripsi | Contoh | Catatan |
799
- | ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
800
- | `watch` | `boolean` | Menunjukkan apakah Intlayer harus memantau perubahan dalam file deklarasi konten untuk membangun kembali kamus. Default: `process.env.NODE_ENV === 'development'` | | |
801
- | `fileExtensions` | `string[]` | Ekstensi file yang digunakan untuk memindai file deklarasi konten. Default: `['.content.ts', '.content.js', '.content.mjs', '.content.cjs', '.content.json', '.content.json5', '.content.jsonc']` | `['.content.ts', '.content.js']` | |
802
- | `contentDir` | `string[]` | Jalur ke direktori tempat file deklarasi konten berada. Default: `['.']` | `['src/content']` | |
803
- | `codeDir` | `string[]` | Jalur ke direktori tempat file kode sumber aplikasi Anda berada. Default: `['.']` | `['src']` | Digunakan untuk mengoptimalkan build dan memastikan transformasi kode serta pemuatan ulang panas hanya berlaku untuk file yang diperlukan. |
804
- | `excludedPath` | `string[]` | Jalur yang dikecualikan dari pemindaian konten. Default: `['node_modules', '.intlayer', '.next', 'dist', 'build']` | `['src/styles']` | |
805
- | `formatCommand` | `string` | Perintah yang akan dijalankan untuk memformat file konten yang baru dibuat atau diperbarui. Default: `undefined` | `'npx prettier --write "{{file}}"'` | Digunakan selama ekstraksi konten atau melalui visual editor. |
806
-
807
- ---
808
-
809
- ### Konfigurasi Kamus (Dictionary Configuration)
810
-
811
- Pengaturan yang mengontrol operasi kamus, termasuk perilaku pengisian otomatis dan pembuatan konten.
812
-
813
- Konfigurasi kamus ini memiliki dua tujuan utama:
814
-
815
- 1. **Nilai default**: Menentukan nilai default saat membuat file deklarasi konten.
816
- 2. **Perilaku fallback**: Memungkinkan pengaturan perilaku operasi kamus secara global, memberikan nilai fallback ketika field tertentu tidak didefinisikan.
817
-
818
- Untuk informasi lebih lanjut tentang bagaimana file deklarasi konten dan nilai konfigurasi diterapkan, lihat [dokumentasi file konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
819
-
820
- | Field | Tipe | Deskripsi | Contoh | Catatan |
821
- | --------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
822
- | `fill` | `boolean &#124; FilePathPattern &#124; Partial<Record<Locale, boolean &#124; FilePathPattern>>` | Mengontrol bagaimana file output pengisian otomatis (terjemahan AI) dihasilkan. Default: `true` | Lihat contoh di bawah | `true`: jalur default (file yang sama dengan sumber). `false`: dinonaktifkan. Pola string/fungsi menghasilkan file per bahasa. Objek per bahasa: setiap bahasa dipetakan ke polanya sendiri; `false` melewatkan bahasa tersebut. Menyertakan variabel `{{locale}}` memicu pembuatan per-bahasa. `fill` di tingkat kamus selalu memiliki prioritas di atas konfigurasi global ini. |
823
- | `importMode` | `'static' &#124; 'dynamic' &#124; 'fetch'` | Mengontrol bagaimana kamus diimpor. Default: `'static'` | `'dynamic'` | `'static'`: Diimpor secara statis. `'dynamic'`: Diimpor secara dinamis melalui 'Suspense'. `'fetch'`: Diambil secara dinamis melalui 'Live Sync API'. Tidak memengaruhi `getIntlayer`, `getDictionary`, `useDictionary`, dll. |
824
- | `location` | `'local' &#124; 'remote' &#124; 'hybrid' &#124; string` | Tempat kamus disimpan. Default: `'local'` | `'remote'` | `'local'`: sistem file. `'remote'`: Intlayer CMS. `'hybrid'`: keduanya. |
825
- | `contentAutoTransformation` | `boolean` | Menunjukkan apakah file konten harus ditransformasi secara otomatis (misalnya dari Markdown ke HTML). Default: `false` | `true` | Berguna untuk memproses field Markdown melalui @intlayer/markdown. |
826
-
827
- **Contoh `fill`**:
828
-
829
- ```ts
830
- dictionary: {
831
- fill: {
832
- en: '/locales/en/{{key}}.content.json',
833
- fr: ({ key }) => `/locales/fr/${key}.content.json`,
834
- es: false,
835
- }
836
- }
837
- ```
838
-
839
- ---
840
-
841
- ### Konfigurasi AI (AI Configuration)
842
-
843
- Mendefinisikan pengaturan untuk fitur berkekuatan AI Intlayer, seperti pembuatan terjemahan.
844
-
845
- | Field | Tipe | Deskripsi | Contoh | Catatan |
846
- | -------------------- | ---------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
847
- | `provider` | `string` | Penyedia AI yang akan digunakan. | `'openai'`, `'anthropic'`, `'googlevertex'` | |
848
- | `model` | `string` | Model AI yang akan digunakan. | `'gpt-4o'`, `'claude-3-5-sonnet-20240620'` | |
849
- | `apiKey` | `string` | Kunci API untuk penyedia yang dipilih. | `process.env.OPENAI_API_KEY` | |
850
- | `applicationContext` | `string` | Konteks tambahan tentang aplikasi Anda untuk meningkatkan akurasi terjemahan AI. | `'Sebuah platform pembelajaran untuk anak-anak.'` | |
851
- | `baseURL` | `string` | URL dasar opsional untuk panggilan API. | | Berguna jika Anda menggunakan proksi atau penyebaran AI lokal. |
852
- | `dataSerialization` | `'json' &#124; 'toon'` | Mendefinisikan bagaimana data dikirim ke AI. Default: `'json'` | `'json'` | `'json'`: lebih kuat dan akurat. `'toon'`: menggunakan lebih sedikit token tetapi mungkin kurang stabil. |
853
-
854
- ---
855
-
856
- ### Konfigurasi Build (Build Configuration)
857
-
858
- Pengaturan untuk proses build dan optimasi Intlayer.
859
-
860
- | Field | Tipe | Deskripsi | Contoh | Catatan |
861
- | -------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- | ------ | ------- |
862
- | `mode` | `'auto' &#124; 'manual'` | Menunjukkan apakah Intlayer harus berjalan secara otomatis selama langkah-langkah pre-build aplikasi. Default: `'auto'` | | |
863
- | `optimize` | `boolean` | Menunjukkan apakah kamus yang dikompilasi harus dioptimalkan untuk runtime. Default: `true` dalam produksi | | |
864
- | `outputFormat` | `('cjs' &#124; 'esm')[]` | Format output untuk file kamus yang dihasilkan. Default: `['cjs', 'esm']` | | |
865
- | `checkTypes` | `boolean` | Menunjukkan apakah Intlayer harus memeriksa tipe dalam file yang dihasilkan. Default: `false` | | |
866
-
867
- ---
868
-
869
- ### Konfigurasi Sistem (System Configuration)
870
-
871
- Pengaturan ini untuk penggunaan tingkat lanjut dan konfigurasi internal Intlayer.
872
-
873
- | Field | Tipe | Deskripsi | Default |
874
- | ------------------------- | -------- | -------------------------------------------- | --------------------------------- |
875
- | `dictionariesDir` | `string` | Direktori kamus yang dikompilasi. | `'.intlayer/dictionary'` |
876
- | `moduleAugmentationDir` | `string` | Direktori augmentasi modul TypeScript. | `'.intlayer/types'` |
877
- | `unmergedDictionariesDir` | `string` | Direktori kamus yang belum digabungkan. | `'.intlayer/unmerged_dictionary'` |
878
- | `typesDir` | `string` | Direktori tipe yang dihasilkan. | `'.intlayer/types'` |
879
- | `mainDir` | `string` | Direktori file Intlayer utama. | `'.intlayer/main'` |
880
- | `configDir` | `string` | Direktori file konfigurasi yang dikompilasi. | `'.intlayer/config'` |
881
- | `cacheDir` | `string` | Direktori file cache. | `'.intlayer/cache'` |
882
-
883
- ---
884
-
885
- ### Konfigurasi Kompiler (Compiler Configuration)
886
-
887
- Pengaturan untuk kompiler Intlayer (`intlayer compiler`).
888
-
889
- | Field | Tipe | Deskripsi | Default |
890
- | --------------------- | ------------------------ | ----------------------------------------------------------------------------------- | ------- |
891
- | `enabled` | `boolean` | Menunjukkan apakah kompiler aktif. | `false` |
892
- | `output` | `string &#124; Function` | Jalur output untuk kamus yang diekstrak. | |
893
- | `saveComponents` | `boolean` | Menunjukkan apakah file sumber asli harus ditimpa dengan versi yang ditransformasi. | `false` |
894
- | `noMetadata` | `boolean` | Jika `true`, kompiler tidak akan menyertakan metadata dalam file yang dihasilkan. | `false` |
895
- | `dictionaryKeyPrefix` | `string` | Awalan kunci kamus opsional. | `''` |
896
-
897
- ---
898
-
899
- ### Konfigurasi Logger (Logger Configuration)
900
-
901
- Pengaturan untuk menyesuaikan output log Intlayer.
902
-
903
- | Field | Tipe | Deskripsi | Default |
904
- | -------- | ---------------------------------------------- | ----------------------- | -------------- |
905
- | `mode` | `'default' &#124; 'verbose' &#124; 'disabled'` | Mode logging. | `'default'` |
906
- | `prefix` | `string` | Awalan untuk pesan log. | `'[intlayer]'` |
907
-
908
- ---
909
-
910
- ### Schema Kustom (Custom Schemas)
911
-
912
- | Field | Tipe | Deskripsi |
913
- | --------- | --------------------------- | ---------------------------------------------------------------------------- |
914
- | `schemas` | `Record<string, ZodSchema>` | Memungkinkan pendefinisian schema Zod untuk memvalidasi struktur kamus Anda. |
915
-
916
- ---
917
-
918
- ### Plugin
919
-
920
- | Field | Tipe | Deskripsi |
921
- | --------- | ------------------ | -------------------------------------------- |
922
- | `plugins` | `IntlayerPlugin[]` | Daftar plugin Intlayer yang akan diaktifkan. |