@intlayer/docs 8.4.5 → 8.4.6

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 (48) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/configuration.md +520 -722
  8. package/docs/ar/intlayer_with_storybook.md +521 -0
  9. package/docs/bn/configuration.md +922 -0
  10. package/docs/bn/intlayer_with_hono.md +428 -0
  11. package/docs/de/configuration.md +369 -743
  12. package/docs/de/intlayer_with_storybook.md +521 -0
  13. package/docs/en/configuration.md +181 -507
  14. package/docs/en/intlayer_with_storybook.md +521 -0
  15. package/docs/en-GB/configuration.md +456 -657
  16. package/docs/en-GB/intlayer_with_storybook.md +521 -0
  17. package/docs/es/configuration.md +379 -754
  18. package/docs/es/intlayer_with_storybook.md +521 -0
  19. package/docs/fr/configuration.md +376 -757
  20. package/docs/fr/intlayer_with_storybook.md +521 -0
  21. package/docs/hi/configuration.md +532 -728
  22. package/docs/hi/intlayer_with_storybook.md +521 -0
  23. package/docs/id/configuration.md +371 -684
  24. package/docs/id/intlayer_with_storybook.md +521 -0
  25. package/docs/it/configuration.md +397 -775
  26. package/docs/it/intlayer_with_storybook.md +521 -0
  27. package/docs/ja/configuration.md +525 -724
  28. package/docs/ja/intlayer_with_storybook.md +521 -0
  29. package/docs/ko/configuration.md +525 -724
  30. package/docs/ko/intlayer_with_storybook.md +521 -0
  31. package/docs/pl/configuration.md +430 -734
  32. package/docs/pl/intlayer_with_storybook.md +521 -0
  33. package/docs/pt/configuration.md +375 -746
  34. package/docs/pt/intlayer_with_storybook.md +521 -0
  35. package/docs/ru/configuration.md +532 -701
  36. package/docs/ru/intlayer_with_storybook.md +521 -0
  37. package/docs/tr/configuration.md +527 -719
  38. package/docs/tr/intlayer_with_storybook.md +521 -0
  39. package/docs/uk/configuration.md +425 -744
  40. package/docs/uk/intlayer_with_storybook.md +521 -0
  41. package/docs/ur/configuration.md +922 -0
  42. package/docs/ur/intlayer_with_hono.md +428 -0
  43. package/docs/vi/configuration.md +412 -753
  44. package/docs/vi/intlayer_with_storybook.md +521 -0
  45. package/docs/zh/configuration.md +521 -714
  46. package/docs/zh/intlayer_with_storybook.md +521 -0
  47. package/package.json +6 -6
  48. package/src/generated/docs.entry.ts +20 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-03-12
4
- title: Konfigurasi
3
+ updatedAt: 2026-03-20
4
+ title: Konfigurasi (Configuration)
5
5
  description: Pelajari cara mengonfigurasi Intlayer untuk aplikasi Anda. Pahami berbagai pengaturan dan opsi yang tersedia untuk menyesuaikan Intlayer sesuai kebutuhan Anda.
6
6
  keywords:
7
7
  - Konfigurasi
@@ -14,30 +14,42 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
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'
17
20
  - version: 8.3.0
18
21
  date: 2026-03-11
19
- changes: Pindahkan 'baseDir' dari konfigurasi 'content' ke 'system'
22
+ changes: Memindahkan 'baseDir' dari konfigurasi 'content' ke konfigurasi 'system'
20
23
  - version: 8.2.0
21
24
  date: 2026-03-09
22
- changes: Perbarui opsi kompiler, tambahkan dukungan 'output' dan 'noMetadata'
25
+ changes: Memperbarui opsi kompiler (compiler), menambahkan dukungan untuk 'output' dan 'noMetadata'
23
26
  - version: 8.1.7
24
27
  date: 2026-02-25
25
- changes: Perbarui opsi kompiler
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
26
32
  - version: 8.0.6
27
33
  date: 2026-02-12
28
- changes: Tambahkan dukungan untuk penyedia Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face, dan Together.ai
34
+ changes: Menambahkan dukungan untuk penyedia Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face, dan Together.ai
29
35
  - version: 8.0.5
30
36
  date: 2026-02-06
