三件事一起落地(用户 brief),各自独立可验证:
1) 后台任务输出改为常驻浮动窗
- 新增 src/client/FloatingWindow.tsx + .module.css:可复用组件,标题栏(拖拽手柄 +
复制/关闭)、内容区(自滚动,长输出不再跑出视口)、可选底部行、三个拉伸柄
(右/下/右下)。生命周期与 AnchoredPopover 相反:外部点击、失焦、锚点离屏都不关,
只有关闭按钮与 Escape 结束;尺寸只在挂载时量一次(流式输出帧不会挪动读者摆好的窗);
拖拽保持整窗在视口内(放不下才退化到保留 48px 可达);视口变化时夹回。
- 手势复用既有范式:移动走 window 级 pointermove(同 AnchoredPopover),拉伸走
setPointerCapture + createFrameBatcher(同 EditorHost 的面板拉伸)。
- JobOutputPopoverContent → JobOutputWindow;顺带修掉「跟随最新」从不滚动的 bug
(原先滚的是 TerminalBlock 外面那个永不滚动的 div),并清掉随旧弹窗死掉的
.popPre / .jobPopPre 规则。节点/工作流详情与任务窗保持原样。
2) 节点卡统一
- 删除两条左侧竖条(层级条 .cardTop::before、当前会话条 .nodeCurrent::before);
层级改由上段极淡底色承担(7/5/3.5/2.5% → 9/7/5/3.5% 补偿对比度);
当前会话改为 2px accent 描边(「边框加粗高亮」)。
- 圆角 4px → 8px(与浮动窗同一家族);成员/工作流/聚合按用户选择保留类型区分。
- 2px 而非 1.5px:真机 recon 发现 Chromium 在 DPR 1 下把亚像素边框向下取整,
1.5px 的「加粗」完全看不出(实测 borderTopWidth: "1px")。几何不受影响
(border-box + min-height,卡片外框 247×134 与预算逐像素一致)。
3) 手机设置
- 两个新偏好 mobileNoAutoOpen / mobileDefaultTree(默认都开),落到 prefs-shared、
PrefsSchema(volatile 自动)、parsePrefs 校验与设置页新增的「手机」分组。
- 窄屏(沿用 768px 断点)时:新子代理与新后台任务都不再自动激活任务页;
任务页默认树状图(页内切换仍是临时覆盖)。宽屏或开关关掉后行为完全不变。
- 5 条词条 ×20 份词典;外部插件指南的 PrefsSchema 键清单同步。
验证:typecheck / lint ✅;pnpm test 1254 passed / 9 skipped(新增 14 例);
挂载 lane 7/7(真实 DSH 0.1.7-rc.2);3080 真机自测通过(长输出窗口内部滚动
5459px/449px、拖拽 424→304、拉伸 1008×540→918×480、外部点击不关、Escape 关、
卡片 8px/2px/无竖条、窄屏不自动弹出且默认树状图)。
(cherry picked from commit 7d9b428c6c34d28ad2d60c2086496eb533902273)
486 lines
34 KiB
TypeScript
486 lines
34 KiB
TypeScript
/**
|
||
* Italian copy for the sidebar. Key-set-equal to `zh` in `locales.ts`;
|
||
* consumed by the better-locale override store (see `locales.ts` for the
|
||
* zh/en/ja lookup chain and the `attachBetterLocale` contract).
|
||
*
|
||
* @module dsh-better-sidebar/client/locales-it
|
||
*/
|
||
|
||
export const it: Record<string, string> = {
|
||
files: 'File',
|
||
guideDescFiles: 'Sfoglia l\'albero del workspace; un clic apre anteprima o editor',
|
||
guideDescGit: 'Modifiche Git e modifiche ai file di questa sessione in un solo tab',
|
||
guideDescSubagent: 'Grafo del workflow, bacheca delle attività del team e attività in background, in tempo reale',
|
||
guideDescSidechat: 'Un thread di approfondimento indipendente che eredita il contesto della sessione',
|
||
guideDescTerminal: 'Una vera shell (xterm + pty) con riconnessione',
|
||
guideDescBrowser: 'Browser integrato, può aprire i link della chat',
|
||
changesSessionEmpty: 'Ancora nessuna operazione sui file in questa sessione',
|
||
changesRead: 'Lettura',
|
||
changesMdReading: 'Lettura',
|
||
changesHtmlRender: "Render",
|
||
changesHtmlRaw: "Sorgente",
|
||
changesPdfRender: "Render",
|
||
changesPdfRaw: "Sorgente",
|
||
changesMdRaw: 'Grezzo',
|
||
changesWrite: 'Scrittura',
|
||
changesEdit: 'Modifica',
|
||
changesRunning: 'in esecuzione',
|
||
changesError: 'errore',
|
||
changesFold: '{count} righe… clicca per espandere',
|
||
changesFoldLoading: 'Espansione…',
|
||
changesFoldUnavailable: 'Contesto non disponibile',
|
||
changesContext: 'contesto',
|
||
changesPriorUnknown: 'Il contenuto precedente è fuori dalla finestra; mostrato come interamente aggiunto',
|
||
explorer: 'Esplora risorse',
|
||
terminal: 'Terminale',
|
||
editor: 'Editor',
|
||
editorExplorer: 'Modalità di apertura dei file',
|
||
editorExplorerDesc: 'Controlla come si aprono i file',
|
||
editorExplorerMerged: 'Unito',
|
||
editorExplorerMergedDesc: 'I file cambiano sul posto nella stessa finestra; le nuove finestre avviano l’albero espanso',
|
||
editorExplorerSplit: 'Separato',
|
||
editorExplorerSplitDesc: 'Le finestre senza percorso sono l’esplora risorse autonomo (solo albero dei file); ogni file apre la propria finestra (albero agganciato, chiuso per impostazione predefinita)',
|
||
editorTreeToggle: 'Pannello dell’albero dei file',
|
||
editorPathPlaceholder: 'Percorso del file (relativo alla directory della sessione o assoluto), Invio per aprire',
|
||
editorSearchPlaceholder: 'Cerca file per nome…',
|
||
editorSearchNoResults: 'Nessun file corrispondente',
|
||
editorSearchTruncated: 'Troppi risultati — viene mostrato un elenco parziale',
|
||
editorEmptyHint: 'Scelga un file dal pannello dell’albero a destra o dal campo del percorso in alto per iniziare l’anteprima',
|
||
openFileNewTab: 'Apri in una nuova scheda',
|
||
openFileSide: 'Apri a lato',
|
||
openWithMenu: 'Apri con',
|
||
openWithSshSuffix: ' (SSH)',
|
||
pinOpenWith: 'Fissa al menu',
|
||
unpinOpenWith: 'Rimuovi dal fisso',
|
||
openWithExplorer: 'Esplora risorse',
|
||
openWithVscode: 'VS Code',
|
||
openWithCursor: 'Cursor',
|
||
openWithZed: 'Zed',
|
||
openWithSettingsSshTitle: 'Host remoto SSH',
|
||
openWithSettingsSshDesc: 'Vuoto = spazio di lavoro locale; con un user@host o un alias SSH, gli apritori della famiglia VSCode passano al protocollo vscode-remote/ssh-remote e l’Esplora risorse / Zed / gli editor personalizzati non VSCode vengono nascosti dal menu',
|
||
openWithSettingsSshPlaceholder: 'user@host o alias SSH',
|
||
openWithSettingsCustomTitle: 'Editor personalizzati',
|
||
openWithSettingsCustomDesc: 'Nome + modello URL (segnaposto {path}) + flag famiglia VSCode; in modalità remota solo gli editor della famiglia VSCode possono aprire un percorso remoto',
|
||
openWithSettingsAdd: 'Aggiungi',
|
||
openWithSettingsName: 'Nome',
|
||
openWithSettingsTemplate: 'es. cursor://file/{path}',
|
||
openWithSettingsFamily: 'Famiglia VSCode',
|
||
openWithSettingsFamilyDesc: 'Questo editor usa il protocollo URL di VSCode (supporta aperture SSH remote)',
|
||
openWithSettingsRemove: 'Rimuovi',
|
||
openWithSettingsInvalidHint: 'Gli editor con nome mancante o modello senza {path} / scheme:// non vengono mostrati nel menu',
|
||
newTab: 'Nuova scheda',
|
||
brokenSymlink: 'Collegamento simbolico interrotto',
|
||
close: 'Chiudi',
|
||
closeOtherTabs: 'Chiudi le altre schede',
|
||
closeLeftTabs: 'Chiudi le schede a sinistra',
|
||
closeRightTabs: 'Chiudi le schede a destra',
|
||
pinTerminal: 'Blocca Terminale',
|
||
pinAgentTerminal: 'Blocca Terminale Agent',
|
||
pinToWorkspace: 'Blocca in Workspace',
|
||
pinToGlobal: 'Blocca Globalmente',
|
||
unpinTerminal: 'Sblocca',
|
||
collapseBottomPanel: 'Comprimi pannello inferiore',
|
||
expandBottomPanel: 'Espandi pannello inferiore',
|
||
terminalError: 'Connessione del terminale non riuscita',
|
||
terminalConnectFailed: 'Il terminale non è riuscito a connettersi più volte',
|
||
terminalRetry: 'Riprova',
|
||
terminalWaitBanner: 'L’agente è in attesa di {needle}',
|
||
terminalSkipWait: 'Salta attesa',
|
||
terminalDepsFailed: 'Caricamento della dipendenza del terminale node-pty non riuscito',
|
||
terminalDepsHint: 'Esegua il comando seguente in un terminale o cmd sul computer DSH per ripristinarlo, poi riprovi (node-pty resta sincronizzato con la versione del core DSH):',
|
||
terminalDepsProfile: ' (rilevato profilo: {profile})',
|
||
terminalShellNotFound: 'Shell configurata non trovata: {name} — verifica il percorso della shell in Impostazioni → Side card → Terminal',
|
||
preview: 'Anteprima',
|
||
toc: 'Indice',
|
||
edit: 'Modifica',
|
||
mermaidError: 'Rendering Mermaid non riuscito',
|
||
mermaidZoomIn: 'Ingrandisci',
|
||
mermaidZoomOut: 'Riduci',
|
||
mermaidZoomReset: 'Ripristina',
|
||
mermaidZoomHint: 'Scorra per zoom · trascini per panoramica · Esc per chiudere',
|
||
refresh: 'Aggiorna',
|
||
showInFolder: 'Mostra nella cartella',
|
||
refreshUnsavedConfirm: 'Il file è cambiato su disco. Aggiornare scarterà le modifiche non salvate. Continuare?',
|
||
save: 'Salva',
|
||
saved: 'Salvato',
|
||
unsaved: 'Non salvato',
|
||
saveFailed: 'Salvataggio non riuscito',
|
||
truncation: 'File troppo grande — vengono mostrati i primi 512KB',
|
||
binary: 'File binario, anteprima non disponibile',
|
||
loading: 'Caricamento…',
|
||
error: 'Caricamento non riuscito',
|
||
retry: 'Riprova',
|
||
notRepo: 'Questa directory non è un repository git',
|
||
noChanges: 'Nessuna modifica',
|
||
statusTruncated: 'Troppe modifiche; vengono mostrate solo le prime 2000 voci',
|
||
stage: 'Prepara',
|
||
unstage: 'Rimuovi dalla preparazione',
|
||
stageAll: 'Prepara tutto',
|
||
unstageAll: 'Rimuovi tutto dalla preparazione',
|
||
commitPlaceholder: 'Messaggio di commit (Ctrl+Enter)',
|
||
commit: 'Commit',
|
||
branch: 'Ramo',
|
||
worktree: 'Albero di lavoro',
|
||
checkoutError: 'Cambio di ramo non riuscito',
|
||
history: 'Cronologia',
|
||
changes: 'Modifiche',
|
||
changesGitLens: 'Git',
|
||
changesSessionLens: 'Sessione',
|
||
changesFilterAll: 'Tutti',
|
||
changesFilterEmpty: 'Nessuna operazione di questo tipo',
|
||
changesOpenDiffTab: 'Apri in una scheda diff',
|
||
changesClosePreview: 'Ridimensiona l\'anteprima',
|
||
changesResizePreview: 'Ridimensiona anteprima',
|
||
changesLoadError: 'I record dei file della sessione non sono disponibili',
|
||
staged: 'In stage',
|
||
unstaged: 'Non in stage',
|
||
cancel: 'Annulla',
|
||
diffEmpty: 'Nessuna modifica testuale',
|
||
diffLoadError: 'Caricamento del diff non riuscito',
|
||
diffBinary: 'Binario',
|
||
diffAdded: 'Aggiunto',
|
||
diffDeleted: 'Eliminato',
|
||
diffRenamed: 'Rinominato',
|
||
diffExpand: 'Espandi altre {count} righe',
|
||
discard: 'Annulla modifiche',
|
||
discardTitle: 'Annulla modifiche',
|
||
discardDesc: 'Questo annulla le modifiche della copia di lavoro di «{path}» (non recuperabile).',
|
||
viewCommitDiff: 'Vedi il diff del commit',
|
||
copyShortHash: 'Copia hash breve',
|
||
copyFullHash: 'Copia hash completo',
|
||
copySubject: 'Copia messaggio di commit',
|
||
revertCommit: 'Ripristina questo commit',
|
||
revertTitle: 'Ripristina questo commit',
|
||
revertDesc: 'Crea un nuovo commit sul ramo attuale che inverte «{subject}».',
|
||
cherryPickCommit: 'Cherry-pick di questo commit',
|
||
cherryPickTitle: 'Cherry-pick di questo commit',
|
||
cherryPickDesc: 'Applica le modifiche di «{subject}» al ramo attuale.',
|
||
timeJustNow: 'adesso',
|
||
timeMinutesAgo: '{n} min fa',
|
||
timeHoursAgo: '{n} h fa',
|
||
timeYesterday: 'ieri',
|
||
loadMore: 'Carica altro',
|
||
historyLoadError: 'Caricamento di altra cronologia non riuscito',
|
||
produced: 'Prodotti',
|
||
disconnected: 'Terminale disconnesso, riconnessione…',
|
||
exited: 'Il processo del terminale è terminato',
|
||
noSession: 'Selezioni una conversazione per usare la barra laterale',
|
||
pluginNotLoaded: 'Plugin non caricato; scheda non disponibile:',
|
||
parent: 'Directory superiore',
|
||
copied: 'Copiato',
|
||
copy: 'Copia',
|
||
openEditor: 'Apri editor',
|
||
referenceFile: '@file',
|
||
addToConversation: 'Aggiungi alla conversazione',
|
||
copyRelative: 'Copia percorso relativo',
|
||
copyAbsolute: 'Copia percorso assoluto',
|
||
rename: 'Rinomina',
|
||
renameInvalid: 'Il nome non può essere vuoto o contenere separatori di percorso.',
|
||
delete: 'Elimina',
|
||
deleteTitle: 'Eliminare "{name}"?',
|
||
deleteDescFile: 'Il file verrà eliminato definitivamente. Questa azione non può essere annullata.',
|
||
deleteDescDir: 'La directory e tutto il suo contenuto verranno eliminati definitivamente. Questa azione non può essere annullata.',
|
||
dismiss: 'Chiudi',
|
||
download: 'Scarica',
|
||
uploadFiles: 'Carica file',
|
||
uploadFolder: 'Carica cartella',
|
||
uploadHere: 'Carica qui',
|
||
uploadDropHint: 'Trascini file/cartelle qui per caricarli',
|
||
uploadDropChat: 'Trascini sulla chat per aggiungere immagini alla conversazione',
|
||
uploadTo: 'Carica in {dir}',
|
||
uploadingTo: 'Caricamento in {dir}…',
|
||
uploadProgress: 'Caricamento {done}/{total}: {name}',
|
||
uploadDone: 'Caricati {count} file',
|
||
uploadFailed: 'Caricamento non riuscito: {error}',
|
||
uploadFailedUnknown: 'Errore sconosciuto',
|
||
uploadTooLarge: 'File troppo grande (oltre il limite di caricamento)',
|
||
uploadCancelled: 'Caricamento annullato',
|
||
settingsNav: 'Scheda laterale',
|
||
settingsIntro: 'Gestisca cosa mostra la scheda laterale e come si comporta',
|
||
settingsPopupDesc: 'Configuri le opzioni relative a {feature}',
|
||
settingsDone: 'Fatto',
|
||
settingsOpenToolsTitle: 'Iniettare lo strumento di apertura della barra laterale per il modello',
|
||
settingsOpenToolsDesc: 'Se attivato, il modello può aprire file, cartelle e pagine HTTP(S) nella barra laterale tramite lo strumento sidebar_open (disattivato per impostazione predefinita)',
|
||
settingsTitleBarTitle: 'Modalità di compatibilità della posizione',
|
||
settingsTitleBarDesc: 'Scelga lo schema di compatibilità della barra del titolo: rilevamento automatico (predefinito, prudente) / DSH Web ufficiale / shell desktop note / personalizzato (distanza di scorrimento + CSS personalizzato)',
|
||
settingsTitleBarStripTitle: 'Distanza di scorrimento',
|
||
settingsTitleBarStripDesc: 'Altezza della striscia della barra del titolo: di quanti pixel scendono i pulsanti e i contenuti della barra laterale (0–120, predefinito 40; si applica con lo schema personalizzato)',
|
||
settingsSchemeAutoTitle: 'Rilevamento automatico',
|
||
settingsSchemeAutoDesc: 'Prudente: solo l’API standard Window Controls Overlay contribuisce (altezza reale della barra del titolo); gli ambienti web puri non subiscono modifiche',
|
||
settingsSchemeWebTitle: 'DSH Web ufficiale',
|
||
settingsSchemeWebDesc: 'Dichiara esplicitamente la web UI ufficiale: nessun adattamento (nemmeno la geometria WCO standard)',
|
||
settingsSchemeCustomTitle: 'Personalizzato',
|
||
settingsSchemeCustomDesc: 'Controllo totale: inietti CSS personalizzato (può sovrascrivere gli stili integrati) e imposti la distanza di scorrimento della barra del titolo',
|
||
settingsSchemeDetectedSuffix: 'rilevato',
|
||
settingsCustomCssTitle: 'CSS personalizzato',
|
||
settingsCustomCssPlaceholder: '/* es. riserva 36px per una shell con barra del titolo disegnata a mano */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
||
settingsSaveFailed: 'Salvataggio non riuscito',
|
||
settingsConflict: 'L’impostazione è stata modificata in un’altra finestra — riprovi',
|
||
binaryNoPreview: 'Questo tipo di file non può essere visualizzato in anteprima',
|
||
downloadToView: 'Scarica per visualizzare',
|
||
settingsSubagentTitle: 'Attiva automaticamente la pagina Attività quando compare un sottoagente',
|
||
settingsSubagentDesc: 'Quando nella conversazione attuale compare un nuovo sottoagente, attiva automaticamente la pagina Attività; sugli schermi ampi espande anche la barra laterale, mentre sugli schermi stretti non forza l’apertura del pannello a schermo intero; disattiva per selezionare la pagina manualmente',
|
||
settingsJobsTitle: 'Attiva automaticamente la pagina Attività quando compare una nuova attività in background',
|
||
settingsJobsDesc: 'Quando nella conversazione attuale compare una nuova attività in background, attiva automaticamente la pagina Attività (l’attivazione avviene per ogni nuova attività); sugli schermi ampi espande anche la barra laterale, mentre sugli schermi stretti non forza l’apertura del pannello a schermo intero; disattiva per selezionare la pagina manualmente',
|
||
settingsToolsTitle: 'Inietta strumenti del terminale per il modello',
|
||
settingsToolsDesc: 'Se attivato, il modello può creare e gestire terminali della barra laterale attraverso gli 8 strumenti terminal_* (disattivato per impostazione predefinita)',
|
||
settingsFenceTitle: 'Controllo dei percorsi del workspace',
|
||
settingsFenceDesc: 'Attivo, le funzioni file della barra laterale raggiungono solo i percorsi nel workspace di sessione (predefinito); disattivo, ogni file dell\'host è raggiungibile — gli script della pagina ottengono la stessa portata nel frattempo',
|
||
fenceErrorReason: 'Questo percorso è fuori dal workspace di sessione ed è stato bloccato dal controllo',
|
||
fenceDisableAction: 'Disattiva il controllo del workspace',
|
||
settingsBottomTerminalTitle: 'Apri automaticamente un terminale alla prima espansione del pannello inferiore',
|
||
settingsBottomTerminalDesc: 'Quando il pannello inferiore viene espanso per la prima volta in una sessione, prova ad aprire una nuova scheda terminale nel pannello inferiore (il limite di terminali si applica comunque; attivo per impostazione predefinita)',
|
||
settingsFontFamilyTitle: 'Famiglia di caratteri del terminale',
|
||
settingsFontFamilyDesc: 'Famiglia di caratteri personalizzata del terminale (uno stack CSS font-family come "JetBrains Mono", monospace; lasci vuoto per seguire il carattere a spaziatura fissa del tema)',
|
||
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
||
settingsFontSizeTitle: 'Dimensione del carattere del terminale',
|
||
settingsFontSizeDesc: 'Dimensione del carattere del terminale in px (9–32, predefinito 13)',
|
||
settingsShellTitle: 'Percorso della shell',
|
||
settingsShellDesc: 'Shell avviata per i terminali dell’interfaccia e del modello (percorso assoluto o nome eseguibile). Vuoto mantiene l’ordine preesistente: config.shell di yaml → $SHELL / shell di login / powershell.exe di Windows. Si applica ai terminali aperti successivamente',
|
||
settingsShellPlaceholder: 'es. /bin/zsh (vuoto = automatico)',
|
||
settingsShellArgsTitle: 'Argomenti della shell',
|
||
settingsShellArgsDesc: 'Argomenti espliciti della shell, separati da spazi; quando non vuoti sostituiscono completamente i predefiniti (stesso contratto di shellArgs di yaml)',
|
||
settingsShellArgsPlaceholder: 'es. -l (vuoto = predefiniti)',
|
||
settingsTabsTitle: 'Contenuto della barra laterale',
|
||
settingsViewersTitle: 'Visualizzatori di file',
|
||
settingsMobileTitle: "Mobile",
|
||
settingsMobileNoAutoOpenTitle: "Non aprire automaticamente su schermi stretti",
|
||
settingsMobileNoAutoOpenDesc: "Su telefono / schermo stretto un nuovo subagent o job in background non passa più da solo alla pagina Attività (puoi comunque aprirla a mano)",
|
||
settingsMobileTreeTitle: "Pagina Attività predefinita ad albero",
|
||
settingsMobileTreeDesc: "Su telefono / schermo stretto la pagina Attività si apre come albero classico invece che come grafo del workflow; il pulsante nella pagina resta attivo",
|
||
settingsGeneralTitle: 'Generali',
|
||
settingsPopup: 'Impostazioni della funzionalità',
|
||
settingsViewerCatchAll: 'Raccoglitore: qualsiasi file',
|
||
viewerMarkdown: 'Markdown',
|
||
viewerCode: 'Codice',
|
||
viewerHtml: 'HTML',
|
||
browser: 'Browser',
|
||
browserPlaceholder: 'Inserisca un URL, es. example.com',
|
||
browserGo: 'Vai',
|
||
browserBack: 'Indietro',
|
||
browserForward: 'Avanti',
|
||
browserStart: 'Inserisca un URL per iniziare a navigare (modalità sandbox)',
|
||
browserBlockedScheme: 'Bloccato: sono ammessi solo URL http/https',
|
||
browserBlockedLoopback: 'Bloccato: gli indirizzi locali e interni non possono essere navigati qui',
|
||
browserInvalid: 'URL non valido',
|
||
htmlNoSandboxWarning: 'Sandbox disattivata: questo HTML viene eseguito con la stessa origine dell’interfaccia e può leggere i file di sessione e le API interne (può riattivarla nelle impostazioni)',
|
||
sandboxStatusOn: 'Modalità sandbox: attiva · le pagine non possono accedere ai dati dell’interfaccia o ai file locali; i login e i cookie di terze parti potrebbero non funzionare',
|
||
sandboxUnlock: 'Disattiva temporaneamente (non sicuro)',
|
||
sandboxRestore: 'Ripristina sandbox',
|
||
settingsHtmlDefaultUnsafeTitle: 'Apri le anteprime HTML senza sandbox per impostazione predefinita (non sicuro)',
|
||
settingsHtmlDefaultUnsafeDesc: 'Se attivato, ogni anteprima HTML appena aperta inizia nello stato senza sandbox (stessa origine dell’interfaccia — può leggere i file di sessione e le API interne); la riga di stato offre ancora un ripristino con un tocco',
|
||
settingsHtmlSandboxTitle: 'Disattiva la sandbox dell’anteprima HTML (non sicuro)',
|
||
settingsHtmlSandboxDesc: 'Con la sandbox disattivata, l’HTML in anteprima viene eseguito con la stessa origine dell’interfaccia: può leggere i file di sessione, l’archiviazione locale e chiamare le API interne. Attivi solo per file completamente attendibili',
|
||
settingsBrowserSandboxTitle: 'Disattiva la sandbox del browser (non sicuro)',
|
||
settingsBrowserSandboxDesc: 'Con la sandbox disattivata, ogni sito visitato viene eseguito con la stessa origine dell’interfaccia: può leggere i dati di sessione e fingersi la sua sessione di login. Attivi solo per siti completamente attendibili',
|
||
settingsBrowserLoopbackTitle: 'Indirizzi locali consentiti',
|
||
settingsBrowserLoopbackDesc: 'Allowlist separata da virgole di indirizzi di loopback (es. localhost:5174 o 127.0.0.1:8080) che il browser della barra laterale può visitare; vuoto blocca tutti gli indirizzi locali per impostazione predefinita. La sandbox si applica ancora — le pagine non possono leggere i dati della GUI',
|
||
settingsBrowserLoopbackPlaceholder: 'es. localhost:5174, 127.0.0.1:8080',
|
||
browserOpenExternal: 'Apri nel browser',
|
||
browserEmbedBlocked: '{host} ha rifiutato di essere incorporato',
|
||
browserEmbedBlockedDesc: 'Il sito vieta di essere mostrato all’interno di altre pagine (X-Frame-Options / frame-ancestors), per cui non può essere caricato nella barra laterale. Lo apra direttamente nel browser.',
|
||
browserEmbedAnyway: 'Carica comunque',
|
||
subagent: 'Attività',
|
||
subagentMainAgent: 'Agente principale',
|
||
subagentEmpty: 'Nessun sottoagente',
|
||
subagentEmptyDesc: 'I sottoagenti generati dall’agente principale compariranno qui',
|
||
subagentInactive: 'Inattivo',
|
||
subagentModeOneShot: 'Monouso',
|
||
subagentModeContinuable: 'Proseguibile',
|
||
subagentCount: '{count} sottoagenti',
|
||
subagentCountRunning: '{count} sottoagenti · {running} in esecuzione',
|
||
subagentThinking: 'In pensiero…',
|
||
sideChat: 'Chat laterale (beta)',
|
||
sideChatNew: 'Nuova conversazione',
|
||
sideChatUntitled: 'Nuova conversazione',
|
||
sideChatEmpty: 'Nessuna conversazione laterale',
|
||
sideChatEmptyDesc: 'Ogni conversazione laterale è una scheda a sé nella striscia delle schede — eredita il contesto della sessione attuale e non entra mai nella conversazione principale',
|
||
sideChatCreating: 'Creazione della conversazione laterale…',
|
||
sideChatRetry: 'Riprova',
|
||
sideChatThreads: 'Cambia conversazione / nuova',
|
||
sideChatSave: 'Salva come nuova sessione',
|
||
sideChatSaveTitle: 'Promuove questa conversazione a sessione di primo livello nella lista delle sessioni principali',
|
||
sideChatSaved: 'Salvata come nuova sessione',
|
||
sideChatNoTurn: 'Il salvataggio è disponibile dopo il primo turno completato',
|
||
sideChatPendingDrop: 'L’ultima domanda di follow-up senza risposta non sarà inclusa nella sessione salvata',
|
||
sideChatFirstPlaceholder: 'Ponga la prima domanda — contesto ereditato…',
|
||
sideChatComposerPlaceholder: 'Ponga un follow-up…',
|
||
sideChatThinking: 'Approfondimento…',
|
||
sideChatThink: 'Pensiero',
|
||
sideChatInjection: 'Contesto iniettato',
|
||
sideChatSend: 'Invia',
|
||
sideChatCancelTitle: 'Interrompe il turno in corso (il lavoro in coda è conservato)',
|
||
sideChatError: 'Errore della chat laterale: {message}',
|
||
sideChatTurnUsage: 'Input {input} tok · Output {output} tok',
|
||
sideChatBlockCollapse: 'Comprimi',
|
||
sideChatBlockCollapseAria: 'Comprimi',
|
||
sideChatBlockExpand: 'Espandi {hidden} righe',
|
||
sideChatBlockExpandAria: 'Espandi altre {hidden} righe',
|
||
sideChatBlockSignal: 'Terminato dal segnale: {signal}',
|
||
sideChatBlockExitCode: 'Codice di uscita {code}',
|
||
sideChatBlockNoExitCode: "Terminato senza codice di uscita",
|
||
sideChatBlockRunning: 'In esecuzione',
|
||
sideChatBlockFailed: 'Non riuscito',
|
||
sideChatBlockDone: 'Completato',
|
||
sideChatBlockNoOutput: '(nessun output)',
|
||
codeBlockTitle: 'Blocco di codice',
|
||
codeBlockWrap: 'A capo automatico',
|
||
codeBlockUnwrap: 'Nessun a capo',
|
||
sideChatBlockWindow: '{shown} di {total} righe',
|
||
sideChatConnDisconnected: 'Connessione persa',
|
||
sideChatConnConnecting: 'Riconnessione…',
|
||
sideChatConnRecovered: 'Connessione ripristinata',
|
||
sideChatConnReconnectAction: 'Riconnetti ora',
|
||
sideChatConnRestartAction: 'Riavvia la connessione',
|
||
jobs: 'Attività in background',
|
||
jobsCount: '{count} attività in background',
|
||
jobsCountRunning: '{count} attività in background · {running} in esecuzione',
|
||
jobStatusRunning: 'In esecuzione',
|
||
jobStatusStopping: 'Arresto in corso',
|
||
jobStatusCompleted: 'Completata',
|
||
jobStatusKilled: 'Terminata',
|
||
jobStatusFailed: 'Non riuscita',
|
||
jobDurationSeconds: '{seconds}s',
|
||
jobDurationMinutes: '{minutes}min {seconds}s',
|
||
jobDurationHours: '{hours}h {minutes}min',
|
||
jobViewOutput: 'Vedi output',
|
||
jobNoOutput: 'Nessun output per ora',
|
||
jobNotReadYet: 'In attesa che il modello legga questa attività; il suo output compare qui quando il modello esegue job_output',
|
||
jobOutputTruncated: 'Output troncato',
|
||
jobOutputError: 'Lettura dell’output non riuscita',
|
||
jobKill: 'Termina',
|
||
jobKillConfirm: 'Faccia di nuovo clic per confermare la terminazione',
|
||
jobKillError: 'Terminazione non riuscita',
|
||
tasksViewGraph: 'Grafo del workflow',
|
||
tasksViewTree: 'Albero',
|
||
tasksViewSwitchToGraph: 'Passa al grafo del workflow',
|
||
tasksViewSwitchToTree: 'Passa all’albero',
|
||
settingsViewModeTitle: 'Vista predefinita della pagina Attività',
|
||
settingsViewModeDesc: 'Come si apre la pagina Attività (l’interruttore in pagina permette comunque di cambiare al volo)',
|
||
settingsViewModeGraph: 'Grafo del workflow',
|
||
settingsViewModeGraphDesc: 'Grafo di nodi a livelli, con zoom e pan',
|
||
settingsViewModeTree: 'Albero',
|
||
settingsViewModeTreeDesc: 'Albero a rientri classico, navigabile da tastiera',
|
||
tasksFoldCompleted: '✓ {count} completati',
|
||
tasksFoldOne: 'Raggruppa nei completati',
|
||
tasksFoldExpand: 'Espandi i nodi completati',
|
||
tasksFoldCollapse: 'Comprimi i nodi completati',
|
||
tasksZoomIn: 'Ingrandisci',
|
||
tasksZoomOut: 'Riduci',
|
||
tasksZoomFit: 'Adatta all’area di disegno',
|
||
tasksNodeJump: 'Apri trascrizione',
|
||
tasksNodeDetail: 'Dettagli del nodo',
|
||
workflowRun: 'Workflow',
|
||
tasksNodeState: 'Stato',
|
||
tasksNodeMode: 'Modalità',
|
||
tasksNodeModel: 'Modello',
|
||
tasksNodeTeamRole: 'Ruolo nel team',
|
||
tasksNodeActivity: 'Ultima attività',
|
||
tasksStateRunning: 'In esecuzione',
|
||
tasksStateIdle: 'In attesa',
|
||
tasksStateDone: 'Completato',
|
||
tasksStateError: 'Errore',
|
||
tasksKindSubagent: 'Subagent',
|
||
tasksKindTeammate: 'Membro del team',
|
||
tasksKindWorkflow: 'Workflow',
|
||
teamBoard: 'Bacheca delle attività del team',
|
||
teamChip: 'Team {members} membri · {tasks} attività',
|
||
teamTasksEmpty: 'Ancora nessuna attività condivisa',
|
||
teamTaskCreate: 'Nuova attività',
|
||
teamTaskSubject: 'Titolo',
|
||
teamTaskDescription: 'Descrizione',
|
||
teamTaskOwner: 'Responsabile',
|
||
teamTaskUnowned: 'Non assegnata',
|
||
teamTaskPending: 'Da fare',
|
||
teamTaskInProgress: 'In corso',
|
||
teamTaskCompleted: 'Completata',
|
||
teamTaskBlocked: 'Bloccata',
|
||
teamTaskComplete: 'Completa',
|
||
teamTaskReopen: 'Riapri',
|
||
teamTaskDelete: 'Elimina',
|
||
teamTaskDeleteConfirm: 'Conferma eliminazione',
|
||
teamTaskEdit: 'Modifica',
|
||
teamTaskSave: 'Salva',
|
||
teamTaskCancel: 'Annulla',
|
||
teamTaskConflict: 'L’attività è stata modificata da altri; aggiornata',
|
||
teamTaskError: 'Operazione non riuscita: {message}',
|
||
teamTaskDeleted: 'Eliminata',
|
||
teamTaskActions: 'Azioni attività',
|
||
teamTaskDetail: 'Dettagli attività',
|
||
teamTaskNoDescription: 'Nessuna descrizione — fai clic su «Modifica» per aggiungerne una',
|
||
teamTaskBlockedBy: 'Bloccata da',
|
||
teamTaskSubjectPlaceholder: 'Descrivi il lavoro in una riga',
|
||
teamTaskDescriptionPlaceholder: 'Dettagli aggiuntivi (opzionale)',
|
||
teamFilterAll: 'Tutti',
|
||
tasksNodeTasks: 'Attività condivise',
|
||
jobCopyOutput: 'Copia output',
|
||
jobCopied: 'Copiato',
|
||
jobFollowTail: 'Segui le ultime righe',
|
||
jobDragHint: 'Trascina per spostare',
|
||
workflowRunning: 'In corso',
|
||
workflowCompleted: 'Completato',
|
||
workflowCancelled: 'Annullato',
|
||
workflowFailed: 'Non riuscito',
|
||
workflowPhaseUnnamed: 'Fase senza nome',
|
||
workflowMembers: '{done}/{total} membri',
|
||
jobsAutoCollapsed: 'Compresso automaticamente (molti agenti)',
|
||
catalogLoadFailed: 'Impossibile caricare {count} branch',
|
||
addPluginsTabCard: 'Aggiungi plugin scheda',
|
||
addPluginsTabCardDesc: 'Registri una nuova pagina della barra laterale',
|
||
addPluginsViewerCard: 'Aggiungi plugin di anteprima',
|
||
addPluginsViewerCardDesc: 'Registri un’anteprima di tipo di file',
|
||
addPluginsTabDesc: 'Le pagine della barra laterale (schede) possono essere estese dai plugin. I plugin si registrano tramite il servizio ctx.betterSidebar; cliccando Installa viene copiato il comando di installazione — lo incolli in un terminale dove risiede il profilo DSH e lo esegua.',
|
||
addPluginsViewerDesc: 'I visualizzatori di file possono essere estesi dai plugin. I plugin si registrano tramite il servizio ctx.betterSidebar; cliccando Installa viene copiato il comando di installazione — lo incolli in un terminale dove risiede il profilo DSH e lo esegua.',
|
||
addPluginsBrowseMore: 'Sfogli altri plugin su GitHub (topic: dsh-better-sidebar)',
|
||
addPluginsSearch: 'Cerca per nome / descrizione del plugin…',
|
||
addPluginsNoMatch: 'Nessun plugin corrispondente',
|
||
addPluginsRecommended: 'Plugin consigliati',
|
||
addPluginsEmpty: 'Nessun plugin curato per ora — pubblichi il suo sotto il topic GitHub',
|
||
openPlugin: 'Apri',
|
||
copyInstall: 'Copia comando di installazione',
|
||
pluginOfficeDesc: 'Anteprima della suite Office (.docx / .xlsx / .pptx) per l’editor di better-sidebar, tenendo le pesanti librerie di rendering Office fuori dal bundle principale, installabili su richiesta',
|
||
pluginFlowglassDesc: 'Diagramma di flusso live della sessione con tre corsie per utente, assistente e chiamate agli strumenti, più gruppi paralleli, rami dei sottoagenti, drill-down e stato in tempo reale; registra una scheda nativa Flowglass quando better-sidebar è installato e mantiene il suo cassetto autonomo come fallback',
|
||
pluginGitForgeDesc: 'Scheda Git Forge: libreria di account GitHub/Gitea (e altri forge) + concessioni per progetto + blocco rigido della politica di push; i token restano nei segreti locali (mai nel contesto del modello); strumento GitForge in sola lettura e helper di credenziali HTTPS per l’agente',
|
||
pluginGithubWorkbenchDesc: 'Scheda GitHub Workbench: albero del repository remoto + Issues / Pull requests / Actions con pieno supporto in scrittura — creazione di issue/PR, commenti, modifica, chiusura/riapertura, merge squash·merge·rebase (conferma rafforzata), riavvio/annullamento della CI; il selettore dei repository elenca automaticamente quelli accessibili e cerca tra quelli pubblici; senza better-sidebar esegue il fallback a un pannello laterale destro indipendente',
|
||
pluginMdExportDesc: 'Aggiunge un pulsante «Esporta» alla barra degli strumenti Markdown di better-sidebar: con un clic esegue il rendering del .md corrente in HTML autonomo (tabelle/blocchi di codice/diagrammi Mermaid in linea, layout fedele al tema di anteprima) e lo salva accanto al .md, oppure esporta in PDF tramite la finestra di stampa',
|
||
pluginCodeNavDesc: 'Navigazione dell’anteprima del codice: rileva il linguaggio dal tipo di file ed evidenzia la sintassi, struttura dei simboli (filtri classi/metodi/variabili + salto con un clic) e ricerca nel file (tutte le corrispondenze evidenziate, precedente/successiva, maiuscole/minuscole) — gestisce l’anteprima dei file di codice nell’editor better-sidebar',
|
||
pluginSuhuangScrollDesc: 'Collega il Runtime Suhuang Scroll locale alle impostazioni DSH e a better-sidebar per configurare il modello, testare la connessione e controllare la correzione continua; richiede Suhuang Scroll Runtime e dsh-better-sidebar',
|
||
pluginBetterOverleafDesc: 'Tab Overleaf per better-sidebar: accesso diretto tramite browser CDP (supporta Chromium di terze parti), elenco/cambio progetti, mirror git locali in <workspace>/overleaf/, sincronizzazione git bidirezionale con fallback API di sola lettura e anteprima dei file tramite la workbench della barra laterale',
|
||
pluginGitRemotesDesc: 'Scheda Git Remotes: rami/upstream/ahead-behind, fetch (prune opzionale), pull ff-only e push solo dopo una conferma nella scheda. Non sostituisce la scheda stage/commit integrata di Git, e non offre force-push o uno strumento di push automatico del modello',
|
||
pluginSentinelDesc: 'Sistema di risveglio dell’agente guidato da condizioni: sensori file/processo/porta/HTTP/comando/webhook risvegliano le sessioni dormienti quando le condizioni si verificano; registra una scheda «Sentinella» con la tabella di monitoraggio globale del server',
|
||
pluginServerDeckDesc: 'Dashboard a schede dei server: una scheda per host con stato online, OS, uptime, utilizzo CPU/RAM/disco e latenza; clicca una scheda per aprire un terminale interattivo xterm.js; importazione del ~/.ssh/config con un clic (gli alias di hosting Git vengono saltati). Registra la scheda nativa «Server» quando better-sidebar è installato, altrimenti mantiene il pannello laterale autonomo',
|
||
pluginSidebarQaDesc: 'Selezione e domanda: selezioni il testo della conversazione → ponga la domanda nel pannello a destra → una sessione di follow-up dedicata (❓ follow-up) nello stesso spazio di lavoro; un modello veloce senza pensiero comprime il contesto principale e lo inietta con la citazione, senza interrompere la conversazione principale. I follow-up si annidano, proseguono e si archiviano',
|
||
pluginSidenoteDesc: 'Side chat in stile Codex + annotazioni da selezione: esegui il fork della sessione corrente in un pannello laterale persistente (archiviata e nascosta dall’elenco delle sessioni, più istanze, comando /side, sopravvive al reload, il modello segue la sessione principale); seleziona il testo dell’assistant → badge numerato + editor di note → un chip "N annotazioni" che viaggia con il tuo prossimo messaggio, oppure chiedi direttamente in una side chat',
|
||
pluginSshTunnelDesc: 'Scheda SSH Tunnel: inventario multi-host + concessioni per progetto + chiavi locali; strumento SSHManager per il modello (exec/SFTP/strategie di sessione); terminale interattivo centrale e SFTP a due pannelli',
|
||
pluginTurnReviewDesc: 'Una porta umana sul diff del turno appena concluso: Approve / Request changes per percorso con un commento facoltativo; percorsi raggruppati per sessione principale / sottoagente / non attribuito; diff snapshot-vs-ora in linea prima di decidere. Nessun fork, nessun /rewind',
|
||
pluginVideoPreviewDesc: 'Anteprima video in linea nell’editor di better-sidebar (.mp4/.webm/.mov/.mkv/.avi ecc.), supportata da una route host /video dedicata con supporto HTTP Range (206) — la barra di scorrimento funziona e i file non sono limitati dal mediaLimit di 20MB',
|
||
pluginDocsPanelDesc: 'Documenti globali nella barra laterale di DSH: legga le sue note Markdown da qualsiasi spazio di lavoro — una lista di file, una struttura, apertura in Chrome / VS Code e pulsanti di copia; la directory dei documenti è configurabile (predefinita ~/.dsh/docs)',
|
||
pluginEgoBrowserDesc: 'Il browser agente per DeepSeek Harness: 32 strumenti ego_* pilotano un vero Chromium; una scheda nativa «ego browser» nella barra laterale mostra in tempo reale ogni pagina visitata dall’agente — puoi cliccare, trascinare e digitare per prendere il controllo. Registra la scheda automaticamente se better-sidebar è presente, altrimenti una bolla flottante',
|
||
pluginBilingualReaderDesc: 'Leggi PDF nella barra laterale DSH: visualizzazione PDF nativa, seleziona il testo per tradurlo con l’LLM, con contesto e completamente isolato dalla conversazione principale',
|
||
changesRedactOn: "Mascheramento attivo: i segreti appaiono come [REDACTED]; clicca per disattivare (a tuo rischio)",
|
||
changesRedactOff: "Mascheramento disattivo: il contenuto appare invariato; clicca per attivare",
|
||
changesRedactOnLabel: "Mascheramento",
|
||
changesRedactOffLabel: "Senza mascheramento",
|
||
changesRedactBanner: "Mascherato",
|
||
pluginSentinelName: 'dsh-sentinel Sistema di riattivazione',
|
||
pluginEgoBrowserName: 'ego-browser Browser dell’agente',
|
||
pluginBetterOverleafName: 'dsh-better-overleaf Scheda Overleaf',
|
||
pluginDocsPanelName: 'dsh-docs-panel Documenti globali',
|
||
pluginFlowglassName: 'dsh-flowglass Flowglass',
|
||
pluginGitForgeName: 'dsh-git-forge Credenziali Git',
|
||
pluginGitRemotesName: 'dsh-git-remotes Remote Git',
|
||
pluginGithubWorkbenchName: 'dsh-github-workbench Banco di lavoro GitHub',
|
||
pluginSidebarQaName: 'dsh-sidebar-qa Seleziona e chiedi',
|
||
pluginSidenoteName: 'dsh-sidenote Chat laterale',
|
||
pluginServerDeckName: 'dsh-server-deck Ponte server',
|
||
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
|
||
pluginSshTunnelName: 'dsh-ssh-tunnel Tunnel SSH',
|
||
pluginTurnReviewName: 'dsh-turn-review Revisione del turno',
|
||
pluginBilingualReaderName: 'dsh-bilingual-reader Lettore bilingue',
|
||
pluginOfficeName: 'Anteprima Office',
|
||
pluginMdExportName: 'Esportazione Markdown',
|
||
pluginCodeNavName: 'Navigatore anteprima codice',
|
||
pluginVideoPreviewName: 'Anteprima video',
|
||
presetDshDesktopDesc: 'Modalità avanzata Electron (senza bordi): macOS riserva 20px in alto; Windows riserva 32px per la barra del titolo quando WCO non è disponibile',
|
||
}
|