Files
apes-sidebar/src/client/locales-id.ts
T
figmar 5a7e2139a0 chore(sync): re-base the fork onto upstream dsh-better-sidebar v0.19.1
The fork was pinned at upstream v0.18.0. That is the entire reason the window
ran TWO sidebars and TWO near-identical panel toggles: DSH 2.0.10 ships its own
right sidebar (@deepseek-ai/dsh-client-ui-sidebar-right), and upstream only
adopted it in v0.19.0-alpha.1 — which arrived after our fork point. v0.19.1 is
also the one upstream line whose support range actually matches our host
(engines.dsh >=0.1.5-rc.1, 14 DSH peers ^0.1.5-rc.1, host = 0.1.5-rc.2), so it
is the only tag the host's startup precheck accepts.

What upstream v0.18.0 → v0.19.1 brings
- src/client/native/{index,surface,tab-adapter}.tsx: every tab the plugin can
  draw becomes an OFFICIAL native tab type + body, and an external plugin's
  descriptor registered later gets its native type too. This is what retires
  the fork's own right panel — and with it the duplicate toggle cluster
  (`toggleCluster` is gone from v0.19.1).
- native tab-chip icons via the `sidebar.right.pane.tab.title` seat, coloured
  built-in tab icons, file/folder glyphs from DSH's own `FileTypeIcon`.