31
- changes: Tambahkan `dataSerialization` ke konfigurasi AI
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`.
32
44
  - version: 8.0.0
33
45
  date: 2026-01-22
34
- changes: Pindahkan konfigurasi build importMode ke konfigurasi kamus.
46
+ changes: Menambahkan opsi `rewrite` ke konfigurasi routing
35
47
  - version: 8.0.0
36
48
  date: 2026-01-18
37
- changes: Pisahkan konfigurasi sistem dari konfigurasi konten. Pindahkan jalur internal ke properti `system`. Tambahkan `codeDir` untuk memisahkan file konten dari transformasi kode.
49
+ changes: Memisahkan konfigurasi sistem dari konfigurasi konten. Memindahkan jalur internal ke properti `system`. Menambahkan `codeDir` untuk memisahkan file konten dan transformasi kode.
38
50
  - version: 8.0.0
39
51
  date: 2026-01-18
40
- changes: Tambahkan opsi kamus `location` dan `schema`
52
+ changes: Menambahkan opsi kamus `location` dan `schema`
41
53
  - version: 7.5.1
42
54
  date: 2026-01-10
43
55
  changes: Menambahkan dukungan untuk format file JSON5 dan JSONC
@@ -49,7 +61,7 @@ history:
49
61
  changes: Menambahkan konfigurasi `dictionary`
50
62
  - version: 7.0.0
51
63
  date: 2025-10-21
52
- changes: Mengganti konfigurasi `middleware` dengan `routing`
64
+ changes: Mengganti `middleware` dengan konfigurasi `routing`
53
65
  - version: 7.0.0
54
66
  date: 2025-10-12
55
67
  changes: Menambahkan opsi `formatCommand`
@@ -64,7 +76,7 @@ history:
64
76
  changes: Menghapus field `dictionaryOutput` dan field `i18nextResourcesDir`
65
77
  - version: 6.0.0
66
78
  date: 2025-09-16
67
- changes: Menambahkan mode import `live`
79
+ changes: Menambahkan mode impor `live`
68
80
  - version: 6.0.0
69
81
  date: 2025-09-04
70
82
  changes: Mengganti field `hotReload` dengan `liveSync` dan menambahkan field `liveSyncPort` serta `liveSyncURL`
@@ -81,9 +93,9 @@ history:
81
93
 
82
94
  # Dokumentasi Konfigurasi Intlayer
83
95
 
84
- ## Ikhtisar
96
+ ## Ringkasan
85
97
 
86
- File konfigurasi Intlayer memungkinkan kustomisasi berbagai aspek plugin, seperti internasionalisasi, middleware, dan penanganan konten. Dokumen ini memberikan deskripsi rinci tentang setiap properti dalam konfigurasi.
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.
87
99
 
88
100
  ---
89
101
 
@@ -93,7 +105,7 @@ File konfigurasi Intlayer memungkinkan kustomisasi berbagai aspek plugin, sepert
93
105
 
94
106
  ---
95
107
 
96
- ## Dukungan File Konfigurasi
108
+ ## Format File Konfigurasi yang Didukung
97
109
 
98
110
  Intlayer menerima format file konfigurasi JSON, JS, MJS, dan TS:
99
111
 
@@ -108,7 +120,7 @@ Intlayer menerima format file konfigurasi JSON, JS, MJS, dan TS:
108
120
 
109
121
  ---
110
122
 
111
- ## Contoh file konfigurasi
123
+ ## Contoh File Konfigurasi
112
124
 
113
125
  ````typescript fileName="intlayer.config.ts" codeFormat="typescript"
114
126
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -116,108 +128,108 @@ import { nextjsRewrite } from "intlayer/routing";
116
128
  import { z } from "zod";
117
129
 
118
130
  /**
119
- * Example Intlayer configuration file showing all available options.
131
+ * Contoh file konfigurasi Intlayer yang menampilkan semua opsi yang tersedia.
120
132
  */
121
133
  const config: IntlayerConfig = {
122
134
  /**
123
- * Configuration for internationalization settings.
135
+ * Konfigurasi pengaturan internasionalisasi.
124
136
  */
125
137
  internationalization: {
126
138
  /**
127
- * List of supported locales in the application.
139
+ * Daftar locale yang didukung dalam aplikasi.
128
140
  * Default: [Locales.ENGLISH]
129
141
  */
130
142
  locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
131
143
 
132
144
  /**
133
- * List of required locales that must be defined in every dictionary.
134
- * If empty, all locales are required in `strict` mode.
145
+ * Daftar locale wajib yang harus didefinisikan dalam setiap kamus.
146
+ * Jika kosong, semua locale bersifat wajib dalam mode `strict`.
135
147
  * Default: []
136
148
  */
137
149
  requiredLocales: [Locales.ENGLISH],
138
150
 
139
151
  /**
140
- * Strictness level for internationalized content.
141
- * - "strict": Errors if any declared locale is missing or undeclared.
142
- * - "inclusive": Warnings if a declared locale is missing.
143
- * - "loose": Accepts any existing locale.
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.
144
156
  * Default: "inclusive"
145
157
  */
146
158
  strictMode: "inclusive",
147
159
 
148
160
  /**
149
- * Default locale used as a fallback if the requested locale is not found.
161
+ * Locale default yang digunakan sebagai fallback jika locale yang diminta tidak ditemukan.
150
162
  * Default: Locales.ENGLISH
151
163
  */
152
164
  defaultLocale: Locales.ENGLISH,
153
165
  },
154
166
 
155
167
  /**
156
- * Settings that control dictionary operations and fallback behavior.
168
+ * Pengaturan yang mengontrol operasi kamus dan perilaku fallback.
157
169
  */
158
170
  dictionary: {
159
171
  /**
160
- * Controls how dictionaries are imported.
161
- * - "static": Statically imported at build time.
162
- * - "dynamic": Dynamically imported using Suspense.
163
- * - "fetch": Fetched dynamically via the live sync API.
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).
164
176
  * Default: "static"
165
177
  */
166
178
  importMode: "static",
167
179
 
168
180
  /**
169
- * Strategy for auto-filling missing translations using AI.
170
- * Can be a boolean or a path pattern to store filled content.
181
+ * Strategi untuk mengisi terjemahan yang hilang secara otomatis menggunakan AI.
182
+ * Dapat berupa nilai boolean atau pola jalur untuk menyimpan konten yang diisi.
171
183
  * Default: true
172
184
  */
173
185
  fill: true,
174
186
 
175
187
  /**
176
- * Physical location of the dictionary files.
177
- * - "local": Stored in the local filesystem.
178
- * - "remote": Stored in the Intlayer CMS.
179
- * - "hybrid": Stored in the local filesystem and the Intlayer CMS.
180
- * - "plugin" (or any custom string): Provided by a plugin or a custom source.
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.
181
193
  * Default: "local"
182
194
  */
183
195
  location: "local",
184
196
 
185
197
  /**
186
- * Whether to automatically transform content (e.g., Markdown to HTML).
198
+ * Apakah konten harus ditransformasi secara otomatis (misalnya Markdown ke HTML).
187
199
  * Default: false
188
200
  */
189
201
  contentAutoTransformation: false,
190
202
  },
191
203
 
192
204
  /**
193
- * Routing and middleware configuration.
205
+ * Konfigurasi routing dan middleware.
194
206
  */
195
207
  routing: {
196
208
  /**
197
- * Locale routing strategy.
198
- * - "prefix-no-default": Prefix all except the default locale (e.g., /dashboard, /fr/dashboard).
199
- * - "prefix-all": Prefix all locales (e.g., /en/dashboard, /fr/dashboard).
200
- * - "no-prefix": No locale in the URL.
201
- * - "search-params": Use ?locale=...
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=...
202
214
  * Default: "prefix-no-default"
203
215
  */
204
216
  mode: "prefix-no-default",
205
217
 
206
218
  /**
207
- * Where to store the user's selected locale.
208
- * Options: 'cookie', 'localStorage', 'sessionStorage', 'header', or an array of these.
219
+ * Tempat menyimpan locale yang dipilih pengguna.
220
+ * Opsi: 'cookie', 'localStorage', 'sessionStorage', 'header', atau array dari opsi-opsi tersebut.
209
221
  * Default: ['cookie', 'header']
210
222
  */
211
223
  storage: ["cookie", "header"],
212
224
 
213
225
  /**
214
- * Base path for the application URLs.
226
+ * Jalur dasar untuk URL aplikasi.
215
227
  * Default: ""
216
228
  */
217
229
  basePath: "",
218
230
 
219
231
  /**
220
- * Custom URL rewriting rules for locale-specific paths.
232
+ * Aturan penulisan ulang (rewrite) URL kustom untuk jalur spesifik per-locale.
221
233
  */
222
234
  rewrite: nextjsRewrite({
223
235
  "/[locale]/about": {
@@ -228,128 +240,130 @@ const config: IntlayerConfig = {
228
240
  },
229
241
 
230
242
  /**
231
- * Settings for finding and processing content files.
243
+ * Pengaturan yang berkaitan dengan pencarian dan pemrosesan file konten.
232
244
  */
233
245
  content: {
234
246
  /**
235
- * File extensions to scan for dictionaries.
236
- * Default: ['.content.ts', '.content.js', '.content.json', etc.]
247
+ * Ekstensi file untuk memindai kamus.
248
+ * Default: ['.content.ts', '.content.js', '.content.json', dll]
237
249
  */
238
250
  fileExtensions: [".content.ts", ".content.js", ".content.json"],
239
251
 
240
252
  /**
241
- * Directories where .content files are located.
253
+ * Direktori tempat file .content berada.
242
254
  * Default: ["."]
243
255
  */
244
256
  contentDir: ["src"],
245
257
 
246
258
  /**
247
- * Directories where source code is located.
248
- * Used for build optimization and code transformation.
259
+ * Direktori tempat kode sumber berada.
260
+ * Digunakan untuk optimasi build dan transformasi kode.
249
261
  * Default: ["."]
250
262
  */
251
263
  codeDir: ["src"],
252
264
 
253
265
  /**
254
- * Patterns to exclude from scanning.
255
- * Default: ['node_modules', '.intlayer', etc.]
266
+ * Pola yang dikecualikan dari pemindaian.
267
+ * Default: ['node_modules', '.intlayer', dll]
256
268
  */
257
269
  excludedPath: ["node_modules"],
258
270
 
259
271
  /**
260
- * Whether to watch for changes and rebuild dictionaries in development.
261
- * Default: true in development
272
+ * Apakah akan memantau perubahan dan membangun kembali kamus selama pengembangan.
273
+ * Default: true dalam pengembangan
262
274
  */
263
275
  watch: true,
264
276
 
265
277
  /**
266
- * Command to format newly created / updated .content files.
278
+ * Perintah yang digunakan untuk memformat file .content yang baru dibuat / diperbarui.
267
279
  */
268
280
  formatCommand: 'npx prettier --write "{{file}}"',
269
281
  },
270
282
 
271
283
  /**
272
- * Visual Editor configuration.
284
+ * Konfigurasi Visual Editor.
273
285
  */
274
286
  editor: {
275
287
  /**
276
- * Whether the visual editor is enabled.
288
+ * Apakah visual editor diaktifkan.
277
289
  * Default: false
278
290
  */
279
291
  enabled: true,
280
292
 
281
293
  /**
282
- * URL of your application for origin validation.
294
+ * URL aplikasi Anda untuk validasi asal (origin validation).
283
295
  * Default: ""
284
296
  */
285
297
  applicationURL: "http://localhost:3000",
286
298
 
287
299
  /**
288
- * Port for the local editor server.
300
+ * Port untuk server editor lokal.
289
301
  * Default: 8000
290
302
  */
291
303
  port: 8000,
292
304
 
293
305
  /**
294
- * Public URL for the editor.
306
+ * URL publik untuk editor.
295
307
  * Default: "http://localhost:8000"
296
308
  */
297
309
  editorURL: "http://localhost:8000",
298
310
 
299
311
  /**
300
- * Intlayer CMS URL.
312
+ * URL Intlayer CMS.
301
313
  * Default: "https://app.intlayer.org"
302
314
  */
303
315
  cmsURL: "https://app.intlayer.org",
304
316
 
305
317
  /**
306
- * Backend API URL.
318
+ * URL API Backend.
307
319
  * Default: "https://back.intlayer.org"
308
320
  */
309
321
  backendURL: "https://back.intlayer.org",
310
322
 
311
323
  /**
312
- * Whether to enable real-time content synchronization.
324
+ * Apakah akan mengaktifkan sinkronisasi konten secara real-time.
313
325
  * Default: false
314
326
  */
315
327
  liveSync: true,
316
328
  },
317
329
 
318
330
  /**
319
- * AI-powered translation and generation settings.
331
+ * Pengaturan terjemahan dan pembuatan konten berbasis AI.
320
332
  */
321
333
  ai: {
322
334
  /**
323
- * AI provider to use.
324
- * Options: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
335
+ * Penyedia AI yang akan digunakan.
336
+ * Opsi: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
325
337
  * Default: 'openai'
326
338
  */
327
339
  provider: "openai",
328
340
 
329
341
  /**
330
- * Model to use from the selected provider.
342
+ * Model dari penyedia yang dipilih untuk digunakan.
331
343
  */
332
344
  model: "gpt-4o",
333
345
 
334
346
  /**
335
- * Provider API key.
347
+ * Kunci API penyedia.
336
348
  */
337
349
  apiKey: process.env.OPENAI_API_KEY,
338
350
 
339
351
  /**
340
- * Global context to guide the AI in generating translations.
352
+ * Konteks global untuk memandu AI dalam menghasilkan terjemahan.
341
353
  */
342
- applicationContext: "This is a travel booking application.",
354
+ applicationContext: "Ini adalah aplikasi pemesanan perjalanan.",
343
355
 
344
356
  /**
345
- * Base URL for the AI API.
357
+ * URL dasar untuk API AI.
346
358
  */
359
+ baseURL: "http://localhost:3000",
360
+
347
361
  /**
348
- * Data serialisasi
362
+ * Serialisasi Data (Data Serialization)
349
363
  *
350
364
  * Opsi:
351
- * - "json": Standar, andal; menggunakan lebih banyak token.
352
- * - "toon": Token lebih sedikit, kurang konsisten dibandingkan JSON.
365
+ * - "json": Default, kuat; menggunakan lebih banyak token.
366
+ * - "toon": Menggunakan lebih sedikit token, kurang konsisten dibandingkan JSON.
353
367
  *
354
368
  * Default: "json"
355
369
  */
@@ -357,142 +371,142 @@ const config: IntlayerConfig = {
357
371
  },
358
372
 
359
373
  /**
360
- * Build and optimization settings.
374
+ * Pengaturan build dan optimasi.
361
375
  */
362
376
  build: {
363
377
  /**
364
- * Build execution mode.
365
- * - "auto": Automatic build during app build.
366
- * - "manual": Requires explicit build command.
378
+ * Mode eksekusi build.
379
+ * - "auto": Build secara otomatis selama build aplikasi.
380
+ * - "manual": Memerlukan perintah build eksplisit.
367
381
  * Default: "auto"
368
382
  */
369
383
  mode: "auto",
370
384
 
371
385
  /**
372
- * Whether to optimize the final bundle by pruning unused dictionaries.
373
- * Default: true in production
386
+ * Apakah akan mengoptimalkan bundle akhir dengan menghapus kamus yang tidak digunakan.
387
+ * Default: true dalam produksi
374
388
  */
375
389
  optimize: true,
376
390
 
377
391
  /**
378
- * Output format for generated dictionary files.
379
- * Default: ['esm', 'cjs']
392
+ * Format output untuk file kamus yang dihasilkan.
393
+ * Default: ['cjs', 'esm']
380
394
  */
381
- outputFormat: ["esm"],
395
+ outputFormat: ["cjs", "esm"],
382
396
 
383
397
  /**
384
- * Indicates if the build should check TypeScript types.
398
+ * Menunjukkan apakah build harus memeriksa tipe TypeScript.
385
399
  * Default: false
386
400
  */
387
401
  checkTypes: false,
388
402
  },
389
403
 
390
404
  /**
391
- * Logger configuration.
405
+ * Konfigurasi Logger.
392
406
  */
393
407
  log: {
394
408
  /**
395
- * Logging level.
396
- * - "default": Standard logging.
397
- * - "verbose": Detailed debug logging.
398
- * - "disabled": No logging.
409
+ * Tingkat logging.
410
+ * - "default": Logging standar.
411
+ * - "verbose": Logging debug mendalam.
412
+ * - "disabled": Menonaktifkan logging.
399
413
  * Default: "default"
400
414
  */
401
415
  mode: "default",
402
416
 
403
417
  /**
404
- * Prefix for all log messages.
418
+ * Awalan untuk semua pesan log.
405
419
  * Default: "[intlayer]"
406
420
  */
407
421
  prefix: "[intlayer]",
408
422
  },
409
423
 
410
424
  /**
411
- * System configuration (Advanced use cases)
425
+ * Konfigurasi Sistem (Untuk penggunaan tingkat lanjut)
412
426
  */
413
427
  system: {
414
428
  /**
415
- * Directory for storing localization dictionaries.
429
+ * Direktori untuk menyimpan kamus yang dilokalisasi.
416
430
  */
417
431
  dictionariesDir: ".intlayer/dictionary",
418
432
 
419
433
  /**
420
- * Directory for module augmentation.
434
+ * Direktori untuk augmentasi modul TypeScript.
421
435
  */
422
436
  moduleAugmentationDir: ".intlayer/types",
423
437
 
424
438
  /**
425
- * Directory for storing unmerged dictionaries.
439
+ * Direktori untuk menyimpan kamus yang belum digabungkan.
426
440
  */
427
441
  unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
428
442
 
429
443
  /**
430
- * Directory for storing dictionary types.
444
+ * Direktori untuk menyimpan tipe kamus.
431
445
  */
432
446
  typesDir: ".intlayer/types",
433
447
 
434
448
  /**
435
- * Directory where main application files are stored.
449
+ * Direktori tempat file aplikasi utama disimpan.
436
450
  */
437
451
  mainDir: ".intlayer/main",
438
452
 
439
453
  /**
440
- * Directory where the configuration files are stored.
454
+ * Direktori tempat file konfigurasi disimpan.
441
455
  */
442
456
  configDir: ".intlayer/config",
443
457
 
444
458
  /**
445
- * Directory where the cache files are stored.
459
+ * Direktori tempat file cache disimpan.
446
460
  */
447
461
  cacheDir: ".intlayer/cache",
448
462
  },
449
463
 
450
464
  /**
451
- * Compiler configuration (Advanced use cases)
465
+ * Konfigurasi Kompiler (Compiler) (Untuk penggunaan tingkat lanjut)
452
466
  */
453
467
  compiler: {
454
468
  /**
455
469
  * Menunjukkan apakah kompiler harus diaktifkan.
456
470
  *
457
- * - false : Menonaktifkan kompiler.
458
- * - true : Mengaktifkan kompiler.
459
- * - "build-only" : Melewatkan kompiler selama pengembangan untuk mempercepat waktu mulai.
471
+ * - false: Menonaktifkan kompiler.
472
+ * - true: Mengaktifkan kompiler.
473
+ * - "build-only": Melewati kompiler selama pengembangan dan mempercepat waktu startup.
460
474
  *
461
- * Nilai default : false
475
+ * Default: false
462
476
  */
463
477
  enabled: true,
464
478
 
465
479
  /**
466
- * Mendefinisikan jalur file output. Menggantikan `outputDir`.
480
+ * Mendefinisikan jalur untuk file output. Menggantikan `outputDir`.
467
481
  *
468
- * - Jalur yang dimulai dengan `./` diselesaikan relatif terhadap direktori komponen.
469
- * - Jalur yang dimulai dengan `/` diselesaikan relatif terhadap root proyek (`baseDir`).
482
+ * - Jalur `./` diselesaikan relatif terhadap direktori komponen.
483
+ * - Jalur `/` diselesaikan relatif terhadap akar proyek (`baseDir`).
470
484
  *
471
- * - Menyertakan variabel `{{locale}}` dalam jalur akan mengaktifkan pembuatan kamus yang dipisahkan berdasarkan bahasa.
485
+ * - Menyertakan variabel `{{locale}}` dalam jalur akan memicu pembuatan kamus terpisah per-bahasa.
472
486
  *
473
487
  * Contoh:
474
488
  * ```ts
