From d506b115b3e00a23503ae885da7ea4682f7f45d6 Mon Sep 17 00:00:00 2001 From: Jonathan Sitohang <36325644+hazekezia@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:11:20 +0700 Subject: [PATCH] Update id_ID.json --- i18n/locales/id_ID.json | 5517 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 5515 insertions(+), 2 deletions(-) diff --git a/i18n/locales/id_ID.json b/i18n/locales/id_ID.json index f0f62a7..d91d03c 100644 --- a/i18n/locales/id_ID.json +++ b/i18n/locales/id_ID.json @@ -1,2 +1,5515 @@ -{ - } +{ + "you": "Anda", + "select": "Pilih", + "conversations": "Percakapan", + "copyToClipboard": "Salin ke Papan Klip", + "toCopyMarkdownDirectly": "untuk menyalin markdown secara langsung", + "clickToCopyMarkdownDirectly": "Klik untuk menyalin markdown secara langsung", + "toShowMoreOptions": "untuk menampilkan opsi lainnya", + "longPressOrAltClickForMoreOptions": "Tekan lama atau Alt+klik untuk opsi lainnya", + "onMessage": "pada pesan", + "selectModel": "@:pilih model | @:pilih model", + "manageModels": "@:kelola Model", + "required": "Wajib", + "optional": "Opsional", + "systemPrompt": "Prompt Sistem", + "systemPromptAttachMode": "@:systemPrompt Lampirkan @:mode", + "userPrompt": "@:user Prompt", + "delete": "Hapus {item}", + "deleteAll": "Hapus Semua", + "create": "Buat", + "edit": "Edit", + "expandTextarea": "Perluas editor", + "collapseTextarea": "Ciutkan editor", + "enable": "Aktifkan", + "disable": "Nonaktifkan", + "save": "Simpan", + "saved": "Tersimpan", + "cancel": "Batal", + "close": "Tutup", + "bookmarked": "Ditandai", + "pinned": "Disematkan", + "update": "Perbarui", + "apply": "Terapkan", + "reset": "Atur Ulang", + "icon": "Ikon", + "clear": "Bersihkan", + "apiKey": "Kunci API", + "models": "Model", + "available": "{itemType} Tersedia", + "unavailable": "Tidak Tersedia", + "detected": "Terdeteksi", + "continue": "Lanjutkan", + "undetected": "Tidak Terdeteksi", + "welcome": "Selamat Datang!", + "plan": "Paket", + "allChangesSaved": "Semua perubahan tersimpan", + "toolbar": "Bilah Alat", + "bookmark": "Tandai | Tandai", + "waitingMessage": { + "waiting": "Menunggu :: Tunggu sebentar :: Sebentar lagi :: Satu detik :: Sabar adalah kebajikan :: Hampir sampai :: Memuat kehebatan", + "fetchingWebResults": "Mencari di Web :: Menjelajah internet :: Mencari secara online :: Menjelajahi web :: Berkonsultasi dengan oracle :: Meminta internet dengan sopan :: Menyelami dunia maya :: Menambang web", + "queryingKnowledgeStack": "Menanyakan @:knowledgeStack.title :: Mencari pengetahuan Anda :: Melihat dokumen Anda :: Menjelajahi basis pengetahuan Anda :: Mengobrak-abrik kebijaksanaan Anda :: Berkonsultasi dengan perpustakaan digital Anda :: Memindai arsip Anda :: Menggali catatan Anda", + "preparingTools": "Menyiapkan Alat :: Menyiapkan alat :: Mempersiapkan alat :: Memuat alat :: Menajamkan instrumen :: Merakit perangkat :: Memanaskan mesin :: Mempersiapkan ruang kerja", + "connectingToModel": "Model sedang melakukan keajaibannya ✨ :: AI sedang berpikir :: Memproses permintaan Anda :: Sedang mengerjakannya :: Menghitung angka :: Neuron menyala :: Merenung dalam-dalam :: Menghitung kecemerlangan :: Mengaktifkan mode otak :: Memanggil kecerdasan", + "processingContext": "Memproses Konteks :: Memahami konteks :: Menganalisis konteks :: Membaca situasi :: Menghubungkan titik-titik :: Memahami gambaran besar :: Menyusun potongan :: Memahami berbagai hal", + "streaming": "Mengalirkan :: Mengirim respons :: Mengirim jawaban :: Mentransmisikan :: Memancarkan hasil :: Mengalir ke Anda :: Dalam perjalanan ke Anda :: Datang dengan cepat", + "scrubbingPIIData": "Membersihkan Data PII :: Melindungi privasi Anda :: Menghapus info pribadi :: Menganonimkan data :: Menjaga rahasia tetap aman :: Mode privasi aktif :: Menyunting bagian sensitif :: Menjadi penyamaran", + "synthesizingQuery": "Mensintesis Kueri untuk Hasil Lebih Baik :: Mengoptimalkan pertanyaan Anda :: Meningkatkan kueri :: Menyempurnakan istilah pencarian :: Memoles permintaan Anda :: Menyempurnakan pertanyaan :: Membuat kueri yang sempurna :: Membuat kata-kata Anda bersinar", + "fetchingLiveContexts": "Mengambil Konteks Langsung :: Mengumpulkan data waktu nyata :: Menarik wawasan baru :: Menyinkronkan dengan sumber langsung :: Menyadap aliran data :: Mengumpulkan intel terkini :: Menyegarkan umpan konteks :: Memanen pembaruan langsung :: Terhubung ke denyut nadi" + }, + "progress": { + "initializing": "Menginisialisasi..." + }, + "add": "Tambah", + "actionBar": { + "expandGroup": "Perluas {group}", + "collapseGroup": "Ciutkan {group}", + "showExtraAddOns": "Tampilkan add-on tambahan", + "hideExtraAddOns": "Sembunyikan add-on tambahan", + "groups": { + "model": "Model & Prompt", + "data": "Data & Pengetahuan", + "tools": "Alat & Persona" + } + }, + "unauthorized": "Tidak Sah", + "valid": "Valid", + "invalid": "Tidak Valid", + "done": "Selesai!", + "confirm": "Konfirmasi", + "shareWithSyncedSplits": "Bagikan dengan split yang disinkronkan", + "source": "Sumber | Sumber", + "groundingSources": "Sumber Landasan", + "manage": "Kelola", + "chat": "Obrolan | Obrolan", + "advancedOptions": "Opsi Lanjutan", + "duplicate": "Duplikat", + "manageItem": "@:kelola {item}", + "success": "Berhasil!", + "notes": "Catatan", + "viewNotes": "Lihat Catatan", + "error": "Error!", + "warning": "Peringatan", + "authorized": "Telah Disahkan", + "notAuthorized": "Tidak disahkan", + "authorize": "Sahkan", + "reauthorize": "Sahkan Ulang", + "deauthorize": "Hapus pengesahan", + "failedToDelete": "Gagal menghapus", + "failedToSave": "Gagal menyimpan", + "failedToUpdate": "Gagal memperbarui", + "updatedSuccess": "diperbarui.", + "applyAndShareWithSyncedSplits": "Terapkan dan bagikan dengan split yang disinkronkan", + "clickToEdit": "Klik untuk mengedit", + "clickToAddSystemPrompt": "Klik untuk menambahkan @:systemPrompt", + "pause": "Jeda", + "resume": "Lanjutkan", + "retry": "Ulangi", + "stop": "Berhenti", + "run": "Jalankan", + "rerun": "Jalankan Ulang", + "remove": "Hapus", + "skip": "Lewati", + "unskip": "Batalkan Lewati", + "startImporting": "Mulai Mengimpor", + "new": "Baru", + "entry": "Entri | Entri", + "import": "Impor", + "connect": "Hubungkan", + "disconnect": "Putuskan", + "reconnect": "Hubungkan Ulang", + "selectTargetFolder": "Pilih Folder Tujuan", + "createNewFolderForImport": "Buat folder baru untuk item yang diimpor", + "newFolderName": "Nama folder baru", + "remote": "Jarak Jauh", + "local": "Lokal", + "strength": "Kekuatan | Kekuatan", + "provider": "Penyedia", + "capability": "{count} Kemampuan | {count} Kemampuan", + "preset": "Preset | Preset", + "saveAsPreset": "Simpan Sebagai @:preset", + "append": "Tambahkan", + "prepend": "Sisipkan di Awal", + "replace": "Ganti", + "description": "Deskripsi", + "mode": "Mode", + "addOns": "Add-on", + "user": "Pengguna", + "assistant": "Asisten", + "assistantMessage": "@:assistant @:message.title", + "connectionInfo": "Info Koneksi", + "export": "Ekspor", + "exportOptions": "Opsi Ekspor", + "chooseFile": "Pilih File", + "purpose": "Tujuan", + "download": "Unduh", + "downloads": "Unduhan", + "downloadAsJson": "Unduh sebagai JSON", + "install": "Instal", + "installed": "Terinstal", + "modified": "Dimodifikasi", + "created": "Dibuat", + "minimize": "Minimalkan", + "status": "Status", + "type": "Tipe", + "yes": "Ya", + "fileSize": "Ukuran File", + "size": "Ukuran", + "likes": "Suka | Suka", + "cancelled": "Dibatalkan", + "parameterSize": "Parameter @:size", + "quantization": "Kuantisasi", + "quantizationLevel": "@:quantization Level", + "contextSize": "Ukuran Konteks", + "defaultToModelMax": "Default ke maksimal model", + "llamaCppContextSizeDescription": "Token maksimum yang diproses model sekaligus. Atur ke 0 untuk menggunakan maksimum model. Nilai lebih besar meningkatkan penggunaan memori. Nilai ini disimpan secara global per model dengan LLaMa.cpp. Konteks dibagi secara merata di antara jumlah permintaan bersamaan yang diatur melalui pengaturan layanan LLaMa.cpp.", + "truncationStrategy": { + "truncateMiddle": "Potong Tengah", + "truncateOld": "Potong Lama", + "none": "Tidak Ada" + }, + "truncationStrategyDescription": "Cara menangani pesan ketika batas konteks hampir tercapai.", + "storage": "Penyimpanan", + "params": "Params", + "arch": "Arsitektur", + "filter": "Filter", + "treeControls": { + "title": "Urutkan & Tampilkan", + "searchPlaceholder": "Cari...", + "clear": "Atur Ulang", + "foldersFirst": "Folder dahulu", + "itemsFirst": "Item dahulu", + "sort": { + "none": "Tidak Ada", + "name": "Nama", + "title": "Judul", + "created": "Dibuat", + "updated": "Diperbarui", + "lastUsed": "Terakhir Digunakan", + "ascending": "Naik", + "descending": "Turun" + }, + "visibility": { + "label": "Visibilitas", + "empty": { + "show": "Tampilkan folder kosong", + "hide": "Sembunyikan folder kosong" + }, + "counts": { + "show": "Tampilkan jumlah item", + "hide": "Sembunyikan jumlah item" + } + } + }, + "noSearchResults": "Tidak ada {item} ditemukan untuk pencarian ini", + "loading": "Memuat", + "invite": "Undang", + "refresh": "Segarkan", + "email": "Email", + "role": "Peran", + "admin": "Admin", + "owner": "Pemilik", + "inActive": "Tidak Aktif", + "argument": "Argumen|Argumen", + "abort": "Batalkan", + "send": "Kirim", + "remindMeLater": "Ingatkan Saya Nanti", + "text": "Teks", + "folders": "Folder", + "folder": "Folder | @:folders", + "title": "Judul", + "search": { + "label": "Cari", + "scope": { + "active": "Aktif", + "archived": "Diarsipkan", + "all": "Semua" + } + }, + "fuzzySearch": { + "enabled": "Pencarian fuzzy diaktifkan", + "disabled": "Pencarian fuzzy dinonaktifkan", + "enabledHint": "Pencarian Fuzzy Diaktifkan. Klik untuk Beralih", + "disabledHint": "Pencarian Fuzzy Dinonaktifkan. Klik untuk Beralih" + }, + "none": "Tidak Ada", + "change": "Ubah", + "expandAllProjects": "Perluas Semua Proyek", + "collapseAllProjects": "Ciutkan Semua Proyek", + "expandAllFolders": "Perluas Semua Folder", + "collapseAllFolders": "Ciutkan Semua Folder", + "clone": { + "title": "Gandakan {item}", + "successMessage": { + "detail": "{item} digandakan" + }, + "errorMessage": { + "detail": "Gagal menggandakan {item}" + } + }, + "notesPurposePlaceholder": "Tambahkan catatan untuk membantu Anda mengingat tujuan {item} ini; ini juga akan dilihat oleh model yang dapat memberi mereka detail lebih lanjut tentang cara menggunakan {item} ini (@:optional)", + "endpointTestResults": "Hasil Tes Endpoint", + "testConnection": "Tes Koneksi", + "emptyPlaceholder": "Tidak ada {item} ditemukan", + "selectItem": "@:pilih {item}", + "selectedItemLabel": "{count} {title}", + "feature": "Fitur|Fitur", + "raw": "Mentah", + "rawOutput": "Output Mentah", + "property": "Properti|Properti", + "configure": "Konfigurasi", + "context": "Konteks | Konteks", + "path": "Jalur | Jalur", + "project": { + "title": "Proyek | Proyek", + "createRootProject": "Proyek Baru di Root", + "projectName": "Nama Proyek", + "projectDescription": "Deskripsi Proyek", + "defaultModel": "Model Default", + "customInstructions": "Instruksi Kustom", + "addChildProject": "Tambah Proyek Anak", + "promoteToRoot": { + "title": "Pindahkan Folder ke Root", + "errorMessage": { + "detail": "Gagal memindahkan proyek ke root." + }, + "successMessage": { + "detail": "Proyek berhasil dipindahkan ke root." + } + }, + "deleteProject": "Hapus Proyek", + "setDefaultForNewConversations": "Jadikan sebagai Proyek Default", + "unsetDefaultForNewConversations": "Hapus Proyek Default", + "orphanageProjectName": "Lain-lain", + "includeProjectContext": "Sertakan Konteks Proyek", + "deleteConfirmation": { + "header": "Hapus Proyek", + "message": "Apakah Anda yakin ingin menghapus {projectName} dan semua percakapannya?", + "rejectLabel": "@:cancel", + "acceptLabel": "@:delete", + "successMessage": { + "detail": "Proyek dihapus" + } + }, + "deleteAllConversations": { + "title": "Hapus Semua Percakapan", + "description": "Apakah Anda yakin ingin menghapus semua percakapan di {projectName}? Tindakan ini tidak dapat dibatalkan.", + "successMessage": { + "detail": "Menghapus {count} percakapan | Menghapus {count} percakapan", + "empty": "Tidak ada percakapan untuk dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus percakapan" + } + }, + "archiveAllConversations": { + "title": "Arsipkan Semua Percakapan", + "description": "Arsipkan semua percakapan di {projectName}? Mereka akan dipindahkan ke Arsip dan dapat dipulihkan nanti.", + "confirmLabel": "Arsipkan Semua", + "successMessage": { + "detail": "Mengarsipkan {count} percakapan | Mengarsipkan {count} percakapan" + }, + "errorMessage": { + "detail": "Gagal mengarsipkan percakapan" + } + }, + "projectForm": { + "addFiles": "Tambah File", + "editProject": "Edit Proyek", + "createNewProject": "Proyek Baru", + "dragAndDropFiles": "Seret dan lepas file yang akan dilampirkan ke setiap percakapan di proyek ini.", + "successMessage": { + "createDetail": "Proyek dibuat", + "createDetailHidden": "Proyek dibuat! Saat ini tersembunyi karena kosong. Klik tombol di bawah untuk menampilkannya sekarang, atau akan muncul otomatis saat Anda menambahkan percakapan pertama.", + "updateDetail": "Proyek diperbarui" + }, + "errorMessage": { + "createDetail": "Gagal membuat Proyek", + "updateDetail": "Gagal memperbarui Proyek" + } + }, + "emptyProjectVisibilityToast": { + "showButton": "Tampilkan Proyek Kosong", + "enabled": "Proyek kosong sekarang terlihat" + }, + "startNewToGetStarted": "Mulai Percakapan Baru untuk Memulai" + }, + "selectedModel": "Model yang dipilih", + "endpoint": "Endpoint", + "authToken": "Token Auth", + "before": "Sebelum", + "after": "Setelah", + "method": "Metode", + "httpMethod": "HTTP @:method", + "get": "Dapatkan", + "post": "Kirim", + "presetAlreadyExistsMessage": "@:preset dengan nama yang sama sudah ada.", + "duplicatePresetOverwriteMessage": "@:presetAlreadyExistsMessage Jika Anda menyimpan, itu akan menimpa preset yang ada.", + "noPropsAvailable": "Tidak ada {propsName} tersedia. Tambahkan kustom.", + "localAI": "@:local AI", + "branch": { + "clickToLabel": "Klik untuk menambahkan label", + "labelPlaceholder": "Label cabang (maks 30 karakter)", + "labelBranch": "Label Cabang...", + "labelDialogTitle": "Label Cabang", + "noLabel": "Tidak ada label", + "clickForOptions": "Klik untuk opsi lainnya", + "timeline": { + "title": "Penjelajah Cabang", + "viewAll": "Penjelajah Cabang...", + "branchNumber": "Cabang {n}", + "current": "Saat Ini", + "branches": "Cabang", + "compare": "Bandingkan" + }, + "diff": { + "title": "Bandingkan Cabang", + "compare": "Bandingkan cabang", + "exitCompare": "Keluar mode perbandingan", + "selectFirst": "Pilih cabang pertama untuk dibandingkan", + "selectSecond": "Pilih cabang kedua untuk dibandingkan", + "selected": "Dipilih", + "identical": "Konten identik", + "leftBranch": "Cabang pertama", + "rightBranch": "Cabang kedua", + "selectBranch": "Pilih cabang", + "selectBranchesToCompare": "Pilih dua cabang di atas untuk membandingkan kontennya", + "switchToBranch": "Beralih ke {name}", + "viewDiff": "Diff", + "viewSideBySide": "Berdampingan" + } + }, + "conversation": { + "title": "Percakapan | Percakapan", + "conversationTitle": "@:conversation.title Judul", + "contextShieldErrorMessage": { + "summary": "Gagal menghasilkan ringkasan konteks.", + "detail": "Periksa Pengaturan > Notifikasi untuk detail lebih lanjut." + }, + "sendErrorMessage": { + "summary": "Gagal mengirim pesan.", + "detail": "Periksa Pengaturan > Notifikasi untuk detail lebih lanjut. {error}" + }, + "contextSizeError": { + "summary": "Pesan melebihi batas konteks", + "detail": "Pesan Anda dengan hasil pencarian dan konteks terlalu besar untuk model ini. Coba: tingkatkan ukuran konteks dari parameter model, kurangi hasil pencarian, bersihkan riwayat percakapan, gunakan model dengan konteks lebih besar (16k+), atau persingkat instruksi sistem Anda." + }, + "deleteConversation": "Hapus @:conversation.title", + "addNewConversation": "Tambah @:conversation.title Baru", + "newConversation": "@:conversation.title Baru", + "treeControls": { + "title": "Urutkan & Tampilkan", + "projectSort": { + "none": "Tidak Ada", + "name": "Nama", + "created": "Dibuat", + "ascending": "Naik", + "descending": "Turun", + "projectsFirst": "Proyek dahulu" + }, + "conversationSort": { + "none": "Tidak Ada", + "title": "Judul", + "created": "Dibuat", + "lastActivity": "Aktivitas Terakhir", + "ascending": "Naik", + "descending": "Turun" + }, + "priority": { + "none": "Tanpa prioritas", + "pinned": "@:pinned dahulu", + "bookmarked": "@:bookmarked dahulu" + }, + "visibility": { + "label": "Visibilitas", + "recents": { + "show": "Tampilkan Terbaru & @:pinned", + "hide": "Sembunyikan Terbaru & @:pinned" + }, + "archive": { + "show": "Tampilkan Arsip", + "hide": "Sembunyikan Arsip" + }, + "empty": { + "show": "Tampilkan proyek kosong", + "hide": "Sembunyikan proyek kosong" + }, + "counts": { + "show": "Tampilkan jumlah percakapan", + "hide": "Sembunyikan jumlah percakapan" + } + }, + "clear": "Atur Ulang" + }, + "promptPlaceHolder": { + "normal": { + "focused": "Tekan {trigger} untuk perintah cepat ATAU mulai mengetik...", + "unfocused": "Tekan / untuk fokus di sini dan mulai mengetik" + } + }, + "deleteConfirmation": { + "header": "Hapus @:conversation.title", + "message": "Apakah Anda yakin ingin menghapus percakapan yang dipilih dan semua split chat-nya? | Apakah Anda yakin ingin menghapus percakapan yang dipilih dan semua split chat-nya?", + "rejectLabel": "Batal", + "acceptLabel": "Hapus", + "successMessage": { + "detail": "@:conversation.title dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:conversation.title" + } + }, + "convertToChat": { + "title": "Konversi ke Obrolan", + "successMessage": { + "detail": "@:conversation.title dikonversi ke Obrolan" + }, + "errorMessage": { + "detail": "Gagal mengkonversi percakapan ke Obrolan" + } + }, + "convertToForgeCanvas": { + "title": "Konversi ke @:forge.forgeCanvas", + "successMessage": { + "detail": "@:conversation.title dikonversi ke @:forge.forgeCanvas" + }, + "errorMessage": { + "detail": "Gagal mengkonversi percakapan ke @:forge.forgeCanvas" + } + }, + "cloneAncestorsSuccess": { + "detail": "Pesan berhasil digandakan ke split baru" + }, + "cloneAncestorsError": { + "detail": "Gagal menggandakan pesan ke split baru" + }, + "cloneAncestorsToNewConversationSuccess": { + "detail": "Pesan berhasil digandakan ke percakapan baru" + }, + "cloneAncestorsToNewConversationError": { + "detail": "Gagal menggandakan pesan ke percakapan baru" + }, + "archive": { + "groupLabel": "Arsip", + "orphanProject": "Percakapan Yatim", + "bannerMessage": "Percakapan ini diarsipkan. Batalkan pengarsipan untuk melanjutkan diskusi.", + "bannerHint": "Mengirim pesan baru akan otomatis membatalkan pengarsipan.", + "unarchiveAction": "Batalkan Arsip", + "autoUnarchivedToast": "Percakapan otomatis dibatalkan pengarsipannya.", + "archivedToast": "{count} percakapan diarsipkan | {count} percakapan diarsipkan", + "unarchivedToast": "{count} percakapan dipulihkan | {count} percakapan dipulihkan", + "archiveSingle": "Arsipkan", + "unarchiveSingle": "Batalkan Arsip", + "unload": "Bongkar item yang diarsipkan", + "unloaded": "Item yang diarsipkan dibongkar", + "error": "Tidak dapat memperbarui status arsip. Silakan coba lagi.", + "archiveMultiple": "Arsipkan {item}" + } + }, + "conversationActions": { + "exportConversation": { + "title": "Ekspor @:conversation.title sebagai JSON", + "successMessage": "Berhasil mengekspor percakapan sebagai JSON" + }, + "showAllSplits": "Tampilkan Semua Split", + "saveSplitsAs": "Simpan Split Sebagai", + "newSingleSplitChat": "Chat Split Tunggal Baru", + "splitPreset": "Preset Split | Preset Split", + "splitPresetForm": { + "saveTitle": "Simpan Split Sebagai @:preset", + "editTitle": "Edit Split @:preset {presetName}", + "presetName": "@:preset Nama", + "presetOptions": "@:preset Opsi", + "presetOptionsPlaceholder": "@:pilih @:preset Opsi", + "savePreset": "Simpan @:preset", + "successMessage": { + "saveDetail": "Split @:preset ditambahkan", + "editDetail": "Split @:preset diperbarui" + }, + "errorMessage": { + "saveDetail": "Gagal menyimpan Split @:preset" + } + }, + "deleteSplitPresetConfirmation": { + "header": "Hapus Split @:preset", + "message": "Apakah Anda yakin ingin menghapus {splitPresetName}?", + "successMessage": { + "detail": "Split @:preset dihapus" + } + }, + "compactMode": "Mode Ringkas", + "enableCompactMode": "@:enable @:conversationActions.compactMode", + "disableCompactMode": "@:disable @:conversationActions.compactMode", + "splitWidths": { + "title": "Lebar Split", + "slim": "Ramping", + "balanced": "Seimbang", + "roomy": "Luas", + "spacious": "Legа", + "full": "Penuh" + } + }, + "responseConfiguration": { + "title": "Konfigurasi Respons", + "selectPresetPlaceholder": "Pilih preset...", + "saveAsPreset": "Simpan sebagai Preset", + "commonSettings": { + "title": "Pengaturan Umum" + }, + "advancedParameters": { + "title": "Parameter Lanjutan", + "description": "Objek JSON untuk parameter model lanjutan", + "placeholder": "" + }, + "providerOptions": { + "title": "Opsi Penyedia", + "description": "Konfigurasi khusus penyedia", + "placeholder": "" + }, + "thinkingConfig": { + "title": "Konfigurasi Pemikiran", + "description": "Konfigurasi pemikiran diperpanjang", + "notice": "Penyedia mungkin mengabaikan atau menghormati sebagian pengaturan pemikiran" + }, + "customParameters": { + "title": "Parameter Kustom", + "helper": "Penyedia mungkin mengabaikan atau menghormati sebagian ini", + "keyPlaceholder": "param_kustom", + "valuePlaceholder": "nilai", + "deleteConfirm": { + "title": "Hapus Parameter", + "message": "Hapus parameter kustom \"{param}\"?" + }, + "errors": { + "missingKey": "Kunci parameter diperlukan.", + "reserved": "Kunci ini dicadangkan untuk parameter bawaan.", + "duplicate": "Parameter dengan kunci ini sudah ada." + } + }, + "json": { + "invalid": "JSON Tidak Valid" + }, + "tooltips": { + "constraintMode": "Mode Batasan Aktif", + "freeformMode": "Mode Bebas Aktif - tidak ada batas min/maks" + }, + "expandOtherOptions": "Perluas untuk opsi lainnya", + "collapseOtherOptions": "Ciutkan opsi lainnya", + "parameters": { + "temperature": { + "label": "Suhu", + "helper": "Mengontrol keacakan (0=fokus, 2=kreatif)" + }, + "topP": { + "label": "Top P", + "helper": "Massa probabilitas yang dipertahankan selama nucleus sampling" + }, + "topK": { + "label": "Top K", + "helper": "Batasi pemilihan token ke K token teratas" + }, + "maxOutputTokens": { + "label": "Token Output Maks", + "helper": "Token maksimum untuk respons", + "helperWithLimit": "Token maksimum untuk respons (batas {0})" + }, + "numCtx": { + "label": "Ukuran Jendela Konteks", + "helper": "Token maksimum yang diterima dalam prompt", + "helperWithLimit": "Token maksimum yang diterima dalam prompt (batas {0})", + "llamaCppHint": "Atur ke 0 untuk menggunakan ukuran konteks maksimum model" + }, + "presencePenalty": { + "label": "Penalti Kehadiran", + "helper": "Menghukum token baru berdasarkan apakah mereka muncul dalam teks sejauh ini" + }, + "frequencyPenalty": { + "label": "Penalti Frekuensi", + "helper": "Menghukum token berdasarkan frekuensi dalam teks sejauh ini" + }, + "repeatPenalty": { + "label": "Penalti Pengulangan", + "helper": "Mencegah pengulangan frasa" + }, + "repeatLastN": { + "label": "Ulangi N Terakhir", + "helper": "Jendela konteks untuk menerapkan penalti pengulangan" + }, + "minP": { + "label": "Min P", + "helper": "Probabilitas kumulatif minimum untuk pemilihan token" + }, + "mirostat": { + "label": "Mirostat", + "helper": "Menstabilkan perplexity secara dinamis", + "options": { + "off": "Mati", + "v1": "Mirostat 1.0", + "v2": "Mirostat 2.0" + } + }, + "mirostatTau": { + "label": "Mirostat Tau", + "helper": "Tingkat kejutan target (lebih rendah = lebih aman)" + }, + "mirostatEta": { + "label": "Mirostat Eta", + "helper": "Tingkat pembelajaran untuk penyesuaian Mirostat" + }, + "numGpu": { + "label": "Layer GPU", + "helper": "Jumlah layer yang dialihkan ke GPU" + }, + "numThread": { + "label": "Thread", + "helper": "Thread CPU yang digunakan untuk generasi" + } + } + }, + "modelParams": { + "params": "Params", + "title": "Parameter Model", + "advancedParams": "Parameter Lanjutan", + "providerOptions": "Opsi Penyedia", + "maxTokens": "Token Output Maks (Legacy)", + "maxOutputTokens": "Token Output Maks", + "temperature": "Suhu", + "topP": "Top P", + "presencePenalty": "Penalti Kehadiran", + "frequencyPenalty": "Penalti Frekuensi", + "numCtx": "Ukuran Jendela @:context", + "numGpu": "Jumlah Layer GPU", + "selectPlaceholder": "@:pilih atau masukkan parameter", + "selectPresetPlaceholder": "@:pilih @:preset", + "saveAsPreset": "Simpan sebagai @:preset", + "addParameter": "Tambah Parameter Baru", + "extraParams": "@:params Tambahan", + "applyAndSaveAsDefault": "Terapkan dan Simpan sebagai Default Model", + "savePresetForm": { + "title": "Simpan @:modelParams.params Sebagai Preset", + "errorMessage": { + "detail": "Gagal menyimpan preset params." + }, + "successMessage": { + "detail": "@:modelParams.params preset disimpan." + } + }, + "deletePresetConfirm": { + "title": "Hapus @:preset", + "message": "Apakah Anda yakin ingin menghapus {presetName}?", + "errorMessage": { + "detail": "Gagal menghapus preset params." + }, + "successMessage": { + "detail": "@:modelParams.params preset dihapus." + } + }, + "thinkingEffort": { + "label": "Upaya Pemikiran", + "light": "Berpikir Ringan", + "moderate": "Berpikir Sedang", + "deep": "Berpikir Dalam", + "default": "Default", + "none": "Tidak Ada", + "dynamic": "Dinamis", + "exclude": "Kecualikan" + } + }, + "chatSplitActions": { + "title": "Opsi Split", + "addSplitChat": "Tambah Split Chat", + "hideSplit": "Sembunyikan Split", + "copySplitToNewConversation": "Salin Split ke Percakapan Baru", + "moveSplitToNewConversation": "Pindahkan Split ke Percakapan Baru", + "deleteSplit": "Hapus Split", + "removeSplit": "Hapus Split", + "splitRemoved": "Split dihapus", + "splitReset": "Split diatur ulang", + "copySplitToNewConversationSuccess": { + "detail": "Split disalin ke percakapan baru" + }, + "moveSplitToNewConversationSuccess": { + "detail": "Split dipindahkan ke percakapan baru" + }, + "copySplitToNewConversationError": { + "detail": "Gagal menyalin split ke percakapan baru" + }, + "moveSplitToNewConversationError": { + "detail": "Gagal memindahkan split ke percakapan baru" + }, + "exportOrCopyChat": { + "exportChat": "Ekspor Obrolan", + "copyChat": "Salin Obrolan", + "activeBranchAsJson": "Cabang Aktif sebagai JSON", + "activeBranchAsMarkdown": "Cabang Aktif sebagai Markdown", + "allBranchesAsJson": "Semua Cabang sebagai JSON", + "successMessage": "Berhasil {action} obrolan sebagai {format}", + "action": { + "export": "diekspor", + "copy": "disalin" + } + }, + "showAllHiddenMessages": { + "title": "Tampilkan Semua Pesan Tersembunyi", + "successMessage": { + "detail": "Semua pesan tersembunyi sekarang terlihat" + } + }, + "deleteConfirmation": { + "header": "Hapus Split", + "message": "Apakah Anda yakin ingin menghapus Split ini?", + "rejectLabel": "@:cancel", + "acceptLabel": "@:delete" + } + }, + "message": { + "title": "Pesan|Pesan", + "currentMessageAndDescendants": "Pesan dan Keturunan", + "sendOnEnter": "Kirim dengan Enter", + "sendModifier": { + "label": "Modifier Kirim", + "none": "Tidak Ada", + "shift": "Shift", + "alt": "Alt", + "ctrl": "Ctrl", + "meta": "Meta" + }, + "resendUserMessage": "Kirim ulang pesan pengguna", + "sendAsAssistantMessage": "Kirim sebagai @:assistant Pesan", + "sendAsAssistantMessageHelp": "Mengirim pesan sebagai \"Asisten\" memungkinkan Anda membentuk percakapan dengan menambahkan respons AI sendiri. AI akan melanjutkan seolah-olah itu menulis pesan tersebut. Berguna untuk memberikan konteks atau memandu respons.", + "sentAsAssistantBadge": "Dikirim sebagai Pesan Asisten", + "manuallyEdited": "Diedit Manual", + "stopGeneration": "Berhenti", + "renderingActions": { + "bookmark": "@:bookmark Pesan | @:bookmark Pesan", + "removeBookmark": "Hapus @:bookmark | Hapus Tandai", + "deleteMessage": "Hapus Pesan | Hapus Pesan", + "removeMessage": "Hapus Pesan", + "regenerateAssistantMessage": "Buat ulang pesan asisten sebagai cabang baru", + "continueGeneration": "@:continue Generasi", + "useAsPromptInNewSplit": "Gunakan sebagai prompt di split baru", + "foldUp": "Lipat Pesan di Atas", + "unfold": "Buka Lipatan Pesan di Atas", + "cloneAncestorsToNewSplit": "Gandakan dengan Leluhur ke Split Baru", + "cloneAncestorsToNewConversation": "Gandakan dengan Leluhur ke Percakapan Baru", + "extraActions": "Aksi Tambahan" + }, + "noModelSelectedErrorMessage": { + "detail": "Tidak ada model yang dipilih. Silakan pilih model untuk mengirim pesan" + }, + "currentMessageDeleteConfirmation": { + "header": "Hapus Pesan", + "message": "Apakah Anda yakin ingin menghapus pesan ini?" + }, + "currentMessageAndDescendantsDeleteConfirmation": { + "header": "Hapus Pesan dan keturunannya", + "message": "Apakah Anda yakin ingin menghapus pesan ini dan semua keturunannya?" + } + }, + "slashCommands": { + "title": "Perintah Cepat", + "noMatches": "Tidak ada perintah yang cocok", + "hint": "Ketik \\ diikuti perintah atau alias", + "executed": { + "regenerate": "Membuat ulang pesan...", + "shield": "Perisai konteks diterapkan", + "compress": "Mengompres dengan perisai...", + "bookmark": "Pesan @:bookmarked", + "copy": "Disalin ke papan klip", + "continue": "Melanjutkan generasi...", + "resend": "Mengirim ulang pesan..." + } + }, + "shiftcutMode": { + "title": "Shiftcuts", + "description": "Aktifkan atau nonaktifkan fitur Shiftcuts. Tidak seperti pintasan keyboard standar, Shiftcuts dipicu dengan mengetuk dua kali tombol Shift lalu menekan tombol lain untuk melakukan suatu tindakan; termasuk: 't' untuk membuka split chat baru, 'e' untuk membuka pemilih lingkungan, '1' untuk mengalihkan bilah sisi, dan 'm' untuk membuka minimap." + }, + "urlEndpoint": "URL Endpoint", + "giveUniqueNamePlaceholder": "Beri nama yang unik", + "duplicateName": "Nama {item} duplikat atau tidak valid. Harap masukkan nama yang unik.", + "manageData": { + "firstBackupReminder": "Anda belum mencadangkan data Anda, apakah Anda ingin mengekspor data untuk cadangan?", + "scheduledBackupReminder": "Sudah 24 jam sejak cadangan terakhir Anda, apakah Anda ingin mengekspor data untuk cadangan?", + "nonPersistentStorage": "Penyimpanan dapat dibersihkan oleh browser di bawah tekanan penyimpanan. Kami sarankan untuk mencadangkan data Anda secara teratur.", + "exportData": "Ekspor @:data", + "clearData": "Bersihkan @:data", + "restoreData": "Pulihkan @:data", + "dragAndDropExportedData": "Seret dan lepas cadangan data Anda untuk dipulihkan.", + "restoreDataWarning": "Memulihkan dari file cadangan akan mengganti semua data yang ada. Kami sarankan untuk mengekspor cadangan terlebih dahulu.", + "exportErrorMessage": { + "detail": "Gagal mengekspor data" + }, + "backupData": "Cadangkan @:data", + "exportSuccessMessage": { + "detail": "@:data diekspor" + }, + "clearErrorMessage": { + "detail": "Gagal membersihkan data" + }, + "clearSuccessMessage": { + "detail": "@:data telah dibersihkan" + }, + "confirmationActionPlaceholder": "Masukkan '{string}' di sini", + "proceedWithConfirmationAction": "Silakan masukkan '{string}' di bawah untuk melanjutkan", + "invalidConfirmationString": { + "summary": "@:warning", + "detail": "Konfirmasi tidak valid. Silakan masukkan '{string}' untuk melanjutkan." + }, + "clearDataConfirmation": { + "header": "Bersihkan @:data", + "message": "Apakah Anda yakin ingin membersihkan semua data? Tindakan ini tidak dapat dibatalkan.", + "rejectLabel": "Batal", + "acceptLabel": "Bersihkan" + }, + "restoreDataConfirmation": { + "fileNotSelectedWarning": { + "summary": "@:warning", + "message": "Silakan pilih file untuk dipulihkan" + }, + "header": "Pulihkan @:data", + "message": "Apakah Anda yakin ingin memulihkan semua data? Tindakan ini akan mengganti semua data yang ada dan tidak dapat dibatalkan. Kami sarankan untuk mengekspor cadangan terlebih dahulu.", + "rejectLabel": "Batal", + "acceptLabel": "Pulihkan" + }, + "importDataSuccessMessage": { + "detail": "@:data Diimpor" + }, + "importDataErrorMessage": { + "detail": "Gagal Mengimpor @:data" + } + }, + "setupItem": { + "label": "Setup {item}", + "success": "Setup {item} selesai", + "failure": "Tidak dapat menyiapkan {item}" + }, + "onboard": { + "greeting": "Selamat datang di Msty Studio!", + "getStarted": "Kami memerlukan setidaknya satu penyedia model untuk memulai.", + "desktop": { + "greeting": "Selamat datang di Msty!", + "getStarted": "Bagaimana Anda ingin memulai?", + "customLocation": { + "title": "Punya Model Ollama/Msty?", + "titleMLX": "Punya Model MLX?", + "titleLlamaCpp": "Punya Model LLaMA.cpp?", + "description": "Anda dapat menggunakan model Ollama atau Msty yang sudah ada secara langsung, jika ada, atau tentukan lokasi kustom. Catatan: kami akan tetap menggunakan layanan kami sendiri untuk menjalankan model tersebut.", + "descriptionMLX": "Jika Anda belum memiliki model MLX, Anda dapat menentukan lokasi kustom tempat Anda ingin menyimpannya.", + "descriptionMLXWithSwama": "Kami menemukan model MLX di cache Hugging Face Hub Anda! Anda dapat menggunakannya langsung atau menentukan lokasi kustom.", + "descriptionLlamaCpp": "Tentukan lokasi kustom tempat Anda ingin menyimpan model GGUF untuk LLaMA.cpp.", + "noLocationSet": "Tidak ada lokasi yang diatur", + "setYourOwn": "Atur Sendiri", + "notAvailableForMLX": "Lokasi model kustom tidak tersedia untuk MLX", + "placeholder": "Masukkan jalur model kustom" + }, + "setupLocalAI": { + "description": "Untuk memulai, {modelName} akan diunduh. Anda dapat memilih model yang berbeda.", + "pros": { + "item1": "Gunakan model seperti DeepSeek R1, Meta Llama4, Microsoft Phi4, IBM Granite, Google Gemma, dll", + "item2": "Gunakan offline dan jaga @:data Anda tetap pribadi", + "item3": "Model gratis untuk diunduh dan digunakan", + "item4": "Instal dan gunakan model khusus" + }, + "cons": { + "item1": "Membutuhkan penyimpanan dan memori tambahan" + }, + "successMessage": { + "summary": "Itu saja!", + "detail": "Anda sekarang dapat mulai mengobrol dengan model Anda secara pribadi dan aman." + }, + "errorMessage": { + "summary": "Error Menyiapkan @:localAIService", + "detail": "Kami tidak dapat menyiapkan @:localAIService{'.'} Silakan periksa log untuk detail lebih lanjut. {errorMessage}", + "epermDetail": "Ada masalah izin saat menyiapkan AI Lokal. Anda dapat menjalankan ulang aplikasi sebagai admin (tidak disarankan) atau mempertimbangkan untuk menginstal aplikasi hanya untuk satu pengguna (disarankan).", + "abortDetail": "{errorMessage} Pertimbangkan untuk menginstal AI Lokal dari file arsip jika Anda terus mendapatkan error ini. Silakan kunjungi https://docs.msty.studio/getting-started/onboarding" + } + }, + "setupMLX": { + "errorMessage": { + "summary": "Error Menyiapkan Layanan MLX", + "detail": "Kami tidak dapat menyiapkan Layanan MLX. Silakan periksa log untuk detail lebih lanjut. {errorMessage}" + }, + "description": "Untuk memulai, {modelName} akan diunduh. MLX adalah framework yang dioptimalkan Apple untuk Apple Silicon.", + "experimentalInfo": "MLX saat ini dalam mode eksperimental. Mungkin memiliki beberapa keterbatasan dan masalah. Harap laporkan masalah apa pun kepada tim.", + "pros": { + "item1": "Dioptimalkan untuk Apple Silicon (M1, M2, M3, M4)", + "item2": "Penggunaan memori efisien dengan arsitektur memori terpadu", + "item3": "Mendukung model MLX, SafeTensors, dan GGUF", + "item4": "Kinerja asli di macOS" + }, + "cons": { + "item1": "Hanya tersedia di Mac Apple Silicon", + "item2": "Pilihan model lebih kecil dibandingkan Ollama" + }, + "successMessage": { + "summary": "Setup MLX Selesai!", + "detail": "Anda sekarang dapat menggunakan model MLX dengan kinerja optimal di Mac Anda." + }, + "progress": { + "checkingCompatibility": "Memeriksa kompatibilitas sistem...", + "downloadingBinary": "Mengunduh server MLX...", + "startingService": "Memulai layanan MLX...", + "settingUp": "Menyiapkan MLX...", + "downloadProgress": "Mengunduh Model: {progress}%" + } + }, + "setupLlamaCpp": { + "experimentalInfo": "Dukungan LLaMA.cpp bersifat eksperimental dan dalam pengembangan aktif", + "errorMessage": { + "summary": "Error Menyiapkan Layanan LLaMA.cpp", + "detail": "Kami tidak dapat menyiapkan Layanan LLaMA.cpp. Silakan periksa log untuk detail lebih lanjut. {errorMessage}" + }, + "description": "Untuk memulai, {modelName} akan diunduh. LLaMA.cpp menyediakan inferensi AI lintas platform yang efisien.", + "pros": { + "item1": "Bekerja di Windows, macOS, dan Linux", + "item2": "Mendukung akselerasi CPU dan GPU", + "item3": "Penggunaan memori efisien dan inferensi cepat", + "item4": "Kompatibel dengan format model GGUF" + }, + "cons": { + "item1": "Membutuhkan aplikasi desktop", + "item2": "Kinerja tergantung pada konfigurasi hardware" + }, + "successMessage": { + "summary": "Setup LLaMA.cpp Selesai!", + "detail": "Anda sekarang dapat menggunakan model LLaMA.cpp dengan kinerja efisien di sistem Anda." + }, + "progress": { + "checkingCompatibility": "Memeriksa kompatibilitas sistem...", + "downloadingBinary": "Mengunduh server LLaMA.cpp...", + "startingService": "Memulai layanan LLaMA.cpp...", + "settingUp": "Menyiapkan LLaMA.cpp...", + "downloadProgress": "Mengunduh: {progress}%" + } + }, + "addRemoteModelsProvider": { + "description": "Dengan sebagian besar penyedia online, Anda perlu mendapatkan kunci API dari situs web penyedia. {findYourKey}", + "findYourKey": "Temukan kunci API Anda", + "pros": { + "item1": "Gunakan OpenAI, Azure, Claude Sonnet, Google Gemini, Perplexity, Remote Ollama, Remote Msty, dll", + "item2": "Mulai tanpa mengunduh model", + "item3": "Beberapa vendor menyediakan fitur tambahan seperti pembuatan gambar, pencarian web, dll" + }, + "cons": { + "item1": "Membutuhkan koneksi internet untuk mengobrol", + "item2": "Biaya vendor mungkin berlaku" + } + } + }, + "modelsAvailableCount": "{count} model tersedia | {count} model tersedia", + "modelsAddedCount": "{count} model ditambahkan | {count} model ditambahkan", + "forgetThisProvider": "Lupakan penyedia ini", + "submitAndContinue": "Ayo Mulai!", + "getSidecar": "Tidak ada @:localAI? Dapatkan @:remoteToolsConnector.title untuk Setup 1-klik", + "completedWithProvider": { + "summary": "Itu saja!", + "detail": "Anda sekarang siap mengobrol dengan salah satu model dari {providerName}." + }, + "continueSetup": "Lanjutkan Setup {service}" + }, + "login": { + "enterEmail": "Masukkan email Anda", + "errorMessage": "Email tidak valid atau terjadi kesalahan. Silakan coba lagi.", + "successMessage": "Tautan masuk dikirim ke {email}" + }, + "modelHub": { + "title": "Hub Model", + "languageModelsProviders": { + "title": "Penyedia Model", + "subtitle": "Akses model dari cloud atau server jarak jauh.", + "autoFetchModels": "Daftar model diambil secara otomatis", + "addLanguageModelsProvider": "Tambah Penyedia", + "prosAndCons": { + "pros": [ + "Gunakan OpenAI GPT, Azure, Claude Sonnet, Google Gemini, Perplexity, Remote Msty, Remote Ollama, dll.", + "Mulai dengan cepat", + "Tidak perlu unduh" + ], + "cons": [ + "Membutuhkan koneksi internet untuk mengobrol", + "Biaya vendor mungkin berlaku" + ] + }, + "deleteConfirmation": { + "header": "Hapus Penyedia", + "message": "Apakah Anda yakin ingin menghapus {providerName}?", + "successMessage": { + "detail": "Penyedia dihapus" + }, + "errorMessage": { + "summary": "Error", + "detail": "Gagal menghapus penyedia" + } + }, + "syncProviderWithWorkspaceForm": { + "titleNew": "Salin ke Ruang Kerja Lain", + "titleUpdate": "Salin/Sinkronkan ke Ruang Kerja Lain", + "descriptionNew": "Salin penyedia ini ke satu atau lebih ruang kerja.", + "descriptionUpdate": "Sinkronkan penyedia ini ke satu atau lebih ruang kerja. Jika penyedia ini pernah disalin sebelumnya, akan diperbarui. Jika belum, akan ditambahkan.", + "selectWorkspaces": "@:pilih Ruang Kerja", + "availableWorkspaces": "Ruang Kerja Tersedia" + }, + "providerForm": { + "addTitle": "Tambah Penyedia", + "updateTitle": "Perbarui Penyedia", + "newHeader": "Penyedia Model Bahasa Baru", + "editHeader": "Edit Penyedia Model Bahasa", + "modelsProvider": "Penyedia Model", + "modelId": "ID Model", + "modelName": "Nama Model", + "providerName": "Nama Penyedia", + "providerUrl": "URL Penyedia", + "providerToken": "Token Penyedia", + "saveProvider": "Simpan Penyedia", + "selectProvider": "@:pilih Penyedia", + "namePlaceholder": "Beri nama (opsional)", + "selectModels": "@:pilih Model", + "availableModels": "Model Tersedia", + "addCustomModel": "Tambah Model Kustom", + "inferenceEndpoint": "Endpoint Inferensi (harus dimulai dengan http:// atau https://)", + "baseURL": "URL Dasar", + "resourceName": "Nama Sumber Daya (akan diabaikan jika URL Dasar diatur)", + "apiVersion": "API @:version", + "region": "Wilayah AWS", + "accessKeyId": "ID Kunci Akses", + "secretAccessKey": "Kunci Akses Rahasia", + "sessionToken": "Token Sesi (Opsional)", + "notAllModelsCompatible": "Tidak semua model telah diuji dengan Msty dan mungkin tidak mendukung semua model yang tersedia di penyedia.", + "enterAndManuallyFetchModels": "Klik 'Ambil Model' untuk mengambil model yang tersedia dari penyedia (kunci API mungkin diperlukan), atau tambahkan model secara manual di bawah.", + "enterAndFetchModels": "Masukkan kunci API Anda untuk mencoba mengambil semua model yang tersedia dari {providerName}, atau tambahkan model kustom secara manual.", + "fetchModels": "Ambil Model", + "modelsFilter": { + "all": "Semua Model", + "selected": "Dipilih", + "unselected": "Tidak Dipilih" + }, + "purposeFilter": { + "all": "Semua Tujuan" + }, + "searchInModels": "Cari model...", + "lmsCorsNote": "Anda harus mengaktifkan CORS di LM Studio untuk bekerja dengan Msty", + "openAICompatibleNote": "Sebagian besar endpoint penyedia yang kompatibel dengan OpenAI memerlukan prefix /v1 misalnya https://example.com/v1. Jika Anda mengalami masalah, coba tambahkan /v1 ke endpoint.", + "successMessage": { + "addDetail": "Penyedia Model {providerName} ditambahkan", + "updateDetail": "Penyedia Model {providerName} diperbarui" + }, + "errorMessage": { + "addDetail": "Gagal menambahkan Penyedia", + "updateDetail": "Gagal memperbarui Penyedia" + }, + "bedrockLongTermCredsWarning": "Menggunakan kredensial jangka panjang untuk Amazon Bedrock tidak disarankan.", + "awsRegionExample": "mis. us-east-1" + }, + "toggleVisibility": { + "errorMessage": { + "detail": "Gagal memperbarui visibilitas penyedia" + }, + "successMessage": { + "detail": "{provider} sekarang {visibility}" + } + }, + "modelsCount": "Jumlah Model", + "showInSelector": "Tampilkan di Pemilih Model", + "availableModels": "Model Tersedia", + "noModels": "Tidak ada model tersedia untuk penyedia ini", + "modelUpdated": "Model berhasil diperbarui", + "modelUpdateError": "Gagal memperbarui model", + "manageProviders": "Kelola", + "addNewProvider": "Tambah Baru" + }, + "sidecarLocalAIProxyEndpoint": { + "title": "@:remoteToolsConnector.title Proxy @:localAI Endpoint", + "description": "Pastikan @:remoteToolsConnector.title berjalan dan dapat diakses di URL yang disediakan melalui Tunneling. Salin dan tempel Info Koneksi Tunnel lengkap dengan token dan URL." + }, + "mstyRemoteEndpoint": { + "description": "Pastikan Msty Desktop berjalan dengan koneksi jarak jauh diaktifkan.", + "learnMore": "Pelajari cara mengaktifkan koneksi jarak jauh" + }, + "mstyLocalEndpoint": { + "description": "Layanan ini berjalan setiap kali aplikasi itu sendiri aktif dan berjalan. Anda mungkin perlu memperbarui nomor port jika port AI Lokal berubah. Jika tidak, sebaiknya biarkan apa adanya." + }, + "ollamaRemoteEndpoint": { + "description": "Saat menggunakan Ollama yang di-host sendiri, pastikan Ollama berjalan dan dapat diakses di URL yang disediakan. Anda harus menambahkan https://msty.studio ke asal yang diizinkan saat memulai layanan Ollama.", + "placeholder": "mis. http://localhost:11434 atau https://ollama.com" + }, + "mlxEndpoint": { + "description": "Penyedia ini digunakan untuk menjalankan model MLX di Mac Apple Silicon. Endpoint dikoreksi otomatis untuk memastikan cocok dengan setup MLX lokal Anda. Anda dapat mengubahnya sementara jika diperlukan." + }, + "llamacppEndpoint": { + "description": "Penyedia ini digunakan untuk menjalankan model LLaMA.cpp. Kemungkinan besar, Anda tidak perlu mengubah endpoint default. Jika perlu, pastikan layanan LLaMA.cpp berjalan dan dapat diakses di URL yang disediakan." + }, + "localModels": { + "title": "@:localAI Model", + "noCompatibleProviders": "Tidak ada penyedia yang kompatibel tersedia untuk mengelola Model Lokal. Harap tambahkan setidaknya satu penyedia tipe Msty Remote atau Ollama Remote untuk menggunakan Model Lokal.", + "activeDownloads": "{count} Unduhan Aktif | {count} Unduhan Aktif", + "featured": { + "title": "Model Unggulan" + }, + "installed": { + "title": "Model Terinstal" + }, + "customOllamaModelPlaceholder": "Atau Instal model dengan tag mis. {example}", + "alreadyInstalledErrorMessage": { + "summary": "Sudah Terinstal", + "detail": "Model {modelName} sudah terinstal" + }, + "abortInstalling": { + "title": "Batalkan Instalasi {modelName}", + "successMessage": { + "detail": "Instalasi {modelName} dibatalkan" + } + }, + "deleteConfirmation": { + "header": "Copot Model", + "message": "Apakah Anda yakin ingin mencopot {modelName}?", + "successMessage": { + "detail": "Model dihapus" + }, + "errorMessage": { + "detail": "Gagal mencopot model" + } + }, + "modelInstall": { + "successMessage": { + "detail": "Model {modelName} siap digunakan" + }, + "errorMessage": { + "detail": "Gagal menginstal model {modelName}", + "newerVersion": "{modelName} membutuhkan versi AI Lokal yang lebih baru. Harap perbarui ke versi terbaru dari Pengaturan > AI Lokal > Versi Layanan > ... > Paksa Perbarui Layanan AI Lokal" + } + }, + "ollamaModels": { + "title": "Model Ollama" + }, + "huggingfaceModels": { + "title": "Model Hugging Face", + "searchPlaceholder": "Cari berdasarkan penulis, model, atau tempel URL repo Hugging Face", + "searchPlaceholderAlt": "Temukan model berdasarkan nama, penulis, atau URL. Atau mulai dengan salah satu keluarga model di bawah.", + "searching": "Mencari model..." + }, + "ggufImport": { + "tabTitle": "Impor GGUF", + "title": "Impor Model GGUF", + "description": "Pilih file model GGUF dari sistem file Anda untuk diimpor ke {providerLabel}.", + "activeImports": "Impor Aktif", + "noFileSelected": "Tidak ada file yang dipilih", + "selectGgufFilePrompt": "Klik tombol di bawah untuk memilih file GGUF", + "dragDropOrClick": "Seret dan lepas file GGUF di sini, atau klik tombol di bawah", + "dropFileHere": "Lepaskan file di sini", + "releaseToUpload": "Lepaskan untuk memilih file", + "selectGgufFile": "Pilih File GGUF", + "chooseDifferentFile": "Pilih File Lain", + "importModel": "Impor Model", + "modelName": "Nama Model", + "modelNamePlaceholder": "mis., model-kustom-saya", + "modelNameDescription": "Ini akan menjadi nama yang Anda gunakan untuk merujuk model dalam percakapan.", + "removeFile": "Hapus file", + "dismissJob": "Abaikan", + "useSymlink": "Gunakan symlink (menghemat ruang disk)", + "symlinkDescription": "Membuat tautan simbolis alih-alih menyalin file. Hanya tersedia untuk server lokal.", + "process": { + "calculatingDigest": "Menghitung digest file", + "uploadingFile": "Mengunggah file", + "creatingSymlink": "Membuat symlink", + "creatingModel": "Membuat model" + }, + "success": "Model {modelName} berhasil diimpor", + "labels": { + "name": "Nama", + "file": "File", + "status": "Status", + "error": "Error" + }, + "status": { + "uploading": "Mengunggah", + "creating": "Membuat model", + "completed": "Selesai", + "error": "Error", + "cancelled": "Dibatalkan" + }, + "errors": { + "invalidFile": "Harap pilih file GGUF yang valid" + } + }, + "safetensorsImport": { + "tabTitle": "Impor Safetensors", + "title": "Impor Model Safetensors", + "description": "Pilih direktori yang berisi bobot model safetensors untuk diimpor ke {providerLabel}. Arsitektur yang didukung termasuk Gemma, Llama, Mistral, dan Phi.", + "activeImports": "Impor Aktif", + "noDirectorySelected": "Tidak ada direktori yang dipilih", + "selectDirectoryHint": "Direktori harus berisi file safetensors dan config.json", + "selectDirectoryTitle": "Pilih Direktori Safetensors", + "selectDirectory": "Pilih Direktori", + "chooseDifferentDirectory": "Pilih Direktori Lain", + "importModel": "Impor Model", + "modelName": "Nama Model", + "modelNamePlaceholder": "mis., model-kustom-saya", + "modelNameDescription": "Ini akan menjadi nama yang Anda gunakan untuk merujuk model dalam percakapan.", + "removeDirectory": "Hapus direktori", + "process": { + "scanningDirectory": "Memindai direktori", + "processingFile": "Memproses file {current} dari {total}", + "creatingModel": "Membuat model dari safetensors" + }, + "success": "Model {modelName} berhasil diimpor", + "labels": { + "name": "Nama", + "directory": "Direktori", + "status": "Status", + "error": "Error" + }, + "status": { + "uploading": "Mengunggah file", + "creating": "Membuat model", + "completed": "Selesai", + "error": "Error", + "cancelled": "Dibatalkan" + }, + "filesSelected": "file dipilih", + "errors": { + "desktopOnly": "Impor Safetensors hanya tersedia di aplikasi desktop", + "selectFailed": "Gagal memilih direktori", + "noValidFiles": "Tidak ada file safetensors yang valid ditemukan di direktori yang dipilih" + } + } + }, + "llamacppModels": { + "title": "Model LLaMA.cpp", + "activeDownloads": "{count} Unduhan LLaMA.cpp Aktif | {count} Unduhan LLaMA.cpp Aktif", + "alreadyInstalledErrorMessage": { + "summary": "Sudah Terinstal", + "detail": "Model LLaMA.cpp {modelName} sudah terinstal" + }, + "installSuccessMessage": { + "summary": "Model Siap", + "detail": "Model LLaMA.cpp {modelName} siap digunakan" + }, + "installErrorMessage": { + "summary": "Instalasi Gagal", + "detail": "Gagal menginstal model LLaMA.cpp {modelName}" + }, + "modelInstall": { + "successMessage": { + "detail": "Model LLaMA.cpp {modelName} terinstal" + }, + "errorMessage": { + "detail": "Gagal menginstal model LLaMA.cpp {modelName}" + }, + "abortedMessage": { + "detail": "Pengunduhan model LLaMA.cpp {modelName} dibatalkan" + } + }, + "abortInstallErrorMessage": { + "detail": "Gagal membatalkan unduhan model LLaMA.cpp" + }, + "abortInstallSuccessMessage": { + "detail": "Unduhan model LLaMA.cpp {modelName} dibatalkan" + }, + "uninstallErrorMessage": { + "summary": "Pencopotan Gagal", + "detail": "Gagal mencopot model LLaMA.cpp {modelName}" + }, + "uninstallSuccessMessage": { + "summary": "Model Dihapus", + "detail": "Model LLaMA.cpp {modelName} dicopot" + }, + "uninstallConfirmationMessage": { + "summary": "Copot Model LLaMA.cpp", + "detail": "Apakah Anda yakin ingin mencopot {modelName}?" + }, + "llamacppFeaturedModels": { + "title": "Model LLaMA.cpp Unggulan" + }, + "llamacppInstalledModels": { + "title": "Model LLaMA.cpp Terinstal" + }, + "llamacppCommunityModels": { + "title": "Model Komunitas LLaMA.cpp", + "description": "Jelajahi, cari, dan instal model GGUF langsung dari Hugging Face ke folder model LLaMA.cpp lokal Anda.", + "searchTitle": "Cari Model Komunitas LLaMA.cpp", + "searchPlaceholder": "Cari model LLaMA.cpp dari Hugging Face", + "searchPlaceholderAlt": "Temukan model GGUF yang kompatibel dengan LLaMA.cpp atau pilih salah satu keluarga model unggulan di bawah.", + "searching": "Mencari model LLaMA.cpp..." + } + }, + "mlxModels": { + "title": "Model MLX", + "notAppleSilicon": "Model MLX hanya didukung di Mac Apple Silicon (M1, M2, M3, M4, dll.). Perangkat Anda saat ini tidak kompatibel.", + "noCompatibleProviders": "Tidak ada penyedia MLX yang kompatibel tersedia. Harap tambahkan setidaknya satu penyedia MLX untuk menggunakan Model MLX.", + "activeDownloads": "{count} Unduhan MLX Aktif | {count} Unduhan MLX Aktif", + "learnMore": "Pelajari Lebih Lanjut tentang MLX", + "featured": { + "title": "Model MLX Unggulan" + }, + "installed": { + "title": "Model MLX Terinstal" + }, + "alreadyInstalledErrorMessage": { + "summary": "Sudah Terinstal", + "detail": "Model MLX {modelName} sudah terinstal" + }, + "deleteConfirmation": { + "header": "Copot Model MLX", + "message": "Apakah Anda yakin ingin mencopot {modelName}?", + "successMessage": { + "detail": "Model MLX dihapus" + }, + "errorMessage": { + "detail": "Gagal mencopot model MLX" + } + }, + "modelInstall": { + "successMessage": { + "detail": "Model MLX {modelName} siap digunakan" + }, + "errorMessage": { + "detail": "Gagal menginstal model MLX {modelName}" + }, + "abortedMessage": { + "detail": "Pengunduhan model MLX {modelName} dibatalkan" + } + }, + "mlxCommunityModels": { + "title": "Model Komunitas MLX", + "searchTitle": "Cari Model Komunitas MLX", + "searchPlaceholder": "Cari model MLX dari HuggingFace mlx-community", + "searchPlaceholderAlt": "Temukan model yang dioptimalkan MLX dari HuggingFace. Atau mulai dengan salah satu keluarga model di bawah.", + "searching": "Mencari model MLX..." + } + } + }, + "stickyPrompt": { + "title": "Prompt Lekat", + "disableStickyPrompt": "Nonaktifkan Prompt Lekat", + "editDialog": { + "title": "Edit Prompt Lekat", + "description": "Ketika prompt 'lekat' disematkan, itu ditambahkan ke awal setiap pesan baru sambil mengabaikan yang sebelumnya. Ini secara efektif membuat percakapan fokus pada satu konteks aktif. Prompt sistem selalu disertakan dalam konteks." + } + }, + "contextShield": { + "title": "@:context Perisai", + "enableContextShield": "Aktifkan @:contextShield.title", + "enableContextShieldWithSplitsSync": "Aktifkan @:contextShield.title{'.'} Tahan Option/Alt untuk @:contextShield.title semua split yang disinkronkan.", + "removeContextShield": "Hapus @:contextShield.title", + "removeContextShieldWithSplitsSync": "Nonaktifkan @:contextShield.title{'.'} Tahan Option/Alt untuk menghapus @:contextShield.title dari semua split yang disinkronkan.", + "breakContext": "Putuskan @:context", + "customContext": "@:context Kustom", + "generateContextSummary": "Buat @:context @:summary", + "contextSummary": "@:context @:summary", + "editContextSummary": "Edit @:context @:summary", + "regenerateContextSummary": "Buat Ulang @:context @:summary", + "clearContextSummary": "Bersihkan @:context @:summary", + "summaryDescriptionInfoHeader": "Ringkasan ini dihasilkan dari konteks percakapan di atas dan disertakan dalam konteks saat menghasilkan pesan baru di bawah perisai ini.", + "contextShieldWithSummary": "@:contextShield.title dengan @:summary" + }, + "data": "Data", + "advancedConfigurations": "Konfigurasi Lanjutan", + "applicationInfo": { + "title": "Info Aplikasi", + "appVersion": { + "title": "Versi Aplikasi", + "description": "Pembaruan terbaru diperiksa secara berkala dan Anda akan diberi tahu saat pembaruan baru tersedia. Anda juga dapat memeriksa pembaruan secara manual, yang kemudian akan menginstal pembaruan yang tersedia secara otomatis.", + "checkForUpdates": "Periksa dan Terapkan Pembaruan", + "enableAutoUpdates": "Aktifkan Pembaruan Otomatis", + "disableAutoUpdates": "Nonaktifkan Pembaruan Otomatis", + "viewChangelog": "Lihat Changelog", + "checkingForUpdates": "Memeriksa pembaruan...", + "errorCheckingUpdates": "Gagal memeriksa pembaruan", + "autoUpdatesEnabled": "Pembaruan otomatis diaktifkan", + "autoUpdatesDisabled": "Pembaruan otomatis dinonaktifkan", + "updateAvailable": "Pembaruan baru tersedia", + "updateDownloading": "Mengunduh pembaruan...", + "noUpdatesAvailable": "Anda menggunakan versi terbaru" + }, + "modelsInfo": { + "title": "Info Model", + "description": "Perbarui metadata model lokal Anda. Informasi ini mencakup detail tentang setiap model, tetapi bukan file model itu sendiri. Ini berlaku untuk model yang disimpan secara lokal maupun online.", + "fetchLatest": "Ambil Info Model Terbaru", + "updated": "Info model berhasil diperbarui", + "errorUpdating": "Gagal memperbarui info model" + }, + "appSettings": { + "title": "Pengaturan Aplikasi", + "description": "Mengatur ulang pengaturan aplikasi ke default dapat membantu menyelesaikan masalah potensial. Ini akan mengembalikan preferensi pengguna default, seperti tampilan dan jalur model, tetapi tidak akan menghapus data apa pun, termasuk obrolan atau model yang diunduh/diimpor.", + "resetApp": "Atur Ulang Pengaturan Aplikasi", + "resetConfirm": { + "header": "Atur Ulang Pengaturan Aplikasi", + "message": "Apakah Anda yakin ingin mengatur ulang semua pengaturan aplikasi ke default? Ini akan mengembalikan preferensi default tetapi tidak akan menghapus data Anda." + }, + "resetSuccess": "Pengaturan aplikasi berhasil diatur ulang", + "resetError": "Gagal mengatur ulang pengaturan aplikasi" + }, + "dataPaths": { + "title": "Jalur Data", + "description": "Semua data, termasuk model, percakapan, pengaturan, dan log, disimpan secara lokal di perangkat Anda. Hanya modifikasi isi direktori ini jika Anda terbiasa dengan struktur file aplikasi.", + "appData": "Data Aplikasi", + "appLogs": "Log Aplikasi", + "openInFinder": "Buka di Finder" + }, + "helpAndDiscussions": { + "title": "Bantuan & Diskusi", + "description": "Terhubung dengan komunitas kami di Discord untuk mendapatkan dukungan, berbagi umpan balik, dan tetap terinformasi.", + "sayHi": "Sapa Kami!", + "viewDocs": "Lihat Dokumen" + } + }, + "logViewer": { + "title": "Penampil Log", + "description": "Lihat dan analisis log aplikasi secara real-time. Gunakan filter dan pencarian untuk memecahkan masalah secara efisien.", + "searchPlaceholder": "Cari Log...", + "refresh": "Segarkan Log", + "autoRefreshOn": "Hentikan Penyegaran Otomatis", + "autoRefreshOff": "Aktifkan Penyegaran Otomatis", + "pause": "Hentikan Auto-Scroll", + "resume": "Lanjutkan Auto-Scroll", + "copy": "Salin Log ke Papan Klip", + "download": "Unduh Log", + "clearTemporarily": "Bersihkan Tampilan Log", + "clearPermanently": "Bersihkan File Log", + "showAllLogs": "Tampilkan Semua Log", + "clearPermanentlyConfirmation": { + "header": "Bersihkan File Log", + "message": "Apakah Anda yakin ingin membersihkan file log? Ini akan menghapus semua entri log secara permanen." + }, + "loading": "Memuat log...", + "noLogs": "Tidak ada log tersedia", + "noMatchingLogs": "Tidak ada log yang cocok dengan filter saat ini", + "totalLines": "{count} total baris | {count} total baris", + "filteredLines": "{count} baris terfilter | {count} baris terfilter", + "copiedToClipboard": "Log disalin ke papan klip", + "downloaded": "Log berhasil diunduh", + "clearedPermanently": "File log berhasil dibersihkan", + "errorLoading": "Gagal memuat log", + "errorCopying": "Gagal menyalin log", + "errorDownloading": "Gagal mengunduh log", + "errorClearing": "Gagal membersihkan log", + "levels": { + "all": "Semua Level", + "error": "Error", + "warn": "@:warning", + "info": "Info", + "debug": "Debug" + } + }, + "notifications": { + "title": "Notifikasi", + "description": "Tinjau dan kelola notifikasi aplikasi termasuk error, peringatan, dan peristiwa info.", + "searchPlaceholder": "Cari Notifikasi...", + "searchingAllLogs": "Mencari semua notifikasi di database", + "refresh": "Segarkan Notifikasi", + "autoRefreshOn": "Penyegaran Otomatis Diaktifkan", + "autoRefreshOff": "Aktifkan Penyegaran Otomatis", + "copy": "Salin Semua ke Papan Klip", + "copyLog": "Salin Notifikasi", + "download": "Unduh Notifikasi", + "clearPermanently": "Bersihkan Semua Notifikasi", + "clearPermanentlyConfirmation": { + "header": "Bersihkan Notifikasi", + "message": "Apakah Anda yakin ingin menghapus semua notifikasi secara permanen? Tindakan ini tidak dapat dibatalkan." + }, + "loading": "Memuat notifikasi...", + "loadingMore": "Memuat lebih banyak...", + "endOfList": "Akhir daftar", + "noLogs": "Tidak ada notifikasi tersedia", + "totalLogs": "{count} notifikasi | {count} notifikasi", + "displayedLogs": "Menampilkan {count}", + "copiedToClipboard": "Notifikasi disalin ke papan klip", + "downloaded": "Notifikasi berhasil diunduh", + "clearedPermanently": "Notifikasi berhasil dibersihkan", + "deleted": "Notifikasi berhasil dihapus", + "errorLoading": "Gagal memuat notifikasi", + "errorCopying": "Gagal menyalin notifikasi", + "errorDownloading": "Gagal mengunduh notifikasi", + "errorClearing": "Gagal membersihkan notifikasi", + "errorDeleting": "Gagal menghapus notifikasi", + "purge": { + "label": "Bersihkan Notifikasi", + "olderThan1Day": "Lebih dari 1 hari", + "olderThan7Days": "Lebih dari 7 hari", + "olderThan15Days": "Lebih dari 15 hari", + "olderThan30Days": "Lebih dari 30 hari", + "all": "Semua", + "confirmHeader": "Bersihkan Notifikasi", + "confirmMessageDays": "Apakah Anda yakin ingin menghapus notifikasi yang lebih dari {days} hari? Tindakan ini tidak dapat dibatalkan.", + "purge": "Bersihkan", + "purged": "Notifikasi berhasil dibersihkan", + "errorPurging": "Gagal membersihkan notifikasi" + }, + "levels": { + "all": "Semua Level", + "error": "Error", + "warn": "Peringatan", + "info": "Info" + } + }, + "sidebar": { + "expandGroup": "Perluas {group}", + "collapseGroup": "Ciutkan {group}", + "showExtraItems": "Tampilkan item tambahan", + "hideExtraItems": "Sembunyikan item tambahan", + "groups": { + "modelsPrompts": "Model & Prompt", + "personasTools": "Persona & Alat", + "knowledgeInsights": "Pengetahuan & Wawasan", + "system": "Sistem" + }, + "appUpdater": { + "version": "Versi {version}", + "restartToApply": "Mulai Ulang untuk Menerapkan Pembaruan", + "restart": "Mulai Ulang Sekarang", + "downloading": "Mengunduh Pembaruan...", + "viewChangelog": "Lihat Changelog", + "openingChangelog": "Membuka Changelog...", + "errorHint": "Error pembaruan - klik untuk detail", + "readyHint": "Pembaruan siap - mulai ulang untuk menerapkan", + "downloadingHint": "Mengunduh pembaruan... {percent}%", + "errorDialog": { + "header": "Error Pembaruan", + "message": "Terjadi kesalahan saat memperbarui: {error}", + "downloadManually": "Unduh Secara Manual" + } + } + }, + "showInNativeFileManager": { + "mac": "Tampilkan di Finder", + "win": "Tampilkan di File Explorer", + "lin": "Tampilkan di File Manager" + }, + "settings": { + "title": "Pengaturan", + "general": "Umum", + "defaultPrompts": "Prompt Default", + "fontSize": "@:size Font", + "teams": "Tim", + "appearance": "Tampilan", + "colorPreference": "Preferensi Warna", + "accentColor": "Warna Aksen", + "dark": "Gelap", + "light": "Terang", + "default": "Default | Default", + "system": "Sistem", + "baseColor": "Warna Dasar", + "emerald": "Zamrud", + "lime": "Limau", + "green": "Hijau", + "red": "Merah", + "orange": "Oranye", + "amber": "Amber", + "yellow": "Kuning", + "teal": "Teal", + "cyan": "Cyan", + "sky": "Langit", + "indigo": "Indigo", + "violet": "Violet", + "purple": "Ungu", + "fuchsia": "Fuchsia", + "pink": "Merah Muda", + "rose": "Mawar", + "slate": "Batu Tulis", + "gray": "Abu-abu", + "zinc": "Seng", + "stone": "Batu", + "sandy": "Pasir", + "lighter": "Lebih Terang", + "codeTheme": "Tema Kode", + "setupService": "Setup {service}", + "copyLocalURL": "Salin URL Lokal", + "prompts": { + "description": "Prompt ini membentuk bagaimana judul dihasilkan, kueri pencarian dibangun, pengetahuan diambil, dan konteks diringkas. Perubahan disimpan ke pengaturan global perangkat ini (database master) dan berlaku di semua ruang kerja (bukan per ruang kerja).", + "availablePrompts": "Prompt Tersedia", + "customized": "Dikustomisasi", + "customizedCount": "{count} dikustomisasi", + "modified": "Dimodifikasi", + "usingCustom": "Menggunakan Kustom", + "usingDefault": "Menggunakan Default", + "clickToEdit": "Klik untuk mengedit prompt", + "variables": "Variabel", + "lastModified": "Terakhir dimodifikasi", + "selectPrompt": "Pilih prompt untuk dikustomisasi", + "clearContent": "Bersihkan Konten", + "resetToDefault": "Atur Ulang ke Default", + "insertFromLibrary": "Sisipkan dari Perpustakaan", + "saveChanges": "Simpan Perubahan", + "discardChanges": "Buang Perubahan", + "categories": { + "generation": "Pembuatan Konten", + "search": "Pencarian & Sintesis", + "analysis": "Analisis & Ekstraksi" + } + }, + "licenseAndAccess": "Lisensi dan Akses", + "defaultRTD": { + "sectionTitle": "Pencarian Data Waktu Nyata", + "title": "Penyedia RTD Default", + "description": "Pilih penyedia pencarian Data Waktu Nyata default yang akan digunakan saat membuat percakapan baru.", + "saved": "{provider} ditetapkan sebagai penyedia RTD default", + "saveError": "Gagal menyimpan penyedia RTD default", + "noProvidersAvailable": "Tidak ada penyedia RTD tersedia", + "configureLabel": "Konfigurasi opsi lanjutan untuk", + "configSaved": "Konfigurasi disimpan untuk {provider}", + "mode": { + "title": "Mode RTD Default", + "description": "Atur mode RTD default untuk percakapan baru.", + "pushHint": "Percakapan baru akan menggunakan mode push secara default.", + "pullHint": "Percakapan baru akan menggunakan mode pull secara default.", + "pullGuardHint": "Mode pull memerlukan paket Aurum.", + "saveError": "Gagal menyimpan mode RTD default" + } + }, + "conversation": { + "title": "Percakapan", + "autoArchive": { + "title": "Arsipkan otomatis percakapan tidak aktif", + "description": "Secara otomatis memindahkan percakapan tidak aktif ke Arsip setelah jumlah hari yang dipilih. Gunakan Aktifkan arsip otomatis untuk menyalakannya. Jalankan arsip sekarang melakukan pembersihan satu kali menggunakan ambang hari saat ini.", + "enableLabel": "Aktifkan arsip otomatis", + "disableLabel": "Nonaktifkan arsip otomatis", + "enableHint": "Percakapan yang diarsipkan tetap dapat diakses dari bagian Arsip.", + "daysLabel": "Arsipkan setelah", + "suffix": "hari | hari", + "disabledHint": "Aktifkan atau nonaktifkan dari menu", + "runNowLabel": "Jalankan arsip sekarang", + "runNowDisabled": "Aktifkan arsip otomatis dan atur hari > 0 untuk menjalankan", + "runNowResult": "Mengarsipkan {count} percakapan | Mengarsipkan {count} percakapan", + "daysSaved": "Arsip otomatis diatur ke {days} hari | Arsip otomatis diatur ke {days} hari", + "enabledToast": "Arsip otomatis diaktifkan", + "disabledToast": "Arsip otomatis dinonaktifkan" + } + }, + "workspaceLock": { + "title": "Kunci Ruang Kerja & Enkripsi Rahasia", + "description": "Kunci ruang kerja Anda dengan frasa sandi sehingga pengaturan sensitif dan kunci API tetap tersembunyi sampai Anda membukanya. Buka sekali per sesi, putar frasa sandi kapan saja, atau matikan perlindungan jika Anda berubah pikiran.", + "experimentalInfo": "Enkripsi berbasis frasa sandi bersifat eksperimental. Harap simpan cadangan rahasia Anda sebelum mengaktifkan.", + "status": "Status:", + "locked": "Terkunci", + "unlocked": "Terbuka", + "lock": "Kunci", + "unlock": "Buka", + "protectedSection": "Ruang kerja dilindungi. Buka dengan frasa sandi Anda.", + "unprotected": "Tidak Dilindungi", + "unprotectedToast": "Kunci ruang kerja tidak dikonfigurasi. Atur frasa sandi terlebih dahulu.", + "unlockTitle": "Masukkan Frasa Sandi", + "cancel": "Batal", + "toastUnlocked": "Ruang kerja terbuka untuk sesi ini", + "toastLocked": "Ruang kerja terkunci", + "disable": "Nonaktifkan Enkripsi", + "disableHelp": "Masukkan frasa sandi untuk mendekripsi dan menonaktifkan enkripsi.", + "disableProtection": "Nonaktifkan Perlindungan", + "disableProtectionHelp": "Masukkan frasa sandi Anda untuk menonaktifkan perlindungan ruang kerja. Ini akan menghapus enkripsi dari rahasia dan kunci API yang tersimpan.", + "disableProtectionConfirmMessage": "Apakah Anda yakin ingin menonaktifkan perlindungan ruang kerja? Ini akan secara permanen mendekripsi semua rahasia terenkripsi dan kunci API di database Anda.", + "enableProtection": "Aktifkan Perlindungan", + "setPassphrase": "Atur Frasa Sandi", + "setPassphraseWarning": "Penting: Simpan frasa sandi Anda dengan aman. Anda tidak dapat memulihkan frasa sandi yang terlupa, dan tanpanya, Anda akan kehilangan akses ke data ruang kerja terenkripsi Anda.", + "changePassphrase": "Ubah Frasa Sandi", + "changePassphraseWarning": "Penting: Simpan frasa sandi baru Anda dengan aman. Anda tidak dapat memulihkan frasa sandi yang terlupa, dan tanpanya, Anda akan kehilangan akses ke data ruang kerja terenkripsi Anda.", + "updatePassphrase": "Perbarui Frasa Sandi", + "passphrase": "Frasa Sandi", + "passphraseCurrent": "Frasa sandi saat ini", + "passphraseNew": "Frasa sandi baru", + "passphraseConfirm": "Konfirmasi frasa sandi", + "errorMinLength": "Frasa sandi harus minimal 8 karakter", + "errorMismatch": "Frasa sandi tidak cocok", + "errorInvalid": "Input tidak valid", + "setupSuccess": "Frasa sandi dikonfigurasi", + "setupFailed": "Gagal mengkonfigurasi frasa sandi", + "rotateSuccess": "Frasa sandi diperbarui", + "rotateFailed": "Gagal memperbarui frasa sandi", + "disableConfirmMessage": "Dekripsi rahasia tersimpan dan hapus perlindungan ruang kerja?", + "disableSuccess": "Enkripsi dinonaktifkan", + "disableFailed": "Gagal menonaktifkan enkripsi", + "incorrectPassphrase": "Frasa sandi salah", + "lockedWithName": "{workspaceName} terkunci", + "switchBackTitle": "Tidak dapat membuka ruang kerja ini?", + "switchBackDescription": "Kembali ke {workspaceName} agar Anda dapat terus bekerja.", + "switchBackAction": "Kembali ke {workspaceName}", + "switchBackError": "Tidak dapat beralih ruang kerja. Silakan coba lagi." + }, + "dataBackup": { + "title": "Ekspor @:data", + "description": "Pilih tombol di bawah untuk mengekspor salinan data Anda untuk cadangan atau transfer ke perangkat lain. Data yang diekspor mencakup percakapan, prompt, model, pengaturan, dan data aplikasi lainnya di semua Ruang Kerja." + }, + "dataBackupReminderInterval": { + "title": "@:data Interval Pengingat Cadangan", + "description": "Seberapa sering mengingatkan Anda untuk mencadangkan data Anda." + }, + "dangerZone": { + "title": "Zona Bahaya", + "description": "Tindakan di bagian ini tidak dapat dibatalkan dan dapat mengakibatkan kehilangan data. Kami sarankan mengekspor salinan data Anda sebelum melakukan tindakan apa pun di sini.", + "clearData": { + "title": "Bersihkan Data", + "description": "Hapus secara permanen semua data aplikasi termasuk percakapan, prompt, model, pengaturan, dan informasi terkait lainnya di semua Ruang Kerja." + }, + "restoreData": { + "title": "Pulihkan @:data dari Cadangan", + "description": "Impor file zip data yang sebelumnya diekspor untuk memulihkan percakapan, prompt, model, pengaturan, dan data aplikasi lainnya di semua Ruang Kerja. Tindakan ini akan menimpa semua data yang ada." + } + }, + "dataMigrate": { + "action": "Migrasi", + "title": "Migrasi Msty App 1.x ke Studio", + "itemsToMigrate": { + "label": "Langkah 2: Pilih Item untuk Dimigrasi", + "action": "Pilih Item" + }, + "pointsToRemember": { + "activeWorkspace": "Anda dapat mengimpor Prompt Perpustakaan, Penyedia Model Jarak Jauh, Percakapan, dan Lampiran ke ruang kerja saat ini. Jika Anda ingin mengimpor ke ruang kerja lain, silakan beralih ke ruang kerja tersebut terlebih dahulu.", + "remoteModelProviders": "Migrasi penyedia model jarak jauh TIDAK akan membawa kunci API, mereka harus dimasukkan ulang. Beberapa model lawas mungkin tidak didukung di Studio.", + "attachmentsMigration": "Jika memigrasi lampiran, pertama-tama zip folder lampiran. Anda dapat memigrasi lampiran secara terpisah setelah memigrasi database atau bersama dengan database." + }, + "databaseMigration": { + "title": "Migrasi Database", + "label": "Langkah 1: Pilih File Database Msty App 1.x", + "action": "Seret dan lepas file Database Msty Anda", + "hint": "File database Msty App 1.x biasanya bernama `msty.db`" + }, + "attachmentsMigration": { + "title": "Migrasi Lampiran", + "migrate": "Migrasi Secara Terpisah", + "label": "Langkah 3: Tambah Folder Lampiran Terzip", + "success": "Berhasil memigrasi lampiran", + "error": "Gagal memigrasi lampiran", + "action": "Seret dan lepas folder lampiran terzip Anda", + "hint": "Zip seluruh folder lampiran dari Msty App 1.x. Setelah dipilih, Anda dapat memigrasi secara terpisah jika menambahkan setelah migrasi database." + }, + "missingDataWarning": { + "description": "Harap pilih file database dan setidaknya satu tabel untuk dimigrasi", + "title": "Data Hilang" + }, + "description": "Migrasi data Anda dari Msty App 1.x ke Studio. Data yang diimpor tidak akan menimpa data yang ada.", + "successMessage": "Berhasil memigrasi {item}", + "errorMessage": "Gagal memigrasi {item}", + "migrationInProgress": "Migrasi Sedang Berlangsung...", + "migrationComplete": "Migrasi {item} Selesai", + "migrationFail": "Migrasi {item} Gagal", + "migratingItem": "Memigrasi {item}...", + "migrationError": { + "title": "Error Migrasi", + "action": "Lihat Detail", + "message": "Pesan", + "cause": "Penyebab" + } + }, + "rtlSupport": { + "title": "Dukungan RTL", + "sectionDescription": "Aktifkan tata letak kanan-ke-kiri untuk bahasa seperti Arab, Ibrani, dan Persia. Seluruh ruang kerja diperbarui secara instan saat dialihkan.", + "toggleLabel": "Aktifkan Tata Letak RTL", + "enabledHint": "Tata letak kanan-ke-kiri aktif di seluruh aplikasi.", + "disabledHint": "Aplikasi saat ini menggunakan tata letak kiri-ke-kanan." + }, + "miniMap": { + "title": "Mini Map", + "description": "Aktifkan navigator pesan mini map inline dengan pratinjau cabang. Saat dinonaktifkan, navigator Atas/Bawah yang lebih sederhana digunakan." + }, + "branchBreadcrumbs": { + "title": "Breadcrumb Cabang", + "description": "Tampilkan bilah navigasi ringkas di bagian atas percakapan saat ada cabang." + }, + "spellcheck": { + "title": "Pemeriksaan Ejaan", + "description": "Aktifkan atau nonaktifkan pemeriksaan ejaan untuk bidang input teks. Menonaktifkan dapat membantu saat bekerja dengan banyak bahasa atau konten teknis. Pengaturan pemeriksa ejaan sistem operasi Anda mungkin menimpa preferensi ini. Mulai ulang aplikasi setelah mengubah pengaturan ini agar perubahan berlaku sepenuhnya." + }, + "language": { + "sectionTitle": "Bahasa & Lokalisasi", + "sectionDescription": "Beralih antara bahasa antarmuka, pratinjau mode pengembang, atau impor file lokal sementara. Jika Anda ingin berkontribusi terjemahan, silakan kunjungi https://github.com/cloudstack-llc/msty-studio-i18n", + "localeLabel": "Bahasa", + "downloadTemplate": "Unduh Template", + "downloadBuiltInLocale": "Unduh file lokal bawaan JSON ini.", + "downloadCustomLocale": "Unduh lokal kustom saat ini yang Anda impor.", + "downloadDeveloperTemplate": "Unduh template kosong berdasarkan lokal dasar.", + "importLocale": "Impor Lokal", + "importLocaleHint": "Lokal yang diimpor hanya bertahan sampai Anda memulai ulang atau menyegarkan aplikasi.", + "importSuccessSummary": "Lokal Diimpor", + "importSuccessDetail": "Sekarang menggunakan {code}. Tinjau antarmuka untuk mengkonfirmasi terjemahan.", + "importError": "Kami tidak dapat mengimpor file lokal itu. Pastikan itu JSON yang valid berdasarkan template.", + "developerMode": { + "label": "Mode Pengembang" + } + }, + "security": { + "title": "Keamanan", + "subtitle": "Konfigurasi pengaturan keamanan untuk aplikasi" + }, + "webSecurity": { + "title": "Nonaktifkan Keamanan Web", + "description": "Ini dapat membantu Anda menyelesaikan beberapa masalah terkait CORS. Namun, ini tidak disarankan dan dapat mengekspos aplikasi Anda ke risiko keamanan. Nonaktifkan hanya jika Anda tahu apa yang Anda lakukan. Anda harus memulai ulang aplikasi agar pengaturan ini berlaku.", + "applyAndRestart": "Terapkan & Mulai Ulang" + }, + "fontStyle": { + "title": "Gaya Font", + "galaxyFarAway": "Galaksi Jauh", + "everythingEverywhere": "Semuanya di Mana-mana", + "homeAlone": "Sendiri di Rumah", + "lordOfTheLoops": "Raja Perulangan" + }, + "renderingModules": { + "title": "Modul Rendering", + "selectPlaceholder": "@:pilih Modul Rendering" + }, + "remoteToolsConnector": { + "description": "Izinkan Msty Studio web terhubung ke perangkat ini untuk menjalankan alat jarak jauh dan mengakses model lokal. Layanan ini harus berjalan aktif untuk mengizinkan koneksi jarak jauh.", + "allowRemoteToolsConnection": "Aktifkan Layanan", + "connectionToken": { + "title": "Token Koneksi", + "rememberToken": "Ingat Token", + "placeholder": "Masukkan token koneksi yang kuat", + "description": "Token ini digunakan untuk mengautentikasi koneksi antara Msty Studio dan aplikasi ini saat terhubung dari jarak jauh. Anda dapat membuatnya ulang kapan saja untuk membatalkan token sebelumnya. Pastikan untuk menggunakan token yang kuat dan menjaganya tetap rahasia.", + "successMessage": { + "detail": "Layanan Jarak Jauh sekarang aktif" + }, + "errorMessage": { + "summary": "Error Mengaktifkan Konektor", + "detail": "Gagal mengaktifkan Layanan Jarak Jauh. Silakan periksa log untuk detail lebih lanjut" + }, + "copyConnectionInfo": "Salin URL Lokal", + "copyTunnelConnectionInfo": "Salin URL Tunnel", + "stopSuccessMessage": { + "detail": "Layanan Jarak Jauh sekarang dinonaktifkan" + } + }, + "enableTunneling": "Aktifkan Tunneling (Eksperimental)" + }, + "localAI": { + "notInstalled": { + "description": "Siapkan @:localAIService untuk menjalankan model AI secara lokal di perangkat Anda." + }, + "modelsLocation": { + "title": "Lokasi Model", + "description": "Konfigurasi di mana model AI Lokal Anda disimpan." + }, + "existingModels": { + "title": "Gunakan Model yang Ada", + "description": "Gunakan model yang sudah Anda miliki tanpa mengunduhnya lagi." + }, + "serviceConfigurations": { + "title": "@:service Konfigurasi", + "description": "Konfigurasi ini diterapkan ke @:localAIService saat dimulai. @:localAIService akan otomatis dimulai ulang setelah Anda menyimpan perubahan apa pun.", + "configurePortNumber": { + "title": "Konfigurasi Nomor Port", + "description": "Nomor port untuk @:localAIService{'.'} Kosongkan untuk menggunakan default." + }, + "maximumParallelChats": { + "title": "Chat Paralel Maksimum", + "description": "Jumlah maksimum sesi obrolan bersamaan (saat menggunakan mode split)." + }, + "maximumLoadedModels": { + "title": "Model Dimuat Maksimum", + "description": "Jumlah maksimum LLM yang dimuat pada saat yang sama. Menyimpan lebih banyak model dalam memori mempercepat respons awal tetapi menggunakan lebih banyak sumber daya sistem." + }, + "enableNetworkAccess": { + "title": "Aktifkan Akses Jaringan", + "description": "Izinkan perangkat lain di jaringan Anda mengakses @:localAIService ini melalui alamat IP perangkat ini." + }, + "allowedNetworkOrigins": { + "title": "Asal Jaringan yang Diizinkan", + "description": "Daftar asal jaringan yang diizinkan di sini (dipisahkan koma). Setiap entri harus dimulai dengan http:// atau https://. Gunakan * untuk mengizinkan semua asal.", + "placeholder": "mis. https://msty.studio, http://localhost:3000, *" + }, + "allowMstyStudioAccess": { + "title": "Izinkan Akses dari Msty Studio", + "description": "Izinkan koneksi dari Msty Studio Web ke aplikasi ini sehingga dapat mengakses @:localAIService{'.'}" + }, + "captureServiceLogs": { + "title": "Tangkap @:service Log", + "description": "Aktifkan logging untuk menangkap data layanan untuk debugging. Gunakan opsi ini hanya jika diperlukan." + }, + "advancedConfiguration": { + "description": "Masukkan JSON yang valid untuk mengatur variabel lingkungan untuk @:localAIService{'.'}" + }, + "unsavedChanges": { + "message": "Anda memiliki perubahan yang belum disimpan dalam Konfigurasi @:localAIService. Setelah Anda menyimpan, @:localAIService akan dimulai ulang dengan konfigurasi baru.", + "saveChanges": "Simpan Perubahan dan Mulai Ulang Layanan", + "successMessage": { + "detail": "Konfigurasi @:localAIService disimpan dan layanan dimulai ulang" + }, + "errorMessage": { + "detail": "Gagal menyimpan Konfigurasi @:localAIService. Silakan periksa log untuk detail lebih lanjut." + } + } + }, + "modelConfigurations": { + "title": "@:model Konfigurasi", + "description": "Konfigurasi ini diterapkan ke semua model selama sesi obrolan.", + "keepAliveTimeout": { + "title": "Timeout Keep-Alive Model", + "description": "Waktu (dalam menit) setelah model akan dibongkar dari memori jika tidak digunakan." + }, + "advancedConfiguration": { + "description": "Masukkan JSON yang valid untuk meneruskan parameter tambahan ke model selama sesi obrolan." + }, + "unsavedChanges": { + "message": "Anda memiliki perubahan yang belum disimpan dalam @:settings.localAI.modelConfigurations.title{'.'} Pastikan untuk menyimpannya sebelum memulai sesi obrolan baru.", + "successMessage": { + "detail": "@:settings.localAI.modelConfigurations.title disimpan" + }, + "errorMessage": { + "detail": "Gagal menyimpan @:settings.localAI.modelConfigurations.title. Silakan periksa log untuk detail lebih lanjut." + } + } + }, + "openSettings": "Buka Pengaturan AI Lokal", + "manageModels": { + "title": "Kelola Model AI Lokal", + "description": "Jelajahi, instal, dan kelola model AI untuk inferensi lokal.", + "openModelHub": "Buka Hub Model AI Lokal" + } + }, + "vibeCliProxy": { + "shortTitle": "Vibe CLI Proxy", + "title": "Vibe CLI Proxy", + "subtitle": "Proxy terpadu untuk asisten coding AI. Hubungkan ke Claude Code, ChatGPT, Gemini, Qwen Code melalui satu endpoint lokal.", + "install": { + "copy": "Menginstal biner CLIProxyAPI untuk menghubungkan asisten coding AI (Claude Code, ChatGPT, Gemini, Qwen) melalui proxy lokal dengan autentikasi OAuth.", + "button": "Instal Vibe CLI Proxy" + }, + "health": { + "description": "Mulai atau hentikan layanan Vibe CLI Proxy." + }, + "endpoint": { + "title": "Endpoint Layanan", + "description": "Gunakan endpoint ini untuk permintaan kompatibel OpenAI yang dirutekan melalui Vibe CLI Proxy.", + "network": "Host jaringan: {host}", + "copied": "Endpoint disalin" + }, + "version": { + "title": "Versi", + "description": "Versi CLIProxyAPI yang terinstal.", + "current": "Versi saat ini", + "reinstall": "Instal Ulang", + "unknown": "Tidak terinstal" + }, + "configs": { + "title": "Konfigurasi Layanan", + "description": "Konfigurasi port, direktori autentikasi, dan akses jaringan untuk proxy.", + "port": "Port", + "retries": "Percobaan Ulang", + "authDir": "Direktori auth", + "enableNetworkAccess": "Aktifkan akses jaringan", + "enableNetworkAccessHelp": "Izinkan perangkat lain di jaringan mencapai proxy.", + "captureLogs": "Tangkap log layanan", + "captureLogsHelp": "Simpan log proxy untuk pemecahan masalah (dapat meningkatkan penggunaan disk).", + "enableRemoteManagement": "Aktifkan manajemen jarak jauh", + "enableRemoteManagementHelp": "Ekspos endpoint manajemen; memerlukan kunci rahasia.", + "managementKey": "Kunci rahasia manajemen", + "updated": "Konfigurasi Vibe CLI Proxy diperbarui", + "failed": "Gagal memperbarui konfigurasi Vibe CLI Proxy", + "portDescription": "Port lokal tempat layanan proxy mendengarkan permintaan.", + "retriesDescription": "Jumlah percobaan ulang untuk permintaan upstream yang gagal.", + "authDirDescription": "Direktori tempat token autentikasi disimpan.", + "managementKeyDescription": "Kunci rahasia yang diperlukan untuk operasi manajemen jarak jauh." + }, + "authPath": { + "title": "Folder Auth", + "description": "Jalur tempat Vibe CLI Proxy menyimpan token OAuth untuk penyedia yang terhubung. Dikelola secara otomatis; tidak dapat diedit." + }, + "authStatus": { + "title": "Autentikasi", + "description": "Tautkan akun AI Anda dengan aman sehingga Vibe CLI Proxy dapat memanggil API mereka atas nama Anda. Saat Anda terhubung, jendela browser terbuka untuk penyedia tersebut tempat Anda menyelesaikan masuk.", + "connecting": "Membuka browser untuk OAuth…", + "browser": "Selesaikan autentikasi di browser Anda, lalu kembali ke sini.", + "failed": "Gagal memulai alur OAuth", + "deviceCodeTitle": "Otorisasi Perangkat", + "deviceCodeInstructions": "Masukkan kode di bawah di halaman otorisasi untuk menyelesaikan autentikasi.", + "copyCode": "Salin Kode", + "codeCopied": "Kode disalin ke papan klip", + "openGitHub": "Buka GitHub" + }, + "setup": { + "disclaimer": "Penting: Vibe CLI Proxy adalah proxy lokal ke agen coding CLI pihak ketiga. Dengan melanjutkan, Anda menerima tanggung jawab penuh atas kepatuhan terhadap ketentuan layanan masing-masing penyedia AI. Gunakan dengan risiko Anda sendiri. Msty tidak bertanggung jawab atas masalah akun atau pelanggaran layanan yang mungkin timbul." + } + }, + "mlx": { + "notInstalled": { + "description": "Atur @:mlxService untuk menjalankan model AI yang dioptimalkan di Mac Apple Silicon Anda." + }, + "modelsLocation": { + "title": "Lokasi Model", + "description": "Konfigurasi di mana model MLX Anda disimpan." + }, + "existingModels": { + "title": "Gunakan Model yang Ada", + "description": "Gunakan model yang sudah Anda miliki tanpa mengunduhnya lagi." + }, + "openSettings": "Buka Pengaturan MLX", + "manageModels": { + "title": "Kelola Model MLX", + "description": "Jelajahi, instal, dan kelola model MLX yang dioptimalkan untuk Apple Silicon.", + "openModelHub": "Buka Hub Model MLX" + }, + "compatibility": { + "title": "Kompatibilitas Sistem", + "description": "Periksa apakah sistem Anda kompatibel dengan MLX.", + "checkAgain": "Periksa Lagi", + "status": { + "notChecked": "Belum diperiksa", + "compatible": "Kompatibel", + "notCompatible": "Tidak kompatibel" + }, + "requirements": { + "title": "Persyaratan MLX:", + "appleSilicon": "Mac Apple Silicon (M1, M2, M3, M4)", + "macOS13": "macOS 13.0 atau lebih baru", + "unifiedMemory": "Arsitektur memori terpadu" + } + } + }, + "llamacpp": { + "notInstalled": { + "description": "Atur @:llamacppService untuk menjalankan model AI yang efisien di Windows, macOS, dan Linux." + }, + "modelsLocation": { + "title": "Lokasi Model", + "description": "Konfigurasi di mana model LLaMA.cpp Anda disimpan." + }, + "existingModels": { + "title": "Gunakan Model yang Ada", + "description": "Gunakan model yang sudah Anda miliki tanpa mengunduhnya lagi." + }, + "openSettings": "Buka Pengaturan LLaMA.cpp", + "manageModels": { + "title": "Kelola Model LLaMA.cpp", + "description": "Jelajahi, instal, dan kelola model LLaMA.cpp untuk inferensi lintas platform.", + "openModelHub": "Buka Hub Model LLaMA.cpp" + }, + "compatibility": { + "title": "Kompatibilitas Sistem", + "description": "Periksa apakah sistem Anda kompatibel dengan LLaMA.cpp.", + "checkAgain": "Periksa Lagi", + "status": { + "notChecked": "Belum diperiksa", + "compatible": "Kompatibel", + "notCompatible": "Tidak kompatibel", + "requiresDesktop": "LLaMA.cpp memerlukan aplikasi desktop" + }, + "systemInfo": { + "title": "Informasi Sistem", + "platform": "Platform", + "architecture": "Arsitektur", + "memory": "Memori Tersedia", + "gpu": "GPU" + }, + "requirements": { + "title": "Persyaratan LLaMA.cpp:", + "desktop": "Aplikasi desktop (Windows, macOS, atau Linux)", + "memory": "Minimal 4GB RAM (8GB+ direkomendasikan)", + "storage": "Penyimpanan cukup untuk model (bervariasi berdasarkan ukuran model)", + "gpu": "Opsional: GPU untuk akselerasi (CUDA, Metal, OpenCL)" + } + }, + "serviceConfigurations": { + "threads": { + "title": "Thread CPU", + "description": "Jumlah thread CPU yang digunakan selama inferensi. Atur ke -1 untuk deteksi otomatis berdasarkan sistem Anda (dipetakan ke flag --threads)." + }, + "concurrentRequests": { + "title": "Permintaan Bersamaan", + "description": "Jumlah obrolan yang dapat berjalan pada saat yang sama per model (dipetakan ke flag --parallel). Dengan parallel=2, setiap obrolan mendapat setengah ukuran konteks.", + "inputLabel": "Permintaan bersamaan" + }, + "advancedConfiguration": { + "description": "Masukkan JSON yang valid untuk mengatur variabel lingkungan untuk proses llama-server. Variabel ini memiliki prioritas lebih rendah daripada argumen CLI yang diatur dalam Konfigurasi Layanan dan Model." + } + }, + "modelConfigurations": { + "title": "@:model Konfigurasi", + "description": "Konfigurasi ini diterapkan ke semua model selama sesi obrolan.", + "keepAliveTimeout": { + "title": "Timeout Keep-Alive Model", + "description": "Waktu (dalam menit) setelah model akan dibongkar dari memori jika tidak digunakan." + }, + "unsavedChanges": { + "message": "Anda memiliki perubahan yang belum disimpan dalam @:settings.llamacpp.modelConfigurations.title{'.'} Pastikan untuk menyimpannya sebelum memulai sesi obrolan baru.", + "successMessage": { + "detail": "@:settings.llamacpp.modelConfigurations.title disimpan" + }, + "errorMessage": { + "detail": "Gagal menyimpan @:settings.llamacpp.modelConfigurations.title. Silakan periksa log untuk detail lebih lanjut." + } + } + } + } + }, + "mlx": "MLX", + "mlxService": "@:mlx Layanan", + "llamacpp": "LLaMA.cpp", + "llamacppService": "@:llamacpp Layanan", + "settingsAndConfigs": "Pengaturan dan Konfigurasi", + "prompts": "Prompt", + "apiKeys": "Kunci API", + "workspaces": { + "createNewWorkspace": "Buat Ruang Kerja Baru", + "switchWorkspace": "Beralih Ruang Kerja", + "switchToCustomWorkspace": "Beralih ke Ruang Kerja {workspaceName}", + "hideWorkspaceTray": "Sembunyikan Baki Ruang Kerja", + "showWorkspaceTray": "Tampilkan Baki Ruang Kerja", + "switchAction": { + "successMessage": { + "summary": "Ruang Kerja beralih!", + "detail": "{workspaceName} sekarang menjadi ruang kerja aktif" + } + }, + "deleteWorkspace": "Hapus Ruang Kerja", + "workspaceIsActive": "Ruang Kerja {workspaceName} aktif", + "currentActiveWorkspace": "Ruang Kerja aktif Anda saat ini adalah: {workspaceName}", + "workspaceForm": { + "newTitle": "Ruang Kerja Baru", + "editTitle": "Edit Ruang Kerja", + "workspaceName": "Nama Ruang Kerja", + "whatToCopy": "Apa yang akan disalin dari ruang kerja {activeWorkspace}?", + "copyDisabledForLockedWorkspace": "Menyalin item dinonaktifkan karena ruang kerja aktif memiliki frasa sandi.", + "createAndSwitch": "Buat dan Beralih", + "createOnly": "Buat dan Tetap", + "duplicateWorkspaceName": "Nama ruang kerja sudah ada", + "invalidWorkspaceName": "Nama ruang kerja tidak valid atau duplikat", + "updateSuccessMessage": { + "detail": "Ruang Kerja diperbarui" + }, + "updateErrorMessage": { + "detail": "Gagal memperbarui Ruang Kerja" + }, + "createAndSwitchSuccessMessage": { + "detail": "Ruang Kerja dibuat dan beralih" + }, + "createSuccessMessage": { + "detail": "Ruang Kerja dibuat" + }, + "createErrorMessage": { + "detail": "Gagal membuat Ruang Kerja" + } + }, + "deleteConfirmation": { + "header": "Hapus Ruang Kerja", + "message": "Apakah Anda yakin ingin menghapus {workspaceName}? Semua data yang terkait dengan ruang kerja ini akan dihapus. Tindakan ini tidak dapat dibatalkan.", + "downloadWorkspaceData": "@:download Ruang Kerja @:data", + "successMessage": { + "detail": "Ruang Kerja {workspaceName} dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus Ruang Kerja" + } + }, + "exportWorkspace": { + "title": "Ekspor Ruang Kerja", + "successMessage": { + "detail": "Data ruang kerja {workspaceName} diekspor sebagai {fileName}" + }, + "errorMessage": { + "detail": "Gagal mengekspor Ruang Kerja {workspaceName}" + } + }, + "importWorkspace": { + "title": "@:import Ruang Kerja", + "dragAndDropMessage": "Seret dan lepas file Msty Workspace terkompresi untuk mengimpor dan membuat Ruang Kerja baru. Jika ada nama duplikat, ruang kerja yang diimpor akan diganti namanya. Anda dapat mengubahnya nanti.", + "successMessage": { + "detail": "Ruang Kerja {workspaceName} telah diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor Ruang Kerja" + } + } + }, + "attachments": { + "title": "Lampiran", + "documents": "Dokumen", + "images": "Gambar", + "webpages": "Halaman Web", + "youTubeLinks": "Tautan YouTube", + "dropThem": "Lepaskan!", + "selectAll": "@:pilih semua", + "deselectAll": "Batalkan semua pilihan", + "dragAnDropHere": "Seret-dan-lepas {attachmentType} di sini", + "addNew": "Tambah Lampiran Baru", + "addDocumentTypes": "Tambah {documentTypes} serta beberapa file kode lainnya", + "addImageTypes": "Tambah gambar .png, .jpg, atau jpeg", + "dragAndDropOrBrowseMore": "Seret-dan-lepas atau jelajahi lebih banyak", + "commaSeparatedUrls": "atau tempel URL yang dipisahkan koma", + "manageTooltip": "Klik untuk mengelola {attachmentType} yang dilampirkan", + "modelMayNotSupportImages": "Model yang dipilih mungkin tidak mendukung lampiran gambar.", + "clickToInstallVisionCapabilities": "Klik untuk menginstal kemampuan visi.", + "checkingVisionCapabilities": "Memeriksa kemampuan visi...", + "installingVision": "Menginstal kemampuan visi...", + "documentsAttachedCount": "{count} dokumen dilampirkan | {count} dokumen dilampirkan", + "imagesAttachedCount": "{count} gambar dilampirkan | {count} gambar dilampirkan", + "webpagesAttachedCount": "{count} halaman web dilampirkan | {count} halaman web dilampirkan", + "webpageLinks": "tautan halaman web | tautan halaman web", + "holdKeyToShareWithSyncedSplits": "Tahan {key} untuk berbagi dengan Split Tersinkron", + "youTubeLinksAttachedCount": "{count} tautan YouTube dilampirkan | {count} tautan YouTube dilampirkan", + "dropFiles": { + "errorMessage": { + "detail": "Gagal melampirkan file" + } + }, + "dropWebpages": { + "errorMessage": { + "detail": "Gagal melampirkan halaman web" + } + }, + "dropYouTubeLinks": { + "errorMessage": { + "detail": "Gagal mengimpor info tautan YouTube. {errorMessage}" + } + }, + "detachAll": { + "title": "Lepaskan semua", + "confirm": { + "header": "Lepaskan Semua", + "message": "Apakah Anda yakin ingin melepaskan semua {attachmentType}? {attachmentType} ini tidak akan tersedia lagi di percakapan di semua split.", + "acceptLabel": "@:delete" + }, + "maxResult": { + "title": "Hasil Maksimum" + }, + "successMessage": { + "detail": "Lampiran dilepaskan" + } + } + }, + "jinaAPI": { + "manageJinaAPIKeys": "Kelola kunci", + "jinaApiKeyRequired": "Kunci API Jina yang valid diperlukan untuk menggunakan fitur ini. Anda dapat mengunjungi tautan berikut untuk mendapatkannya secara gratis:", + "willUseJina": { + "description": "Anda saat ini memiliki {count} kunci API Jina yang ditambahkan. Anda dapat menambahkan lebih banyak kunci dan Msty akan memilih kunci valid secara acak untuk digunakan dalam permintaan." + }, + "jinaAPIKeyForm": { + "newTitle": "Kunci API Jina Baru", + "editTitle": "Edit Kunci API Jina", + "availableKeys": "Kunci Tersedia", + "reVerifyKey": "Kunci {status}. Klik untuk verifikasi ulang", + "verifyKeyAndAdd": "Verifikasi Kunci dan Tambah", + "newDescription": "Tambahkan kunci API Jina baru untuk digunakan dengan endpoint Jina Reader dan Search. Anda dapat menambahkan beberapa kunci dan memverifikasinya untuk memastikan valid. Saat menggunakan kunci, Msty akan memilih kunci valid secara acak untuk digunakan dalam permintaan.", + "keyIsGood": { + "summary": "Semua Baik!", + "detail": "Kunci tampaknya valid dan siap digunakan" + }, + "successMessage": { + "detail": "Kunci API Jina ditambahkan" + }, + "errorMessage": { + "summary": "Error{status}!", + "detail": "Gagal menambahkan Kunci API Jina. Harap periksa kunci API dan pastikan valid." + } + }, + "tokenBudget": { + "title": "Anggaran Token", + "description": "Jumlah maksimum token yang digunakan untuk permintaan API Jina. Ini membantu mengontrol biaya dan panjang respons." + } + }, + "rtd": { + "title": "Data Waktu Nyata", + "enableRTD": "Klik untuk mengalihkan RTD; klik dua kali untuk mengkonfigurasi", + "contexts": "@:rtd.title Konteks", + "removeSource": { + "successMessage": { + "detail": "Sumber dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus sumber" + } + }, + "updateSource": { + "errorMessage": { + "detail": "Gagal memperbarui sumber" + } + }, + "searchProvider": "Penyedia Pencarian", + "jina": "Jina", + "useRemoteConnector": "Gunakan @:remoteToolsConnector.title", + "noSources": "Tidak ada sumber tersedia", + "settings": { + "maxResult": { + "title": "Hasil Maksimum" + }, + "saveAsDefaultProvider": { + "title": "Simpan {providerName} sebagai penyedia pencarian default", + "successMessage": { + "summary": "{providerName} sudah!", + "detail": "{providerName} sekarang menjadi penyedia pencarian default" + } + }, + "autoWithFallback": "Otomatis dengan Fallback", + "google": "Google", + "brave": "Brave", + "ecosia": "Ecosia", + "customSearchQuery": { + "title": "Kueri Pencarian Kustom", + "placeholder": "Kueri ini akan digunakan untuk pencarian. Kosongkan untuk menggunakan prompt sebagai kueri" + }, + "limitByDomain": { + "title": "Batasi berdasarkan Domain", + "placeholder": "mis. reddit.com atau gov atau (site:reddit.com OR site:gov)", + "commaDelimitedPlaceholder": "Masukkan domain yang dipisahkan koma mis. reddit.com,wikipedia.com" + }, + "extraOperators": { + "title": "Operator Tambahan" + }, + "dateRange": { + "title": "Rentang Tanggal Pencarian", + "placeholder": "Setelah tanggal - Sebelum tanggal" + }, + "successMessage": { + "detail": "@:rtd.title Diaktifkan" + }, + "types": { + "api": "API", + "rtc": "@:remoteToolsConnector.title" + } + }, + "useJinaLabel": "Gunakan @:rtd.jina", + "google": { + "useLabel": "Gunakan @:rtd.settings.google", + "apiKey": { + "placeholder": "@:rtd.settings.google @:apiKey" + }, + "cseIdLabel": "ID Mesin Pencari Kustom", + "cseIdPlaceholder": "@:rtd.settings.google @:rtd.google.cseIdLabel" + }, + "brave": { + "useLabel": "Gunakan @:rtd.settings.brave", + "resultFilter": "Filter Hasil", + "apiKey": { + "placeholder": "@:rtd.settings.brave @:apiKey" + } + }, + "searXng": { + "title": "SearXNG", + "engines": { + "title": "Mesin", + "placeholder": "Daftar mesin yang dipisahkan koma untuk digunakan mis. google, brave dll." + }, + "extraParams": { + "title": "Params Tambahan", + "placeholder": "Tambahkan params tambahan. Harus berupa objek JSON yang valid." + }, + "notice": "Server SearXNG Anda harus mengaktifkan JSON serta dilayani melalui HTTPS. Untuk solusi melalui HTTP di beberapa browser, lihat dokumen kami di https://docs.msty.studio", + "useLabel": "Gunakan @:rtd.searXng.title" + }, + "tavily": { + "title": "Tavily", + "useLabel": "Gunakan @:rtd.tavily.title", + "searchTopic": { + "title": "Topik Pencarian", + "placeholder": "Kategori pencarian", + "general": "Umum", + "news": "Berita", + "finance": "Keuangan" + }, + "apiKey": { + "placeholder": "Masukkan @:rtd.tavily.title @:apiKey" + }, + "searchDepth": { + "title": "Kedalaman Pencarian", + "placeholder": "Kedalaman pencarian", + "advanced": "Lanjutan", + "basic": "Dasar" + }, + "timeRange": { + "title": "Rentang Waktu", + "placeholder": "Rentang waktu mundur dari tanggal saat ini" + } + }, + "exa": { + "title": "Exa", + "useLabel": "Gunakan @:rtd.exa.title", + "apiKey": { + "placeholder": "Masukkan @:rtd.exa.title @:apiKey" + } + }, + "ollama": { + "title": "Ollama", + "useLabel": "Gunakan @:rtd.ollama.title", + "apiKey": { + "placeholder": "Masukkan @:rtd.ollama.title @:apiKey" + } + }, + "disableRTD": { + "label": "Nonaktifkan @:rtd.title", + "successMessage": { + "detail": "@:rtd.title dinonaktifkan" + }, + "errorMessage": { + "detail": "Gagal menonaktifkan @:rtd.title" + } + } + }, + "remoteToolsConnector": { + "title": "Layanan Jarak Jauh", + "connectionRequired": "Untuk menggunakan fitur ini, Anda perlu terhubung dengan @:remoteToolsConnector.title{'.'}", + "experimentalInfo": "RTD bersifat eksperimental dan mungkin tidak berfungsi seperti yang diharapkan.", + "isConnectedTooltip": "@:remoteToolsConnector.title - Terhubung", + "isDisconnectedTooltip": "@:remoteToolsConnector.title - Terputus", + "connectNow": "@:connect dengan @:remoteToolsConnector.title", + "connectFirst": "@:connect @:remoteToolsConnector.title dahulu", + "reconnectNow": "@:reconnect dengan @:remoteToolsConnector.title", + "disconnectNow": "@:disconnect Sekarang", + "checkHealth": "Periksa Kesehatan Koneksi", + "connectionDetails": "Edit Detail Koneksi", + "noPermissionPolicy": "Anda tidak memiliki izin untuk mengakses fitur ini", + "connect": { + "form": { + "title": "Hubungkan ke @:remoteToolsConnector.title", + "saveAndConnect": "Simpan dan Hubungkan", + "rememberConnectionInfo": "Ingat @:connectionInfo" + }, + "import": { + "title": "@:import @:connectionInfo", + "dragAndDropMessage": "Seret dan lepas file Konfigurasi Koneksi Jarak Jauh Msty untuk mengimpor dan terhubung ke @:remoteToolsConnector.title{'.'}", + "successMessage": { + "detail": "@:connectionInfo diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor @:connectionInfo" + } + }, + "export": { + "title": "Ekspor @:connectionInfo Tersimpan", + "successMessage": { + "detail": "@:connectionInfo diekspor" + }, + "errorMessage": { + "detail": "Gagal mengekspor @:connectionInfo" + } + }, + "successMessage": { + "summary": "Terhubung!", + "detail": "@:remoteToolsConnector.title terhubung di {url}" + }, + "errorMessage": { + "detail": "Gagal terhubung dengan @:remoteToolsConnector.title{'.'} Pastikan @:remoteToolsConnector.title berjalan dan dapat diakses di URL yang disediakan.", + "tokenMissing": "Token tidak ada. Harap periksa token dan coba lagi." + }, + "forgetConnectionInfo": "Lupakan @:connectionInfo Sebelumnya", + "forgetSuccessMessage": { + "detail": "@:connectionInfo dilupakan" + }, + "toolCommandPaths": { + "title": "Jalur Perintah Alat", + "description": "Jika Anda menggunakan Toolset, atur jalur ke perintah yang Anda gunakan.", + "selectPlaceholder": "@:pilih atau masukkan perintah", + "pathPlaceholder": "Masukkan jalur lengkap ke perintah", + "assignPath": "Tetapkan @:path" + } + }, + "disconnect": { + "successMessage": { + "summary": "Terputus!", + "detail": "Terputus dari @:remoteToolsConnector.title" + } + } + }, + "forge": { + "forgeMode": { + "title": "Mode Forge", + "description": "Mode Forge memberi Anda kanvas kosong dan penulis yang kuat untuk membuat, mengedit, menata, dan menyempurnakan konten dengan bebas." + }, + "title": "Forge", + "forgeContent": "@:forge.title Konten", + "forgingContent": "Menempa Konten", + "editRawMarkdown": "Edit Markdown Mentah", + "editAsBranch": "Edit sebagai Cabang", + "disabledEditRawMarkdown": "Konten ini telah ditempa. Pengeditan markdown mentah tidak diizinkan.", + "saveChanges": { + "title": "Simpan Perubahan", + "successMessage": { + "detail": "Perubahan disimpan" + }, + "errorMessage": { + "detail": "Gagal menyimpan perubahan" + } + }, + "placeholders": { + "writeSomething": "Tulis sesuatu atau ketik / untuk opsi...", + "detailsSummary": "Masukkan ringkasan detail" + }, + "prompts": { + "simplify": "Sederhanakan", + "fixSpellingAndGrammar": "Perbaiki Ejaan & Tata Bahasa", + "makeShorter": "Buat Lebih Pendek", + "makeLonger": "Buat Lebih Panjang", + "tldr": "TL;DR;", + "emojify": "Emojify", + "changeTone": { + "title": "@:change Nada", + "academic": "Akademis", + "business": "Bisnis", + "casual": "Santai", + "childFriendly": "Ramah Anak", + "conversational": "Percakapan", + "emotional": "Emosional", + "humorous": "Humoris", + "informative": "Informatif", + "inspirational": "Inspiratif", + "professional": "Profesional", + "narrative": "Naratif", + "objective": "Objektif", + "persuasive": "Persuasif", + "poetic": "Puitis" + } + }, + "clearFormatting": "Bersihkan Pemformatan", + "bold": "Tebal", + "italic": "Miring", + "underline": "Garis Bawah", + "strikethrough": "Coret", + "code": "Kode", + "codeBlock": "Blok Kode", + "blockQuote": "Kutipan Blok", + "undo": "Undo", + "redo": "Redo", + "texts": "Teks", + "paragraph": "Paragraf", + "heading1": "Judul 1", + "heading2": "Judul 2", + "heading3": "Judul 3", + "lists": "Daftar", + "bulletList": "Daftar Poin", + "numberedList": "Daftar Bernomor", + "taskList": "Daftar Tugas", + "whatToForgePlaceholder": "Apa yang ingin Anda tempa hari ini?", + "forgeWriter": "Penulis Forge", + "inlinePrompt": { + "placeholder": "Ketik prompt kustom Anda...", + "ask": "Tanya", + "askTooltip": "Minta model untuk menghasilkan respons berdasarkan prompt kustom" + }, + "forgeCanvas": "@:forge.title Kanvas", + "newForgeCanvas": "@:forge.forgeCanvas Baru", + "addNewForgeCanvas": "Tambah @:forge.forgeCanvas Baru" + }, + "preview": "Pratinjau", + "prompt": "Prompt | Prompt", + "discard": "Buang", + "insert": "Sisipkan", + "regenerate": "Buat Ulang", + "rewrite": "Tulis Ulang", + "exit": "Keluar", + "customPrompt": "Prompt Kustom", + "markdown": "Markdown", + "json": "JSON", + "html": "HTML", + "formatted": "Terformat", + "invalidJson": "@:json Tidak Valid", + "downloadMarkdown": "@:download sebagai file @:markdown", + "downloadJson": "@:download sebagai file @:json", + "downloadHTML": "@:download sebagai file HTML", + "copyMarkdownToClipboard": "Salin @:markdown ke Papan Klip", + "copyHTMLToClipboard": "Salin HTML ke Papan Klip", + "copyFormattedToClipboard": "Salin Teks ke Papan Klip", + "copiedToClipboard": { + "summary": "Disalin!", + "markdownDetail": "Konten disalin ke papan klip sebagai @:markdown", + "htmlDetail": "Konten disalin ke papan klip sebagai HTML", + "formattedDetail": "Konten disalin ke papan klip sebagai teks terformat", + "jsonDetail": "Konten disalin ke papan klip sebagai @:json", + "itemCopied": "{item} disalin ke papan klip" + }, + "exportJsonToClipboard": "Konten diekspor ke papan klip sebagai @:json", + "variable": "Variabel | Variabel", + "pinItem": { + "title": "@:pinned {item}", + "action": "Sematkan {item}", + "successMessage": { + "detail": "{item} disematkan" + }, + "errorMessage": { + "detail": "Tidak dapat menyematkan {item}" + } + }, + "unpinItem": { + "action": "Lepas Sematan {item}", + "successMessage": { + "detail": "{item} dilepas sematannya" + }, + "errorMessage": { + "detail": "Tidak dapat melepas sematan {item}" + } + }, + "setDefaultItem": { + "title": "Default {item}", + "action": "Jadikan {item} sebagai default", + "successMessage": { + "detail": "{item} dijadikan default" + }, + "errorMessage": { + "detail": "Tidak dapat menjadikan {item} sebagai default" + } + }, + "unsetDefaultItem": { + "action": "Default {item}. Klik untuk menghapus.", + "successMessage": { + "detail": "{item} dihapus sebagai default" + } + }, + "model": "Model", + "modelSelector": { + "filterControls": { + "title": "Urutkan & Tampilkan", + "searchPlaceholder": "Cari model...", + "clear": "Atur Ulang", + "providerSort": { + "label": "Pengurutan penyedia", + "none": "Tidak Ada", + "name": "Nama", + "createdAt": "Dibuat Pada", + "ascending": "Naik", + "descending": "Turun", + "groupByProvider": "Kelompokkan berdasarkan penyedia" + }, + "modelSort": { + "label": "Pengurutan model", + "none": "Tidak Ada", + "name": "Nama", + "recent": "Terbaru", + "ascending": "Naik", + "descending": "Turun" + }, + "purpose": { + "label": "Filter berdasarkan tujuan", + "placeholder": "Semua tujuan" + } + } + }, + "modelSettings": "@:model Pengaturan", + "syncSplit": "Sinkronkan @:split", + "name": "Nama", + "split": "Split | Split", + "template": "Template | Template", + "discardChanges": "Buang Perubahan", + "applyChanges": "Terapkan Perubahan", + "splitPreset": { + "title": "Split @:preset | Split @:preset", + "selectPlaceholder": "@:pilih @:preset", + "new": "@:new @:preset", + "newSplit": "@:new @:preset", + "splits": { + "splitIndex": "Split {index}", + "delete": "@:delete @:preset" + }, + "import": { + "title": "Impor @:preset | Impor @:preset", + "dragAndDropMessage": "Seret dan lepas file preset Msty terkompresi untuk mengimpor dan membuat preset baru. Jika ada nama duplikat, preset yang diimpor akan diganti namanya. Anda dapat mengubahnya nanti.", + "successMessage": { + "detail": "@:preset diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor preset" + } + }, + "export": { + "title": "Ekspor @:preset | Ekspor @:preset", + "selected": "Ekspor @:preset Terpilih | Ekspor @:preset Terpilih", + "successMessage": { + "detail": "Split preset diekspor sebagai {fileName} | Split preset diekspor sebagai {fileName}" + }, + "errorMessage": { + "detail": "Gagal mengekspor preset | Gagal mengekspor preset" + } + }, + "delete": { + "title": "@:delete @:preset | Hapus @:preset", + "selected": "@:delete @:preset Terpilih | Hapus @:preset Terpilih", + "deleteConfirmation": { + "header": "@:delete @:preset", + "description": "Apakah Anda yakin ingin menghapus {presetName}? | Apakah Anda yakin ingin menghapus {count} preset?" + }, + "successMessage": { + "detail": "Split preset dihapus | Split preset dihapus" + }, + "errorMessage": { + "detail": "Tidak dapat menghapus split preset | Tidak dapat menghapus split preset" + } + }, + "update": { + "successMessage": { + "detail": "Split preset diperbarui" + }, + "errorMessage": { + "detail": "Tidak dapat memperbarui split preset" + } + }, + "save": { + "successMessage": { + "detail": "Split preset disimpan" + }, + "errorMessage": { + "detail": "Tidak dapat menyimpan split preset" + } + }, + "empty": { + "title": "Tidak ada @:splitPreset.title tersedia.", + "description": "Mulai dengan menambahkan atau mengimpor @:splitPreset.title baru" + }, + "invalidTemplatesMessage": { + "summary": "Template Tidak Valid", + "detail": "Beberapa template tidak valid atau tidak memiliki bidang yang diperlukan. Harap perbaiki sebelum melanjutkan." + } + }, + "shadowPersonas": { + "title": "Shadow Personas", + "create": "Buat Shadow Persona", + "editTitle": "Edit Shadow Persona", + "assignedPersona": "Persona yang Ditugaskan", + "changePersona": "Ganti Persona", + "changePersonaTitle": "Ganti Shadow Persona", + "currentPersona": "Persona Saat Ini", + "selectNewPersona": "Pilih Persona Baru", + "waitingForCompletion": "Menunggu penyelesaian", + "changePersonaWarning": "Mengganti persona akan mengatur ulang konteks analisis dan dapat mempengaruhi kontinuitas.", + "unassigned": "Tidak Ada Persona yang Ditugaskan", + "hideSidebar": "Sembunyikan Shadow Personas", + "showSidebar": "Tampilkan Shadow Personas", + "noMonitoring": "Tidak ada split yang dipantau", + "monitoringHiddenHint": "Memantau {count} split (klik untuk menampilkan) | Memantau {count} split (klik untuk menampilkan)", + "monitoringSplitsHint": "Memantau {count} split | Memantau {count} split", + "noSplitsMonitoredHint": "Tidak ada split yang dipantau", + "monitoringStatus": "Memantau {count} split | Memantau {count} split", + "activate": "Aktifkan", + "deactivate": "Nonaktifkan", + "processNow": "Proses Sekarang", + "processing": "Memproses...", + "createAndAssign": "Buat dan Tugaskan", + "latestInsight": "Wawasan Terbaru", + "noOutputYet": "Belum ada output", + "outputs": "Output", + "viewLatest": "Lihat Terbaru", + "viewHistory": "Lihat Riwayat", + "noHistory": "Tidak ada riwayat tersedia", + "selectVersion": "Pilih versi", + "name": "Nama Shadow Persona", + "namePlaceholder": "mis., Analis Teknis, Monitor Kinerja", + "edit": "Edit Shadow Persona", + "switchShadowPersona": "Ganti Shadow Persona", + "selectShadowPersonaToSwitch": "Pilih shadow persona untuk diganti", + "selectShadowPersona": "Pilih Shadow Persona", + "searchShadowPersonas": "Cari shadow persona...", + "description": "Deskripsi (Opsional)", + "descriptionPlaceholder": "Deskripsikan apa yang diamati atau dianalisis shadow persona ini", + "selectPersona": "Pilih Persona", + "selectPersonaPlaceholder": "Pilih persona untuk digunakan", + "selectSplits": "Pilih Split untuk Dipantau", + "selectSplitsPlaceholder": "Pilih split untuk dipantau", + "selectSplitsPlaceholderOptional": "Pilih split untuk dipantau (dapat diatur nanti)", + "splitsCanBeAssignedLater": "Split dapat ditugaskan dan dikelola secara dinamis setelah pembuatan", + "updateTrigger": "Pemicu Pembaruan", + "messageInterval": "Interval Pesan", + "timeInterval": "Interval Waktu", + "messagesPerSplit": "Pesan Per Split", + "maxContext": "Konteks Maks", + "synthesisMode": "Mode Sintesis", + "outputFormat": "Format Output", + "maxProcessingTime": "Waktu Pemrosesan Maks", + "versionManagement": "Manajemen Versi", + "maxVersions": "Versi Maks", + "advancedSettings": "Pengaturan Lanjutan", + "includeSystemMessages": "Sertakan Pesan Sistem", + "autoDeleteOld": "Hapus Otomatis Versi Lama", + "waitingForSplits": "Menunggu split", + "processingNow": "Memproses sekarang", + "empty": { + "title": "Tidak Ada Shadow Personas", + "description": "Buat Shadow Persona untuk memantau dan menganalisis split percakapan Anda" + }, + "unlock": "Buka Shadow Personas", + "experimental": "Eksperimental", + "experimentalInfo": "Shadow Personas adalah fitur eksperimental yang menganalisis percakapan dan menghasilkan perspektif alternatif dan wawasan secara paralel.", + "noOutput": { + "title": "Belum Ada Output", + "description": "Shadow Persona ini belum menghasilkan output apa pun" + }, + "saveToEnableProcessing": "Simpan percakapan ini untuk mengaktifkan pemrosesan Shadow Persona", + "delete": { + "title": "Hapus Shadow Persona", + "action": "Hapus", + "confirmMessage": "Apakah Anda yakin ingin menghapus \"{name}\"? \"{name}\" akan dihapus dari semua percakapan yang dilampirkan. Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Berhasil menghapus shadow persona", + "errorMessage": "Gagal menghapus shadow persona" + }, + "detach": { + "title": "Lepaskan Shadow Persona", + "action": "Lepaskan", + "confirmMessage": "Lepaskan \"{name}\" dari percakapan ini? Shadow persona akan tetap tersedia untuk percakapan lain.", + "successMessage": "Berhasil melepaskan shadow persona", + "errorMessage": "Gagal melepaskan shadow persona" + }, + "switch": { + "successMessage": "Berhasil mengganti shadow persona", + "errorMessage": "Gagal mengganti shadow persona" + }, + "editToast": { + "successMessage": "Berhasil memperbarui shadow persona", + "errorMessage": "Gagal memperbarui shadow persona" + }, + "createToast": { + "successMessage": "Berhasil membuat shadow persona", + "errorMessage": "Gagal membuat shadow persona" + }, + "queueClearedToast": { + "summary": "Antrian Dibersihkan", + "detail": "Membatalkan {cancelledCount} item terantri | Membatalkan {cancelledCount} item terantri" + }, + "queueUpdatedToast": { + "summary": "Antrian Diperbarui", + "detail": "Membatalkan {cancelledCount} item terpicu otomatis | Membatalkan {cancelledCount} item terpicu otomatis" + }, + "queueFullToast": { + "summary": "Antrian Penuh", + "detail": "Antrian pemrosesan penuh. Harap tunggu item saat ini selesai" + }, + "alreadyProcessingToast": { + "summary": "Sudah Memproses", + "detail": "Percakapan ini sudah sedang diproses" + }, + "trigger": { + "everyMessage": "Setiap Pesan", + "everyNMessages": "Setiap {n} Pesan", + "manual": "Hanya Manual", + "timeInterval": "Interval Waktu", + "automatic": "Otomatis" + }, + "triggerHints": { + "everyMessage": "Berjalan setelah setiap pesan (tercepat, lebih sering)", + "everyNMessages": "Berjalan setelah {n} pesan (batch)", + "manual": "Hanya ketika Anda mengklik Proses Sekarang" + }, + "synthesis": { + "auto": "Otomatis", + "combined": "Analisis Gabungan", + "perSplit": "Per Split", + "comparative": "Komparatif" + }, + "synthesisHints": { + "auto": "Memilih mode terbaik berdasarkan split dan maksud", + "combined": "Satu ringkasan di semua split", + "perSplit": "Setiap split tetap terpisah dan berlabel", + "comparative": "Perbedaan dan kesepakatan berdampingan" + }, + "synthesisAutoReasons": { + "singleSplit": "Otomatis akan menggunakan Gabungan karena hanya ada satu split.", + "multipleModels": "Otomatis akan menggunakan Komparatif karena beberapa model sedang digunakan.", + "sameModel": "Otomatis akan menggunakan Per Split karena split menggunakan model yang sama." + }, + "format": { + "insights": "Wawasan", + "summary": "Ringkasan", + "recommendations": "Rekomendasi", + "analysis": "Analisis" + }, + "monitoringSplits": "Memantau {count} split | Memantau {count} split", + "locateSplits": "Temukan split", + "manageSplits": "Kelola Split", + "addAllSplits": "Tambah semua split", + "deselectAll": "Batalkan semua pilihan", + "selectAll": "Pilih semua", + "selectedCount": "{count} dari {total} dipilih", + "streaming": "Streaming", + "starting": "Memulai", + "collectingContext": "Mengumpulkan konteks dari split...", + "waitingForConversationCompletion": "Menunggu percakapan selesai", + "analyzingConversationSplits": "Menganalisis split percakapan...", + "analyzeResponses": "Shadow Persona akan menganalisis setelah semua respons diterima", + "toolCalls": "Panggilan Alat", + "reasoning": "Penalaran", + "attachExisting": "Lampirkan yang Ada", + "attachTitle": "Lampirkan Shadow Persona", + "previousVersion": "Versi Sebelumnya", + "nextVersion": "Versi Berikutnya", + "attach": "Lampirkan", + "selectShadowPersonaToAttach": "Pilih shadow persona untuk dilampirkan ke percakapan ini", + "selectShadowPersonaPlaceholder": "Pilih shadow persona untuk dilampirkan", + "queuedPosition": "Antrian #{position}", + "addToQueue": "Tambah ke Antrian", + "processingQueue": "Antrian Pemrosesan", + "removeFromQueue": "Hapus dari Antrian", + "removedFromQueue": "Dihapus dari antrian", + "inQueue": "dalam antrian", + "clearQueue": "Bersihkan Semua", + "queueEmpty": "Tidak ada item dalam antrian", + "estimatedWait": "Estimasi tunggu: {time}", + "queuedItems": "{count} item dalam antrian | {count} item dalam antrian", + "monitoring": "Pemantauan & Antrian", + "monitoredSplits": "Split yang Dipantau" + }, + "toolbox": { + "title": "Kotak Alat", + "toolsUsageWillSkip": "Msty @:remoteToolsConnector.title tidak berjalan; penggunaan alat akan dilewati.", + "tools": { + "title": "Alat | Alat", + "description": "Kumpulan alat untuk membantu Anda dengan pekerjaan LLM Anda.", + "availableTools": "Alat Tersedia", + "availableToolsets": "Toolset Tersedia", + "authorize": "Sahkan", + "setDefaultParams": "Atur Parameter Default", + "setParams": "Atur Parameter", + "missingThisDependency": "Dependensi ini tampaknya hilang dari lingkungan Anda. Tanpa ini, alat mungkin tidak berfungsi seperti yang diharapkan.", + "defaultParamsForm": { + "header": "Parameter Default untuk {toolName}", + "description": "Parameter ini akan digunakan secara global untuk semua instance alat {toolName}. Anda dapat menimpanya saat membuat toolset.", + "args": { + "label": "Argumen", + "description": "@:pilih @:argument dan atur nilainya. Kosongkan untuk melewati pengaturan nilai.", + "customArg": { + "label": "@:argument Kustom", + "description": "Masukkan nama @:argument baru{'.'} Pisahkan beberapa argumen dengan koma.", + "placeholder": "mis. --arg1, someArg, -verbose" + } + }, + "env": { + "label": "Variabel Lingkungan", + "description": "@:pilih atau masukkan @:variable Lingkungan baru dan atur nilainya.", + "addEnv": "Tambah @:variable Lingkungan", + "selectPlaceholder": "@:pilih @:variable Lingkungan", + "enterNew": "Tambah @:variable Lingkungan baru" + }, + "successMessage": { + "saveDetail": "Parameter default disimpan untuk {toolName}." + }, + "errorMessage": { + "saveDetail": "Gagal menyimpan parameter default." + } + }, + "addNewTool": { + "title": "Tambah Alat Baru", + "description": "Tambahkan alat kompatibel MCP Anda sendiri ke kotak alat. Setelah ditambahkan, Anda dapat menambahkannya ke toolset, mengatur parameter, dan menggunakannya dengan model.", + "namePlaceholder": "Beri nama (menggunakan ID alat secara default)", + "id": { + "label": "ID Alat", + "placeholder": "Pengidentifikasi alat unik (diisi otomatis jika terdeteksi dari konfigurasi)" + }, + "duplicateId": "Alat dengan ID ini sudah ada. Harap masukkan ID unik.", + "successMessage": { + "summary": "Alat Ditambahkan", + "detail": "Alat ditambahkan ke kotak alat. Anda sekarang dapat menambahkannya ke toolset dan menggunakannya dengan model." + }, + "successMessageWithToolset": { + "summary": "Alat Ditambahkan", + "detail": "Alat ditambahkan ke kotak alat dan toolset yang cocok telah dibuat. Siap digunakan dengan model." + }, + "errorMessage": { + "detail": "Gagal menambahkan alat ke kotak alat. {error}" + }, + "toolConfig": { + "label": "Konfigurasi Alat", + "placeholder": "Masukkan atau tempel JSON konfigurasi alat. Menerima konfigurasi langsung atau format terbungkus (akan mengekstrak toolId secara otomatis)", + "showExampleTitle": "Tunjukkan contoh konfigurasi alat", + "explanation": "Konfigurasi alat menerima berbagai format termasuk konfigurasi terbungkus dengan mcpServers. Ini akan mengekstrak toolId dan nama secara otomatis jika memungkinkan. Harus berisi minimal {command}. Argumen dinamis perlu dibungkus dalam kurung kurawal {curly} seperti: {argExample}. Demikian pula, variabel lingkungan dinamis dapat diatur menggunakan {envVarLabel}." + }, + "autoCreateToolset": { + "label": "Buat toolset otomatis dengan nama yang sama" + } + }, + "editTool": { + "title": "Edit Alat", + "description": "Perbarui nama, catatan, dan konfigurasi alat.", + "successMessage": { + "detail": "Alat @:updatedSuccess" + }, + "errorMessage": { + "detail": "@:failedToUpdate alat." + } + }, + "emptyPlaceholder": { + "description1": "Gunakan alat MCP eksternal yang didukung oleh Msty @:remoteToolsConnector.title untuk memperluas kemampuan model Anda dan meningkatkan pengalaman LLM Anda.", + "description2": "Anda dapat memulai dengan mengimpor banyak alat yang disertakan Msty atau menambahkan alat Anda sendiri.", + "description3": "Catatan: Alat-alat ini tidak disediakan, diuji, atau dipelihara oleh Msty. Kami hanya menyediakan platform untuk menggunakannya dan mengizinkan impor sebagai kemudahan. HARAP GUNAKAN DENGAN RISIKO ANDA SENDIRI. Msty tidak bertanggung jawab atas masalah apa pun yang mungkin timbul dari penggunaan alat ini. Juga, untuk dukungan, silakan hubungi pembuat alat." + }, + "importTools": { + "title": "Impor @:toolbox.tools.title Default", + "successMessage": { + "detail": "{count} alat default berhasil diimpor. Anda dapat membuat toolset dan menggunakannya dengan model." + }, + "successMessageWithToolsets": { + "detail": "{count} alat default berhasil diimpor dan {toolsetCount} toolset terkait dibuat otomatis." + }, + "errorMessage": { + "detail": "Gagal mengimpor @:toolbox.tools.title default" + } + }, + "deleteConfirmation": { + "header": "Hapus Alat", + "description": "Apakah Anda yakin ingin menghapus {toolName}?", + "successMessage": { + "detail": "Alat dihapus" + }, + "errorMessage": { + "detail": "@:failedToDelete alat" + } + }, + "deleteAll": { + "confirmationHeader": "Hapus Semua Alat", + "confirmationMessage": "Apakah Anda yakin ingin menghapus semua alat? Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Semua alat telah berhasil dihapus", + "errorMessage": "Gagal menghapus semua alat" + }, + "copiedToClipboard": "Konfigurasi alat disalin ke papan klip", + "viewToolsUsage": { + "title": "Lihat Penggunaan Alat", + "noToolCalls": { + "title": "Tidak Ada Panggilan Alat Ditemukan", + "description": "Sepertinya ada beberapa alat yang tersedia untuk model tetapi tidak melakukan panggilan alat. Ini bisa karena model tidak perlu menggunakan alat apa pun." + } + } + }, + "toolsets": { + "title": "Toolset | Toolset", + "emptyPlaceholder": { + "title": "Tidak Ada Toolset ditemukan", + "description": "Toolset adalah kumpulan alat dengan parameter. Anda dapat membuat toolset dan menambahkan alat ke dalamnya. Saat mengobrol dengan model, Anda dapat memilih satu atau beberapa toolset untuk digunakan dengan model." + }, + "addSomeTools": "Harap tambahkan beberapa alat untuk memulai.", + "noTools": "Tidak ada alat dalam toolset ini", + "tooltip": { + "selectedFeatures": "Fitur yang diaktifkan", + "loading": "Memuat detail fitur…", + "allFeatures": "Semua fitur", + "unavailable": "Tidak dapat memuat detail fitur" + }, + "addNewToolset": { + "title": "Tambah @:toolbox.toolsets.title Baru", + "description": "Buat toolset baru untuk mengelompokkan alat bersama. Anda dapat menambahkan alat ke toolset dan menggunakannya dengan model. Pastikan untuk mengatur/menimpa parameter untuk setiap alat di toolset dengan mengklik tombol {icon}.", + "setParams": { + "title": "Atur Parameter untuk {toolName}", + "description": "Atur parameter untuk alat {toolName}. Anda dapat menimpa parameter default yang diatur untuk alat. Gunakan Tool Console untuk menguji alat, melihat fitur yang tersedia, dan membatasi fitur jika diperlukan." + }, + "successMessage": { + "saveDetail": "Toolset disimpan dan ditambahkan ke kotak alat. Anda sekarang dapat menggunakannya dengan model." + }, + "errorMessage": { + "saveDetail": "@:failedToSave toolset." + } + }, + "editToolset": { + "title": "Edit Toolset", + "description": "Edit nama dan catatan toolset. Anda juga dapat menambah atau menghapus alat dari toolset dan menyesuaikan parameter atau membatasi fitur untuk setiap alat dengan mengklik tombol {icon}.", + "successMessage": { + "detail": "Toolset @:updatedSuccess" + }, + "errorMessage": { + "detail": "@:failedToUpdate toolset." + } + }, + "deleteConfirmation": { + "header": "Hapus Toolset", + "description": "Apakah Anda yakin ingin menghapus {toolsetName}?", + "successMessage": { + "detail": "Toolset dihapus" + }, + "errorMessage": { + "detail": "@:failedToDelete toolset" + } + }, + "deleteAll": { + "confirmationHeader": "Hapus Semua Toolset", + "confirmationMessage": "Apakah Anda yakin ingin menghapus semua toolset? Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Semua toolset telah berhasil dihapus", + "errorMessage": "Gagal menghapus semua toolset" + }, + "export": { + "title": "Ekspor @:toolbox.toolsets.title", + "description": "Untuk keamanan, nilai konfigurasi sensitif dapat dihapus sebelum mengekspor. Pilih variabel lingkungan dan argumen mana yang akan dibersihkan untuk setiap alat.", + "envVarsToScrub": "Variabel lingkungan yang akan dibersihkan", + "argsToScrub": "Argumen yang akan dibersihkan", + "scrubCustomArgs": "Bersihkan string argumen kustom", + "selectEnvVarsPlaceholder": "Pilih variabel lingkungan untuk menghapus nilai", + "selectArgsPlaceholder": "Pilih argumen untuk menghapus nilai", + "noScrubbableData": "Tidak ada data konfigurasi yang perlu dibersihkan", + "sensitiveDataNote": "Nilai sensitif umum dipilih sebelumnya untuk keamanan Anda.", + "copiedToClipboard": "Konfigurasi toolset disalin ke papan klip", + "downloadedAsJson": "Konfigurasi toolset diunduh", + "fetchError": "Gagal mengambil data toolset untuk ekspor" + }, + "import": { + "missingTools": "Beberapa alat tidak ditemukan dan dilewati: {tools}" + }, + "noOfTools": "{count} alat | {count} alat", + "viewToolsAndNotes": "Lihat Alat & Catatan", + "console": { + "title": "Konsol Alat", + "description": "Anda dapat menggunakan konsol ini untuk menguji {toolName} dan melihat output. Anda juga dapat menggunakannya untuk menguji alat dengan parameter berbeda atau membatasi fitur yang tersedia. Semua fitur diaktifkan secara default, pilih kotak centang untuk membatasi fitur hanya pada yang dipilih.", + "listTools": "Daftar Fitur {toolName}", + "missingRequiredArgument": "Kehilangan {count} @:argument yang Diperlukan", + "continueWithMissingArgs": "@:continue dengan @:argument yang Hilang", + "viewSourceOnGitHub": "Lihat Sumber di GitHub", + "allowedFeaturesLabel": "Aktifkan fitur tertentu untuk alat ini", + "allowedFeaturesPlaceholder": "Cari atau pilih fitur yang diizinkan", + "selectedFeaturesLabel": "Fitur yang saat ini diaktifkan", + "toolCall": { + "title": "Panggilan Alat", + "description": "Tambahkan properti yang diperlukan untuk memanggil {featureName}. Anda dapat menambahkan properti tambahan jika diinginkan. Berhati-hatilah saat memanggil alat begitu saja terutama tanpa nilai yang tepat.", + "selectPlaceholder": "@:pilih properti", + "enterNew": "Tambah properti baru", + "execute": "Jalankan @:toolbox.toolsets.console.toolCall" + } + }, + "manageTooltip": "Klik untuk mengelola toolset yang digunakan", + "noModelSupport": "@:pilih model mungkin tidak mendukung alat.", + "toolsetsUsedCount": "{count} Toolset Aktif | {count} Toolset Aktif" + } + }, + "liveContexts": { + "liveContextsUsedCount": "{count} Konteks Langsung Aktif | {count} Konteks Langsung Aktif", + "title": "Konteks Langsung", + "contexts": "Konteks Langsung", + "untitled": "Konteks Langsung Tanpa Judul", + "selectSource": "Pilih Sumber", + "selectSourceTooltip": "Alihkan untuk menyertakan atau mengecualikan sumber ini dari konteks", + "addNew": { + "title": "Tambah @:liveContexts.title Baru", + "description": "Buat sumber @:liveContexts.title baru untuk menambahkan konteks data eksternal ke percakapan Anda.", + "errorMessage": { + "detail": "Gagal menambahkan @:liveContexts.title" + }, + "successMessage": { + "detail": "@:liveContexts.title ditambahkan" + } + }, + "edit": { + "title": "Edit @:liveContexts.title" + }, + "promptPlaceholder": "Berikan prompt untuk mode Push di sini; sertakan detail mode Pull di bagian Catatan.", + "endpointDetails": "Detail Endpoint", + "method": "Metode", + "url": "URL", + "customHeaders": "Header Kustom", + "hasBody": "Memiliki Body", + "customProcessing": "Pemrosesan Kustom", + "promptTemplate": "Template Prompt", + "requestHeaders": { + "title": "Header Permintaan", + "description": "Tambahkan header permintaan sebagai objek JSON. Ini akan dikirim dengan permintaan ke endpoint API.", + "placeholder": "{'{'}\n \"Authorization\": \"Bearer {'{'}apiKey:'key'{'}'}\",\n \"X-From\": \"{'{'}from?:'ISO'{'}'}\"\n{'}'}" + }, + "requestBody": { + "title": "Body Permintaan", + "description": "Tambahkan body permintaan sebagai objek JSON. Ini akan dikirim dengan permintaan ke endpoint API.", + "placeholder": "{'{'}\n \"q\": \"{'{'}query:'term'{'}'}\",\n \"from\": \"{'{'}from?:'ISO'{'}'}\"\n{'}'}" + }, + "placeholders": { + "title": "Placeholder Dinamis", + "tooltip": "Sintaks placeholder", + "label": "Placeholder:" + }, + "processingFunction": { + "title": "Fungsi Pemrosesan", + "description": "Tambahkan fungsi pemrosesan untuk mengubah data respons sebelum digunakan dalam percakapan. Fungsi harus mengembalikan string.", + "placeholderHeader": "function process({'{'}data, placeholders{'}'}) {'{'}", + "placeholder": " // akses data dan placeholder opsional\n return JSON.stringify(data)", + "placeholderFooter": "{'}'}", + "tooltip": "Akses melalui param placeholders", + "usePlaceholders": "Gunakan placeholder dalam kode:" + }, + "testVariables": { + "description": "Masukkan nilai uji untuk placeholder yang terdeteksi untuk menguji endpoint." + }, + "update": { + "successMessage": { + "detail": "@:liveContexts.title diperbarui" + }, + "errorMessage": { + "detail": "Gagal memperbarui @:liveContexts.title" + } + }, + "deleteConfirmation": { + "header": "Hapus @:liveContexts.title", + "description": "Apakah Anda yakin ingin menghapus {liveContextName}?", + "successMessage": { + "detail": "@:liveContexts.title dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:liveContexts.title" + } + }, + "emptyPlaceholder": { + "title": "Tidak ada @:liveContexts.title ditemukan", + "description": "@:liveContexts.title adalah konteks data eksternal yang dapat Anda tambahkan ke percakapan Anda. Anda dapat membuat sumber @:liveContexts.title baru dan menggunakannya dengan model." + }, + "deleteAll": { + "confirmationHeader": "Hapus Semua @:liveContexts.contexts", + "confirmationMessage": "Apakah Anda yakin ingin menghapus semua konteks langsung? Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Semua konteks langsung telah berhasil dihapus", + "errorMessage": "Gagal menghapus semua konteks langsung" + }, + "export": { + "title": "Ekspor @:liveContexts.title", + "headerScrubDescription": "Untuk keamanan, nilai header sensitif dapat dihapus sebelum mengekspor. Pilih header mana yang akan dibersihkan.", + "selectHeadersToScrub": "Header yang akan dibersihkan", + "selectHeadersPlaceholder": "Pilih header untuk menghapus nilai", + "sensitiveHeadersNote": "Header sensitif umum dipilih sebelumnya untuk keamanan Anda.", + "copiedToClipboard": "Konfigurasi konteks langsung disalin ke papan klip", + "downloadedAsJson": "Konfigurasi konteks langsung diunduh" + }, + "modeLabel": "Mode", + "mode": { + "push": "Push", + "pull": "Pull", + "tooltip": { + "push": "Mode Push: berjalan otomatis sebelum model membalas", + "pull": "Mode Pull: dipanggil sesuai permintaan oleh model" + } + } + }, + "modes": { + "mode": "Mode | Mode", + "title": "@:modes.mode", + "exitMode": "Keluar dari {mode} @:modes.mode", + "zenMode": { + "title": "Zen", + "quote": "keadaan perhatian yang tenang", + "newConversation": "@:modes.zenMode.title Baru @:conversation.title" + }, + "vaporMode": { + "title": "@:modes.vaporMode.vapor @:modes.mode", + "vapor": "Vapor", + "description": "Percakapan tidak akan disimpan dalam riwayat Anda dan akan hilang saat Anda mematikannya atau menavigasi menjauh", + "willDisappearTooltip": "Ini akan hilang saat Anda mematikan @:modes.vaporMode.vapor @:modes.mode atau menavigasi menjauh", + "exitVaporMode": "Keluar dari @:modes.vaporMode.vapor @:modes.mode", + "enterVaporMode": "Masuk ke @:modes.vaporMode.vapor @:modes.mode", + "preserverChat": { + "saveConversation": "@:save @:conversation.title", + "successMessage": { + "detail": "Obrolan @:modes.vaporMode.vapor telah dipertahankan" + }, + "errorMessage": { + "detail": "Gagal mempertahankan obrolan @:modes.vaporMode.vapor" + } + } + }, + "focusMode": { + "title": "@:modes.mode Fokus" + }, + "normalMode": { + "title": "@:modes.mode Normal" + } + }, + "searchForm": { + "query": "Kueri", + "title": "Cari Item", + "noResults": { + "title": "Tidak ada hasil ditemukan", + "description": "Coba cari dengan istilah yang berbeda" + }, + "entity": { + "conversationTextMessages": "@:conversation.title", + "promptsLibraryPrompts": "Prompt | Prompt" + }, + "foundResultsCount": "Ditemukan {count} hasil | Ditemukan {count} hasil", + "labels": { + "title": "Cari {entity}", + "description": "Cari {entity} dengan cepat menggunakan kata kunci", + "tips": { + "default": { + "description": "Pencarian cocok dengan semua kata secara default (mis., {example} → cocok dengan teks yang mengandung kedua kata dalam urutan apa pun)", + "example": "mobil biru" + }, + "partial": { + "description": "Gunakan {operator} untuk pencocokan parsial (mis., {example})", + "operator": "*", + "example": "lari* → berlari, pelari" + }, + "or": { + "description": "@:user {operator} untuk mencocokkan istilah apa pun (mis., {example})", + "operator": "OR", + "example": "apel OR jeruk" + }, + "exact": { + "description": "Gunakan tanda kutip ganda {operator} untuk pencocokan tepat (mis., {example})", + "operator": "\"\"", + "example": "\"mobil biru\"" + }, + "specialCharacters": { + "description": "Gunakan {operator} untuk meloloskan karakter khusus (mis., {example})", + "operator": "\"\"", + "example": "\"C++\", \"node.js\"" + } + } + } + }, + "clearSearch": "Bersihkan Pencarian", + "helpfulTips": "Tips Bermanfaat", + "hideSearch": "Sembunyikan Pencarian", + "bookmarkItem": { + "action": "@:bookmark {item}", + "jump": "Lompat ke @:bookmarked {item}", + "title": "@:bookmarked {item}", + "successMessage": { + "detail": "{item} @:bookmarked" + }, + "errorMessage": { + "detail": "Tidak dapat menandai {item}" + }, + "deletedInfoMessage": { + "detail": "@:bookmarked {item} telah dihapus" + }, + "emptyState": { + "title": "Tidak ada tandai tersedia.", + "description": "Mulai dengan menandai {item}" + } + }, + "removeBookmarkedItem": { + "action": "Hapus @:bookmarked {item}", + "successMessage": { + "detail": "{item} dihapus dari tandai" + }, + "errorMessage": { + "detail": "Tidak dapat menghapus {item} dari tandai" + } + }, + "turnstile": { + "title": "Turnstile | Turnstile", + "newTurnstile": "@:turnstile.title Baru", + "queueEntry": "Tambah ke Antrian", + "selectPlaceholder": "@:pilih @:turnstile.title", + "addQueueWithAlt": "Klik untuk membuka atau Alt+Klik untuk menambah ke antrian", + "entriesQueued": "Tidak Ada @:entry Terantri | {count}/{total} @:entry Terantri | {count}/{total} @:entry Terantri", + "emptyQueueMessage": "Setelah prompt Anda siap, klik @:turnstile.queueEntry untuk menambahkan entri ke antrian.", + "manageSavedTurnstiles": "Kelola Turnstile Tersimpan", + "saveForm": { + "title": "Simpan @:turnstile.title Sebagai", + "successMessage": { + "detail": "@:turnstile.title telah disimpan." + }, + "errorMessage": { + "detail": "Gagal menyimpan turnstile." + } + }, + "loadTurnstiles": { + "title": "Muat @:turnstile.title", + "successMessage": { + "summary": "@:turnstile.title Dimuat!", + "detail": "{count} entri dimuat dan diantrikan. | {count} entri dimuat dan diantrikan." + }, + "errorMessage": { + "detail": "Gagal memuat turnstile." + } + }, + "clearQueue": { + "title": "Bersihkan Antrian", + "clearQueueConfirmation": { + "message": "Apakah Anda yakin ingin membersihkan antrian? Ini akan menghapus semua pesan yang telah Anda tambahkan." + } + }, + "newEntry": { + "title": "Entri Baru" + }, + "invalidEntriesMessage": { + "summary": "Entri Tidak Valid", + "detail": "Beberapa entri tidak valid atau tidak memiliki bidang yang diperlukan. Harap perbaiki sebelum melanjutkan." + }, + "metaSendMissingRootNode": { + "detail": "Tidak dapat menjalankan {metaType}. Harap pastikan itu bukan entri pertama dalam antrian." + }, + "update": { + "successMessage": { + "detail": "@:turnstile.title telah diperbarui." + }, + "errorMessage": { + "detail": "Gagal memperbarui turnstile. Apakah Anda sudah mengatur prompt dan model?" + } + }, + "save": { + "successMessage": { + "detail": "@:turnstile.title telah disimpan." + }, + "errorMessage": { + "detail": "Gagal menyimpan turnstile. Apakah Anda sudah mengatur prompt dan model?" + } + }, + "delete": { + "selected": "Hapus @:turnstile.title Terpilih | Hapus @:turnstile.title Terpilih", + "deleteConfirmation": { + "header": "Hapus @:turnstile.title", + "description": "Apakah Anda yakin ingin menghapus {turnstileName}? | Apakah Anda yakin ingin menghapus {count} turnstile?" + } + }, + "empty": { + "title": "Tidak Ada @:turnstile.title Tersedia.", + "description": "Mulai dengan menambahkan atau mengimpor @:turnstile.title baru{'.'}" + }, + "new": "@:new @:turnstile.title", + "entryIndex": "@:entry {index}", + "addContinue": "Tambah @:message.renderingActions.continueGeneration", + "addRegenerate": "Tambah @:regenerate", + "addPersona": "Tambah @:persona.title", + "addShield": "Tambah @:contextShield.title", + "addShieldWithSummary": "Tambah @:contextShield.contextShieldWithSummary", + "import": { + "title": "Impor @:turnstile.title", + "dragAndDropMessage": "Seret dan lepas file Msty @:turnstile.title terkompresi untuk mengimpor dan membuat turnstile baru. Jika ada nama duplikat, turnstile yang diimpor akan diganti namanya. Anda dapat mengubahnya nanti.", + "successMessage": { + "detail": "Turnstile diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor turnstile" + } + }, + "export": { + "title": "Ekspor @:turnstile.title", + "selected": "Ekspor @:turnstile.title Terpilih | Ekspor @:turnstile.title Terpilih", + "successMessage": { + "detail": "@:turnstile.title diekspor sebagai {fileName} | @:turnstile.title diekspor sebagai {fileName}" + }, + "errorMessage": { + "detail": "Gagal mengekspor @:turnstile.title | Gagal mengekspor @:turnstile.title" + } + } + }, + "modelMatchmaker": { + "title": "Pencocok Model", + "description": "Sesuaikan penggeser gravitasi untuk kekuatan seperti coding, penalaran, atau matematika, dan Matchmaker akan memberi peringkat dan merekomendasikan model terbaik untuk kebutuhan Anda. Hasil dapat bervariasi berdasarkan kualitas data, ukuran model, dan kompleksitas tugas.", + "ctaIntro": "Menemukan model Anda?", + "ctaMessage": "Uji dan bandingkan di Msty Studio.", + "gravity": "Gravitasi", + "remoteOnly": "Hanya Jarak Jauh", + "rankedModels": { + "title": "Model Peringkat", + "emptyMessage": "Tidak ada model ditemukan. Coba sesuaikan persyaratan Anda." + }, + "strengthsLabel": { + "ca": { + "title": "Coding", + "description": "Kemampuan menulis kode dalam bahasa pemrograman." + }, + "aca": { + "title": "Coding Agentik", + "description": "Kemampuan agentik untuk menulis kode dalam bahasa pemrograman." + }, + "daa": { + "title": "@:data Analisis", + "description": "Kemampuan menganalisis data dan menghasilkan wawasan." + }, + "ifa": { + "title": "Mengikuti Instruksi", + "description": "Kemampuan mengikuti instruksi dan melakukan tugas." + }, + "jak": { + "title": "GOAT: Generalis Serba Bisa", + "description": "Kemampuan melakukan berbagai macam tugas." + }, + "la": { + "title": "Bahasa", + "description": "Kemampuan memahami dan menghasilkan bahasa manusia." + }, + "ma": { + "title": "Matematika", + "description": "Kemampuan melakukan perhitungan matematika." + }, + "pp": { + "title": "Parafrase", + "description": "Kemampuan menulis ulang yang ditunjukkan untuk menyusun ulang teks yang diberikan." + }, + "ra": { + "title": "Penalaran", + "description": "Berpikir Kritis - kemampuan bernalar dan membuat keputusan." + }, + "sim": { + "title": "Penyederhanaan", + "description": "Kemampuan menyederhanakan teks kompleks yang diberikan." + }, + "stg": { + "title": "Pembuatan Cerita", + "description": "Kemampuan menghasilkan cerita atau narasi." + }, + "sum": { + "title": "Peringkasan", + "description": "Kemampuan meringkas informasi tekstual dan numerik." + }, + "tu": { + "title": "Penggunaan Alat", + "description": "Kemampuan memanggil dan menggunakan alat eksternal." + }, + "mit": { + "title": "Token Input Maks", + "description": "Jumlah maks token yang diterima dalam satu panggilan." + }, + "mot": { + "title": "Token Output Maks", + "description": "Jumlah maks token yang dihasilkan dalam satu panggilan." + }, + "ics": { + "title": "Penghematan Token Input", + "costTitle": "Biaya Input/Juta Token", + "description": "Penghematan biaya menghasilkan token input." + }, + "ocs": { + "title": "Penghematan Token Output", + "costTitle": "Biaya Output/Juta Token", + "description": "Penghematan biaya menghasilkan token output." + } + }, + "normalizedScore": "Skor Ternormalisasi", + "resetStrengths": "Atur Ulang Kekuatan", + "savePresetForm": { + "title": "@:save Kekuatan Sebagai @:preset", + "errorMessage": { + "detail": "Gagal menyimpan preset kekuatan." + }, + "successMessage": { + "detail": "Preset kekuatan disimpan." + }, + "loadedMessage": { + "detail": "Preset kekuatan dimuat." + } + }, + "deletePresetConfirm": { + "title": "Hapus @:preset", + "message": "Apakah Anda yakin ingin menghapus {presetName}?", + "errorMessage": { + "detail": "Gagal menghapus preset kekuatan." + }, + "successMessage": { + "detail": "Preset kekuatan dihapus." + } + } + }, + "costCalculator": { + "title": "Kalkulator Biaya Model", + "description": "Hitung dan bandingkan biaya untuk model AI dari OpenAI, Anthropic, Google, dan lainnya. Perkirakan pengeluaran Anda berdasarkan penggunaan token input/output dan harga model. Ini hanya perkiraan dan biaya aktual dapat bervariasi.", + "tokenInputs": "Input Token", + "filters": "Filter", + "ctaIntro": "Menemukan model Anda?", + "ctaMessage": "Uji dan bandingkan di Msty Studio." + }, + "vramCalculator": { + "title": "Kalkulator VRAM", + "description": "Periksa apakah model cocok dengan VRAM perangkat Anda sebelum mengunduh atau menjalankannya. Kalkulator ini memberikan perkiraan persyaratan VRAM berdasarkan arsitektur dan ukuran model. Pilih salah satu opsi di bawah untuk memulai.", + "ctaIntro": "Menemukan model Anda?", + "ctaMessage": "Uji dan bandingkan di Msty Studio." + }, + "copyOrMoveItemToWorkspace": { + "copyTitle": "Salin {item} ke Ruang Kerja", + "copyOrMoveTitle": "Salin/Pindahkan {item} ke Ruang Kerja", + "selectWorkspaces": "@:pilih Ruang Kerja", + "availableWorkspaces": "Ruang Kerja Tersedia", + "actionLabel": "Aksi", + "inputLabel": { + "copy": "Salin {item} ke satu atau lebih ruang kerja.", + "copyOrMove": "Salin/Pindahkan {item} ke satu atau lebih ruang kerja.", + "edit": "Sinkronkan penyedia ini ke satu atau lebih ruang kerja. Jika penyedia ini pernah disalin sebelumnya, akan diperbarui. Jika belum, akan ditambahkan." + }, + "successMessage": { + "copyDetail": "{item} disalin ke {count} ruang kerja | {item} disalin ke {count} ruang kerja", + "moveDetail": "{item} dipindahkan ke {count} ruang kerja | {item} dipindahkan ke {count} ruang kerja" + }, + "errorMessage": { + "copyDetail": "Gagal menyalin {item} ke {count} ruang kerja | Gagal menyalin {item} ke {count} ruang kerja", + "moveDetail": "Gagal memindahkan {item} ke {count} ruang kerja | Gagal memindahkan {item} ke {count} ruang kerja" + }, + "partialCopyWarningMessage": { + "summary": "Sebagian Disalin", + "detail": "Tidak dapat menyalin {item} ke {count} ruang kerja | Tidak dapat menyalin {item} ke {count} ruang kerja" + }, + "partialMovedWarningMessage": { + "summary": "Sebagian Dipindahkan", + "detail": "Tidak dapat memindahkan {item} ke {count} ruang kerja | Tidak dapat memindahkan {item} ke {count} ruang kerja" + }, + "existingCopiesInfo": "Beberapa ruang kerja({workspaces}) dilewati karena {item} sudah ada di dalamnya", + "skippingExistingCopies": "Salinan {item} yang sudah ada akan dilewati." + }, + "assignment": "Penugasan | Penugasan", + "modelSquad": { + "title": "Model Squad", + "description": "@:modelSquad.title adalah kumpulan model AI khusus, di mana setiap model ditugaskan untuk melakukan tugas tertentu, seperti Pembuatan Judul Otomatis, Pembuatan Ringkasan @:context, dll. Saat waktunya melakukan tugas tertentu, model yang ditugaskan dipilih secara otomatis.", + "addNewAssignment": "Tambah @:assignment Baru", + "noTask": "Tidak ada tugas lagi yang tersedia", + "tasks": { + "autoTitleGeneration": "Pembuatan Judul Otomatis", + "contextShieldSummaryGeneration": "@:contextShield.title Pembuatan Ringkasan", + "realTimeDataPromptSynthesis": "@:rtd.title Sintesis Prompt", + "forgeContentGeneration": "Pembuatan Konten Forge", + "piiScrubbing": "@:pii.scrubbing.title", + "iconFinder": "Pencari Ikon" + }, + "save": { + "successMessage": { + "detail": "@:assignment disimpan" + }, + "errorMessage": { + "detail": "@:assignment gagal disimpan" + } + }, + "assignment": { + "dialog": { + "title": "Tetapkan Model untuk {task}", + "description": "Pilih model untuk ditugaskan ke tugas {task} di ModelSquad.", + "selectModel": "Pilih Model", + "selectModelPlaceholder": "Pilih model...", + "currentlyAssigned": "Saat ini ditugaskan: {model}", + "unknownModel": "Model tidak dikenal", + "assignButton": "Tetapkan Model", + "changeButton": "Ganti Model", + "helpText": "Model ini akan digunakan secara otomatis saat tugas {task} dilakukan." + }, + "success": "Model berhasil ditugaskan ke {task}!", + "errors": { + "noModelSelected": "Harap pilih model untuk ditugaskan.", + "saveFailed": "Gagal menyimpan penugasan model. Silakan coba lagi." + } + } + }, + "pii": { + "title": "PII (Informasi Identitas Pribadi)", + "scrubbing": { + "title": "Pembersihan PII", + "description": "Secara otomatis mendeteksi dan menghapus informasi identitas pribadi dari konten Knowledge Stack sebelum menampilkannya dalam percakapan.", + "info": { + "modelAssigned": "Menggunakan {model} untuk deteksi dan penghapusan PII." + }, + "warning": { + "noModel": "Tidak ada model yang ditugaskan untuk @:pii.scrubbing.title di ModelSquad. Pengambilan Knowledge Stack akan gagal hingga model ditugaskan.", + "configurationError": "Error konfigurasi @:pii.scrubbing.title - membatalkan pengambilan Knowledge Stack untuk keamanan", + "setupError": "Error menyiapkan @:pii.scrubbing.title - membatalkan pengambilan Knowledge Stack" + }, + "placeholders": { + "personName": "[NAMA_ORANG]", + "emailAddress": "[ALAMAT_EMAIL]", + "phoneNumber": "[NOMOR_TELEPON]", + "address": "[ALAMAT]", + "idNumber": "[NOMOR_ID]", + "creditCard": "[KARTU_KREDIT]", + "bankAccount": "[REKENING_BANK]", + "ipAddress": "[ALAMAT_IP]", + "dateOfBirth": "[TANGGAL_LAHIR]" + }, + "categories": { + "personalIdentifiers": "Pengidentifikasi Pribadi", + "contactInformation": "Informasi Kontak", + "financialInformation": "Informasi Keuangan", + "medicalInformation": "Informasi Medis", + "digitalIdentifiers": "Pengidentifikasi Digital", + "biometricData": "Data Biometrik", + "locationData": "Data Lokasi" + } + } + }, + "persona": { + "title": "Persona | Persona", + "newPersona": "@:persona.title Baru", + "activePersona": "@:persona.title Aktif", + "empty": { + "title": "Tidak Ada @:persona.title Tersedia.", + "description": "Mulai dengan menambahkan atau mengimpor @:persona.title baru{'.'} Anda juga dapat mengimpor Persona default untuk memulai." + }, + "contextShieldPosition": "@:contextShield.title Posisi", + "save": { + "successMessage": { + "detail": "@:persona.title disimpan" + }, + "errorMessage": { + "detail": "@:persona.title gagal disimpan" + } + }, + "update": { + "successMessage": { + "detail": "@:persona.title diperbarui" + }, + "errorMessage": { + "detail": "Tidak dapat memperbarui @:persona.title" + } + }, + "delete": { + "selected": "Hapus @:persona.title Terpilih", + "deleteConfirmation": { + "header": "Hapus @:persona.title", + "description": "Apakah Anda yakin ingin menghapus {personaName}? | Apakah Anda yakin ingin menghapus {count} @:persona.title{'?'}" + }, + "successMessage": { + "detail": "@:persona.title dihapus | @:persona.title dihapus" + }, + "errorMessage": { + "detail": "Tidak dapat menghapus @:persona.title | Tidak dapat menghapus @:persona.title" + } + }, + "import": { + "title": "Impor @:persona.title", + "dragAndDropMessage": "Seret dan lepas file Msty @:persona.title terkompresi untuk mengimpor dan membuat Persona baru. Jika ada nama duplikat, Persona yang diimpor akan diganti namanya. Anda dapat mengubahnya nanti.", + "successMessage": { + "detail": "Persona diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor Persona" + } + }, + "export": { + "title": "Ekspor @:persona.title", + "selected": "Ekspor @:persona.title Terpilih | Ekspor @:persona.title Terpilih", + "successMessage": { + "detail": "@:persona.title diekspor sebagai {fileName} | @:persona.title diekspor sebagai {fileName}" + }, + "errorMessage": { + "detail": "Gagal mengekspor @:persona.title | Gagal mengekspor @:persona.title" + } + }, + "messages": { + "deleteSuccess": "@:persona.title dihapus | @:persona.title dihapus" + }, + "deleteConfirmation": { + "header": "Hapus @:persona.title", + "message": "Apakah Anda yakin ingin menghapus {personaName}? | Apakah Anda yakin ingin menghapus {count} @:persona.title{'?'}", + "errorMessage": { + "detail": "Tidak dapat menghapus @:persona.title | Tidak dapat menghapus @:persona.title" + } + }, + "addTitle": "Tambah @:persona.title", + "createRootFolder": "Folder Baru di Root", + "setDefaultFolder": "Jadikan sebagai Folder Default", + "unsetDefaultFolder": "Hapus Folder Default", + "folderForm": { + "updateSuccessMessage": { + "detail": "@:folder diperbarui" + }, + "updateErrorMessage": { + "detail": "Gagal memperbarui @:folder" + }, + "createSuccessMessage": { + "detail": "@:folder dibuat" + }, + "createErrorMessage": { + "detail": "Gagal membuat @:folder" + }, + "deleteConfirmation": { + "header": "Hapus @:folder", + "message": "Apakah Anda yakin ingin menghapus {folderName} dengan semua @:persona.title-nya{'?'}", + "successMessage": { + "detail": "@:folder dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:folder" + } + } + }, + "selectPlaceholder": "@:pilih @:persona.title", + "autoResponder": { + "turnOn": "Nyalakan Auto Responder", + "turnOff": "Matikan Auto Responder" + }, + "hideAndIsolateSystemPrompt": "Sembunyikan dan Isolasi Prompt Sistem", + "isolateResponse": "Isolasi Respons", + "autoResponderDefault": "Auto Responder", + "contextMessageCount": { + "title": "Jumlah Konteks", + "description": "Atur jumlah pesan terbaru yang digunakan sebagai konteks untuk @:persona.title{'.'}" + } + }, + "fewShotPrompts": { + "title": "Prompt Few-Shot", + "description": "Pembelajaran few-shot adalah teknik machine learning yang memungkinkan Anda melatih model dengan jumlah data yang kecil. Anda dapat menggunakan prompt few-shot untuk memberikan contoh kepada model untuk membantunya memahami konteks dan menghasilkan respons yang lebih baik.", + "addNewShot": "Tambah Shot Baru" + }, + "insights": "Wawasan", + "cost": "Biaya", + "costInUSD": "Biaya dalam USD", + "promptTokens": "Token Prompt", + "completionTokens": "Token Penyelesaian", + "totalTokens": "Total Token", + "usage": "Penggunaan", + "tokens": "Token", + "tokensProcessed": "Token Diproses", + "selectProvider": "@:pilih penyedia | @:pilih penyedia", + "tokensProcessedForProvider": "Token Diproses untuk {provider}", + "totalUsage": "Total Penggunaan", + "fromTo": "Dari {from} ke {to}", + "crunchingTheNumbers": "Menghitung angka", + "throughputForModel": { + "title": "Throughput untuk {model}", + "unit": { + "description": "Diukur dalam token per detik" + } + }, + "latencyForModel": { + "title": "Latensi untuk {model}", + "unit": { + "description": "Diukur dalam detik" + } + }, + "total": "Total", + "min": "Min", + "max": "Maks", + "avg": "Rata-rata", + "summary": "Ringkasan", + "dates": { + "today": "Hari Ini", + "last7Days": "7 hari terakhir", + "last14Days": "14 hari terakhir", + "last30Days": "30 hari terakhir", + "last3Months": "3 bulan terakhir", + "last6Months": "6 bulan terakhir", + "last12Months": "12 bulan terakhir", + "monthToDate": "Bulan berjalan", + "yearToDate": "Tahun berjalan", + "allTime": "Sepanjang waktu", + "selectDateRange": "@:pilih rentang tanggal", + "month": "Bulan", + "year": "Tahun", + "day": "Hari", + "week": "Minggu" + }, + "insightsSummary": { + "emptyState": { + "title": "Ringkasan Wawasan", + "description": "Tidak ada data tersedia untuk rentang tanggal dan penyedia yang dipilih." + } + }, + "insightsProviderTokensProcessed": { + "emptyState": { + "title": "Token Diproses", + "description": "Tidak ada data tersedia untuk rentang tanggal dan penyedia yang dipilih." + } + }, + "insightsProviderThroughput": { + "emptyState": { + "title": "Throughput", + "description": "Tidak ada data tersedia untuk rentang tanggal, penyedia, dan model yang dipilih." + } + }, + "insightsProviderLatency": { + "emptyState": { + "title": "Latensi", + "description": "Tidak ada data tersedia untuk rentang tanggal, penyedia, dan model yang dipilih." + } + }, + "hideItem": { + "action": "Sembunyikan {item}", + "successMessage": { + "detail": "{item} telah disembunyikan" + }, + "errorMessage": { + "detail": "Tidak dapat menyembunyikan {item}" + }, + "unhideParent": "Tampilkan Induk {item}", + "hiddenParentContentTitle": "Konten Induk Tersembunyi. Klik untuk menampilkan." + }, + "showItem": { + "action": "Tampilkan {item}" + }, + "licenseVerification": { + "errorMessage": "Gagal memverifikasi lisensi. Silakan coba lagi.", + "enterLicenseKey": "Masukkan Kunci Lisensi Aurum", + "licenseTypeInfo": "Anda menggunakan lisensi {licenseType}.", + "licenseKey": "Kunci Lisensi", + "logout": "Keluar", + "licenseTypeInfoForAdmin": "Anda menggunakan lisensi {licenseType} dan masuk sebagai Pemilik." + }, + "aurum": { + "activateLicense": "Aktifkan Lisensi Aurum", + "activateLicenseDescription": "Masukkan kunci lisensi Anda untuk membuka fitur premium", + "manageLicense": "Kelola Lisensi", + "lifetimeLicense": "Aurum Seumur Hidup", + "lifetimeLicenseDescription": "Pembelian satu kali dengan akses seumur hidup ke fitur premium", + "annualLicense": "Aurum Tahunan", + "annualLicenseDescription": "Langganan tahunan dengan pembaruan berkelanjutan dan fitur premium", + "oneTimePurchase": "Pembelian satu kali", + "yearlySubscription": "Langganan tahunan", + "enterLicenseKey": "Kunci Lisensi", + "verifyAndActivate": "Verifikasi & Aktifkan", + "deactivateLicense": "Nonaktifkan Lisensi", + "licensedTo": "Dilisensikan kepada", + "expiresOn": "Kadaluarsa pada", + "expired": "Kadaluarsa", + "expiresInDays": "Kadaluarsa dalam {days} hari", + "needLicense": "Butuh lisensi?", + "purchaseLicense": "Beli di msty.ai", + "hasLicense": "Sudah punya lisensi?", + "manageActivation": "Kelola Aktivasi" + }, + "cloneItem": { + "action": "Gandakan {item}", + "successMessage": { + "detail": "{item} telah digandakan" + }, + "errorMessage": { + "detail": "Tidak dapat menggandakan {item}" + } + }, + "cloneItemTo": { + "action": "Gandakan ke {item}", + "successMessage": { + "detail": "Berhasil menggandakan ke {item} baru" + }, + "errorMessage": { + "detail": "Tidak dapat menggandakan ke {item} baru" + } + }, + "importJson": { + "clipboardTitle": "Impor {item} dari Papan Klip JSON", + "fileTitle": "Impor {item} dari File JSON", + "successMessage": { + "detail": "{count} {item} berhasil diimpor", + "detailDestination": "@:importJson.successMessage.detail {item} ke {destination}" + }, + "successMessageWithToolsets": { + "detail": "{count} {item} berhasil diimpor dan toolset terkait auto-dibuat" + }, + "invalidConfig": { + "detail": "Konfigurasi tidak valid atau tidak ada yang diimpor. Pastikan JSON valid dan coba lagi." + }, + "errorMessage": { + "detail": "Gagal mengimpor. Periksa JSON dan coba lagi." + }, + "partialError": { + "detail": "Gagal mengimpor {failed} item: {items}" + }, + "dragAndDropMessage": "Seret dan lepas file JSON untuk mengimpor {item}." + }, + "team": { + "label": "Tim | Tim", + "createTeam": "@:create @:team.label", + "inviteUserLabel": "Undang Pengguna", + "overview": "Ikhtisar", + "usersLabel": "Pengguna", + "allTeamLabel": "Semua Tim", + "createSuccess": "Tim {teamName} berhasil dibuat.", + "member": "Anggota|Anggota", + "allUsers": "Semua Pengguna", + "addTeamFormHeader": "Buat Tim Baru", + "updateTeamFormHeader": "Edit Tim", + "addUsers": "Tambah Pengguna", + "updateUsers": "Perbarui Pengguna", + "addUserToTeam": "Tambah Pengguna ke Tim", + "teamNameLabel": "Nama Tim", + "teamNamePlaceholder": "Masukkan nama tim baru", + "addTeamDescription": "Buat tim baru untuk mengelola sumber daya.", + "noUserInTeam": "Tidak ada pengguna yang ditugaskan ke tim ini.", + "editTeam": "Edit Tim", + "invited": "Diundang", + "shortDescription": "Kelola tim dan pengguna Anda.", + "empty": { + "description": "Tim digunakan untuk mengelola sumber daya. Anda dapat menambahkan pengguna ke tim untuk berkolaborasi dan berbagi akses ke sumber daya." + }, + "deleteConfirmation": { + "header": "Hapus Tim", + "message": "Apakah Anda yakin ingin menghapus", + "inputPlaceholder": "Silakan ketik {name} untuk mengkonfirmasi penghapusan.", + "rejectLabel": "@:cancel", + "acceptLabel": "@:delete" + }, + "policies": { + "title": "Kebijakan | Kebijakan", + "toolbox": { + "title": "@:toolbox.title", + "description": "Izinkan pengguna menggunakan fitur Toolbox" + }, + "promptsLibrary": { + "title": "@:promptsLibrary.title", + "description": "Izinkan pengguna menggunakan fitur Perpustakaan Prompt" + }, + "persona": { + "title": "@:persona.title", + "description": "Izinkan pengguna menggunakan fitur Persona" + }, + "turnstile": { + "title": "@:turnstile.title", + "description": "Izinkan pengguna menggunakan fitur Turnstile" + }, + "knowledgeStack": { + "title": "@:knowledgeStack.title", + "description": "Izinkan pengguna menggunakan fitur Knowledge Stack" + }, + "remoteToolsConnector": { + "title": "@:remoteToolsConnector.title", + "description": "Izinkan pengguna menggunakan fitur @:remoteToolsConnector.title" + }, + "rtd": { + "title": "@:rtd.title", + "description": "Izinkan pengguna menggunakan fitur @:rtd.title" + }, + "attachments": { + "title": "@:attachments.title", + "description": "Izinkan pengguna menggunakan fitur @:attachments.title" + }, + "forgeMode": { + "title": "@:forge.forgeMode.title", + "description": "Izinkan pengguna menggunakan fitur @:forge.forgeMode.title" + }, + "insights": { + "title": "@:insights", + "description": "Izinkan pengguna menggunakan fitur @:insights" + }, + "platformWeb": { + "title": "Akses Web Msty Studio", + "description": "Izinkan pengguna mengakses Msty Studio dari browser web" + }, + "platformDesktop": { + "title": "Akses Desktop Msty Studio", + "description": "Izinkan pengguna mengakses Msty Studio dari aplikasi desktop" + }, + "platformAccess": "Akses Platform", + "modelHub": { + "description": "Kelola akses ke penyedia model tertentu." + } + }, + "user": { + "noAvailableSeats": "Anda telah mencapai batas untuk mengundang pengguna.", + "licenceAndAccess": { + "loggedInAsLabel": "Masuk Sebagai", + "useSignInWithEmail": "Tautan masuk yang aman akan dikirim ke alamat email yang diberikan. Pemegang lisensi Aurum harus memverifikasi kunci lisensi mereka sebelum menggunakan fitur ini.", + "continueWithlicenseLabel": "lanjutkan dengan Kunci Lisensi", + "sendLoginLink": "Kirim Tautan Masuk" + }, + "teamUserFormHeader": "Pengguna Tim", + "invitationVerification": { + "inProgress": "Memverifikasi permintaan akses Anda. Harap tunggu", + "info": "Anda telah diundang untuk bergabung dengan akun di Msty Studio.", + "error": "Terjadi kesalahan, silakan hubungi Admin akun Anda." + }, + "invitationInfo": "Tautan masuk akan dikirim ke email yang diberikan di atas.", + "invitation": { + "successMessage": { + "detail": "Pengguna {email} diundang." + }, + "invalidEmail": "@:invalid @:email", + "errorMessageUserExist": "Pengguna sudah ada", + "errorMessage": { + "detail": "Gagal mengundang {email}." + } + }, + "fetch": { + "errorMessage": { + "detail": "Tidak dapat memuat daftar pengguna" + } + }, + "delete": { + "successMessage": { + "detail": "Pengguna {email} berhasil dihapus." + }, + "errorMessage": { + "detail": "Tidak dapat menghapus pengguna {email}" + } + }, + "deleteConfirmation": { + "header": "Hapus Pengguna", + "message": "Apakah Anda yakin ingin menghapus {email}?", + "rejectLabel": "@:cancel", + "acceptLabel": "@:delete" + }, + "assignUserToTeamLabel": "Tetapkan pengguna ke tim {teamName}", + "assignUserToTeamSuccess": "Berhasil menetapkan {user} ke tim {teamName}", + "unassignUserToTeamLabel": "Hapus pengguna dari tim", + "unassignUserToTeamMessage": "Keluarkan {user} dari tim {teamName}", + "selectUserToAddToTeamPlaceholder": "@:pilih pengguna untuk ditambahkan" + } + }, + "updateItem": { + "action": "Perbarui {item}", + "editAction": "Edit {item}", + "successMessage": { + "detail": "{item} telah diperbarui" + }, + "errorMessage": { + "detail": "Tidak dapat memperbarui {item}" + } + }, + "modelPurpose": { + "text": "Teks", + "tools": "Alat", + "vision": "Visi", + "coding": "Koding", + "embedding": "Embedding", + "streaming": "Streaming", + "image": "Gambar", + "thinking": "Berpikir" + }, + "editModel": { + "inputLabels": { + "label": "Label", + "purpose": "Tujuan" + } + }, + "environment": { + "selectPlaceholder": "@:pilih @:environment.title", + "new": "@:environment.title Baru", + "title": "Lingkungan | Lingkungan", + "empty": { + "description": "Tambahkan lingkungan baru untuk memulai." + }, + "save": { + "successMessage": { + "detail": "@:environment.title disimpan" + }, + "errorMessage": { + "detail": "@:environment.title gagal disimpan" + } + }, + "delete": { + "title": "@:delete @:environment.title | Hapus @:environment.title", + "selected": "@:delete @:environment.title Terpilih | Hapus @:environment.title Terpilih", + "deleteConfirmation": { + "header": "@:delete @:environment.title", + "description": "Apakah Anda yakin ingin menghapus {environmentName}? | Apakah Anda yakin ingin menghapus {count} lingkungan?" + }, + "successMessage": { + "detail": "@:environment.title dihapus | @:environment.title dihapus" + }, + "errorMessage": { + "detail": "Tidak dapat menghapus @:environment.title | Tidak dapat menghapus @:environment.title" + } + }, + "backup": { + "title": "Cadangkan @:environment.title", + "successMessage": { + "detail": "@:environment.title dicadangkan" + }, + "errorMessage": { + "detail": "Gagal mencadangkan @:environment.title" + } + }, + "restore": { + "title": "Pulihkan @:environment.title", + "dragAndDropMessage": "Seret dan lepas file Lingkungan Msty untuk memulihkan Lingkungan. Catatan: Semua lingkungan yang ada akan dihapus dan diganti dengan yang diimpor.", + "successMessage": { + "detail": "@:environment.title dipulihkan" + }, + "errorMessage": { + "detail": "Gagal memulihkan @:environment.title" + } + }, + "quickSelect": { + "title": "@:pilih Cepat Variabel Lingkungan", + "selectPlaceholder": "Cari atau pilih variabel untuk menyalinnya ke papan klip" + } + }, + "makeActive": { + "title": "Jadikan Aktif {itemType}", + "isActive": "{itemType} Aktif", + "successMessage": { + "detail": "{itemName} sekarang menjadi {itemType} aktif" + }, + "errorMessage": { + "detail": "Gagal menjadikan {itemName} sebagai {itemType} aktif" + } + }, + "moveItem": { + "action": "Pindahkan {item}", + "moveLocation": "Pindahkan {count} {sourceType} ke {item}", + "confirmation": { + "message": "Apakah Anda yakin ingin memindahkan {item} yang dipilih?" + }, + "successMessage": { + "detail": "{item} telah dipindahkan | {item} telah dipindahkan" + }, + "errorMessage": { + "detail": "Tidak dapat memindahkan {item}" + }, + "errrorMessage": { + "detail": "Tidak dapat memindahkan {item}" + }, + "cannotDetermineTargetProject": "Tidak dapat menentukan proyek tujuan.", + "cannotDetermineTargetFolder": "Tidak dapat menentukan folder tujuan." + }, + "deleteItem": { + "action": "Hapus {item}", + "successMessage": { + "detail": "{item} telah dihapus" + }, + "errorMessage": { + "detail": "Tidak dapat menghapus {item}" + } + }, + "promptsLibrary": { + "title": "@:prompts Perpustakaan", + "newPrompt": "@:prompt Baru", + "search": "@:search.label @:prompt", + "quickPrompt": "@:prompt Cepat", + "saveToQuickPrompts": "Simpan ke @:prompts Cepat", + "copyPrompt": "Salin @:prompt ke Papan Klip", + "shortcutUsage": "Ketik / untuk mencari @:promptsLibrary.title", + "setDefaultFolder": "Jadikan sebagai Folder Default", + "unsetDefaultFolder": "Hapus Folder Default", + "createRootFolder": "Folder Baru di Root", + "folder": "@:folder", + "prompt": "@:prompt", + "deleteAllPrompt": { + "title": "Hapus semua @:prompt dan @:folders", + "description": "Ini akan membersihkan seluruh @:promptsLibrary.title dan @:folder@:folders. Tidak ada cara untuk memulihkannya setelah penghapusan.", + "successMessage": { + "detail": "Semua @:prompt dihapus" + } + }, + "empty": { + "title": "Tidak Ada @:persona.title Tersedia.", + "description": "Mulai dengan menambahkan atau mengimpor @:prompt baru{'.'} Anda juga dapat mengimpor @:prompts default untuk memulai." + }, + "import": { + "title": "Impor @:prompts Default", + "successMessage": { + "detail": "Anda sekarang dapat menggunakan prompt yang diimpor dalam percakapan Anda." + }, + "copyMultiplePrompts": "Salin {count} @:prompts ke papan klip", + "errorMessage": { + "detail": "Gagal mengimpor @:prompts default" + }, + "copyErrorMessage": { + "detail": "Gagal menyalin @:prompt{'.'} Silakan coba lagi." + } + }, + "folderForm": { + "updateSuccessMessage": { + "detail": "@:folder diperbarui" + }, + "updateErrorMessage": { + "detail": "Gagal memperbarui @:folder" + }, + "createSuccessMessage": { + "detail": "@:folder dibuat" + }, + "createErrorMessage": { + "detail": "Gagal membuat @:folder" + }, + "deleteConfirmation": { + "header": "Hapus @:folder", + "message": "Apakah Anda yakin ingin menghapus {folderName} dengan semua sub-folder dan prompt-nya?", + "successMessage": { + "detail": "@:folder dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:folder" + } + } + }, + "promptForm": { + "addTitle": "Tambah @:prompt Baru", + "editTitle": "Edit @:prompt", + "promptName": "@:prompt Nama", + "promptDescription": "@:description", + "updateSuccessMessage": { + "detail": "@:prompt diperbarui" + }, + "updateErrorMessage": { + "detail": "Gagal memperbarui @:prompt" + }, + "createSuccessMessage": { + "detail": "@:prompt dibuat" + }, + "createErrorMessage": { + "detail": "Gagal membuat @:prompt" + }, + "deleteConfirmation": { + "header": "Hapus {count} @:prompt", + "message": "Apakah Anda yakin ingin menghapus?", + "successMessage": { + "detail": "@:prompt dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:prompt" + } + } + } + }, + "importDefault": { + "title": "Impor Default {item}", + "successMessage": { + "detail": "Default {item} diimpor" + }, + "errorMessage": { + "detail": "Gagal mengimpor default {item}" + } + }, + "contextIsolation": { + "isolate": "Isolasi @:context", + "unIsolate": "Hapus Isolasi @:context", + "label": "@:context Terisolasi", + "clearAll": { + "title": "Bersihkan Semua Isolasi @:context", + "successMessage": { + "detail": "Semua Isolasi @:context dibersihkan" + } + } + }, + "responseMetrics": { + "title": "Metrik Respons", + "longPressOrAltClickToCycle": "Tekan lama atau Alt klik untuk mengganti metrik" + }, + "quickView": "Tampilan Cepat", + "detailsView": "Tampilan Detail", + "input": "Input | Input", + "output": "Output | Output", + "think": "Pikir", + "reasoning": { + "emptyNotice": "Model melakukan pemikiran internal tetapi tidak mengembalikan ringkasan. Untuk mengaktifkan ringkasan pemikiran, terapkan tag 'Thinking' ke model ini dengan mengklik ikon edit di samping pemilihan model." + }, + "service": "Layanan | Layanan", + "localAIService": "@:localAI @:service", + "version": "Versi | Versi", + "invalidConfig": "Konfigurasi tidak valid. Harap masukkan objek JSON yang valid.", + "unsavedChanges": "Perubahan Belum Tersimpan", + "saveChanges": "Simpan Perubahan", + "day": "Hari | Hari", + "every": "Setiap", + "files": "File", + "file": "File | @:files", + "reallyDelete": "Benar-benar Hapus?", + "similarity": "Kemiripan", + "saveAsDraft": "Simpan sebagai Draf", + "compose": "Susun", + "embeddingModel": "Model Embedding", + "document": "Dokumen | Dokumen", + "matched": "Cocok", + "active": "Aktif", + "inactive": "Tidak Aktif", + "folderName": "@:folder Nama", + "addNewFolder": "Tambah @:folder Baru", + "editFolder": "Edit @:folder", + "errorGeneric": "Terjadi kesalahan. Silakan coba lagi nanti. Periksa log untuk detail lebih lanjut.", + "sharedService": { + "modelsPath": { + "title": "Jalur Model", + "description": "Di sinilah {service} mengunduh dan mencari model. Anda dapat memperbarui jalur untuk menggunakan folder kustom.", + "edit": { + "title": "Edit Jalur Model", + "description": "Atur lokasi pilihan Anda.", + "willRestartWarning": "Catatan: Mengubah jalur model akan memulai ulang {service} agar perubahan berlaku.", + "selectModelsPath": "Pilih Jalur Model", + "successMessage": { + "detail": "Jalur model diperbarui" + }, + "errorMessage": { + "detail": "Gagal memperbarui jalur model" + } + } + }, + "quickPromptDialog": { + "title": "Simpan ke @:prompts Cepat", + "description": "Beri judul singkat pada prompt sistem Anda. Ini akan ditambahkan ke Prompt Cepat untuk digunakan kembali dengan mudah.", + "nameLabel": "@:prompt Cepat Nama", + "successMessage": "Prompt sistem disimpan ke Prompt Cepat.", + "errorMessage": "Gagal menyimpan prompt sistem ke Prompt Cepat.", + "emptyPromptMessage": "Tambahkan beberapa teks prompt sistem sebelum menyimpan ke Prompt Cepat." + }, + "serviceHealth": { + "title": "Kesehatan Layanan", + "description": "Status {service}. Mengalami masalah? Coba mulai ulang atau tinjau log.", + "serviceAction": { + "restartService": "Mulai Ulang Layanan", + "stopService": "Hentikan Layanan", + "startService": "Mulai Layanan", + "errorMessage": { + "detail": "Gagal melakukan {action} pada {service}. Silakan periksa log untuk detail lebih lanjut." + }, + "restartSuccessMessage": { + "detail": "{service} Dimulai Ulang" + } + }, + "serviceStatus": { + "starting": "Memulai", + "running": "Berjalan", + "stopped": "Dihentikan" + } + }, + "serviceEndpoint": { + "title": "Endpoint Layanan | Endpoint Layanan", + "description": { + "base": "Endpoint lokal untuk {service}. Gunakan ini untuk terhubung dari aplikasi lain yang berjalan secara lokal di perangkat.", + "serviceIsNotRunning": "Setelah layanan berjalan, alamat akan ditampilkan di sini.", + "serviceIsAvailableOnNetwork": "Karena layanan tersedia di jaringan, Anda juga dapat terhubung menggunakan URL Layanan Jaringan dari perangkat lain." + }, + "copyNetworkURL": "Salin URL Jaringan" + }, + "serviceVersion": { + "title": "Versi Layanan", + "description": "Menampilkan versi saat ini dari {service}. Untuk memastikan kinerja optimal dan akses ke fitur baru, tetap perbarui. Instalasi ulang juga tersedia jika diperlukan.", + "forceUpdate": { + "title": "Paksa Perbarui {service}", + "forCpu": "Paksa Perbarui {service} (CPU)", + "forCuda": "Paksa Perbarui {service} (CUDA)", + "forCuda124": "Paksa Perbarui {service} (CUDA 12.4)", + "forCuda131": "Paksa Perbarui {service} (CUDA 13.1)", + "forVulkan": "Paksa Perbarui {service} (Vulkan)", + "forRocm": "Paksa Perbarui {service} (ROCm)", + "forOpencl": "Paksa Perbarui {service} (OpenCL)", + "forSycl": "Paksa Perbarui {service} (SYCL)", + "successMessage": { + "detail": "{service} diperbarui ke versi terbaru {version}" + }, + "errorMessage": { + "detail": "Gagal memperbarui {service}. Silakan periksa log untuk detail lebih lanjut." + } + }, + "removeService": { + "title": "Hapus {service}", + "confirmationHeader": "Hapus {service}", + "confirmationMessage": "Apakah Anda yakin ingin menghapus {service}? Ini akan menghapus biner layanan dan semua konfigurasinya. Anda dapat menginstalnya kembali nanti dari halaman pengaturan.", + "confirmationAccept": "Hapus", + "successMessage": { + "detail": "{service} telah berhasil dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus {service}. Silakan periksa log untuk detail lebih lanjut." + } + } + }, + "serviceConfigurations": { + "title": "Konfigurasi Layanan", + "description": "Konfigurasi ini diterapkan ke {service} saat dimulai. {service} akan otomatis dimulai ulang setelah Anda menyimpan perubahan apa pun.", + "enableNetworkAccess": { + "title": "Aktifkan Akses Jaringan", + "description": "Izinkan perangkat lain di jaringan Anda mengakses {service} ini melalui alamat IP perangkat ini." + }, + "allowMstyStudioAccess": { + "title": "Izinkan Akses dari Msty Studio", + "description": "Izinkan koneksi dari Msty Studio Web ke aplikasi ini sehingga dapat mengakses {service}." + }, + "captureServiceLogs": { + "title": "Tangkap Log Layanan", + "description": "Aktifkan logging untuk menangkap data layanan untuk debugging. Gunakan opsi ini hanya jika diperlukan." + }, + "unsavedChanges": { + "message": "Anda memiliki perubahan yang belum disimpan dalam Konfigurasi {service}. Setelah Anda menyimpan, {service} akan dimulai ulang dengan konfigurasi baru.", + "saveChanges": "Simpan Perubahan dan Mulai Ulang Layanan", + "successMessage": { + "detail": "Konfigurasi {service} disimpan dan layanan dimulai ulang" + }, + "errorMessage": { + "detail": "Gagal menyimpan Konfigurasi {service}. Silakan periksa log untuk detail lebih lanjut." + } + } + }, + "modelConfigurations": { + "title": "@:model Konfigurasi", + "description": "Konfigurasi ini diterapkan ke semua model selama sesi obrolan." + } + }, + "keyboardShortcuts": { + "title": "Pintasan Keyboard", + "description": "Sesuaikan pintasan keyboard untuk akses cepat ke fitur", + "search": "Cari pintasan...", + "searchByShortcut": "Cari berdasarkan pintasan", + "searchByName": "Cari berdasarkan nama", + "pressShortcut": "Tekan kombinasi tombol apa pun...", + "pressKeys": "Tekan tombol...", + "notSet": "Tidak diatur", + "edit": "Edit pintasan", + "clear": "Bersihkan", + "global": "Global", + "saved": "Pintasan disimpan", + "error": "Error menyimpan pintasan", + "reset": "Pintasan diatur ulang", + "resetToDefault": "Atur ulang ke default", + "resetAll": "Atur ulang semua pintasan", + "allReset": "Semua pintasan diatur ulang ke default", + "noResults": "Tidak ada pintasan ditemukan", + "conflictWith": "Konflik dengan: {name}", + "categories": { + "all": "Semua", + "general": "Umum", + "navigation": "Navigasi", + "appearance": "@:settings.appearance", + "conversation": "Percakapan" + }, + "resetAllConfirm": { + "title": "Atur Ulang Semua Pintasan", + "message": "Apakah Anda yakin ingin mengatur ulang semua pintasan keyboard ke nilai default?" + }, + "help": { + "title": "Pintasan Keyboard", + "customizeButton": "Sesuaikan Pintasan" + }, + "contextual": "Kontekstual", + "systemWide": "Seluruh Sistem", + "perSplit": "Per Split", + "macOptionHint": "Pintasan tombol Option berfungsi di Msty. Jika menghasilkan karakter khusus, periksa Pengaturan Sistem > Keyboard > Sumber Input", + "example": { + "title": "Contoh Pintasan Keyboard", + "description": "Komponen ini mendemonstrasikan cara mendaftarkan dan menggunakan pintasan keyboard di komponen Anda.", + "registeredShortcuts": "Pintasan Terdaftar:", + "exampleAction1": "Contoh Aksi 1", + "scopedAction": "Aksi Terbatas", + "actions": "Aksi:", + "updateFirstShortcut": "Perbarui Pintasan Pertama", + "testConflictDetection": "Uji Deteksi Konflik", + "actionLog": "Log Aksi:", + "noActionsYet": "Belum ada aksi. Coba tekan pintasannya!", + "developerNotes": { + "title": "Catatan Pengembang:", + "items": [ + "Pintasan secara otomatis dibersihkan saat komponen dilepas", + "Gunakan pintasan terbatas komponen untuk menghindari konflik ID", + "Binding spesifik platform ditangani secara otomatis (Cmd di Mac, Ctrl di Windows)", + "Periksa konflik sebelum mendaftarkan pintasan yang mungkin bertabrakan dengan yang sudah ada", + "Pintasan bisa global (berfungsi di mana saja) atau spesifik konteks" + ] + } + }, + "splitRemoval": { + "selectSplitToRemove": "Pilih split untuk dihapus", + "pressKeysToCancel": "Tekan", + "remove": "Hapus" + } + }, + "createNew": "Buat Baru", + "copy": "Salin", + "miniMapActions": { + "noMessageSelectedWarning": { + "summary": "Tidak Ada Pesan yang Dipilih", + "detail": "Pilih setidaknya satu pesan untuk melakukan tindakan apa pun" + }, + "exportOrCopyMessage": { + "exportMessage": "Ekspor Pesan | Ekspor Pesan", + "copyMessage": "Salin Pesan | Salin Pesan", + "asJson": "Sebagai JSON", + "asMarkdown": "Sebagai Markdown", + "successMessage": "Berhasil {action} pesan sebagai {format}", + "action": { + "export": "diekspor", + "copy": "disalin" + } + } + }, + "reIndexItem": { + "action": "Indeks Ulang {item}", + "successMessage": { + "detail": "{item} berhasil diindeks ulang" + }, + "errorMessage": { + "detail": "Gagal mengindeks ulang {item}" + }, + "confirmationMessage": "Apakah Anda yakin ingin mengindeks ulang {item}?" + }, + "recent": "Terbaru|Terbaru", + "recentsPinned": "Terbaru & @:pinned", + "knowledgeStack": { + "title": "Knowledge Stack | Knowledge Stack", + "contexts": "@:knowledgeStack.title Konteks", + "composeProgress": { + "processing": "Memproses: {fileName}", + "composing": "Menyusun", + "composingEllipsis": "Menyusun…", + "files": "File", + "notes": "Catatan", + "youtube": "YouTube", + "folders": "Folder", + "overallProgress": "Kemajuan keseluruhan", + "inFlight": "Sedang berjalan:" + }, + "itemStatus": { + "ignoredForRetrieval": "Diabaikan untuk pengambilan" + }, + "cloudShare": { + "importingFolder": "Mengimpor folder: {name}", + "processingCount": "Memproses {count} knowledge stack" + }, + "saveEdits": { + "title": "Simpan Editan", + "confirmation": { + "header": "Simpan Editan dan Tandai sebagai Draf", + "message": "Apakah Anda yakin ingin menyimpan editan Anda? Ini akan menandai Knowledge Stack sebagai draf dan mencegahnya digunakan dalam produksi sampai diproses lagi." + } + }, + "selectFolderForImport": "Pilih tempat untuk mengimpor @:knowledgeStack.title", + "newKnowledgeStack": "@:knowledgeStack.title Baru", + "addDescription": "Tambah deskripsi", + "editDescription": "Edit deskripsi", + "descriptionPlaceholder": "Tambahkan deskripsi untuk Knowledge Stack ini...", + "autoSaving": "Menyimpan...", + "autoSaved": "Tersimpan {time}", + "basicInfo": "Informasi Dasar", + "similarityThreshold": "@:similarity Ambang", + "similarityMatch": "@:similarity Kecocokan", + "unsavedChanges": { + "confirmNavigation": "Anda memiliki perubahan yang belum disimpan. Apakah Anda yakin ingin meninggalkan halaman ini? Perubahan Anda akan hilang.", + "confirmReload": "Anda memiliki perubahan yang belum disimpan yang akan hilang jika Anda memuat ulang halaman." + }, + "empty": { + "title": "Tidak ada @:knowledgeStack.title dipilih", + "description": "Knowledge Stack memungkinkan Anda membawa file, folder, catatan, dan transkrip YouTube, membuatnya dapat dicari dan siap obrolan melalui Retrieval-Augmented Generation (RAG)" + }, + "selectOrCreate": "Pilih @:knowledgeStack.title", + "selectFromTreeOrCreate": "Pilih @:knowledgeStack.title dari pohon atau buat baru", + "folderForm": { + "addTitle": "Tambah @:folder Baru", + "editTitle": "Edit @:folder", + "editIgnoreRules": "Edit Aturan Pengabaian", + "editIgnoreRulesTitle": "Aturan Pengabaian", + "ignoreRulesDescription": "Tentukan pola untuk mengecualikan file dan folder dari pemrosesan.", + "ignoreRulesHierarchySimple": "Prioritas: .mstyignore/.gitignore lokal → Aturan folder → Default sistem", + "ignoreRulesPlaceholder": "# Masukkan pola di sini, satu per baris\n# Contoh: *.log, node_modules/, !important.txt", + "showExamples": "Tampilkan contoh & bantuan", + "ignoreExample1": "File log", + "ignoreExample2": "File temp di semua dir", + "ignoreExample3": "Seluruh direktori", + "ignoreExample4": "Pola pengecualian", + "ignoreExample5": "Beberapa tipe gambar", + "ignoreExample6": "Semua file di test & subdir", + "ignoreExample7": "Pencocokan case-insensitive", + "ignoreExample8": "File yang dimulai dengan secret-", + "insertTemplate": "Gunakan template", + "clearContent": "Bersihkan semua", + "ignoreRulesUpdated": "Aturan pengabaian berhasil diperbarui", + "ignoreRulesUpdateError": "Gagal memperbarui aturan pengabaian", + "deleteConfirmation": { + "header": "Hapus @:folder '{folderName}'", + "message": "Apakah Anda yakin ingin menghapus folder ini? Semua Knowledge Stack di dalamnya akan dihapus. Tidak ada undo untuk tindakan ini.", + "successMessage": { + "detail": "@:folder dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus @:folder" + } + }, + "updateErrorMessage": { + "detail": "Gagal memperbarui @:folder" + }, + "createSuccessMessage": { + "detail": "@:folder dibuat" + }, + "createErrorMessage": { + "detail": "Gagal membuat @:folder" + } + }, + "setDefaultFolder": "Jadikan sebagai Folder Default", + "unsetDefaultFolder": "Hapus Folder Default", + "createRootFolder": "Folder Baru di Root", + "knowledgeStackForm": { + "addTitle": "Tambah @:knowledgeStack.title Baru", + "deleteConfirmation": { + "header": "Hapus @:knowledgeStack.title", + "message": "Apakah Anda yakin ingin menghapus Knowledge Stack ini? Semua item di dalamnya akan dihapus. Tidak ada undo untuk tindakan ini." + } + }, + "deleteAllKnowledgeStack": { + "title": "Hapus Semua @:knowledgeStack.title", + "description": "Ini akan membersihkan seluruh @:knowledgeStack.title{'.'} Tidak ada cara untuk memulihkannya setelah penghapusan.", + "successMessage": { + "detail": "Semua @:knowledgeStack.title dihapus" + }, + "errorMessage": { + "detail": "Gagal menghapus semua @:knowledgeStack.title" + } + }, + "chunksConsole": { + "chunk": "Potongan | @:knowledgeStack.chunksConsole.chunks", + "chunks": "Potongan", + "title": "@:knowledgeStack.chunksConsole.chunks Konsol", + "description": "Gunakan konsol ini untuk memahami bagaimana Knowledge Stack Anda, { title }, digunakan dan potongan apa yang dikirim ke model saat mengobrol. Anda juga dapat menghapus potongan jika menurut Anda itu tidak relevan atau berguna.", + "queryText": "Teks Kueri", + "similarityFilter": { + "title": "@:similarity", + "all": "Semua", + "highest": "Tertinggi", + "high": "Tinggi", + "medium": "Sedang", + "low": "Rendah" + }, + "matchCount": "# @:knowledgeStack.chunksConsole.chunks", + "sourceFile": "File Sumber", + "sourceNote": "Catatan Sumber", + "sourceVideo": "Video Sumber", + "source": "Sumber", + "score": "Skor", + "searchResults": "Hasil Pencarian", + "noResultsFound": "Tidak ada hasil pencarian ditemukan. Coba sesuaikan kueri atau pengaturan pencarian Anda.", + "noResultsAfterFilter": "Tidak ada hasil yang cocok dengan filter kemiripan saat ini. Coba sesuaikan filter untuk menampilkan lebih banyak hasil.", + "deleteChunk": { + "successMessage": { + "detail": "@:knowledgeStack.chunksConsole.chunk telah dihapus" + } + }, + "searchType": { + "title": "Tipe Pencarian", + "hybrid": "Pencarian Hybrid", + "semantic": "Pencarian Semantik", + "keyword": "Pencarian Kata Kunci" + }, + "filterDisclaimer": "Filter ini hanya mempengaruhi hasil yang ditampilkan di bawah. Ini tidak mengubah kueri yang sebenarnya.", + "tooltip": { + "scrubbed": "Konten telah dibersihkan untuk penghapusan PII", + "cached": "Menggunakan versi dibersihkan yang di-cache", + "fresh": "Konten yang baru dibersihkan" + }, + "runQuery": "Jalankan Kueri" + }, + "addon": { + "title": "@:knowledgeStack.title", + "selectedCount": "{count} dipilih", + "selectedStacks": "Stack Dipilih", + "searchPlaceholder": "Cari Knowledge Stack...", + "recentlyUpdated": "Baru Diperbarui", + "searchResults": "Hasil Pencarian", + "noResults": "Tidak ada Knowledge Stack ditemukan", + "noStacks": "Tidak ada Knowledge Stack tersedia", + "noDescription": "Tidak ada deskripsi", + "numberOfChunks": "Jumlah @:knowledgeStack.chunksConsole.chunks", + "searchType": "Tipe Pencarian", + "synthesizePrompt": "Sintesis Kueri", + "enablePiiScrubbing": "Aktifkan Pembersihan PII", + "fullContentContextLimit": "Konteks Konten Penuh Maks", + "fullContentContextWarning": "Konteks Konten Penuh dapat secara signifikan meningkatkan penggunaan token dan dapat mempengaruhi kinerja", + "manageStacks": "Kelola Stack", + "onlyCompletedStacks": "Hanya stack yang selesai yang dapat dipilih" + }, + "totalFiles": "Total File", + "vectorDimensions": "Dimensi Vektor", + "wordCount": "Jumlah Kata", + "readingTime": "Waktu Baca", + "embeddingModel": { + "title": "Model Embedding", + "noModel": "Tidak ada model embedding yang dikonfigurasi", + "modelMissing": "Model {modelId} tidak ditemukan", + "providerRemapped": "Penyedia model secara otomatis dipetakan ulang", + "changeModel": "Ganti model Embedding Kueri", + "selectModel": "Pilih Model Embedding Kueri", + "missingModelWarning": "Model embedding asli untuk Knowledge Stack ini tidak tersedia. Harap pilih model baru.", + "providerRemappedInfo": "Penyedia model embedding secara otomatis dipetakan ulang ke penyedia yang kompatibel.", + "currentModel": "Model Saat Ini", + "noModelConfigured": "Tidak ada model yang dikonfigurasi", + "selectNewModel": "Pilih Model Baru", + "defaultLocal": "Default (Lokal)" + }, + "buckets": { + "files": { + "title": "@:files", + "description": "Tambahkan .pdf, .csv, .md, .json, .jsonl, .xlsx, .docx, .rtf, .txt, .pptx atau jenis file lain yang didukung.", + "dropZoneText": "Seret dan lepas file di sini", + "browseFiles": "Jelajahi File", + "dropHint": "Lepaskan file di sini" + }, + "folders": { + "title": "@:folders & Obsidian Vaults", + "description": "Tambahkan folder yang berisi file. Anda dapat melepaskan Obsidian Vaults juga.", + "dropZoneText": "Seret dan lepas folder di sini", + "browseFolders": "Jelajahi Folder", + "liveMode": "Mode Langsung", + "liveModeDescription": "Folder dipantau untuk perubahan dan secara otomatis memperbarui Knowledge Stack", + "duplicateFolder": "Folder Duplikat", + "alreadyAdded": "Folder Sudah Ditambahkan", + "folderAlreadyExists": "Folder ini sudah ditambahkan ke @:knowledgeStack.title", + "folderAlreadyAdded": "Folder '{path}' sudah ditambahkan", + "folderProcessed": "Folder Diproses", + "filesAdded": "{count} file berhasil ditambahkan", + "onlyFoldersAllowed": "Hanya folder yang dapat ditambahkan di sini. Harap pilih folder alih-alih file individual.", + "selectFolder": "Pilih Folder", + "useDirectoryPicker": "Harap gunakan tombol Jelajahi untuk memilih folder dalam mode web", + "processed": "Diproses", + "processingError": "Error Memproses Folder", + "folderExplorer": "Penjelajah Folder", + "showIgnoredFiles": "Tampilkan File yang Diabaikan", + "noFolders": "Belum ada folder yang ditambahkan", + "refresh": "Segarkan", + "showInFileManager": "Tampilkan di File Manager", + "remove": "Hapus", + "loadError": "Gagal Memuat Folder", + "removed": "Folder Dihapus", + "folderRemoved": "'{name}' telah dihapus dari Knowledge Stack", + "removeError": "Gagal Menghapus Folder", + "ignored": "Diabaikan", + "loading": "Memuat...", + "loadingContents": "Memuat konten folder...", + "confirmRemove": "Apakah Anda yakin ingin menghapus \"{name}\" dari Knowledge Stack ini? Folder dan filenya akan tetap ada di sistem Anda.", + "expandFolder": "Perluas folder", + "collapseFolder": "Ciutkan folder", + "folderIgnored": "Folder ini diabaikan berdasarkan aturan .mstyignore atau .gitignore", + "fileIgnored": "File ini diabaikan berdasarkan aturan .mstyignore atau .gitignore", + "actionMenu": "Menu aksi", + "emptyFolder": "Folder kosong", + "itemCount": "{count} item | {count} item", + "hiddenItemCount": "{count} item tersembunyi | {count} item tersembunyi" + }, + "obsidianVaults": { + "title": "Obsidian Vaults", + "description": "Tambahkan Obsidian Vaults ke Knowledge Stack Anda. Msty akan mengindeks semua catatan di vault.", + "dropZoneText": "Seret dan lepas Obsidian Vaults di sini", + "browseVaults": "Jelajahi Obsidian Vaults" + }, + "notes": { + "title": "Catatan", + "description": "Tambahkan catatan Anda sendiri ke Knowledge Stack. Catatan ini akan dipotong dan di-embed untuk pencarian semantik.", + "addNote": "Tambah Catatan", + "titlePlaceholder": "Masukkan judul catatan...", + "contentPlaceholder": "Masukkan konten catatan...", + "empty": "Belum ada catatan yang ditambahkan. Klik 'Tambah Catatan' untuk memulai.", + "unsaved": "Belum disimpan" + }, + "youTubeLinks": { + "title": "Tautan YouTube", + "description": "Tambahkan tautan video YouTube untuk mengindeks transkripnya. Msty akan mengambil transkrip dan membuatnya dapat dicari.", + "dropZoneText": "Seret dan lepas tautan YouTube di sini atau tempel di bawah", + "inputPlaceholder": "Tempel URL YouTube di sini (dipisahkan spasi atau koma)...", + "inputPlaceholderWithDetected": "Tempel URL YouTube di sini ({count} terdeteksi) | Tempel URL YouTube di sini ({count} terdeteksi)", + "autoDetection": "Tarik otomatis URL yang terdeteksi", + "detectedCount": "{count} URL terdeteksi | {count} URL terdeteksi", + "detectedUnpulledUrls": "{count} URL YouTube terdeteksi tetapi belum ditarik | {count} URL YouTube terdeteksi tetapi belum ditarik" + } + }, + "itemActions": { + "markForReprocessing": "Tandai untuk Diproses Ulang", + "lockTemporary": "Kunci Sementara", + "lockPermanent": "Kunci Permanen", + "unlock": "Buka Kunci", + "ignoreRetrieval": "Abaikan untuk Pengambilan", + "unignoreRetrieval": "Sertakan dalam Pengambilan", + "moreActions": "Aksi lainnya" + }, + "loadMode": { + "title": "Mode Muat", + "dialogTitle": "Pilih Mode Muat", + "distribution": "Distribusi", + "dialogDescription": "Pilih bagaimana file ini harus dimuat selama penyusunan Knowledge Stack.", + "staticFiles": "File Statis", + "dynamicFiles": "File Dinamis", + "syncFiles": "File Sinkronisasi", + "totalFiles": "Total File", + "specialModes": "Mode Khusus", + "specialModesRatio": "Rasio Mode Khusus", + "static": { + "label": "Mode Statis", + "description": "Menggunakan versi yang di-cache dari saat file ditambahkan. Cepat dan dapat diprediksi, tetapi tidak mencerminkan perubahan terbaru.", + "shortDescription": "Konten di-cache dimuat dari pengindeksan awal", + "badge": "Default" + }, + "dynamic": { + "label": "Mode Dinamis", + "description": "Memuat konten file terbaru pada setiap penyusunan. Sedikit lebih lambat tetapi selalu terkini.", + "shortDescription": "Konten baru dimuat pada setiap penyusunan", + "badge": "Direkomendasikan" + }, + "sync": { + "label": "Mode Sinkronisasi", + "description": "Memantau perubahan file dan menyusun ulang secara otomatis. Terbaik untuk file kecil yang sering diperbarui.", + "shortDescription": "Menyusun ulang otomatis saat file berubah", + "badge": "Mahal" + } + }, + "syncMode": { + "start": "Mulai Mode Sinkronisasi", + "pause": "Jeda Mode Sinkronisasi", + "pauseAll": "Jeda Semua", + "started": "Mode Sinkronisasi Dimulai", + "startedDetail": "Sekarang memantau perubahan file untuk {name}", + "stopped": "Mode Sinkronisasi Dijeda", + "stoppedDetail": "Pemantauan file telah dijeda", + "startFailed": "Gagal Memulai Mode Sinkronisasi", + "startFailedDetail": "Harap pastikan Knowledge Stack memiliki file yang ditandai untuk Mode Sinkronisasi", + "allPaused": "Semua Mode Sinkronisasi Dijeda", + "allPausedDetail": "Pemantauan file telah dihentikan untuk semua knowledge stack", + "active": "{count} Aktif | {count} Aktif", + "activeTitle": "Mode Sinkronisasi Aktif", + "filesWatching": "{count} file | {count} file", + "filesCount": "{count} file | {count} file", + "startedTime": "Dimulai {time}", + "totalStats": "{stacks} stack, {files} file | {stacks} stack, {files} file", + "hoursAgo": "{hours}j lalu", + "daysAgo": "{days}h lalu" + }, + "analytics": { + "title": "Analitik dan Wawasan", + "lastComposed": "Terakhir Disusun", + "sections": "Bagian Analitik", + "performanceTimings": "Waktu Kinerja", + "summaryStatistics": "Statistik Ringkasan", + "contentBreakdown": "Rincian Konten", + "querySettings": "Pengaturan Kueri", + "readingStatistics": "Statistik Membaca", + "noAnalyticsAvailable": "Tidak Ada Analitik Tersedia", + "noAnalyticsDescription": "Analitik akan tersedia setelah menyusun Knowledge Stack ini.", + "noSectionsSelected": "Tidak Ada Bagian Analitik Dipilih", + "noSectionsSelectedDescription": "Harap pilih satu atau lebih bagian analitik di atas untuk melihat wawasan tentang Knowledge Stack Anda.", + "selectAllSections": "Pilih Semua Bagian", + "timings": { + "loadingItems": "Memuat Item", + "splittingChunks": "Memisahkan @:knowledgeStack.chunksConsole.chunks", + "embeddingChunks": "Meng-embed @:knowledgeStack.chunksConsole.chunks", + "composingStack": "Menyusun Stack", + "totalTime": "Total Waktu", + "parallelNote": "Beberapa operasi dapat berjalan paralel, jadi waktu individual mungkin tidak berjumlah total waktu", + "fileReading": "Membaca File", + "databaseWrite": "Penulisan Database" + }, + "stats": { + "numberOfItems": "# Item", + "totalChunks": "Total @:knowledgeStack.chunksConsole.chunks", + "availableChunks": "@:knowledgeStack.chunksConsole.chunks Tersedia", + "skippedChunks": "@:knowledgeStack.chunksConsole.chunks Dilewati", + "wordCount": "Jumlah Kata", + "characterCount": "Jumlah Karakter", + "readingTime": "Waktu Baca" + }, + "ignoredItems": "Item yang Diabaikan", + "ignoredForRetrieval": "Diabaikan untuk Pengambilan", + "ignoredItemsDescription": "Item ini dikecualikan dari operasi pencarian dan pengambilan", + "ignoredPercentage": "Persentase item yang diabaikan", + "ofTotal": "dari {total}", + "files": "File", + "notes": "Catatan", + "youTubeLinks": "Video YouTube", + "noIgnoredItems": "Tidak Ada Item yang Diabaikan", + "allItemsIncluded": "Semua item dalam Knowledge Stack ini disertakan dalam pencarian dan pengambilan", + "recommendation": "Rekomendasi", + "contentTypes": { + "files": "FILE", + "obsidianVaults": "OBSIDIAN VAULTS", + "folders": "FOLDER", + "notes": "CATATAN", + "youTubeLinks": "TAUTAN YOUTUBE" + }, + "piiScrubbing": { + "title": "Pembersihan PII", + "totalChunks": "Total @:knowledgeStack.chunksConsole.chunks", + "scrubbedChunks": "@:knowledgeStack.chunksConsole.chunks Dibersihkan", + "cachedChunks": "@:knowledgeStack.chunksConsole.chunks Di-cache", + "coverage": "Cakupan", + "progress": "Kemajuan Pembersihan", + "loadAnalytics": "Muat Analitik", + "failedToLoadAnalytics": "Gagal memuat data analitik PII", + "analyticsNotLoaded": "Analitik PII Tidak Dimuat", + "clickToViewAnalytics": "Klik \"Muat Analitik\" untuk melihat statistik pembersihan PII", + "scoreTooltip": "Skor ini mencerminkan seberapa komprehensif pembersihan PII diterapkan ke Knowledge Stack Anda. Skor lebih tinggi berarti lebih banyak potongan telah diproses untuk penghapusan PII.", + "optionalDescription": "Pembersihan PII bersifat opsional. Aktifkan dalam pengaturan kueri hanya jika konten Anda berisi informasi pribadi sensitif.", + "protectionDescription": "Mengukur seberapa baik informasi sensitif dilindungi di Knowledge Stack Anda", + "status": { + "notEnabled": "Tidak Diaktifkan", + "wellProtected": "Terlindungi dengan Baik", + "partiallyProtected": "Terlindungi Sebagian", + "limitedProtection": "Perlindungan Terbatas", + "minimalProtection": "Perlindungan Minimal" + }, + "insights": { + "excellentPrivacy": "Perlindungan privasi sangat baik - hampir semua konten diamankan", + "goodPrivacy": "Perlindungan privasi baik - sebagian besar konten diamankan", + "partialPrivacy": "Perlindungan privasi sebagian - pertimbangkan untuk meninjau pengaturan", + "limitedPrivacy": "Perlindungan privasi terbatas - tinjau konten sensitif", + "notEnabled": "Pembersihan PII tidak diaktifkan. Ini sepenuhnya baik jika konten Anda tidak berisi informasi pribadi sensitif.", + "whenToEnable": "Pertimbangkan untuk mengaktifkan pembersihan PII hanya jika Knowledge Stack Anda berisi nama, alamat, nomor telepon, email, atau data pribadi lainnya.", + "significantReduction": "Pengurangan konten signifikan ({percentage}%) - PII ekstensif ditemukan", + "moderateReduction": "Pengurangan konten sedang ({percentage}%) - beberapa PII dihapus", + "minimalReduction": "Pengurangan konten minimal ({percentage}%) - PII rendah terdeteksi", + "noContentChange": "Tidak ada perubahan ukuran konten - tidak ada PII terdeteksi atau dihapus", + "allChunksProcessed": "Semua potongan berhasil diproses", + "nearlyAllProcessed": "Hampir semua potongan berhasil diproses", + "mostProcessed": "Sebagian besar potongan diproses - beberapa mungkin perlu perhatian", + "incompleteProcessing": "Pemrosesan tidak lengkap - periksa konfigurasi pembersihan PII", + "largeKnowledgeBase": "Basis pengetahuan besar - pertimbangkan untuk meningkatkan cakupan deteksi PII", + "manyUnprocessed": "Banyak potongan belum diproses - tinjau pengaturan pembersihan PII", + "optionalFeature": "Pembersihan PII bersifat opsional. Aktifkan dalam pengaturan kueri jika konten Anda berisi informasi sensitif seperti nama, email, atau nomor telepon.", + "privacyOption": "Pembersihan PII membantu melindungi informasi sensitif. Ini opsional dan dapat diaktifkan dalam pengaturan kueri jika diperlukan." + }, + "labels": { + "securityStatus": "Status Keamanan", + "privacyStatus": "Status Privasi", + "whenToEnable": "Kapan Mengaktifkan", + "contentImpact": "Dampak Konten", + "processingEfficiency": "Efisiensi Pemrosesan", + "scaleRecommendation": "Rekomendasi Skala", + "coverageRecommendation": "Rekomendasi Cakupan", + "optionalFeature": "Fitur Opsional", + "privacyOption": "Opsi Privasi" + } + }, + "querySettingsDetails": { + "searchType": "Tipe Pencarian", + "numberOfChunks": "Jumlah @:knowledgeStack.chunksConsole.chunks", + "promptPrefix": "Prefix Prompt" + }, + "privacyOptimizationScore": "Skor Optimasi Privasi", + "piiProtectionLevel": "Level Perlindungan PII", + "piiScrubbingStatus": "Status Pembersihan PII", + "unscrubbedChunks": "@:knowledgeStack.chunksConsole.chunks Belum Dibersihkan", + "originalSize": "Ukuran Asli", + "processedSize": "Ukuran Diproses", + "sizeReduction": "Pengurangan Ukuran", + "privacyInsights": "@:insights Privasi", + "dataModified": "Data telah dimodifikasi", + "showOutdatedData": "Tampilkan data usang", + "contentDistribution": "Distribusi Konten", + "contentContribution": "{label} berkontribusi {percentage}% dari semua potongan", + "processingIssue": "Masalah Pemrosesan", + "lowEfficiency": "{label} memiliki efisiensi rendah ({efficiency}%)", + "dataQualityIssue": "Masalah Kualitas Data", + "highSkipRates": "{count} tipe konten memiliki tingkat lewati tinggi", + "contentDiversity": "Keragaman Konten", + "singleContentType": "Tipe konten tunggal - pertimbangkan untuk mendiversifikasi sumber", + "excellentDiversity": "Keragaman konten sangat baik di berbagai tipe sumber", + "optimizationTip": "Tips Optimasi", + "reduceChunkSize": "Kurangi ukuran potongan menjadi 800-1200 karakter untuk granularitas konten yang lebih baik", + "increaseChunkSize": "Tingkatkan ukuran potongan menjadi 1500-2000 karakter untuk efisiensi yang lebih baik", + "embeddingThroughput": "Throughput Embedding", + "chunksPerSecond": "{rate} potongan/detik ({time}ms masing-masing)", + "searchStrategy": "Strategi Pencarian", + "balancedSearch": "Pendekatan seimbang menggabungkan pencarian kata kunci + semantik", + "semanticSearch": "Pencarian semantik bertenaga AI - terbaik untuk kueri konseptual", + "keywordSearch": "Pencarian kata kunci tradisional - terbaik untuk istilah tepat", + "retrievalVolume": "Volume Pengambilan", + "lowChunkCount": "Jumlah potongan sangat rendah dapat melewatkan informasi yang relevan", + "highChunkCount": "Jumlah potongan tinggi dapat mencakup noise dan memperlambat respons", + "optimalChunkCount": "Jumlah potongan optimal untuk pengambilan seimbang", + "contentFiltering": "Pemfilteran Konten", + "relaxedFiltering": "Pemfilteran longgar - dapat mencakup konten yang terkait longgar", + "strictFiltering": "Pemfilteran ketat - hasil sangat fokus", + "moderateFiltering": "Pemfilteran seimbang untuk konten yang relevan", + "guidedContext": "Konteks Terpandu", + "customPromptPrefix": "Prefix prompt kustom akan memandu interpretasi kueri", + "lockIndicator": "Indikator Kunci", + "allItemsCanBeReprocessed": "Semua item dapat diproses ulang", + "itemsPartiallyLocked": "{percentage}% item terkunci", + "mostItemsLocked": "Sebagian besar item terkunci - kemampuan pemrosesan ulang terbatas", + "privacySecurity": "Privasi & Keamanan", + "privacyProtectionEnabled": "Perlindungan privasi diaktifkan untuk data sensitif", + "noPiiScrubbing": "Tidak ada pembersihan PII - pastikan konten tidak sensitif", + "scaleOptimization": "Optimasi Skala", + "largeKnowledgeBase": "Basis pengetahuan besar - tingkatkan jumlah potongan untuk cakupan lebih baik", + "smallKnowledgeBase": "Basis pengetahuan kecil - pertimbangkan untuk mengurangi jumlah potongan", + "performanceProfile": "Profil Kinerja", + "optimizedForSpeed": "Konfigurasi dioptimalkan untuk respons cepat", + "optimizedForQuality": "Konfigurasi dioptimalkan untuk hasil berkualitas tinggi", + "highLockRate": "Tingkat Kunci Tinggi", + "lockedItemsPercentage": "{percentage}% item terkunci dan tidak akan diproses ulang", + "unlockRecommendation": "Pertimbangkan untuk membuka item yang terkunci sementara jika perlu pembaruan", + "overHalfLocked": "Lebih dari 50% item terkunci. Ini dapat secara signifikan mengurangi kemampuan basis pengetahuan untuk tetap diperbarui.", + "lockStatus": "Status Kunci", + "totalItems": "Total Item", + "unlocked": "Tidak Terkunci", + "temporarilyLocked": "Terkunci Sementara", + "permanentlyLocked": "Terkunci Permanen", + "lockStatusByContentType": "Status Kunci berdasarkan Tipe Konten", + "tempLocked": "Kunci Sementara", + "permLocked": "Kunci Permanen", + "lockStatusInsights": "Status Kunci @:insights", + "processingEfficiency": "Efisiensi Pemrosesan", + "contentInsights": "@:insights Konten", + "compositionOptimizationScore": "Skor Optimasi Penyusunan", + "compositionInsights": "@:insights Penyusunan", + "performanceInsights": "@:insights Kinerja", + "processingPhaseDetails": "Detail Fase Pemrosesan", + "loadingItems": "Memuat Item", + "splittingChunks": "Memisahkan @:knowledgeStack.chunksConsole.chunks", + "embeddingChunks": "Meng-embed @:knowledgeStack.chunksConsole.chunks", + "fileReading": "Membaca File", + "databaseWrite": "Penulisan Database", + "composingStack": "Menyusun Stack", + "totalProcessingTime": "Total Waktu Pemrosesan", + "totalLockedItems": "Total Item Terkunci", + "efficiency": "Efisiensi", + "loadMode": { + "title": "Analitik Mode Muat", + "description": "Perilaku pemuatan file di seluruh Knowledge Stack Anda", + "distribution": "Distribusi Mode Muat", + "totalFiles": "Total File", + "staticFiles": "Mode Statis", + "dynamicFiles": "Mode Dinamis", + "syncFiles": "Mode Sinkronisasi", + "specialModes": "Mode Khusus", + "specialModesRatio": "% Mode Khusus", + "status": "Status", + "active": "Aktif", + "inactive": "Tidak Aktif", + "breakdown": "Rincian Visual", + "noFiles": "Tidak ada file dalam Knowledge Stack ini", + "desktopOnly": "Opsi Mode Muat hanya tersedia di aplikasi desktop", + "notAvailable": "Opsi Mode Muat hanya tersedia di aplikasi desktop", + "noSpecialModes": "Semua file menggunakan Mode Statis. Aktifkan Mode Dinamis atau Sinkronisasi untuk file agar menggunakan konten terbaru.", + "syncActive": "Mode Sinkronisasi Aktif", + "syncActiveDetails": "Memantau {files} • Dimulai {time}", + "staticDescription": "Konten di-cache dimuat dari pengindeksan awal", + "dynamicDescription": "Konten baru dimuat pada setiap penyusunan", + "syncDescription": "Menyusun ulang otomatis saat file berubah", + "staticBadge": "Default", + "dynamicBadge": "Baru", + "syncBadge": "Langsung", + "insights": { + "highSyncCount": { + "title": "Jumlah File Sinkronisasi Tinggi", + "description": "{count} file dalam Mode Sinkronisasi", + "recommendation": "Pertimbangkan menggunakan Mode Dinamis untuk file yang lebih jarang diperbarui untuk mengurangi penggunaan sumber daya" + }, + "syncEnabled": { + "title": "Mode Sinkronisasi Diaktifkan", + "description": "{count} file secara otomatis diperbarui saat berubah" + }, + "highDynamicUsage": { + "title": "Penggunaan Mode Dinamis Tinggi", + "description": "{percentage}% file menggunakan Mode Dinamis", + "recommendation": "Mode Statis mungkin cukup untuk file yang jarang berubah" + }, + "dynamicEnabled": { + "title": "Mode Dinamis Aktif", + "description": "{count} file memuat konten baru pada setiap penyusunan" + }, + "staticOnly": { + "title": "Hanya Mode Statis", + "description": "Semua file menggunakan konten yang di-cache dari pengindeksan awal", + "recommendation": "Aktifkan Mode Dinamis atau Sinkronisasi untuk file yang sering diperbarui untuk memastikan konten baru" + }, + "mixedModes": { + "title": "Mode Muat Campuran", + "description": "{percentage}% file menggunakan mode muat khusus" + } + } + } + }, + "composeSettings": { + "title": "Pengaturan Penyusunan", + "chunkOverlapping": "@:knowledgeStack.chunksConsole.chunk Tumpang Tindih", + "embeddingModel": { + "title": "Model Embedding", + "warning": "Mengubah model embedding akan memerlukan penyusunan ulang seluruh Knowledge Stack dan bahkan ada kemungkinan penyusunan ulang akan gagal.", + "learnMore": "Pelajari lebih lanjut tentang kompatibilitas model embedding", + "defaultPlaceholder": "Default (Lokal)" + }, + "placeholders": { + "selectEmbeddingModel": "Pilih model embedding", + "selectChunkOverlapping": "Pilih tumpang tindih potongan", + "selectChunkSize": "Pilih ukuran potongan" + }, + "chunkingMethod": { + "title": "Metode Pemotongan", + "recursiveCharacter": "Karakter Rekursif", + "sentence": "Kalimat", + "description": "Pilih bagaimana dokumen harus dipotong menjadi bagian-bagian lebih kecil untuk pencarian dan pengambilan yang lebih baik." + }, + "overlapping": { + "title": "Tumpang Tindih", + "description": "Pilih berapa banyak tumpang tindih yang harus ada antara potongan. Tumpang tindih lebih tinggi dapat meningkatkan konteks tetapi meningkatkan penggunaan token." + }, + "chunkSize": { + "title": "@:knowledgeStack.chunksConsole.chunk Ukuran", + "description": "Atur ukuran maksimum setiap potongan dalam karakter. Potongan lebih kecil dapat meningkatkan akurasi pencarian tetapi meningkatkan penggunaan token." + }, + "chunkSizesToIgnore": { + "title": "@:knowledgeStack.chunksConsole.chunk Ukuran untuk Diabaikan", + "description": "Tentukan ukuran potongan yang harus diabaikan selama pemrosesan. Berguna untuk mengecualikan potongan yang sangat kecil atau sangat besar." + } + }, + "querySettings": { + "title": "Pengaturan Kueri", + "numberOfChunks": "Jumlah @:knowledgeStack.chunksConsole.chunks", + "promptPrefix": "Prefix Prompt", + "similarityThreshold": { + "low": "Rendah", + "medium": "Sedang", + "high": "Tinggi", + "highest": "Tertinggi" + }, + "searchTypes": { + "semantic": "Pencarian Semantik", + "keyword": "Pencarian Kata Kunci", + "hybrid": "Pencarian Hybrid" + }, + "modes": { + "push": "Mode Push", + "pull": "Mode Pull" + }, + "chunks": { + "title": "Konteks Knowledge Stack", + "loadError": "Gagal memuat potongan Knowledge Stack. Silakan coba lagi.", + "searchSettings": "Pengaturan Pencarian", + "searchType": "Tipe Pencarian", + "searchQuery": "Kueri Pencarian", + "source": "Sumber", + "content": "Konten", + "fullContent": "Konten Penuh", + "chunkInfo": "@:knowledgeStack.chunksConsole.chunk Informasi", + "knowledgeStack": "Knowledge Stack", + "chunks": "potongan", + "maxChunks": "Maks @:knowledgeStack.chunksConsole.chunks" + }, + "retrievalMode": { + "title": "@:knowledgeStack.chunksConsole.chunk Mode Pengambilan", + "description": "Pilih antara mode Push di mana potongan diambil sebelumnya, atau mode Pull di mana model dapat menanyakan Knowledge Stack secara langsung" + } + }, + "chunks": { + "coverage": "Cakupan", + "skippedChunks": "@:knowledgeStack.chunksConsole.chunks Dilewati", + "availableChunks": "@:knowledgeStack.chunksConsole.chunks Tersedia", + "numberOfChunks": "Jumlah @:knowledgeStack.chunksConsole.chunks", + "promptPrefix": "Prefix Prompt", + "chunkingMethod": "Metode Pemotongan", + "chunkSize": "@:knowledgeStack.chunksConsole.chunk Ukuran", + "chunkOverlap": "@:knowledgeStack.chunksConsole.chunk Tumpang Tindih", + "totalChunks": "Total @:knowledgeStack.chunksConsole.chunks", + "cachedChunks": "@:knowledgeStack.chunksConsole.chunks Di-cache", + "scrubbedChunks": "@:knowledgeStack.chunksConsole.chunks Dibersihkan", + "loadError": "Gagal memuat potongan Knowledge Stack. Silakan coba lagi.", + "searchSettings": "Pengaturan Pencarian", + "searchType": "Tipe Pencarian", + "maxChunks": "Maks @:knowledgeStack.chunksConsole.chunks", + "searchQuery": "Kueri Pencarian", + "synthesizedQuery": "Kueri Disintesis", + "chunks": "potongan | potongan", + "source": "Sumber", + "content": "Konten", + "viewFull": "Lihat Konten Penuh", + "fullContent": "@:knowledgeStack.chunksConsole.chunk Konten Penuh", + "chunkInfo": "@:knowledgeStack.chunksConsole.chunk Informasi", + "knowledgeStack": "Knowledge Stack", + "scrubbed": "Dibersihkan", + "original": "Asli", + "chunkId": "@:knowledgeStack.chunksConsole.chunk ID", + "piiStatus": "Status PII", + "piiScrubbed": "PII Dibersihkan", + "piiUnscrubbed": "PII Belum Dibersihkan", + "tooltip": { + "scrubbed": "Konten telah dibersihkan untuk penghapusan PII", + "cached": "Menggunakan versi dibersihkan yang di-cache", + "fresh": "Konten yang baru dibersihkan", + "original": "Konten asli tanpa @:pii.scrubbing.title" + }, + "queryAnalysis": "Analisis Kueri", + "fullContentRetrieved": "Konteks Konten Penuh Aktif", + "documentsRetrieved": "Dokumen Diambil", + "contentContext": "Konteks Konten", + "keywords": "Kata Kunci", + "fullDoc": "Dokumen Penuh", + "type": "Tipe", + "fullDocument": "Dokumen Penuh" + }, + "chunksVisualizer": { + "title": "@:knowledgeStack.chunksConsole.chunks Visualizer", + "description": "Visualisasikan bagaimana dokumen dipotong", + "openStitcher": "Buka Visualizer", + "viewStitcher": "Lihat Visualizer", + "stitchableFiles": "File Tersedia", + "loading": "Memuat file...", + "noFiles": "Tidak ada file ditemukan", + "selectFile": "Pilih File", + "selectFileDescription": "Pilih file dari kiri untuk memvisualisasikan potongan dan kontennya", + "mimeType": "Tipe MIME", + "chunks": "@:knowledgeStack.chunksConsole.chunks", + "overlaps": "Tumpang Tindih", + "stitchedSize": "Ukuran Tergabung", + "showOverlaps": "Tampilkan Tumpang Tindih", + "hideOverlaps": "Sembunyikan Tumpang Tindih", + "showChunks": "Tampilkan @:knowledgeStack.chunksConsole.chunks", + "showStitched": "Tampilkan Tergabung", + "copyContent": "Salin Konten", + "stitchedContent": "Konten Tergabung", + "scrubbedChunks": "@:knowledgeStack.chunksConsole.chunks Dibersihkan", + "unScrubbedChunks": "@:knowledgeStack.chunksConsole.chunks Belum Dibersihkan", + "overlapRemoved": "Tumpang tindih telah dihapus untuk rekonstruksi teks bersih", + "chunkNumber": "@:knowledgeStack.chunksConsole.chunk {number}", + "overlapPrevious": "Tumpang Tindih Sebelumnya", + "overlapNext": "Tumpang Tindih Berikutnya", + "overlapWithPrevious": "Teks ini tumpang tindih dengan potongan sebelumnya", + "overlapWithNext": "Teks ini tumpang tindih dengan potongan berikutnya", + "chunkIndices": "Posisi karakter dalam file", + "coreIndices": "Konten inti tanpa tumpang tindih", + "chunkCount": "{count} potongan", + "showOriginal": "Tampilkan Asli", + "showScrubbed": "Tampilkan Dibersihkan", + "showScrubbedOnly": "Tampilkan Hanya Dibersihkan", + "showAllChunks": "Tampilkan Semua @:knowledgeStack.chunksConsole.chunks", + "tooltip": { + "scrubbed": "Konten telah dibersihkan untuk penghapusan PII", + "cached": "Menggunakan versi dibersihkan yang di-cache", + "fresh": "Konten yang baru dibersihkan" + }, + "itemsPerPage": "Per Halaman", + "showingChunks": "{start}-{end} dari {total} potongan", + "loadingChunks": "Memuat potongan...", + "noItems": "Tidak ada item ditemukan", + "selectItem": "Pilih Item", + "selectItemDescription": "Pilih file atau catatan dari kiri untuk memvisualisasikan potongan dan kontennya", + "openConsole": "Buka Konsol", + "selectedChunks": "{count} @:knowledgeStack.chunksConsole.chunk Dipilih", + "deleteSelected": "Hapus yang Dipilih", + "clearSelection": "Bersihkan Pilihan", + "confirmDelete": "Konfirmasi Hapus", + "confirmDeleteMessage": "Apakah Anda yakin ingin menghapus {count} potongan yang dipilih? Tindakan ini tidak dapat dibatalkan.", + "deleteSuccess": "@:knowledgeStack.chunksConsole.chunks Dihapus", + "deleteSuccessDetail": "Berhasil menghapus {count} potongan", + "deletedChunksCount": "{count} @:knowledgeStack.chunksConsole.chunk berhasil dihapus", + "deleteError": "Hapus Gagal" + }, + "export": { + "forceCompose": "Paksa Susun", + "overallProgress": "Kemajuan Keseluruhan", + "itemsExported": "{count} item diekspor", + "items": "Item", + "skip": "Lewati", + "exportCompleted": "Ekspor berhasil diselesaikan!", + "savedTo": "Disimpan ke: {path}", + "cancelAll": "Batal Semua", + "done": "Selesai", + "export": "Ekspor", + "exporting": "Mengekspor", + "knowledgeStack": "Knowledge Stack", + "folder": "Folder", + "exportFailed": "Ekspor gagal", + "importFailed": "Impor gagal" + }, + "messages": { + "editsSaved": "Perubahan Anda pada Knowledge Stack telah disimpan. Anda perlu menyusun ulang untuk menerapkan perubahan.", + "savedAndProcessing": "Knowledge stack disimpan dan pemrosesan dimulai", + "cannotForceCompose": "Tidak dapat memaksa susun: Knowledge stack harus disimpan terlebih dahulu", + "failedToForceCompose": "Gagal memaksa susun Knowledge Stack", + "forceComposeStarted": "Paksa susun dimulai - semua item akan diproses ulang", + "failedToUpdateQuerySettings": "Gagal memperbarui pengaturan kueri", + "querySettingsUpdated": "Pengaturan kueri diperbarui", + "justNow": "baru saja", + "minutesAgo": "{minutes} menit lalu", + "searchPlaceholder": "Cari...", + "failedToSelectItem": "Gagal memilih item", + "failedToSelectFolder": "Gagal memilih folder", + "processingCompleted": "Knowledge Stack {title} pemrosesan selesai", + "processingFailed": "Knowledge Stack {title} pemrosesan gagal", + "nothingToCompose": "Tidak ada yang disusun untuk Knowledge Stack {title}", + "composeError": "Error menyusun Knowledge Stack {title}", + "downloadImportNotAvailableInWeb": "Mengimpor dari URL hanya tersedia di aplikasi desktop", + "deleteSuccess": "{count} @:knowledgeStack.title dihapus!", + "createError": "Gagal membuat @:knowledgeStack.title", + "saveEditsError": "Gagal menyimpan editan ke @:knowledgeStack.title", + "folderAdded": "Folder '{name}' ditambahkan ke Knowledge Stack" + }, + "folderLockedTemporary": "Folder '{name}' terkunci sementara", + "folderLockedPermanent": "Folder '{name}' terkunci permanen", + "lockFailed": "Gagal mengunci folder", + "folderUnlocked": "Folder '{name}' tidak terkunci", + "unlockFailed": "Gagal membuka folder", + "unlock": "Buka Kunci", + "status": { + "misc": "Lain-lain", + "path": "Jalur: {path}", + "name": "Nama: {name}", + "unknown": "Tidak Dikenal", + "original": "Asli", + "loadingPiiAnalytics": "Memuat analitik PII...", + "allItemsUnlocked": "Semua item tidak terkunci dan dapat diproses ulang saat diperlukan." + }, + "abortProcessing": "Batalkan Pemrosesan", + "errors": { + "processingFailed": "Pemrosesan Gagal", + "errorMessage": "Pesan Error", + "occurredAt": "Terjadi pada", + "failedFile": "File Gagal", + "errorSummary": "Ringkasan Error", + "technicalDetails": "Detail Teknis", + "stackTrace": "Stack Trace", + "copyDetails": "Salin Detail", + "detailsCopied": "Detail error disalin ke papan klip", + "clickToSeeDetails": "Klik untuk melihat detail error", + "fileIsNull": "File null", + "checkingPathError": "Error memeriksa apakah jalur adalah direktori", + "processingFolderError": "Error memproses folder", + "lockFolderTemporaryFailed": "Gagal mengunci folder sementara", + "lockFolderPermanentFailed": "Gagal mengunci folder permanen", + "unlockFolderFailed": "Gagal membuka folder", + "status": { + "completed": "Status: Selesai", + "processing": "Status: Memproses", + "pending": "Status: Tertunda", + "draft": "Status: Draf", + "needsReprocessing": "Status: Perlu Diproses Ulang", + "error": "Status: Error", + "lockedTemporary": "Status: Terkunci Sementara", + "lockedPermanent": "Status: Terkunci Permanen", + "aborted": "Status: Dibatalkan", + "unknown": "Status: Tidak Dikenal" + } + } + }, + "features": { + "showcase": { + "title": "Buka Fitur Aurum", + "subtitle": "Tingkatkan ke lisensi Aurum untuk fitur AI paling kuat dan kemampuan lanjutan", + "eyebrow": "Semua yang Anda butuhkan", + "viewPricing": "Lihat Harga", + "featureMatrix": "Matriks Fitur", + "activateLicense": "Aktifkan Lisensi", + "licenses": { + "aurum": "Aurum" + } + } + }, + "images": { + "upload": "Unggah gambar…", + "onlySupported": "Hanya file gambar yang didukung.", + "maxSize": "Gambar harus 1MB atau lebih kecil." + }, + "userAvatar": { + "updated": "Gambar profil diperbarui.", + "updateFailed": "Gagal memperbarui gambar. Silakan coba lagi.", + "changeHint": "Klik untuk mengubah gambar profil" + }, + "setting": { + "lostAndFound": { + "title": "Hilang & Ditemukan", + "description": "Temukan dan pulihkan ruang kerja yang hilang dari komputer Anda. Hanya database ruang kerja yang dipindai dan ditemukan, bukan lampiran.", + "experimentalInfo": "Hilang & Ditemukan bersifat eksperimental. Selalu simpan cadangan data ruang kerja Anda sebelum mencoba pemulihan.", + "scanForLostWorkspaces": "Pindai Ruang Kerja yang Hilang", + "scanAppData": "Pindai Data Aplikasi", + "scanFolder": "Pindai Folder…", + "workspace": "Ruang Kerja", + "file": "File", + "status": "Status", + "lastModifiedColumn": "Terakhir Dimodifikasi", + "actions": "Aksi", + "statusCurrent": "Saat Ini", + "statusLinked": "Tertaut", + "statusFound": "Ditemukan", + "restoreCurrentWorkspace": "Pulihkan ruang kerja saat ini", + "importAsNewWorkspace": "Impor Sebagai Ruang Kerja Baru", + "restoreConfirmHeader": "Pulihkan ruang kerja saat ini?", + "restoreConfirmMessage": "Ini akan mengganti data ruang kerja yang saat ini aktif dengan data dari file yang dipulihkan. Ini tidak dapat dibatalkan.", + "restore": "Pulihkan", + "failedToImportWorkspace": "Gagal mengimpor ruang kerja", + "workspaceImported": "Ruang kerja diimpor", + "workspaceImportedDetail": "Ruang kerja yang dipulihkan telah diimpor. Beralihlah dari baki ruang kerja jika diperlukan.", + "failedToRestoreWorkspace": "Gagal memulihkan ruang kerja", + "workspaceRestored": "Ruang kerja dipulihkan", + "workspaceRestoredDetail": "Ruang kerja saat ini telah dipulihkan dari file yang ditemukan.", + "showInFileExplorer": "Tampilkan di File Explorer", + "lastModified": "Terakhir dimodifikasi", + "failedToImportRecoveredWorkspace": "Gagal mengimpor ruang kerja yang dipulihkan", + "failedToImportRecoveredWorkspaceUnexpected": "Gagal mengimpor ruang kerja yang dipulihkan (tidak terduga)", + "failedToRestoreFromRecoveredFile": "Gagal memulihkan ruang kerja dari file yang dipulihkan", + "failedToRestoreFromRecoveredFileUnexpected": "Gagal memulihkan ruang kerja dari file yang dipulihkan (tidak terduga)" + } + }, + "quickFilter": "Filter cepat...", + "toggleFilter": "Alihkan filter", + "toggleSidebar": "Alihkan bilah sisi", + "adjust": "Sesuaikan", + "experimentalInfo": "{item} bersifat eksperimental dan dalam pengembangan aktif. Harap laporkan masalah apa pun kepada tim.", + "attachmentsManager": { + "columnHeaders": { + "name": "Nama", + "fileType": "Tipe File", + "attachmentType": "Tipe Lampiran", + "size": "Ukuran", + "actions": "Aksi" + }, + "actions": { + "browseExisting": "Jelajahi Lampiran yang Ada", + "viewAssociations": "Lihat Asosiasi", + "attach": "Lampirkan", + "delete": { + "title": "Hapus Lampiran | Hapus Lampiran", + "confirmationMessage": "Apakah Anda yakin ingin menghapus lampiran? Semua asosiasi ke lampiran juga akan dihapus. Tindakan ini tidak dapat dibatalkan. | Apakah Anda yakin ingin menghapus lampiran? Semua asosiasi ke lampiran juga akan dihapus. Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Berhasil menghapus lampiran | Berhasil menghapus lampiran", + "errorMessage": "Gagal menghapus lampiran | Gagal menghapus lampiran" + } + }, + "search": "Cari berdasarkan Nama", + "filter": "Filter berdasarkan Tipe Lampiran", + "title": "Pengelola Lampiran", + "emptyState": { + "title": "Tidak Ada Lampiran Ditemukan", + "description": "Anda tidak memiliki lampiran yang tersedia." + }, + "associations": { + "title": "Asosiasi untuk {attachmentName}", + "search": "Cari berdasarkan Nama Asosiasi", + "filter": "Filter berdasarkan Entitas Terkait", + "emptyState": { + "title": "Tidak Ada Asosiasi Ditemukan", + "description": "Anda belum menggunakan lampiran ini di mana pun." + }, + "columnHeaders": { + "associationName": "Nama Asosiasi", + "associatedEntity": "Entitas Terkait", + "actions": "Aksi" + }, + "actions": { + "jumpTo": "Lompat ke {entity}", + "detach": { + "action": "Lepaskan", + "title": "Lepaskan Asosiasi", + "confirmationMessage": "Apakah Anda yakin ingin melepaskan asosiasi dari {associationEntity}? Tindakan ini tidak dapat dibatalkan.", + "successMessage": "Berhasil melepaskan asosiasi", + "errorMessage": "Gagal melepaskan asosiasi" + } + } + } + }, + "iconSelector": { + "searchMode": "Cari", + "aiMode": "Prompt AI", + "aiPlaceholder": "Deskripsikan apa yang diwakili ikon...", + "findIcon": "Cari Ikon", + "finding": "Mencari..." + } +}