-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdict.ts
More file actions
600 lines (596 loc) · 42.4 KB
/
Copy pathdict.ts
File metadata and controls
600 lines (596 loc) · 42.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
import type { Bilingual } from '../types';
// Lightweight i18n dictionary. UI chrome strings live here; model content (factor/QA/option
// copy) is bilingual in its own config files. Default language is Indonesian (Build Spec Section 2).
export const DICT = {
'app.title': { en: 'Architecture Advisor', id: 'Architecture Advisor' },
'save.saving': { en: 'Saving…', id: 'Menyimpan…' },
'save.saved': { en: 'All changes saved', id: 'Semua perubahan tersimpan' },
'cmd.open': { en: 'Command palette', id: 'Command palette' },
'cmd.placeholder': { en: 'Type a command or search…', id: 'Ketik perintah atau cari…' },
'manual.open': { en: 'Guide', id: 'Panduan' },
'manual.title': { en: 'Manual — how it works, end to end', id: 'Manual — cara kerja, dari awal sampai akhir' },
'manual.close': { en: 'Close the guide', id: 'Tutup panduan' },
'pal.manual': { en: 'Open the manual / guide', id: 'Buka manual / panduan' },
'pal.pinA': { en: 'Pin current scenario as A', id: 'Sematkan skenario ini sebagai A' },
'pal.pinB': { en: 'Pin current scenario as B', id: 'Sematkan skenario ini sebagai B' },
'pal.compare': { en: 'Compare scenarios (A/B)', id: 'Bandingkan skenario (A/B)' },
'compare.title': { en: 'Compare scenarios', id: 'Bandingkan skenario' },
'compare.pinA': { en: 'Pin current as A', id: 'Sematkan ini sebagai A' },
'compare.pinB': { en: 'Pin current as B', id: 'Sematkan ini sebagai B' },
'compare.clear': { en: 'Clear both', id: 'Kosongkan keduanya' },
'compare.swap': { en: 'Swap A ↔ B', id: 'Tukar A ↔ B' },
'compare.empty': {
en: 'Pin the current scenario as A, change your answers, then pin another as B to compare them side by side.',
id: 'Sematkan skenario ini sebagai A, ubah jawaban Anda, lalu sematkan yang lain sebagai B untuk membandingkan berdampingan.',
},
'compare.dimension': { en: 'Dimension', id: 'Dimensi' },
'compare.factorsDiff': { en: 'Factors that differ', id: 'Faktor yang berbeda' },
'compare.noFactorDiff': { en: 'A and B use identical factor levels.', id: 'A dan B memakai level faktor yang identik.' },
'compare.custom': { en: 'Custom', id: 'Kustom' },
'pal.save': { en: 'Save as document', id: 'Simpan sebagai dokumen' },
'pal.report': { en: 'Export full report', id: 'Ekspor laporan lengkap' },
'pal.csv': { en: 'Export as CSV', id: 'Ekspor sebagai CSV' },
'pal.json': { en: 'Export as JSON', id: 'Ekspor sebagai JSON' },
'pal.share': { en: 'Share link', id: 'Bagikan tautan' },
'pal.reset': { en: 'Reset answers', id: 'Atur ulang jawaban' },
'pal.expert': { en: 'Switch to Expert mode', id: 'Beralih ke mode Ahli' },
'pal.guided': { en: 'Switch to Guided mode', id: 'Beralih ke mode Terpandu' },
'pal.sample': { en: 'Load sample data', id: 'Muat data contoh' },
'pal.shortcuts': { en: 'Keyboard shortcuts', id: 'Pintasan keyboard' },
'shortcuts.title': { en: 'Keyboard shortcuts', id: 'Pintasan keyboard' },
'sc.palette': { en: 'Command palette', id: 'Command palette' },
'sc.save': { en: 'Save as document', id: 'Simpan sebagai dokumen' },
'sc.close': { en: 'Close / cancel', id: 'Tutup / batal' },
'sc.confirm': { en: 'Confirm', id: 'Konfirmasi' },
'steps.aria': { en: 'Your progress through the four steps', id: 'Kemajuan Anda melewati empat langkah' },
'step1.g': { en: 'Tell us about your project', id: 'Ceritakan tentang proyek Anda' },
'step1.e': { en: 'Project factors', id: 'Faktor proyek' },
'step2.g': { en: 'See what matters most', id: 'Lihat yang paling penting' },
'step2.e': { en: 'Quality priorities', id: 'Prioritas kualitas' },
'step3.g': { en: 'Get your plan', id: 'Dapatkan rencana Anda' },
'step3.e': { en: 'Recommendation', id: 'Rekomendasi' },
'step4.g': { en: 'Save & share', id: 'Simpan & bagikan' },
'step4.e': { en: 'Export', id: 'Ekspor' },
'banner.new': { en: 'New here?', id: 'Baru di sini?' },
'banner.body': {
en: 'Tell the tool about your project — it works out what matters, suggests how to build, and shows why.',
id: 'Ceritakan proyek Anda — alat ini menentukan apa yang penting, menyarankan cara membangun, dan menunjukkan alasannya.',
},
'banner.power': { en: 'Power user?', id: 'Pengguna mahir?' },
'banner.power.body': {
en: 'for the command palette, or switch to Expert mode.',
id: 'untuk command palette, atau beralih ke mode Ahli.',
},
'disclaimer': {
en: 'Decision support, not an oracle. The encoded weights are defensible expert defaults, not validated facts — every value is editable. Always apply team judgment and context this tool cannot capture.',
id: 'Alat bantu keputusan, bukan ramalan. Bobot yang tertanam adalah default ahli yang dapat dipertanggungjawabkan, bukan fakta tervalidasi — semua nilai dapat diubah. Selalu gunakan pertimbangan tim dan konteks yang tidak dapat ditangkap alat ini.',
},
'priorities.economic': { en: 'economic', id: 'ekonomi' },
'results.title.g': { en: 'Your recommended plan', id: 'Rencana yang direkomendasikan' },
'results.title.e': { en: 'Recommendation across 5 dimensions', id: 'Rekomendasi di 5 dimensi' },
'results.pickLayer': {
en: 'Pick a layer to see its plan and the reasoning:',
id: 'Pilih satu lapisan untuk melihat rencananya dan alasannya:',
},
'detail.bestFit': { en: 'Best fit', id: 'Paling cocok' },
'detail.robust': { en: 'Robust pick', id: 'Pilihan tangguh' },
'detail.closeCall': { en: 'Close call', id: 'Selisih tipis' },
'detail.means': { en: 'What this means for you', id: 'Apa artinya bagi Anda' },
'detail.good': { en: 'The good:', id: 'Sisi baik:' },
'detail.cost': { en: 'The cost:', id: 'Biayanya:' },
'detail.know': { en: 'Good to know:', id: 'Perlu diketahui:' },
/* Compensation disclosure — the winner won despite being weak where the user weighted heavily. */
'comp.title': { en: 'Won despite a weakness', id: 'Menang meski ada kelemahan' },
'comp.line': {
en: '{option} scores {fit}/5 on {qa}, which sits at {weight}% in your priorities — its strengths elsewhere outweigh that. Check the trade is one you can accept.',
id: '{option} bernilai {fit}/5 pada {qa}, yang berada di {weight}% dalam prioritas Anda — kekuatannya di tempat lain menutupi hal itu. Pastikan pertukaran itu bisa Anda terima.',
},
'comp.holds': { en: 'Still wins when weakness is penalised harder.', id: 'Tetap unggul meski kelemahan dihitung lebih berat.' },
'comp.flips': {
en: 'Score weakness more heavily and {other} wins instead — this pick leans on offsetting.',
id: 'Bila kelemahan dinilai lebih berat, {other} yang unggul — pilihan ini bertumpu pada penutupan kelemahan.',
},
'detail.contrib': {
en: 'Top contributing attributes (weight × fit)',
id: 'Atribut penyumbang teratas (bobot × kecocokan)',
},
'why.title': { en: 'Why not the runner-up?', id: 'Kenapa bukan peringkat-2?' },
'why.beats': {
en: '{top} ({ts}/100) edges out {second} ({ss}/100) — it fits your priorities better on:',
id: '{top} ({ts}/100) unggul tipis atas {second} ({ss}/100) — lebih cocok dengan prioritas Anda pada:',
},
'why.tie': {
en: '{top} and {second} are effectively tied ({ts} vs {ss}/100) — a close call; weigh team judgment.',
id: '{top} dan {second} praktis seri ({ts} vs {ss}/100) — selisih tipis; pertimbangkan penilaian tim.',
},
'why.secondEdge': {
en: '{second} would pull ahead if {qa} mattered more.',
id: '{second} akan unggul bila {qa} lebih dipentingkan.',
},
'detail.radarNote': {
en: 'All five build styles are compared in the radar below.',
id: 'Kelima gaya build dibandingkan pada radar di bawah.',
},
'analysis.heading': { en: 'Professional analysis', id: 'Analisis profesional' },
/* Honest Step-3 analysis stepper (Master Blueprint Phase 2.2) — real pipeline stages. */
'analysis.run.title': { en: 'Running analysis', id: 'Menjalankan analisis' },
'analysis.run.done': { en: 'Analysis complete', id: 'Analisis selesai' },
'analysis.run.skip': { en: 'Skip', id: 'Lewati' },
'analysis.run.weights': { en: 'Deriving quality-attribute weights', id: 'Menurunkan bobot atribut kualitas' },
'analysis.run.score': { en: 'Scoring 21 architectures against your priorities', id: 'Menilai 21 arsitektur terhadap prioritas Anda' },
'analysis.run.antipatterns': { en: 'Checking for anti-patterns & single points of failure', id: 'Memeriksa anti-pattern & titik kegagalan tunggal' },
'analysis.run.rank': { en: 'Ranking the five dimensions', id: 'Memeringkat lima dimensi' },
'radar.title.g': { en: 'See exactly why — compare the options', id: 'Lihat persis alasannya — bandingkan opsinya' },
'radar.title.e': {
en: 'Trade-off radar — options × 12 quality attributes',
id: 'Radar trade-off — opsi × 12 atribut kualitas',
},
'radar.help': {
en: 'Pick a layer, then tap a name to show or hide it. Further out = stronger; the ranking scores each against your priorities.',
id: 'Pilih satu lapisan, lalu ketuk nama untuk menampilkan/menyembunyikan. Makin ke luar = makin kuat; peringkat menilai tiap opsi terhadap prioritas Anda.',
},
'radar.compareFrom': { en: 'Compare options from this layer:', id: 'Bandingkan opsi dari lapisan ini:' },
'radar.bestFor': { en: 'Best fit for your priorities', id: 'Paling cocok untuk prioritas Anda' },
'radar.dataGrid': { en: 'Data grid', id: 'Tabel data' },
'radar.topPick': { en: 'Top pick', id: 'Pilihan utama' },
'radar.verdictClose': {
en: 'Close call: {a} ({as}%) and {b} ({bs}%) are within {gap} points. Both reasonable — let team experience decide.',
id: 'Selisih tipis: {a} ({as}%) dan {b} ({bs}%) berselisih {gap} poin. Keduanya masuk akal — serahkan pada pengalaman tim.',
},
'radar.verdictLead': {
en: '{a} leads at {as}%, ahead of {b} ({bs}%). Strongest where you cared most.',
id: '{a} unggul di {as}%, di atas {b} ({bs}%). Terkuat pada yang paling Anda pentingkan.',
},
'contribution.qa': { en: 'Quality attribute', id: 'Atribut kualitas' },
'contribution.weight': { en: 'Weight', id: 'Bobot' },
'contribution.fit': { en: 'Fit', id: 'Kecocokan' },
'contribution.points': { en: 'Points', id: 'Poin' },
'sens.title': { en: 'What would change this?', id: 'Apa yang akan mengubahnya?' },
'sens.intro': {
en: 'How sensitive your top pick is to each answer',
id: 'Seberapa sensitif pilihan teratas Anda terhadap tiap jawaban',
},
'sens.flip': {
en: 'If {factor} were {level} → {winner} would win.',
id: 'Jika {factor} jadi {level} → {winner} yang menang.',
},
'sens.robust': { en: 'Otherwise the pick is robust.', id: 'Selain itu, pilihannya tangguh.' },
/* Decision leverage (tornado) — how much each answer moves the winner's lead. */
'lev.title': { en: 'Which answers are deciding this', id: 'Jawaban mana yang menentukan ini' },
'lev.intro': {
en: 'How far the lead moves if you change one answer by a single level. The long bars are the answers worth getting right.',
id: 'Seberapa jauh keunggulan bergeser bila Anda mengubah satu jawaban sebesar satu tingkat. Batang yang panjang adalah jawaban yang layak dipastikan benar.',
},
'lev.reading': {
en: '{factor}: the lead moves {lose} points in the worst direction and {gain} in the best.',
id: '{factor}: keunggulan bergerak {lose} poin ke arah terburuk dan {gain} poin ke arah terbaik.',
},
'lev.unseats': { en: 'changes the pick', id: 'mengubah pilihan' },
'lev.unit': {
en: "Measured in the same 0–100 points as the scores above — the winner's lead over its closest rival.",
id: 'Diukur memakai poin 0–100 yang sama dengan skor di atas — keunggulan pemenang atas pesaing terdekatnya.',
},
'mig.title': { en: 'Already have a system?', id: 'Sudah punya sistem?' },
'mig.intro': {
en: 'Get a safe, step-by-step path — not a risky rewrite',
id: 'Dapatkan jalur bertahap yang aman — bukan penulisan ulang berisiko',
},
'mig.fresh': { en: 'Starting fresh', id: 'Mulai dari awal' },
'mig.big': { en: 'One big app today', id: 'Satu aplikasi besar saat ini' },
'mig.mix': { en: 'Mix of old systems', id: 'Campuran sistem lama' },
'ap.title.g': { en: 'A common mistake to avoid', id: 'Kesalahan umum yang harus dihindari' },
'ap.titleExpert': { en: 'Anti-pattern: {id}', id: 'Anti-pattern: {id}' },
'ap.clear': { en: 'No common mistakes detected in this plan.', id: 'Tidak ada kesalahan umum terdeteksi pada rencana ini.' },
'how.title.g': { en: 'How does it decide? (nothing is hidden)', id: 'Bagaimana ia memutuskan? (tidak ada yang disembunyikan)' },
'how.title.e': { en: 'How is this scored? — open the model', id: 'Bagaimana ini dinilai? — buka modelnya' },
'how.pipe1': { en: 'Your answers', id: 'Jawaban Anda' },
'how.pipe2': { en: 'Priorities', id: 'Prioritas' },
'how.pipe3': { en: 'Fit 1–5', id: 'Kecocokan 1–5' },
'how.pipe4': { en: 'Score = Σ weight × fit', id: 'Skor = Σ bobot × kecocokan' },
'how.body': {
en: 'Each architecture is rated 1–5 on 12 quality attributes (based on the ISO/IEC 25010 model). Your answers set how much each quality matters; the score is each rating times its weight, added up.',
id: 'Tiap arsitektur dinilai 1–5 pada 12 atribut kualitas (berdasarkan model ISO/IEC 25010). Jawaban Anda menentukan seberapa penting tiap kualitas; skor adalah tiap nilai dikalikan bobotnya, lalu dijumlahkan.',
},
'how.body.e': {
en: 'Fit ratings and the factor–weight mapping live in editable config. Mirrors an ATAM-style utility-tree analysis.',
id: 'Nilai kecocokan dan pemetaan faktor–bobot ada di config yang dapat diedit. Meniru analisis utility-tree gaya ATAM.',
},
'how.body.g': {
en: 'Adjust the weights yourself in Expert mode and the recommendation updates instantly.',
id: 'Sesuaikan bobotnya sendiri di mode Ahli dan rekomendasi diperbarui seketika.',
},
'risk.heading': { en: 'Risk register', id: 'Daftar risiko' },
'risk.intro': {
en: 'Risks of the options in your current combination.',
id: 'Risiko dari opsi pada kombinasi Anda saat ini.',
},
'risk.likelihood': { en: 'Likelihood', id: 'Kemungkinan' },
'risk.impact': { en: 'Impact', id: 'Dampak' },
'risk.mitigation': { en: 'Mitigation', id: 'Mitigasi' },
'risk.none': { en: 'No risks recorded for this combination.', id: 'Tidak ada risiko tercatat untuk kombinasi ini.' },
'level.low': { en: 'Low', id: 'Rendah' },
'level.med': { en: 'Med', id: 'Sedang' },
'level.high': { en: 'High', id: 'Tinggi' },
'fitness.heading': { en: 'Suggested fitness functions', id: 'Saran fitness function' },
'fitness.intro': {
en: 'Measurable checks for your top-weighted quality attributes (evolutionary architecture).',
id: 'Pemeriksaan terukur untuk atribut kualitas berbobot tertinggi (evolutionary architecture).',
},
'costops.heading': { en: 'Cost & operational complexity', id: 'Biaya & kompleksitas operasional' },
'costops.intro': {
en: 'Qualitative profile per deployment option.',
id: 'Profil kualitatif per opsi deployment.',
},
'costops.overhead': { en: 'Ops overhead', id: 'Overhead operasional' },
'costops.infra': { en: 'Infra cost', id: 'Biaya infra' },
'methodology.heading': { en: 'How it works — methodology', id: 'Cara kerja — metodologi' },
'methodology.intro': {
en: 'This tool turns project factors into weighted quality-attribute priorities (a utility tree), then scores each architecture option by how well it fits those priorities — an additive value model grounded in recognized methods. Two quality attributes (cost efficiency, time-to-market) are economic/delivery goals shown honestly outside the ISO product-quality model.',
id: 'Alat ini mengubah faktor proyek menjadi prioritas atribut kualitas berbobot (pohon utilitas), lalu menilai tiap opsi arsitektur dari seberapa cocok dengan prioritas itu — model nilai aditif yang berlandaskan metode yang diakui. Dua atribut kualitas (efisiensi biaya, waktu rilis) adalah tujuan ekonomi/pengiriman yang ditampilkan jujur di luar model kualitas produk ISO.',
},
'presets.start': {
en: 'Start from a scenario close to your project:',
id: 'Mulai dari skenario yang mirip proyek Anda:',
},
'presets.fill': {
en: 'These fill in the answers for you — change anything afterward.',
id: 'Ini mengisikan jawaban untuk Anda — ubah apa saja setelahnya.',
},
'gallery.search': { en: 'Search scenarios…', id: 'Cari skenario…' },
'gallery.empty': { en: 'No scenarios match — try another search or tag.', id: 'Tak ada skenario yang cocok — coba kata kunci atau tag lain.' },
/* Custom Architecture Wizard (Master Blueprint Phase 1.2) */
'wizard.open': { en: 'Build custom system', id: 'Bangun sistem kustom' },
'wizard.openHint': { en: 'Guided builder for a unique system', id: 'Pemandu untuk sistem yang unik' },
'wizard.title': { en: 'Build a custom system', id: 'Bangun sistem kustom' },
'wizard.intro': {
en: 'Answer four quick questions — the builder maps them onto the same scoring engine and recommends an architecture.',
id: 'Jawab empat pertanyaan singkat — pemandu memetakannya ke mesin skoring yang sama dan merekomendasikan arsitektur.',
},
'wizard.g.goal': { en: '1 · Goal', id: '1 · Tujuan' },
'wizard.g.domain': { en: '2 · Domain', id: '2 · Domain' },
'wizard.g.constraints': { en: '3 · Constraints', id: '3 · Batasan' },
'wizard.g.nfr': { en: '4 · Priorities', id: '4 · Prioritas' },
'wizard.submit': { en: 'Analyze my architecture', id: 'Analisis arsitektur saya' },
'wizard.clear': { en: 'Clear', id: 'Bersihkan' },
'wizard.close': { en: 'Close', id: 'Tutup' },
'wizard.baselineHint': {
en: 'Pick a goal for the sharpest result — otherwise we assume a balanced, moderate baseline.',
id: 'Pilih tujuan untuk hasil paling tajam — jika tidak, kami mengasumsikan baseline moderat yang seimbang.',
},
'wizard.optional': { en: 'optional', id: 'opsional' },
/* Chat Advisor (Phase 3) — rule-based, computed from the model (deliberately NOT branded "AI",
since it isn't a language model — the name says what it does: chat, plus advisor). */
'chat.open': { en: 'Ask the Chat Advisor', id: 'Tanya Chat Advisor' },
'chat.close': { en: 'Close chat', id: 'Tutup obrolan' },
'chat.title': { en: 'Chat Advisor', id: 'Chat Advisor' },
'chat.sub': {
en: 'Computed from the model, not a language model — answers are grounded in your scenario.',
id: 'Dihitung dari model, bukan model bahasa — jawaban berdasar skenario Anda.',
},
'chat.empty': { en: 'Ask about your recommendation, an architecture, or a trade-off.', id: 'Tanya soal rekomendasi Anda, sebuah arsitektur, atau trade-off.' },
'chat.browse': { en: 'What can I ask?', id: 'Apa yang bisa saya tanyakan?' },
'chat.browse.cta': { en: 'See everything I can answer', id: 'Lihat semua yang bisa saya jawab' },
'chat.browse.lead': { en: 'Pick a topic — every question below is one I can answer.', id: 'Pilih topik — setiap pertanyaan di dalamnya pasti bisa saya jawab.' },
'chat.browse.pick': { en: 'Tap a question to ask it.', id: 'Ketuk sebuah pertanyaan untuk menanyakannya.' },
'chat.browse.back': { en: 'All topics', id: 'Semua topik' },
'chat.howto': { en: 'How to use this', id: 'Cara memakainya' },
'chat.howto.hint': { en: 'What it knows, how to phrase things, and what it cannot do', id: 'Apa yang ia tahu, cara bertanya, dan apa yang tak bisa ia lakukan' },
'chat.howto.lead': { en: 'Read this first — it takes about a minute.', id: 'Baca ini dulu — sekitar satu menit.' },
'chat.placeholder': { en: 'Ask the advisor…', id: 'Tanya advisor…' },
'chat.send': { en: 'Send', id: 'Kirim' },
'chat.stop': { en: 'Stop', id: 'Hentikan' },
'chat.reset': { en: 'Start over', id: 'Mulai ulang' },
'chat.regenerate': { en: 'Regenerate', id: 'Buat ulang' },
'chat.renderError': { en: 'Failed to render output.', id: 'Gagal menampilkan keluaran.' },
'chat.jump': { en: 'Jump to latest', id: 'Lompat ke terbaru' },
'chat.sug.recommend': { en: 'What do you recommend?', id: 'Apa rekomendasinya?' },
'chat.sug.explain': { en: 'What is microservices?', id: 'Apa itu microservices?' },
'chat.sug.compare': { en: 'Monolith vs microservices', id: 'Monolith vs microservices' },
'chat.sug.why': { en: 'Why this recommendation?', id: 'Kenapa rekomendasi ini?' },
'chat.sug.risk': { en: 'Any risks with this combination?', id: 'Ada risiko pada kombinasi ini?' },
'chat.sug.cost': { en: "What's the operational cost?", id: 'Berapa biaya operasionalnya?' },
/* Interactive Copilot / guided tutorial (Phase 3) */
'copilot.start': { en: 'Guide me', id: 'Pandu saya' },
'copilot.startHint': { en: 'Take the interactive walkthrough', id: 'Ikuti pemandu interaktif' },
'copilot.close': { en: 'End tour', id: 'Akhiri tur' },
'copilot.back': { en: 'Back', id: 'Kembali' },
'copilot.next': { en: 'Next', id: 'Lanjut' },
'copilot.done': { en: 'Done', id: 'Selesai' },
'copilot.dos': { en: 'Do', id: 'Lakukan' },
'copilot.donts': { en: "Don't", id: 'Hindari' },
'copilot.offscreen': { en: 'This area isn’t on screen right now — the steps still explain it.', id: 'Bagian ini sedang tidak tampak — langkahnya tetap menjelaskannya.' },
'action.resetAnswers': { en: 'Reset answers', id: 'Atur ulang jawaban' },
'reset.confirm': { en: 'Reset all your answers?', id: 'Atur ulang semua jawaban?' },
'reset.yes': { en: 'Yes, reset', id: 'Ya, atur ulang' },
'reset.cancel': { en: 'Cancel', id: 'Batal' },
'reset.done': { en: 'Answers reset.', id: 'Jawaban diatur ulang.' },
'reset.undo': { en: 'Undo', id: 'Urungkan' },
'prio.derived.g': { en: 'Worked out from your answers:', id: 'Dihitung dari jawaban Anda:' },
'prio.derived.e': {
en: 'Derived from factors · normalized to 100%',
id: 'Diturunkan dari faktor · dinormalkan ke 100%',
},
'prio.adjust': { en: 'Adjust weights', id: 'Sesuaikan bobot' },
'prio.adjustDone': { en: 'Done adjusting', id: 'Selesai menyesuaikan' },
'mode.guided': { en: 'Guided', id: 'Terpandu' },
'mode.expert': { en: 'Expert', id: 'Ahli' },
/* Plain-language adjuster copy (Fase 2c): newcomers must read this as "the adjustment". */
'override.heading': { en: 'Adjust what matters most', id: 'Atur yang paling penting' },
'override.intro': {
en: 'Drag a slider (or type a %) to pin how much an attribute matters — pinned values lock, the rest re-balance automatically around them.',
id: 'Geser slider (atau ketik %) untuk mematok seberapa penting sebuah atribut — nilai yang dipatok terkunci, sisanya menyeimbang otomatis di sekitarnya.',
},
'override.unlock': { en: 'Unlock', id: 'Buka kunci' },
'override.clear': { en: 'Clear all overrides', id: 'Hapus semua override' },
'override.auto': { en: 'auto', id: 'otomatis' },
'glossary.heading': { en: 'Glossary', id: 'Glosarium' },
'glossary.qa': { en: 'Quality attributes (ISO/IEC 25010:2023)', id: 'Atribut kualitas (ISO/IEC 25010:2023)' },
'glossary.terms': { en: 'Key terms', id: 'Istilah kunci' },
'action.saveDoc.g': { en: 'Save as a document', id: 'Simpan sebagai dokumen' },
'action.saveDoc.e': { en: 'Export ADR', id: 'Ekspor ADR' },
'action.fullReport': { en: 'Full report', id: 'Laporan lengkap' },
'action.csv': { en: 'CSV', id: 'CSV' },
'action.json': { en: 'JSON', id: 'JSON' },
'action.share.g': { en: 'Share a link', id: 'Bagikan tautan' },
'action.share.e': { en: 'Share', id: 'Bagikan' },
'status.adr': { en: 'Document saved · ready to download', id: 'Dokumen tersimpan · siap diunduh' },
'status.report': { en: 'Report generated', id: 'Laporan dibuat' },
'status.csv': { en: 'scores.csv downloaded', id: 'scores.csv terunduh' },
'status.json': { en: 'assessment.json downloaded', id: 'assessment.json terunduh' },
'status.shared': { en: 'Link copied to clipboard.', id: 'Tautan disalin ke clipboard.' },
'status.shareErr': {
en: "Couldn't copy the link — your browser blocked clipboard access.",
id: 'Tidak bisa menyalin tautan — browser memblokir akses clipboard.',
},
'audit.g': {
en: 'Saved automatically · view preferences remembered',
id: 'Tersimpan otomatis · preferensi tampilan diingat',
},
'audit.e': {
en: 'Audit: last edited by you · just now · preferences persisted',
id: 'Audit: terakhir diubah oleh Anda · baru saja · preferensi disimpan',
},
'action.print': { en: 'Print / PDF', id: 'Cetak / PDF' },
'pal.print': { en: 'Print / save as PDF', id: 'Cetak / simpan sebagai PDF' },
'print.title': { en: 'Architecture Recommendation', id: 'Rekomendasi Arsitektur' },
'print.generated': { en: 'Generated', id: 'Dibuat' },
'action.importSetup': { en: 'Import setup (JSON)', id: 'Impor setup (JSON)' },
'action.importError': { en: 'Invalid setup file.', id: 'Berkas setup tidak valid.' },
'c4.heading': { en: 'Architecture diagram (C4 stub)', id: 'Diagram arsitektur (stub C4)' },
'action.theme': { en: 'Toggle theme', id: 'Ganti tema' },
'footer.browsers': {
en: 'Best viewed in the latest Chrome, Edge, Firefox, or Safari (desktop or mobile).',
id: 'Ditampilkan terbaik di Chrome, Edge, Firefox, atau Safari versi terbaru (desktop atau mobile).',
},
/* Copyright scope (Fase 1, DECISIONS.md): identity/brand exclusive; licenses unchanged.
Footer keeps it SHORT (owner: "rapi & simple") — the full notice lives in LICENSE + meta.
Split into per-item keys (Fase 2g) so they stack cleanly, one per line, when wrapped. */
'footer.code': { en: 'Code MIT', id: 'Kode MIT' },
'footer.content': { en: 'Content CC BY 4.0', id: 'Konten CC BY 4.0' },
// Detailed architecture explanations folded into the Manual/Guide (Section 5) — see
// src/config/readerContent.ts / docs/03-blueprint/architecture-reader.md
'reader.what': { en: 'What', id: 'Apa' },
'reader.fits': { en: 'When it fits', id: 'Kapan cocok' },
'reader.cost': { en: 'What it costs', id: 'Apa biayanya' },
'reader.deeper': { en: 'Deeper', id: 'Lebih dalam' },
'reader.learnMore': { en: 'Read the full documented version', id: 'Baca versi lengkap yang terdokumentasi' },
// "Learn" content layer — sections, article view, credibility block (src/config/sections.ts,
// src/components/Learn*.tsx). Section labels/descriptions live here; content lives in /content.
'nav.home': { en: 'Home', id: 'Beranda' },
'nav.advisor': { en: 'Advisor', id: 'Advisor' },
'nav.learn': { en: 'Insights', id: 'Wawasan' },
'nav.more': { en: 'More', id: 'Lainnya' },
// ---- Mobile chrome (bottom nav + settings sheet) ----
'm.settings': { en: 'Settings', id: 'Pengaturan' },
'm.theme': { en: 'Theme', id: 'Tema' },
'm.theme.dark': { en: 'Dark', id: 'Gelap' },
'm.theme.light': { en: 'Light', id: 'Terang' },
'm.language': { en: 'Language', id: 'Bahasa' },
'm.mode': { en: 'Reading mode', id: 'Mode baca' },
'm.guided': { en: 'Guided', id: 'Terpandu' },
'm.expert': { en: 'Expert', id: 'Ahli' },
'm.close': { en: 'Close', id: 'Tutup' },
'm.primaryNav': { en: 'Primary', id: 'Utama' },
// ---- Advisor mobile action bar (contextual primary button) ----
'm.act.priorities': { en: 'See what matters', id: 'Lihat yang penting' },
'm.act.plan': { en: 'Get your plan', id: 'Dapatkan rencana' },
'm.act.save': { en: 'Save & share', id: 'Simpan & bagikan' },
// ---- Landing page (Aurora Slate — mirrors prototype-v2/preview-modern.html) ----
'lp.eyebrow.a': { en: 'Open source · Client-side', id: 'Open source · Client-side' },
'lp.eyebrow.b': { en: 'Always explains “why”', id: 'Selalu menjelaskan “kenapa”' },
'lp.h1.pre': { en: 'Choose your architecture with ', id: 'Pilih arsitektur dengan ' },
'lp.h1.grad': { en: 'evidence,', id: 'bukti,' },
'lp.h1.post': { en: ' not trends.', id: ' bukan tren.' },
'lp.lede': {
en: 'Answer a few questions about your project — get an architecture recommendation across 5 dimensions, with the full calculation you can audit and edit yourself.',
id: 'Jawab beberapa pertanyaan tentang proyek Anda — dapatkan rekomendasi arsitektur di 5 dimensi, lengkap dengan perhitungan yang bisa Anda audit dan ubah sendiri.',
},
'lp.lede.x': {
en: 'Encode your project factors and get a defensible recommendation across 5 orthogonal dimensions — with the full weighted-utility calculation, editable ISO/IEC 25010 quality-attribute weights, sensitivity analysis, and an ADR export.',
id: 'Kodekan faktor proyek Anda dan dapatkan rekomendasi yang bisa dipertanggungjawabkan di 5 dimensi ortogonal — lengkap dengan perhitungan weighted-utility, bobot atribut kualitas ISO/IEC 25010 yang bisa diedit, analisis sensitivitas, dan export ADR.',
},
'lp.cta.start': { en: 'Start free analysis', id: 'Mulai analisis gratis' },
'lp.cta.how': { en: 'See how it works', id: 'Lihat cara kerja' },
'lp.meta.dims': { en: 'architecture dimensions', id: 'dimensi arsitektur' },
'lp.meta.iso': { en: 'ISO/IEC 2023', id: 'ISO/IEC 2023' },
'lp.meta.client': { en: 'client-side', id: 'client-side' },
'lp.radar.aria': { en: 'Trade-off radar across five architecture dimensions', id: 'Radar trade-off lima dimensi arsitektur' },
/* Hero radar chips (owner direction): chip-a = the offer, chip-b = a simple storytelling
headline — the user's journey in one short beat, no numbers, no jargon. */
'lp.chip.try': { en: 'Instant · free · explained', id: 'Instan · gratis · dijelaskan' },
'lp.chip.explore': { en: 'From idea to architecture', id: 'Dari ide menjadi arsitektur' },
'lp.patterns.kicker': { en: 'Pattern Library', id: 'Pustaka Pola' },
'lp.patterns.h2': { en: 'Know the pattern before you pick it.', id: 'Kenali polanya sebelum memilihnya.' },
'lp.patterns.sub': {
en: 'Every option is explained in plain language: when it fits, when it doesn’t, and what it costs.',
id: 'Setiap pola dijelaskan dengan bahasa sederhana: kapan cocok, kapan tidak, dan apa harganya.',
},
'lp.patterns.all': { en: 'All architectures', id: 'Semua arsitektur' },
'lp.card.learn': { en: 'Learn this pattern', id: 'Pelajari pola ini' },
'lp.tag.popular': { en: 'POPULAR', id: 'POPULER' },
'lp.blurb.event-driven': {
en: 'Loosely-coupled services over async events — high throughput, independent teams, paid for with eventual consistency.',
id: 'Layanan yang saling lepas lewat event asinkron — throughput tinggi, tim mandiri, dibayar dengan eventual consistency.',
},
'lp.blurb.modular-monolith': {
en: 'One deployment, firm module boundaries. The sanest starting point for most products.',
id: 'Satu deployment, batas modul tegas. Titik awal paling waras untuk mayoritas produk.',
},
'lp.blurb.serverless': {
en: 'Pay per execution, scales automatically — mind cold starts and vendor lock-in.',
id: 'Bayar per eksekusi, skala otomatis — waspadai cold start dan vendor lock-in.',
},
'lp.blurb.cqrs': {
en: 'Separate the read and write paths, store history as events. Strong for audit & replay — costly to learn.',
id: 'Pisahkan jalur baca dan tulis, simpan sejarah sebagai event. Kuat untuk audit & replay — mahal untuk dipelajari.',
},
'lp.blurb.microservices': {
en: 'Independently deployable services for many autonomous teams — organisational scale at operational cost.',
id: 'Layanan yang dirilis independen untuk banyak tim otonom — skala organisasi dengan biaya operasional.',
},
'lp.blurb.hexagonal': {
en: 'Ports & adapters keep the domain core free of frameworks — testable, with swappable edges.',
id: 'Ports & adapters menjaga inti domain bebas framework — mudah diuji, tepiannya bisa ditukar.',
},
'lp.slider.prev': { en: 'Previous patterns', id: 'Pola sebelumnya' },
'lp.slider.next': { en: 'Next patterns', id: 'Pola berikutnya' },
'lp.how.kicker': { en: 'How it works', id: 'Cara kerja' },
'lp.how.h2': { en: 'Three steps. Every number is open.', id: 'Tiga langkah. Semua angkanya terbuka.' },
'lp.how.s1.h': { en: 'Tell us about your project', id: 'Ceritakan proyek Anda' },
'lp.how.s1.p': {
en: 'Answer short questions about team, scale, and constraints — Guided for newcomers, Expert for architects.',
id: 'Jawab pertanyaan singkat tentang tim, skala, dan constraint — Guided untuk pemula, Expert untuk arsitek.',
},
'lp.how.s1.px': {
en: 'Set the project factors (team, scale, constraints); in Expert mode you can edit the derived quality-attribute weights directly.',
id: 'Atur faktor proyek (tim, skala, batasan); di mode Ahli Anda bisa langsung mengedit bobot atribut kualitas turunannya.',
},
'lp.how.s2.h': { en: 'See your quality priorities', id: 'Lihat prioritas kualitas Anda' },
'lp.how.s2.p': {
en: 'Your answers map to quality-attribute weights grounded in ISO/IEC 25010 — editable on the spot.',
id: 'Jawaban Anda dipetakan ke bobot atribut kualitas berbasis ISO/IEC 25010 — bisa Anda edit langsung.',
},
'lp.how.s2.px': {
en: 'Factors map to ISO/IEC 25010 quality-attribute weights through the influence matrix — inspect and override each weight.',
id: 'Faktor dipetakan ke bobot atribut kualitas ISO/IEC 25010 lewat influence matrix — periksa dan timpa tiap bobotnya.',
},
'lp.how.s3.h': { en: 'Get the recommendation + why', id: 'Dapatkan rekomendasi + alasannya' },
'lp.how.s3.p': {
en: 'A trade-off radar, ranked alternatives, and an ADR export. Every score traces back to its factors.',
id: 'Radar trade-off, ranking alternatif, dan export ADR. Setiap skor bisa ditelusuri sampai ke faktornya.',
},
'lp.how.s3.px': {
en: 'Ranked options per dimension with a trade-off radar, sensitivity flips, anti-pattern checks, and a MADR-formatted ADR export.',
id: 'Opsi berperingkat per dimensi dengan radar trade-off, sensitivitas, pengecekan anti-pattern, dan export ADR berformat MADR.',
},
'learn.title': { en: 'Architecture Insights', id: 'Wawasan Arsitektur' },
'learn.intro': {
en: 'Plain-language, evidence-grounded insights into every architecture the Advisor evaluates — for newcomers and experts alike, with real cited sources.',
id: 'Wawasan berbahasa sederhana dan berbasis bukti tentang setiap arsitektur yang dinilai Advisor — untuk pemula maupun ahli, dengan sumber nyata yang dikutip.',
},
'learn.back': { en: '← All sections', id: '← Semua bagian' },
'learn.backToList': { en: '← Back', id: '← Kembali' },
'learn.empty': { en: 'No articles here yet.', id: 'Belum ada artikel di sini.' },
'learn.tldr': { en: 'TL;DR', id: 'Ringkas' },
'learn.tryAdvisor': { en: 'Try this in the Advisor', id: 'Coba di Advisor' },
'learn.whenFits': { en: 'When it fits', id: 'Kapan cocok' },
'learn.whatCosts': { en: 'What it costs', id: 'Apa biayanya' },
'learn.architectures': { en: 'architectures', id: 'arsitektur' },
'learn.articles': { en: 'articles', id: 'artikel' },
'learn.refs': { en: 'refs', id: 'rujukan' },
'learn.lensNav': { en: 'Explore this architecture', id: 'Jelajahi arsitektur ini' },
'learn.furtherReading': { en: 'Further reading', id: 'Bacaan lanjutan' },
'learn.pb.goal': { en: 'Goal', id: 'Tujuan' },
'learn.pb.prereqs': { en: 'Prerequisites', id: 'Prasyarat' },
'learn.pb.steps': { en: 'Steps', id: 'Langkah-langkah' },
'learn.pb.practices': { en: 'Best practices', id: 'Praktik terbaik' },
'learn.pb.pitfalls': { en: 'Pitfalls to avoid', id: 'Jebakan yang dihindari' },
'learn.rv.overview': { en: 'Overview', id: 'Ikhtisar' },
'learn.rv.pros': { en: 'Pros', id: 'Kelebihan' },
'learn.rv.cons': { en: 'Cons', id: 'Kekurangan' },
'learn.rv.performance': { en: 'Performance', id: 'Performa' },
'learn.rv.scalability': { en: 'Scalability', id: 'Skalabilitas' },
'learn.rv.dx': { en: 'Developer experience', id: 'Pengalaman developer' },
'learn.rv.useCases': { en: 'Suitable use cases', id: 'Kasus penggunaan yang cocok' },
'learn.rv.verdict': { en: 'Final verdict', id: 'Verdik akhir' },
'learn.lb.definition': { en: 'Definition', id: 'Definisi' },
'learn.lb.concepts': { en: 'Key concepts', id: 'Konsep kunci' },
'learn.lb.patterns': { en: 'Related patterns', id: 'Pola terkait' },
'learn.lb.terms': { en: 'Terminology', id: 'Terminologi' },
'learn.readingHint': {
en: 'Switch Guided / Expert in the header to change the reading depth — newcomers get plain language, experts get mechanism, evidence & sources.',
id: 'Ganti Terpandu / Ahli di header untuk mengubah kedalaman bacaan — pemula mendapat bahasa sederhana, ahli mendapat mekanisme, bukti & sumber.',
},
'learn.byArchitecture': { en: 'By architecture', id: 'Per arsitektur' },
'learn.guides': { en: 'Guides & methods', id: 'Panduan & metode' },
'learn.guidesWord': { en: 'guides', id: 'panduan' },
'learn.sources': { en: 'Sources', id: 'Sumber' },
'learn.lastReviewed': { en: 'Last reviewed', id: 'Terakhir ditinjau' },
'learn.reviewDue': { en: 'Needs review', id: 'Perlu ditinjau' },
'learn.evidence.strong': { en: 'Strong evidence', id: 'Bukti kuat' },
'learn.evidence.moderate': { en: 'Moderate evidence', id: 'Bukti sedang' },
'learn.evidence.emerging': { en: 'Emerging evidence', id: 'Bukti awal' },
// The Insights landing groups its seven sections into four lenses + three activities, and says
// when each one is the right thing to open — see src/config/sections.ts for why.
'learn.group.lenses': { en: 'Read about the architectures', id: 'Membaca tentang arsitekturnya' },
'learn.group.lenses.desc': {
en: 'Four ways of reading the same 21 architectures — not four separate libraries. Pick the angle that matches your question; every architecture appears in all four.',
id: 'Empat cara membaca 21 arsitektur yang sama — bukan empat pustaka terpisah. Pilih sudut yang cocok dengan pertanyaan Anda; tiap arsitektur muncul di keempatnya.',
},
'learn.group.practice': { en: 'Build the skill', id: 'Melatih kemampuannya' },
'learn.group.practice.desc': {
en: 'Things you do rather than read: a route through the material, questions to test yourself against, and a sandbox that runs the real scoring engine.',
id: 'Hal yang Anda kerjakan, bukan dibaca: rute menyusuri materinya, soal untuk menguji diri, dan sandbox yang menjalankan mesin skor sungguhan.',
},
'learn.when.catalog': { en: 'Open this when you do not yet know what an architecture is or where it is used.', id: 'Buka ini kalau Anda belum tahu sebuah arsitektur itu apa atau dipakai di mana.' },
'learn.when.playbook': { en: 'Open this when you have decided and now have to build it.', id: 'Buka ini kalau Anda sudah memutuskan dan sekarang harus membangunnya.' },
'learn.when.review': { en: 'Open this when you are weighing two options against each other.', id: 'Buka ini kalau Anda sedang menimbang dua opsi.' },
'learn.when.library': { en: 'Open this when you hit a term you do not recognise.', id: 'Buka ini kalau Anda menemui istilah yang tak dikenali.' },
'learn.when.roadmap': { en: 'Open this when you want a route instead of choosing where to start.', id: 'Buka ini kalau Anda ingin rute, bukan bingung memilih mulai dari mana.' },
'learn.when.academy': { en: 'Open this when you want to find out what you actually retained.', id: 'Buka ini kalau Anda ingin tahu apa yang benar-benar Anda ingat.' },
'learn.when.lab': { en: 'Open this when you want to see a trade-off move instead of reading about it.', id: 'Buka ini kalau Anda ingin melihat pertukarannya bergerak, bukan membacanya.' },
'section.catalog': { en: 'Catalog', id: 'Katalog' },
'section.catalog.desc': { en: 'Discover every architecture: what it is, where it is used, why it exists.', id: 'Kenali setiap arsitektur: apa itu, di mana dipakai, mengapa ada.' },
'section.playbook': { en: 'Playbook', id: 'Playbook' },
'section.playbook.desc': { en: 'Implement it: prerequisites, step-by-step guides, best practices, pitfalls.', id: 'Implementasikan: prasyarat, langkah demi langkah, praktik terbaik, jebakan.' },
'section.review': { en: 'Review', id: 'Review' },
'section.review.desc': { en: 'Evaluate it: pros & cons, performance, scalability, DX, verdicts.', id: 'Evaluasi: pro & kontra, performa, skalabilitas, DX, verdik.' },
'section.library': { en: 'Library', id: 'Pustaka' },
'section.library.desc': { en: 'Reference it: definitions, concepts, patterns, terminology, standards.', id: 'Rujukan: definisi, konsep, pola, terminologi, standar.' },
'section.roadmap': { en: 'Roadmap', id: 'Peta Belajar' },
'section.roadmap.desc': { en: 'Follow it: guided learning paths from newcomer to architect, step by step.', id: 'Ikuti: alur belajar terpandu dari pemula hingga arsitek, langkah demi langkah.' },
'section.academy': { en: 'Academy', id: 'Akademi' },
'section.academy.desc': { en: 'Test yourself: course modules with self-check quizzes, scored on your device.', id: 'Uji diri Anda: modul kursus dengan kuis mandiri, dinilai di perangkat Anda.' },
'section.lab': { en: 'Lab', id: 'Lab' },
'section.lab.desc': { en: 'Experiment: hypothesis-driven sandboxes that run on the real scoring engine.', id: 'Bereksperimen: sandbox berbasis hipotesis yang berjalan di mesin skor sungguhan.' },
'learn.paths': { en: 'learning paths', id: 'alur belajar' },
'learn.modules': { en: 'modules', id: 'modul' },
'learn.experiments': { en: 'experiments', id: 'eksperimen' },
'learn.road.allPaths': { en: '← All learning paths', id: '← Semua alur belajar' },
'learn.road.outcome': { en: 'What you will be able to do', id: 'Apa yang akan Anda kuasai' },
'learn.road.kindAdvisor': { en: 'Advisor', id: 'Advisor' },
'learn.road.kindArticle': { en: 'Article', id: 'Artikel' },
'learn.road.newcomer': { en: 'Newcomer', id: 'Pemula' },
'learn.road.practitioner': { en: 'Practitioner', id: 'Praktisi' },
'learn.road.architect': { en: 'Architect', id: 'Arsitek' },
'learn.road.stepsWord': { en: 'steps', id: 'langkah' },
'learn.ac.allModules': { en: '← All modules', id: '← Semua modul' },
'learn.ac.question': { en: 'Question', id: 'Pertanyaan' },
'learn.ac.questionsWord': { en: 'questions', id: 'pertanyaan' },
'learn.ac.correct': { en: 'Correct', id: 'Benar' },
'learn.ac.incorrect': { en: 'Not quite', id: 'Belum tepat' },
'learn.ac.review': { en: 'Review the topic', id: 'Pelajari topiknya' },
'learn.ac.next': { en: 'Next question', id: 'Pertanyaan berikutnya' },
'learn.ac.finish': { en: 'See my score', id: 'Lihat skor saya' },
'learn.ac.results': { en: 'Your score', id: 'Skor Anda' },
'learn.ac.retry': { en: 'Try again', id: 'Coba lagi' },
'learn.lab.allExperiments': { en: '← All experiments', id: '← Semua eksperimen' },
'learn.lab.hypothesis': { en: 'The hypothesis', id: 'Hipotesis' },
'learn.lab.watch': { en: 'What to watch', id: 'Yang diamati' },
'learn.lab.focus': { en: 'Architectures in play', id: 'Arsitektur yang terlibat' },
'learn.lab.scenario': { en: 'The prepared scenario', id: 'Skenario siap pakai' },
'learn.lab.takeaway': { en: 'The takeaway', id: 'Intisari' },
'learn.lab.run': { en: 'Load this scenario in the Advisor', id: 'Muat skenario ini di Advisor' },
'learn.lab.runShort': { en: 'Runs on the live engine', id: 'Berjalan di mesin sungguhan' },
} satisfies Record<string, Bilingual>;
export type DictKey = keyof typeof DICT;