475
489
  * {
476
- * // Buat file .content.ts multi-bahasa di sebelah komponen
490
+ * // Buat file .content.ts multilingual di sebelah komponen
477
491
  * output: ({ fileName, extension }) => `./${fileName}${extension}`,
478
492
  *
479
- * // output: './{{fileName}}{{extension}}', // Padanan menggunakan string template
493
+ * // output: './{{fileName}}{{extension}}', // Setara menggunakan template string
480
494
  * }
481
495
  * ```
482
496
  *
483
497
  * ```ts
484
498
  * {
485
- * // Buat file JSON terpusat berdasarkan bahasa di root proyek
499
+ * // Buat JSON terpusat per-bahasa di akar proyek
486
500
  * output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
487
501
  *
488
- * // output: '/locales/{{locale}}/{{key}}.content.json', // Padanan menggunakan string template
502
+ * // output: '/locales/{{locale}}/{{key}}.content.json', // Setara menggunakan template string
489
503
  * }
490
504
  * ```
491
505
  *
492
506
  * Daftar variabel:
493
507
  * - `fileName`: Nama file.
494
508
  * - `key`: Kunci konten.
495
- * - `locale`: Bahasa konten.
509
+ * - `locale`: Locale konten.
496
510
  * - `extension`: Ekstensi file.
497
511
  * - `componentFileName`: Nama file komponen.
498
512
  * - `componentExtension`: Ekstensi file komponen.
@@ -504,23 +518,23 @@ const config: IntlayerConfig = {
504
518
 
505
519
  /**
506
520
  * Menunjukkan apakah komponen harus disimpan setelah ditransformasi.
507
- * Dengan begitu, kompiler hanya perlu dijalankan sekali untuk mentransformasi aplikasi, lalu dapat dihapus.
521
+ * Dengan cara ini, kompiler dapat dijalankan sekali saja untuk mentransformasi aplikasi dan kemudian dapat dihapus.
508
522
  */
509
523
  saveComponents: false,
510
524
 
511
525
  /**
512
- * Masukkan konten saja dalam file yang dihasilkan. Berguna untuk output JSON i18next atau ICU MessageFormat per bahasa.
526
+ * Hanya menyisipkan konten ke dalam file yang dihasilkan. Berguna untuk output JSON per-bahasa untuk i18next atau ICU MessageFormat.
513
527
  */
514
528
  noMetadata: false,
515
529
 
516
530
  /**
517
531
  * Awalan kunci kamus
518
532
  */
519
- dictionaryKeyPrefix: "", // Tambahkan awalan opsional untuk kunci kamus yang diekstrak
533
+ dictionaryKeyPrefix: "", // Tambahkan awalan opsional ke kunci kamus yang diekstrak
520
534
  },
521
535
 
522
536
  /**
523
- * Custom schemas to validate the dictionaries content.
537
+ * Schema kustom untuk memvalidasi konten kamus.
524
538
  */
525
539
  schemas: {
526
540
  "my-schema": z.object({
@@ -529,7 +543,7 @@ const config: IntlayerConfig = {
529
543
  },
530
544
 
531
545
  /**
532
- * Plugins configuration.
546
+ * Konfigurasi plugin.
533
547
  */
534
548
  plugins: [],
535
549
  };
@@ -537,248 +551,114 @@ const config: IntlayerConfig = {
537
551
  export default config;
538
552
  ````
539
553
 
540
- ## Referensi Konfigurasi
554
+ ---
555
+
556
+ ## Referensi Konfigurasi (Configuration Reference)
541
557
 
542
- Bagian berikut menjelaskan berbagai pengaturan konfigurasi yang tersedia untuk Intlayer.
558
+ Bagian berikut menjelaskan berbagai pengaturan konfigurasi yang tersedia di Intlayer.
543
559
 
544
560
  ---
545
561
 
546
- ### Konfigurasi Internasionalisasi
547
-
548
- Mendefinisikan pengaturan yang terkait dengan internasionalisasi, termasuk locale yang tersedia dan locale default untuk aplikasi.
549
-
550
- #### Properti
551
-
552
- - **locales**:
553
- - _Tipe_: `string[]`
554
- - _Default_: `['en']`
555
- - _Deskripsi_: Daftar locale yang didukung dalam aplikasi.
556
- - _Contoh_: `['en', 'fr', 'es']`
557
-
558
- - **requiredLocales**:
559
- - _Tipe_: `string[]`
560
- - _Default_: `[]`
561
- - _Deskripsi_: Daftar locale yang wajib ada dalam aplikasi.
562
- - _Contoh_: `[]`
563
- - _Catatan_: Jika kosong, semua locale diwajibkan dalam mode `strict`.
564
- - _Catatan_: Pastikan locale yang wajib juga didefinisikan dalam field `locales`.
565
- - **strictMode**:
566
- - _Tipe_: `string`
567
- - _Default_: `inclusive`
568
- - _Deskripsi_: Menjamin implementasi konten internasionalisasi yang kuat menggunakan typescript.
569
- - _Catatan_: Jika diatur ke "strict", fungsi terjemahan `t` akan mengharuskan setiap locale yang dideklarasikan untuk didefinisikan. Jika satu locale hilang, atau jika locale tidak dideklarasikan dalam konfigurasi Anda, maka akan menghasilkan error.
570
- - _Catatan_: Jika diatur ke "inclusive", fungsi terjemahan `t` akan mengharuskan setiap locale yang dideklarasikan untuk didefinisikan. Jika satu locale hilang, akan memberikan peringatan. Namun akan menerima jika locale tidak dideklarasikan dalam konfigurasi Anda, tetapi ada.
571
- - _Catatan_: Jika diatur ke "loose", fungsi terjemahan `t` akan menerima locale yang ada.
572
-
573
- - **defaultLocale**:
574
- - _Tipe_: `string`
575
- - _Default_: `'en'`
576
- - _Deskripsi_: Locale default yang digunakan sebagai fallback jika locale yang diminta tidak ditemukan.
577
- - _Contoh_: `'en'`
578
- - _Catatan_: Ini digunakan untuk menentukan locale ketika tidak ada yang ditentukan dalam URL, cookie, atau header.
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. |
579
572
 
580
573
  ---
581
574
 
582
- ### Konfigurasi Editor
583
-
584
- Mendefinisikan pengaturan terkait editor terintegrasi, termasuk port server dan status aktif.
585
-
586
- #### Properti
587
-
588
- - **applicationURL**:
589
- - _Tipe_: `string`
590
- - _Default_: `http://localhost:3000`
591
- - _Deskripsi_: URL aplikasi. Digunakan untuk membatasi asal editor demi alasan keamanan.
592
- - _Contoh_:
593
- - `'http://localhost:3000'`
594
- - `'https://example.com'`
595
- - `process.env.INTLAYER_EDITOR_URL`
596
- - _Catatan_: URL aplikasi. Digunakan untuk membatasi asal editor demi alasan keamanan. Jika diatur ke `'*'`, editor dapat diakses dari asal mana pun.
597
-
598
- - **port**:
599
- - _Tipe_: `number`
600
- - _Default_: `8000`
601
- - _Deskripsi_: Port yang digunakan oleh server editor visual.
602
-
603
- - **editorURL**:
604
- - _Tipe_: `string`
605
- - _Default_: `'http://localhost:8000'`
606
- - _Deskripsi_: URL server editor. Digunakan untuk membatasi asal editor demi alasan keamanan.
607
- - `'http://localhost:3000'`
608
- - `'https://example.com'`
609
- - `process.env.INTLAYER_EDITOR_URL`
610
- - _Catatan_: URL server editor yang dapat diakses dari aplikasi. Digunakan untuk membatasi asal yang dapat berinteraksi dengan aplikasi demi alasan keamanan. Jika diatur ke `'*'`, editor dapat diakses dari asal mana pun. Harus diatur jika port diubah, atau jika editor dihosting di domain yang berbeda.
611
-
612
- - **cmsURL**:
613
- - _Tipe_: `string`
614
- - _Default_: `'https://intlayer.org'`
615
- - _Deskripsi_: URL dari Intlayer CMS.
616
- - _Contoh_: `'https://intlayer.org'`
617
- - _Catatan_: URL dari Intlayer CMS.
618
-
619
- - **backendURL**:
620
- - _Tipe_: `string`
621
- - _Default_: `https://back.intlayer.org`
622
- - _Deskripsi_: URL dari server backend.
623
- - _Contoh_: `http://localhost:4000`
624
-
625
- - **enabled**:
626
- - _Tipe_: `boolean`
627
- - _Default_: `true`
628
- - _Deskripsi_: Menunjukkan apakah aplikasi berinteraksi dengan visual editor.
629
- - _Contoh_: `process.env.NODE_ENV !== 'production'`
630
- - _Catatan_: Jika true, editor akan dapat berinteraksi dengan aplikasi. Jika false, editor tidak akan dapat berinteraksi dengan aplikasi. Dalam hal apa pun, editor hanya dapat diaktifkan oleh visual editor. Menonaktifkan editor untuk lingkungan tertentu adalah cara untuk menegakkan keamanan.
631
-
632
- - **clientId**:
633
- - _Tipe_: `string` | `undefined`
634
- - _Default_: `undefined`
635
- - _Deskripsi_: clientId dan clientSecret memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan autentikasi oAuth2. Token akses digunakan untuk mengautentikasi pengguna yang terkait dengan proyek. Untuk mendapatkan token akses, kunjungi https://app.intlayer.org/project dan buat akun.
636
- - _Contoh_: `true`
637
- - _Catatan_: Penting: clientId dan clientSecret harus dijaga kerahasiaannya dan tidak dibagikan secara publik. Pastikan untuk menyimpannya di lokasi yang aman, seperti variabel lingkungan.
638
-
639
- - **clientSecret**:
640
- - _Tipe_: `string` | `undefined`
641
- - _Default_: `undefined`
642
- - _Deskripsi_: clientId dan clientSecret memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan autentikasi oAuth2. Token akses digunakan untuk mengautentikasi pengguna yang terkait dengan proyek. Untuk mendapatkan token akses, kunjungi https://app.intlayer.org/project dan buat akun.
643
- - _Contoh_: `true`
644
- - _Catatan_: Penting: clientId dan clientSecret harus dijaga kerahasiaannya dan tidak dibagikan secara publik. Pastikan untuk menyimpannya di lokasi yang aman, seperti variabel lingkungan.
645
-
646
- - **dictionaryPriorityStrategy**:
647
- - _Tipe_: `string`
648
- - _Default_: `'local_first'`
649
- - _Deskripsi_: Strategi untuk memprioritaskan kamus dalam kasus adanya kamus lokal dan jauh. Jika diatur ke `'distant_first'`, aplikasi akan memprioritaskan kamus jauh dibandingkan kamus lokal. Jika diatur ke `'local_first'`, aplikasi akan memprioritaskan kamus lokal dibandingkan kamus jauh.
650
- - _Contoh_: `'distant_first'`
651
-
652
- - **liveSync**:
653
- - _Tipe_: `boolean`
654
- - _Default_: `false`
655
- - _Deskripsi_: Menunjukkan apakah server aplikasi harus melakukan hot reload konten aplikasi ketika perubahan terdeteksi pada CMS / Visual Editor / Backend.
656
- - _Contoh_: `true`
657
- - _Catatan_: Misalnya, ketika kamus baru ditambahkan atau diperbarui, aplikasi akan memperbarui konten yang ditampilkan di halaman.
658
- - _Catatan_: Live sync membutuhkan eksternalisasi konten aplikasi ke server lain. Itu berarti dapat sedikit memengaruhi performa aplikasi. Untuk membatasi hal ini, kami menyarankan untuk meng-host aplikasi dan server live sync pada mesin yang sama. Selain itu, kombinasi live sync dan `optimize` dapat menghasilkan sejumlah besar permintaan ke server live sync. Tergantung pada infrastruktur Anda, kami menyarankan untuk menguji kedua opsi dan kombinasi keduanya.
659
-
660
- - **liveSyncPort**:
661
- - _Tipe_: `number`
662
- - _Default_: `4000`
663
- - _Deskripsi_: Port dari server live sync.
664
- - _Contoh_: `4000`
665
- - _Catatan_: Port dari server live sync.
666
-
667
- - **liveSyncURL**:
668
- - _Tipe_: `string`
669
- - _Default_: `'http://localhost:{liveSyncPort}'`
670
- - _Deskripsi_: URL dari server live sync.
671
- - _Contoh_: `'https://example.com'`
672
- - _Catatan_: Mengarah ke localhost secara default tetapi dapat diubah ke URL mana pun dalam kasus server live sync jarak jauh.
673
-
674
- ### Konfigurasi Routing
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 | 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 | 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)
675
595
 
