{
  "common": {
    "save": "Simpan",
    "reset": "Atur ulang",
    "cancel": "Batal",
    "confirm": "Konfirmasi",
    "delete": "Hapus",
    "edit": "Edit",
    "create": "Buat",
    "upload": "Unggah",
    "download": "Unduh",
    "refresh": "Segarkan",
    "search": "Cari",
    "enable": "Aktifkan",
    "disable": "Nonaktifkan",
    "enabled": "Aktif",
    "disabled": "Nonaktif",
    "preview": "Pratinjau",
    "view": "Lihat",
    "content": "Konten",
    "loading": "Memuat...",
    "copy": "Salin",
    "copied": "Disalin ke papan klip",
    "copyFailed": "Gagal menyalin ke papan klip",
    "contentPlaceholder": "Masukkan konten...",
    "help": "Bantuan",
    "close": "Tutup",
    "actions": "Tindakan",
    "total": "Total {{count}}",
    "clear": "Bersihkan",
    "paste": "Tempel",
    "yes": "Ya",
    "no": "Tidak"
  },
  "desktop": {
    "closeWindow": {
      "title": "Tutup Jendela",
      "description": "Apa yang ingin Anda lakukan saat menutup jendela? Keluar dari aplikasi akan menghentikan semua tugas yang sedang berjalan dan tugas terjadwal.",
      "remember": "Ingat pilihan saya",
      "showWindow": "Tampilkan Jendela",
      "minimizeToTray": "Minimalkan ke baki sistem",
      "quitApp": "Keluar dari Aplikasi",
      "preference": "Tutup Jendela",
      "askEveryTime": "Tanya setiap saat"
    }
  },
  "chunkError": {
    "title": "Gagal memuat halaman",
    "subTitle": "Ini mungkin disebabkan oleh masalah jaringan atau pembaruan aplikasi.",
    "genericTitle": "Terjadi kesalahan",
    "genericSubTitle": "Terjadi kesalahan tak terduga saat merender halaman ini.",
    "reload": "Muat ulang"
  },
  "nav": {
    "chat": "Chat",
    "control": "Kontrol",
    "channels": "Saluran",
    "sessions": "Sesi",
    "cronJobs": "Tugas Cron",
    "heartbeat": "Heartbeat",
    "agent": "Workspace",
    "workspace": "File",
    "skills": "Skill",
    "skillPool": "Kumpulan Skill",
    "tools": "Tool",
    "mcp": "MCP",
    "acp": "ACP",
    "agentConfig": "Konfigurasi",
    "agents": "Manajemen Agen",
    "settings": "Pengaturan",
    "models": "Model",
    "environments": "Environment",
    "security": "Keamanan",
    "tokenUsage": "Penggunaan Token",
    "agentStats": "Statistik Agen",
    "voiceTranscription": "Transkripsi Suara",
    "debug": "Debug",
    "plugins": "Plugin",
    "pluginManager": "Manajer Plugin",
    "backups": "Cadangan"
  },
  "header": {
    "changelog": "Catatan Perubahan",
    "docs": "Dokumentasi",
    "tutorial": "Tutorial",
    "featureDemos": "Demo Fitur",
    "faq": "FAQ",
    "github": "GitHub",
    "resources": "Dokumentasi",
    "updateAvailable": "Pembaruan Tersedia"
  },
  "theme": {
    "dark": "Gelap",
    "light": "Terang",
    "system": "Sistem"
  },
  "sidebar": {
    "newVersion": "Versi baru tersedia: v{{version}}, klik untuk meningkatkan",
    "updateModal": {
      "title": "Versi baru tersedia: v{{version}}",
      "viewReleases": "Lihat Rilis",
      "installDesktopUpdate": "Perbarui Sekarang",
      "desktopInstallHint": "QwenPaw Desktop {{version}} siap dipasang. Aplikasi akan dimulai ulang setelah pembaruan.",
      "checking": "Memeriksa pembaruan…",
      "checkingHint": "Memeriksa versi terbaru",
      "downloading": "Mengunduh pembaruan",
      "downloadingTo": "Memperbarui ke versi {{version}}",
      "downloadProgress": "{{done}} / {{total}} · {{rate}}",
      "installing": "Memasang pembaruan",
      "willRestart": "Aplikasi akan dimulai ulang otomatis setelah selesai.",
      "stepPrepare": "Persiapan",
      "stepDownloading": "Unduh",
      "stepInstalling": "Pasang",
      "failedTitle": "Pembaruan gagal",
      "back": "Kembali",
      "retry": "Coba Lagi",
      "errors": {
        "network": "Tidak dapat menjangkau server pembaruan. Periksa internet dan coba lagi.",
        "signature": "Tanda tangan file pembaruan tidak valid. Coba unduh lagi.",
        "appLocation": "QwenPaw berjalan dari lokasi macOS yang hanya-baca. Pindahkan QwenPaw.app ke folder Applications, jalankan dari sana, lalu coba perbarui lagi.",
        "other": "Pembaruan gagal."
      },
      "updateLater": "Unduh di Latar Belakang",
      "backgroundDownloading": "Mengunduh di latar belakang…",
      "readyToInstall": "Pembaruan siap",
      "readyToInstallHint": "Pembaruan v{{version}} telah diunduh. Mulai ulang untuk memasang dan membuka versi baru.",
      "restartNow": "Perbarui Sekarang",
      "backgroundFailed": "Unduhan latar belakang gagal"
    },
    "settings": {
      "language": "Bahasa",
      "theme": "Tema",
      "mode": "Mode"
    },
    "simpleMode": "Mode sederhana",
    "fullMode": "Mode lengkap"
  },
  "login": {
    "title": "Masuk ke QwenPaw",
    "registerTitle": "Buat Akun",
    "firstUserHint": "Buat akun admin untuk memulai",
    "usernamePlaceholder": "Nama pengguna",
    "passwordPlaceholder": "Kata sandi",
    "usernameRequired": "Masukkan nama pengguna",
    "passwordRequired": "Masukkan kata sandi",
    "submit": "Masuk",
    "register": "Daftar",
    "failed": "Gagal masuk, periksa kredensial Anda",
    "registerSuccess": "Pendaftaran berhasil",
    "registerFailed": "Pendaftaran gagal",
    "authNotEnabled": "Autentikasi tidak diaktifkan",
    "logout": "Keluar",
    "logoutSuccess": "Berhasil keluar",
    "sessionExpired": "Sesi berakhir, silakan masuk lagi",
    "unauthorized": "Tidak berwenang, silakan masuk"
  },
  "chat": {
    "modelSelectTooltip": "Pilih model",
    "newChatTooltip": "Chat baru",
    "searchTooltip": "Cari semua chat",
    "chatHistoryTooltip": "Riwayat chat",
    "wideModeTooltip": "Mode lebar",
    "normalModeTooltip": "Mode normal",
    "allChats": "Semua Chat",
    "createNewChat": "Buat Chat Baru",
    "pinDrawer": "Sematkan",
    "unpinDrawer": "Lepas sematan",
    "statusIdle": "Idle",
    "statusInProgress": "Sedang berjalan",
    "disclaimer": "Bekerja untuk Anda, berkembang bersama Anda",
    "greeting": "Halo, apa yang bisa saya bantu hari ini?",
    "description": "Saya asisten yang dapat membantu menjawab pertanyaan Anda.",
    "prompt1": "Mari mulai perjalanan baru!",
    "prompt2": "Bisa jelaskan skill apa saja yang Anda miliki?",
    "inputPlaceholder": "\"↑↓\" untuk navigasi pesan · \"/\" untuk perintah cepat (\"/approve\" atau \"/deny\" saat approval)",
    "longTextUploadPrompt": "Harap baca file prompt yang diunggah dan jawab berdasarkan isinya.",
    "emptyOutputError": "Asisten mengembalikan respons kosong.",
    "commands": {
      "clear": {
        "description": "Bersihkan konteks percakapan"
      },
      "compact": {
        "description": "Ringkas konteks percakapan; instruksi opsional didukung"
      },
      "approve": {
        "description": "Setujui tindakan tool yang tertunda dan lanjutkan eksekusi"
      },
      "deny": {
        "description": "Tolak tindakan tool yang tertunda"
      },
      "mission": {
        "description": "Mode Mission — Memecah tugas ke sub-agen dengan konteks terisolasi"
      },
      "skills": {
        "description": "Tampilkan skill yang tersedia untuk chat dan perintah skill eksplisit"
      },
      "goal": {
        "description": "Loop Goal — Agen mengejar tujuan secara terus-menerus, evaluasi otomatis via Rubric"
      }
    },
    "attachments": {
      "tooltip": "Mendukung dokumen, gambar, video, audio, dan format lain",
      "tooltipImageOnly": "Model saat ini hanya mendukung unggahan gambar",
      "tooltipNoMultimodal": "Kemampuan multimodal tidak terdeteksi untuk model saat ini. Gambar atau video mungkin tidak diproses dengan benar",
      "fileSizeLimit": "Satu file hingga {{limit}}MB",
      "fileSizeExceeded": "Ukuran file melebihi batas {{limit}}MB. File saat ini: {{size}}MB",
      "multimodalDisabled": "Model saat ini tidak mendukung unggahan file",
      "multimodalWarning": "Kemampuan multimodal tidak terdeteksi untuk model saat ini, gambar atau video mungkin tidak diproses dengan benar",
      "imageOnlyAccept": "Model saat ini hanya mendukung file gambar",
      "imageOnlyWarning": "Model saat ini hanya mendukung gambar, file non-gambar seperti video mungkin tidak diproses dengan benar"
    },
    "rateLimitHit": "Model saat ini terkena batas laju. Coba beralih ke model gratis lainnya.",
    "turnUsagePopover": {
      "ariaLabel": "Lihat token giliran dan penggunaan konteks",
      "turn": "Giliran ini",
      "turnEstimated": "Giliran ini ~",
      "tok": "tok",
      "inOut": "in {{inTok}} · out {{outTok}}",
      "contextLabel": "Jendela konteks:",
      "manageContext": "Kelola konteks",
      "compact": "Kompres",
      "new": "Obrolan baru"
    },
    "rateLimitMessage": "Batas laju tercapai. Beralih ke model gratis lain:",
    "rateLimitSwitched": "Beralih ke {{model}}",
    "speech": {
      "startRecording": "Mulai rekaman suara (Ctrl+Shift+M)",
      "stopRecording": "Hentikan rekaman (Ctrl+Shift+M)",
      "transcribing": "Mentranskripsi...",
      "transcriptionDisabled": "Transkripsi dinonaktifkan. Konfigurasi provider di Pengaturan > Transkripsi Suara.",
      "transcriptionFailed": "Transkripsi suara gagal",
      "microphoneError": "Tidak dapat mengakses mikrofon",
      "fileTooLarge": "File rekaman terlalu besar ({{size}}MB). Maksimum: {{limit}}MB",
      "recordingTooLong": "Rekaman melebihi batas durasi ({{limit}}s)"
    },
    "search": {
      "title": "Cari Chat",
      "tooltip": "Cari chat saat ini",
      "placeholder": "Cari pesan...",
      "noResults": "Tidak ada hasil",
      "resultsCount": "Ditemukan {{count}} hasil",
      "searching": "Mencari {{progress}}...",
      "loading": "Memuat...",
      "userMessage": "Pengguna",
      "assistantMessage": "Asisten",
      "titleMatch": "Judul"
    },
    "contextMenu": {
      "open": "Buka",
      "rename": "Ganti nama",
      "pin": "Sematkan",
      "unpin": "Lepas sematan",
      "delete": "Hapus"
    },
    "queue": {
      "title": "Antrean pesan",
      "paused": "Dijeda",
      "sendFailed": "Gagal mengirim",
      "resume": "Lanjutkan antrean",
      "pause": "Jeda antrean",
      "clear": "Hapus antrean",
      "dragSort": "Seret untuk mengurutkan",
      "edit": "Edit",
      "retry": "Coba lagi",
      "skip": "Lewati",
      "interruptAndSend": "Hentikan & kirim",
      "delete": "Hapus",
      "file": "File",
      "noChatWarning": "Kirim pesan terlebih dahulu untuk membuat percakapan sebelum menggunakan antrean",
      "queueFull": "Antrean penuh (maks. {{max}} item). Kirim atau hapus beberapa pesan terlebih dahulu",
      "otherTabOwner": "This tab queues only; sending is handled by another tab"
    },
    "group": {
      "pinned": "Disematkan",
      "today": "Hari ini",
      "week": "7 hari terakhir",
      "month": "30 hari terakhir",
      "older": "Sebelumnya"
    },
    "sessionPanel": {
      "searchConversations": "Cari…",
      "noResults": "Tidak ada hasil",
      "noConversations": "Tidak ada percakapan",
      "loadingConversations": "Memuat…"
    },
    "conversationHistory": "Riwayat Percakapan",
    "history": {
      "empty": "Tidak ada riwayat obrolan"
    },
    "sessionGroup": {
      "today": "Hari ini",
      "recent": "7 hari terakhir",
      "earlier": "Sebelumnya"
    }
  },
  "modelSelector": {
    "selectModel": "Pilih model",
    "noConfiguredModels": "Tidak ada model yang dikonfigurasi",
    "noFreeModels": "Tidak ada model gratis tersedia",
    "switchFailed": "Gagal mengganti model",
    "searchModels": "Cari model...",
    "noModelsFound": "Tidak ada model yang cocok",
    "free": "Gratis",
    "vision": "Visi",
    "freeBannerText": "Model gratis mungkin memiliki batas penggunaan dan tidak stabil. Lihat penyedia untuk detail.",
    "moreProviders": "Lebih banyak penyedia gratis (perlu API Key)",
    "proBannerText": "Menampilkan model yang dikonfigurasi di Pengaturan.",
    "connectToUse": "Hubungkan {{provider}} untuk model gratis",
    "configureApiKey": "Konfigurasi API Key {{provider}} untuk model gratis",
    "configureApiKeyTitle": "Buka Halaman Konfigurasi",
    "configureApiKeyConfirm": "Anda akan diarahkan ke halaman Model untuk mengonfigurasi API Key {{provider}}. Lanjutkan?",
    "goToConfigure": "Buka Konfigurasi",
    "noModelsDiscovered": "Terhubung. Memuat model...",
    "oauthTitle": "Hubungkan ke {{provider}}",
    "oauthDescription": "Jendela browser baru akan terbuka untuk mengotorisasi akses ke {{provider}}. Kunci API akan disimpan secara otomatis.",
    "oauthContinue": "Lanjutkan",
    "oauthWaiting": "Menunggu otorisasi...",
    "oauthWaitingDescription": "Silakan selesaikan otorisasi di jendela browser.",
    "oauthConnected": "Berhasil terhubung ke {{provider}}",
    "oauthFailed": "Otorisasi gagal, silakan coba lagi",
    "viewMore": "Lihat lebih ({{count}})"
  },
  "agent": {
    "parent": "Pengaturan",
    "agents": "Agen",
    "management": "Manajemen Agen",
    "pageDescription": "Buat, konfigurasi, dan kelola beberapa agen AI dengan workspace dan identitas khusus.",
    "name": "Nama",
    "id": "ID",
    "description": "Deskripsi",
    "workspace": "Path Workspace",
    "create": "Buat Agen",
    "createTitle": "Buat Agen Baru",
    "createSuccess": "Agen berhasil dibuat",
    "createFailed": "Gagal membuat agen",
    "edit": "Edit",
    "editTitle": "Edit Agen - {{name}}",
    "updateSuccess": "Agen berhasil diperbarui",
    "updateFailed": "Gagal memperbarui agen",
    "delete": "Hapus",
    "deleteConfirm": "Konfirmasi Hapus Agen",
    "deleteConfirmDesc": "Agen tidak akan tersedia setelah dihapus, tetapi file workspace tetap disimpan",
    "deleteSuccess": "Agen berhasil dihapus",
    "deleteFailed": "Gagal menghapus agen",
    "selectAgent": "Pilih Agen",
    "defaultDisplayName": "Agen Default",
    "currentWorkspace": "Agen Saat Ini",
    "switchSuccess": "Agen berhasil diganti",
    "switchFailed": "Gagal mengganti agen",
    "loadFailed": "Gagal memuat daftar agen",
    "loadConfigFailed": "Gagal memuat konfigurasi agen",
    "saveFailed": "Gagal menyimpan agen",
    "idRequired": "Masukkan ID agen",
    "idLabel": "ID Agen (opsional)",
    "idHelp": "Kosongkan untuk dibuat otomatis. Hanya huruf, angka, tanda hubung, dan garis bawah.",
    "idPattern": "ID hanya boleh berisi huruf, angka, garis bawah, dan tanda hubung",
    "idPlaceholder": "contoh: agen-saya",
    "nameRequired": "Masukkan nama agen",
    "namePlaceholder": "contoh: Agen Saya",
    "descriptionPlaceholder": "Jelaskan singkat tujuan agen ini...",
    "workspaceHelp": "Kosongkan untuk dibuat otomatis di ~/.qwenpaw/workspaces/<id>",
    "defaultNotEditable": "Agen default tidak dapat diedit",
    "defaultNotDeletable": "Agen default tidak dapat dihapus",
    "disable": "Nonaktifkan",
    "enable": "Aktifkan",
    "disabled": "Nonaktif",
    "disableSuccess": "Agen berhasil dinonaktifkan",
    "enableSuccess": "Agen berhasil diaktifkan",
    "toggleFailed": "Gagal mengubah status agen",
    "enableAgent": "Aktifkan {{name}}",
    "disableAgent": "Nonaktifkan {{name}}",
    "disabledAgents": "Dinonaktifkan ({{count}})",
    "pinnedAgents": "Disematkan",
    "otherAgents": "Agen lainnya",
    "pinned": "Disematkan",
    "defaultPinned": "Agen default selalu disematkan",
    "longPressToPin": "Tekan lama untuk menyematkan",
    "longPressToUnpin": "Tekan lama untuk melepas",
    "pinAgent": "Sematkan agen",
    "unpinAgent": "Lepas sematan agen",
    "pinSuccess": "Agen disematkan",
    "unpinSuccess": "Sematan agen dilepas",
    "pinFailed": "Gagal memperbarui status sematan",
    "status": {
      "disabled": "Dinonaktifkan",
      "pending": "Menunggu dimulai",
      "starting": "Memulai",
      "running": "Berjalan",
      "failed": "Gagal memulai",
      "waitUntilStarted": "Tersedia setelah proses mulai selesai"
    },
    "defaultNotDisablable": "Agen default tidak dapat dinonaktifkan",
    "initialSkills": "Skill Awal",
    "selectAll": "Semua",
    "selectBuiltin": "Bawaan",
    "selectNone": "Tidak ada",
    "model": "Model",
    "modelHelp": "Tetapkan model LLM khusus untuk agen ini. Kosongkan untuk memakai default global.",
    "modelPlaceholder": "Gunakan default global",
    "noConfiguredModels": "Tidak ada model yang dikonfigurasi",
    "modelColumn": "Model",
    "copyTooltip": "Salin konfigurasi agen",
    "copyDefaultTooltip": "Salin menggunakan agen default sebagai templat",
    "copyTitle": "Salin Konfigurasi Agen",
    "copyNameLabel": "Nama agen baru",
    "copyOptionsLabel": "Konten yang disalin",
    "copyOptionAgentJson": "agent.json (wajib)",
    "copyOptionAgentJsonHint": "Selalu menyalin konfigurasi sumber yang telah diurai dan mereset ID, nama, workspace, serta channels. Ini bukan salinan byte-per-byte dari agent.json di disk.",
    "copyOptionMdFiles": "AGENTS / SOUL / PROFILE / HEARTBEAT / BOOTSTRAP.md",
    "copyOptionSkills": "skills/ + manifest",
    "copyOptionJobs": "jobs.json",
    "copyOptionJobsHint": "Hanya menyalin definisi tugas, tanpa riwayat. Agen baru akan segera menjalankannya sesuai jadwal setelah dibuat.",
    "copySuccess": "Konfigurasi agen berhasil disalin",
    "copyFailed": "Gagal menyalin konfigurasi agen"
  },
  "skills": {
    "title": "Skill",
    "description": "Kelola skill dan kemampuan agen.",
    "importHub": "Unggah via URL",
    "supportedSources": "Sumber yang didukung:",
    "importSkills": "Impor Skill",
    "enterSkillUrl": "Masukkan URL Skill",
    "invalidUrl": "URL tidak valid",
    "type": "Tipe",
    "installedFrom": "Diinstal dari",
    "source": "Sumber",
    "path": "Path",
    "tags": "Tag",
    "builtin": "Bawaan",
    "custom": "Kustom",
    "addSkill": "Tambah Skill",
    "createSkill": "Buat Skill",
    "viewSkill": "Lihat Skill",
    "editSkill": "Edit Skill",
    "skillName": "Nama Skill",
    "skillContent": "Konten Skill",
    "pleaseInputName": "Masukkan nama skill",
    "pleaseInputContent": "Masukkan konten skill",
    "createSuccess": "Skill berhasil dibuat",
    "createFailed": "Gagal membuat skill",
    "deleteConfirm": "Yakin ingin menghapus skill ini?",
    "deleteSuccess": "Skill berhasil dihapus",
    "deleteFailed": "Gagal menghapus skill",
    "batchEnable": "Aktifkan",
    "batchDisable": "Nonaktifkan",
    "selectedCount": "{{count}} dipilih",
    "updateSuccess": "Skill berhasil diperbarui",
    "updateFailed": "Gagal memperbarui skill",
    "create": "Buat",
    "optimizeWithAI": "Optimalkan dengan AI",
    "stopOptimize": "Berhenti",
    "uploadSkill": "Unggah Skill",
    "uploadZip": "Unggah via ZIP",
    "downloadFromPool": "Muat dari Kumpulan Skill",
    "channels": "Saluran",
    "allChannels": "Semua",
    "lastUpdated": "Diperbarui",
    "searchPlaceholder": "Filter berdasarkan nama",
    "listView": "Tampilan daftar",
    "gridView": "Tampilan grid",
    "enabledSkills": "Skill Aktif",
    "disabledSkills": "Skill Nonaktif",
    "active": "aktif"
  },
  "skillPool": {
    "description": "Kumpulan skill lokal bersama untuk skill bawaan dan unggahan workspace.",
    "broadcast": "Sebarkan ke Agen",
    "broadcastHint": "Sebarkan skill ke agen yang dipilih",
    "refreshHint": "Segarkan kumpulan skill dari disk",
    "deleteExternalConfirm": "Menghapus file skill eksternal di {{path}} dari disk.",
    "deleteExternalBatchWarning": "Skill eksternal yang dipilih akan dihapus permanen dari disk.",
    "importBuiltin": "Perbarui Skill Bawaan",
    "sourceVersion": "Versi sumber",
    "currentVersion": "Versi saat ini",
    "builtinLanguage": "Bahasa",
    "langDefault": "Default",
    "langDefaultTooltip": "Pertahankan setiap skill dalam bahasa saat ini",
    "langEn": "Inggris",
    "langZh": "Mandarin",
    "builtinLanguageChangeTitle": "Ganti bahasa bawaan?",
    "builtinLanguageChangeContent": "Timpa salinan pool \"{{name}}\" dengan versi bawaan {{language}}?",
    "builtinLanguageChangeSuccess": "\"{{name}}\" diganti ke {{language}}",
    "builtinLanguageChangeFailed": "Gagal mengganti bahasa bawaan",
    "create": "Buat",
    "edit": "Edit",
    "delete": "Hapus",
    "descriptionLabel": "Deskripsi",
    "tags": "Tag",
    "version": "Versi",
    "skillName": "Nama Skill",
    "status": "Status",
    "installedFrom": "Diinstal dari",
    "updateBuiltin": "Perbarui",
    "updateSuccess": "Berhasil diperbarui",
    "updateFailed": "Pembaruan gagal"
  },
  "channels": {
    "title": "Saluran",
    "description": "Kelola dan konfigurasi saluran pesan",
    "loading": "Memuat saluran...",
    "configSaved": "Konfigurasi berhasil disimpan",
    "configFailed": "Gagal menyimpan konfigurasi",
    "channelType": "Tipe Saluran",
    "status": "Status",
    "totalItems": "Total {{count}} item",
    "botPrefix": "Prefix Bot",
    "showToolCalls": "Tampilkan Informasi Panggilan Alat",
    "showToolCallsTooltip": "Tampilkan informasi panggilan alat kepada pengguna (nonaktifkan untuk menyembunyikan)",
    "showToolResults": "Tampilkan Informasi Hasil Alat",
    "showToolResultsTooltip": "Tampilkan informasi hasil alat kepada pengguna (nonaktifkan untuk menyembunyikan)",
    "toolCallMaxLength": "Panjang Tampilan Maksimum Panggilan Alat",
    "toolResultMaxLength": "Panjang Tampilan Maksimum Hasil Alat",
    "toolMaxLengthTooltip": "Atur ke 0 agar tidak dibatasi",
    "showThinking": "Tampilkan Proses Berpikir",
    "showThinkingTooltip": "Tampilkan proses berpikir/penalaran model kepada pengguna (nonaktifkan untuk menyembunyikan)",
    "settings": "Pengaturan",
    "channelSettings": "Pengaturan Saluran",
    "notSet": "Belum diatur",
    "clickCardToEdit": "Klik kartu untuk mengedit",
    "language": "Bahasa",
    "accessControlEnabled": "Kontrol Akses",
    "accessControlEnabledTooltip": "Saat diaktifkan, hanya pengguna dalam daftar putih yang dapat berinteraksi dengan bot. Pengguna tidak dikenal akan menerima ID mereka dan ditambahkan ke daftar persetujuan.",
    "accessControlDm": "Kontrol Akses DM",
    "accessControlDmTooltip": "Saat diaktifkan, hanya pengguna dalam daftar putih yang dapat berinteraksi dengan bot di pesan langsung",
    "accessControlGroup": "Kontrol Akses Grup",
    "accessControlGroupTooltip": "Saat diaktifkan, hanya pengguna dalam daftar putih yang dapat berinteraksi dengan bot di chat grup",
    "dmDisabled": "Nonaktifkan DM",
    "dmDisabledTooltip": "Saat diaktifkan, bot akan sepenuhnya mengabaikan semua pesan langsung",
    "groupDisabled": "Nonaktifkan Grup",
    "groupDisabledTooltip": "Saat diaktifkan, bot akan sepenuhnya mengabaikan semua pesan grup",
    "manageAccessControl": "Kontrol Akses",
    "pendingApprovals": "Menunggu Persetujuan",
    "whitelist": "Daftar Putih",
    "blacklist": "Daftar Hitam",
    "addUser": "Tambah",
    "addUserPlaceholder": "Masukkan ID pengguna",
    "userId": "ID Pengguna",
    "username": "Nama Pengguna",
    "channel": "Kanal",
    "firstMessage": "Pesan Pertama",
    "time": "Waktu",
    "actions": "Tindakan",
    "approve": "Daftar Putih",
    "deny": "Daftar Hitam",
    "dismiss": "Abaikan",
    "noWhitelistUsers": "Tidak ada pengguna daftar putih",
    "noBlacklistUsers": "Tidak ada pengguna daftar hitam",
    "noPendingApprovals": "Tidak ada persetujuan tertunda",
    "userAdded": "Pengguna ditambahkan",
    "userRemoved": "Pengguna dihapus",
    "approveSuccess": "Ditambahkan ke daftar putih",
    "denySuccess": "Ditambahkan ke daftar hitam",
    "dismissSuccess": "Diabaikan",
    "operationFailed": "Operasi gagal",
    "remark": "Catatan",
    "usernamePlaceholder": "Masukkan nama pengguna (opsional)",
    "remarkPlaceholder": "Masukkan catatan (opsional)",
    "filterByChannel": "Filter berdasarkan channel",
    "selectToOperate": "Pilih item untuk operasi",
    "selectedCount": "{{count}} dipilih",
    "batchApprove": "Setujui",
    "batchDeny": "Daftar hitam",
    "batchDismiss": "Hapus",
    "batchApproveConfirm": "Setujui {{count}} pengguna?",
    "batchDenyConfirm": "Tambahkan {{count}} pengguna ke daftar hitam?",
    "batchDismissConfirm": "Hapus {{count}} pengguna?",
    "batchSuccess": "{{count}} pengguna berhasil diproses",
    "batchRemove": "Hapus",
    "batchRemoveConfirm": "Hapus {{count}} pengguna yang dipilih?",
    "enabledSection": "Diaktifkan",
    "enabledCount": "{{count}}",
    "availableSection": "Tersedia",
    "enableAction": "Aktifkan",
    "noEnabledChannels": "Tidak ada saluran yang diaktifkan",
    "goEnableChannels": "Aktifkan saluran",
    "slackBotToken": "Bot Token",
    "slackBotTokenTooltip": "Slack Bot User OAuth Token, dimulai dengan xoxb-",
    "slackAppToken": "App Token",
    "slackAppTokenTooltip": "Slack App-Level Token untuk Socket Mode, dimulai dengan xapp-",
    "slackProxyTooltip": "URL proxy HTTP untuk menghubungkan ke Slack API"
  },
  "tools": {
    "title": "Tool Bawaan",
    "description": "Kelola tool bawaan dan status aktifnya. Tool yang dinonaktifkan tidak tersedia untuk agen.",
    "emptyState": "Tidak ada tool yang dikonfigurasi",
    "loadError": "Gagal memuat tool",
    "enableSuccess": "Tool berhasil diaktifkan",
    "disableSuccess": "Tool berhasil dinonaktifkan",
    "toggleError": "Gagal mengubah status tool",
    "enableAll": "Aktifkan Semua",
    "disableAll": "Nonaktifkan Semua",
    "enableAllSuccess": "Semua tool diaktifkan",
    "disableAllSuccess": "Semua tool dinonaktifkan",
    "allEnabled": "Semua tool sudah aktif",
    "allDisabled": "Semua tool sudah nonaktif",
    "asyncExecution": "Eksekusi Asinkron",
    "asyncExecutionEnabled": "Eksekusi asinkron aktif",
    "asyncExecutionDisabled": "Eksekusi asinkron nonaktif",
    "configure": "Konfigurasi",
    "configured": "Terkonfigurasi",
    "requiresConfig": "Perlu konfigurasi",
    "configSaved": "Konfigurasi tersimpan",
    "configSaveError": "Gagal menyimpan konfigurasi",
    "active": "aktif",
    "available": "Tersedia",
    "noEnabled": "Tidak ada alat yang diaktifkan",
    "goEnableBtn": "Aktifkan sekarang",
    "configureAction": "Konfigurasi →",
    "enableAction": "Aktifkan →"
  },
  "modelConfig": {
    "promptTitle": "Model LLM Diperlukan - Pilih di Chat Setelah Konfigurasi",
    "promptMessage": "Chat memerlukan model LLM agar berfungsi. Konfigurasi model terlebih dahulu, lalu pilih dari pemilih model di bagian atas halaman Chat.",
    "configureButton": "Konfigurasi Model",
    "skipButton": "Lewati",
    "chatDisabledTitle": "Chat Dinonaktifkan",
    "chatDisabledMessage": "Fungsi chat dinonaktifkan karena tidak ada model yang dikonfigurasi.",
    "configureNow": "Konfigurasi Model",
    "modelNotConfigured": "Konfigurasi model di Pengaturan sebelum memakai chat"
  },
  "security": {
    "parent": "Pengaturan",
    "security": "Keamanan",
    "title": "Keamanan",
    "description": "Kelola fitur keamanan untuk tool dan skill.",
    "toolGuardTitle": "Tool Guard",
    "toolGuardDescription": "Konfigurasi pemindaian keamanan untuk panggilan tool. Operasi berbahaya akan memerlukan persetujuan eksplisit sebelum dieksekusi.",
    "enabled": "Aktifkan Tool Guard",
    "guardedTools": "Tool yang Diawasi",
    "deniedTools": "Tool yang Ditolak",
    "saveSuccess": "Pengaturan Tool Guard tersimpan",
    "saveFailed": "Gagal menyimpan pengaturan Tool Guard",
    "loadFailed": "Gagal memuat pengaturan Tool Guard",
    "rules": {
      "title": "Aturan Deteksi",
      "description": "Aturan menentukan pola regex yang memicu peringatan keamanan.",
      "id": "ID Aturan",
      "severity": "Tingkat Keparahan",
      "source": "Sumber",
      "actions": "Tindakan",
      "builtin": "Bawaan",
      "custom": "Kustom",
      "enable": "Aktifkan",
      "disable": "Nonaktifkan",
      "edit": "Edit",
      "delete": "Hapus",
      "add": "Tambah Aturan"
    }
  },
  "workspace": {
    "title": "File",
    "workspacePath": "Workspace:",
    "noFiles": "Tidak ada file",
    "coreFiles": "File Inti",
    "coreFilesDesc": "Persona bootstrap, identitas, dan panduan tool.",
    "selectFile": "Pilih file untuk diedit",
    "fileContent": "Konten file...",
    "uploadSuccess": "File berhasil diunggah",
    "uploadFailed": "Gagal mengunggah file",
    "downloadPreparing": "Mempersiapkan unduhan workspace...",
    "downloadSuccess": "Workspace berhasil diunduh",
    "downloadFailed": "Gagal mengunduh workspace",
    "uploadTooltip": "Hanya file ZIP",
    "uploadTooltipWithLimit": "Hanya file ZIP, maks {{limit}}MB",
    "zipOnly": "Hanya file .zip yang didukung untuk unggahan",
    "saveSuccess": "Berhasil disimpan",
    "saveFailed": "Gagal menyimpan"
  },
  "cronJobs": {
    "title": "Tugas Cron",
    "description": "Buat dan kelola tugas terjadwal yang berjalan otomatis pada waktu tertentu.",
    "createJob": "Buat Tugas",
    "editJob": "Edit Tugas",
    "confirmDelete": "Konfirmasi Hapus",
    "deleteConfirm": "Yakin ingin menghapus tugas Cron ini?",
    "okText": "OK",
    "cancelText": "Batal",
    "deleteText": "Hapus",
    "id": "ID Tugas",
    "name": "Nama Tugas",
    "enabled": "Status",
    "scheduleType": "Tipe Jadwal",
    "scheduleCron": "Jadwal (Cron)",
    "scheduleTimezone": "Zona Waktu",
    "cronType": "Frekuensi",
    "cronTypeHourly": "Per jam",
    "cronTypeDaily": "Harian",
    "cronTypeWeekly": "Mingguan",
    "cronTypeCustom": "Kustom",
    "cronTime": "Waktu",
    "cronDaysOfWeek": "Hari dalam Minggu",
    "cronDayMon": "Senin",
    "cronDayTue": "Selasa",
    "cronDayWed": "Rabu",
    "cronDayThu": "Kamis",
    "cronDayFri": "Jumat",
    "cronDaySat": "Sabtu",
    "cronDaySun": "Minggu",
    "taskText": "Konten pesan",
    "action": "Tindakan",
    "executeNow": "Jalankan Sekarang",
    "totalItems": "Total {{count}} item",
    "selectTimezone": "Pilih zona waktu",
    "silentDelivery": "Pengiriman senyap",
    "silentDeliveryTooltip": "Jalankan tugas agen dan simpan sesi serta pelacakannya, tetapi jangan kirim hasil ke kanal.",
    "validation": {
      "cronRequired": "Ekspresi cron wajib diisi untuk jadwal berulang.",
      "runAtRequired": "Waktu eksekusi wajib diisi untuk jadwal sekali jalan.",
      "repeatUntilRequired": "Saat memilih \"Berakhir pada tanggal\", tanggal akhir wajib diisi.",
      "repeatCountRequired": "Saat memilih \"Jumlah terbatas\", jumlah eksekusi wajib diisi.",
      "repeatUntilAfterRunAt": "Tanggal akhir harus lebih lambat daripada waktu eksekusi. Pilih tanggal akhir setelah waktu eksekusi.",
      "textRequired": "Konten pesan wajib diisi saat jenis tugas adalah text.",
      "requestRequired": "Konten request wajib diisi saat jenis tugas adalah agent.",
      "invalidCronExpression": "Ekspresi cron tidak valid. Gunakan format cron 5 kolom."
    }
  },
  "heartbeat": {
    "title": "Heartbeat",
    "description": "Jalankan HEARTBEAT.md pada interval tetap untuk pemeriksaan mandiri.",
    "enabled": "Aktifkan heartbeat",
    "every": "Interval",
    "everyRequired": "Wajib",
    "everyMin": "Minimal 1",
    "timeoutSeconds": "Batas waktu eksekusi (detik)",
    "timeoutRequired": "Wajib",
    "timeoutMin": "Minimal 1",
    "timeoutMax": "Maksimal 3600",
    "unitMinutes": "Menit",
    "unitHours": "Jam",
    "target": "Target balasan",
    "targetMain": "Mode senyap (default, tanpa output saluran)",
    "targetLast": "Kirim ke saluran chat terakhir",
    "activeHours": "Jam aktif (opsional)",
    "activeStart": "Waktu mulai",
    "activeEnd": "Waktu selesai",
    "loadFailed": "Gagal memuat konfigurasi heartbeat",
    "saveSuccess": "Berhasil disimpan; heartbeat dimuat ulang",
    "saveFailed": "Gagal menyimpan konfigurasi heartbeat"
  },
  "backup": {
    "title": "Cadangan",
    "description": "Cadangkan dan pulihkan workspace serta konfigurasi agen.",
    "create": "Buat Cadangan",
    "import": "Impor",
    "export": "Ekspor",
    "restore": "Pulihkan",
    "delete": "Hapus",
    "batchDelete": "Hapus yang Dipilih",
    "name": "Nama",
    "createdAt": "Dibuat",
    "scopeSummary": "Cakupan",
    "descriptionLabel": "Deskripsi",
    "noBackups": "Belum ada cadangan. Buat cadangan untuk menyimpan konfigurasi saat ini.",
    "loadFailed": "Gagal memuat cadangan",
    "createTitle": "Buat Cadangan",
    "backupMode": "Mode Cadangan",
    "fullBackup": "Cadangan Penuh",
    "customBackup": "Cadangan Kustom",
    "partialBackup": "Cadangan Parsial",
    "scopeGlobalConfig": "Pengaturan global",
    "scopeSkillPool": "Kumpulan skill",
    "scopeSecrets": "Rahasia",
    "scopeSecretsHint": "Mencakup rahasia penyedia model (kunci API), variabel lingkungan, dan informasi sensitif lainnya",
    "createSuccess": "Cadangan berhasil dibuat",
    "createFailed": "Gagal membuat cadangan",
    "restoreTitle": "Pulihkan Cadangan",
    "restoreFullWarning": "Pemulihan penuh akan sepenuhnya mengganti semua konten instance saat ini (termasuk semua agen, konfigurasi global, kumpulan skill, dan rahasia). Tindakan ini tidak dapat dibatalkan. Fitur terkait tidak tersedia selama pemulihan. Silakan mulai ulang layanan setelah pemulihan selesai.",
    "restoreWarningModify": "Pemulihan akan mengubah konfigurasi saat ini. Tindakan ini tidak dapat dibatalkan.",
    "restoreWarningRestart": "Fitur terkait tidak tersedia selama pemulihan. Silakan mulai ulang layanan setelah pemulihan selesai.",
    "restoreConfirm": "Saya mengonfirmasi ingin memulihkan cadangan ini",
    "restoreMode": "Mode pemulihan",
    "restoreModeFull": "Pemulihan penuh",
    "restoreModeFullDesc": "Sepenuhnya mengganti semua konten instance saat ini, termasuk semua agen, konfigurasi global, kumpulan skill, dan rahasia",
    "restoreModeCustom": "Pemulihan khusus",
    "restoreModeCustomDesc": "Pilih konten yang ingin dipulihkan, seperti agen tertentu, konfigurasi, dll.; agen yang sudah ada tetapi tidak termasuk dalam pemulihan ini akan tetap dipertahankan",
    "restoreModeFullDisabled": "Hanya cadangan penuh",
    "restoreCustomSummary": "{{existing}} yang sudah ada · {{added}} baru dipilih",
    "defaultWorkspaceDir": "Direktori ruang kerja default agen",
    "defaultWorkspaceDirPlaceholder": "Biarkan kosong untuk menggunakan ~/.qwenpaw/workspaces",
    "defaultWorkspaceDirHint": "Jika jalur ruang kerja asli agen tidak ada, agen akan disimpan di <jalur default>/<ID agen>. Jika ada, jalur ruang kerja asli agen akan digunakan.",
    "restoreStrategy": "Strategi pemulihan",
    "restoreStrategyPreserve": "Pertahankan keamanan lokal dan MCP",
    "restoreStrategyPreserveDesc": "Pertahankan pengaman keamanan dan konfigurasi MCP instance ini.",
    "restoreStrategyRestore": "Pulihkan pengaturan ini dari cadangan",
    "restoreStrategyRestoreDesc": "Gunakan konfigurasi keamanan dan MCP dari cadangan.",
    "restoreSuccess": "Cadangan berhasil dipulihkan. Silakan mulai ulang layanan.",
    "restoreSuccessPreserved": "Cadangan berhasil dipulihkan. Pengaturan lokal dipertahankan: {{keys}}. Silakan mulai ulang layanan.",
    "restoreFailed": "Gagal memulihkan cadangan",
    "restoreTargetBusy": "Pemulihan gagal karena direktori berikut masih digunakan. Tutup browser atau proses yang menggunakannya, lalu coba lagi. Jika masih terkunci, mulai ulang sistem dan coba lagi.",
    "detailLoadFailed": "Gagal memuat detail cadangan; pemulihan tidak tersedia",
    "importSuccess": "Cadangan berhasil diimpor",
    "importFailed": "Gagal mengimpor cadangan",
    "trustLocalBanner": "Cadangan lokal - pemulihan penuh secara default",
    "trustForeignBanner": "Cadangan impor - keamanan lokal dan MCP dipertahankan secara default",
    "trustLegacyBanner": "Cadangan lama - konfirmasi kepercayaan diperlukan sebelum pemulihan",
    "trustForeignTitle": "Percayai cadangan ini?",
    "trustLegacyTitle": "Percayai cadangan lama?",
    "unknownBackupName": "Arsip cadangan",
    "trustForeignDesc": "Cadangan ini tidak ditandatangani oleh instance ini. Lanjutkan hanya jika Anda memercayai sumbernya; pengaturan keamanan lokal dan MCP akan dipertahankan secara default saat dipulihkan.",
    "trustLegacyDesc": "Cadangan lama ini tidak memiliki tanda tangan lokal. Lanjutkan hanya jika Anda memercayai asalnya; instance ini akan menandatanganinya sebelum dipulihkan."
  },
  "mcp": {
    "title": "Klien MCP",
    "create": "Buat Klien",
    "formatSupport": "Format yang didukung",
    "standardFormat": "Standar (pembungkus mcpServers)",
    "directFormat": "Langsung (key → objek konfigurasi)",
    "singleFormat": "Satu klien (field datar)",
    "emptyState": "Belum ada klien MCP yang dikonfigurasi",
    "loadError": "Gagal memuat klien MCP",
    "createSuccess": "Klien MCP berhasil dibuat",
    "createError": "Gagal membuat klien MCP",
    "updateSuccess": "Klien MCP berhasil diperbarui",
    "updateError": "Gagal memperbarui klien MCP",
    "enableSuccess": "Klien MCP berhasil diaktifkan",
    "disableSuccess": "Klien MCP berhasil dinonaktifkan",
    "toggleError": "Gagal mengubah status klien MCP",
    "deleteConfirm": "Yakin ingin menghapus klien MCP ini?",
    "deleteSuccess": "Klien MCP berhasil dihapus",
    "deleteError": "Gagal menghapus klien MCP",
    "maskedFieldHint": "Field sensitif disamarkan dengan ***. Edit langsung pada nilai tersamarkan tidak didukung — ganti dengan nilai lengkap yang baru untuk mengubahnya.",
    "tools": "Tool & Izin",
    "noTools": "Tidak ada tool tersedia dari server MCP ini",
    "toolsLoadError": "Gagal memuat tool dari server MCP",
    "toolsConnecting": "Server MCP masih tersambung, coba lagi sebentar lagi",
    "toolSchema": "Skema Input",
    "access": {
      "title": "Akses",
      "button": "Akses",
      "summary": "Kebijakan akses MCP",
      "clientSection": "Akses keseluruhan",
      "toolSection": "Akses tool",
      "default": "Default",
      "sourceType": "Sumber",
      "sourceValue": "Nilai sumber",
      "sourceValueAllChannels": "Semua saluran",
      "subjectType": "Objek",
      "subjectValue": "Nilai objek",
      "effectLabel": "Kebijakan",
      "source": {
        "channel": "Saluran"
      },
      "subjectTypeOption": {
        "all": "Semua",
        "user": "Pengguna"
      },
      "sourceValuePlaceholder": {
        "channel": "console / dingtalk"
      },
      "subjectValuePlaceholder": "mis. alice",
      "subjectValuePlaceholderSelectedSource": "ID pengguna di sumber yang dipilih",
      "subjectValuePlaceholderScoped": "ID pengguna {{source}}",
      "subjectValueAll": "Semua",
      "recentUserPlaceholder": "ID pengguna dibatasi pada sumber yang dipilih; ketik atau pilih lagi",
      "noRecentUsers": "Tidak ada pengguna terbaru untuk sumber ini; ketik ID pengguna secara manual",
      "ambiguousUserSourceWarning": "ID pengguna hanya unik di dalam sumber. Pilih saluran tertentu untuk menghindari kecocokan lintas saluran.",
      "unknownUserValueWarning": "ID pengguna ini tidak ada di daftar pengguna aktif terbaru. Penyimpanan tetap diizinkan.",
      "validation": {
        "missingUserValue": "Pilih sumber tertentu dan masukkan ID pengguna yang valid.",
        "ambiguousUserSource": "Aturan pengguna harus menargetkan saluran tertentu, bukan semua saluran.",
        "unknownUserValue": "ID pengguna ini tidak ada di daftar pengguna aktif terbaru. Penyimpanan tetap diizinkan."
      },
      "addRule": "Tambah aturan",
      "deleteRule": "Hapus aturan",
      "noClientRules": "Tidak ada aturan",
      "noRules": "Tidak ada aturan, menggunakan kebijakan default",
      "inherit": "Ikuti ({{effect}})",
      "stale": "Tidak ditemukan",
      "disabledTools": "Klien MCP ini dinonaktifkan; aturan akses yang tersimpan tetap dapat diedit.",
      "discardTitle": "Buang perubahan yang belum disimpan?",
      "discardContent": "Perubahan kebijakan akses yang belum disimpan akan hilang.",
      "loadError": "Gagal memuat kebijakan akses MCP",
      "saveSuccess": "Kebijakan akses MCP tersimpan",
      "saveError": "Gagal menyimpan kebijakan akses MCP",
      "unmanagedRules": "{{count}} aturan lanjutan",
      "effect": {
        "allow": "Izinkan",
        "ask": "Tanya",
        "deny": "Tolak"
      }
    },
    "tab": {
      "json": "Impor JSON",
      "form": "Mode Form"
    },
    "form": {
      "key": "Kunci klien",
      "keyPlaceholder": "my-mcp-server",
      "keyRequired": "Kunci klien wajib diisi",
      "name": "Nama tampilan",
      "namePlaceholder": "My MCP Server",
      "nameRequired": "Nama tampilan wajib diisi",
      "transport": "Transport",
      "url": "URL server",
      "urlRequired": "URL wajib diisi untuk server MCP jarak jauh",
      "command": "Perintah",
      "commandRequired": "Perintah wajib diisi untuk transport stdio",
      "args": "Argumen (dipisahkan spasi atau baris baru)",
      "description": "Deskripsi",
      "descriptionPlaceholder": "Deskripsi opsional",
      "env": "Variabel lingkungan",
      "envPlaceholder": "KEY=VALUE (satu per baris)"
    },
    "oauth": {
      "enableOAuth": "Gunakan Otorisasi OAuth",
      "manage": "OAuth",
      "authorized": "Telah Diotorisasi",
      "notAuthorized": "Belum Diotorisasi",
      "expired": "Token Kedaluwarsa",
      "failed": "Otorisasi Gagal",
      "waiting": "Menunggu otorisasi...",
      "authorize": "Otorisasi",
      "reauthorize": "Otorisasi Ulang",
      "revoke": "Cabut Akses",
      "startFailed": "Gagal memulai alur OAuth",
      "authFailed": "Otorisasi OAuth gagal",
      "popupBlocked": "Popup diblokir oleh browser. Izinkan popup dan coba lagi.",
      "windowClosed": "Jendela otorisasi ditutup. Silakan coba lagi.",
      "noUrl": "Masukkan URL server terlebih dahulu",
      "noClientKey": "Buat klien terlebih dahulu",
      "showAdvanced": "Opsi lanjutan",
      "hideAdvanced": "Sembunyikan opsi lanjutan",
      "clientId": "Client ID (opsional)",
      "clientIdPlaceholder": "Kosongkan untuk menggunakan Dynamic Client Registration",
      "scope": "Scope (opsional)",
      "scopePlaceholder": "openid profile email",
      "authEndpoint": "Authorization Endpoint (timpa)",
      "tokenEndpoint": "Token Endpoint (timpa)",
      "endpointHint": "Kosongkan untuk deteksi otomatis dari server MCP."
    }
  },
  "preview": {
    "error": {
      "SENSITIVE_FILE_BLOCKED": "File diblokir oleh File Guard (perlindungan file sensitif).",
      "OUTSIDE_WORKSPACE": "File berada di luar cakupan workspace. Aktifkan \"Izinkan Pratinjau Konsol di Luar Workspace\" di Pengaturan → Keamanan → File Guard.",
      "FORBIDDEN": "Akses ditolak: izin tidak cukup untuk melihat pratinjau file ini.",
      "NOT_FOUND": "File tidak ditemukan, mungkin telah dipindahkan atau dihapus. Jika menggunakan jalur relatif, coba gunakan jalur absolut.",
      "LOAD_FAILED": "Gagal memuat pratinjau file.",
      "LOAD_FAILED_DETAIL": "Gagal memuat pratinjau file: {{detail}}"
    }
  },
  "pluginManager": {
    "title": "Manajer Plugin",
    "description": "Instal, kelola, dan hapus plugin tanpa me-restart layanan.",
    "installed": "Plugin Terinstal",
    "noPlugins": "Belum ada plugin yang terinstal",
    "installBtn": "Instal Plugin",
    "installTitle": "Instal Plugin",
    "dropPrimary": "Letakkan folder atau ZIP di sini",
    "dropSecondary": "atau klik untuk memilih file ZIP",
    "orFromUrl": "atau dari URL",
    "installFromUrl": "Instal dari URL",
    "urlPlaceholder": "https://example.com/plugin.zip",
    "zipOnly": "Hanya file ZIP yang dapat dijatuhkan sebagai file — seret folder untuk instalasi direktori",
    "dropFailed": "Gagal membaca folder yang dijatuhkan",
    "restartHint": "Beberapa plugin (mis. hook, monkey-patch) mungkin memerlukan restart aplikasi agar sepenuhnya aktif atau dihapus.",
    "installing": "Menginstal...",
    "installSuccess": "Plugin berhasil diinstal",
    "installFailed": "Instalasi plugin gagal",
    "uninstall": "Copot",
    "uninstallConfirm": "Copot plugin \"{{name}}\"? Tindakan ini tidak dapat dibatalkan. Beberapa plugin mungkin memerlukan restart aplikasi agar sepenuhnya dihapus.",
    "uninstalling": "Mencopot...",
    "uninstallSuccess": "Plugin berhasil dicopot",
    "uninstallFailed": "Pencopotan plugin gagal",
    "statusLoaded": "Berjalan",
    "statusUnloaded": "Tidak dimuat",
    "type": "Tipe",
    "version": "Versi",
    "author": "Penulis",
    "unknown": "Tidak diketahui",
    "loadFailed": "Gagal memuat daftar plugin",
    "confirmTitle": "Konfirmasi Pencopotan",
    "officialTitle": "Plugin Resmi",
    "officialDesc": "Instal plugin yang dipublikasikan dari CDN unduhan.",
    "catalogRefresh": "Segarkan",
    "catalogEmpty": "Tidak ada plugin resmi tersedia (katalog CDN mungkin kosong)",
    "catalogLoadFailed": "Gagal memuat katalog plugin resmi",
    "catalogInstall": "Instal",
    "catalogReinstall": "Instal ulang",
    "catalogUpgrade": "Pembaruan tersedia",
    "catalogUpgradeBtn": "Perbarui",
    "catalogInstalled": "Terinstal",
    "catalogSha256": "SHA256",
    "kindBundle": "Bundel",
    "kindTool": "Alat",
    "filterByName": "Filter berdasarkan nama",
    "filterByKind": "Filter berdasarkan jenis",
    "marketTitle": "Plugin Market",
    "marketEmpty": "No plugins found in market",
    "marketLoadFailed": "Failed to load plugin market",
    "marketUnavailable": "Plugin Market is currently under maintenance, please try again later",
    "marketAll": "All",
    "marketSearch": "Search plugins...",
    "marketCategory": "Filter by category",
    "marketSearchResult": "Found {{count}} plugins matching \"{{keyword}}\"",
    "marketDetails": "Details",
    "marketDownloads": "Downloads",
    "marketDeveloper": "Developer"
  },
  "debug": {
    "title": "Debug",
    "desc": "Lihat file log daemon backend untuk membantu diagnosis masalah.",
    "level": {
      "all": "Semua"
    },
    "backend": {
      "title": "Log backend",
      "autoRefresh": "Segarkan otomatis",
      "newestFirst": "Terbaru dulu",
      "updatedAt": "Diperbarui pada",
      "path": "File log",
      "notFound": "File log backend belum ditemukan.",
      "placeholder": "Output log backend akan muncul di sini.",
      "loadFailed": "Gagal memuat log backend",
      "searchPlaceholder": "Cari log backend..."
    },
    "actions": {
      "refreshBackend": "Segarkan log backend",
      "refreshSuccess": "Log disegarkan",
      "copyBackend": "Salin log backend"
    }
  },
  "codingMode": {
    "title": "Mode Coding",
    "experimental": "Fitur Eksperimental",
    "experimentalDesc": "Mode Coding mengubah QwenPaw menjadi Web IDE ringan dengan editor kode, pohon file, integrasi Git, dan bantuan coding bertenaga AI.",
    "experimentalNote": "Fitur ini masih eksperimental dan dalam pengembangan aktif. Beberapa fungsi mungkin terbatas atau berubah pada pembaruan mendatang.",
    "confirmBtn": "Aktifkan Mode Coding",
    "enterTooltip": "Masuk ke Mode Coding",
    "exitTooltip": "Keluar dari Mode Coding",
    "btnCode": "Kode",
    "btnChat": "Obrolan",
    "selectProject": "Pilih Proyek Kode",
    "selectProjectDesc": "Pilih proyek untuk dikerjakan, atau gunakan workspace default",
    "tabWorkspace": "Workspace Default",
    "tabClone": "Clone Repositori",
    "tabLocal": "Impor Proyek Lokal",
    "tabNew": "Proyek Baru",
    "workspaceDesc": "Gunakan direktori workspace agen saat ini",
    "cloneUrl": "URL Repositori Git",
    "cloneUrlPlaceholder": "https://github.com/user/repo.git",
    "cloneName": "Nama Proyek (opsional)",
    "cloneNamePlaceholder": "Kosongkan untuk mengambil dari URL",
    "cloneBtn": "Mulai Clone",
    "cloning": "Mengkloning...",
    "localPath": "Path Direktori Lokal",
    "localPathPlaceholder": "/Users/nama-anda/my-project",
    "localPathHint": "Masukkan path absolut ke proyek lokal Anda",
    "openBtn": "Impor",
    "newName": "Nama Proyek",
    "newNamePlaceholder": "my-project",
    "createBtn": "Buat Proyek",
    "switchProject": "Ganti Proyek",
    "currentProject": "Proyek Saat Ini",
    "resetToWorkspace": "Reset ke Workspace Default",
    "dropPrimary": "Seret folder ke sini, atau klik untuk menjelajah",
    "dropSecondary": "Seret dari Finder atau tempel path di bawah",
    "pathHint": "Masukkan path absolut lengkap (dimulai dengan / atau ~)",
    "importing": "Mengimpor...",
    "dropFailed": "Gagal membaca folder",
    "workingDir": "Direktori kerja",
    "importCopyNote": "Folder akan disalin ke coding_projects/. File asli tidak akan diubah.",
    "importCopyDesc": "Impor akan membuat salinan folder. Agent bekerja pada salinan, file asli tidak diubah. Untuk bekerja langsung pada aslinya, gunakan \"Buka Direktori\".",
    "tabOpenDir": "Buka Direktori",
    "openDirDesc": "Buka direktori lokal yang sudah ada — tidak ada file yang disalin",
    "openDirBtn": "Buka Direktori Ini",
    "openDirLoading": "Memuat...",
    "openDirEmpty": "Tidak ada subdirektori",
    "openDirHome": "Beranda",
    "openDirRefresh": "Segarkan",
    "openDirHiddenFolders": "Folder Tersembunyi"
  },
  "market": {
    "searchPlaceholder": "Cari skill di berbagai platform",
    "categoryAll": "Semua",
    "categoryPlaceholder": "Cari kategori",
    "searchResult": "Ditemukan {{count}} skill yang cocok dengan \"{{keyword}}\"",
    "providerUnavailable": "Sumber tidak tersedia",
    "noResults": "Tidak ada hasil",
    "startTyping": "Ketik kata kunci di atas untuk mencari di marketplace",
    "browseHint": "Pilih kategori atau masukkan kata kunci untuk menjelajahi skill di {{providers}}",
    "noDescription": "Tidak ada deskripsi",
    "browseMarket": "Jelajahi Market",
    "installQueue": "Antrean instalasi",
    "clearCompleted": "Bersihkan",
    "retry": "Coba lagi",
    "status": {
      "queued": "Mengantre",
      "installing": "Memasang",
      "completed": "Selesai",
      "failed": "Gagal",
      "cancelled": "Dibatalkan"
    },
    "loadMore": "Muat lebih banyak",
    "noMoreResults": "Tidak ada hasil lainnya",
    "detail": {
      "title": "Detail skill",
      "version": "Versi",
      "author": "Penulis",
      "sourceUrl": "URL instalasi",
      "slug": "ID",
      "missing": "—"
    },
    "stats": {
      "downloads": "Unduhan",
      "stars": "Bintang",
      "installs": "Instalasi",
      "likes": "Suka",
      "views": "Tampilan",
      "category": "Kategori",
      "updatedAt": "Diperbarui"
    },
    "queueMsg": {
      "timedOut": "Instalasi habis waktu",
      "failedPrefix": "Gagal: {{msg}}"
    }
  },
  "startup": {
    "starting": "Memulai backend...",
    "checking": "Menghubungkan ke backend...",
    "error": "Backend gagal dimulai.",
    "errorHint": "Proses backend tidak dapat dijalankan. Periksa log aplikasi untuk detail.",
    "errorDetails": "Tampilkan detail error",
    "timeout": "Backend gagal dimulai dalam {{seconds}} detik.",
    "timeoutHint": "Backend gagal dimulai. Coba lagi, atau periksa log aplikasi untuk detail.",
    "retry": "Coba lagi"
  },
  "inbox": {
    "title": "Kotak Masuk",
    "tabApprovals": "Persetujuan",
    "tabPushMessages": "Pesan Push",
    "tabHarvests": "Panen AI",
    "summaryApprovals": "Persetujuan",
    "summaryPushUnread": "Push Belum Dibaca",
    "summaryHarvests": "Panen",
    "from": "Dari:",
    "requestedBy": "Oleh",
    "markRead": "Tandai Dibaca",
    "markAllRead": "Tandai Semua Dibaca",
    "markAllReadNoUnread": "Tidak ada pesan yang belum dibaca",
    "markAllReadSuccess": "{{count}} pesan ditandai dibaca",
    "selectAllCurrentPage": "Pilih halaman ini",
    "selectedItems": "{{count}} dipilih",
    "batchDeleteButton": "Hapus Massal",
    "batchOperation": "Massal",
    "exitBatch": "Keluar dari Mode Massal",
    "batchDeleteConfirm": "Hapus {{count}} pesan push yang dipilih?",
    "batchDeleteSuccess": "{{count}} pesan push dihapus",
    "pushCronHeader": "Cron Job: {{name}}",
    "viewDetails": "Lihat Detail",
    "deleteMessageConfirm": "Hapus pesan push ini?",
    "viewAll": "Lihat Semua",
    "read": "Dibaca",
    "approve": "Setujui",
    "reject": "Tolak",
    "ready": "Siap",
    "harvestNow": "Panen Sekarang",
    "createHarvest": "Buat Panen",
    "createFirstHarvest": "Buat Panen Pertama Anda",
    "createSuccess": "Panen berhasil dibuat",
    "emptyApprovals": "Tidak ada persetujuan yang tertunda",
    "emptyPush": "Tidak ada pesan push",
    "emptyHarvests": "Belum ada panen",
    "statusReadyToHarvest": "Siap Dipanen",
    "statusGrowing": "Sedang Tumbuh",
    "harvestedTimes": "Dipanen {{count}} kali",
    "harvestSuccessRate": "Tingkat Keberhasilan {{rate}}%",
    "messageDetailComingSoon": "Tampilan detail pesan - Segera hadir!",
    "harvestSettingsComingSoon": "Pengaturan panen - Segera hadir!",
    "messageDetailTitle": "Detail Eksekusi",
    "detailCronTitle": "Cron Job: {{name}}",
    "detailHeartbeatTitle": "Heartbeat",
    "messageNotFound": "Pesan tidak ditemukan",
    "detailTaskName": "Nama Tugas",
    "detailTaskId": "ID Tugas",
    "detailStatus": "Status",
    "detailSeverity": "Tingkat Keparahan",
    "detailAgent": "Agen",
    "detailSource": "Sumber",
    "detailSourceCronJob": "Cron Job",
    "detailSourceHeartbeat": "Heartbeat",
    "detailTrigger": "Pemicu",
    "detailDuration": "Durasi",
    "detailExecutedAt": "Dieksekusi Pada",
    "detailReceivedAt": "Diterima Pada",
    "detailRunId": "ID Jalankan",
    "detailContent": "Output",
    "detailPayload": "Payload",
    "detailExecutionTrace": "Jejak Eksekusi",
    "detailTraceEmpty": "Tidak ada jejak eksekusi",
    "filterByAgent": "Filter berdasarkan agen",
    "filterBySourceType": "Filter berdasarkan sumber",
    "sourceTypeCron": "Cron",
    "sourceTypeHeartbeat": "Heartbeat",
    "sourceTypeMemory": "Memory"
  },
  "acp": {
    "title": "ACP",
    "loading": "Memuat konfigurasi ACP...",
    "builtin": "Bawaan",
    "custom": "Kustom",
    "create": "Tambah Agen Kustom",
    "createTitle": "Buat Agen ACP",
    "createSuccess": "Agen ACP berhasil dibuat",
    "editTitle": "Edit Konfigurasi ACP",
    "agentKey": "Kunci Agen",
    "agentKeyRequired": "Harap masukkan kunci agen",
    "agentKeyInvalid": "Kunci agen hanya boleh berisi huruf, angka, garis bawah, dan tanda hubung",
    "agentKeyExists": "Kunci agen ini sudah ada",
    "enabled": "Aktif",
    "command": "Perintah",
    "commandRequired": "Harap masukkan perintah",
    "args": "Argumen",
    "argsHelp": "Satu argumen per baris",
    "env": "Variabel Lingkungan",
    "envHelp": "Gunakan format KEY=VALUE pada setiap baris",
    "envInvalidLine": "Format variabel lingkungan tidak valid: {{line}}",
    "trusted": "Tepercaya",
    "toolParseMode": "Mode Parse Alat",
    "toolParseModeRequired": "Harap pilih mode parse alat",
    "stdioBufferLimit": "Batas Buffer Stdio",
    "stdioBufferLimitHelp": "Ukuran buffer baris stdio maksimum dalam byte untuk subproses ACP.",
    "stdioBufferLimitRequired": "Harap masukkan batas buffer stdio",
    "stdioBufferLimitMin": "Batas buffer stdio minimal 1 byte",
    "docs": "Dokumen Setup",
    "docsHelp": "Buka dokumen integrasi ACP dan langsung ke bagian \"Cara mengkonfigurasi runner eksternal\"",
    "notSet": "Belum diatur",
    "configSaved": "Konfigurasi ACP tersimpan",
    "configFailed": "Gagal menyimpan konfigurasi ACP",
    "deleteTitle": "Hapus {{name}}",
    "deleteConfirm": "Hapus agen ACP ini? Tindakan ini tidak dapat dibatalkan.",
    "deleteSuccess": "Agen ACP berhasil dihapus",
    "deleteFailed": "Gagal menghapus agen ACP",
    "nodeSettings": "Pengaturan Node",
    "nodePath": "Path Node",
    "chooseOtherNode": "Pilih Node lain...",
    "selectNodePath": "Pilih path Node",
    "nodePathPrompt": "Masukkan path file executable node",
    "nodeSaved": "Pengaturan Node tersimpan",
    "nodeLoadFailed": "Gagal memuat pengaturan Node",
    "nodeSaveFailed": "Path Node tidak tersedia",
    "nodeRuntime": {
      "bundled": "Node bawaan",
      "system": "Node sistem",
      "custom": "Node kustom"
    },
    "nodeRuntimeReason": {
      "systemNodeMissing": "Node sistem tidak terdeteksi",
      "nodeMissing": "Path Node tidak ada",
      "npxMissing": "npx tidak ditemukan",
      "versionCheckFailed": "Pemeriksaan versi gagal",
      "unavailable": "Tidak tersedia"
    }
  },
  "sessions": {
    "title": "Sesi",
    "description": "Lihat dan kelola sesi chat yang aktif",
    "loading": "Memuat sesi...",
    "confirmDelete": "Konfirmasi Hapus",
    "deleteConfirm": "Apakah Anda yakin ingin menghapus sesi ini?",
    "batchDeleteConfirm": "Apakah Anda yakin ingin menghapus {{count}} sesi yang dipilih?",
    "deleteSuccess": "Sesi berhasil dihapus",
    "deleteFailed": "Gagal menghapus sesi",
    "batchDeleteSuccess": "Berhasil menghapus {{count}} sesi",
    "batchDeleteFailed": "Gagal menghapus sesi secara massal",
    "saveSuccess": "Sesi berhasil disimpan",
    "saveFailed": "Gagal menyimpan sesi",
    "batchDeleteButton": "Hapus Massal",
    "filterTitle": "Filter berdasarkan Judul",
    "filterUserId": "Filter berdasarkan ID Pengguna",
    "filterChannel": "Filter berdasarkan Saluran",
    "allChannels": "Semua Saluran",
    "totalItems": "Total {{count}} item",
    "selectedItems": "{{count}} item dipilih",
    "editSession": "Edit Sesi",
    "pleaseInputName": "Harap masukkan nama sesi",
    "sessionNamePlaceholder": "Nama sesi",
    "activeTab": "Aktif",
    "archivedTab": "Diarsipkan",
    "archivedAtColumn": "Waktu Arsip",
    "archive": {
      "action": "Arsipkan",
      "unaction": "Batalkan Arsip",
      "batchAction": "Arsipkan Massal",
      "batchUnaction": "Batalkan Arsip Massal",
      "success": "Obrolan diarsipkan",
      "successHint": "Obrolan diarsipkan. Lihat di Kontrol > Sesi > Diarsipkan.",
      "failed": "Gagal mengarsipkan",
      "unarchiveSuccess": "Arsip dibatalkan",
      "unarchiveFailed": "Gagal membatalkan arsip",
      "batchSuccess": "{{count}} obrolan diarsipkan",
      "batchFailed": "Gagal mengarsipkan massal",
      "batchUnarchiveSuccess": "{{count}} obrolan dibatalkan arsipnya",
      "batchUnarchiveFailed": "Gagal membatalkan arsip massal",
      "groupLabel": "Diarsipkan ({{count}})",
      "modalTitle": "Obrolan yang Diarsipkan",
      "unarchiveAll": "Batalkan Semua Arsip",
      "noArchived": "Tidak ada obrolan yang diarsipkan"
    }
  },
  "environments": {
    "parent": "Pengaturan",
    "environments": "Variabel Lingkungan",
    "title": "Variabel Lingkungan",
    "description": "Konfigurasi variabel lingkungan key-value untuk agen dan skill.",
    "key": "Kunci",
    "value": "Nilai",
    "variableNamePlaceholder": "NAMA_VARIABEL",
    "valuePlaceholder": "nilai",
    "insertRowBelow": "Sisipkan baris di bawah",
    "deleteRow": "Hapus baris",
    "deleteVariable": "Hapus Variabel",
    "deleteConfirm": "Hapus \"{{name}}\"?",
    "deleteSelected": "Hapus yang Dipilih",
    "deleteSelectedConfirm": "Hapus {{label}}?",
    "keyRequired": "Kunci wajib diisi",
    "invalidKeyFormat": "Format kunci tidak valid",
    "duplicateKey": "Kunci duplikat",
    "saveSuccess": "Variabel lingkungan tersimpan",
    "saveFailed": "Gagal menyimpan",
    "deleteSuccess": "\"{{name}}\" dihapus",
    "deleteFailed": "Gagal menghapus",
    "noVariables": "Belum ada variabel lingkungan yang dikonfigurasi.",
    "addVariable": "Tambah Variabel",
    "loading": "Memuat…",
    "retry": "Coba Lagi",
    "of": "dari",
    "selected": "dipilih",
    "variable": "variabel",
    "variables": "variabel",
    "showValue": "Tampilkan nilai",
    "hideValue": "Sembunyikan nilai"
  },
  "tokenUsage": {
    "title": "Penggunaan Token",
    "totalTokens": "Total Token",
    "totalCalls": "Total Panggilan",
    "promptTokens": "Token Prompt",
    "completionTokens": "Token Completion",
    "byModel": "Berdasarkan Model",
    "byDate": "Berdasarkan Tanggal",
    "model": "Model",
    "date": "Tanggal",
    "loadFailed": "Gagal memuat penggunaan token",
    "noData": "Tidak ada data penggunaan token pada periode yang dipilih",
    "modelTrend": "Tren Penggunaan Model",
    "tokenTypeChart": "Tren Jenis Token",
    "selectAll": "Pilih Semua",
    "allSelected": "Semua",
    "itemsSelected": "{{count}} dipilih",
    "selectModels": "Pilih model",
    "selectTokenTypes": "Pilih jenis token"
  },
  "agentStats": {
    "title": "Statistik Agen",
    "description": "Lihat statistik agen untuk periode waktu yang dipilih.",
    "totalSessions": "Total Sesi",
    "totalMessages": "Total Pesan",
    "userMessages": "Pesan Pengguna",
    "assistantMessages": "Pesan Asisten",
    "promptTokens": "Token Prompt",
    "completionTokens": "Token Completion",
    "llmCalls": "Panggilan LLM",
    "toolCalls": "Panggilan Alat",
    "channel": "Saluran",
    "sessionCount": "Sesi",
    "sessions": "Sesi",
    "newSessions": "Sesi Baru",
    "activeSessions": "Sesi Aktif",
    "messages": "Pesan",
    "messageTrend": "Tren Pesan",
    "sessionTrend": "Tren Sesi",
    "tokenTrend": "Tren Token",
    "llmAndToolTrend": "Tren Panggilan LLM & Alat",
    "sessionsByChannel": "Sesi per Saluran",
    "messagesByChannel": "Pesan per Saluran",
    "totalSessionsTooltip": "Total sesi chat yang dibuat, setiap sesi adalah konteks percakapan yang independen",
    "totalMessagesTooltip": "Total pesan di semua sesi, termasuk pesan pengguna dan asisten",
    "promptTokensTooltip": "Total token prompt yang dikirimkan ke LLM",
    "completionTokensTooltip": "Total token completion yang dihasilkan oleh LLM",
    "llmCallsTooltip": "Jumlah panggilan API LLM, setiap permintaan dihitung satu panggilan",
    "toolCallsTooltip": "Jumlah kali agen memutuskan untuk menjalankan alat; satu panggilan LLM dapat menghasilkan beberapa intent penggunaan alat",
    "messageTrendTooltip": "Tren perbandingan pesan pengguna vs pesan asisten",
    "sessionTrendTooltip": "Tren perbandingan sesi baru vs sesi aktif; batang oranye adalah sesi yang dibuat hari itu, batang biru adalah sesi dengan pesan pada hari itu",
    "tokenTrendTooltip": "Tren konsumsi token prompt dan completion",
    "llmAndToolTrendTooltip": "Tren perbandingan panggilan LLM vs intent penggunaan alat",
    "sessionsByChannelTooltip": "Distribusi sesi berdasarkan saluran pesan; sesi tanpa saluran dikelompokkan di bawah Konsol",
    "messagesByChannelTooltip": "Distribusi total pesan berdasarkan saluran pesan",
    "loadFailed": "Gagal memuat statistik",
    "noData": "Tidak ada data statistik pada periode yang dipilih",
    "retry": "Coba Lagi"
  },
  "approval": {
    "title": "Persetujuan Keamanan Diperlukan",
    "ownerAgent": "Agen Pemilik",
    "executingAgent": "Agen yang Mengeksekusi",
    "tool": "Alat",
    "severity": "Tingkat Keparahan",
    "findings": "Temuan",
    "parameters": "Parameter",
    "approve": "Setujui",
    "deny": "Tolak",
    "source": "Sumber",
    "builtinSource": "Bawaan",
    "subSession": "Sub-Agen",
    "approved": "Panggilan alat disetujui",
    "denied": "Panggilan alat ditolak",
    "approveFailed": "Gagal menyetujui",
    "denyFailed": "Gagal menolak",
    "timeoutAutoDenied": "Waktu habis, otomatis ditolak",
    "acknowledge": "Mengerti",
    "approvePattern": "Selalu Izinkan",
    "strictModeHint": "Selalu izinkan tidak tersedia dalam mode ketat",
    "approveExact": "Hanya Sekali Ini",
    "approvalScope": "Lingkup Persetujuan",
    "details": "Detail"
  },
  "account": {
    "title": "Akun",
    "currentPassword": "Kata Sandi Saat Ini",
    "currentPasswordRequired": "Harap masukkan kata sandi Anda saat ini",
    "newUsername": "Nama Pengguna Baru",
    "newUsernamePlaceholder": "Biarkan kosong untuk tetap menggunakan yang sekarang",
    "newPassword": "Kata Sandi Baru",
    "newPasswordPlaceholder": "Biarkan kosong untuk tetap menggunakan yang sekarang",
    "confirmPassword": "Konfirmasi Kata Sandi Baru",
    "confirmPasswordPlaceholder": "Masukkan kembali kata sandi baru",
    "passwordMismatch": "Kata sandi tidak cocok",
    "save": "Simpan Perubahan",
    "updateSuccess": "Akun berhasil diperbarui",
    "updateFailed": "Gagal memperbarui akun",
    "wrongPassword": "Kata sandi saat ini salah",
    "nothingToUpdate": "Harap masukkan nama pengguna atau kata sandi baru",
    "passwordEmpty": "Kata sandi tidak boleh kosong",
    "usernameEmpty": "Nama pengguna tidak boleh kosong"
  },
  "voiceTranscription": {
    "title": "Transkripsi Suara",
    "description": "Konfigurasi cara pesan audio dan suara yang masuk ditangani.",
    "saveSuccess": "Mode audio tersimpan",
    "saveFailed": "Gagal menyimpan mode audio",
    "audioModeLabel": "Mode Audio",
    "audioModeDescription": "Pilih cara pesan suara dari saluran (Discord, Telegram, dll.) diproses sebelum dikirim ke model.",
    "modeAuto": "Otomatis (Direkomendasikan)",
    "modeAutoDesc": "Transkripsi audio ke teks menggunakan penyedia transkripsi yang dipilih, lalu kirim teks ke model. Jika transkripsi tidak tersedia atau dinonaktifkan, placeholder unggahan file ditampilkan. Audio tidak pernah dikirim langsung ke model dalam mode ini. Berfungsi dengan semua model.",
    "modeNative": "Audio Native",
    "modeNativeDesc": "Kirim file audio langsung ke model tanpa transkripsi. Ini adalah satu-satunya mode yang mengirim audio ke model. Hanya berfungsi dengan model yang mendukung audio (misalnya gpt-4o-audio). Sebagian besar model tidak mendukung ini dan akan menolak pesan.",
    "ffmpegReady": "ffmpeg terinstal. Konversi audio tersedia untuk mode native.",
    "ffmpegMissing": "ffmpeg tidak terinstal.",
    "ffmpegMissingDesc": "Mode audio native memerlukan ffmpeg untuk mengonversi format audio (misalnya .ogg ke .wav). Instal ffmpeg sebagai paket sistem untuk mengaktifkan mode ini.",
    "providerTypeLabel": "Penyedia Transkripsi",
    "providerTypeDescription": "Pilih backend transkripsi. Pilih Dinonaktifkan jika Anda tidak memerlukan transkripsi suara.",
    "providerTypeDisabled": "Dinonaktifkan",
    "providerTypeDisabledDesc": "Tidak ada transkripsi. Pesan suara akan menampilkan placeholder unggahan file.",
    "providerTypeWhisperApi": "Whisper API",
    "providerTypeWhisperApiDesc": "Gunakan endpoint Whisper API yang kompatibel dengan OpenAI dari penyedia yang dikonfigurasi (misalnya OpenAI, Ollama).",
    "providerTypeLocalWhisper": "Whisper Lokal",
    "providerTypeLocalWhisperDesc": "Jalankan transkripsi secara lokal menggunakan pustaka Python openai-whisper. Memerlukan ffmpeg dan openai-whisper yang terinstal.",
    "localWhisperReady": "Whisper Lokal siap. ffmpeg dan openai-whisper terinstal.",
    "localWhisperMissing": "Whisper Lokal tidak siap. Dependensi yang hilang harus diinstal.",
    "localWhisperMissingDesc": "ffmpeg: {{ffmpeg}} | openai-whisper: {{whisper}}. Instal dependensi yang hilang: ffmpeg (paket sistem) dan openai-whisper (uv pip install openai-whisper, atau instal QwenPaw dengan ekstra [whisper]).",
    "providerLabel": "Penyedia Whisper API",
    "providerDescription": "Pilih penyedia mana yang akan digunakan untuk transkripsi audio melalui Whisper API. Hanya penyedia dengan endpoint yang kompatibel dengan Whisper yang ditampilkan.",
    "providerPlaceholder": "Pilih penyedia...",
    "noProvidersWarning": "Tidak ada penyedia yang mendukung transkripsi. Konfigurasi penyedia OpenAI untuk mengaktifkan transkripsi suara.",
    "transcriptionInfoTitle": "Cara transkripsi bekerja",
    "transcriptionInfoDesc": "Transkripsi Whisper API menggunakan endpoint /v1/audio/transcriptions yang kompatibel dengan OpenAI. Ini memerlukan penyedia yang dikonfigurasi dengan endpoint yang kompatibel dengan Whisper — misalnya, penyedia OpenAI. Pilih penyedia tertentu di atas untuk mengaktifkan transkripsi.",
    "transcriptionInfoDescLocal": "Transkripsi Whisper Lokal menjalankan pustaka openai-whisper langsung di mesin Anda. Ini memerlukan ffmpeg (untuk decoding audio) dan paket Python openai-whisper yang terinstal. Tidak diperlukan API key atau koneksi jaringan. Instal dengan: uv pip install 'qwenpaw[whisper]'."
  },
  "tool": {
    "readFile": "Baca {{file}}",
    "readFileDefault": "Baca file",
    "writeFile": "Buat {{file}}",
    "writeFileDefault": "Buat file",
    "editFile": "Edit {{file}}",
    "editFileDefault": "Edit file",
    "appendFile": "Tambahkan ke {{file}}",
    "appendFileDefault": "Tambahkan ke file",
    "grepSearch": "Grep {{pattern}}",
    "grepSearchDefault": "Pencarian grep",
    "globSearch": "Glob {{pattern}}",
    "globSearchDefault": "Pencarian glob",
    "viewImage": "Lihat gambar {{file}}",
    "viewImageDefault": "Lihat gambar",
    "viewVideo": "Lihat video {{file}}",
    "viewVideoDefault": "Lihat video",
    "desktopScreenshot": "Tangkapan layar desktop",
    "sendFile": "Kirim {{file}}",
    "sendFileDefault": "Kirim file",
    "browserUse": "Jelajahi {{detail}}",
    "browserNavigate": "Buka {{url}}",
    "browserNavigateDefault": "Buka halaman",
    "browserClick": "Klik",
    "browserType": "Ketik",
    "browserSnapshot": "Ambil snapshot",
    "browserScroll": "Gulir",
    "getCurrentTime": "Dapatkan waktu saat ini",
    "setTimezone": "Atur {{timezone}}",
    "getTokenUsage": "Kueri penggunaan token",
    "memorySearch": "Cari memori {{query}}",
    "memorySearchDefault": "Cari memori",
    "listAgents": "Daftar agen",
    "chatWithAgent": "Chat dengan {{agent}}",
    "chatWithAgentDefault": "Chat dengan agen",
    "submitToAgent": "Kirim ke {{agent}}{{task}}",
    "submitToAgentDefault": "Kirim tugas",
    "checkAgentTask": "Periksa {{agent}} #{{taskId}}",
    "checkAgentTaskAgent": "Periksa {{agent}}",
    "checkAgentTaskDefault": "Periksa tugas",
    "delegateExternalAgent": "Delegasikan {{runner}}",
    "delegateExternalAgentDefault": "Delegasikan ke agen eksternal",
    "materializeSkill": "Buat {{skill}}",
    "materializeSkillDefault": "Buat skill",
    "shell": "Jalankan {{command}}",
    "shellDefault": "Jalankan perintah",
    "formatTable": {
      "file": "File",
      "lineNumber": "Baris",
      "score": "Skor",
      "summary": "Ringkasan",
      "name": "Nama",
      "id": "ID",
      "description": "Deskripsi",
      "status": "Status"
    },
    "loading": "Memuat...",
    "browserAction": {
      "startHeaded": "Mulai browser (dengan tampilan)",
      "start": "Mulai browser",
      "stop": "Hentikan browser",
      "open": "Buka {{url}}",
      "openDefault": "Buka halaman",
      "navigate": "Navigasi ke {{url}}",
      "navigateDefault": "Navigasi",
      "navigateBack": "Kembali",
      "click": "Klik {{selector}}",
      "clickDefault": "Klik elemen",
      "type": "Ketik {{text}}",
      "typeDefault": "Ketik teks",
      "snapshot": "Ambil snapshot",
      "screenshot": "Tangkapan layar {{path}}",
      "screenshotDefault": "Tangkapan layar",
      "eval": "Evaluasi {{code}}",
      "evalDefault": "Evaluasi kode",
      "runCode": "Jalankan {{code}}",
      "runCodeDefault": "Jalankan kode",
      "closePage": "Tutup halaman",
      "tabs": "Tab {{action}}",
      "tabsDefault": "Kelola tab",
      "fillForm": "Isi formulir",
      "fileUpload": "Unggah {{filename}}",
      "fileUploadDefault": "Unggah file",
      "fileDownload": "Unduh {{target}}",
      "fileDownloadDefault": "Unduh file",
      "pressKey": "Tekan {{key}}",
      "pressKeyDefault": "Tekan tombol",
      "hover": "Arahkan ke {{selector}}",
      "hoverDefault": "Arahkan ke elemen",
      "drag": "Seret",
      "selectOption": "Pilih opsi",
      "waitFor": "Tunggu {{target}}",
      "waitForDefault": "Tunggu elemen",
      "resize": "Ubah ukuran {{w}}x{{h}}",
      "resizeDefault": "Ubah ukuran jendela",
      "pdf": "Ekspor PDF {{path}}",
      "pdfDefault": "Ekspor PDF",
      "install": "Instal",
      "batch": "Batch"
    },
    "lineBadge": {
      "lines": "{{count}} baris",
      "addLines": "+{{count}} baris",
      "delLines": "-{{count}} baris",
      "matches": "{{count}} cocok",
      "files": "{{count}} file"
    },
    "inlineResult": {
      "taskId": "Tugas #{{id}}",
      "submitted": "Dikirim"
    },
    "execute": "Jalankan {{tool}}",
    "executeDefault": "Jalankan alat"
  },
  "models": {
    "llmConfiguration": "Konfigurasi LLM",
    "providersTitle": "Penyedia",
    "providersDescription": "Konfigurasi API key dan endpoint untuk setiap penyedia.",
    "llmTitle": "Model",
    "defaultLlm": "LLM Default",
    "notConfiguredYet": "Belum dikonfigurasi",
    "llmDescription": "Atur model LLM default global dari penyedia yang diotorisasi. Anda dapat memilih model tertentu untuk setiap Agen di halaman Chat.",
    "configureProvider": "Konfigurasi {{name}}",
    "baseURL": "URL Dasar",
    "apiKey": "API Key",
    "advancedConfig": "Konfigurasi Lanjutan",
    "authMode": "Mode Autentikasi",
    "authModeApiKey": "API Key (x-api-key)",
    "authModeAuthToken": "Auth Token (Authorization: Bearer)",
    "customHeaders": "Header Kustom",
    "customHeadersHint": "Ditambahkan ke setiap permintaan API, mis. x-app: cli",
    "customHeaderKey": "Nama Header",
    "customHeaderValue": "Nilai Header",
    "addHeader": "+ Tambah Header",
    "generateConfig": "Parameter Generasi",
    "generateConfigHint": "Parameter generasi dalam bentuk objek JSON. Akan diperluas dan diteruskan ke permintaan generasi.",
    "generateConfigInvalidJson": "Harap masukkan JSON yang valid",
    "generateConfigMustBeObject": "Parameter generasi harus berupa objek JSON",
    "modelAdvancedConfig": "Konfigurasi Lanjutan Model",
    "modelGenerateConfig": "Parameter Generasi Model",
    "modelGenerateConfigHint": "Parameter generasi dalam bentuk objek JSON untuk model ini. Menimpa konfigurasi tingkat penyedia.",
    "modelConfigSaved": "Konfigurasi tersimpan untuk model {{name}}",
    "modelConfigSaveFailed": "Gagal menyimpan konfigurasi model",
    "modelConfigLabel": "Konfigurasi Model",
    "maxTokensLabel": "Token Maksimum",
    "maxTokensHint": "Token output maksimum per respons",
    "maxInputLengthLabel": "Panjang Konteks Maksimum",
    "maxInputLengthHint": "Ukuran jendela konteks model, mengontrol ambang kompaksi konteks (≥1000)",
    "relayReasoningLabel": "Teruskan Penalaran",
    "relayReasoningHint": "Teruskan konten penalaran ke giliran percakapan berikutnya",
    "thinkingModeLabel": "Aktifkan Pemikiran",
    "thinkingModeHint": "Nyalakan untuk mengaktifkan pemikiran/penalaran. Matikan untuk menonaktifkan pemikiran.",
    "thinkingBudgetLabel": "Anggaran Pemikiran",
    "thinkingBudgetHint": "Menggunakan anggaran pemikiran default model",
    "switchToManual": "Manual",
    "switchToAuto": "Otomatis",
    "reasoningEffortLabel": "Kedalaman Penalaran",
    "reasoningEffortHint": "Mengontrol kedalaman penalaran (keluarga OpenAI)",
    "protocol": "Protokol",
    "protocolHint": "Pilih protokol API penyedia untuk konfigurasi ini.",
    "selectProtocol": "Harap pilih protokol",
    "protocolOpenAI": "Kompatibel OpenAI (Chat Completions)",
    "protocolOpenAIResponse": "Kompatibel OpenAI (Response API)",
    "protocolAnthropic": "Anthropic (Messages API)",
    "currentKey": "Saat ini: {{key}}",
    "startsWith": "Dimulai dengan \"{{prefix}}\"",
    "optionalSelfHosted": "Opsional untuk layanan yang di-host sendiri",
    "leaveBlankKeep": "Biarkan kosong untuk tetap menggunakan kunci saat ini",
    "enterApiKey": "Masukkan API key ({{prefix}}...)",
    "enterApiKeyOptional": "Masukkan API key (opsional)",
    "openAIEndpoint": "Endpoint OpenAI, mis. https://api.openai.com/v1",
    "openAICompatibleEndpoint": "Endpoint kompatibel OpenAI, mis. https://api.example.com",
    "azureEndpointHint": "Endpoint Azure OpenAI, mis. https://<resource>.openai.azure.com/openai/v1",
    "anthropicEndpointHint": "Endpoint Anthropic, mis. https://api.anthropic.com",
    "ollamaEndpointHint": "Endpoint Ollama, mis. http://localhost:11434",
    "lmstudioEndpointHint": "Endpoint LM Studio, mis. http://localhost:1234/v1",
    "apiEndpointHint": "Endpoint API, mis. https://api.example.com",
    "pleaseEnterBaseURL": "Harap masukkan URL dasar API",
    "selectBaseURL": "Pilih URL dasar",
    "selectBaseURLHint": "Pilih endpoint regional untuk penyedia ini",
    "pleaseEnterValidURL": "Harap masukkan URL yang valid",
    "apiKeyShouldStart": "API Key harus dimulai dengan \"{{prefix}}\"",
    "configurationSaved": "Konfigurasi {{name}} tersimpan",
    "failedToSaveConfig": "Gagal menyimpan konfigurasi",
    "revokeAuthorization": "Cabut Otorisasi",
    "revokeConfirmContent": "Apakah Anda yakin ingin menghapus API key untuk {{name}}? Konfigurasi model LLM saat ini juga akan dihapus.",
    "revokeConfirmSimple": "Apakah Anda yakin ingin menghapus API key untuk {{name}}?",
    "authorizationRevoked": "Otorisasi {{name}} dicabut, model LLM dihapus",
    "authorizationRevokedSimple": "Otorisasi {{name}} dicabut",
    "failedToRevoke": "Gagal mencabut otorisasi",
    "active": "Aktif: {{provider}} / {{model}}",
    "provider": "Penyedia",
    "model": "Model",
    "selectProvider": "Pilih penyedia (harus diotorisasi)",
    "selectModel": "Pilih model",
    "llmModelUpdated": "Model LLM diperbarui",
    "failedToSave": "Gagal menyimpan",
    "freeModelWarningTitle": "Pemberitahuan Model Gratis",
    "freeModelWarningMessage": "Model gratis mungkin memiliki ketersediaan terbatas. Silakan merujuk ke ketentuan layanan penyedia:",
    "freeModelWarningDontShowAgain": "Jangan tampilkan lagi",
    "saved": "Tersimpan",
    "save": "Simpan",
    "cancel": "Batal",
    "loading": "Memuat...",
    "retry": "Coba Lagi",
    "notSet": "Belum diatur",
    "notRequired": "Tidak diperlukan",
    "available": "Tersedia",
    "unavailable": "Tidak Tersedia",
    "providerAvailable": "Siap (dengan model)",
    "providerNoModels": "Belum Siap (tidak ada model)",
    "providerNotConfigured": "Belum Siap (belum dikonfigurasi)",
    "settings": "Pengaturan",
    "actions": "Tindakan",
    "search": "Cari",
    "searchPlaceholder": "Cari penyedia...",
    "searchModelPlaceholder": "Cari model...",
    "custom": "Kustom",
    "builtin": "Bawaan",
    "freeTierGroup": "Tingkat Gratis",
    "paidGroup": "Berbayar",
    "localCustomGroup": "Lokal & Kustom",
    "cloudGroup": "Penyedia Cloud",
    "configuredGroup": "Dikonfigurasi",
    "configuredOnline": "penyedia online",
    "noConfigured": "Belum ada penyedia yang dikonfigurasi. Pilih salah satu di bawah untuk memulai.",
    "goConfigureBtn": "Konfigurasi Penyedia",
    "availableGroup": "Penyedia Tersedia",
    "clickToConfigure": "Klik untuk mengkonfigurasi",
    "configureAction": "Konfigurasi →",
    "endpointCount": "{{count}} endpoint",
    "connect": "OAuth",
    "saveApiKey": "Simpan",
    "addProvider": "Tambah Penyedia",
    "addProviderTitle": "Tambah Penyedia Kustom",
    "providerIdLabel": "ID Penyedia",
    "providerIdPlaceholder": "mis. openai, google, anthropic",
    "providerIdHint": "Huruf kecil, digit, tanda hubung, garis bawah. Tidak dapat diubah nanti.",
    "providerNameLabel": "Nama Tampilan",
    "providerNamePlaceholder": "mis. OpenAI, Google Gemini",
    "defaultBaseUrlLabel": "URL Dasar Default",
    "defaultBaseUrlPlaceholder": "mis. https://api.example.com",
    "apiKeyPrefixLabel": "Awalan API Key (opsional)",
    "apiKeyPrefixPlaceholder": "mis. sk-",
    "providerCreated": "Penyedia \"{{name}}\" dibuat",
    "providerCreateFailed": "Gagal membuat penyedia",
    "deleteProvider": "Hapus Penyedia",
    "deleteProviderConfirm": "Hapus penyedia kustom \"{{name}}\" dan semua modelnya? Ini tidak dapat dibatalkan.",
    "providerDeleted": "Penyedia \"{{name}}\" dihapus",
    "providerDeleteFailed": "Gagal menghapus penyedia",
    "disableProvider": "Nonaktifkan Penyedia",
    "disableProviderConfirm": "Hapus API key untuk \"{{name}}\"? Penyedia akan menjadi tidak dikonfigurasi.",
    "disableBtn": "Nonaktifkan",
    "changeApiKey": "Ubah",
    "selectVariant": "Pilih Varian {{name}}",
    "providerDisabled": "Penyedia \"{{name}}\" dinonaktifkan",
    "manageModels": "Model",
    "models": "Model",
    "manageModelsTitle": "{{provider}} — Manajemen Model",
    "userAdded": "Ditambahkan pengguna",
    "addModel": "Tambah Model",
    "addModels": "Tambah Model",
    "autoDiscoverModels": "Temukan Model Otomatis",
    "addModelTitle": "Tambah Model ke {{provider}}",
    "modelIdLabel": "ID Model",
    "modelIdPlaceholder": "mis. gpt-4o, gemini-2.0-flash",
    "modelDiscoveryUnavailableHint": "Tidak ada model yang tersedia. Penyedia ini mungkin tidak mendukung penemuan daftar model, harap masukkan ID model secara manual.",
    "modelNameLabel": "Nama Model",
    "modelNameRequired": "Harap masukkan nama model",
    "modelNamePlaceholder": "mis. GPT-4o, Gemini 2.0 Flash",
    "modelAdded": "Model \"{{name}}\" ditambahkan",
    "modelAddFailed": "Gagal menambahkan model",
    "modelAlreadyExists": "ID model \"{{id}}\" sudah ada",
    "autoDiscoverModelsSuccess": "Penemuan otomatis selesai. Menambahkan {{count}} model",
    "autoDiscoverModelsNoNew": "Penemuan otomatis selesai. Tidak ada model baru yang ditambahkan",
    "autoDiscoverModelsFailed": "Gagal menemukan model secara otomatis",
    "removeModel": "Hapus",
    "removeModelConfirm": "Hapus model \"{{name}}\" dari {{provider}}?",
    "modelRemoved": "Model \"{{name}}\" dihapus",
    "modelRemoveFailed": "Gagal menghapus model",
    "loadMore": "Muat lebih banyak ({{count}})",
    "modelsCount": "{{count}} model",
    "noModels": "Tidak ada model",
    "addModelFirst": "Harap tambahkan model terlebih dahulu",
    "modelList": "Daftar Model",
    "clearAll": "Hapus Semua",
    "filteredModelsLoaded": "Model yang difilter dimuat: {{count}}",
    "filterFailed": "Gagal memfilter model",
    "clearAllModels": "Hapus Semua Model",
    "clearAllModelsConfirm": "Hapus semua {{count}} model tambahan? Ini tidak dapat dibatalkan.",
    "allModelsCleared": "{{count}} model dihapus",
    "filterModels": "Filter Model",
    "filterByProvider": "Penyedia:",
    "searchProviderPlaceholder": "Cari nama penyedia",
    "selectAllProviders": "Pilih Semua",
    "clearProviderSelection": "Batalkan Semua",
    "noMatchingProviders": "Tidak ada penyedia yang cocok",
    "filterByModality": "Modalitas Input:",
    "filterFreeOnly": "Model Gratis Saja:",
    "getModels": "Dapatkan Model",
    "discovered": "Model Tersedia:",
    "add": "Tambah",
    "local": "Lokal",
    "localType": "Tipe",
    "localEmbedded": "Tertanam (dalam proses)",
    "localDownloadFirst": "Layanan model belum dimulai",
    "localDownloadModel": "Unduh Model",
    "localModelsTitle": "{{provider}} — Model Lokal",
    "localNoModels": "Belum ada model yang diunduh",
    "localRepoId": "ID Repositori Model",
    "localRepoIdRequired": "Harap masukkan ID repositori model",
    "localRepoIdPlaceholder": "mis. Qwen/Qwen3-0.6B-GGUF",
    "localFilename": "Nama File (opsional)",
    "localFilenamePlaceholder": "mis. mistral-7b.Q4_K_M.gguf",
    "localFilenameHint": "Biarkan kosong untuk memilih kuantisasi terbaik secara otomatis",
    "localSource": "Sumber",
    "localDownloadSuccess": "Model berhasil diunduh",
    "localDownloadFailed": "Gagal mengunduh model",
    "localDeleteModel": "Hapus Model",
    "localDeleteConfirm": "Hapus model lokal \"{{name}}\"? File model akan dihapus dari disk.",
    "localModelDeleted": "Model \"{{name}}\" dihapus",
    "localDeleteFailed": "Gagal menghapus model",
    "localDownloadPending": "Mempersiapkan unduhan...",
    "localDownloading": "Mengunduh {{repo}}... Ini mungkin memakan beberapa menit.",
    "localDownloadNavigateHint": "Anda dapat menavigasi halaman lain — unduhan akan terus berjalan di latar belakang.",
    "localDownloadInProgress": "Unduhan sedang berlangsung",
    "localDownloaded": "Diunduh",
    "localNotDownloaded": "Belum diunduh",
    "localNoRecommendedModels": "Perangkat ini tidak cukup kuat untuk menjalankan model lokal",
    "localCancelDownloadTitle": "Batalkan unduhan",
    "localCancelDownloadAction": "Batalkan unduhan",
    "localCancelDownloadConfirm": "Batalkan unduhan \"{{repo}}\"?",
    "localDownloadCancelled": "Unduhan dibatalkan",
    "localCancelDownloadFailed": "Gagal membatalkan unduhan",
    "localLlamacppName": "Mesin inferensi",
    "localLlamacppInstallHint": "Instal runtime lokal sebelum mengunduh atau memulai model.",
    "localInstallLlamacpp": "Instal llama.cpp",
    "localLlamacppInstallStarted": "Unduhan llama.cpp dimulai",
    "localLlamacppInstallSuccess": "llama.cpp berhasil diinstal",
    "localLlamacppInstallFailed": "Gagal menginstal llama.cpp",
    "localRuntimeSectionTitle": "Mesin Inferensi",
    "localRuntimeSectionDescription": "Didukung oleh Llama.cpp",
    "localRuntimeComputeHint": "CPU digunakan secara default. Untuk akselerasi GPU, gunakan Ollama atau LM Studio.",
    "localRuntimeInstalled": "Terinstal",
    "localRuntimeUpdateAvailable": "Pembaruan tersedia",
    "localRuntimeUpdateAction": "Klik untuk mengunduh versi terbaru",
    "localRuntimeUpdateConfirmTitle": "Konfirmasi pembaruan llama.cpp",
    "localRuntimeUpdateConfirmContent": "Pembaruan akan menimpa versi llama.cpp yang terinstal. Konfirmasi untuk mulai mengunduh dan menginstal versi terbaru.",
    "localRuntimeUpdateConfirmContentWithServer": "Pembaruan akan menimpa versi llama.cpp yang terinstal dan menghentikan layanan model yang sedang berjalan ({{model}}). Konfirmasi untuk mulai mengunduh dan menginstal versi terbaru.",
    "localRuntimeUnsupported": "Tidak didukung",
    "localRuntimeMissing": "Tidak ada",
    "localServerRunningTitle": "Server lokal saat ini",
    "localServerOnline": "Berjalan",
    "localServerIdle": "Mati",
    "localServerUnavailable": "Masalah",
    "localNoActiveModel": "Tidak ada model aktif",
    "localNoDownloadedModelsHint": "Unduh model yang sesuai sebelum memulai layanan inferensi lokal.",
    "localDownloadModelFirst": "Unduh model terlebih dahulu",
    "localEngineInstallStateLabel": "Instal",
    "localEngineRunStateLabel": "Status",
    "localEngineCurrentModelLabel": "Model yang sedang dijalankan",
    "localEngineNextStepLabel": "Langkah selanjutnya",
    "localEngineHealthLabel": "Kesehatan mesin",
    "localEngineStatusHint": "Harap unduh dan mulai model yang sesuai dari daftar di bawah",
    "localStartServer": "Mulai",
    "localStopServer": "Hentikan",
    "localServerStartFailed": "Gagal memulai server lokal",
    "localServerStopFailed": "Gagal menghentikan server lokal",
    "localServerSwitchTitle": "Ganti model yang berjalan",
    "localServerSwitchConfirm": "Server saat ini menjalankan {{current}}. Ganti ke {{next}}?",
    "localSwitchModel": "Ganti",
    "localModelPathMissing": "Model yang diunduh ini tidak memiliki jalur lokal.",
    "localModelsSectionTitle": "Model Lokal",
    "localModelsSectionDescription": "Model yang diunduh dapat langsung dimulai. Hanya satu unduhan model dan satu instance server lokal yang dapat berjalan sekaligus.",
    "localModelsLockedHint": "Harap instal llama.cpp terlebih dahulu",
    "localAlternativeRuntimeHint": "Coba Ollama atau LM Studio",
    "localModelsCount": "Diunduh {{downloaded}} / {{total}}",
    "localCurrentDownloadTitle": "Unduhan saat ini",
    "localAdvancedConfigTitle": "Pengaturan Lokal Lanjutan",
    "localAdvancedConfigDescription": "Pengaturan ini berlaku untuk runtime inferensi lokal yang tertanam. Perubahan panjang konteks maksimum berlaku saat server lokal dimulai berikutnya.",
    "localAdvancedConfigSaved": "Pengaturan lokal lanjutan tersimpan",
    "localAdvancedConfigSaveFailed": "Gagal menyimpan pengaturan lokal lanjutan",
    "localMaxContextLengthLabel": "Panjang Konteks Maksimum",
    "localMaxContextLengthHint": "Jumlah token maksimum untuk jendela konteks model. Perubahan berlaku saat server lokal dimulai berikutnya.",
    "localMaxContextLengthRequired": "Harap masukkan panjang konteks maksimum",
    "localMaxContextLengthMin": "Panjang konteks maksimum minimal {{min}}",
    "localMaxContextLengthPlaceholder": "Masukkan panjang konteks maksimum",
    "localServerPortLabel": "Port Server",
    "localServerPortHint": "Biarkan kosong agar llama.cpp secara otomatis memilih port. Masukkan port untuk menggunakan port tetap. Perubahan berlaku saat server lokal dimulai berikutnya.",
    "localServerPortRange": "Port server harus antara {{min}} dan {{max}}",
    "localServerPortPlaceholder": "Biarkan kosong untuk memilih port secara otomatis",
    "localGenerateConfigHint": "Konfigurasi parameter generasi model lokal sebagai objek JSON.",
    "localCustomModelTitle": "Unduhan model kustom",
    "localCustomModelHint": "Masukkan ID repositori model. Hanya format GGUF.",
    "localSourceHuggingFace": "Hugging Face",
    "localSourceModelScope": "ModelScope",
    "ollamaModelNamePlaceholder": "mis. mistral:7b, qwen3:8b",
    "testConnection": "Uji Koneksi",
    "testConnectionSuccess": "Uji koneksi berhasil",
    "testConnectionFailed": "Uji koneksi gagal",
    "testConnectionFailedWithMessage": "Uji koneksi gagal: {{message}}",
    "testConnectionError": "Terjadi kesalahan saat menguji koneksi",
    "discoverModels": "Temukan Model",
    "discoverModelsFailed": "Gagal menemukan model",
    "ollamaFetchModelsFailed": "Gagal mengambil model Ollama. Harap periksa detail kesalahan.",
    "modelTestFailed": "Validasi model gagal, harap periksa apakah ID model benar",
    "modelTestFailedConfirm": "Uji koneksi model gagal: {{message}}. Apakah Anda tetap ingin menambahkan model ini?",
    "autoDiscoveredAndAdded": "Menemukan {{count}} model secara otomatis dan menambahkan {{added}} model baru",
    "autoDiscoveredNoNew": "Menemukan {{count}} model secara otomatis; daftar model sudah terkini",
    "autoDiscoverFailed": "Penemuan model otomatis gagal; Anda dapat menambahkan model secara manual",
    "tagImage": "Gambar",
    "tagVideo": "Video",
    "tagTextOnly": "Teks Saja",
    "tagMultimodal": "Multimodal",
    "tagVision": "Visi",
    "tagText": "Teks",
    "free": "Gratis",
    "probeMultimodal": "Uji Multimodal",
    "probeImage": "Gambar",
    "probeVideo": "Video",
    "probeSupported": "Didukung: {{types}}",
    "probeNotSupported": "Model ini tidak mendukung input multimodal",
    "probeFailed": "Probe gagal",
    "tagNotProbed": "Belum Diuji",
    "modalityVision": "Gambar",
    "modalityAudio": "Audio",
    "modalityVideo": "Video",
    "modalityFile": "File",
    "modalityText": "Teks saja",
    "perMillionIn": "/1 juta masuk",
    "perMillionOut": "/1 juta keluar"
  },
  "agentConfig": {
    "title": "Konfigurasi",
    "description": "Konfigurasi parameter runtime agen",
    "reactAgentTitle": "Agen ReAct",
    "llmRetryTitle": "Coba Ulang LLM Otomatis",
    "llmRetryEnabled": "Aktifkan Coba Ulang Otomatis",
    "llmRetryEnabledTooltip": "Secara otomatis mencoba ulang kegagalan API LLM sementara seperti batas kecepatan, timeout, atau kesalahan koneksi.",
    "llmMaxRetries": "Coba Ulang Maksimum",
    "llmMaxRetriesTooltip": "Jumlah maksimum percobaan ulang untuk permintaan LLM yang dapat dicoba ulang.",
    "llmMaxRetriesPlaceholder": "Masukkan coba ulang maksimum",
    "llmMaxRetriesRequired": "Coba ulang maksimum wajib diisi",
    "llmMaxRetriesMin": "Coba ulang maksimum minimal 1",
    "llmBackoffBase": "Penundaan Dasar Backoff (dtk)",
    "llmBackoffBaseTooltip": "Penundaan dasar sebelum percobaan ulang pertama. Percobaan ulang berikutnya menggunakan backoff eksponensial dari nilai ini.",
    "llmBackoffBasePlaceholder": "Masukkan penundaan dasar",
    "llmBackoffBaseRequired": "Penundaan dasar backoff wajib diisi",
    "llmBackoffBaseMin": "Penundaan dasar backoff minimal 0,1 detik",
    "llmBackoffCap": "Penundaan Maksimum Backoff (dtk)",
    "llmBackoffCapTooltip": "Batas maksimum untuk penundaan backoff percobaan ulang eksponensial.",
    "llmBackoffCapPlaceholder": "Masukkan penundaan maksimum",
    "llmBackoffCapRequired": "Penundaan maksimum backoff wajib diisi",
    "llmBackoffCapMin": "Penundaan maksimum backoff minimal 0,5 detik",
    "llmBackoffCapGteBase": "Penundaan maksimum backoff harus lebih besar dari atau sama dengan penundaan dasar",
    "llmRateLimiterTitle": "Pembatas Kecepatan LLM",
    "llmMaxConcurrent": "Panggilan Bersamaan Maksimum",
    "llmMaxConcurrentTooltip": "Jumlah maksimum panggilan LLM yang diizinkan berjalan bersamaan. Dibagi di semua agen.",
    "llmMaxConcurrentPlaceholder": "Masukkan panggilan bersamaan maksimum",
    "llmMaxConcurrentRequired": "Panggilan bersamaan maksimum wajib diisi",
    "llmMaxConcurrentRange": "Panggilan bersamaan maksimum minimal 1",
    "llmMaxQpm": "QPM Maksimum (Kueri Per Menit)",
    "llmMaxQpmTooltip": "Permintaan maksimum dalam jendela geser 60 detik. 0 = dinonaktifkan.",
    "llmMaxQpmPlaceholder": "Masukkan QPM maksimum (0 = tidak terbatas)",
    "llmMaxQpmRequired": "QPM maksimum wajib diisi",
    "llmMaxQpmRange": "QPM maksimum minimal 0",
    "llmRateLimitPause": "Jeda Batas Kecepatan (dtk)",
    "llmRateLimitPauseTooltip": "Durasi jeda default (detik) yang diterapkan secara global saat respons batas kecepatan 429 diterima.",
    "llmRateLimitPausePlaceholder": "Masukkan durasi jeda",
    "llmRateLimitPauseRequired": "Jeda batas kecepatan wajib diisi",
    "llmRateLimitPauseMin": "Jeda batas kecepatan minimal 1 detik",
    "llmRateLimitJitter": "Jitter Batas Kecepatan (dtk)",
    "llmRateLimitJitterTooltip": "Rentang jitter acak (detik) yang ditambahkan pada jeda agar pembangun bersamaan tidak serentak.",
    "llmRateLimitJitterPlaceholder": "Masukkan rentang jitter",
    "llmRateLimitJitterRequired": "Jitter batas kecepatan wajib diisi",
    "llmRateLimitJitterMin": "Jitter batas kecepatan minimal 0 detik",
    "llmAcquireTimeout": "Timeout Perolehan Slot (dtk)",
    "llmAcquireTimeoutTooltip": "Waktu maksimum (detik) pemanggil akan menunggu untuk mendapatkan slot pembatas kecepatan sebelum menyerah.",
    "llmAcquireTimeoutPlaceholder": "Masukkan timeout perolehan",
    "llmAcquireTimeoutRequired": "Timeout perolehan slot wajib diisi",
    "llmAcquireTimeoutMin": "Timeout perolehan slot minimal 10 detik",
    "llmAcquireTimeoutGtPauseJitter": "Timeout perolehan slot harus lebih besar dari jeda batas kecepatan + jitter",
    "contextManagementTitle": "Manajemen Konteks",
    "memoryManagerBackend": "Backend Manajemen Memori Jangka Panjang",
    "memoryManagerBackendTooltip": "Backend untuk manajer memori. Pilih remelight (file lokal) atau adbpg (database cloud).",
    "memoryManagerBackendRestartWarning": "Mengalihkan backend manajemen memori jangka panjang tidak mendukung hot reload. Simpan dan restart QwenPaw agar perubahan berlaku.",
    "maxIters": "Iterasi Maksimum",
    "maxItersTooltip": "Jumlah maksimum iterasi penalaran-tindakan untuk agen ReAct",
    "maxItersPlaceholder": "Masukkan iterasi maksimum",
    "maxItersRequired": "Iterasi maksimum wajib diisi",
    "maxItersMin": "Iterasi maksimum minimal 1",
    "agentLoopTitle": "Pengaturan Loop Agen",
    "loopMode": {
      "builtIn": "Bawaan",
      "builtInNote": "Pipeline terkunci · Nilai dapat diedit",
      "templateSectionTitle": "Templat Loop",
      "templateSectionDescription": "Pilih templat bawaan atau tambahkan milik Anda.",
      "defaultTab": "Default",
      "goalTab": "Tujuan",
      "missionTab": "Misi",
      "defaultDescription": "Loop ReAct terjaga standar di luar mode eksplisit.",
      "goalDescription": "Loop persisten berbatas untuk tujuan yang dapat diverifikasi.",
      "missionDescription": "Pipeline persisten untuk misi panjang dan bertahap.",
      "gatePipeline": "Pipeline Gate",
      "repetitionTitle": "Perlindungan pengulangan",
      "repetitionDescription": "Mendeteksi panggilan alat berulang dan melakukan intervensi.",
      "iterationTitle": "Batas iterasi",
      "iterationDescription": "Membatasi jumlah iterasi ReAct.",
      "retryTitle": "Pemeriksaan penyelesaian kualitatif",
      "retryDescription": "Hanya dipicu saat agen memberi respons teks tanpa panggilan alat.",
      "goalTurnTitle": "Batas giliran tujuan",
      "goalTurnDescription": "Membatasi giliran dalam satu tujuan aktif.",
      "maxGoalTurns": "Maksimum giliran tujuan",
      "goalBudgetTitle": "Anggaran token tujuan",
      "goalBudgetDescription": "Berhenti saat tujuan mencapai anggarannya.",
      "maxGoalTokens": "Maksimum token tujuan",
      "goalCompletionTitle": "Pemeriksaan penyelesaian tujuan",
      "goalCompletionDescription": "Membaca status tujuan eksplisit sebelum berhenti.",
      "goalCompletionReadOnly": "Penyelesaian dikendalikan protokol status tujuan bawaan.",
      "missionProgressTitle": "Pemeriksaan progres misi",
      "missionProgressDescription": "Berlanjut sampai semua cerita lulus atau batas tercapai.",
      "missionProgressReadOnly": "Penyelesaian dikendalikan status Mission Story bawaan.",
      "missionIterationTitle": "Batas iterasi Mission",
      "missionIterationDescription": "Tetapkan batas eksekusi default untuk Mission baru.",
      "workerAttemptsTitle": "Percobaan Worker",
      "workerAttemptsDescription": "Batasi percobaan ulang Worker setelah verifikasi Story gagal.",
      "missionVerificationTitle": "Kebijakan verifikasi Mission",
      "missionVerificationDescription": "Tentukan panduan verifikasi dan perintah pengujian default.",
      "defaultMaxMissionIterations": "Maksimum ronde eksekusi default",
      "defaultMaxMissionIterationsTooltip": "Digunakan saat /mission tidak menentukan --max-iterations.",
      "maxRetriesPerStory": "Maksimum percobaan ulang per Story",
      "maxRetriesPerStoryTooltip": "Percobaan ulang Worker setelah hasil FAIL atau PARTIAL dari Verifier.",
      "defaultVerificationInstructions": "Panduan verifikasi (opsional)",
      "defaultVerificationInstructionsHelp": "Panduan bahasa alami yang diterapkan ke setiap Mission Verifier.",
      "defaultVerificationInstructionsPlaceholder": "Contoh: periksa penanganan path Windows dan UI yang dirender.",
      "defaultVerifyCommand": "Perintah pengujian default (opsional)",
      "defaultVerifyCommandHelp": "Verifier mencoba menjalankannya dengan alat dan izin normal. /mission --verify menggantikannya.",
      "defaultVerifyCommandPlaceholder": "Contoh: pytest -q",
      "enableRepetitionProtection": "Aktifkan perlindungan pengulangan",
      "removeRule": "Hapus aturan",
      "custom": "Kustom",
      "customDescription": "Bangun pipeline tersimpan dari Gate bawaan QwenPaw.",
      "duplicate": "Duplikat",
      "delete": "Hapus",
      "displayName": "Nama tampilan",
      "duplicateModeName": "Mode Loop dengan nama ini sudah ada.",
      "slashCommand": "Perintah slash",
      "description": "Deskripsi",
      "availableToAgent": "Tersedia untuk agen ini",
      "runsTopToBottom": "Berjalan dari atas ke bawah",
      "addGate": "Tambah Gate",
      "emptyPipeline": "Tambahkan setidaknya satu Gate agar mode ini tersedia.",
      "iterationGateTitle": "Batas iterasi",
      "iterationGateDescription": "Berhenti setelah jumlah iterasi Loop tertentu.",
      "doomGateTitle": "Perlindungan pengulangan",
      "doomGateDescription": "Mendeteksi panggilan berulang dan mengubah strategi.",
      "tokenGateTitle": "Anggaran token",
      "tokenGateDescription": "Membatasi penggunaan token prompt dan penyelesaian.",
      "timeoutGateTitle": "Batas waktu Loop",
      "timeoutGateDescription": "Berhenti pada batas Loop berikutnya setelah waktu habis tanpa memutus pekerjaan yang berjalan.",
      "toolBudgetGateTitle": "Anggaran panggilan alat",
      "toolBudgetGateDescription": "Membatasi semua panggilan dan alat terpilih.",
      "retryGateTitle": "Coba ulang penghentian awal",
      "retryGateDescription": "Meminta agen memverifikasi sebelum berakhir.",
      "rubricGateTitle": "Rubrik penyelesaian",
      "rubricGateDescription": "Menilai kriteria eksplisit dan merevisi bila perlu.",
      "qualitativeRubricTitle": "Pemeriksaan penyelesaian kualitatif",
      "qualitativeRubricDescription": "Memeriksa respons teks tanpa panggilan alat dengan kriteria bahasa alami.",
      "qualitativeRubric": "Kriteria penyelesaian bahasa alami",
      "qualitativeRubricHelp": "Hanya dipicu untuk respons teks tanpa panggilan alat; agen melanjutkan jika masih ada pekerjaan.",
      "completionRubricTitle": "Pemeriksaan sinyal penyelesaian",
      "completionRubricDescription": "Memeriksa sinyal penyelesaian pada respons teks tanpa panggilan alat.",
      "completionRubricHelp": "Dipicu setelah respons teks tanpa panggilan alat. Agen mengeluarkan sinyal penyelesaian saat selesai; jika belum, agen terus bekerja hingga batas putaran evaluasi tercapai.",
      "completionPrompt": "Prompt pemeriksaan penyelesaian",
      "completionPromptHelp": "Jelaskan kapan hasil dianggap selesai. QwenPaw secara otomatis menyisipkan instruksi keluaran sinyal penyelesaian.",
      "completionSignal": "Sinyal penyelesaian",
      "completionSignalHelp": "QwenPaw menyisipkan sinyal ini dan instruksi untuk hanya mengeluarkan sinyal tersebut ke prompt pemeriksaan. Loop hanya selesai pada kecocokan penuh setelah spasi dibuang dan huruf besar-kecil diabaikan.",
      "removeCriterion": "Hapus kriteria {{number}}",
      "totalTokensHelp": "Batas gabungan token input dan output yang digunakan dalam giliran ini.",
      "promptTokensHelp": "Mencakup instruksi sistem, konteks percakapan, skema alat, dan hasil alat.",
      "completionTokensHelp": "Batas token yang dihasilkan model dalam giliran ini.",
      "maxIterations": "Maksimum iterasi",
      "historyWindow": "Jendela riwayat",
      "similarityThreshold": "Ambang kemiripan",
      "totalTokens": "Token total maksimum",
      "promptTokens": "Token input maksimum",
      "completionTokens": "Token output maksimum",
      "maxSeconds": "Maksimum detik",
      "maxSecondsHelp": "Waktu diperiksa setelah respons model atau panggilan alat saat ini selesai. Pekerjaan yang berjalan tidak diputus.",
      "allToolCalls": "Semua panggilan alat",
      "perToolLimits": "Batas per alat",
      "toolName": "Nama alat",
      "callLimitAria": "Batas panggilan {{name}}",
      "removeToolLimitAria": "Hapus batas {{name}}",
      "addToolLimit": "Tambah batas per alat",
      "maxRetries": "Maksimum percobaan ulang",
      "retryInstruction": "Instruksi coba ulang",
      "passThreshold": "Ambang kelulusan",
      "maxEvaluations": "Maksimum putaran evaluasi",
      "graderError": "Kesalahan penilai",
      "stopSafely": "Berhenti dengan aman",
      "verifyOnceMore": "Verifikasi sekali lagi",
      "completionCriteria": "Kriteria penyelesaian",
      "criterionPlaceholder": "Jelaskan penyelesaian yang dapat diamati",
      "required": "Wajib",
      "weight": "Bobot",
      "addCriterion": "Tambah kriteria",
      "moveGateAria": "Pindahkan {{title}}",
      "removeGate": "Hapus Gate",
      "newModeName": "Mode Loop Baru",
      "defaultCustomDescription": "Pipeline Gate kustom.",
      "copyName": "Salinan {{name}}",
      "createModeAria": "Buat mode Loop kustom",
      "createModeTitle": "Buat mode Loop kustom",
      "startingTemplate": "Templat awal",
      "startingPipeline": "Pipeline awal",
      "blankPipelineHint": "Mulai kosong dan tambahkan gate nanti",
      "safeTemplate": "Jalankan aman",
      "researchTemplate": "Riset beranggaran",
      "qualityTemplate": "Utamakan kualitas",
      "blankTemplate": "Pipeline kosong"
    },
    "doomLoopEnabled": "Perlindungan Perilaku Berulang",
    "doomLoopEnabledTooltip": "Intervensi otomatis saat agen terjebak mengulangi tindakan yang sama",
    "doomLoopAfter": "Setelah",
    "doomLoopRepetitions": "tindakan identik",
    "doomLoopStopAction": "Jeda & Minta Bantuan",
    "doomLoopWarnAction": "Kirim Pengingat",
    "doomLoopSimpleMode": "Sederhana",
    "doomLoopAdvancedMode": "Lanjutan",
    "doomLoopWindowSize": "Rentang Deteksi",
    "doomLoopWindowSizeTooltip": "Berapa banyak tindakan terbaru yang diperiksa untuk pengulangan",
    "doomLoopSimilarity": "Sensitivitas Kecocokan",
    "doomLoopSimilarityTooltip": "Seberapa mirip tindakan harus dianggap pengulangan (semakin rendah = semakin ketat)",
    "doomLoopStages": "Aturan Intervensi",
    "doomLoopAction": "Tindakan",
    "doomLoopPrompt": "Pesan",
    "doomLoopPromptPlaceholder": "Pesan pengingat atau alasan jeda...",
    "doomLoopAddStage": "Tambah Aturan",
    "iterationTitle": "Batas Iterasi",
    "iterationEnabled": "Aktifkan Batas Iterasi",
    "iterationEnabledTooltip": "Hentikan agen setelah jumlah putaran loop tetap",
    "iterationMaxIterations": "Iterasi Maksimum",
    "iterationMaxIterationsTooltip": "Jumlah putaran loop maksimum sebelum berhenti",
    "rubricTitle": "Pemeriksaan Penyelesaian Kualitatif",
    "rubricEnabled": "Aktifkan Pemeriksaan Penyelesaian Kualitatif",
    "rubricEnabledTooltip": "Hanya dipicu saat agen memberi respons teks tanpa panggilan alat.",
    "rubricPrompt": "Kriteria Penyelesaian Bahasa Alami",
    "rubricPromptTooltip": "Prompt yang disuntikkan untuk meminta agen mengevaluasi penyelesaian tugas",
    "rubricDesc": "Terapkan kriteria penyelesaian bahasa alami pada respons teks tanpa panggilan alat dan minta agen melanjutkan jika masih ada pekerjaan.",
    "rubricPromptPlaceholder": "Anda tidak memanggil alat apa pun. Jika tugas selesai, konfirmasi. Jika tidak, lanjutkan dengan panggilan alat.",
    "rubricMaxInterventions": "Maksimum Putaran Evaluasi",
    "rubricMaxInterventionsTooltip": "Jumlah maksimum pemeriksaan penyelesaian untuk respons teks tanpa panggilan alat dalam satu giliran.",
    "inLoopModes": "Aktifkan dalam mode /goal & /mission",
    "inLoopModesTooltip": "Juga berlaku saat mode /goal atau /mission aktif",
    "comingSoonEditable": "Konfigurasi kustom akan tersedia di rilis mendatang.",
    "simpleMode": "Sederhana",
    "advancedMode": "Lanjutan",
    "comingSoon": "Segera Hadir",
    "reactModeTab": "Template Loop - Default",
    "goalModeTab": "Template Loop - Goal",
    "missionModeTab": "Template Loop - Mission",
    "goalModeInfoTitle": "Mode Goal vs Default",
    "goalModeInfo": "Mode default berhenti setelah menghasilkan respons. Mode Goal membuat agen terus berulang menuju tujuan, menggunakan evaluasi Rubric untuk menentukan penyelesaian. Semua operasi berjalan dalam konteks agen saat ini.",
    "missionModeInfoTitle": "Mode Mission vs Goal",
    "missionModeInfo": "Mode Mission otomatis memecah tugas kompleks menjadi sub-tugas, dieksekusi oleh sub-agen Worker independen dan diverifikasi oleh sub-agen Verifier. Setiap sub-tugas berjalan dalam konteksnya sendiri, mencegah polusi sesi utama.",
    "goalIterationGate": "Gate Iterasi Tujuan",
    "goalIterationGateDesc": "Membatasi jumlah giliran agen dalam sesi tujuan, melacak iterasi dan penggunaan token.",
    "goalBudgetGate": "Gate Anggaran Token",
    "goalBudgetGateDesc": "Menetapkan batas pengeluaran token untuk sesi tujuan. Menghentikan agen saat anggaran terlampaui.",
    "goalRubricGate": "Rubrik Penyelesaian Tujuan",
    "goalRubricGateDesc": "Mengevaluasi apakah tujuan telah tercapai dengan memeriksa status sesi.",
    "goalDoomGate": "Perlindungan Pengulangan",
    "goalDoomGateDesc": "Mendeteksi pola berulang selama eksekusi tujuan dan memicu intervensi.",
    "missionProgressGate": "Gate Kemajuan Misi",
    "missionProgressGateDesc": "Melacak penyelesaian user story PRD. Melanjutkan hingga semua lolos atau iterasi maksimum tercapai.",
    "missionIterBypass": "Bypass Iterasi",
    "missionIterBypassDesc": "Sementara menghapus batas iterasi ReAct selama eksekusi misi untuk memungkinkan fase panjang.",
    "customLoopTitle": "Mode Loop Kustom",
    "customLoopDesc": "Buat mode loop Anda sendiri dengan kombinasi gate kustom. Segera hadir.",
    "autoContinueOnTextOnly": "Lanjutkan otomatis pada langkah teks saja",
    "autoContinueOnTextOnlyTooltip": "Jika model mengakhiri langkah penalaran hanya dengan teks (tanpa panggilan alat), suntikkan petunjuk dan jalankan satu penalaran ekstra.",
    "autoGenerateSessionTitle": "Buat judul sesi secara otomatis",
    "autoGenerateSessionTitleTooltip": "Setelah pesan pengguna pertama dalam chat baru, jalankan panggilan LLM singkat di latar belakang untuk mengganti placeholder yang terpotong dengan judul yang ringkas.",
    "shellCommandTimeout": "Timeout Perintah Shell (dtk)",
    "shellCommandTimeoutTooltip": "Timeout default dalam detik untuk alat execute_shell_command.",
    "shellCommandTimeoutPlaceholder": "Masukkan timeout",
    "shellCommandTimeoutRequired": "Timeout perintah shell wajib diisi",
    "shellCommandTimeoutMin": "Timeout perintah shell minimal 1 detik",
    "shellCommandExecutable": "Shell yang Dapat Dieksekusi",
    "shellCommandExecutableTooltip": "Jalur ke shell yang digunakan oleh execute_shell_command.",
    "shellCommandExecutablePlaceholder": "mis. /bin/bash atau powershell.exe (kosong = deteksi otomatis)",
    "maxInputLength": "Panjang Input Maksimum",
    "maxInputLengthTooltip": "Panjang input maksimum (token) untuk jendela konteks model",
    "maxInputLengthPlaceholder": "Masukkan panjang input maksimum",
    "maxInputLengthRequired": "Panjang input maksimum wajib diisi",
    "maxInputLengthMin": "Panjang input maksimum minimal 1000",
    "contextCompactRatio": "Rasio Ambang Kompaksi",
    "contextCompactRatioTooltip": "Kompaksi dipicu ketika panjang konteks mencapai fraksi ini dari panjang konteks maksimum",
    "contextCompactRatioRequired": "Rasio kompak konteks wajib diisi",
    "contextCompactThreshold": "Ambang Kompaksi (token)",
    "contextCompactThresholdTooltip": "Dihitung otomatis dari panjang konteks maksimum × rasio kompaksi.",
    "contextCompactThresholdPlaceholder": "Dihitung otomatis",
    "contextCompactReserveRatio": "Rasio Ambang Cadangan",
    "contextCompactReserveRatioTooltip": "Untuk menjaga kesinambungan konteks, fraksi konteks terbaru yang paling baru disimpan utuh setelah kompaksi",
    "contextCompactReserveRatioRequired": "Rasio cadangan konteks wajib diisi",
    "contextCompactReserveThreshold": "Ambang Cadangan (token)",
    "contextCompactReserveThresholdTooltip": "Dihitung otomatis dari panjang konteks maksimum × rasio cadangan.",
    "contextCompactReserveThresholdPlaceholder": "Dihitung otomatis",
    "toolResultCompactRecentN": "Rentang Hasil Alat Terbaru",
    "toolResultCompactRecentNTooltip": "Membagi daftar pesan menjadi dua segmen: N pesan terbaru dan pesan lama",
    "toolResultCompactRecentNRequired": "Rentang hasil alat terbaru wajib diisi",
    "toolResultCompactOldThreshold": "Ambang Pesan Lama (byte)",
    "toolResultCompactOldThresholdTooltip": "Hasil alat dalam pesan lama dikompaksi ketika melebihi batas byte ini.",
    "toolResultCompactOldThresholdPlaceholder": "Masukkan ambang karakter",
    "toolResultCompactOldThresholdRequired": "Karakter maksimum untuk hasil alat di luar recent_n wajib diisi",
    "toolResultCompactRecentThreshold": "Ambang Pesan Terbaru (byte)",
    "toolResultCompactRecentThresholdTooltip": "Hasil alat dalam N pesan terbaru dikompaksi ketika melebihi batas byte ini.",
    "toolResultCompactRecentThresholdPlaceholder": "Masukkan ambang karakter",
    "toolResultCompactRecentThresholdRequired": "Karakter maksimum untuk hasil alat dalam recent_n wajib diisi",
    "toolResultCompactRetentionDays": "Hari Retensi File Hasil Alat",
    "toolResultCompactRetentionDaysTooltip": "Jumlah hari untuk menyimpan file hasil alat yang dikompaksi",
    "toolResultCompactRetentionDaysRequired": "Hari retensi file hasil alat wajib diisi",
    "historyRetentionDays": "Hari Retensi Riwayat",
    "historyRetentionDaysTooltip": "Jumlah hari untuk menyimpan riwayat obrolan permanen. Baris yang lebih lama akan dihapus otomatis saat startup dan saat agent dimatikan.",
    "historyRetentionDaysRequired": "Hari retensi riwayat wajib diisi",
    "historyRetentionDaysForeverWarning": "Menyetel 0 menyimpan riwayat selamanya — penyimpanan akan tumbuh tanpa batas.",
    "historyRetentionDaysLargeWarning": "Periode retensi yang besar dapat menghabiskan banyak penyimpanan.",
    "exemptFileExtensions": "Ekstensi File yang Dikecualikan",
    "exemptFileExtensionsTooltip": "Hasil alat read_file untuk ekstensi file ini akan menggunakan ambang pesan terbaru",
    "exemptFileExtensionsPlaceholder": ".md, .txt, .json",
    "exemptToolNames": "Nama Alat yang Dikecualikan",
    "exemptToolNamesTooltip": "Hasil alat dari alat ini akan menggunakan ambang pesan terbaru",
    "exemptToolNamesPlaceholder": "chat_with_agent, list_agents",
    "language": "Bahasa Agen",
    "languageTooltip": "Bahasa untuk file persona agen (SOUL.md, AGENTS.md, dll.).",
    "languageConfirmTitle": "Ubah Bahasa Agen",
    "languageConfirmContent": "Mengubah bahasa akan menimpa file berikut dengan versi bahasa baru:\n\n  SOUL.md, AGENTS.md, PROFILE.md, MEMORY.md, BOOTSTRAP.md, HEARTBEAT.md\n\nJika Anda telah menyesuaikan file-file ini, harap buat cadangannya terlebih dahulu.",
    "languageConfirmOk": "Ubah Bahasa",
    "languageSaveSuccess": "Bahasa berhasil diperbarui",
    "languageSaveSuccessWithFiles": "Bahasa diperbarui, {{count}} file MD disalin",
    "languageSaveFailed": "Gagal memperbarui bahasa",
    "saveSuccess": "Konfigurasi berhasil disimpan",
    "saveFailed": "Gagal menyimpan konfigurasi",
    "timezone": "Zona Waktu Pengguna",
    "timezoneTooltip": "Digunakan untuk tugas terjadwal, tampilan waktu, dan konteks agen.",
    "timezoneRequired": "Harap pilih zona waktu",
    "selectTimezone": "Pilih zona waktu",
    "timezoneSaveSuccess": "Zona waktu berhasil diperbarui",
    "timezoneSaveFailed": "Gagal memperbarui zona waktu",
    "loadFailed": "Gagal memuat konfigurasi",
    "historyMaxLength": "Panjang Riwayat Maksimum",
    "historyMaxLengthTooltip": "Panjang output maksimum (karakter) untuk perintah /history",
    "historyMaxLengthRequired": "Panjang riwayat maksimum wajib diisi",
    "historyMaxLengthMin": "Panjang riwayat maksimum minimal 1000",
    "historyMaxLengthPlaceholder": "Masukkan panjang maksimum",
    "contextCompactTitle": "Konfigurasi Kompak Konteks",
    "contextCompactEnabled": "Aktifkan Kompaksi Konteks",
    "contextCompactEnabledTooltip": "Secara otomatis kompaksi konteks untuk mencegah overflow jendela konteks",
    "tokenCountModel": "Model Penghitung Token",
    "tokenCountModelTooltip": "Nama model yang digunakan untuk penghitungan token yang tepat; atur ke \"default\" untuk menggunakan estimasi bawaan",
    "tokenCountModelPlaceholder": "Nama model atau default",
    "tokenCountUseMirror": "Gunakan Mirror HuggingFace",
    "tokenCountUseMirrorTooltip": "Gunakan situs mirror HuggingFace saat mengunduh tokenizer",
    "tokenCountEstimateDivisor": "Pembagi Estimasi byte/Token",
    "tokenCountEstimateDivisorTooltip": "Pembagi untuk estimasi token berbasis byte (token ≈ panjang_byte / pembagi). Nilai yang direkomendasikan: 3,75 ~ 4.",
    "tokenCountEstimateDivisorRequired": "Pembagi estimasi wajib diisi",
    "tokenCountEstimateDivisorMin": "Pembagi estimasi harus antara 2 dan 5",
    "compactWithThinkingBlock": "Sertakan Blok Pemikiran",
    "compactWithThinkingBlockTooltip": "Apakah akan menyertakan blok pemikiran model saat mengompaksi konteks",
    "toolResultCompactTitle": "Konfigurasi Kompak Hasil Alat",
    "toolResultCompactEnabled": "Aktifkan Kompaksi Hasil Alat",
    "toolResultCompactEnabledTooltip": "Kompaksi hasil panggilan alat yang terlalu besar untuk menghemat ruang konteks",
    "memorySummaryTitle": "Konfigurasi Memori Jangka Panjang",
    "memorySummaryEnabled": "Aktifkan Ringkasan Memori",
    "memorySummaryEnabledTooltip": "Secara otomatis menghasilkan dan menyimpan ringkasan memori selama kompaksi konteks",
    "dreamCronEnabled": "Aktifkan Mimpi",
    "dreamCronEnabledTooltip": "Aktifkan tugas terjadwal untuk mengoptimalkan memori berbasis mimpi",
    "dreamCron": "Jadwal Mimpi",
    "dreamCronTooltip": "Ekspresi cron untuk mengoptimalkan memori jangka panjang melalui status mimpi; gunakan sakelar di atas untuk mengaktifkan atau menonaktifkan",
    "dreamCronPlaceholder": "0 23 * * *",
    "dreamCronRequired": "Masukkan ekspresi cron saat Mimpi diaktifkan",
    "dreamCronInvalid": "Masukkan ekspresi cron 5 kolom yang valid",
    "autoMemorySearch": "Pencarian Memori Otomatis (Beta)",
    "autoMemorySearchTooltip": "Pencarian memori otomatis untuk dijalankan pada setiap giliran percakapan.",
    "autoMaxResults": "Hasil Maksimum Pencarian Otomatis",
    "autoMaxResultsTooltip": "Jumlah hasil maksimum yang dikembalikan saat pencarian memori otomatis diaktifkan",
    "autoMaxResultsRequired": "Hasil maksimum wajib diisi",
    "autoMaxResultsMin": "Hasil maksimum minimal 1",
    "embeddingConfigTitle": "Konfigurasi Model Embedding",
    "embeddingBackend": "Tipe SDK Embedding",
    "embeddingBackendTooltip": "Tipe SDK yang digunakan untuk memanggil model embedding",
    "embeddingBackendPlaceholder": "Pilih tipe SDK",
    "embeddingApiKey": "API Key",
    "embeddingApiKeyTooltip": "API key untuk penyedia embedding; biarkan kosong jika tidak diperlukan autentikasi",
    "embeddingApiKeyPlaceholder": "Biarkan kosong jika tidak diperlukan",
    "embeddingBaseUrl": "URL Dasar",
    "embeddingBaseUrlTooltip": "URL dasar API embedding. Untuk backend kompatibel OpenAI, endpoint kustom ini opsional; API Key dan Nama Model wajib.",
    "embeddingBaseUrlPlaceholder": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "embeddingHost": "Host",
    "embeddingHostTooltip": "URL layanan Ollama. Biarkan kosong untuk menggunakan host default Ollama.",
    "embeddingHostPlaceholder": "http://localhost:11434",
    "embeddingModelName": "Nama Model",
    "embeddingModelNameTooltip": "Nama model embedding. Wajib untuk semua backend embedding.",
    "embeddingModelNamePlaceholder": "text-embedding-v4",
    "embeddingEnableCache": "Aktifkan Cache Embedding",
    "embeddingEnableCacheTooltip": "Cache hasil embedding untuk mengurangi komputasi berulang",
    "embeddingMaxCacheSize": "Ukuran Cache Maksimum",
    "embeddingMaxCacheSizeTooltip": "Jumlah entri maksimum dalam cache embedding",
    "embeddingMaxCacheSizeRequired": "Ukuran cache maksimum wajib diisi",
    "embeddingUseDimensions": "Gunakan Dimensi Kustom",
    "embeddingUseDimensionsTooltip": "Gunakan dimensi embedding kustom (hanya didukung oleh beberapa model)",
    "embeddingDimensions": "Dimensi Embedding",
    "embeddingDimensionsTooltip": "Jumlah dimensi embedding; berlaku ketika dimensi kustom diaktifkan",
    "embeddingDimensionsRequired": "Dimensi embedding wajib diisi",
    "embeddingDimensionsMin": "Dimensi minimal 1",
    "embeddingMaxInputLength": "Panjang Input Maksimum",
    "embeddingMaxInputLengthTooltip": "Panjang input maksimum (token) untuk satu permintaan embedding",
    "embeddingMaxInputLengthRequired": "Panjang input maksimum wajib diisi",
    "embeddingMaxBatchSize": "Ukuran Batch Maksimum",
    "embeddingMaxBatchSizeTooltip": "Jumlah item maksimum dalam satu permintaan embedding batch",
    "embeddingMaxBatchSizeRequired": "Ukuran batch maksimum wajib diisi",
    "embeddingRestartWarning": "Konfigurasi model embedding tidak mendukung hot reload. Simpan dan restart layanan agar perubahan berlaku.",
    "toolExecutionLevelTitle": "Keamanan Eksekusi Alat",
    "toolExecutionLevel": {
      "title": "Keamanan Eksekusi Alat",
      "alertMessage": "Konfigurasi kebijakan persetujuan panggilan alat untuk mengontrol tingkat keamanan saat agen mengeksekusi alat",
      "strict": "Mode Ketat",
      "strictDesc": "Semua panggilan alat memerlukan persetujuan, tingkat keamanan tertinggi",
      "smart": "Mode Cerdas",
      "smartDesc": "Alat berisiko rendah disetujui otomatis, alat risiko sedang ke atas memerlukan persetujuan",
      "auto": "Mode Otomatis",
      "autoDesc": "Hanya alat yang secara eksplisit ditandai untuk persetujuan yang memerlukan persetujuan (default)",
      "off": "Mode Mati",
      "offDesc": "Nonaktifkan semua persetujuan alat, semua alat dieksekusi secara otomatis"
    },
    "saveLevelSuccess": "Tingkat keamanan eksekusi alat tersimpan",
    "saveLevelFailed": "Gagal menyimpan tingkat keamanan eksekusi alat",
    "maxContextLength": "Panjang Konteks Maksimum",
    "maxContextLengthTooltip": "Jumlah token maksimum untuk jendela konteks model",
    "maxContextLengthRequired": "Panjang konteks maksimum wajib diisi",
    "maxContextLengthMin": "Panjang konteks maksimum minimal 1000",
    "maxContextLengthPlaceholder": "Masukkan panjang konteks maksimum",
    "embeddingActivationNote": "Embedding diaktifkan ketika field wajib untuk backend yang dipilih sudah diisi.",
    "embeddingEnableHint": "Embedding diaktifkan ketika field wajib backend terisi: Nama Model dan API Key untuk backend kompatibel OpenAI atau Gemini; Nama Model untuk Ollama.",
    "rebuildMemoryIndex": "Bangun Ulang Indeks Memori",
    "rebuildMemoryIndexWarning": "Operasi ini menghapus dan membangun ulang indeks pencarian memori serta dapat menggunakan banyak CPU dan memori. Gunakan hanya untuk memperbaiki indeks yang rusak atau hasil pencarian yang tidak normal.",
    "rebuildMemoryIndexConfirmTitle": "Bangun ulang indeks memori?",
    "rebuildMemoryIndexConfirm": "Penggunaan CPU dan memori dapat meningkat secara signifikan selama proses ini. Tindakan ini tidak disarankan kecuali indeks rusak atau perlu diperbaiki.",
    "rebuildMemoryIndexSuccess": "Indeks memori berhasil dibangun ulang",
    "rebuildMemoryIndexFailed": "Gagal membangun ulang indeks memori: {{error}}",
    "toolResultCompactRecentGtOld": "Ambang pesan terbaru harus lebih besar dari atau sama dengan ambang pesan lama",
    "lightContextTitle": "Manajemen Konteks",
    "remeLightMemoryTitle": "Memori Jangka Panjang",
    "dialogPath": "Jalur Penyimpanan Dialog",
    "dialogPathTooltip": "Jalur relatif untuk penyimpanan persistensi dialog (relatif terhadap working_dir)",
    "dialogPathPlaceholder": "dialog",
    "contextCompactCollapseLabel": "Kompaksi Konteks",
    "toolResultPruningCollapseLabel": "Pemangkasan Hasil Alat",
    "autoMemorySearchCollapseLabel": "Pencarian Memori Otomatis",
    "embeddingConfigCollapseLabel": "Konfigurasi Model Embedding",
    "summarizeWhenCompact": "Memori saat Kompaksi",
    "summarizeWhenCompactTooltip": "Secara otomatis menghasilkan dan menyimpan memori selama kompaksi konteks",
    "inboxPushEnabled": "Notifikasi Kotak Masuk Hasil Memori",
    "inboxPushEnabledTooltip": "Kirim hasil memori otomatis, mimpi otomatis, dan sumber daya otomatis ke kotak masuk. Menonaktifkannya tidak menghentikan tugas memori.",
    "autoMemoryInterval": "Interval Memori Otomatis",
    "autoMemoryIntervalTooltip": "Picu memori otomatis setiap N kueri pengguna. 0 menonaktifkan memori otomatis berkala. 1 berarti memori otomatis setelah setiap kueri. Disarankan: 2-5; pengaturan 1 perlu memperhatikan konsumsi token yang tinggi.",
    "autoMemoryIntervalPlaceholder": "Masukkan 0 untuk menonaktifkan memori otomatis berkala",
    "autoMemoryIntervalRequired": "Interval memori otomatis wajib diisi",
    "autoMemoryIntervalMin": "Interval memori otomatis harus minimal 0",
    "recursiveFileWatcher": "Pemantau File Rekursif",
    "recursiveFileWatcherTooltip": "Pantau direktori memori secara rekursif untuk menyertakan file di subdirektori.",
    "contextManagerBackend": "Backend Manajer Konteks",
    "contextManagerBackendTooltip": "Jenis backend untuk manajer konteks. Saat ini hanya Light yang didukung.",
    "contextStrategy": "Strategi Konteks",
    "contextStrategyTooltip": "Cara agen mengelola konteks panjang. Scroll (disarankan) menyimpan giliran yang dievakuasi ke penyimpanan riwayat permanen dan memanggilnya kembali sesuai kebutuhan; Native menggunakan kompresi di tempat. Mulai ulang QwenPaw agar perubahan diterapkan.",
    "contextStrategyScroll": "Scroll",
    "contextStrategyNative": "Native",
    "backendRestartWarning": "Mengalihkan backend tidak mendukung hot reload. Simpan dan restart QwenPaw agar perubahan berlaku.",
    "adbpgMemoryTitle": "Memori Jangka Panjang ADBPG",
    "adbpgConfig": {
      "title": "Konfigurasi Memori ADBPG",
      "apiMode": "Mode API",
      "host": "Host",
      "port": "Port",
      "user": "Nama Pengguna",
      "password": "Kata Sandi",
      "dbname": "Database",
      "llmModel": "Model LLM",
      "llmApiKey": "API Key LLM",
      "llmBaseUrl": "URL Dasar LLM",
      "embeddingModel": "Model Embedding",
      "embeddingApiKey": "API Key Embedding",
      "embeddingBaseUrl": "URL Dasar Embedding",
      "embeddingDims": "Dimensi Embedding",
      "restBaseUrl": "URL Dasar REST",
      "restApiKey": "API Key REST",
      "memoryIsolation": "Isolasi Memori (per-agen)",
      "searchTimeout": "Timeout Pencarian"
    }
  },
  "loop": {
    "gotoSettings": "Pengaturan Loop Agen",
    "selectorTitle": "Mode Loop",
    "selectorHint": "Pilih cara agen melanjutkan pekerjaan",
    "selectorAria": "Pilih mode Loop",
    "builtInModes": "Bawaan",
    "customModes": "Kustom dan plugin",
    "starting": "Memulai",
    "running": "Sedang berjalan",
    "awaiting_user": "Menunggu balasan Anda",
    "activePersistentDescription": "Mode ini tetap aktif dalam percakapan hingga selesai atau percakapan diatur ulang.",
    "activeCustomDescription": "Mode kustom ini tetap aktif hingga Anda menggunakan /mode off, /clear, atau /new.",
    "loadError": "Beberapa mode Loop tidak dapat dimuat.",
    "retry": "Coba lagi",
    "modes": {
      "default": {
        "name": "Default",
        "description": "Loop agen terkontrol standar."
      },
      "goal": {
        "name": "Tujuan",
        "description": "Bekerja secara berkelanjutan menuju tujuan yang konkret dan dapat diverifikasi."
      },
      "mission": {
        "name": "Misi",
        "description": "Jalankan tugas multi-langkah yang terstruktur dan berkelanjutan."
      }
    }
  }
}