- guide descriptions (DSH renders them while the guide lists <= 4 entries),
  tab bodies that fill the panel, and the 0.1.5-rc.2 adaptation work we were
  carrying by hand (peer/devDep pinning, primitives' transitive devDeps).

How the sync was done
Rebuilt the tree from the v0.19.1 tag rather than resolving 53 conflicted
files: our v0.18.0 delta was measured first and is only (a) one mechanical
rename `dsh-better-sidebar` -> `dsh-apes-sidebar` and (b) ten real edits. So:
tag tree + rename (scoped: code/config/scripts/tests/README, while the 46
historical docs/plans records and switch.sh's upstream package name stay
untouched) + re-applied deltas + our apes module.

Fork deltas re-applied on the new base
- src/client/apes/ (icons / locales / tabs): the three apes:* information-layer
  tabs (agents / apps / profile), registered through the same BetterSidebarService
  as the builtins — which is exactly why they now ride upstream's native adapter
  into the official sidebar for free.
- identity: package.json (name/version 1.2.0/description/forkedFrom), dsh.plugin.json
  (id/version), SIDEBAR_SERVICE_VERSION 1.2.0, README fork notice,
  docs/external-plugin-guide.md.
- scripts/switch.sh + the pnpm switch* scripts (apes <-> upstream two-line switch).
- tests/apes-tabs.spec.ts (unescaped: it starts from the v0.19.1 base).

Dropped
- the Phase A native-registration spike (`apes/native-tabs.tsx` + its spec): it
  re-derived by hand exactly what upstream's native layer already does — the
  hand-written bridge is dead weight now, and v0.19.1's own e2e/jsdom lanes
  cover the same seat contract far better.
- the unused apesProfileGuideDesc key and the two package.json.bak.* backups.

Verified on the new base: typecheck clean; build clean; 1351 passed / 9 skipped
(128 files), up from 1255 on the old base.
2026-10-03 22:51:09 +08:00

456 lines
30 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* The id (Indonesian) dictionary for the betterSidebar namespace.
*
* Mirrors the key set of `zh` in `locales.ts`. The sidebar's `t()`
* consults this dict when `attachBetterLocale(store)` has been called
* with an active better-locale store whose `active` is `'id'`; absent
* that, the existing zh/en chain runs unchanged.
*
* Translation conventions:
* - Git vocabulary stays close to the English form (stage, commit, branch, fork).
* - Settings labels mirror the zh cadence (… perilaku / … cara).
* - Placeholders keep {name} verbatim (interpolation runs after lookup).
* - English brand names (VS Code, Cursor, Zed, SSH) stay as-is.
*/
export const id: Record<string, string> = {
files: 'Berkas',
guideDescFiles: 'Telusuri pohon berkas workspace; klik untuk pratinjau atau edit',
guideDescGit: 'Perubahan Git dan perubahan berkas sesi ini dalam satu tab',
guideDescSubagent: 'Topologi subagent dan tugas latar belakang, langsung',
guideDescSidechat: 'Utas lanjutan independen yang mewarisi konteks sesi ini',
guideDescTerminal: 'Shell sungguhan (xterm + pty), bisa menyambung ulang',
guideDescBrowser: 'Peramban tertanam, bisa mengambil alih tautan chat',
changesSessionEmpty: 'Belum ada operasi file di sesi ini',
changesRead: 'Baca',
changesMdReading: 'Baca',
changesHtmlRender: "Render",
changesHtmlRaw: "Sumber",
changesPdfRender: "Render",
changesPdfRaw: "Sumber",
changesMdRaw: 'Mentah',
changesWrite: 'Tulis',
changesEdit: 'Edit',
changesRunning: 'berjalan',
changesError: 'error',
changesFold: '{count} baris… klik untuk meluaskan',
changesFoldLoading: 'Meluaskan…',
changesFoldUnavailable: 'Konteks tidak tersedia',
changesContext: 'konteks',
changesPriorUnknown: 'Konten sebelum perubahan berada di luar jendela; ditampilkan sebagai sepenuhnya baru',
explorer: 'Explorer',
terminal: 'Terminal',
editor: 'Editor',
editorExplorer: 'Perilaku buka berkas',
editorExplorerDesc: 'Mengontrol cara berkas dibuka',
editorExplorerMerged: 'Gabung',
editorExplorerMergedDesc: 'Berkas beralih di tempat di jendela yang sama; jendela baru memulai dengan pohon terbuka',
editorExplorerSplit: 'Terpisah',
editorExplorerSplitDesc: 'Jendela tanpa path adalah explorer mandiri (pohon saja); setiap berkas membuka jendelanya sendiri (pohon terpasang, tertutup secara default)',
editorTreeToggle: 'Panel pohon berkas',
editorPathPlaceholder: 'Path berkas (relatif terhadap direktori sesi atau absolut), Enter untuk membuka',
editorSearchPlaceholder: 'Cari berkas berdasarkan nama…',
editorSearchNoResults: 'Tidak ada berkas yang cocok',
editorSearchTruncated: 'Terlalu banyak hasil — menampilkan daftar parsial',
editorEmptyHint: 'Pilih berkas dari panel pohon atau input path di atas untuk mulai pratinjau',
openFileNewTab: 'Buka di Tab Baru',
openFileSide: 'Buka di Samping',
openWithMenu: 'Buka dengan',
openWithSshSuffix: ' (SSH)',
pinOpenWith: 'Sematkan ke menu',
unpinOpenWith: 'Lepas sematan',
openWithExplorer: 'File Manager',
openWithVscode: 'VS Code',
openWithCursor: 'Cursor',
openWithZed: 'Zed',
openWithSettingsSshTitle: 'Host remote SSH',
openWithSettingsSshDesc: 'Kosong = ruang kerja lokal; dengan user@host atau alias SSH, opener VSCode-family beralih ke protokol vscode-remote/ssh-remote dan File Manager / Zed / editor kustom non-VSCode-family disembunyikan dari menu',
openWithSettingsSshPlaceholder: 'user@host atau alias SSH',
openWithSettingsCustomTitle: 'Editor kustom',
openWithSettingsCustomDesc: 'Nama + template URL (placeholder {path}) + flag VSCode-family; dalam mode remote hanya editor VSCode-family yang dapat membuka path remote',
openWithSettingsAdd: 'Tambah',
openWithSettingsName: 'Nama',
openWithSettingsTemplate: 'mis. cursor://file/{path}',
openWithSettingsFamily: 'VSCode-family',
openWithSettingsFamilyDesc: 'Editor ini menggunakan dialek URL VSCode (mendukung pembukaan remote SSH)',
openWithSettingsRemove: 'Hapus',
openWithSettingsInvalidHint: 'Editor dengan nama hilang atau template tanpa {path} / scheme:// tidak ditampilkan di menu',
newTab: 'Tab baru',
openExplorer: 'Explorer',
brokenSymlink: 'Symlink rusak',
openGit: 'Panel Git',
newTerminal: 'Terminal baru',
terminalLimit: 'Batas terminal tercapai (3)',
close: 'Tutup',
closeOtherTabs: 'Tutup Tab Lain',
closeLeftTabs: 'Tutup Tab di Kiri',
closeRightTabs: 'Tutup Tab di Kanan',
floatDropHint: 'Lepaskan untuk membuka di jendela bebas',
dockToSidebar: 'Kembali ke bilah samping',
pinTerminal: 'Sematkan Terminal',
pinAgentTerminal: 'Sematkan Terminal Agent',
pinToWorkspace: 'Sematkan ke Workspace',
pinToGlobal: 'Sematkan Global',
unpinTerminal: 'Lepas Sematan',
pinnedTerminalTooltip: '{kind} · {scope} · {cwd}',
pinnedTerminalKindUi: 'Terminal UI',
pinnedTerminalKindAgent: 'Terminal Agent',
pinnedTerminalScopeWorkspace: 'Disematkan ke workspace',
pinnedTerminalScopeGlobal: 'Disematkan global',
pinnedRailLabel: 'Terminal Tersemat',
closePinnedTerminal: 'Tutup Terminal',
collapseBottomPanel: 'Lipat panel bawah',
expandBottomPanel: 'Bentangkan panel bawah',
terminalError: 'Koneksi terminal gagal',
terminalConnectFailed: 'Terminal gagal terhubung berulang kali',
terminalRetry: 'Coba lagi',
terminalWaitBanner: 'Agen menunggu {needle}',
terminalSkipWait: 'Lewati penungguan',
terminalDepsFailed: 'Dependensi terminal node-pty gagal dimuat',
terminalDepsHint: 'Jalankan perintah di bawah ini di terminal atau cmd pada mesin DSH untuk memperbaikinya, lalu coba lagi (node-pty tetap sinkron dengan versi inti DSH):',
terminalDepsProfile: ' (profil terdeteksi: {profile})',
terminalShellNotFound: 'Shell yang dikonfigurasi tidak ditemukan: {name} — periksa path shell di Pengaturan → Side card → Terminal',
preview: 'Pratinjau',
toc: 'Daftar Isi',
edit: 'Edit',
mermaidError: 'Render Mermaid gagal',
mermaidZoomIn: 'Perbesar',
mermaidZoomOut: 'Perkecil',
mermaidZoomReset: 'Reset',
mermaidZoomHint: 'Gulir untuk zoom · seret untuk geser · Esc untuk tutup',
refresh: 'Segarkan',
showInFolder: 'Tampilkan di folder',
refreshUnsavedConfirm: 'File berubah di disk. Menyegarkan akan membuang edit yang belum disimpan. Lanjutkan?',
save: 'Simpan',
saved: 'Tersimpan',
unsaved: 'Belum disimpan',
saveFailed: 'Gagal menyimpan',
truncation: 'Berkas terlalu besar — menampilkan 512KB pertama',
binary: 'Berkas biner, pratinjau tidak tersedia',
loading: 'Memuat…',
error: 'Gagal memuat',
retry: 'Coba lagi',
splitLeft: 'Bagi ke kiri',
splitRight: 'Bagi ke kanan',
splitUp: 'Bagi ke atas',
splitDown: 'Bagi ke bawah',
notRepo: 'Direktori ini bukan repositori git',
noChanges: 'Tidak ada perubahan',
statusTruncated: 'Terlalu banyak perubahan; hanya 2000 entri pertama yang ditampilkan',
stage: 'Stage',
unstage: 'Unstage',
stageAll: 'Stage semua',
unstageAll: 'Unstage semua',
commitPlaceholder: 'Pesan commit (Ctrl+Enter)',
commit: 'Commit',
commitError: 'Commit gagal',
branch: 'Branch',
worktree: 'Worktree',
checkoutError: 'Beralih branch gagal',
history: 'Riwayat',
changes: 'Perubahan berkas',
changesGitLens: 'Git',
changesSessionLens: 'Sesi',
changesFilterAll: 'Semua',
changesFilterEmpty: 'Tidak ada operasi jenis ini',
changesOpenDiffTab: 'Buka di tab diff terpisah',
changesClosePreview: 'Tutup pratinjau',
changesResizePreview: 'Ubah ukuran pratinjau',
changesLoadError: 'Catatan berkas sesi sedang tidak tersedia',
staged: 'Staged',
unstaged: 'Unstaged',
cancel: 'Batal',
diffEmpty: 'Tidak ada perubahan teks',
diffLoadError: 'Gagal memuat diff',
diffBinary: 'Biner',
diffAdded: 'Ditambahkan',
diffDeleted: 'Dihapus',
diffRenamed: 'Diubah nama',
diffExpand: 'Bentangkan {count} baris lagi',
diffCollapse: 'Lipat',
discard: 'Buang perubahan',
discardTitle: 'Buang perubahan',
discardDesc: 'Ini membuang perubahan worktree "{path}" (tidak dapat dipulihkan).',
viewCommitDiff: 'Lihat diff commit',
copyShortHash: 'Salin hash pendek',
copyFullHash: 'Salin hash lengkap',
copySubject: 'Salin subjek',
revertCommit: 'Revert commit',
revertTitle: 'Revert commit',
revertDesc: 'Membuat commit baru pada branch saat ini yang membalikkan "{subject}".',
cherryPickCommit: 'Cherry-pick commit',
cherryPickTitle: 'Cherry-pick commit',
cherryPickDesc: 'Menerapkan perubahan dari "{subject}" ke branch saat ini.',
timeJustNow: 'baru saja',
timeMinutesAgo: '{n} mnt lalu',
timeHoursAgo: '{n} j lalu',
timeYesterday: 'kemarin',
loadMore: 'Muat lebih banyak',
historyLoadError: 'Gagal memuat lebih banyak riwayat',
produced: 'Dihasilkan',
producedOpen: 'Buka di sidebar',
disconnected: 'Terminal terputus, menyambung ulang…',
exited: 'Proses terminal keluar',
noSession: 'Pilih obrolan untuk menggunakan sidebar',
pluginNotLoaded: 'Plugin tidak dimuat; tab tidak tersedia untuk sementara:',
hiddenFiles: 'Berkas tersembunyi',
parent: 'Direktori induk',
copied: 'Tersalin',
copy: 'Salin',
newFile: 'Berkas baru',
openEditor: 'Buka editor',
gitDetail: 'Lihat detail perubahan',
referenceFile: '@berkas',
addToConversation: 'Tambahkan ke obrolan',
copyRelative: 'Salin path relatif',
copyAbsolute: 'Salin path absolut',
rename: 'Ganti nama',
renameInvalid: 'Nama tidak boleh kosong atau mengandung pemisah jalur.',
delete: 'Hapus',
deleteTitle: 'Hapus "{name}"?',
deleteDescFile: 'Ini menghapus file secara permanen. Tidak dapat dibatalkan.',
deleteDescDir: 'Ini menghapus direktori dan seluruh isinya secara permanen. Tidak dapat dibatalkan.',
dismiss: 'Tutup',
download: 'Unduh',
uploadFiles: 'Unggah berkas',
uploadFolder: 'Unggah folder',
uploadHere: 'Unggah di sini',
uploadDropHint: 'Jatuhkan berkas/folder di sini untuk mengunggah',
uploadDropChat: 'Jatuhkan ke area obrolan: tambahkan gambar ke obrolan',
uploadTo: 'Unggah ke {dir}',
uploadingTo: 'Mengunggah ke {dir}…',
uploadProgress: 'Mengunggah {done}/{total}: {name}',
uploadDone: 'Diunggah {count} berkas',
uploadFailed: 'Unggahan gagal: {error}',
uploadFailedUnknown: 'Galat tak dikenal',
uploadTooLarge: 'Berkas terlalu besar (melebihi batas unggah)',
uploadCancelled: 'Unggahan dibatalkan',
settingsNav: 'Kartu samping',
settingsIntro: 'Kelola apa yang ditampilkan kartu samping dan perilakunya',
settingsPopupDesc: 'Konfigurasikan opsi terkait untuk {feature}',
settingsDone: 'Selesai',
settingsOpenToolsTitle: 'Suntik alat buka sidebar untuk model',
settingsOpenToolsDesc: 'Saat diaktifkan, model dapat membuka file, folder, dan halaman HTTP(S) di sidebar melalui alat sidebar_open (nonaktif secara default)',
settingsTitleBarTitle: 'Mode kompatibilitas posisi',
settingsTitleBarDesc: 'Pilih skema kompatibilitas title-bar: auto-detect (default, konservatif) / Web resmi DSH / shell desktop yang dikenal / kustom (jarak geser + CSS kustom)',
settingsTitleBarStripTitle: 'Jarak geser',
settingsTitleBarStripDesc: 'Tinggi strip title-bar: seberapa jauh tombol sidebar dan konten bergeser ke bawah dalam px (0–120, default 40; berlaku di bawah skema kustom)',
settingsSchemeAutoTitle: 'Auto-detect',
settingsSchemeAutoDesc: 'Konservatif: hanya API Window Controls Overlay standar yang berkontribusi (tinggi caption-overlay nyata); lingkungan web polos tidak dimodifikasi',
settingsSchemeWebTitle: 'Web resmi DSH',
settingsSchemeWebDesc: 'Deklarasikan secara eksplisit UI web resmi: tanpa adaptasi sama sekali (bahkan geometri WCO standar tidak berlaku)',
settingsSchemeCustomTitle: 'Kustom',
settingsSchemeCustomDesc: 'Kendali penuh: injeksikan CSS kustom (dapat menimpa style bawaan) dan atur jarak geser title-bar',
settingsSchemeDetectedSuffix: 'terdeteksi',
settingsCustomCssTitle: 'CSS kustom',
settingsCustomCssDesc: 'Style yang ditambahkan di akhir halaman (yang ditulis kemudian menang pada seri; gunakan !important untuk menimpa variabel inline yang ditulis JS)',
settingsCustomCssPlaceholder: '/* mis. sediakan 36px untuk shell dengan title-bar yang digambar sendiri */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
settingsSaveFailed: 'Gagal menyimpan',
settingsConflict: 'Pengaturan diubah di jendela lain — silakan coba lagi',
binaryNoPreview: 'Tipe berkas ini tidak dapat dipratinjau',
downloadToView: 'Unduh untuk melihat',
settingsSubagentTitle: 'Aktifkan otomatis halaman Tasks saat subagen muncul',
settingsSubagentDesc: 'Aktifkan halaman Tasks saat obrolan saat ini membuat subagen baru; pada layar lebar, kartu samping juga dibentangkan; pada layar sempit, laci layar penuh tidak dipaksa terbuka; matikan untuk membukanya secara manual',
settingsJobsTitle: 'Aktifkan otomatis halaman Tasks saat ada tugas latar baru',
settingsJobsDesc: 'Aktifkan halaman Tasks setiap kali tugas latar baru muncul untuk obrolan saat ini (setiap tugas baru memicu aktivasi); pada layar lebar, kartu samping juga dibentangkan; pada layar sempit, laci layar penuh tidak dipaksa terbuka; matikan untuk membukanya secara manual',
settingsToolsTitle: 'Suntik alat terminal untuk model',
settingsToolsDesc: 'Saat diaktifkan, model dapat membuat dan mengendalikan terminal sidebar melalui 8 alat terminal_* (nonaktif secara default)',
settingsFenceTitle: 'Pemeriksaan path workspace',
settingsFenceDesc: 'Saat aktif, fitur berkas sidebar hanya menjangkau path di dalam workspace sesi (default); saat nonaktif, berkas di mana pun di host dapat diakses — skrip halaman memperoleh jangkauan yang sama selama itu',
fenceErrorReason: 'Path ini berada di luar workspace sesi dan diblokir oleh pemeriksaan',
fenceDisableAction: 'Matikan pemeriksaan workspace',
settingsBottomTerminalTitle: 'Buka terminal otomatis saat panel bawah pertama kali dibentangkan',
settingsBottomTerminalDesc: 'Saat panel bawah pertama kali dibentangkan dalam sesi, coba buka tab terminal baru di panel bawah (kuota terminal tetap berlaku; aktif secara default)',
settingsFontFamilyTitle: 'Keluarga font terminal',
settingsFontFamilyDesc: 'Keluarga font terminal kustom (stack CSS font-family seperti "JetBrains Mono", monospace; biarkan kosong untuk mengikuti font monospace tema)',
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
settingsFontSizeTitle: 'Ukuran font terminal',
settingsFontSizeDesc: 'Ukuran font terminal dalam px (9–32, default 13)',
settingsFontSizeSuffix: 'px',
settingsShellTitle: 'Path shell',
settingsShellDesc: 'Shell yang dibangkitkan untuk terminal UI dan model (path absolut atau executable polos). Kosong mempertahankan urutan lama: config.shell yaml → $SHELL / login shell / powershell.exe Windows. Berlaku untuk terminal yang dibuka setelahnya',
settingsShellPlaceholder: 'mis. /bin/zsh (kosong = auto)',
settingsShellArgsTitle: 'Argumen shell',
settingsShellArgsDesc: 'Argumen shell eksplisit, dipisah spasi; jika tidak kosong, sepenuhnya menggantikan default (kontrak yang sama dengan shellArgs yaml)',
settingsShellArgsPlaceholder: 'mis. -l (kosong = default)',
settingsTabsTitle: 'Konten sidebar',
settingsViewersTitle: 'Pratinjau berkas',
settingsGeneralTitle: 'Umum',
settingsPopup: 'Pengaturan fitur',
settingsViewerCatchAll: 'Catch-all: berkas apa pun',
viewerImage: 'Gambar',
viewerPdf: 'PDF',
viewerMarkdown: 'Markdown',
viewerCode: 'Kode',
viewerBinary: 'Unduhan biner',
viewerHtml: 'HTML',
browser: 'Browser',
browserPlaceholder: 'Masukkan URL, mis. example.com',
browserGo: 'Buka',
browserBack: 'Mundur',
browserForward: 'Maju',
browserStart: 'Masukkan URL untuk mulai menjelajah (mode sandbox)',
browserBlockedScheme: 'Diblokir: hanya URL http/https yang diizinkan',
browserBlockedLoopback: 'Diblokir: alamat lokal dan internal tidak dapat dijelajahi di sini',
browserInvalid: 'URL tidak valid',
browserNoSandboxWarning: 'Sandbox mati: halaman saat ini berjalan dengan hak penuh GUI (aktifkan kembali di pengaturan)',
htmlNoSandboxWarning: 'Sandbox mati: HTML ini berjalan dengan hak penuh GUI (aktifkan kembali di pengaturan)',
sandboxStatusOn: 'Mode sandbox: aktif · halaman tidak dapat mengakses data GUI atau berkas lokal; login dan cookie pihak ketiga mungkin tidak berfungsi',
sandboxUnlock: 'Nonaktifkan sementara (tidak aman)',
sandboxRestore: 'Pulihkan sandbox',
settingsHtmlDefaultUnsafeTitle: 'Buka pratinjau HTML tanpa sandbox secara default (tidak aman)',
settingsHtmlDefaultUnsafeDesc: 'Saat aktif, setiap pratinjau HTML yang baru dibuka dimulai dalam keadaan tanpa sandbox (asal yang sama dengan GUI — dapat membaca berkas sesi dan API internal); baris status masih menawarkan pemulihan sekali ketuk',
settingsHtmlSandboxTitle: 'Nonaktifkan sandbox pratinjau HTML (tidak aman)',
settingsHtmlSandboxDesc: 'Dengan sandbox mati, HTML yang dipratinjau berjalan dengan asal yang sama dengan GUI: dapat membaca berkas sesi, penyimpanan lokal, dan memanggil API internal. Hanya aktifkan untuk berkas yang sepenuhnya tepercaya',
settingsBrowserSandboxTitle: 'Nonaktifkan sandbox browser (tidak aman)',
settingsBrowserSandboxDesc: 'Dengan sandbox mati, situs yang dikunjungi berjalan dengan asal yang sama dengan GUI: dapat membaca data sesi dan menyamar sebagai sesi login Anda. Hanya aktifkan untuk situs yang sepenuhnya tepercaya',
settingsBrowserLinksTitle: 'Buka tautan eksternal obrolan di sidebar',
settingsBrowserLinksDesc: 'Saat aktif, mengeklik tautan eksternal di obrolan atau GUI membuka sidebar alih-alih jendela baru; HTTP dan HTTPS dikendalikan terpisah oleh sakelar di bawah; Ctrl/Cmd+klik selalu menembus',
settingsBrowserHttpTitle: 'Buka halaman HTTP di sidebar',
settingsBrowserHttpDesc: 'Saat aktif, mengeklik tautan eksternal HTTP di obrolan atau GUI membuka sidebar (halaman plugin yang mendeklarasikan urlTarget menang); Ctrl/Cmd+klik selalu menembus',
settingsBrowserHttpsTitle: 'Buka halaman HTTPS di sidebar',
settingsBrowserHttpsDesc: 'Saat aktif, mengeklik tautan eksternal HTTPS di obrolan atau GUI membuka sidebar. Nonaktif secara default: kebanyakan situs HTTPS menolak untuk disematkan, jadi browser sistem adalah default yang lebih mulus',
settingsBrowserLoopbackTitle: 'Alamat lokal yang diizinkan',
settingsBrowserLoopbackDesc: 'Daftar putih alamat loopback yang dipisahkan koma (mis. localhost:5174 atau 127.0.0.1:8080) yang dapat dikunjungi browser sidebar; kosong memblokir semua alamat lokal secara default. Sandbox tetap berlaku — halaman tidak dapat membaca data GUI',
settingsBrowserLoopbackPlaceholder: 'mis. localhost:5174, 127.0.0.1:8080',
browserOpenExternal: 'Buka di browser',
browserEmbedBlocked: '{host} menolak untuk disematkan',
browserEmbedBlockedDesc: 'Situs melarang ditampilkan di dalam halaman lain (X-Frame-Options / frame-ancestors), sehingga tidak dapat dimuat di sidebar. Buka langsung di browser Anda.',
browserEmbedAnyway: 'Tetap muat',
subagent: 'Tasks',
openSubagent: 'Tasks',
subagentMainAgent: 'Agen utama',
subagentEmpty: 'Tidak ada subagen',
subagentEmptyDesc: 'Subagen yang dibangkitkan di bawah agen utama akan muncul di sini',
subagentRunning: 'Berjalan',
subagentInactive: 'Menganggur',
subagentModeOneShot: 'Sekali pakai',
subagentModeContinuable: 'Dapat dilanjutkan',
subagentCount: '{count} subagen',
subagentCountRunning: '{count} subagen · {running} berjalan',
subagentDiagCorrupt: 'Rusak',
subagentDiagUnsupported: 'Tidak didukung',
subagentDiagUnavailable: 'Tidak tersedia',
subagentThinking: 'Berpikir…',
sideChat: 'Side Chat (beta)',
sideChatNew: 'Thread baru',
sideChatUntitled: 'Thread baru',
sideChatEmpty: 'Tidak ada obrolan samping',
sideChatEmptyDesc: 'Setiap obrolan samping adalah tab sendiri di strip tab — mewarisi konteks sesi saat ini dan tidak pernah masuk ke obrolan utama',
sideChatCreating: 'Membuat obrolan samping…',
sideChatRetry: 'Coba lagi',
sideChatThreads: 'Beralih thread / baru',
sideChatSave: 'Simpan sebagai sesi baru',
sideChatSaveTitle: 'Promosikan thread ini ke sesi tingkat atas dalam daftar sesi utama',
sideChatSaved: 'Tersimpan sebagai sesi baru',
sideChatNoTurn: 'Simpan tersedia setelah giliran pertama selesai',
sideChatPendingDrop: 'Tindak lanjut yang belum terjawab terakhir tidak akan disertakan dalam sesi yang disimpan',
sideChatFirstPlaceholder: 'Ajukan pertanyaan pertama — konteks diwarisi…',
sideChatComposerPlaceholder: 'Ajukan tindak lanjut…',
sideChatThinking: 'Mendalami…',
sideChatThink: 'Berpikir',
sideChatInjection: 'Konteks disuntik',
sideChatSend: 'Kirim',
sideChatCancel: 'Hentikan',
sideChatCancelTitle: 'Batalkan giliran yang berjalan (pekerjaan antrean dipertahankan)',
sideChatClose: 'Tutup thread',
sideChatCloseTitle: 'Lepaskan agen thread (riwayat dipertahankan)',
sideChatError: 'Kesalahan Side Chat: {message}',
sideChatTurnUsage: 'Input {input} tok · Output {output} tok',
sideChatBlockCollapse: 'Lipat',
sideChatBlockCollapseAria: 'Lipat',
sideChatBlockExpand: 'Perlihatkan {hidden} baris',
sideChatBlockExpandAria: 'Perlihatkan {hidden} baris lagi',
sideChatBlockSignal: 'Diakhiri sinyal: {signal}',
sideChatBlockExitCode: 'Kode keluar {code}',
sideChatBlockRunning: 'Berjalan',
sideChatBlockFailed: 'Gagal',
sideChatBlockDone: 'Selesai',
sideChatBlockNoOutput: '(tanpa output)',
sideChatBlockFiles: '{count} file',
sideChatBlockWindow: '{shown} dari {total} baris',
sideChatConnDisconnected: 'Koneksi terputus',
sideChatConnReconnect: 'Sambungkan ulang',
sideChatConnConnecting: 'Menyambung ulang…',
sideChatConnRecovered: 'Koneksi dipulihkan',
sideChatConnReconnectAction: 'Sambungkan ulang sekarang',
sideChatConnRestartAction: 'Mulai ulang koneksi',
jobs: 'Tugas latar',
jobsCount: '{count} tugas latar',
jobsCountRunning: '{count} tugas latar · {running} berjalan',
jobStatusRunning: 'Berjalan',
jobStatusStopping: 'Menghentikan',
jobStatusCompleted: 'Selesai',
jobStatusKilled: 'Dihentikan',
jobStatusFailed: 'Gagal',
jobDurationSeconds: '{seconds}d',
jobDurationMinutes: '{minutes}m {seconds}d',
jobDurationHours: '{hours}j {minutes}m',
jobViewOutput: 'Lihat keluaran',
jobHideOutput: 'Sembunyikan keluaran',
jobNoOutput: 'Belum ada keluaran',
jobNotReadYet: 'Menunggu model membaca tugas ini; keluarannya muncul di sini setelah model menjalankan job_output',
jobOutputTruncated: 'Keluaran dipotong',
jobOutputError: 'Gagal membaca keluaran',
jobKill: 'Hentikan',
jobKillConfirm: 'Klik lagi untuk mengonfirmasi penghentian',
jobKillError: 'Penghentian gagal',
addPluginsTabCard: 'Tambah plugin tab',
addPluginsTabCardDesc: 'Daftarkan halaman sidebar baru',
addPluginsViewerCard: 'Tambah plugin pratinjau',
addPluginsViewerCardDesc: 'Daftarkan pratinjau tipe berkas',
addPluginsTabDesc: 'Halaman sidebar (tab) dapat diperluas oleh plugin. Plugin mendaftar melalui layanan ctx.betterSidebar; klik Install menyalin perintah instalasi — tempel ke terminal tempat profil DSH Anda berada dan jalankan.',
addPluginsViewerDesc: 'Pratinjau berkas dapat diperluas oleh plugin. Plugin mendaftar melalui layanan ctx.betterSidebar; klik Install menyalin perintah instalasi — tempel ke terminal tempat profil DSH Anda berada dan jalankan.',
addPluginsBrowseMore: 'Jelajahi lebih banyak plugin di GitHub (topic: dsh-apes-sidebar)',
addPluginsSearch: 'Cari berdasarkan nama / deskripsi plugin…',
addPluginsNoMatch: 'Tidak ada plugin yang cocok',
addPluginsRecommended: 'Plugin yang direkomendasikan',
addPluginsEmpty: 'Belum ada plugin yang dikurasi — publikasikan plugin Anda di bawah topik GitHub',
openPlugin: 'Buka',
copyInstall: 'Salin perintah instalasi',
pluginOfficeDesc: 'Pratinjau Office-suite (.docx / .xlsx / .pptx) untuk editor better-sidebar, menjaga pustaka render Office yang berat tetap di luar bundle inti',
pluginFlowglassDesc: 'Flowgraph sesi langsung dengan tiga lajur untuk pengguna, asisten, dan panggilan alat, plus grup paralel, cabang sub-agen, drill-down, dan status langsung; mendaftarkan tab Flowglass native saat better-sidebar terpasang dan mempertahankan laci mandirinya sebagai fallback',
pluginGitForgeDesc: 'Tab Git Forge: pustaka akun GitHub/Gitea (dan forge lain) + pemberian izin per proyek + kebijakan push yang ditegakkan keras; token tetap di rahasia lokal (tidak pernah dalam konteks model); alat GitForge hanya-baca dan helper kredensial HTTPS agen',
pluginGithubWorkbenchDesc: 'Tab GitHub Workbench: pohon repo remote + Issues / Pull requests / Actions dengan dukungan tulis penuh — buat Issue/PR, komentar, edit, tutup/buka ulang, merge squash·merge·rebase (konfirmasi kuat), jalankan ulang/batalkan CI; pengalih repo otomatis mencantumkan repo yang dapat diakses dan mencari repo publik; tanpa better-sidebar otomatis beralih ke panel kanan mandiri',
pluginMdExportDesc: 'Menambahkan tombol "Ekspor" ke bilah alat Markdown di better-sidebar: merender .md saat ini menjadi HTML mandiri dalam satu klik (tabel/blok kode/diagram Mermaid inline, tata letak mengikuti tema pratinjau) dan menyimpannya di folder yang sama, atau mengekspor ke PDF lewat dialog cetak',
pluginCodeNavDesc: 'Navigasi pratinjau kode: mengenali bahasa dari jenis berkas dan menyorot sintaks, kerangka simbol (filter kelas/metode/variabel + lompat sekali klik), serta pencarian dalam berkas (sorot semua kecocokan, sebelum/berikutnya, peka huruf besar-kecil) — mengambil alih pratinjau berkas kode di editor better-sidebar',
pluginSuhuangScrollDesc: 'Menghubungkan Suhuang Scroll Runtime lokal ke pengaturan DSH dan better-sidebar untuk konfigurasi model, uji koneksi, dan kontrol penilaian berkelanjutan; memerlukan Suhuang Scroll Runtime dan dsh-apes-sidebar',
pluginBetterOverleafDesc: 'Tab Overleaf untuk better-sidebar: login langsung lewat peramban CDP (mendukung Chromium pihak ketiga), daftar/pergantian proyek, mirror git lokal di <workspace>/overleaf/, sinkronisasi git dua arah dengan fallback API baca-saja, dan pratinjau berkas melalui workbench sidebar',
pluginGitRemotesDesc: 'Tab Git Remotes: branch/upstream/ahead-behind, fetch (prune opsional), ff-only pull, dan push hanya setelah konfirmasi dalam tab. Tidak menggantikan tab stage/commit Git bawaan, dan tidak menawarkan force-push atau alat auto-push model',
pluginSentinelDesc: 'Sistem bangun agen berbasis kondisi: sensor berkas/proses/port/http/perintah/webhook membangunkan sesi yang tidur saat kondisi terpicu; mendaftarkan tab "Sentinel" dengan tabel pengawasan server-wide',
pluginServerDeckDesc: 'Dasbor kartu server: satu kartu per host menampilkan status online, OS, uptime, penggunaan CPU/memori/disk dan latensi; klik kartu untuk membuka terminal xterm.js interaktif; impor ~/.ssh/config sekali klik (alias hosting Git dilewati otomatis). Mendaftarkan tab 「Server」 native saat better-sidebar terpasang, jika tidak panel laci mandiri tetap digunakan',
pluginSidebarQaDesc: 'Select-and-ask: Pilih teks obrolan → ajukan di panel kanan → sesi tindak lanjut khusus (❓追问) di ruang kerja yang sama; model no-thinking yang cepat mengompresi konteks utama dan menyuntiknya bersama kutipan, tanpa mengganggu obrolan utama. Tindak lanjut dapat bersarang, dilanjutkan, dan diarsipkan',
pluginSidenoteDesc: 'Side chat ala Codex + anotasi seleksi: fork sesi saat ini menjadi panel samping persisten (diarsipkan hingga hilang dari daftar sesi, multi-instance, perintah /side, bertahan setelah reload, model mengikuti sesi utama); pilih teks assistant → badge bernomor + editor catatan → chip "N anotasi" yang ikut terkirim dengan pesan berikutnya, atau langsung bertanya di side chat',
pluginSshTunnelDesc: 'Tab SSH Tunnel: inventaris multi-host + pemberian izin per proyek + rahasia lokal; alat SSHManager (exec/SFTP/strategi sesi); terminal interaktif pusat dan SFTP dua panel',
pluginTurnReviewDesc: 'Gerbang manusia pada giliran yang baru selesai: Approve / Request changes per path dengan komentar opsional; path dikelompokkan berdasarkan sesi utama / subagen / tidak teratribusi; diff snapshot-vs-now inline sebelum Anda memutuskan. Tanpa fork, tanpa /rewind',
pluginVideoPreviewDesc: 'Pratinjau video inline (.mp4/.webm/.mov/.mkv/.avi dll.) untuk editor better-sidebar, didukung oleh rute host /video khusus dengan dukungan HTTP Range (206) — scrubbing berfungsi dan berkas tidak dibatasi oleh mediaLimit 20MB',
pluginDocsPanelDesc: 'Dokumen global di sidebar DSH: baca catatan Markdown Anda sendiri dari ruang kerja apa pun — daftar berkas, kerangka, buka di Chrome / VS Code, dan tombol salin; direktori docs dapat dikonfigurasi (default ~/.dsh/docs)',
pluginEgoBrowserDesc: 'Browser agen untuk DeepSeek Harness: 32 alat ego_* menggerakkan Chromium sungguhan; tab «ego browser» native di bilah samping menampilkan langsung setiap halaman yang dikunjungi agen — Anda bisa mengklik, menyeret, dan mengetik untuk mengambil alih. Tab terdaftar otomatis jika better-sidebar terpasang; jika tidak, jatuh ke gelembung mengambang',
pluginBilingualReaderDesc: 'Baca PDF di sidebar DSH: tampilan PDF asli, pilih teks untuk diterjemahkan dengan LLM, dengan konteks dan sepenuhnya terisolasi dari percakapan utama',
changesRedactOn: "Redaksi aktif: rahasia tampil sebagai [REDACTED]; klik untuk mematikan (risiko Anda sendiri)",
changesRedactOff: "Redaksi mati: konten tampil apa adanya; klik untuk mengaktifkan",
changesRedactOnLabel: "Redaksi",
changesRedactOffLabel: "Tanpa redaksi",
changesRedactBanner: "Teredaksi",
pluginSentinelName: 'dsh-sentinel Sistem bangun',
pluginEgoBrowserName: 'ego-browser Peramban agen',
pluginBetterOverleafName: 'dsh-better-overleaf Tab Overleaf',
pluginDocsPanelName: 'dsh-docs-panel Dokumen global',
pluginFlowglassName: 'dsh-flowglass Flowglass',
pluginGitForgeName: 'dsh-git-forge Kredensial Git',
pluginGitRemotesName: 'dsh-git-remotes Remote Git',
pluginGithubWorkbenchName: 'dsh-github-workbench Meja kerja GitHub',
pluginSidebarQaName: 'dsh-sidebar-qa Pilih & tanya',
pluginSidenoteName: 'dsh-sidenote Obrolan samping',
pluginServerDeckName: 'dsh-server-deck Dek server',
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
pluginSshTunnelName: 'dsh-ssh-tunnel Terowongan SSH',
pluginTurnReviewName: 'dsh-turn-review Tinjauan giliran',
pluginBilingualReaderName: 'dsh-bilingual-reader Pembaca dwibahasa',
pluginOfficeName: 'Pratinjau Office',
pluginMdExportName: 'Ekspor Markdown',
pluginCodeNavName: 'Navigator pratinjau kode',
pluginVideoPreviewName: 'Pratinjau video',
presetDshDesktopDesc: 'Mode Electron lanjutan (tanpa bingkai): macOS mencadangkan 20px di atas; Windows mencadangkan 32px untuk bilah judul saat WCO tidak tersedia',
}