676
596
  Pengaturan yang mengontrol perilaku routing, termasuk struktur URL, penyimpanan locale, dan penanganan middleware.
677
597
 
678
- #### Properti
679
-
680
- - **mode**:
681
- - _Tipe_: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
682
- - _Default_: `'prefix-no-default'`
683
- - _Deskripsi_: Mode routing URL untuk penanganan locale.
684
- - _Contoh_:
685
- - `'prefix-no-default'`: `/dashboard` (en) atau `/fr/dashboard` (fr)
686
- - `'prefix-all'`: `/en/dashboard` (en) atau `/fr/dashboard` (fr)
687
- - `'no-prefix'`: `/dashboard` (locale ditangani dengan cara lain)
688
- - `'search-params'`: `/dashboard?locale=fr`
689
- - _Catatan_: Pengaturan ini tidak memengaruhi manajemen cookie atau penyimpanan locale.
690
-
691
- - **storage**:
692
- - _Tipe_: `false | 'cookie' | 'localStorage' | 'sessionStorage' | 'header' | CookiesAttributes | StorageAttributes | Array`
693
- - _Default_: `'localStorage'`
694
- - _Deskripsi_: Konfigurasi untuk menyimpan locale di sisi klien.
695
-
696
- - **cookie**:
697
- - _Deskripsi_: Menyimpan data dalam cookie, potongan kecil data yang disimpan di browser klien, dapat diakses di sisi klien dan server.
698
- - _Catatan_: Untuk penyimpanan yang sesuai dengan GDPR, pastikan persetujuan pengguna yang tepat sebelum penggunaan.
699
- - _Catatan_: Parameter cookie dapat disesuaikan jika diatur sebagai CookiesAttributes (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`).
700
-
701
- - **localStorage**:
702
- - _Deskripsi_: Menyimpan data di browser tanpa tanggal kedaluwarsa, memungkinkan data bertahan antar sesi, hanya dapat diakses di sisi klien.
703
- - _Catatan_: Ideal untuk menyimpan data jangka panjang tetapi perlu memperhatikan implikasi privasi dan keamanan karena sifatnya yang tidak kedaluwarsa kecuali secara eksplisit dihapus.
704
- - _Catatan_: Penyimpanan locale hanya dapat diakses di sisi klien, proxy intlayer tidak akan dapat mengaksesnya.
705
- - _Catatan_: Parameter penyimpanan locale dapat disesuaikan jika diatur sebagai StorageAttributes (`{ type: 'localStorage', name: 'custom-locale' }`).
706
-
707
- - **sessionStorage**:
708
- - _Deskripsi_: Menyimpan data selama durasi sesi halaman, artinya data akan dihapus setelah tab atau jendela ditutup, hanya dapat diakses di sisi klien.
709
- - _Catatan_: Cocok untuk penyimpanan data sementara untuk setiap sesi.
710
- - _Catatan_: Penyimpanan locale hanya dapat diakses di sisi klien, proxy intlayer tidak akan dapat mengaksesnya.
711
- - _Catatan_: Parameter penyimpanan locale dapat disesuaikan jika diatur sebagai StorageAttributes (`{ type: 'sessionStorage', name: 'custom-locale' }`).
712
-
713
- - **header**:
714
- - _Deskripsi_: Memanfaatkan header HTTP untuk menyimpan atau mengirim data locale, cocok untuk penentuan bahasa di sisi server.
715
- - _Catatan_: Berguna dalam panggilan API untuk menjaga konsistensi pengaturan bahasa di seluruh permintaan.
716
- - _Catatan_: Header hanya dapat diakses di sisi server, sisi klien tidak akan dapat mengaksesnya.
717
- - _Catatan_: Nama header dapat disesuaikan jika diatur sebagai StorageAttributes (`{ type: 'header', name: 'custom-locale' }`).
718
-
719
- - **basePath**:
720
- - _Tipe_: `string`
721
- - _Default_: `''`
722
- - _Deskripsi_: Jalur dasar untuk URL aplikasi.
723
- - _Contoh_: `'/my-app'`
724
- - _Catatan_:
725
- - Jika aplikasi dihosting di `https://example.com/my-app`
726
- - Jalur dasar adalah `'/my-app'`
727
- - URL akan menjadi `https://example.com/my-app/en`
728
- - Jika jalur dasar tidak diatur, URL akan menjadi `https://example.com/en`
729
-
730
- - **rewrite**:
731
- - _Tipe_: `Record<string, StrictModeLocaleMap<string>>`
732
- - _Default_: `undefined`
733
- - _Deskripsi_: Aturan penulisan ulang URL khusus yang menggantikan mode routing default untuk jalur tertentu. Memungkinkan Anda untuk mendefinisikan jalur khusus bahasa yang berbeda dari perilaku routing standar. Mendukung parameter rute dinamis menggunakan sintaks `[param]`.
734
- - _Contoh_:
735
- ```typescript
736
- routing: {
737
- mode: "prefix-no-default", // Strategi fallback
738
- rewrite: nextjsRewrite({
739
- "/[locale]/about": {
740
- en: "/[locale]/about",
741
- fr: "/[locale]/a-propos",
742
- },
743
- "/[locale]/product/[slug]": {
744
- en: "/[locale]/product/[slug]",
745
- fr: "/[locale]/produit/[slug]",
746
- },
747
- "/[locale]/blog/[category]/[id]": {
748
- en: "/[locale]/blog/[category]/[id]",
749
- fr: "/[locale]/journal/[category]/[id]",
750
- },
751
- }),
752
- }
753
- ```
754
- - _Catatan_: Aturan penulisan ulang memiliki prioritas di atas perilaku `mode` default. Jika jalur cocok dengan aturan penulisan ulang, jalur yang dilokalisasi dari konfigurasi penulisan ulang akan digunakan alih-alih prefiks bahasa standar.
755
- - _Catatan_: Parameter rute dinamis didukung menggunakan notasi kurung siku (misalnya, `[slug]`, `[id]`). Nilai parameter secara otomatis diekstrak dari URL dan diinterpolasi ke dalam jalur yang ditulis ulang.
756
- - _Catatan_: Bekerja dengan aplikasi Next.js dan Vite. Middleware/proxy akan secara otomatis menulis ulang permintaan masuk untuk mencocokkan struktur rute internal.
757
- - _Catatan_: Saat menghasilkan URL dengan `getLocalizedUrl()`, aturan penulisan ulang secara otomatis diterapkan jika cocok dengan jalur yang disediakan.
758
- - _Referensi_: Untuk informasi lebih lanjut, lihat [Penulisan Ulang URL Kustom](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/custom_url_rewrites.md).
759
-
760
- #### Atribut Cookie
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)
761
637
 
