{
  "common": {
    "save": "Simpan",
    "cancel": "Batalkan",
    "delete": "Hapus",
    "loading": "Memuat...",
    "error": "Terjadi kesalahan",
    "success": "Sukses",
    "confirm": "Apakah kamu yakin?",
    "refresh": "Segarkan",
    "close": "Tutup",
    "add": "Tambahkan",
    "edit": "Sunting",
    "search": "Cari",
    "back": "Kembali",
    "next": "Selanjutnya",
    "submit": "Kirim",
    "reset": "Setel ulang",
    "copy": "Salin",
    "copied": "Disalin!",
    "enabled": "Diaktifkan",
    "disabled": "Dengan disabilitas",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "noData": "Tidak ada data yang tersedia",
    "configure": "Konfigurasikan",
    "manage": "Kelola",
    "name": "Nama",
    "actions": "Tindakan",
    "status": "Status",
    "type": "Ketik",
    "model": "Model",
    "models": "model",
    "provider": "Penyedia",
    "account": "Akun",
    "time": "Waktu",
    "details": "Detail",
    "created": "Dibuat",
    "lastUsed": "Terakhir Digunakan",
    "loadMore": "Muat Lebih Banyak",
    "noResults": "Tidak ada hasil yang ditemukan",
    "reloadPage": "Muat Ulang Halaman",
    "connected": "Terhubung",
    "disconnected": "Terputus",
    "notConfigured": "Tidak dikonfigurasi",
    "testConnection": "Uji Koneksi",
    "enable": "Aktifkan",
    "disable": "Nonaktifkan",
    "columns": "Kolom",
    "newest": "Terbaru",
    "oldest": "Tertua",
    "all": "Semua",
    "none": "Tidak ada",
    "yes": "Ya",
    "no": "Tidak",
    "warning": "Peringatan",
    "note": "Catatan",
    "free": "Gratis",
    "skipToContent": "Lewati ke konten"
  },
  "sidebar": {
    "home": "Rumah",
    "dashboard": "Dasbor",
    "providers": "Penyedia",
    "combos": "kombo",
    "usage": "Penggunaan",
    "analytics": "Analisis",
    "costs": "Biaya",
    "health": "Kesehatan",
    "limits": "Batas & Kuota",
    "cliTools": "Alat CLI",
    "media": "Media",
    "settings": "Pengaturan",
    "translator": "Penerjemah",
    "docs": "dokumen",
    "issues": "Masalah",
    "apiManager": "Manajer API",
    "logs": "Log",
    "auditLog": "Catatan Audit",
    "shutdown": "Matikan",
    "restart": "Mulai ulang",
    "shutdownConfirm": "Matikan OmniRoute?",
    "restartConfirm": "Mulai ulang OmniRoute?",
    "version": "v{version}",
    "debug": "Men-debug",
    "system": "Sistem",
    "help": "Bantuan",
    "serverDisconnected": "Server Terputus",
    "serverDisconnectedMsg": "Server proxy telah dihentikan atau dimulai ulang.",
    "expandSidebar": "Luaskan bilah sisi",
    "collapseSidebar": "Ciutkan bilah sisi",
    "themes": "Themes",
    "presetColors": "Popular colors",
    "createTheme": "Create theme",
    "chooseColor": "Pick one color",
    "themeCoral": "Coral",
    "themeBlue": "Blue",
    "themeRed": "Red",
    "themeGreen": "Green",
    "themeViolet": "Violet",
    "themeOrange": "Orange",
    "themeCyan": "Cyan",
    "endpoints": "Endpoint",
    "playground": "Playground",
    "agents": "Agen",
    "cliToolsShort": "Alat"
  },
  "themesPage": {
    "title": "Themes",
    "description": "Choose a preset theme or create your own with a single color",
    "presetColors": "Popular colors",
    "customTheme": "Custom theme",
    "customThemeDesc": "Click create theme and pick one color",
    "createTheme": "Create theme",
    "activePreset": "Active theme"
  },
  "header": {
    "logout": "Keluar",
    "language": "Bahasa",
    "providers": "Penyedia",
    "providerDescription": "Kelola koneksi penyedia AI Anda",
    "combos": "kombo",
    "comboDescription": "Kombo model dengan fallback",
    "usage": "Penggunaan & Analisis",
    "usageDescription": "Pantau penggunaan API Anda, konsumsi token, dan log permintaan",
    "analytics": "Analisis",
    "analyticsDescription": "Bagan, tren, dan wawasan evaluasi",
    "cliTools": "Alat CLI",
    "cliToolsDescription": "Konfigurasikan alat CLI",
    "home": "Rumah",
    "homeDescription": "Selamat datang di OmniRoute",
    "endpoint": "Endpoints",
    "endpointDescription": "Manage proxy endpoints, MCP, A2A, and API endpoints",
    "settings": "Pengaturan",
    "settingsDescription": "Kelola preferensi Anda",
    "openaiCompatible": "Kompatibel dengan OpenAI",
    "anthropicCompatible": "Kompatibel Antropis",
    "media": "Media",
    "mediaDescription": "Generate images, videos, and music",
    "themes": "Themes",
    "themesDescription": "Choose a color theme for the whole dashboard panel",
    "mcp": "MCP",
    "mcpDescription": "Model Context Protocol server management and tools",
    "a2a": "A2A",
    "a2aDescription": "Agent-to-Agent protocol tasks and observability"
  },
  "home": {
    "quickStart": "Mulai Cepat",
    "quickStartDesc": "Bangun dan jalankan dalam 4 langkah. Hubungkan penyedia, model rute, pantau semuanya.",
    "fullDocs": "Dokumen Lengkap",
    "step1Title": "1. Buat kunci API",
    "step1Desc": "Buka <endpoint>Endpoint</endpoint> -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.",
    "step2Title": "2. Hubungkan penyedia",
    "step2Desc": "Tambahkan akun di <providers>Providers</providers>. Mendukung OAuth, Kunci API, dan tingkatan gratis.",
    "step3Title": "3. Arahkan klien Anda",
    "step3Desc": "Tetapkan URL dasar ke {url} di klien IDE atau API Anda.",
    "step4Title": "4. Pantau & optimalkan",
    "step4Desc": "Lacak token, biaya, dan kesalahan di <logs>Log Permintaan</logs> dan <analytics>Analytics</analytics>.",
    "providersOverview": "Ikhtisar Penyedia",
    "configuredOf": "{configured} dikonfigurasi dari {total} penyedia yang tersedia",
    "noModelsAvailable": "Tidak ada model yang tersedia untuk penyedia ini.",
    "configureFirst": "Konfigurasikan koneksi terlebih dahulu di {providers}",
    "configureProvider": "Konfigurasikan Penyedia",
    "modelAvailable": "Model {count} tersedia",
    "modelsAvailable": "{count} model tersedia",
    "connectionsActive": "Koneksi {count} aktif",
    "connectionsActivePlural": "{count} koneksi aktif",
    "copyModelName": "Salin nama model",
    "documentation": "Dokumentasi",
    "healthMonitor": "Pemantau Kesehatan",
    "reportIssue": "Laporkan masalah",
    "activeError": "{active} aktif · kesalahan {errors}",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "Kunci API",
    "requestsShort": "{count} permintaan",
    "providerModelsTitle": "{provider} - Model",
    "copiedModel": "Disalin: {model}",
    "aliasLabel": "alias"
  },
  "analytics": {
    "title": "Analisis",
    "overviewDescription": "Pantau pola penggunaan API Anda, konsumsi token, biaya, dan tren aktivitas di semua penyedia dan model.",
    "evalsDescription": "Jalankan rangkaian evaluasi untuk menguji dan memvalidasi titik akhir LLM Anda. Bandingkan kualitas model, deteksi regresi, dan latensi tolok ukur.",
    "overview": "Ikhtisar",
    "evals": "Evaluasi"
  },
  "apiManager": {
    "title": "Kunci API",
    "createKey": "Buat Kunci API",
    "key": "Kunci",
    "revokeKey": "Cabut Kunci",
    "revokeConfirm": "Apakah Anda yakin ingin mencabut kunci API ini?",
    "noKeys": "Belum ada kunci API",
    "noKeysDesc": "Buat kunci API pertama Anda untuk mengautentikasi permintaan ke titik akhir Anda",
    "keyLabel": "Label Kunci",
    "permissions": "Izin",
    "expiresAt": "Kedaluwarsa",
    "never": "Tidak pernah",
    "revoke": "Cabut",
    "showKey": "Tampilkan Kunci",
    "hideKey": "Sembunyikan Kunci",
    "copyKey": "Salin Kunci API",
    "allModels": "Semua model",
    "selectedModels": "Model Terpilih",
    "readOnly": "Hanya Baca",
    "fullAccess": "Akses Penuh",
    "keyManagement": "Manajemen Kunci API",
    "keyManagementDesc": "Buat dan kelola kunci API untuk mengautentikasi permintaan ke titik akhir Anda",
    "totalKeys": "Jumlah Kunci",
    "restricted": "Terbatas",
    "totalRequests": "Jumlah Permintaan",
    "modelsAvailable": "Model Tersedia",
    "registeredKeys": "Kunci Terdaftar",
    "keysRegistered": "{count} kunci terdaftar",
    "keyRegistered": "Kunci {count} terdaftar",
    "keysSecurityNote": "Setiap kunci mengisolasi pelacakan penggunaan dan dapat dicabut secara independen. Kunci disamarkan setelah pembuatan demi keamanan.",
    "createFirstKey": "Buat Kunci Pertama Anda",
    "name": "Nama",
    "usage": "Penggunaan",
    "created": "Dibuat",
    "actions": "Tindakan",
    "reqs": "persyaratan",
    "neverUsed": "Tidak pernah digunakan",
    "deleteConfirm": "Hapus kunci API ini?",
    "usageTips": "Tip Penggunaan",
    "tipAuth": "Gunakan kunci API di header Otorisasi sebagai Pembawa YOUR_KEY",
    "tipSecure": "Kunci hanya ditampilkan satu kali selama pembuatan — simpanlah dengan aman",
    "tipSeparate": "Buat kunci terpisah untuk klien atau lingkungan yang berbeda",
    "tipRestrict": "Batasi kunci pada model tertentu untuk keamanan dan pengendalian biaya yang lebih baik",
    "keyName": "Nama Kunci",
    "keyNamePlaceholder": "misalnya, Kunci Produksi, Kunci Pengembangan",
    "keyNameDesc": "Pilih nama deskriptif untuk mengidentifikasi tujuan kunci ini",
    "keyCreated": "Kunci API Dibuat",
    "keyCreatedSuccess": "Kunci berhasil dibuat!",
    "keyCreatedNote": "Salin dan simpan kunci ini sekarang — kunci ini tidak akan ditampilkan lagi.",
    "done": "Selesai",
    "savePermissions": "Simpan Izin",
    "allowAll": "Izinkan Semua",
    "restrict": "Batasi",
    "allowAllInfo": "Kunci ini dapat mengakses semua model yang tersedia.",
    "restrictInfo": "Kunci ini dapat mengakses {selected} dari {total} model.",
    "selected": "{count} dipilih",
    "all": "Semua",
    "clear": "Jelas",
    "searchModels": "Cari model berdasarkan nama atau penyedia...",
    "noModelsFound": "Tidak ada model yang ditemukan",
    "keyNameRequired": "Nama kunci wajib diisi",
    "keyNameTooLong": "Nama kunci harus terdiri dari {max} karakter atau kurang",
    "keyNameInvalid": "Nama kunci hanya boleh berisi huruf, angka, spasi, tanda hubung, dan garis bawah",
    "invalidKeyName": "Nama kunci tidak valid",
    "failedCreateKey": "Gagal membuat kunci",
    "failedCreateKeyRetry": "Gagal membuat kunci. Silakan coba lagi.",
    "invalidKeyId": "ID kunci tidak valid",
    "failedDeleteKey": "Gagal menghapus kunci",
    "failedDeleteKeyRetry": "Gagal menghapus kunci. Silakan coba lagi.",
    "invalidModelsSelection": "Pemilihan model tidak valid",
    "cannotSelectMoreThanModels": "Tidak dapat memilih lebih dari {max} model",
    "failedUpdatePermissions": "Gagal memperbarui izin",
    "failedUpdatePermissionsRetry": "Gagal memperbarui izin. Silakan coba lagi.",
    "unknownProvider": "tidak diketahui",
    "copyMaskedKey": "Salin kunci bertopeng",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "lastUsedOn": "Terakhir: {date}",
    "editPermissions": "Edit izin",
    "deleteKey": "Hapus kunci",
    "model": "{count} modelnya",
    "models": "{count} model",
    "permissionsTitle": "Izin: {name}",
    "allowAllDesc": "Kunci ini dapat mengakses semua model yang tersedia.",
    "restrictDesc": "Kunci ini dapat mengakses {selectedCount} dari {totalModels} model.",
    "selectedCount": "{count} dipilih"
  },
  "auditLog": {
    "title": "Catatan Audit",
    "searchPlaceholder": "Tindakan pencarian...",
    "action": "Tindakan",
    "actor": "Aktor",
    "target": "Sasaran",
    "ipAddress": "Alamat IP",
    "timestamp": "Stempel waktu",
    "noEntries": "Tidak ada entri audit yang ditemukan",
    "filterByAction": "Filter berdasarkan tindakan...",
    "filterByActor": "Filter menurut aktor...",
    "filterEntriesAria": "Filter entri log audit",
    "filterByActionTypeAria": "Filter berdasarkan jenis tindakan",
    "filterByActorAria": "Filter berdasarkan aktor",
    "refreshAuditLogAria": "Segarkan log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "notAvailable": "—",
    "description": "Tindakan administratif dan tindakan keamanan",
    "showing": "Menampilkan entri {count} (mengimbangi {offset})",
    "previous": "Sebelumnya"
  },
  "media": {
    "title": "Playground Media",
    "subtitle": "Hasilkan gambar, video, dan musik",
    "model": "Model",
    "prompt": "Prompt",
    "generate": "Hasilkan",
    "generating": "Generating...",
    "loadingModels": "Loading available models...",
    "noModels": "No models available. Configure providers with media capabilities first.",
    "error": "Generation Failed",
    "result": "Result",
    "imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
    "videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
    "musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
  },
  "cliTools": {
    "title": "Alat CLI",
    "noActiveProviders": "Tidak ada penyedia aktif",
    "noActiveProvidersDesc": "Harap tambahkan dan sambungkan penyedia terlebih dahulu untuk mengonfigurasi alat CLI.",
    "mapModels": "Model Peta",
    "testConnection": "Uji Koneksi",
    "connectionStatus": "Status Koneksi",
    "configureEndpoint": "Konfigurasikan Titik Akhir",
    "instructions": "instruksi",
    "modelMapping": "Pemetaan Model",
    "baseUrl": "URL dasar",
    "apiKey": "Kunci API",
    "configured": "Dikonfigurasi",
    "notConfigured": "Tidak dikonfigurasi",
    "notInstalled": "Tidak dipasang",
    "custom": "Adat",
    "unknown": "Tidak diketahui",
    "lastSavedAt": "Terakhir disimpan: {date}",
    "never": "Tidak pernah",
    "justNow": "sekarang",
    "minutesAgoShort": "{count}m yang lalu",
    "hoursAgoShort": "{count}jam yang lalu",
    "daysAgoShort": "{count}hari yang lalu",
    "monthsAgoShort": "{count}bln yang lalu",
    "yearsAgoShort": "{count}tahun yang lalu",
    "runtimeCheckFailed": "Pemeriksaan waktu proses gagal",
    "yourApiKeyPlaceholder": "kunci-api-Anda",
    "modelPlaceholder": "penyedia/model-id",
    "configurationSaved": "Konfigurasi berhasil disimpan.",
    "failedToSave": "Gagal menyimpan konfigurasi.",
    "noApiKeysCreateOne": "Tidak ada kunci API - Buat satu di halaman Kunci",
    "defaultOmnirouteKey": "sk_omniroute (bawaan)",
    "selectModel": "Pilih Model",
    "selectModelForAlias": "Pilih model untuk {alias}",
    "selectModelForTool": "Pilih Model untuk {tool}",
    "select": "Pilih",
    "clear": "Jelas",
    "comingSoon": "Segera hadir",
    "checkingRuntime": "Memeriksa status waktu proses...",
    "guideOnlyIntegration": "Integrasi khusus panduan (tidak diperlukan runtime lokal)",
    "cliRuntimeDetected": "Waktu proses CLI terdeteksi dan siap",
    "cliFoundNotRunnable": "CLI ditemukan tetapi tidak dapat dijalankan{reason}",
    "cliRuntimeNotDetected": "Waktu proses CLI tidak terdeteksi",
    "binary": "Biner",
    "configPath": "jalur konfigurasi",
    "configPathShort": "Konfigurasi",
    "failedCheckRuntimeStatus": "Gagal memeriksa status waktu proses.",
    "copy": "Salin",
    "copied": "Disalin",
    "copyConfig": "Salin Konfigurasi",
    "saveConfig": "Simpan Konfigurasi",
    "selectionSaved": "Pilihan disimpan",
    "guide": "Panduan",
    "detected": "Terdeteksi",
    "notReady": "Belum siap",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "startMitm": "Mulai MITM",
    "stopMitm": "Hentikan MITM",
    "mitmStarted": "MITM dimulai dengan sukses!",
    "mitmStopped": "MITM berhasil dihentikan!",
    "failedStart": "Gagal memulai MITM",
    "failedStop": "Gagal menghentikan MITM",
    "saveMappings": "Simpan Pemetaan",
    "mappingsSaved": "Pemetaan disimpan!",
    "failedSaveMappings": "Gagal menyimpan pemetaan",
    "howItWorks": "Cara kerjanya:",
    "antigravityHowWorksDesc": "Antigravitasi mengirimkan permintaan ke titik akhir Google. MITM mencegat dan mengarahkan mereka ke OmniRoute.",
    "antigravityStep1": "1. Mulai MITM untuk merutekan permintaan melalui OmniRoute.",
    "antigravityStep2Prefix": "2. Tambahkan",
    "antigravityStep2Suffix": "ke file host Anda sebagai 127.0.0.1.",
    "antigravityStep3": "3. Buka Antigravitasi dan permintaan akan diproksi.",
    "sudoPasswordRequiredTitle": "Kata Sandi Sudo Diperlukan",
    "sudoPasswordHint": "Kata sandi administrator diperlukan untuk mengubah file host dan pengaturan proxy sistem.",
    "enterSudoPassword": "Masukkan kata sandi sudo",
    "sudoPasswordRequiredError": "Kata sandi Sudo diperlukan.",
    "cancel": "Batalkan",
    "confirm": "Konfirmasikan",
    "settingsApplied": "Pengaturan berhasil diterapkan!",
    "failedApplySettings": "Gagal menerapkan pengaturan",
    "settingsReset": "Pengaturan berhasil diatur ulang!",
    "failedResetSettings": "Gagal menyetel ulang setelan",
    "backupRestored": "Cadangan dipulihkan!",
    "failedRestore": "Gagal memulihkan",
    "checkingCli": "Memeriksa {tool} CLI...",
    "cliNotRunnable": "{tool} CLI diinstal tetapi tidak dapat dijalankan",
    "cliNotInstalled": "{tool} CLI tidak diinstal",
    "cliNotDetected": "{tool} CLI tidak terdeteksi",
    "cliDetectedReady": "{tool} CLI terdeteksi dan siap",
    "cliFoundFailedHealthcheck": "{tool} CLI ditemukan tetapi pemeriksaan kesehatan runtime gagal{reason}.",
    "installCliPrompt": "Silakan instal {tool} CLI untuk menggunakan fitur ini.",
    "installCodexPrompt": "Silakan instal Codex CLI untuk menggunakan fitur penerapan otomatis.",
    "hide": "Sembunyikan",
    "howToInstall": "Cara Menginstal",
    "installationGuide": "Panduan Instalasi",
    "platforms": "macOS / Linux / Windows:",
    "afterInstallationRun": "Setelah instalasi, jalankan",
    "toVerify": "untuk memverifikasi.",
    "current": "Saat ini",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Atur ulang ke default",
    "providerModelPlaceholder": "penyedia/model-id",
    "apply": "Terapkan",
    "reset": "Setel ulang",
    "manualConfig": "Konfigurasi Manual",
    "backups": "Cadangan",
    "configBackups": "Konfigurasi Cadangan",
    "noBackupsYet": "Belum ada cadangan. Cadangan dibuat secara otomatis sebelum setiap Terapkan atau Atur Ulang.",
    "restore": "Pulihkan",
    "backupRestoredReloading": "Cadangan dipulihkan! Memuat ulang status...",
    "failedRestoreBackup": "Gagal memulihkan cadangan",
    "applied": "Diterapkan!",
    "failed": "Gagal",
    "resetDone": "Setel ulang!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasi sebagai penyedia yang kompatibel dengan OpenAI",
    "provider": "Penyedia",
    "model": "Model",
    "providers": "Penyedia",
    "auth": "Penulis",
    "noApiKeysAvailable": "Tidak ada kunci API yang tersedia",
    "usingDefaultOmniroute": "Menggunakan default: sk_omniroute",
    "updateConfig": "Perbarui Konfigurasi",
    "applyConfig": "Terapkan Konfigurasi",
    "noBackupsAvailable": "Tidak ada cadangan yang tersedia.",
    "profileSaved": "Profil \"{name}\" disimpan!",
    "failedSaveProfile": "Gagal menyimpan profil",
    "profileActivated": "Profil diaktifkan!",
    "failedActivateProfile": "Gagal mengaktifkan profil",
    "profiles": "Profil",
    "savedProfiles": "Profil Tersimpan",
    "noProfilesYet": "Belum ada profil yang disimpan. Simpan konfigurasi saat ini sebagai profil di bawah.",
    "activate": "Aktifkan",
    "deleteProfile": "Hapus profil",
    "profileNamePlaceholder": "Nama profil (misalnya Akun Pribadi)",
    "saveCurrent": "Simpan Saat Ini",
    "codexAuthNotePrefix": "Penggunaan kodeks",
    "codexAuthNoteMiddle": "dengan",
    "codexAuthNoteSuffix": "Klik \"Terapkan\" untuk mengkonfigurasi otomatis.",
    "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual",
    "codexManualConfiguration": "Codex CLI - Konfigurasi Manual",
    "droidManualConfiguration": "Pabrik Droid - Konfigurasi Manual",
    "openClawManualConfiguration": "Buka Claw - Konfigurasi Manual",
    "clineManualConfiguration": "Konfigurasi Manual Cline",
    "kiloManualConfiguration": "Konfigurasi Manual Kode Kilo",
    "toolDescriptions": {
      "antigravity": "IDE Antigravitasi Google dengan MITM",
      "claude": "CLI Kode Claude Antropis",
      "codex": "CLI Codex OpenAI",
      "droid": "Asisten AI Droid Pabrik",
      "openclaw": "Buka Asisten AI Claw",
      "cline": "CLI Asisten Pengkodean AI Cline",
      "kilo": "CLI Asisten AI Kode Kilo",
      "cursor": "Editor Kode AI Kursor",
      "continue": "Lanjutkan Asisten AI",
      "opencode": "OpenCode AI coding agent (Terminal)",
      "kiro": "Amazon Kiro — AI-powered IDE"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Membutuhkan akun Cursor Pro untuk menggunakan fitur ini.",
          "1": "Kursor merutekan permintaan melalui servernya sendiri, sehingga titik akhir lokal tidak didukung. Harap aktifkan Cloud Endpoint di Pengaturan."
        },
        "steps": {
          "1": {
            "title": "Buka Pengaturan",
            "desc": "Buka Pengaturan -> Model"
          },
          "2": {
            "title": "Aktifkan API OpenAI",
            "desc": "Aktifkan opsi \"Kunci API OpenAI\"."
          },
          "3": {
            "title": "URL dasar"
          },
          "4": {
            "title": "Kunci API"
          },
          "5": {
            "title": "Tambahkan Model Khusus",
            "desc": "Klik \"Lihat Semua Model\" -> \"Tambahkan Model Khusus\""
          },
          "6": {
            "title": "Pilih Model"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Buka Konfigurasi",
            "desc": "Buka Lanjutkan file konfigurasi"
          },
          "2": {
            "title": "Kunci API"
          },
          "3": {
            "title": "Pilih Model"
          },
          "4": {
            "title": "Tambahkan Konfigurasi Model",
            "desc": "Tambahkan konfigurasi berikut ke array model Anda:"
          }
        }
      },
      "opencode": {
        "steps": {
          "1": {
            "title": "Install OpenCode",
            "desc": "Install via npm: npm install -g opencode-ai"
          },
          "2": {
            "title": "API Key"
          },
          "3": {
            "title": "Set Base URL",
            "desc": "opencode config set baseUrl {{baseUrl}}"
          },
          "4": {
            "title": "Select Model"
          }
        }
      },
      "kiro": {
        "steps": {
          "1": {
            "title": "Open Kiro Settings",
            "desc": "Go to Settings → AI Provider"
          },
          "2": {
            "title": "Base URL",
            "desc": "Paste your OmniRoute endpoint URL"
          },
          "3": {
            "title": "API Key"
          },
          "4": {
            "title": "Select Model"
          }
        }
      }
    }
  },
  "combos": {
    "title": "kombo",
    "description": "Buat kombo model dengan perutean berbobot dan dukungan fallback",
    "createCombo": "Buat Kombo",
    "editCombo": "Sunting Kombo",
    "deleteCombo": "Hapus Kombo",
    "noModels": "Tidak ada model",
    "noModelsYet": "Belum ada model yang ditambahkan",
    "addModel": "Tambahkan Model",
    "addModelToCombo": "Tambahkan Model ke Kombo",
    "routingStrategy": "Strategi Perutean",
    "maxRetries": "Percobaan Ulang Maks",
    "timeout": "Batas waktu (md)",
    "healthcheck": "Pemeriksaan kesehatan",
    "priority": "Prioritas",
    "fallback": "Penggantian",
    "roundRobin": "Robin Bulat",
    "random": "Acak",
    "leastLatency": "Latensi Paling Sedikit",
    "comboName": "Nama Kombo",
    "comboNamePlaceholder": "kombo saya",
    "deleteConfirm": "Hapus kombo ini?",
    "noCombosYet": "Belum ada kombo",
    "comboCreated": "Kombo berhasil dibuat",
    "comboUpdated": "Kombo berhasil diperbarui",
    "comboDeleted": "Kombo dihapus",
    "failedCreate": "Gagal membuat kombo",
    "failedUpdate": "Gagal memperbarui kombo",
    "errorCreating": "Terjadi kesalahan saat membuat kombo",
    "errorUpdating": "Terjadi kesalahan saat memperbarui kombo",
    "errorDeleting": "Terjadi kesalahan saat menghapus kombo",
    "testFailed": "Permintaan pengujian gagal",
    "failedToggle": "Gagal mengganti kombo",
    "testResults": "Hasil Tes — {name}",
    "resolvedBy": "Diselesaikan oleh:",
    "more": "+{count} lainnya",
    "reqs": "persyaratan",
    "success": "sukses",
    "proxyConfigured": "Proksi dikonfigurasi",
    "copyComboName": "Salin nama kombo",
    "enableCombo": "Aktifkan kombo",
    "disableCombo": "Nonaktifkan kombo",
    "testCombo": "Uji kombo",
    "duplicate": "Duplikat",
    "proxyConfig": "Konfigurasi proksi",
    "nameRequired": "Nama wajib diisi",
    "nameInvalid": "Hanya huruf, angka, -, _, / dan . diperbolehkan",
    "nameHint": "Huruf, angka, -, _, / dan . diperbolehkan",
    "priorityDesc": "Penggantian berurutan: mencoba model 1 terlebih dahulu, lalu 2, dst.",
    "weightedDesc": "Mendistribusikan lalu lintas berdasarkan persentase bobot dengan fallback",
    "roundRobinDesc": "Distribusi melingkar: setiap permintaan diteruskan ke model berikutnya secara bergilir",
    "randomDesc": "Pemilihan acak seragam, lalu kembali ke model lainnya",
    "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, menyeimbangkan beban dari waktu ke waktu",
    "costOptimizedDesc": "Rutekan ke model termurah terlebih dahulu berdasarkan harga",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling",
    "models": "Model",
    "autoBalance": "Keseimbangan otomatis",
    "advancedSettings": "Pengaturan Lanjutan",
    "retryDelay": "Penundaan Coba Lagi (md)",
    "concurrencyPerModel": "Konkurensi / Model",
    "queueTimeout": "Batas Waktu Antrian (md)",
    "advancedHint": "Biarkan kosong untuk menggunakan default global. Ini mengesampingkan pengaturan per penyedia.",
    "moveUp": "Naik",
    "moveDown": "Pindah ke bawah",
    "removeModel": "Hapus",
    "saving": "Menyimpan...",
    "weighted": "Tertimbang",
    "leastUsed": "Paling Sedikit Digunakan",
    "costOpt": "Pilihan Biaya",
    "strategyGuideTitle": "How to use this strategy",
    "strategyGuideWhen": "When to use",
    "strategyGuideAvoid": "Avoid when",
    "strategyGuideExample": "Example",
    "strategyGuide": {
      "priority": {
        "when": "You have one preferred model and only want fallback on failure.",
        "avoid": "You need request distribution across models.",
        "example": "Primary coding model with cheaper backup for outages."
      },
      "weighted": {
        "when": "You need controlled traffic split across models.",
        "avoid": "You cannot maintain accurate weights over time.",
        "example": "80% stable model + 20% canary model rollout."
      },
      "round-robin": {
        "when": "You want predictable and even distribution.",
        "avoid": "Models differ too much in latency or cost.",
        "example": "Same model on multiple accounts to spread throughput."
      },
      "random": {
        "when": "You want simple distribution with minimal setup.",
        "avoid": "You need strict traffic guarantees.",
        "example": "Quick prototyping with equivalent models."
      },
      "least-used": {
        "when": "You want adaptive balancing based on live demand.",
        "avoid": "Traffic is too low to benefit from usage balancing.",
        "example": "Mixed workloads where one model often gets overloaded."
      },
      "cost-optimized": {
        "when": "Cost reduction is your top priority.",
        "avoid": "Pricing data is missing or outdated.",
        "example": "Background or batch jobs where lower cost is preferred."
      }
    },
    "advancedHelp": {
      "maxRetries": "How many retries are attempted before failing a request.",
      "retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
      "timeout": "Maximum request duration before aborting.",
      "healthcheck": "Skips unhealthy models/providers from routing decisions.",
      "concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
      "queueTimeout": "How long a request can wait in queue before timing out."
    },
    "templatesTitle": "Quick templates",
    "templatesDescription": "Apply a starting profile, then adjust models and config.",
    "templateApply": "Apply template",
    "templateHighAvailability": "High availability",
    "templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
    "templateCostSaver": "Cost saver",
    "templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
    "templateBalanced": "Balanced load",
    "templateBalancedDesc": "Least-used routing to spread demand over time.",
    "usageGuideHide": "Hide",
    "usageGuideDontShowAgain": "Don't show again",
    "usageGuideShow": "Show guide",
    "quickTestTitle": "Combo ready to validate",
    "quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
    "testNow": "Test now",
    "pricingCoverage": "Pricing coverage",
    "pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
    "pricingAvailable": "Pricing available",
    "pricingMissing": "No pricing",
    "pricingAvailableShort": "priced",
    "pricingMissingShort": "no-price",
    "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
    "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
    "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.",
    "readinessTitle": "Siap menabung?",
    "readinessDescription": "Tinjau daftar periksa sebelum membuat atau memperbarui kombo ini.",
    "readinessCheckName": "Nama kombo valid",
    "readinessCheckModels": "Setidaknya satu model dipilih",
    "readinessCheckWeights": "Total tertimbang adalah 100%",
    "readinessCheckWeightsOptional": "Aturan berat tidak diperlukan",
    "readinessCheckPricing": "Data harga tersedia",
    "readinessCheckPricingOptional": "Aturan penetapan harga tidak diperlukan",
    "saveBlockedTitle": "Penyimpanan diblokir hingga item berikut diperbaiki:",
    "saveBlockName": "Tentukan nama kombo.",
    "saveBlockModels": "Tambahkan setidaknya satu model.",
    "saveBlockWeighted": "Tetapkan bobot menjadi 100% (saat ini: {total}%).",
    "saveBlockPricing": "Tambahkan harga untuk setidaknya satu model atau pilih strategi lain.",
    "recommendationsLabel": "Recommended setup",
    "applyRecommendations": "Apply recommendations",
    "recommendationsUpdated": "Recommendations updated for {strategy}.",
    "recommendationsApplied": "Recommendations applied to this combo.",
    "strategyRecommendations": {
      "priority": {
        "title": "Fail-safe baseline",
        "description": "Use one primary model and keep fallback chain short and reliable.",
        "tip1": "Put your most reliable model first.",
        "tip2": "Keep 1-2 backup models with similar quality.",
        "tip3": "Use safe retries to absorb transient provider failures."
      },
      "weighted": {
        "title": "Controlled traffic split",
        "description": "Great for canary rollouts and gradual migration between models.",
        "tip1": "Start with conservative split like 90/10.",
        "tip2": "Keep the total at 100% and auto-balance after changes.",
        "tip3": "Monitor success and latency before increasing canary weight."
      },
      "round-robin": {
        "title": "Predictable load sharing",
        "description": "Best when models are equivalent and you need smooth distribution.",
        "tip1": "Use at least 2 models.",
        "tip2": "Set concurrency limits to avoid burst overload.",
        "tip3": "Use queue timeout to fail fast under saturation."
      },
      "random": {
        "title": "Quick spread with low setup",
        "description": "Use when you need simple distribution without strict guarantees.",
        "tip1": "Use models with similar latency profiles.",
        "tip2": "Keep retries enabled to absorb random misses.",
        "tip3": "Prefer this for experimentation, not strict SLAs."
      },
      "least-used": {
        "title": "Adaptive balancing",
        "description": "Routes to less-used models to reduce hotspots over time.",
        "tip1": "Works better under continuous traffic.",
        "tip2": "Combine with health checks for safer balancing.",
        "tip3": "Track per-model usage to validate distribution gains."
      },
      "cost-optimized": {
        "title": "Budget-first routing",
        "description": "Routes to lower-cost models when pricing metadata is available.",
        "tip1": "Ensure pricing coverage for all selected models.",
        "tip2": "Keep a quality fallback for hard prompts.",
        "tip3": "Use for batch/background jobs where cost is the main KPI."
      }
    },
    "templateFreeStack": "Free Stack ($0)",
    "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
  },
  "costs": {
    "title": "Biaya",
    "budget": "Anggaran",
    "totalCost": "Jumlah Biaya",
    "breakdown": "Rincian Biaya",
    "noData": "Tidak ada data biaya",
    "byModel": "Berdasarkan Model",
    "byProvider": "Oleh Penyedia"
  },
  "endpoint": {
    "title": "Titik Akhir API",
    "available": "Titik Akhir yang Tersedia",
    "cloudProxy": "Proksi Awan",
    "disableConfirm": "Apakah Anda yakin ingin menonaktifkan proksi cloud?",
    "baseUrl": "URL dasar",
    "apiKeyLabel": "Kunci API",
    "registeredKeys": "Kunci Terdaftar",
    "chatCompletions": "Penyelesaian Obrolan",
    "responses": "Tanggapan",
    "listModels": "Daftar Model",
    "usingCloudProxy": "Menggunakan Proksi Awan",
    "usingLocalServer": "Menggunakan Server Lokal",
    "machineId": "ID Mesin: {id}...",
    "disableCloud": "Nonaktifkan Awan",
    "enableCloud": "Aktifkan Awan",
    "modelsAcrossEndpoints": "{models} model di seluruh titik akhir {endpoints}",
    "chatDesc": "Obrolan streaming & non-streaming dengan semua penyedia",
    "embeddings": "Penyematan",
    "embeddingsDesc": "Penyematan teks untuk saluran pencarian & RAG",
    "imageGeneration": "Pembuatan Gambar",
    "imageDesc": "Hasilkan gambar dari petunjuk teks",
    "rerank": "Ubah peringkat",
    "rerankDesc": "Urutkan ulang dokumen berdasarkan relevansinya dengan kueri",
    "audioTranscription": "Transkripsi Audio",
    "audioTranscriptionDesc": "Transkripsikan file audio ke teks (Bisikan)",
    "textToSpeech": "Teks ke Ucapan",
    "textToSpeechDesc": "Ubah teks menjadi ucapan yang terdengar alami",
    "moderations": "Moderasi",
    "moderationsDesc": "Moderasi konten dan klasifikasi keamanan",
    "responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
    "listModelsDesc": "List all available models across all connected providers",
    "settingsApiDesc": "Read and modify OmniRoute configuration via API",
    "settingsApi": "Settings API",
    "categoryCore": "API Inti",
    "categoryMedia": "Media & Multi-Modal",
    "categoryUtility": "Utilitas & Manajemen",
    "enableCloudTitle": "Aktifkan Proksi Cloud",
    "whatYouGet": "Apa yang akan Anda dapatkan",
    "cloudBenefitAccess": "Akses API Anda dari mana saja di dunia",
    "cloudBenefitShare": "Bagikan titik akhir dengan tim Anda dengan mudah",
    "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi firewall",
    "cloudBenefitEdge": "Jaringan edge global yang cepat",
    "cloudSessionNote": "Cloud akan menyimpan sesi autentikasi Anda selama 1 hari. Jika tidak digunakan maka akan otomatis terhapus.",
    "cloudUnstableNote": "Cloud saat ini tidak stabil dengan Claude Code OAuth dalam beberapa kasus.",
    "cloudConnected": "Proksi Cloud terhubung!",
    "connectingToCloud": "Menghubungkan ke awan...",
    "verifyingConnection": "Memverifikasi koneksi...",
    "connecting": "Menghubungkan...",
    "verifying": "Memverifikasi...",
    "connected": "Terhubung!",
    "disableCloudTitle": "Nonaktifkan Proksi Cloud",
    "disableWarning": "Semua sesi autentikasi akan dihapus dari cloud.",
    "syncingData": "Menyinkronkan data terbaru...",
    "disablingCloud": "Menonaktifkan awan...",
    "syncing": "Menyinkronkan...",
    "disabling": "Menonaktifkan...",
    "cloudConnectedVerified": "Cloud Proxy terhubung dan terverifikasi!",
    "connectedVerificationPending": "Terhubung — verifikasi tertunda",
    "connectedVerificationPendingWithError": "Terhubung — verifikasi tertunda: {error}",
    "cloudDisabledSuccess": "Cloud berhasil dinonaktifkan",
    "syncedSuccess": "Berhasil disinkronkan",
    "failedDisable": "Gagal menonaktifkan awan",
    "failedEnable": "Gagal mengaktifkan awan",
    "cloudRequestTimeout": "Batas waktu permintaan cloud",
    "cloudRequestFailed": "Permintaan awan gagal",
    "cloudWorkerUnreachable": "Tidak dapat menjangkau pekerja cloud. Pastikan layanan cloud berjalan (npm run dev di/cloud).",
    "connectionFailed": "Koneksi gagal",
    "syncFailed": "Gagal menyinkronkan data cloud",
    "providerModelsTitle": "{provider} — Model",
    "noModelsForProvider": "Tidak ada model yang tersedia untuk penyedia ini.",
    "chat": "Obrolan",
    "embedding": "Penyematan",
    "image": "Gambar",
    "custom": "adat",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "sectionTitle": "Integration Surface",
    "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
    "tabApis": "OpenAI-compatible APIs",
    "tabProtocols": "Protocols",
    "tabsAria": "Endpoint sections",
    "protocolsTitle": "Protocols",
    "protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
    "mcpCardTitle": "MCP Server",
    "mcpCardDescription": "Model Context Protocol over stdio",
    "a2aCardTitle": "A2A Server",
    "a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
    "protocolToolsLabel": "Tools",
    "protocolTasksLabel": "Tasks",
    "protocolActiveStreamsLabel": "Active streams",
    "protocolLastActivity": "Last activity",
    "quickStart": "Quick Start",
    "openMcpDashboard": "Open MCP management",
    "openA2aDashboard": "Open A2A management",
    "mcpQuickStartTitle": "MCP Quick Start",
    "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
    "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
    "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
    "a2aQuickStartTitle": "A2A Quick Start",
    "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
    "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
    "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.",
    "completionsLegacy": "Completions (Legacy)",
    "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format"
  },
  "mcpDashboard": {
    "loading": "Loading MCP dashboard...",
    "activate": "activate",
    "deactivate": "deactivate",
    "confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
    "switchComboFailed": "Failed to switch combo state.",
    "switchComboSuccess": "Combo \"{combo}\" updated.",
    "confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
    "applyProfileFailed": "Failed to apply resilience profile.",
    "applyProfileSuccess": "Profile \"{profile}\" applied.",
    "confirmResetBreakers": "Reset all circuit breakers?",
    "resetBreakersFailed": "Failed to reset circuit breakers.",
    "resetBreakersSuccess": "Circuit breakers reset.",
    "processStatus": "Process status",
    "online": "Online",
    "offline": "Offline",
    "pid": "PID",
    "sessionUptime": "Session uptime",
    "lastHeartbeat": "Last heartbeat",
    "activity24h": "Activity (24h)",
    "totalCalls": "Total calls",
    "successRate": "Success rate",
    "avgLatency": "Avg latency",
    "topTools": "Top tools",
    "noToolCalls24h": "No tool calls in the last 24 hours.",
    "runtimeDetails": "Runtime details",
    "transport": "Transport",
    "scopesEnforced": "Scopes enforced",
    "yes": "yes",
    "no": "no",
    "lastCall": "Last call",
    "heartbeatPath": "Heartbeat path",
    "operationalControls": "Operational controls",
    "switchCombo": "Switch combo",
    "inactive": "inactive",
    "active": "active",
    "activateCombo": "Activate combo",
    "deactivateCombo": "Deactivate combo",
    "applyResilienceProfile": "Apply resilience profile",
    "profileAggressive": "aggressive",
    "profileBalanced": "balanced",
    "profileConservative": "conservative",
    "applyProfile": "Apply profile",
    "resetCircuitBreakers": "Reset circuit breakers",
    "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
    "resetAllBreakers": "Reset all breakers",
    "toolsAndScopes": "Tools and scopes",
    "tableTool": "Tool",
    "tableScopes": "Scopes",
    "tablePhase": "Phase",
    "tableAudit": "Audit",
    "auditLog": "Audit log",
    "auditSummary": "Panggilan: {total} | halaman {page} dari {totalPages}",
    "allTools": "Semua alat",
    "allResults": "Semua hasil",
    "success": "Kesuksesan",
    "failure": "Kegagalan",
    "apiKeyIdPlaceholder": "apiKeyId",
    "loadingAuditEntries": "Memuat entri audit...",
    "noAuditEntriesForFilters": "Tidak ada entri audit yang ditemukan untuk filter saat ini.",
    "tableTimestamp": "Stempel waktu",
    "tableDuration": "Lamanya",
    "tableResult": "Hasil",
    "tableApiKey": "Kunci API",
    "failed": "failed",
    "previous": "Previous",
    "next": "Next"
  },
  "a2aDashboard": {
    "loading": "Loading A2A dashboard...",
    "confirmCancelTask": "Cancel task {taskId}?",
    "cancelTaskFailed": "Failed to cancel task.",
    "cancelTaskSuccess": "Task {taskId} cancelled.",
    "smokeSendFailed": "message/send smoke test failed.",
    "smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
    "smokeSendSuccess": "message/send ok.",
    "smokeStreamFailed": "message/stream smoke test failed.",
    "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
    "smokeStreamNoTaskId": "message/stream finished without task id.",
    "health": "Health",
    "ok": "ok",
    "totalTasks": "Total tasks",
    "activeStreams": "Active streams",
    "lastTask": "Last task",
    "taskStateOverview": "Task state overview",
    "state": {
      "submitted": "submitted",
      "working": "working",
      "completed": "completed",
      "failed": "failed",
      "cancelled": "cancelled"
    },
    "agentCard": "Agent card",
    "version": "Version",
    "url": "URL",
    "capabilities": "Capabilities",
    "agentCardNotAvailable": "Agent card not available.",
    "quickValidation": "Quick validation",
    "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
    "runMessageSend": "Run message/send",
    "runMessageStream": "Run message/stream",
    "taskManagement": "Task management",
    "taskSummary": "{total} tasks | page {page} of {totalPages}",
    "allStates": "all",
    "allSkills": "all skills",
    "loadingTasks": "Loading tasks...",
    "noTasksForFilters": "No tasks found for current filters.",
    "tableTask": "Task",
    "tableSkill": "Skill",
    "tableState": "State",
    "tableUpdated": "Updated",
    "tableActions": "Actions",
    "view": "View",
    "cancel": "Cancel",
    "previous": "Previous",
    "next": "Next",
    "taskDetail": "Task detail",
    "close": "Close",
    "metadata": "Metadata",
    "events": "Events",
    "artifacts": "Artifacts"
  },
  "health": {
    "title": "Kesehatan Sistem",
    "description": "Pemantauan instans OmniRoute Anda secara real-time",
    "healthy": "Sehat",
    "degraded": "Terdegradasi",
    "down": "Turun",
    "uptime": "Waktu aktif",
    "memory": "Memori",
    "memoryRss": "Memori (RSS)",
    "heap": "tumpukan",
    "cpu": "CPU",
    "database": "Basis data",
    "version": "Versi",
    "lastCheck": "Pemeriksaan Terakhir",
    "providerHealth": "Kesehatan Penyedia",
    "systemMetrics": "Metrik Sistem",
    "tokenHealth": "Token Kesehatan",
    "refreshAll": "Segarkan Semua",
    "checkNow": "Periksa Sekarang",
    "loadingHealth": "Memuat data kesehatan...",
    "failedToLoad": "Gagal memuat data kesehatan: {error}",
    "retry": "Coba lagi",
    "allOperational": "Semua sistem beroperasi",
    "issuesDetected": "Masalah sistem terdeteksi",
    "updatedAt": "Diperbarui {time}",
    "latency": "Latensi",
    "latencyP50": "hal50",
    "latencyP95": "hal95",
    "latencyP99": "hal99",
    "millisecondsShort": "{value}ms",
    "notAvailable": "—",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Belum ada datanya",
    "promptCache": "Tembolok Cepat",
    "entries": "Entri",
    "hitRate": "Tingkat Hit",
    "hitsMisses": "Hit / Miss",
    "signatureCache": "Tembolok Tanda Tangan",
    "signatureDefaults": "Default",
    "signatureTool": "Alat",
    "signatureFamily": "Keluarga",
    "signatureSession": "Sesi",
    "recovering": "Memulihkan",
    "noCBData": "Tidak ada data pemutus sirkuit yang tersedia. Buatlah beberapa permintaan terlebih dahulu.",
    "providerHealthStatusAria": "Status kesehatan penyedia",
    "issuesLabel": "Masalah Terdeteksi",
    "operational": "Operasional",
    "providers": "Penyedia",
    "healthyCount": "{count} sehat",
    "nodeVersion": "Simpul {version}",
    "failures": "{count} kegagalan",
    "failuresPlural": "{count} kegagalan",
    "lastFailure": "Terakhir",
    "rateLimitStatus": "Status Batas Nilai",
    "activeLimiters": "{count} pembatas aktif",
    "activeLimitersPlural": "{count} pembatas aktif",
    "queued": "Mengantri",
    "queuedCount": "{count} mengantri",
    "running": "berlari",
    "runningCount": "{count} berjalan",
    "ok": "Oke",
    "activeLockouts": "Penguncian Aktif",
    "resetConfirm": "Reset semua pemutus sirkuit ke kondisi sehat? Ini akan menghapus semua jumlah kegagalan dan memulihkan semua penyedia ke status operasional.",
    "resetAllTitle": "Setel ulang semua pemutus sirkuit ke kondisi sehat",
    "resetting": "Menyetel ulang...",
    "resetAll": "Atur Ulang Semua",
    "until": "Sampai {time}"
  },
  "limits": {
    "title": "Batas & Kuota",
    "rateLimit": "Batas Nilai",
    "remaining": "Tersisa",
    "requestsPerMinute": "Permintaan/mnt",
    "tokensPerMinute": "Token/mnt",
    "dailyLimit": "Batas Harian"
  },
  "logs": {
    "title": "Log",
    "requestLogs": "Log Permintaan",
    "proxyLogs": "Log Proksi",
    "auditLog": "Catatan Audit",
    "console": "Konsol",
    "auditLogDesc": "Tindakan administratif dan tindakan keamanan",
    "loading": "Memuat...",
    "refresh": "Segarkan",
    "filterByAction": "Filter berdasarkan tindakan...",
    "filterByActor": "Filter menurut aktor...",
    "filterEntriesAria": "Filter entri log audit",
    "filterByActionTypeAria": "Filter berdasarkan jenis tindakan",
    "filterByActorAria": "Filter berdasarkan aktor",
    "refreshAuditLogAria": "Segarkan log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "showing": "Menampilkan entri {count} (mengimbangi {offset})",
    "search": "Cari",
    "timestamp": "Stempel waktu",
    "action": "Tindakan",
    "actor": "Aktor",
    "target": "Sasaran",
    "details": "Detail",
    "ipAddress": "Alamat IP",
    "notAvailable": "—",
    "noEntries": "Tidak ditemukan entri log audit",
    "previous": "Sebelumnya",
    "next": "Selanjutnya"
  },
  "onboarding": {
    "welcome": "Selamat datang",
    "security": "Keamanan",
    "test": "Tes",
    "ready": "Siap!",
    "setPassword": "Tetapkan Kata Sandi",
    "addProvider": "Tambahkan penyedia pertama Anda",
    "getStarted": "Memulai",
    "skip": "Lewati",
    "skipWizard": "Lewati wizard sepenuhnya",
    "skipPassword": "Lewati pengaturan kata sandi",
    "skipAndContinue": "Lewati & Lanjutkan",
    "passwordLabel": "Kata sandi",
    "confirmPassword": "Konfirmasi Kata Sandi",
    "enterPassword": "Masukkan kata sandi",
    "confirmPasswordPlaceholder": "Konfirmasikan kata sandi",
    "passwordsMismatch": "Kata sandi tidak cocok",
    "setupComplete": "Penyiapan Selesai!",
    "goToDashboard": "Buka Dasbor →",
    "welcomeDesc": "OmniRoute adalah proksi AI API lokal Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.",
    "multiProvider": "Multi-Penyedia",
    "usageTracking": "Pelacakan Penggunaan",
    "apiKeyMgmt": "Manajemen Kunci API",
    "securityDesc": "Tetapkan kata sandi untuk melindungi dasbor Anda, atau lewati saja sekarang.",
    "providerDesc": "Hubungkan penyedia AI pertama Anda. Anda dapat menambahkan lebih banyak lagi nanti.",
    "apiKeyRequired": "Kunci API (wajib)",
    "customUrlOptional": "URL khusus (opsional)",
    "testDesc": "Mari verifikasi koneksi penyedia Anda berfungsi.",
    "runTest": "Jalankan Tes Koneksi",
    "testingConnection": "Menguji koneksi...",
    "connectionSuccessful": "Koneksi berhasil! Penyedia Anda sudah siap.",
    "noProviderFound": "Tidak ada penyedia yang ditemukan. Anda dapat menambahkannya dari dasbor nanti.",
    "testFailed": "Pengujian gagal, namun Anda dapat mengonfigurasinya nanti.",
    "couldNotTest": "Tidak dapat menguji saat ini. Anda dapat mengujinya dari dasbor.",
    "doneDesc": "Anda sudah siap! Instans OmniRoute Anda telah dikonfigurasi dan siap untuk memproksi permintaan AI.",
    "yourEndpoint": "Titik akhir Anda:",
    "continue": "Lanjutkan",
    "retry": "Coba lagi",
    "failedSetPassword": "Gagal menyetel kata sandi. Coba lagi.",
    "failedAddProvider": "Gagal menambahkan penyedia. Coba lagi.",
    "connectionError": "Kesalahan koneksi. Silakan coba lagi.",
    "provider": "Penyedia"
  },
  "providers": {
    "title": "Penyedia",
    "addProvider": "Tambahkan Penyedia",
    "editProvider": "Sunting Penyedia",
    "deleteProvider": "Hapus Penyedia",
    "noProviders": "Tidak ada penyedia yang dikonfigurasi",
    "modelAvailability": "Ketersediaan Model",
    "accounts": "Akun",
    "newAccount": "Akun Baru",
    "deleteConfirm": "Apakah Anda yakin ingin menghapus penyedia ini?",
    "testing": "Menguji...",
    "testConnection": "Uji Koneksi",
    "testSuccess": "Koneksi berhasil",
    "testFailed": "Koneksi gagal",
    "available": "Tersedia",
    "cooldown": "Pendinginan",
    "unavailable": "Tidak tersedia",
    "unknown": "Tidak diketahui",
    "oauthLabel": "OAuth",
    "compatibleLabel": "Kompatibel",
    "chat": "Obrolan",
    "responses": "Tanggapan",
    "messages": "Pesan",
    "oauthProviders": "Penyedia OAuth",
    "freeProviders": "Penyedia Gratis",
    "apiKeyProviders": "Penyedia Kunci API",
    "compatibleProviders": "Penyedia Kompatibel Kunci API",
    "testAll": "Uji Semua",
    "testAllOAuth": "Uji semua koneksi OAuth",
    "testAllFree": "Uji semua koneksi Gratis",
    "testAllApiKey": "Uji semua koneksi Kunci API",
    "testAllCompatible": "Uji semua koneksi yang Kompatibel",
    "connected": "{count} Terhubung",
    "errorCount": "{count} Kesalahan ({code})",
    "errorCountNoCode": "{count} Kesalahan",
    "noConnections": "Tidak ada koneksi",
    "disabled": "Dengan disabilitas",
    "enableProvider": "Aktifkan penyedia",
    "disableProvider": "Nonaktifkan penyedia",
    "testResults": "Hasil Tes",
    "noCompatibleYet": "Belum ada penyedia kompatibel yang ditambahkan",
    "compatibleHint": "Gunakan tombol di atas untuk menambahkan titik akhir yang kompatibel dengan OpenAI atau Anthropic",
    "addOpenAICompatible": "Tambahkan Kompatibel dengan OpenAI",
    "addAnthropicCompatible": "Tambahkan Kompatibel Antropis",
    "addNewProvider": "Tambahkan Penyedia Baru",
    "backToProviders": "Kembali ke Penyedia",
    "configureNewProvider": "Konfigurasikan penyedia AI baru untuk digunakan dengan aplikasi Anda.",
    "providerLabel": "Penyedia",
    "selectProvider": "Pilih penyedia",
    "selectedProvider": "Penyedia yang dipilih",
    "authMethod": "Metode Otentikasi",
    "apiKeyLabel": "Kunci API",
    "apiKeyRequired": "Kunci API diperlukan",
    "selectProviderRequired": "Silakan pilih penyedia",
    "enterApiKey": "Masukkan kunci API Anda",
    "apiKeySecure": "Kunci API Anda akan dienkripsi dan disimpan dengan aman.",
    "oauth2Connect": "Terhubung dengan OAuth2",
    "oauth2Label": "OAuth2",
    "oauth2Desc": "Hubungkan akun Anda menggunakan autentikasi OAuth2.",
    "displayName": "Nama Tampilan",
    "displayNamePlaceholder": "misalnya, API Produksi, Lingkungan Pengembang",
    "displayNameHint": "Opsional. Nama yang bersahabat untuk mengidentifikasi konfigurasi ini.",
    "active": "Aktif",
    "activeDescription": "Aktifkan penyedia ini untuk digunakan dalam aplikasi Anda",
    "cancel": "Batalkan",
    "createProvider": "Buat Penyedia",
    "failedCreate": "Gagal membuat penyedia",
    "errorOccurred": "Terjadi kesalahan. Silakan coba lagi.",
    "modelStatus": "Status Model",
    "allModelsOperational": "Semua model beroperasi",
    "modelsWithIssues": "{count} model yang bermasalah",
    "allModelsNormal": "Semua model merespons secara normal.",
    "cooldownCleared": "Cooldown selesai untuk {model}",
    "failedClearCooldown": "Gagal menghapus cooldown",
    "loadingAvailability": "Memuat ketersediaan model...",
    "clearCooldown": "Jelas",
    "clearing": "Membersihkan...",
    "until": "Sampai {time}",
    "providerTestFailed": "Tes penyedia gagal",
    "modeTest": "{mode} Tes",
    "passedCount": "{count} lulus",
    "failedCount": "{count} gagal",
    "testedCount": "{count} diuji",
    "millisecondsAbbr": "{value}ms",
    "okShort": "Oke",
    "errorShort": "KESALAHAN",
    "noActiveConnectionsInGroup": "Tidak ditemukan koneksi aktif untuk grup ini.",
    "allTestsPassed": "Semua tes {total} lulus",
    "testSummary": "{passed}/{total} lulus, {failed} gagal",
    "nameLabel": "Nama",
    "prefixLabel": "Awalan",
    "baseUrlLabel": "URL dasar",
    "apiTypeLabel": "Jenis API",
    "prefixHint": "Diperlukan. Awalan unik untuk nama model.",
    "nameHint": "Diperlukan. Label ramah untuk node ini.",
    "baseUrlHint": "Diperlukan.  URL dasar API penyedia.",
    "anthropicPrefixPlaceholder": "ac-prod",
    "openaiPrefixPlaceholder": "oc-prod",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Validasi Koneksi",
    "validating": "Memvalidasi...",
    "connectionValid": "Koneksi valid!",
    "connectionFailed": "Koneksi gagal. Periksa URL dan kunci.",
    "testKeyLabel": "Uji Kunci API",
    "testKeyPlaceholder": "sk-... (untuk validasi saja)",
    "providerNotFound": "Penyedia tidak ditemukan",
    "deleteConnectionConfirm": "Hapus koneksi ini?",
    "failedSetAlias": "Gagal menyetel alias",
    "failedSaveConnection": "Gagal menyimpan koneksi",
    "failedSaveConnectionRetry": "Gagal menyimpan koneksi. Silakan coba lagi.",
    "failedRetestConnection": "Gagal menguji ulang koneksi",
    "deleteCompatibleNodeConfirm": "Hapus node yang kompatibel dengan {type} ini?",
    "anthropicCompatibleDetails": "Detail Kompatibel Antropis",
    "openaiCompatibleDetails": "Detail Kompatibel OpenAI",
    "messagesApi": "API Pesan",
    "responsesApi": "API Respons",
    "chatCompletions": "Penyelesaian Obrolan",
    "importingModels": "Mengimpor...",
    "importFromModels": "Impor dari /models",
    "addConnectionToImport": "Tambahkan koneksi untuk mengaktifkan impor.",
    "noModelsConfigured": "Tidak ada model yang dikonfigurasi",
    "connectionCount": "{count} koneksi",
    "fetchingModels": "Mengambil model yang tersedia...",
    "failedFetchModels": "Gagal mengambil model",
    "noModelsFound": "Tidak ada model yang ditemukan",
    "importFailed": "Impor gagal",
    "noNewModelsAdded": "Tidak ada model baru yang ditambahkan.",
    "adding": "Menambahkan...",
    "importingModelsTitle": "Mengimpor Model",
    "copyModel": "Salin modelnya",
    "removeModel": "Hapus modelnya",
    "rateLimitProtected": "Dilindungi",
    "rateLimitUnprotected": "Tidak terlindungi",
    "enableRateLimitProtection": "Klik untuk mengaktifkan perlindungan batas tarif",
    "disableRateLimitProtection": "Klik untuk menonaktifkan perlindungan batas tarif",
    "productionKey": "Kunci Produksi",
    "enterNewApiKey": "Masukkan kunci API baru",
    "optional": "Opsional",
    "anthropicCompatibleName": "Kompatibel Antropis",
    "openaiCompatibleName": "Kompatibel dengan OpenAI",
    "failedImportModels": "Gagal mengimpor model",
    "noModelsReturnedFromEndpoint": "Tidak ada model yang dikembalikan dari titik akhir /models.",
    "importingModelsProgress": "Mengimpor {current} dari {total} model...",
    "foundModelsStartingImport": "Ditemukan model {count}. Mulai mengimpor...",
    "importingModelById": "Mengimpor {modelId}...",
    "importSuccessCount": "Berhasil mengimpor {count, plural, one {# model} other {# models}}!",
    "noNewModelsAddedExisting": "Tidak ada model baru yang ditambahkan (semua sudah ada).",
    "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Terjadi kesalahan yang tidak terduga",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "pesan",
    "responsesPath": "tanggapan",
    "chatCompletionsPath": "obrolan/penyelesaian",
    "add": "Tambahkan",
    "edit": "Sunting",
    "delete": "Hapus",
    "anthropic": "Antropis",
    "openai": "OpenAI",
    "singleConnectionPerCompatible": "Hanya satu koneksi yang diperbolehkan per node yang kompatibel. Tambahkan node lain jika Anda memerlukan lebih banyak koneksi.",
    "connections": "Koneksi",
    "providerProxyTitleConfigured": "Proksi penyedia: {host}",
    "configured": "dikonfigurasi",
    "providerProxyConfigureHint": "Konfigurasikan proxy untuk semua koneksi penyedia ini",
    "providerProxy": "Proksi Penyedia",
    "noConnectionsYet": "Belum ada koneksi",
    "addFirstConnectionHint": "Tambahkan koneksi pertama Anda untuk memulai",
    "addConnection": "Tambahkan Koneksi",
    "availableModels": "Model yang Tersedia",
    "pageAutoRefresh": "Halaman akan disegarkan secara otomatis...",
    "statusDisabled": "dengan disabilitas",
    "statusConnected": "terhubung",
    "statusRuntimeIssue": "masalah waktu proses",
    "statusAuthFailed": "autentikasi gagal",
    "statusRateLimited": "tarif terbatas",
    "statusNetworkIssue": "masalah jaringan",
    "statusTestUnsupported": "tes tidak didukung",
    "statusUnavailable": "tidak tersedia",
    "statusFailed": "gagal",
    "statusError": "kesalahan",
    "oauthAccount": "Akun OAuth",
    "errorTypeRuntime": "Waktu proses lokal",
    "errorTypeUpstreamAuth": "Otentikasi hulu",
    "errorTypeMissingCredential": "Kredensial tidak ada",
    "errorTypeRefreshFailed": "Penyegaran gagal",
    "errorTypeTokenExpired": "Token sudah habis masa berlakunya",
    "errorTypeRateLimited": "Tarif terbatas",
    "errorTypeUpstreamUnavailable": "Hulu tidak tersedia",
    "errorTypeNetworkError": "Kesalahan jaringan",
    "errorTypeTestUnsupported": "Tes tidak didukung",
    "errorTypeUpstreamError": "Kesalahan hulu",
    "proxySourceGlobal": "Global",
    "proxySourceProvider": "Penyedia",
    "proxySourceKey": "Kunci",
    "proxyConfiguredBySource": "Proksi ({source}): {host}",
    "autoPriority": "Otomatis: {priority}",
    "proxy": "Proksi",
    "retestAuthentication": "Uji ulang autentikasi",
    "retest": "Tes ulang",
    "disableConnection": "Nonaktifkan koneksi",
    "enableConnection": "Aktifkan koneksi",
    "reauthenticateConnection": "Otentikasi ulang koneksi ini",
    "proxyConfig": "Konfigurasi proxy",
    "aliasExistsAlert": "Alias \"{alias}\" sudah ada. Silakan gunakan model lain atau edit alias yang ada.",
    "openRouterAnyModelHint": "OpenRouter mendukung model apa pun. Tambahkan model dan buat alias untuk akses cepat.",
    "modelIdFromOpenRouter": "ID Model (dari OpenRouter)",
    "openRouterModelPlaceholder": "antropik/claude-3-opus",
    "customModels": "Model Khusus",
    "customModelsHint": "Tambahkan ID model yang tidak ada dalam daftar default. Ini akan tersedia untuk perutean.",
    "modelId": "ID Model",
    "customModelPlaceholder": "misalnya gpt-4.5-turbo",
    "loading": "Memuat...",
    "removeCustomModel": "Hapus model khusus",
    "noCustomModels": "Belum ada model khusus yang ditambahkan.",
    "allSuggestedAliasesExist": "Semua alias yang disarankan sudah ada. Silakan pilih model lain atau hapus alias yang bertentangan.",
    "failedSaveCustomModel": "Gagal menyimpan model khusus",
    "modelAddedSuccess": "Model {modelId} berhasil ditambahkan",
    "failedAddModelTryAgain": "Gagal menambahkan model. Silakan coba lagi.",
    "failedSaveImportedModel": "Gagal menyimpan model yang diimpor ke database khusus",
    "failedImportModelsTryAgain": "Gagal mengimpor model. Silakan coba lagi.",
    "failedRemoveModelFromDatabase": "Gagal menghapus model dari database",
    "modelRemovedSuccess": "Model berhasil dihapus",
    "failedDeleteModelTryAgain": "Gagal menghapus model. Silakan coba lagi.",
    "compatibleModelsDescription": "Tambahkan model yang kompatibel dengan {type} secara manual atau impor dari titik akhir /models.",
    "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "Validasi kunci API gagal. Silakan periksa kunci Anda dan coba lagi.",
    "addProviderApiKeyTitle": "Tambahkan Kunci API {provider}",
    "checking": "Memeriksa...",
    "check": "Periksa",
    "valid": "Sah",
    "invalid": "Tidak valid",
    "creating": "Membuat...",
    "validationChecksAnthropicCompatible": "Validasi memeriksa {provider} dengan memverifikasi kunci API.",
    "validationChecksOpenAiCompatible": "Pemeriksaan validasi {provider} melalui /models pada URL dasar Anda.",
    "priorityLabel": "Prioritas",
    "saving": "Menyimpan...",
    "save": "Simpan",
    "editConnection": "Sunting Koneksi",
    "accountName": "Nama akun",
    "email": "Surel",
    "healthCheckMinutes": "Pemeriksaan Kesehatan (menit)",
    "healthCheckHint": "Interval penyegaran token proaktif. 0 = dinonaktifkan.",
    "groupLabel": "Environment",
    "groupPlaceholder": "e.g. eKaizen, Personal",
    "failedTestConnection": "Gagal menguji koneksi",
    "failed": "Gagal",
    "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mempertahankan kunci API saat ini.",
    "editCompatibleTitle": "Sunting {type} Kompatibel",
    "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.",
    "apiKeyForCheck": "Kunci API (untuk Pemeriksaan)",
    "compatibleProdPlaceholder": "{type} Kompatibel (Prod)",
    "providerTestTimeout": "Provider test timed out — too many connections to test at once",
    "advancedSettings": "Advanced Settings",
    "chatPathLabel": "Chat Endpoint Path",
    "chatPathPlaceholder": "/chat/completions",
    "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)",
    "modelsPathLabel": "Models Endpoint Path",
    "modelsPathPlaceholder": "/models",
    "modelsPathHint": "Custom models path for validation (e.g. /v4/models)"
  },
  "settings": {
    "title": "Pengaturan",
    "general": "Umum",
    "security": "Keamanan",
    "appearance": "Penampilan",
    "routing": "Perutean",
    "cache": "Tembolok",
    "resilience": "Ketahanan",
    "systemPrompt": "Perintah Sistem",
    "thinkingBudget": "Memikirkan Anggaran",
    "proxy": "Proksi",
    "pricing": "Harga",
    "storage": "Penyimpanan",
    "policies": "Kebijakan",
    "ipFilter": "penyaring IP",
    "comboDefaults": "Default Kombo",
    "fallbackChains": "Rantai Pengganti",
    "changePassword": "Ubah Kata Sandi",
    "enablePassword": "Aktifkan Kata Sandi",
    "darkMode": "Mode Gelap",
    "lightMode": "Modus Cahaya",
    "systemTheme": "Tema Sistem",
    "enableCache": "Aktifkan Cache",
    "cacheTTL": "Tembolok TTL",
    "maxCacheSize": "Ukuran Tembolok Maks",
    "clearCache": "Hapus Tembolok",
    "cacheHits": "Cache Hit",
    "cacheMisses": "Cache Hilang",
    "hitRate": "Tingkat Hit",
    "cacheEntries": "Entri Cache",
    "circuitBreaker": "Pemutus Arus",
    "retryPolicy": "Kebijakan Coba Ulang",
    "maxRetries": "Percobaan Ulang Maks",
    "retryDelay": "Coba lagi Penundaan",
    "timeoutMs": "Batas waktu (md)",
    "enableSystemPrompt": "Aktifkan Perintah Sistem",
    "systemPromptText": "Teks Perintah Sistem",
    "enableThinking": "Aktifkan Berpikir",
    "maxThinkingTokens": "Token Berpikir Maks",
    "enableProxy": "Aktifkan Proksi",
    "proxyUrl": "URL proksi",
    "pricingRates": "Format Tarif Harga",
    "currentPricing": "Ikhtisar Harga Saat Ini",
    "loadingPricing": "Memuat data harga...",
    "noPricing": "Tidak ada data harga yang tersedia",
    "input": "Masukan",
    "output": "Keluaran",
    "cached": "Di-cache",
    "reasoning": "Penalaran",
    "cacheCreation": "Pembuatan Cache",
    "customPricing": "Harga Khusus",
    "databaseSize": "Ukuran Basis Data",
    "backupDb": "Basis Data Cadangan",
    "restoreDb": "Pulihkan Basis Data",
    "exportData": "Ekspor Data",
    "importData": "Impor Data",
    "clearData": "Hapus Semua Data",
    "clearDataConfirm": "Ini akan menghapus semua data secara permanen. Apa kamu yakin?",
    "enableRequestLogs": "Aktifkan Log Permintaan",
    "logRetention": "Retensi Log",
    "ipWhitelist": "Daftar Putih IP",
    "ipBlacklist": "Daftar Hitam IP",
    "addIP": "Tambahkan alamat IP",
    "savedSuccessfully": "Pengaturan berhasil disimpan",
    "ai": "AI",
    "advanced": "Lanjutan",
    "localMode": "Mode Lokal — Semua data disimpan di mesin Anda",
    "settingsSectionsAria": "Bagian pengaturan",
    "switchThemes": "Beralih antara tema terang dan gelap",
    "themeSelectionAria": "Pemilihan tema",
    "themeLight": "Ringan",
    "themeDark": "Gelap",
    "themeSystem": "Sistem",
    "hideHealthLogs": "Sembunyikan Log Pemeriksaan Kesehatan",
    "hideHealthLogsDesc": "Saat AKTIF, sembunyikan pesan [HealthCheck] di konsol server",
    "themeAccent": "Warna tema",
    "themeAccentDesc": "Pilih warna preset atau buat tema Anda sendiri dengan satu warna",
    "themeCreate": "Buat tema",
    "themeCustom": "Tema kustom",
    "themeBlue": "Biru",
    "themeRed": "Merah",
    "themeGreen": "Hijau",
    "themeViolet": "Ungu",
    "themeOrange": "Oranye",
    "themeCyan": "Sian",
    "promptCache": "Tembolok Cepat",
    "flushCache": "Siram Cache",
    "flushing": "Pembilasan…",
    "size": "Ukuran",
    "hits": "Pukulan",
    "evictions": "Penggusuran",
    "loadingCacheStats": "Memuat statistik cache…",
    "globalProxy": "Proksi Global",
    "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Penyedia individual, kombo, dan kunci dapat mengesampingkan hal ini.",
    "noGlobalProxy": "Tidak ada proksi global yang dikonfigurasi",
    "globalLabel": "Global",
    "configure": "Konfigurasikan",
    "globalSystemPrompt": "Perintah Sistem Global",
    "systemPromptDesc": "Disuntikkan ke semua permintaan di tingkat proxy",
    "saved": "Disimpan",
    "systemPromptPlaceholder": "Masukkan prompt sistem untuk menyuntikkan ke semua permintaan...",
    "systemPromptHint": "Prompt ini ditambahkan ke pesan sistem dari setiap permintaan. Gunakan untuk instruksi global, pedoman keselamatan, atau aturan format respons.",
    "chars": "{count} karakter",
    "thinkingBudgetTitle": "Memikirkan Anggaran",
    "thinkingBudgetDesc": "Kontrol penggunaan token penalaran AI di semua permintaan",
    "passthrough": "Melewati",
    "passthroughDesc": "Tidak ada perubahan — klien mengontrol anggaran pemikiran",
    "auto": "Otomatis",
    "autoDesc": "Hapus semua konfigurasi pemikiran — biarkan penyedia memutuskan",
    "custom": "Adat",
    "customDesc": "Tetapkan anggaran token tetap untuk semua permintaan",
    "adaptive": "adaptif",
    "adaptiveDesc": "Skalakan anggaran berdasarkan kompleksitas permintaan",
    "effortNone": "Tidak ada (0 token)",
    "effortLow": "Rendah (token 1K)",
    "effortMedium": "Sedang (10 ribu token)",
    "effortHigh": "Tinggi (128 ribu token)",
    "tokenBudget": "Anggaran Token",
    "tokens": "token",
    "baseEffortLevel": "Tingkat Upaya Dasar",
    "adaptiveHint": "Mode adaptif diskalakan dari tingkat dasar ini berdasarkan jumlah pesan, penggunaan alat, dan panjang perintah.",
    "requireLogin": "Memerlukan login",
    "requireLoginDesc": "Saat AKTIF, dasbor memerlukan kata sandi. Saat MATI, akses tanpa login.",
    "currentPassword": "Kata Sandi Saat Ini",
    "enterCurrentPassword": "Masukkan kata sandi saat ini",
    "newPassword": "Kata Sandi Baru",
    "enterNewPassword": "Masukkan kata sandi baru",
    "confirmPassword": "Konfirmasi Kata Sandi Baru",
    "confirmPasswordPlaceholder": "Konfirmasikan kata sandi baru",
    "passwordsNoMatch": "Kata sandi tidak cocok",
    "passwordUpdated": "Kata sandi berhasil diperbarui",
    "failedUpdatePassword": "Gagal memperbarui kata sandi",
    "errorOccurred": "Terjadi kesalahan",
    "updatePassword": "Perbarui Kata Sandi",
    "setPassword": "Tetapkan Kata Sandi",
    "apiEndpointProtection": "Perlindungan Titik Akhir API",
    "requireAuthModels": "Memerlukan kunci API untuk /models",
    "requireAuthModelsDesc": "Saat AKTIF, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak diautentikasi. Mencegah penemuan model oleh pengguna yang tidak sah.",
    "blockedProviders": "Penyedia yang Diblokir",
    "blockedProvidersDesc": "Sembunyikan penyedia tertentu dari respons /v1/models. Penyedia yang diblokir tidak akan muncul dalam daftar model.",
    "providersBlocked": "{count} penyedia diblokir dari /models",
    "blockProviderTitle": "Blokir {provider}",
    "unblockProviderTitle": "Buka blokir {provider}",
    "routingStrategy": "Strategi Perutean",
    "fillFirst": "Isi Dulu",
    "fillFirstDesc": "Gunakan akun dalam urutan prioritas",
    "roundRobin": "Robin Bulat",
    "roundRobinDesc": "Telusuri semua akun",
    "p2c": "P2C",
    "p2cDesc": "Pilih 2 secara acak, gunakan yang lebih sehat",
    "random": "Acak",
    "randomDesc": "Akun acak setiap permintaan",
    "leastUsed": "Paling Sedikit Digunakan",
    "leastUsedDesc": "Pilih akun yang paling jarang digunakan",
    "costOpt": "Pilihan Biaya",
    "costOptDesc": "Lebih suka akun termurah yang tersedia",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling",
    "stickyLimit": "Batas Lengket",
    "stickyLimitDesc": "Panggilan per akun sebelum beralih",
    "modelAliases": "Alias Model",
    "modelAliasesTitle": "Alias Model",
    "modelAliasesDesc": "Pola karakter pengganti untuk memetakan ulang nama model • Gunakan * dan ?",
    "addCustomAlias": "Tambah Alias Kustom",
    "deprecatedModelId": "ID model yang sudah usang",
    "newModelId": "ID model baru",
    "customAliases": "Alias Kustom",
    "builtInAliases": "Alias Bawaan",
    "backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
    "backgroundDegradationDesc": "Deteksi otomatis tugas latar belakang (judul, ringkasan) dan arahkan ke model yang lebih murah",
    "enableDegradation": "Aktifkan Degradasi Latar Belakang",
    "enableDegradationHint": "Saat diaktifkan, tugas latar belakang seperti pembuatan judul dan ringkasan diarahkan ke model yang lebih murah secara otomatis",
    "tasksDetected": "Tugas terdeteksi",
    "degradationMap": "Peta Degradasi Model",
    "premiumModel": "Model premium",
    "cheapModel": "Model murah",
    "detectionPatterns": "Pola Deteksi",
    "newPattern": "cth. \"buat judul\"",
    "aliasPatternPlaceholder": "claude-soneta-*",
    "aliasTargetPlaceholder": "claude-soneta-4-20250514",
    "pattern": "Pola",
    "targetModel": "Model Sasaran",
    "add": "+ Tambahkan",
    "session": "Sesi",
    "sessionDetailsAria": "Detail sesi",
    "status": "Status",
    "authenticated": "Diautentikasi",
    "guest": "Tamu",
    "loginTime": "Waktu Masuk",
    "sessionAge": "Usia Sesi",
    "browser": "Peramban",
    "clearLocalData": "Hapus Data Lokal",
    "logout": "Keluar",
    "clearLocalDataConfirm": "Hapus semua data lokal? Ini akan mengatur ulang preferensi Anda.",
    "unknown": "Tidak diketahui",
    "systemActor": "sistem",
    "ipAccessControl": "Kontrol Akses IP",
    "ipAccessControlDesc": "Blokir atau izinkan alamat IP tertentu",
    "ipModeDisabled": "Dengan disabilitas",
    "ipModeBlacklist": "Daftar Hitam",
    "ipModeWhitelist": "Daftar putih",
    "ipModeWhitelistPriority": "Prioritas WL",
    "addIpAddress": "Tambahkan Alamat IP",
    "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*",
    "block": "+ Blokir",
    "allow": "+ Izinkan",
    "blocked": "Diblokir ({count})",
    "allowed": "Diizinkan ({count})",
    "temporaryBans": "Larangan Sementara ({count})",
    "minLeft": "{min}m lagi",
    "auditLog": "Catatan Audit",
    "searchAuditLogs": "Telusuri log audit...",
    "failedLoadAuditLog": "Gagal memuat log audit",
    "noAuditEvents": "Tidak ada peristiwa audit yang ditemukan",
    "action": "Tindakan",
    "actor": "Aktor",
    "details": "Detail",
    "time": "Waktu",
    "fallbackChainsTitle": "Rantai Pengganti",
    "fallbackChainsDesc": "Tentukan pesanan cadangan penyedia per model",
    "addChain": "+ Tambahkan Rantai",
    "modelName": "Nama Model",
    "modelNamePlaceholder": "claude-soneta-4-20250514",
    "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam urutan prioritas)",
    "providersCommaSeparatedPlaceholder": "antropik, openai, gemini",
    "createChain": "Buat Rantai",
    "noFallbackChains": "Tidak Ada Rantai Cadangan",
    "noFallbackChainsDesc": "Buat rantai untuk menentukan urutan cadangan penyedia untuk suatu model.",
    "loadingFallbackChains": "Memuat rantai cadangan...",
    "deleteChainConfirm": "Hapus rantai cadangan untuk \"{model}\"?",
    "chainCreated": "Rantai dibuat untuk {model}",
    "chainDeleted": "Rantai dihapus untuk {model}",
    "failedCreateChain": "Gagal membuat rantai",
    "failedDeleteChain": "Gagal menghapus rantai",
    "deleteChain": "Hapus rantai",
    "fillModelAndProviders": "Silakan isi nama model dan penyedia",
    "addAtLeastOneProvider": "Tambahkan setidaknya satu penyedia",
    "comboDefaultsTitle": "Default Kombo",
    "globalComboConfig": "Konfigurasi kombo global",
    "defaultStrategy": "Strategi Bawaan",
    "defaultStrategyDesc": "Diterapkan pada kombo baru tanpa strategi eksplisit",
    "comboStrategyAria": "Strategi kombo",
    "priority": "Prioritas",
    "weighted": "Tertimbang",
    "maxRetriesLabel": "Percobaan Ulang Maks",
    "retryDelayLabel": "Penundaan Coba Lagi (md)",
    "timeoutLabel": "Batas waktu (md)",
    "healthCheck": "Pemeriksaan Kesehatan",
    "healthCheckDesc": "Periksa terlebih dahulu ketersediaan penyedia",
    "trackMetrics": "Lacak Metrik",
    "trackMetricsDesc": "Catat metrik permintaan per kombo",
    "providerOverrides": "Penggantian Penyedia",
    "providerOverridesDesc": "Ganti batas waktu dan coba lagi per penyedia. Pengaturan penyedia mengambil alih pengaturan default global.",
    "providerMaxRetriesAria": "{provider} percobaan ulang maksimal",
    "providerTimeoutAria": "{provider} batas waktu mdtk",
    "removeProviderOverrideAria": "Hapus penggantian {provider}",
    "newProviderNamePlaceholder": "misalnya google, buka...",
    "newProviderNameAria": "Nama penyedia baru",
    "retries": "percobaan ulang",
    "ms": "Nona",
    "saveComboDefaults": "Simpan Default Kombo",
    "maxNestingDepth": "Kedalaman Sarang Maks",
    "concurrencyPerModel": "Konkurensi / Model",
    "queueTimeout": "Batas Waktu Antrian (md)",
    "providerProfiles": "Profil Penyedia",
    "providerProfilesDesc": "Pisahkan pengaturan ketahanan untuk penyedia OAuth (berbasis sesi) dan Kunci API (terukur). Penyedia OAuth memiliki ambang batas yang lebih ketat karena batas tarif yang lebih rendah.",
    "oauthProviders": "Penyedia OAuth",
    "apiKeyProviders": "Penyedia Kunci API",
    "transientCooldown": "Pendinginan Sementara",
    "rateLimitCooldown": "Cooldown Batas Nilai",
    "maxBackoffLevel": "Tingkat Mundur Maks",
    "cbThreshold": "Ambang Batas CB",
    "cbResetTime": "Waktu Reset CB",
    "rateLimiting": "Pembatasan Nilai",
    "rateLimitingDesc": "Penyedia Kunci API secara otomatis dibatasi tarifnya dengan default yang aman. Batasan dipelajari dari header respons dan diadaptasi seiring waktu.",
    "defaultSafetyNet": "Jaring Pengaman Default",
    "rpm": "RPM",
    "minGap": "Kesenjangan Minimal",
    "maxConcurrent": "Maks Bersamaan",
    "activeLimiters": "Pembatas Aktif",
    "noActiveLimiters": "Belum ada pembatas tarif aktif.",
    "reservoir": "waduk",
    "running": "Berlari",
    "queued": "Mengantri",
    "circuitBreakers": "Pemutus Sirkuit",
    "breakerStateClosed": "Tertutup",
    "breakerStateOpen": "Buka",
    "breakerStateHalfOpen": "Setengah Terbuka",
    "tripped": "{count} tersandung",
    "healthy": "{count} sehat",
    "resetAll": "Atur Ulang Semua",
    "noCircuitBreakers": "Belum ada pemutus sirkuit yang aktif. Mereka dibuat secara otomatis ketika permintaan mengalir melalui pipa kombo.",
    "failures": "{count} kegagalan",
    "policiesLocked": "Kebijakan & Pengidentifikasi Terkunci",
    "allOperational": "Semua sistem beroperasi — tidak ada penguncian atau pemutus arus",
    "loadingPolicies": "Memuat kebijakan...",
    "lockedIdentifiers": "Pengidentifikasi Terkunci",
    "unlockedIdentifier": "Tidak Terkunci: {identifier}",
    "sinceDate": "sejak {date}",
    "forceUnlock": "Paksa Buka Kunci",
    "unlocking": "Membuka kunci...",
    "failedUnlock": "Gagal membuka kunci",
    "failedLoadWithStatus": "Gagal memuat: {status}",
    "failedLoadResilience": "Gagal memuat status ketahanan",
    "saveFailed": "Gagal menyimpan",
    "resetFailed": "Penyetelan ulang gagal",
    "loadingResilience": "Memuat status ketahanan...",
    "retry": "Coba lagi",
    "systemStorage": "Sistem & Penyimpanan",
    "allDataLocal": "Semua data disimpan secara lokal di mesin Anda",
    "databasePath": "Jalur Basis Data",
    "exportDatabase": "Ekspor Basis Data",
    "exportAll": "Ekspor Semua (.tar.gz)",
    "importDatabase": "Impor Basis Data",
    "confirmDbImport": "Konfirmasikan Impor Basis Data",
    "confirmDbImportDesc": "Ini akan mengganti semua data saat ini dengan konten dari {file}. Cadangan akan dibuat secara otomatis sebelum impor.",
    "yesImport": "Ya, Impor",
    "lastBackup": "Cadangan Terakhir",
    "noBackupYet": "Belum ada cadangan",
    "backupNow": "Cadangkan Sekarang",
    "backupRestore": "Cadangkan & Pulihkan",
    "viewBackups": "Lihat Cadangan",
    "hide": "Sembunyikan",
    "backupRetentionDesc": "Snapshot database dibuat secara otomatis sebelum pemulihan dan setiap 15 menit saat data berubah. Retensi: 24 jam + 30 pencadangan harian dengan rotasi cerdas.",
    "loadingBackups": "Memuat cadangan...",
    "noBackupsYet": "Belum ada cadangan yang tersedia. Cadangan akan dibuat secara otomatis ketika data berubah.",
    "backupsAvailable": "{count} cadangan tersedia",
    "refresh": "Segarkan",
    "confirm": "Konfirmasikan?",
    "yes": "Ya",
    "no": "Tidak",
    "restore": "Pulihkan",
    "invalidFileType": "Jenis berkas tidak valid. Hanya file .sqlite yang diterima.",
    "exportFailed": "Ekspor gagal",
    "exportFailedWithError": "Ekspor gagal: {error}",
    "fullExportFailedWithError": "Ekspor penuh gagal: {error}",
    "backupCreated": "Cadangan dibuat: {file}",
    "restoreSuccess": "Dipulihkan! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.",
    "importSuccess": "Basis data diimpor! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.",
    "justNow": "sekarang",
    "minutesAgo": "{count}m yang lalu",
    "hoursAgo": "{count}jam yang lalu",
    "daysAgo": "{count}hari yang lalu",
    "backupReasonManual": "panduan",
    "backupReasonPreRestore": "pra-pemulihan",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "Tidak ada perubahan sejak pencadangan terakhir",
    "backupFailed": "Pencadangan gagal",
    "restoreFailed": "Pemulihan gagal",
    "importFailed": "Impor gagal",
    "errorDuringRestore": "Terjadi kesalahan saat pemulihan",
    "errorDuringImport": "Terjadi kesalahan saat mengimpor",
    "modelPricing": "Harga Model",
    "modelPricingDesc": "Konfigurasikan tarif biaya per model • Semua tarif dalam token $/1 juta",
    "providers": "Penyedia",
    "registry": "Registri",
    "priced": "Harga",
    "searchProvidersModels": "Penyedia atau model pencarian...",
    "showAll": "Tampilkan Semua",
    "noProvidersMatch": "Tidak ada penyedia yang cocok dengan pencarian Anda.",
    "howPricingWorks": "Bagaimana Penetapan Harga Bekerja",
    "cacheWrite": "Tulis Cache",
    "unsaved": "belum disimpan",
    "resetDefaults": "Atur Ulang Default",
    "saveProvider": "Simpan Penyedia",
    "saving": "Menyimpan...",
    "model": "Model",
    "models": "model",
    "moreProviders": "{count} penyedia lainnya",
    "withPricing": "dengan harga yang dikonfigurasi",
    "policiesCircuitBreakers": "Kebijakan & Pemutus Arus",
    "activeIssuesDetected": "Masalah aktif terdeteksi",
    "off": "Mati",
    "resetPricingConfirm": "Reset semua harga untuk {provider} ke default?",
    "pricingDescInput": "Input: token dikirim ke model",
    "pricingDescOutput": "Output: token dihasilkan",
    "pricingDescCached": "Tembolok: masukan yang digunakan kembali (~50% dari tingkat masukan)",
    "pricingDescReasoning": "Penalaran: token pemikiran (kembali ke Output)",
    "pricingDescCacheWrite": "Cache Write: membuat entri cache (kembali ke Input)",
    "pricingDescFormula": "Biaya = (input × input_rate) + (output × output_rate) + (cached × cached_rate) per juta token.",
    "pricingSettingsTitle": "Pengaturan Harga",
    "totalModels": "Jumlah Model",
    "active": "Aktif",
    "costCalculation": "Perhitungan Biaya",
    "costCalculationDesc": "Biaya dihitung berdasarkan penggunaan token dan tarif harga yang dikonfigurasi untuk setiap model.",
    "pricingFormat": "Format Harga",
    "pricingFormatDesc": "Semua tarif dalam $/1 juta token (dolar per juta token).",
    "tokenTypes": "Jenis Token",
    "inputTokenDesc": "Token cepat standar",
    "outputTokenDesc": "Token penyelesaian/respons",
    "cachedTokenDesc": "Token masukan yang di-cache (biasanya 50% dari tingkat masukan)",
    "reasoningTokenDesc": "Token penalaran/pemikiran khusus (pengembalian ke tingkat output)",
    "cacheCreationTokenDesc": "Token yang digunakan untuk membuat entri cache (pengembalian ke tingkat input)",
    "customPricingNote": "Anda dapat mengganti harga default untuk model tertentu. Penggantian khusus lebih diprioritaskan dibandingkan harga yang terdeteksi otomatis.",
    "editPricing": "Sunting Harga",
    "viewFullDetails": "Lihat Detail Lengkap",
    "themeCoral": "Koral",
    "cliFingerprint": "CLI Fingerprint Matching",
    "cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
    "cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
    "enableFingerprintTitle": "Enable fingerprint for {provider}",
    "disableFingerprintTitle": "Disable fingerprint for {provider}"
  },
  "translator": {
    "title": "Penerjemah",
    "metaTitle": "Taman Bermain Penerjemah | OmniRoute",
    "metaDescription": "Debug, uji, dan visualisasikan terjemahan format API antar penyedia",
    "playgroundTitle": "Taman Bermain Penerjemah",
    "playground": "Taman bermain",
    "realtime": "Aktivitas Penerjemahan Waktu Nyata",
    "chatTester": "Penguji Obrolan",
    "testBench": "Bangku Tes",
    "liveMonitor": "Monitor Langsung",
    "modeDescriptionPlayground": "Tempelkan isi permintaan API apa pun dan lihat bagaimana OmniRoute menerjemahkannya di antara format penyedia (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)",
    "modeDescriptionChatTester": "Kirim permintaan obrolan nyata melalui OmniRoute dan periksa perjalanan pulang pergi secara lengkap: masukan, permintaan yang diterjemahkan, respons penyedia, dan keluaran yang diterjemahkan.",
    "modeDescriptionTestBench": "Jalankan skenario yang telah ditentukan sebelumnya dan bandingkan kompatibilitas antar penyedia dan model.",
    "modeDescriptionLiveMonitor": "Tonton acara terjemahan secara real time saat permintaan mengalir melalui OmniRoute.",
    "modeDescriptionFallback": "Debug, uji, dan visualisasikan bagaimana OmniRoute menerjemahkan permintaan API antar penyedia.",
    "recentTranslations": "Terjemahan Terbaru",
    "noTranslations": "Belum ada terjemahan",
    "source": "Sumber",
    "target": "Sasaran",
    "time": "Waktu",
    "model": "Model",
    "status": "Status",
    "latency": "Latensi",
    "totalTranslations": "Terjemahan Total",
    "successful": "Berhasil",
    "errors": "Kesalahan",
    "avgLatency": "Rata-rata Latensi",
    "millisecondsShort": "{value}ms",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "Langsung — Menyegarkan otomatis",
    "paused": "Dijeda",
    "eventsAppearHint": "Peristiwa penerjemahan muncul di sini saat permintaan mengalir melalui OmniRoute. Gunakan salah satu metode berikut untuk menghasilkan peristiwa:",
    "chatTesterTab": "Tab Penguji Obrolan",
    "testBenchTab": "Tab Bangku Tes",
    "externalApiCalls": "Panggilan API eksternal",
    "ideCliIntegrations": "Integrasi IDE/CLI",
    "inMemoryNote": "Catatan: Acara disimpan di memori dan disetel ulang saat server dimulai ulang.",
    "ok": "Oke",
    "errorShort": "KESALAHAN",
    "formatConverter": "Konverter Format",
    "formatConverterDescription": "Tempel atau ketik isi permintaan JSON. Penerjemah akan secara otomatis mendeteksi format sumber dan mengubahnya ke format target. Gunakan ini untuk men-debug bagaimana OmniRoute menerjemahkan permintaan antar format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).",
    "input": "Masukan",
    "output": "Keluaran",
    "auto": "Otomatis",
    "swapFormats": "Tukar format",
    "translateAction": "Terjemahkan",
    "clear": "Jelas",
    "inputPlaceholder": "Tempelkan isi permintaan di sini atau pilih templat di bawah...",
    "exampleTemplates": "Contoh Template",
    "exampleTemplatesHint": "— Klik untuk memuat",
    "templateLoadHint": "Templat memuat permintaan dalam format {format}. Ubah Format Sumber untuk memuat dalam format yang berbeda.",
    "compatibilityTester": "Penguji Kompatibilitas",
    "compatibilityReport": "Laporan Kompatibilitas",
    "testBenchDescription": "Jalankan skenario yang telah ditentukan sebelumnya (Obrolan Sederhana, Panggilan Alat, dll.) untuk memverifikasi kompatibilitas terjemahan dan penyedia. Pilih format sumber dan penyedia target, lalu jalankan semua pengujian untuk melihat persentase kompatibilitas. Gunakan ini untuk menemukan fitur mana yang berfungsi di seluruh penyedia.",
    "targetProvider": "Penyedia Sasaran",
    "runAllTests": "Jalankan Semua Tes",
    "runTest": "Jalankan Tes",
    "reRun": "Jalankan kembali",
    "running": "Berlari...",
    "passed": "berlalu",
    "failed": "gagal",
    "passedIconLabel": "✅ Lulus",
    "chunks": "potongan",
    "scenarioSimpleChat": "Obrolan Sederhana",
    "scenarioToolCalling": "Panggilan Alat",
    "scenarioMultiTurn": "Multi-putaran",
    "scenarioThinking": "Berpikir",
    "scenarioSystemPrompt": "Perintah Sistem",
    "scenarioStreaming": "Streaming",
    "templateNames": {
      "simple-chat": "Obrolan Sederhana",
      "tool-calling": "Panggilan Alat",
      "multi-turn": "Multi-putaran",
      "thinking": "Berpikir",
      "system-prompt": "Perintah Sistem",
      "streaming": "Streaming"
    },
    "templateDescriptions": {
      "simple-chat": "Pesan teks dasar",
      "tool-calling": "Pemanggilan fungsi/alat",
      "multi-turn": "Percakapan dengan sejarah",
      "thinking": "Pemikiran/penalaran yang diperluas",
      "system-prompt": "Instruksi sistem yang kompleks",
      "streaming": "Permintaan streaming SSE"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Anda adalah asisten yang membantu.",
        "userGreeting": "Halo! Apa kabarmu hari ini?"
      },
      "toolCalling": {
        "userWeather": "Bagaimana cuaca di Sao Paulo?",
        "toolDescription": "Dapatkan cuaca terkini untuk suatu lokasi",
        "cityNameDescription": "Nama kota"
      },
      "multiTurn": {
        "system": "Anda adalah asisten pengkodean.",
        "userInitial": "Tulis fungsi untuk mengurutkan array dengan Python.",
        "assistantExample": "Berikut fungsi pengurutan sederhana:\n\n``` ular piton\ndef sort_array(arr):\n    kembali diurutkan(arr)\n```",
        "userFollowUp": "Sekarang urutkan dalam urutan menurun."
      },
      "thinking": {
        "question": "Berapa jumlah 100 bilangan prima pertama?"
      },
      "systemPrompt": {
        "systemInstruction": "Anda adalah insinyur perangkat lunak senior yang berspesialisasi dalam sistem terdistribusi. Jawab pertanyaan dengan singkat menggunakan praktik terbaik industri. Selalu berikan contoh kode bila relevan. Format tanggapan Anda menggunakan penurunan harga.",
        "question": "Bagaimana cara menerapkan pola pemutus sirkuit?"
      },
      "streaming": {
        "prompt": "Ceritakan sebuah cerita pendek tentang robot yang belajar melukis."
      }
    },
    "openaiCompatibleLabel": "Kompatibel dengan OpenAI",
    "anthropicCompatibleLabel": "Kompatibel Antropis",
    "noTemplateForFormat": "Tidak ada templat untuk format ini",
    "translationFailed": "Terjemahan gagal: {error}",
    "pipelineDebugger": "Debugger Saluran Pipa",
    "translationPipeline": "Saluran Terjemahan",
    "pipelineVisualization": "Visualisasi saluran pipa",
    "pipelineVisualizationHint": "Kirim pesan untuk melihat bagaimana permintaan Anda mengalir melalui deteksi → terjemahan → panggilan penyedia.",
    "chatTesterDescription": "Kirim pesan sebagai format klien tertentu dan periksa setiap langkah alur terjemahan.",
    "chatTesterFlow": "Permintaan Klien → Deteksi Format → OpenAI Intermediate → Format Penyedia → Respons",
    "clickStepToInspect": "Klik langkah mana pun untuk memeriksa data pada tahap itu.",
    "clientFormat": "Format Klien",
    "provider": "Penyedia",
    "modelPlaceholder": "Pilih atau ketikkan nama model...",
    "sendMessageToSeePipeline": "Kirim pesan untuk melihat alur terjemahan",
    "chatMessageHintPrefix": "Pesan Anda akan diformat sebagai a",
    "chatMessageHintSuffix": "permintaan, diterjemahkan melalui pipeline, dan dikirim ke penyedia yang dipilih.",
    "youWithFormat": "Anda ({format})",
    "assistant": "Asisten",
    "typeMessage": "Ketik pesan...",
    "send": "Kirim",
    "clientRequest": "Permintaan Klien",
    "clientRequestDescription": "Badan permintaan sebagai klien Anda akan mengirimkannya",
    "formatDetected": "Format Terdeteksi",
    "formatDetectedDescription": "OmniRoute secara otomatis mendeteksi format API dari struktur permintaan",
    "openaiIntermediate": "OpenAI Menengah",
    "openaiIntermediateDescription": "Semua format pertama-tama dinormalisasi ke format OpenAI (jembatan universal)",
    "providerFormat": "Format Penyedia",
    "providerFormatDescription": "Format OpenAI diterjemahkan ke format asli penyedia",
    "providerResponse": "Respon Penyedia",
    "providerResponseRawDescription": "Respons mentah dari API penyedia",
    "providerResponseSseDescription": "Aliran SSE mentah dari API penyedia",
    "unexpectedError": "Terjadi kesalahan yang tidak terduga",
    "error": "Kesalahan",
    "errorMessage": "Kesalahan: {message}",
    "requestFailed": "Permintaan gagal",
    "noTextExtracted": "(Tidak ada teks yang diekstraksi)",
    "liveMonitorDescriptionPrefix": "Menampilkan peristiwa terjemahan saat panggilan API mengalir melalui OmniRoute. Acara berasal dari buffer dalam memori (direset saat restart). Gunakan",
    "liveMonitorDescriptionSuffix": ", atau panggilan API eksternal untuk menghasilkan peristiwa."
  },
  "usage": {
    "title": "Penggunaan",
    "loggerTab": "penebang",
    "proxyTab": "Proksi",
    "budgetManagement": "Manajemen Anggaran",
    "budgetSaved": "Batasan anggaran dihemat",
    "budgetSaveFailed": "Gagal menghemat anggaran",
    "loadingBudgetData": "Memuat data anggaran...",
    "noApiKeysTitle": "Tidak Ada Kunci API",
    "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyiapkan batas anggaran.",
    "apiKey": "Kunci API",
    "todaysSpend": "Pembelanjaan hari ini",
    "thisMonth": "Bulan ini",
    "setLimits": "Tetapkan Batasan",
    "dailyLimitUsd": "Batas Harian (USD)",
    "monthlyLimitUsd": "Batas Bulanan (USD)",
    "warningThresholdPercent": "Ambang Peringatan (%)",
    "dailyLimitPlaceholder": "misalnya 5.00",
    "monthlyLimitPlaceholder": "misalnya 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Simpan Batas",
    "budgetOk": "Anggaran OK — {remaining} tersisa",
    "budgetExceeded": "Anggaran terlampaui — permintaan mungkin diblokir",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Belum ada datanya",
    "latency": "Latensi",
    "latencyP50": "hal50",
    "latencyP95": "hal95",
    "latencyP99": "hal99",
    "promptCache": "Tembolok Cepat",
    "systemHealth": "Kesehatan Sistem",
    "entries": "Entri",
    "activeCount": "{count} aktif",
    "openCircuitBreakersDetected": "Pemutus sirkuit terbuka terdeteksi",
    "hitRate": "Tingkat Hit",
    "hitsMisses": "Hit / Miss",
    "circuitBreakers": "Pemutus Sirkuit",
    "lockedIPs": "IP terkunci",
    "lockoutsAutoRefreshHint": "Kunci batas kecepatan per model • Refresh otomatis 10 detik",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} tersisa",
    "howItWorks": "Cara Kerjanya",
    "howItWorksSubtitle": "Pelajari bagaimana evaluasi memvalidasi respons LLM Anda",
    "define": "Definisikan",
    "defineStepDescription": "Buat kasus pengujian dengan perintah masukan dan kriteria keluaran yang diharapkan menggunakan strategi seperti berisi, regex, atau pencocokan tepat.",
    "run": "Jalankan",
    "runStepDescription": "Jalankan kasus uji terhadap titik akhir LLM Anda melalui OmniRoute. Setiap kasus dikirim sebagai permintaan API nyata.",
    "evaluate": "Evaluasi",
    "evaluateStepDescription": "Tanggapan dibandingkan dengan kriteria yang diharapkan. Lihat lulus/gagal untuk setiap kasus dengan metrik latensi dan masukan terperinci.",
    "evalSuites": "Ruang Evaluasi",
    "evalSuitesHint": "Klik rangkaian untuk melihat kasus pengujian, lalu jalankan untuk mengevaluasi titik akhir LLM Anda",
    "evalsLoading": "Memuat suite eval...",
    "noEvalSuitesFound": "Tidak Ada Suite Eval yang Ditemukan",
    "noEvalSuitesDescription": "Suite eval dapat ditentukan melalui API atau kode. Mereka menguji keluaran model terhadap hasil yang diharapkan menggunakan strategi seperti konten, regex, pencocokan tepat, dan fungsi khusus.",
    "columnCase": "Kasus",
    "columnStatus": "Status",
    "columnLatency": "Latensi",
    "columnDetails": "Detail",
    "columnModel": "Model",
    "columnStrategy": "Strategi",
    "columnExpected": "Diharapkan",
    "statsSuites": "Suite",
    "statsTestCases": "Kasus Uji",
    "statsModels": "Model",
    "statsCoverage": "Cakupan",
    "statsStrategiesCount": "{count} strategi",
    "evaluationStrategies": "Strategi Evaluasi",
    "modelsUnderTest": "Model Sedang Diuji",
    "searchSuitesPlaceholder": "Ruang pencarian...",
    "passSuffix": "lulus",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Jalankan Eval",
    "runningProgress": "Menjalankan {current}/{total}...",
    "passRate": "tingkat kelulusan",
    "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} total",
    "passedIconLabel": "✅ Lulus",
    "failedIconLabel": "❌ Gagal",
    "detailsContains": "Berisi: \"{term}\"",
    "detailsRegex": "Regex: {pattern}",
    "detailsExpected": "Diharapkan: \"{expected}\"",
    "noResultsYet": "Belum ada hasil",
    "testCasesCount": "Kasus Uji ({count})",
    "noTestCasesDefined": "Tidak ada kasus uji yang ditentukan",
    "runEvalHint": "Klik \"Jalankan Eval\" untuk menjalankan semua kasus terhadap titik akhir LLM Anda. Setiap pengujian mengirimkan permintaan nyata melalui OmniRoute.",
    "notifyNoTestCases": "Tidak ada kasus uji yang ditentukan untuk rangkaian ini",
    "notifyAllCasesPassed": "Semua kasus {total} lolos ✅",
    "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal",
    "notifyEvalRunFailed": "Proses evaluasi gagal",
    "notifyEvalTitle": "Evaluasi: {name}",
    "modelEvals": "Evaluasi Model",
    "evalsHeroDescription": "Uji dan validasi titik akhir LLM Anda dengan menjalankan rangkaian evaluasi yang telah ditentukan sebelumnya. Setiap rangkaian berisi kasus pengujian yang mengirimkan perintah nyata melalui OmniRoute dan membandingkan respons terhadap kriteria yang diharapkan — membantu Anda mendeteksi regresi, membandingkan model, dan memastikan kualitas respons di seluruh penyedia.",
    "qualityValidation": "Validasi Kualitas",
    "modelComparison": "Perbandingan Model",
    "regressionDetection": "Deteksi Regresi",
    "latencyBenchmarks": "Tolok Ukur Latensi",
    "modelLockouts": "Penguncian Model",
    "noLockouts": "Tidak ada model yang dikunci saat ini",
    "activeSessions": "Sesi Aktif",
    "noSessions": "Tidak ada sesi aktif",
    "sessionsHint": "Sesi muncul saat permintaan mengalir melalui proxy",
    "sessionsTrackedHint": "Dilacak melalui permintaan sidik jari • Penyegaran otomatis 5 detik",
    "session": "Sesi",
    "age": "Usia",
    "requests": "Permintaan",
    "connection": "Koneksi",
    "durationMillisecondsShort": "{value}ms",
    "durationSecondsShort": "{value}dtk",
    "durationMinutesShort": "{value}m",
    "durationHoursShort": "{value}jam",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Batasan Penyedia",
    "noProviders": "Tidak Ada Penyedia yang Terhubung",
    "connectProvidersForQuota": "Hubungkan ke penyedia dengan OAuth untuk melacak batas dan penggunaan kuota API Anda.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(difilter dari {count})",
    "autoRefresh": "Segarkan otomatis",
    "refreshAll": "Segarkan Semua",
    "loadingQuotas": "Memuat...",
    "account": "Akun",
    "modelQuotas": "Kuota Model",
    "lastUsed": "Terakhir Digunakan",
    "actions": "Tindakan",
    "refreshQuota": "Segarkan kuota",
    "today": "Hari ini",
    "tomorrow": "Besok",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "di {duration}",
    "notApplicable": "T/A",
    "rawPlanWithValue": "Paket mentah: {plan}",
    "noPlanFromProvider": "Tidak ada rencana dari penyedia",
    "noQuotaData": "Tidak ada data kuota",
    "ungrouped": "Ungrouped",
    "viewFlat": "Flat",
    "viewByEnvironment": "By Environment",
    "noQuotaDataAvailable": "Tidak ada data kuota yang tersedia",
    "noAccountsForTierFilter": "Tidak ditemukan akun untuk filter tingkat",
    "tierAll": "Semua",
    "tierEnterprise": "Perusahaan",
    "tierTeam": "Tim",
    "tierBusiness": "Bisnis",
    "tierUltra": "Sangat",
    "tierPro": "Pro",
    "tierPlus": "Ditambah lagi",
    "tierFree": "Gratis",
    "tierUnknown": "Tidak diketahui"
  },
  "modals": {
    "waitingAuth": "Menunggu Otorisasi",
    "verificationUrl": "URL verifikasi",
    "yourCode": "Kode Anda",
    "remoteAccess": "Akses jarak jauh:",
    "connectedSuccess": "Berhasil Terhubung!",
    "connectionFailed": "Koneksi Gagal",
    "chooseAuthMethod": "Pilih metode autentikasi Anda:",
    "awsBuilderId": "ID Pembuat AWS",
    "awsIamIdentity": "Pusat Identitas AWS IAM",
    "googleAccount": "Akun Google",
    "githubAccount": "Akun GitHub",
    "importToken": "Impor Token",
    "pasteToken": "Tempel token penyegaran dari Kiro IDE.",
    "awsRegion": "Wilayah AWS",
    "autoDetecting": "Token yang terdeteksi secara otomatis...",
    "readingFromCache": "Membaca dari cache AWS SSO",
    "readingFromCursor": "Membaca dari database Cursor IDE",
    "initializing": "Menginisialisasi...",
    "pricingConfig": "Konfigurasi Harga",
    "loadingPricing": "Memuat data harga...",
    "pricingRatesFormat": "Format Tarif Harga",
    "noPricingData": "Tidak ada data harga yang tersedia",
    "noModelsFound": "Tidak ada model yang ditemukan"
  },
  "loggers": {
    "allProviders": "Semua Penyedia",
    "allModels": "Semua Model",
    "allAccounts": "Semua Akun",
    "allApiKeys": "Semua Kunci API",
    "allTypes": "Semua Jenis",
    "allLevels": "Semua Tingkat",
    "modelAZ": "Model A-Z",
    "modelZA": "Model Z-A",
    "loadingLogs": "Memuat log...",
    "loadingProxyLogs": "Memuat log proxy...",
    "noLogEntries": "Tidak ada entri log yang ditemukan",
    "noPayloadData": "Tidak ada data muatan yang tersedia untuk entri log ini.",
    "proxyEvent": "Acara Proksi",
    "proxy": "Proksi",
    "level": "Tingkat",
    "directNative": "Langsung (asli)",
    "combo": "kombo",
    "inputTokens": "Saya:",
    "outputTokens": "HAI:"
  },
  "stats": {
    "usageOverview": "Ikhtisar Penggunaan",
    "outputTokens": "Token Keluaran",
    "totalCost": "Jumlah Biaya",
    "usageByModel": "Penggunaan berdasarkan Model",
    "usageByAccount": "Penggunaan berdasarkan Akun",
    "failedToLoad": "Gagal memuat statistik penggunaan.",
    "tokenHealth": "Token Kesehatan",
    "totalOAuth": "Total OAuth",
    "healthy": "Sehat",
    "warning": "Peringatan",
    "errored": "Salah",
    "lastCheck": "Pemeriksaan terakhir",
    "noData": "Tidak ada data",
    "share": "Bagikan",
    "unableToLoad": "Tidak dapat memuat metrik sistem",
    "product": "Produk",
    "resources": "Sumber daya",
    "company": "Perusahaan"
  },
  "auth": {
    "welcome": "Selamat datang",
    "signIn": "Masuk",
    "enterPassword": "Masukkan kata sandi Anda untuk melanjutkan",
    "password": "Kata sandi",
    "unifiedProxy": "Proksi API AI Terpadu",
    "unifiedAiApiProxy": "Proksi API AI Terpadu",
    "unifiedAiApiProxyDesc": "Merutekan permintaan ke beberapa penyedia AI melalui satu titik akhir. Penyeimbangan beban, failover, dan pelacakan penggunaan sudah ada di dalamnya.",
    "passwordNotEnabled": "Perlindungan kata sandi tidak diaktifkan",
    "loading": "Memuat...",
    "invalidPassword": "Kata sandi tidak valid",
    "errorOccurredRetry": "Terjadi kesalahan. Silakan coba lagi.",
    "configureInstance": "Mari konfigurasikan instans OmniRoute Anda",
    "runOnboardingWizard": "Jalankan wizard orientasi untuk menyiapkan kata sandi Anda dan menghubungkan penyedia AI pertama Anda.",
    "startOnboarding": "Mulai Orientasi",
    "secureYourInstance": "Amankan Instans Anda",
    "setPasswordDescription": "Tetapkan kata sandi untuk melindungi dasbor Anda dan mengamankan titik akhir API Anda dari akses tidak sah.",
    "configurePassword": "Konfigurasikan Kata Sandi",
    "continue": "Lanjutkan",
    "windowWillClose": "Jendela ini akan tertutup secara otomatis...",
    "closeTabNow": "Anda dapat menutup tab ini sekarang.",
    "copyUrlManual": "Silakan salin URL dari bilah alamat dan tempelkan di aplikasi.",
    "accessDeniedDescription": "Anda tidak memiliki izin untuk mengakses sumber daya ini. Periksa kunci API Anda atau hubungi administrator.",
    "goToDashboard": "Buka Dasbor",
    "featureMultiProviderTitle": "Multi-Penyedia",
    "featureMultiProviderDesc": "OpenAI, Antropik, Google, dan banyak lagi",
    "featureLoadBalancingTitle": "Penyeimbangan Beban",
    "featureLoadBalancingDesc": "Distribusikan permintaan dengan cerdas",
    "featureUsageTrackingTitle": "Pelacakan Penggunaan",
    "featureUsageTrackingDesc": "Pantau biaya dan token",
    "resetPassword": "Atur Ulang Kata Sandi",
    "resetDescription": "Pilih metode untuk memulihkan akses ke dasbor Anda",
    "stopServer": "Hentikan server OmniRoute",
    "processing": "Memproses...",
    "pleaseWait": "Harap tunggu sementara kami menyelesaikan otorisasi.",
    "authSuccess": "Otorisasi Berhasil!",
    "copyUrl": "Salin URL ini",
    "accessDenied": "Akses Ditolak",
    "methodCliTitle": "Metode 1: Atur Ulang CLI",
    "methodCliDescription": "Jalankan perintah berikut di server tempat OmniRoute berjalan:",
    "methodCliHint": "Ini akan meminta Anda untuk menetapkan kata sandi baru. Server harus dihentikan terlebih dahulu.",
    "methodManualTitle": "Metode 2: Reset Manual",
    "methodManualDescription": "Hapus kata sandi dari database dan atur kata sandi baru saat startup:",
    "setPasswordInYour": "Tetapkan kata sandi baru di Anda",
    "fileLabelSuffix": "mengajukan:",
    "newPasswordPlaceholder": "kata sandi_baru_Anda",
    "deleteSettingsFile": "Hapus",
    "orRemovePasswordHashField": "atau hapus bidang passwordHash",
    "restartServerWithNewPassword": "Mulai ulang server - server akan menggunakan kata sandi baru",
    "backToLogin": "Kembali ke Masuk",
    "forgotPassword": "Lupa kata sandi?"
  },
  "landing": {
    "brandName": "OmniRoute",
    "navigateHome": "Arahkan ke rumah",
    "toggleMenu": "Alihkan menu",
    "featuresLink": "Fitur",
    "docsLink": "dokumen",
    "github": "GitHub",
    "versionLive": "v1.0 sekarang aktif",
    "oneEndpoint": "Satu Titik Akhir untuk",
    "allProviders": "Semua Penyedia AI",
    "heroDescription": "Proksi titik akhir AI dengan dasbor web - Port JavaScript CLIProxyAPI. Bekerja secara lancar dengan Claude Code, OpenAI Codex, Cline, RooCode, dan alat CLI lainnya.",
    "getStarted": "Memulai",
    "viewOnGithub": "Lihat di GitHub",
    "powerfulFeatures": "Fitur Canggih",
    "featuresSubtitle": "Semua yang Anda perlukan untuk mengelola infrastruktur AI Anda di satu tempat, dibuat untuk skala besar.",
    "featureUnifiedEndpointTitle": "Titik Akhir Terpadu",
    "featureUnifiedEndpointDesc": "Akses semua penyedia melalui satu URL API standar.",
    "featureEasySetupTitle": "Pengaturan Mudah",
    "featureEasySetupDesc": "Bangun dan jalankan dalam hitungan menit dengan perintah npx.",
    "featureModelFallbackTitle": "Penggantian Model",
    "featureModelFallbackDesc": "Secara otomatis beralih penyedia jika terjadi kegagalan atau latensi tinggi.",
    "featureUsageTrackingTitle": "Pelacakan Penggunaan",
    "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan biaya di semua model.",
    "featureOAuthApiKeysTitle": "Kunci OAuth & API",
    "featureOAuthApiKeysDesc": "Kelola kredensial dengan aman dalam satu brankas.",
    "featureCloudSyncTitle": "Sinkronisasi Awan",
    "featureCloudSyncDesc": "Sinkronkan konfigurasi Anda di seluruh perangkat secara instan.",
    "featureCliSupportTitle": "Dukungan CLI",
    "featureCliSupportDesc": "Bekerja dengan Claude Code, Codex, Cline, Cursor, dan banyak lagi.",
    "featureDashboardTitle": "Dasbor",
    "featureDashboardDesc": "Dasbor visual untuk analisis lalu lintas waktu nyata.",
    "howItWorks": "Cara Kerja OmniRoute",
    "howItWorksDescription": "Data mengalir dengan lancar dari aplikasi Anda melalui lapisan perutean cerdas kami ke penyedia terbaik untuk pekerjaan tersebut.",
    "howItWorksStep1Title": "1. CLI & SDK",
    "howItWorksStep1Description": "Permintaan Anda dimulai dari alat favorit Anda atau SDK terpadu kami. Ubah saja URL dasar.",
    "howItWorksStep2Title": "2. Hub OmniRoute",
    "howItWorksStep2Description": "Mesin kami menganalisis perintah, memeriksa kesehatan penyedia, dan merutekan latensi atau biaya terendah.",
    "howItWorksStep3Title": "3. Penyedia AI",
    "howItWorksStep3Description": "Permintaan tersebut dipenuhi oleh OpenAI, Anthropic, Gemini, atau lainnya secara instan.",
    "getStartedIn30Seconds": "Memulai dalam 30 Detik",
    "getStartedDescription": "Instal OmniRoute, konfigurasikan penyedia Anda melalui dasbor web, dan mulai merutekan permintaan AI.",
    "installOmniRoute": "Instal OmniRoute",
    "installStepDescription": "Jalankan perintah npx untuk memulai server secara instan",
    "openDashboard": "Buka Dasbor",
    "openDashboardStepDescription": "Konfigurasikan penyedia dan kunci API melalui antarmuka web",
    "routeRequests": "Permintaan Rute",
    "routeRequestsStepDescription": "Arahkan alat CLI Anda ke {endpoint}",
    "terminal": "terminal",
    "copy": "Salin",
    "copied": "✓ Disalin",
    "startingOmniRoute": "Memulai OmniRoute...",
    "serverRunningOnLabel": "Server berjalan",
    "dashboardLabel": "Dasbor",
    "readyToRoute": "Siap untuk rute! ✓",
    "configureProvidersNote": "📝 Konfigurasikan penyedia di dasbor atau gunakan variabel lingkungan",
    "dataLocation": "Lokasi Data:",
    "dataLocationMacLinux": " macOS/Linux:",
    "dataLocationWindows": " jendela:",
    "product": "Produk",
    "dashboardLink": "Dasbor",
    "changelog": "log perubahan",
    "resources": "Sumber daya",
    "documentation": "Dokumentasi",
    "npm": "NPM",
    "legal": "Hukum",
    "mitLicense": "Lisensi MIT",
    "footerTagline": "Titik akhir terpadu untuk generasi AI. Hubungkan, rutekan, dan kelola penyedia AI Anda dengan mudah.",
    "copyright": "© {year} OmniRoute. Semua hak dilindungi undang-undang.",
    "flowToolClaudeCode": "Kode Claude",
    "flowToolOpenAICodex": "Kodeks OpenAI",
    "flowToolCline": "Klinik",
    "flowToolCursor": "Kursor",
    "flowProviderOpenAI": "OpenAI",
    "flowProviderAnthropic": "Antropis",
    "flowProviderGemini": "kembar",
    "flowProviderGithubCopilot": "Kopilot GitHub",
    "interactiveDiagram": "Diagram interaktif terlihat di desktop",
    "ctaTitle": "Siap Menyederhanakan Infrastruktur AI Anda?",
    "ctaDescription": "Bergabunglah dengan pengembang yang menyederhanakan integrasi AI mereka dengan OmniRoute. Sumber terbuka dan gratis untuk memulai.",
    "startFree": "Mulai Gratis",
    "readDocumentation": "Baca Dokumentasi"
  },
  "docs": {
    "title": "Dokumentasi",
    "quickStart": "Mulai Cepat",
    "features": "Fitur",
    "supportedProviders": "Penyedia yang Didukung",
    "supportedProvidersToc": "Penyedia",
    "commonUseCases": "Kasus Penggunaan Umum",
    "clientCompatibility": "Kompatibilitas Klien",
    "protocolsToc": "Protocols",
    "apiReference": "Referensi API",
    "managementApiReference": "Referensi API Manajemen",
    "managementApiDescription": "Endpoint automasi untuk registry proxy, assignment scope, dan migrasi proxy lama.",
    "method": "Metode",
    "path": "Jalan",
    "notes": "Catatan",
    "modelPrefixes": "Awalan Model",
    "prefix": "Awalan",
    "troubleshooting": "Pemecahan masalah",
    "supportsChat": "Mendukung titik akhir obrolan dan respons.",
    "oauthAutoRefresh": "Koneksi OAuth dengan penyegaran token otomatis.",
    "fullStreaming": "Dukungan streaming penuh untuk semua model.",
    "docsLabel": "dokumen",
    "docsHeroDescription": "Gerbang AI untuk LLM multi-penyedia. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, dan 20+ penyedia lainnya.",
    "openDashboard": "Buka Dasbor",
    "endpointPage": "Halaman Titik Akhir",
    "github": "GitHub",
    "reportIssue": "Laporkan Masalah",
    "onThisPage": "Di halaman ini",
    "documentationVersion": "Dokumentasi - v{version}",
    "quickStartStep1Title": "1. Instal dan jalankan",
    "quickStartStep1Prefix": "Jalankan",
    "quickStartStep1Middle": "atau kloning dari GitHub dan jalankan",
    "quickStartStep2Title": "2. Buat kunci API",
    "quickStartStep2Text": "Buka Titik Akhir -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.",
    "quickStartStep3Title": "3. Hubungkan penyedia",
    "quickStartStep3Text": "Tambahkan akun penyedia melalui login OAuth, kunci API, atau koneksi otomatis tingkat gratis.",
    "quickStartStep4Title": "4. Tetapkan URL basis klien",
    "quickStartStep4Prefix": "Arahkan klien IDE atau API Anda ke",
    "quickStartStep4Suffix": "Gunakan awalan penyedia, misalnya",
    "featureRoutingTitle": "Perutean Multi-Penyedia",
    "featureRoutingText": "Rutekan permintaan ke 30+ penyedia AI melalui satu titik akhir yang kompatibel dengan OpenAI. Mendukung API obrolan, respons, audio, dan gambar.",
    "featureCombosTitle": "Kombo dan Penyeimbangan",
    "featureCombosText": "Buat kombo model dengan rantai cadangan dan strategi penyeimbangan: round-robin, prioritas, acak, paling jarang digunakan, dan hemat biaya.",
    "featureUsageTitle": "Pelacakan Penggunaan dan Biaya",
    "featureUsageText": "Penghitungan token secara real-time, penghitungan biaya per penyedia/model, dan perincian penggunaan terperinci berdasarkan kunci API dan akun.",
    "featureAnalyticsTitle": "Dasbor Analisis",
    "featureAnalyticsText": "Analisis visual dengan bagan untuk permintaan, token, kesalahan, latensi, biaya, dan popularitas model dari waktu ke waktu.",
    "featureHealthTitle": "Pemantauan Kesehatan",
    "featureHealthText": "Pemeriksaan kesehatan langsung, status penyedia, status pemutus sirkuit, dan deteksi batas tarif otomatis dengan backoff eksponensial.",
    "featureCliTitle": "Alat CLI",
    "featureCliText": "Kelola konfigurasi IDE, ekspor/impor cadangan, temukan profil codex, dan konfigurasikan pengaturan dari dasbor.",
    "featureSecurityTitle": "Keamanan dan Kebijakan",
    "featureSecurityText": "Otentikasi kunci API, pemfilteran IP, pelindung injeksi cepat, kebijakan domain, manajemen sesi, dan pencatatan audit.",
    "featureCloudSyncTitle": "Sinkronisasi Awan",
    "featureCloudSyncText": "Sinkronkan konfigurasi Anda ke Cloudflare Workers untuk akses jarak jauh dengan kredensial terenkripsi dan failover otomatis.",
    "providersAcrossConnectionTypes": "{count} penyedia di tiga jenis koneksi.",
    "manageProviders": "Kelola Penyedia",
    "providersCount": "{count} penyedia",
    "providerTypeFree": "Tingkat Gratis",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "Kunci API",
    "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak penyedia",
    "useCaseSingleEndpointText": "Arahkan klien ke satu URL dasar dan rutekan berdasarkan awalan model (misalnya: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Penggantian dan peralihan model dengan kombo",
    "useCaseFallbackText": "Buat model kombo di Dasbor dan pertahankan konfigurasi klien tetap stabil sementara penyedia melakukan rotasi secara internal.",
    "useCaseUsageVisibilityTitle": "Penggunaan, biaya, dan visibilitas debug",
    "useCaseUsageVisibilityText": "Lacak token dan biaya berdasarkan penyedia, akun, dan kunci API di tab Penggunaan dan Analisis.",
    "clientCherryStudioTitle": "Studio Ceri",
    "baseUrlLabel": "URL dasar",
    "chatEndpointLabel": "Titik akhir obrolan",
    "modelRecommendationLabel": "Rekomendasi model: awalan eksplisit",
    "clientCodexTitle": "Model Kopilot Codex / GitHub",
    "clientCodexBullet1": "Gunakan ID model dengan",
    "clientCodexBullet2": "Model keluarga Codex dirutekan otomatis ke",
    "clientCodexBullet3": "Model non-Codex terus berlanjut",
    "clientCursorTitle": "IDE kursor",
    "clientCursorBullet1": "Gunakan",
    "clientCursorBullet1Suffix": "awalan untuk model Kursor.",
    "clientCursorBullet2": "Koneksi OAuth - login dari halaman Penyedia.",
    "clientClaudeTitle": "Kode Claude / Antigravitasi",
    "clientClaudeBullet1Prefix": "Gunakan",
    "clientClaudeBullet1Middle": "(Claude) atau",
    "clientClaudeBullet1Suffix": "Awalan (Antigravitasi).",
    "protocolsTitle": "Protocols: MCP & A2A",
    "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
    "protocolMcpTitle": "MCP (Model Context Protocol)",
    "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
    "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
    "protocolMcpStep2": "Point your MCP client to stdio transport.",
    "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
    "protocolA2aTitle": "A2A (Agent2Agent)",
    "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
    "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
    "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
    "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
    "protocolTroubleshootingTitle": "Protocol Troubleshooting",
    "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
    "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
    "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
    "endpointChatNote": "Titik akhir obrolan yang kompatibel dengan OpenAI (default).",
    "endpointResponsesNote": "Titik akhir API respons (Codex, o-series).",
    "endpointModelsNote": "Katalog model untuk semua penyedia yang terhubung.",
    "endpointAudioNote": "Transkripsi audio (Deepgram, MajelisAI).",
    "endpointImagesNote": "Pembuatan gambar (NanoBanana).",
    "endpointRewriteChatNote": "Tulis ulang pembantu untuk klien tanpa /v1.",
    "endpointRewriteResponsesNote": "Tulis ulang pembantu untuk Respons tanpa /v1.",
    "endpointRewriteModelsNote": "Tulis ulang pembantu untuk penemuan model tanpa /v1.",
    "mgmtProxiesListNote": "Daftar item proxy registry tersimpan (mendukung pagination).",
    "mgmtProxiesCreateNote": "Buat item proxy reusable di registry.",
    "mgmtProxiesHealthNote": "Ambil metrik kesehatan proxy tersimpan (24 jam/window) dari proxy logs.",
    "mgmtProxiesBulkAssignNote": "Set atau hapus satu proxy ke banyak scope ID dalam satu request.",
    "mgmtAssignmentsListNote": "Daftar assignment proxy berdasarkan scope, scope_id, atau proxy_id.",
    "mgmtAssignmentsUpdateNote": "Set atau hapus proxy untuk scope global/provider/account/combo.",
    "mgmtLegacyMigrationNote": "Impor map proxyConfig lama ke assignment registry.",
    "modelPrefixesDescriptionStart": "Gunakan awalan penyedia sebelum nama model untuk merutekan ke penyedia tertentu. Contoh:",
    "modelPrefixesDescriptionEnd": "rute ke GitHub Copilot.",
    "provider": "Penyedia",
    "type": "Ketik",
    "troubleshootingModelRouting": "Jika klien gagal dengan perutean model, gunakan penyedia/model eksplisit (misalnya: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Jika Anda menerima kesalahan model yang ambigu, pilih awalan penyedia, bukan ID model biasa.",
    "troubleshootingCodexFamily": "Untuk model keluarga GitHub Codex, pertahankan model sebagai gh/codex-model; router memilih / merespons secara otomatis.",
    "troubleshootingTestConnection": "Gunakan Dasbor > Penyedia > Uji Koneksi sebelum menguji dari IDE atau klien eksternal.",
    "troubleshootingCircuitBreaker": "Jika penyedia menunjukkan pemutus sirkuit terbuka, tunggu hingga cooldown atau periksa halaman Kesehatan untuk detailnya.",
    "troubleshootingOAuth": "Untuk penyedia OAuth, autentikasi ulang jika masa berlaku token habis. Periksa indikator status kartu penyedia."
  },
  "legal": {
    "privacyPolicy": "Kebijakan Privasi",
    "termsOfService": "Ketentuan Layanan",
    "providerConfigurations": "Konfigurasi penyedia",
    "apiKeys": "Kunci API",
    "usageLogs": "Log penggunaan",
    "applicationSettings": "Pengaturan aplikasi",
    "viewExportAnalytics": "Lihat dan ekspor analisis penggunaan",
    "clearHistory": "Hapus riwayat penggunaan kapan saja",
    "configureRetention": "Konfigurasikan kebijakan penyimpanan log",
    "backupRestore": "Cadangkan dan pulihkan database Anda",
    "privacyMetadataTitle": "Kebijakan Privasi | OmniRoute",
    "privacyMetadataDescription": "Kebijakan privasi untuk router proksi OmniRoute AI API.",
    "termsMetadataTitle": "Ketentuan Layanan | OmniRoute",
    "termsMetadataDescription": "Persyaratan layanan untuk router proksi OmniRoute AI API.",
    "backToHome": "Kembali ke rumah",
    "lastUpdated": "Terakhir diperbarui: {date}",
    "policyLastUpdatedDate": "13 Februari 2026",
    "listSeparator": "-",
    "questionsVisit": "Pertanyaan? Kunjungi kami",
    "githubRepository": "Repositori GitHub",
    "privacySection1Title": "1. Arsitektur Lokal-Pertama",
    "privacySection1Text": "OmniRoute dirancang sebagai aplikasi lokal pertama. Semua pemrosesan dan penyimpanan data sepenuhnya dilakukan di mesin Anda. Tidak ada server terpusat yang mengumpulkan informasi Anda.",
    "privacySection2Title": "2. Data yang Kami Simpan",
    "privacyDataStoredIn": "Data berikut disimpan secara lokal di",
    "privacyDataProviderConfigurationsDesc": "URL koneksi, jenis penyedia, dan pengaturan prioritas",
    "privacyDataApiKeysDesc": "dienkripsi dan disimpan secara lokal untuk diautentikasi dengan penyedia AI",
    "privacyDataUsageLogsDesc": "jumlah permintaan, penggunaan token, nama model, stempel waktu, dan waktu respons",
    "privacyDataApplicationSettingsDesc": "preferensi tema, strategi perutean, dan konfigurasi kombo",
    "privacySection3Title": "3. Tidak Ada Telemetri",
    "privacySection3Text": "OmniRoute tidak mengumpulkan telemetri, analitik, atau laporan kerusakan. Tidak ada data yang dikirimkan kepada kami atau pihak ketiga mana pun. Pola penggunaan, panggilan API, dan konfigurasi Anda sepenuhnya bersifat pribadi.",
    "privacySection4Title": "4. Penyedia AI Pihak Ketiga",
    "privacySection4Text": "Saat Anda melakukan panggilan API melalui OmniRoute, permintaan Anda diteruskan ke penyedia AI yang telah Anda konfigurasikan (misalnya: OpenAI, Anthropic, Google). Penyedia ini memiliki kebijakan privasinya sendiri yang mengatur cara mereka menangani data Anda. Harap tinjau:",
    "privacyOpenAiPolicy": "Kebijakan Privasi OpenAI",
    "privacyAnthropicPolicy": "Kebijakan Privasi Antropis",
    "privacyGooglePolicy": "Kebijakan Privasi Google",
    "privacySection5Title": "5. Sinkronisasi Cloud (Opsional)",
    "privacySection5Text": "Jika Anda mengaktifkan fitur sinkronisasi cloud opsional, konfigurasi penyedia dan kunci API dapat dikirimkan ke titik akhir cloud yang dikonfigurasi. Fitur ini dinonaktifkan secara default dan memerlukan keikutsertaan yang jelas.",
    "privacySection6Title": "6. Pencatatan",
    "privacyLoggingIntro": "Log permintaan dapat dikonfigurasi melalui pengaturan dasbor. Anda dapat:",
    "privacySection7Title": "7. Hak Anda",
    "privacySection7TextStart": "Karena semua data disimpan secara lokal, Anda memiliki kendali penuh. Anda dapat menghapus data Anda kapan saja dengan menghapusnya",
    "privacySection7TextEnd": "direktori atau menggunakan fitur pencadangan dan pemulihan basis data di dasbor.",
    "termsSection1Title": "1. Ikhtisar",
    "termsSection1Text": "OmniRoute adalah router proksi AI API lokal pertama yang beroperasi sepenuhnya di mesin Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.",
    "termsSection2Title": "2. Tanggung Jawab Pengguna",
    "termsResponsibilityApiKeys": "Anda sepenuhnya bertanggung jawab untuk mengelola kunci API dan kredensial Anda sendiri untuk penyedia AI pihak ketiga (OpenAI, Anthropic, Google, dll.).",
    "termsResponsibilityCompliance": "Anda harus mematuhi persyaratan layanan setiap penyedia AI yang API-nya Anda akses melalui OmniRoute.",
    "termsResponsibilitySecurity": "Anda bertanggung jawab atas keamanan instalasi OmniRoute lokal Anda, termasuk mengatur kata sandi dan membatasi akses jaringan.",
    "termsSection3Title": "3. Cara Kerjanya",
    "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dikirim ke OmniRoute diterjemahkan dan diteruskan ke penyedia AI Anda yang dikonfigurasi. OmniRoute tidak mengubah konten permintaan atau tanggapan Anda di luar terjemahan protokol yang diperlukan.",
    "termsSection4Title": "4. Penanganan Data",
    "termsDataStoredLocally": "Semua data disimpan secara lokal di mesin Anda dalam database SQLite.",
    "termsNoTransmission": "OmniRoute tidak mengirimkan data apa pun ke server eksternal kecuali Anda secara eksplisit mengaktifkan fitur sinkronisasi cloud.",
    "termsDataLocationText": "Log penggunaan, kunci API, dan konfigurasi disimpan di",
    "termsSection5Title": "5. Penafian",
    "termsSection5Text": "OmniRoute disediakan \"sebagaimana adanya\" tanpa jaminan apa pun. Kami tidak bertanggung jawab atas segala biaya yang timbul akibat penggunaan API, gangguan layanan, atau kehilangan data. Selalu simpan cadangan konfigurasi Anda.",
    "termsSection6Title": "6. Sumber Terbuka",
    "termsSection6Text": "OmniRoute adalah perangkat lunak sumber terbuka. Anda bebas memeriksa, memodifikasi, dan mendistribusikannya berdasarkan ketentuan lisensinya."
  },
  "endpoints": {
    "tabProxy": "Endpoint Proxy",
    "tabApiEndpoints": "API Endpoints",
    "apiEndpointsTitle": "API Endpoints",
    "apiEndpointsDescription": "Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.",
    "comingSoon": "Coming Soon",
    "plannedFeatures": "Planned Features",
    "featureRestApi": "REST API endpoint catalog with interactive documentation",
    "featureWebhooks": "Webhook configuration and event subscriptions",
    "featureSwagger": "OpenAPI / Swagger spec auto-generation",
    "featureAuth": "API key and OAuth scope management per endpoint"
  },
  "agents": {
    "title": "CLI Agents",
    "description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.",
    "refresh": "Refresh",
    "installed": "Installed",
    "notFound": "Not Found",
    "builtIn": "Built-in",
    "custom": "Custom",
    "remove": "Remove",
    "addCustomAgent": "Add Custom Agent",
    "addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.",
    "agentName": "Agent Name",
    "binaryName": "Binary Name",
    "versionCommand": "Version Command",
    "spawnArgs": "Spawn Args",
    "addAgent": "Add Agent"
  },
  "autoCombo": {
    "title": "Auto-Combo Engine",
    "statusNormal": "Normal",
    "statusIncident": "Incident Mode",
    "modePack": "Mode Pack",
    "providerScores": "Provider Scores",
    "noAutoCombo": "No auto-combo configured.",
    "excludedProviders": "Excluded Providers",
    "noExclusions": "No providers currently excluded.",
    "factorQuota": "Quota",
    "factorHealth": "Health",
    "factorCost": "Cost",
    "factorLatency": "Latency",
    "factorTaskFit": "Task Fit",
    "factorStability": "Stability",
    "factorTierPriority": "Tier Priority",
    "factorTierPriorityDesc": "Prefers accounts with higher quota tiers (Ultra/Pro over Free)",
    "scoreFactorBreakdown": "Scoring Factors",
    "modePackShipFast": "Ship Fast",
    "modePackCostSaver": "Cost Saver",
    "modePackQualityFirst": "Quality First",
    "modePackOfflineFriendly": "Offline Friendly"
  }
}