762
638
  Saat menggunakan penyimpanan cookie, Anda dapat mengonfigurasi atribut cookie tambahan:
763
639
 
764
- - **name**: Nama cookie (default: `'INTLAYER_LOCALE'`)
765
- - **domain**: Domain cookie (default: tidak ditentukan)
766
- - **path**: Jalur cookie (default: tidak ditentukan)
767
- - **secure**: Memerlukan HTTPS (default: tidak ditentukan)
768
- - **httpOnly**: Flag hanya HTTP (default: tidak ditentukan)
769
- - **sameSite**: Kebijakan SameSite (`'strict' | 'lax' | 'none'`)
770
- - **expires**: Tanggal kedaluwarsa atau jumlah hari (default: undefined)
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` |
771
649
 
772
- #### Atribut Penyimpanan Locale
650
+ #### Atribut Penyimpanan Locale (Locale Storage Attributes)
773
651
 
774
652
  Saat menggunakan localStorage atau sessionStorage:
775
653
 
776
- - **type**: Tipe penyimpanan (`'localStorage' | 'sessionStorage'`)
777
- - **name**: Nama kunci penyimpanan (default: `'INTLAYER_LOCALE'`)
654
+ | Field | Tipe | Deskripsi |
655
+ | ------ | ---------------------------------------- | ---------------------------------------------------- |
656
+ | `type` | `'localStorage' &#124; 'sessionStorage'` | Tipe penyimpanan. |
657
+ | `name` | `string` | Nama kunci penyimpanan. Default: `'INTLAYER_LOCALE'` |
778
658
 
779
- #### Contoh Konfigurasi
659
+ #### Contoh Konfigurasi (Configuration Examples)
780
660
 
781
- Berikut beberapa contoh konfigurasi umum untuk struktur routing v7 yang baru:
661
+ Berikut adalah beberapa contoh konfigurasi umum untuk struktur routing v7 yang baru:
782
662
 
783
663
  **Konfigurasi Dasar (Default)**:
784
664
 
@@ -793,7 +673,6 @@ const config: IntlayerConfig = {
793
673
  routing: {
794
674
  mode: "prefix-no-default",
795
675
  storage: "localStorage",
796
- headerName: "x-intlayer-locale",
797
676
  basePath: "",
798
677
  },
799
678
  };
@@ -801,7 +680,7 @@ const config: IntlayerConfig = {
801
680
  export default config;
802
681
  ```
803
682
 
804
- **Konfigurasi Sesuai GDPR**:
683
+ **Konfigurasi Patuh GDPR**:
805
684
 
806
685
  ```typescript
807
686
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -826,7 +705,6 @@ const config: IntlayerConfig = {
826
705
  httpOnly: false,
827
706
  },
828
707
  ],
829
- headerName: "x-intlayer-locale",
830
708
  basePath: "",
831
709
  },
832
710
  };
@@ -834,7 +712,7 @@ const config: IntlayerConfig = {
834
712
  export default config;
835
713
  ```
836
714
 
837
- **Mode Parameter Pencarian**:
715
+ **Mode Parameter Pencarian (Search Parameters Mode)**:
838
716
 
839
717
  ```typescript
840
718
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -847,7 +725,6 @@ const config: IntlayerConfig = {
847
725
  routing: {
848
726
  mode: "search-params",
849
727
  storage: "localStorage",
850
- headerName: "x-intlayer-locale",
851
728
  basePath: "",
852
729
  },
853
730
  };
@@ -855,7 +732,7 @@ const config: IntlayerConfig = {
855
732
  export default config;
856
733
  ```
857
734
 
858
- **Mode Tanpa Prefix dengan Penyimpanan Kustom**:
735
+ **Mode Tanpa Awalan (No Prefix Mode) dengan Penyimpanan Kustom**:
859
736
 
860
737
  ```typescript
861
738
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -871,7 +748,6 @@ const config: IntlayerConfig = {
871
748
  type: "sessionStorage",
872
749
  name: "app-locale",
873
750
  },
874
- headerName: "x-custom-locale",
875
751
  basePath: "/my-app",
876
752
  },
877
753
  };
@@ -879,357 +755,168 @@ const config: IntlayerConfig = {
879
755
  export default config;
880
756
  ```
881
757
 
882
- ---
758
+ **Penulisan Ulang URL Kustom dengan Jalur Dinamis**:
883
759
 
884
- ### Konfigurasi Konten
885
-
886
- Pengaturan terkait penanganan konten dalam aplikasi, termasuk nama direktori, ekstensi file, dan konfigurasi turunan.
887
-
888
- #### Properti
889
-
890
- - **watch**:
891
- - _Tipe_: `boolean`
892
- - _Default_: `process.env.NODE_ENV === 'development'`
893
- - _Deskripsi_: Menunjukkan apakah Intlayer harus memantau perubahan pada file deklarasi konten dalam aplikasi untuk membangun kembali kamus terkait.
894
-
895
- - **fileExtensions**:
896
- - _Tipe_: `string[]`
897
- - _Default_: `['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.tsx', '.content.jsx']`
898
- - _Deskripsi_: Ekstensi file yang dicari saat membangun kamus.
899
- - _Contoh_: `['.data.ts', '.data.js', '.data.json']`
900
- - _Catatan_: Menyesuaikan ekstensi file dapat membantu menghindari konflik.
901
-
902
- - **contentDir**:
903
- - _Tipe_: `string[]`
904
- - _Default_: `['.']`
905
- - _Contoh_: `['src', '../../ui-library', require.resolve("@my-package/content")]`
906
- - _Deskripsi_: Jalur direktori tempat file definisi konten (`.content.*`) disimpan.
907
- - _Catatan_: Ini digunakan untuk memantau file konten untuk membangun ulang kamus.
908
-
909
- - **codeDir**:
910
- - _Tipe_: `string[]`
911
- - _Default_: `['.']`
912
- - _Contoh_: `['src', '../../ui-library']`
913
- - _Deskripsi_: Jalur direktori tempat kode disimpan, relatif terhadap direktori dasar.
914
- - _Catatan_: Ini digunakan untuk memantau file kode untuk ditransformasikan (pemangkasan, optimasi). Menjaga ini terpisah dari `contentDir` dapat meningkatkan kinerja build dengan menghindari pemindaian yang tidak perlu pada file konten.
915
-
916
- - **dictionariesDir**:
917
- - _Tipe_: `string`
918
- - _Default_: `'.intlayer/dictionary'`
919
- - _Deskripsi_: Jalur direktori untuk menyimpan hasil sementara atau output.
920
-
921
- - **moduleAugmentationDir**:
922
- - _Tipe_: `string`
923
- - _Default_: `'.intlayer/types'`
924
- - _Deskripsi_: Direktori untuk augmentasi modul, memungkinkan saran IDE yang lebih baik dan pengecekan tipe.
925
- - _Contoh_: `'intlayer-types'`
926
- - _Catatan_: Pastikan untuk memasukkan ini dalam `tsconfig.json`.
927
-
928
- - **unmergedDictionariesDir**:
929
- - _Tipe_: `string`
930
- - _Default_: `'.intlayer/unmerged_dictionary'`
931
- - _Deskripsi_: Direktori untuk menyimpan kamus yang belum digabungkan.
932
- - _Contoh_: `'translations'`
933
-
934
- - **typesDir**:
935
- - _Tipe_: `string`
936
- - _Default_: `'types'`
937
- - _Deskripsi_: Direktori untuk menyimpan tipe kamus.
938
- - _Contoh_: `'intlayer-types'`
939
-
940
- - **mainDir**:
941
- - _Tipe_: `string`
942
- - _Default_: `'main'`
943
- - _Deskripsi_: Direktori tempat file aplikasi utama disimpan.
944
- - _Contoh_: `'intlayer-main'`
945
-
946
- - **excludedPath**:
947
- - _Tipe_: `string[]`
948
- - _Default_: `['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']`
949
- - _Deskripsi_: Direktori yang dikecualikan dari pencarian konten.
950
- - _Catatan_: Pengaturan ini belum digunakan, tetapi direncanakan untuk implementasi di masa depan.
760
+ ```typescript
761
+ // intlayer.config.ts
762
+ import { nextjsRewrite } from "intlayer/routing";
951
763
 
952
- ---
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
+ };
953
788
 
954
- ### Konfigurasi Sistem
789
+ export default config;
790
+ ```
955
791
 
956
- Pengaturan terkait jalur internal dan hasil output Intlayer. Pengaturan ini biasanya bersifat internal dan tidak perlu diubah oleh pengguna.
792
+ ---
957
793
 
958
- #### Properti
794
+ ### Konfigurasi Konten (Content Configuration)
959
795
 
960
- - **baseDir**:
961
- - _Tipe_: `string`
962
- - _Default_: `process.cwd()`
963
- - _Deskripsi_: Direktori dasar untuk proyek.
964
- - _Contoh_: `'/path/to/project'`
965
- - _Catatan_: Ini digunakan untuk menyelesaikan semua direktori terkait Intlayer.
796
+ Pengaturan yang berkaitan dengan pemrosesan konten di dalam aplikasi (nama direktori, ekstensi file, dan konfigurasi turunan).
966
797
 
967
- - **formatCommand**:
968
- - _Tipe_: `string`
969
- - _Default_: `undefined`
970
- - _Deskripsi_: Perintah untuk memformat konten. Ketika intlayer menulis file .content Anda secara lokal, perintah ini akan digunakan untuk memformat konten.
971
- - _Contoh_: `'npx prettier --write "{{file}}" --log-level silent'` Menggunakan Prettier
972
- - _Contoh_: `'npx biome format "{{file}}" --write --log-level none'` Menggunakan Biome
973
- - _Contoh_: `'npx eslint --fix "{{file}}" --quiet'` Menggunakan ESLint
974
- - _Catatan_: Intlayer akan menggantikan {{file}} dengan path file yang akan diformat.
975
- - _Catatan_: Jika tidak diatur, Intlayer akan mencoba mendeteksi perintah format secara otomatis dengan mencoba menyelesaikan perintah berikut: prettier, biome, eslint.
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. |
976
806
 
977
- ### Konfigurasi Kamus
807
+ ---
808
+
809
+ ### Konfigurasi Kamus (Dictionary Configuration)
978
810
 
979
811
  Pengaturan yang mengontrol operasi kamus, termasuk perilaku pengisian otomatis dan pembuatan konten.
980
812
 
981
813
  Konfigurasi kamus ini memiliki dua tujuan utama:
982
814
 
983
- 1. **Nilai Default**: Mendefinisikan nilai default saat membuat file deklarasi konten
984
- 2. **Perilaku Cadangan**: Memberikan nilai cadangan ketika bidang tertentu tidak didefinisikan, memungkinkan Anda untuk menentukan perilaku operasi kamus secara global
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'` |
985
882
 
986
- Untuk informasi lebih lanjut tentang file deklarasi konten dan bagaimana nilai konfigurasi diterapkan, lihat [Dokumentasi File Konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
883
+ ---
884
+
885
+ ### Konfigurasi Kompiler (Compiler Configuration)
987
886
 
988
- #### Properti
887
+ Pengaturan untuk kompiler Intlayer (`intlayer compiler`).
989
888
 
990
- - **fill**
991
- - **description**
992
- - **locale**
993
- - **location**
994
- - **priority**
995
- - **live**
996
- - **schema**
997
- - **title**
998
- - **tags**
999
- - **version**
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. | `''` |
1000
896
 
1001
897
  ---
1002
898
 
1003
- ### Konfigurasi Logger
1004
-
1005
- Pengaturan yang mengontrol logger, termasuk prefix yang digunakan.
1006
-
1007
- #### Properti
1008
-
1009
- - **mode**:
1010
- - _Tipe_: `string`
1011
- - _Default_: `default`
1012
- - _Deskripsi_: Menunjukkan mode dari logger.
1013
- - _Opsi_: `default`, `verbose`, `disabled`
1014
- - _Contoh_: `default`
1015
- - _Catatan_: Mode dari logger. Mode verbose akan mencatat lebih banyak informasi, tetapi dapat digunakan untuk tujuan debugging. Mode disabled akan menonaktifkan logger.
1016
-
1017
- - **prefix**:
1018
- - _Tipe_: `string`
1019
- - _Default_: `'[intlayer] '`
1020
- - _Deskripsi_: Prefix dari logger.
1021
- - _Contoh_: `'[my custom prefix] '`
1022
- - _Catatan_: Prefix dari logger.
1023
-
1024
- ### Konfigurasi AI
1025
-
1026
- Pengaturan yang mengontrol fitur AI dari Intlayer, termasuk provider, model, dan API key.
1027
-
1028
- Konfigurasi ini bersifat opsional jika Anda terdaftar di [Intlayer Dashboard](https://app.intlayer.org/project) menggunakan access key. Intlayer akan secara otomatis mengelola solusi AI yang paling efisien dan hemat biaya untuk kebutuhan Anda. Menggunakan opsi default memastikan pemeliharaan jangka panjang yang lebih baik karena Intlayer terus diperbarui untuk menggunakan model yang paling relevan.
1029
-
1030
- Jika Anda lebih memilih menggunakan API key sendiri atau model tertentu, Anda dapat mendefinisikan konfigurasi AI kustom Anda.
1031
- Konfigurasi AI ini akan digunakan secara global di seluruh lingkungan Intlayer Anda. Perintah CLI akan menggunakan pengaturan ini sebagai default untuk perintah (misalnya `fill`), serta SDK, Visual Editor, dan CMS. Anda dapat menimpa nilai default ini untuk kasus penggunaan tertentu dengan menggunakan parameter perintah.
1032
-
1033
- Intlayer mendukung beberapa provider AI untuk fleksibilitas dan pilihan yang lebih baik. Provider yang saat ini didukung adalah:
1034
-
1035
- - **OpenAI** (default)
1036
- - **Anthropic Claude**
1037
- - **Mistral AI**
1038
- - **DeepSeek**
1039
- - **Google Gemini**
1040
- - **Meta Llama**
1041
- - **Ollama**
1042
- - **OpenRouter**
1043
- - **Alibaba Cloud**
1044
- - **Fireworks**
1045
- - **Hugging Face**
1046
- - **Groq**
1047
- - **Amazon Bedrock**
1048
- - **Google AI Studio**
1049
- - **Google Vertex**
1050
- - **Together.ai**
1051
- - **ollama**
1052
-
1053
- #### Properti
1054
-
1055
- - **provider**:
1056
- - _Tipe_: `string`
1057
- - _Default_: `'openai'`
1058
- - _Deskripsi_: Provider yang digunakan untuk fitur AI dari Intlayer.
1059
- - _Opsi_: `'openai'`, `'anthropic'`, `'mistral'`, `'deepseek'`, `'gemini'`, `'ollama'`, `'openrouter'`, `'alibaba'`, `'fireworks'`, `'groq'`, `'huggingface'`, `'bedrock'`, `'googleaistudio'`, `'googlevertex'`, `'togetherai'`
1060
- - _Contoh_: `'anthropic'`
1061
- - _Catatan_: Penyedia yang berbeda mungkin memerlukan kunci API yang berbeda dan memiliki model harga yang berbeda.
1062
-
1063
- - **model**:
1064
- - _Tipe_: `string`
1065
- - _Default_: Tidak ada
1066
- - _Deskripsi_: Model yang digunakan untuk fitur AI di Intlayer.
1067
- - _Contoh_: `'gpt-4o-2024-11-20'`
1068
- - _Catatan_: Model spesifik yang digunakan bervariasi tergantung penyedia.
1069
-
1070
- - **temperature**:
1071
- - _Tipe_: `number`
1072
- - _Default_: Tidak ada
1073
- - _Deskripsi_: Temperature mengontrol tingkat keacakan respons AI.
1074
- - _Contoh_: `0.1`
1075
- - _Catatan_: Temperature yang lebih tinggi akan membuat AI lebih kreatif dan kurang dapat diprediksi.
1076
-
1077
- - **apiKey**:
1078
- - _Tipe_: `string`
1079
- - _Default_: Tidak ada
1080
- - _Deskripsi_: Kunci API Anda untuk penyedia yang dipilih.
1081
- - _Contoh_: `process.env.OPENAI_API_KEY`
1082
- - _Catatan_: Penting: Kunci API harus dijaga kerahasiaannya dan tidak dibagikan secara publik. Pastikan untuk menyimpannya di lokasi yang aman, seperti variabel lingkungan.
1083
-
1084
- - **applicationContext**:
1085
- - _Tipe_: `string`
1086
- - _Default_: Tidak ada
1087
- - _Deskripsi_: Memberikan konteks tambahan tentang aplikasi Anda kepada model AI, membantu menghasilkan terjemahan yang lebih akurat dan sesuai konteks. Ini dapat mencakup informasi tentang domain aplikasi Anda, audiens target, nada, atau terminologi khusus.
1088
-
1089
- - **baseURL**:
1090
- - _Tipe_: `string`
1091
- - _Default_: Tidak ada
1092
- - _Deskripsi_: URL dasar untuk API AI.
1093
- - _Contoh_: `'https://api.openai.com/v1'`
1094
- - _Catatan_: Dapat digunakan untuk menunjuk ke endpoint API AI lokal atau kustom.
1095
-
1096
- - **dataSerialization**:
1097
- - _Tipe_: `'json' | 'toon'`
1098
- - _Default_: `'json'`
1099
- - _Deskripsi_: Format serialisasi data yang digunakan untuk fitur AI Intlayer.
1100
- - _Contoh_: `'toon'`
1101
- - _Catatan_: `json`: Standar, andal; menggunakan lebih banyak token. `toon`: Lebih sedikit token, kurang konsisten dibandingkan JSON.
1102
-
1103
- ### Konfigurasi Build
1104
-
1105
- Pengaturan yang mengontrol bagaimana Intlayer mengoptimalkan dan membangun internasionalisasi aplikasi Anda.
1106
-
1107
- Opsi build berlaku untuk plugin `@intlayer/babel` dan `@intlayer/swc`.
1108
-
1109
- > Dalam mode pengembangan, Intlayer menggunakan impor statis untuk kamus agar pengalaman pengembangan menjadi lebih sederhana.
1110
-
1111
- > Saat dioptimalkan, Intlayer akan mengganti panggilan kamus untuk mengoptimalkan chunking, sehingga bundel akhir hanya mengimpor kamus yang benar-benar digunakan.
1112
-
1113
- #### Properti
1114
-
1115
- - **mode**:
1116
- - _Tipe_: `'auto' | 'manual'`
1117
- - _Default_: `'auto'`
1118
- - _Deskripsi_: Mengontrol mode build.
1119
- - _Contoh_: `'manual'`
1120
- - _Catatan_: Jika 'auto', build akan diaktifkan secara otomatis saat aplikasi dibangun.
1121
- - _Catatan_: Jika 'manual', build akan disetel hanya ketika perintah build dieksekusi.
1122
- - _Catatan_: Dapat digunakan untuk menonaktifkan build kamus, misalnya ketika eksekusi di lingkungan Node.js harus dihindari.
1123
-
1124
- - **optimize**:
1125
- - _Tipe_: `boolean`
1126
- - _Default_: `process.env.NODE_ENV === 'production'`
1127
- - _Deskripsi_: Mengontrol apakah build harus dioptimalkan.
1128
- - _Contoh_: `true`
1129
- - _Catatan_: Saat diaktifkan, Intlayer akan mengganti semua panggilan kamus untuk mengoptimalkan chunking. Dengan begitu, bundel akhir hanya akan mengimpor kamus yang digunakan. Semua impor akan tetap sebagai impor statis untuk menghindari pemrosesan async saat memuat kamus.
1130
- - _Catatan_: Intlayer akan mengganti semua panggilan `useIntlayer` dengan mode yang ditentukan oleh opsi `importMode` dan `getIntlayer` dengan `getDictionary`.
1131
- - _Catatan_: Opsi ini bergantung pada plugin `@intlayer/babel` dan `@intlayer/swc`.
1132
- - _Catatan_: Pastikan semua kunci dideklarasikan secara statis dalam panggilan `useIntlayer`. Contoh: `useIntlayer('navbar')`.
1133
-
1134
- - **checkTypes**:
1135
- - _Tipe_: `boolean`
1136
- - _Default_: `false`
1137
- - _Deskripsi_: Menunjukkan apakah build harus memeriksa tipe TypeScript dan mencatat kesalahan.
1138
- - _Catatan_: Hal ini dapat memperlambat proses build.
1139
-
1140
- - **outputFormat**:
1141
- - _Tipe_: `'esm' | 'cjs'`
1142
- - _Default_: `'esm'`
1143
- - _Deskripsi_: Mengontrol format output dari kamus.
1144
- - _Contoh_: `'cjs'`
1145
- - _Catatan_: Format output dari kamus.
1146
-
1147
- - **traversePattern**:
1148
- - _Tipe_: `string[]`
1149
- - _Default_: `['**\/*.{js,ts,mjs,cjs,jsx,tsx}', '!**\/node_modules/**']`
1150
- - _Deskripsi_: Pola yang menentukan file mana yang harus dilalui selama optimasi.
1151
- - _Contoh_: `['src/**\/*.{ts,tsx}', '../ui-library/**\/*.{ts,tsx}', '!**/node_modules/**']`
1152
- - _Catatan_: Gunakan ini untuk membatasi optimasi hanya pada file kode yang relevan dan meningkatkan performa build.
1153
- - _Catatan_: Opsi ini akan diabaikan jika `optimize` dinonaktifkan.
1154
- - _Catatan_: Gunakan pola glob.
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]'` |
1155
907
 
1156
908
  ---
1157
909
 
1158
- ### Konfigurasi Kompiler
1159
-
1160
- Pengaturan yang mengontrol kompiler Intlayer, yang mengekstrak kamus langsung dari komponen Anda.
1161
-
1162
- #### Properti
1163
-
1164
- - **enabled**:
1165
- - _Tipe_: `boolean | 'build-only'`
1166
- - _Default_: `true`
1167
- - _Deskripsi_: Menunjukkan apakah kompiler harus diaktifkan untuk mengekstrak kamus.
1168
- - _Contoh_: `'build-only'`
1169
- - _Catatan_: Menyetelnya ke `'build-only'` akan melewati kompiler selama mode pengembangan untuk mempercepat waktu build. Ini hanya akan berjalan pada perintah build.
1170
-
1171
- - **dictionaryKeyPrefix**:
1172
- - _Tipe_: `string`
1173
- - _Default_: `''`
1174
- - _Deskripsi_: Awalan untuk kunci kamus yang diekstrak.
1175
- - _Contoh_: `'my-key-'`
1176
- - _Catatan_: Saat kamus diekstrak, kunci dihasilkan berdasarkan nama file. Awalan ini ditambahkan ke kunci yang dihasilkan untuk mencegah konflik.
1177
-
1178
- - **saveComponents**:
1179
- - _Tipe_: `boolean`
1180
- - _Default_: `false`
1181
- - _Deskripsi_: Menunjukkan apakah komponen harus disimpan setelah diubah.
1182
- - _Catatan_: Jika true, kompiler akan mengganti file asli dengan file yang diubah. Dengan begitu, kompiler hanya dapat dijalankan sekali untuk mengubah aplikasi, dan kemudian dapat dihapus.
1183
-
1184
- - **transformPattern**:
1185
- - _Tipe_: `string | string[]`
1186
- - _Default_: `['**/*.{ts,tsx,jsx,js,cjs,mjs,svelte,vue}', '!**/node_modules/**']`
1187
- - _Deskripsi_: Pola yang menentukan file mana yang harus dilalui selama optimasi.
1188
- - _Contoh_: `['src/**/*.{ts,tsx}', '!**/node_modules/**']`
1189
- - _Catatan_: Gunakan ini untuk membatasi optimasi hanya pada file kode yang relevan dan meningkatkan performa build.
1190
-
1191
- - **excludePattern**:
1192
- - _Tipe_: `string | string[]`
1193
- - _Default_: `['**/node_modules/**']`
1194
- - _Deskripsi_: Pola yang menentukan file mana yang harus dikecualikan selama optimasi.
1195
- - _Contoh_: `['**/node_modules/**', '!**/node_modules/react/**']`
1196
-
1197
- - **output**:
1198
- - _Tipe_: `FilePathPattern`
1199
- - _Default_: `undefined`
1200
- - _Deskripsi_: Mendefinisikan jalur file output. Menggantikan `outputDir`. Menangani variabel dinamis melalui string template atau fungsi. Variabel yang didukung: `{{fileName}}`, `{{key}}`, `{{locale}}`, `{{extension}}`, `{{componentFileName}}`, `{{componentExtension}}`, `{{format}}`, `{{componentFormat}}`, dan `{{componentDirPath}}`.
1201
- - _Catatan_: Jalur yang dimulai dengan `./` diselesaikan relatif terhadap direktori komponen. Jalur yang dimulai dengan `/` diselesaikan relatif terhadap root proyek (`baseDir`).
1202
- - _Catatan_: Menyertakan variabel `{{locale}}` dalam jalur akan mengaktifkan pembuatan kamus yang dipisahkan berdasarkan bahasa.
1203
- - _Contoh_:
1204
- - **Buat file multi-bahasa di samping komponen**:
1205
- - String: `'./{{fileName}}{{extension}}'`
1206
- - Fungsi: `({ fileName, extension }) => \`./${fileName}${extension}\``
1207
-
1208
- - **Output file JSON terpusat per bahasa**:
1209
- - String: `'/locales/{{locale}}/{{key}}.content.json'`
1210
- - Fungsi: `({ key, locale }) => \`/locales/${locale}/${key}.content.json\``
1211
-
1212
- - **noMetadata**:
1213
- - _Tipe_: `boolean`
1214
- - _Default_: `false`
1215
- - _Deskripsi_: Menunjukkan apakah metadata harus disimpan dalam file. Jika benar, kompiler tidak akan menyimpan metadata kamus (kunci, pembungkus konten).
1216
- - _Catatan_: Berguna jika digunakan dengan plugin `loadJSON`. Berguna untuk output JSON i18next atau ICU MessageFormat per bahasa.
1217
- - _Contoh_:
1218
- Jika `true` :
1219
-
1220
- ```json
1221
- {
1222
- "key": "value"
1223
- }
1224
- ```
1225
-
1226
- Jika `false`:
1227
-
1228
- ```json
1229
- {
1230
- "key": "value",
1231
- "content": {
1232
- "key": "value"
1233
- }
1234
- }
1235
- ```
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. |