- FilePanel 上传进度监听器组件卸载时清理(原先只在终态/reject 时 off) - MonitorPanel:首采即失败时显示中断错误条,不再被 meta 门挡成永远 '采集中' - HighlightImportExport:blob 下载延迟 revokeObjectURL(原先同步回收 会中止下载);FileReader 补 onerror - HighlightTab 新建规则改 getState() 读法防 stale(对齐 replaceRule) - ConnectionSidebar/CommandsPanel 三处删除/清空 handler 补 try/catch 与 message.error(原先失败静默) - highlightIO 导入信封补 version 校验、kind 缺失不再放行 - i18n:补 settings.highlight.builtin.percent 四语言键(原先唯一缺失 的内置规则,非中文界面显示中文 note)
324 lines
20 KiB
TypeScript
324 lines
20 KiB
TypeScript
/** Namespace: settings (the settings dialog: font/cursor/render/highlight/theme/system/about). Owner: settings page. */
|
||
const settings: Record<string, string> = {
|
||
'settings.title': 'Settings',
|
||
'settings.tabs.font': 'Font',
|
||
'settings.tabs.cursor': 'Cursor & Scrollback',
|
||
'settings.tabs.render': 'Rendering & Behavior',
|
||
'settings.tabs.highlight': 'Highlighting',
|
||
'settings.tabs.theme': 'Themes',
|
||
'settings.tabs.system': 'System',
|
||
'settings.tabs.lock': 'Lock',
|
||
'settings.tabs.about': 'About',
|
||
'settings.resizeHandle': 'Drag to resize',
|
||
'settings.preview': 'Preview',
|
||
'settings.deleteConfirmDesc': 'This cannot be undone. Continue?',
|
||
'settings.color.foreground': 'Foreground',
|
||
'settings.color.background': 'Background',
|
||
'settings.color.cursor': 'Cursor',
|
||
'settings.color.selection': 'Selection',
|
||
'settings.color.ansi.black': 'Black',
|
||
'settings.color.ansi.red': 'Red',
|
||
'settings.color.ansi.green': 'Green',
|
||
'settings.color.ansi.yellow': 'Yellow',
|
||
'settings.color.ansi.blue': 'Blue',
|
||
'settings.color.ansi.magenta': 'Magenta',
|
||
'settings.color.ansi.cyan': 'Cyan',
|
||
'settings.color.ansi.white': 'White',
|
||
'settings.color.ansi.brightBlack': 'Bright Black',
|
||
'settings.color.ansi.brightRed': 'Bright Red',
|
||
'settings.color.ansi.brightGreen': 'Bright Green',
|
||
'settings.color.ansi.brightYellow': 'Bright Yellow',
|
||
'settings.color.ansi.brightBlue': 'Bright Blue',
|
||
'settings.color.ansi.brightMagenta': 'Bright Magenta',
|
||
'settings.color.ansi.brightCyan': 'Bright Cyan',
|
||
'settings.color.ansi.brightWhite': 'Bright White',
|
||
'settings.font.label': 'Font',
|
||
'settings.font.desc': 'The built-in default or a system monospace font',
|
||
'settings.font.placeholder': 'Select a font',
|
||
'settings.font.default': 'Default',
|
||
'settings.font.size': 'Font size',
|
||
'settings.font.sizeDesc': 'Pixel size of the terminal text',
|
||
'settings.font.weight': 'Weight',
|
||
'settings.font.weightDesc': '400 is regular, 700 is bold',
|
||
'settings.font.boldWeight': 'Bold weight',
|
||
'settings.font.boldWeightDesc': 'Weight used for bold text',
|
||
'settings.font.letterSpacing': 'Letter spacing',
|
||
'settings.font.letterSpacingDesc': 'Horizontal distance between characters',
|
||
'settings.font.lineHeight': 'Line height',
|
||
'settings.font.lineHeightDesc': 'Vertical distance between adjacent lines',
|
||
'settings.cursor.blink': 'Blinking cursor',
|
||
'settings.cursor.blinkDesc': 'Whether the cursor blinks periodically',
|
||
'settings.cursor.style': 'Cursor style',
|
||
'settings.cursor.styleDesc': 'Shape used to draw the cursor',
|
||
'settings.cursor.inactiveStyle': 'Inactive cursor style',
|
||
'settings.cursor.inactiveStyleDesc': 'Cursor style while the window is unfocused',
|
||
'settings.cursor.scrollback': 'Scrollback buffer',
|
||
'settings.cursor.scrollbackDesc': 'How many lines you can scroll back',
|
||
'settings.cursorStyle.bar': 'Bar',
|
||
'settings.cursorStyle.block': 'Block',
|
||
'settings.cursorStyle.underline': 'Underline',
|
||
'settings.cursorStyle.outline': 'Outline',
|
||
'settings.cursorStyle.none': 'None',
|
||
'settings.rendererMode.auto': 'Automatic',
|
||
'settings.rendererMode.autoHint': 'Prefer WebGL acceleration, falling back to DOM rendering if it fails',
|
||
'settings.rendererMode.webgl': 'High-performance WebGL',
|
||
'settings.rendererMode.webglHint':
|
||
'Force GPU-accelerated rendering; best for high refresh rates and heavy scrolling',
|
||
'settings.rendererMode.dom': 'Compatible DOM',
|
||
'settings.rendererMode.domHint':
|
||
'Pure CPU rendering with the widest compatibility; best without a GPU or over remote desktop',
|
||
'settings.render.modeLabel': 'Renderer',
|
||
'settings.render.modeHint': 'How terminal cells are accelerated; applies to every terminal',
|
||
'settings.render.copyOnSelect': 'Copy on select',
|
||
'settings.render.copyOnSelectDesc': 'Copy text automatically when you select it with the mouse',
|
||
'settings.render.pasteRiskConfirm': 'Confirm risky paste',
|
||
'settings.render.pasteRiskConfirmDesc':
|
||
'Ask before pasting multi-line text (or a very long single line); single lines paste directly',
|
||
'settings.render.suggest': 'Input suggestions',
|
||
'settings.render.suggestDesc':
|
||
'Show command suggestions while typing; Tab accepts, Enter always runs the command right away',
|
||
'settings.render.history': 'Record command history',
|
||
'settings.render.historyDesc': 'When off, new commands are no longer recorded; saved history is kept',
|
||
'settings.render.historyLimit': 'History limit',
|
||
'settings.render.historyLimitDesc': 'Most commands to keep; duplicates are stored only once',
|
||
'settings.render.recButton': 'Terminal toolbar · Record',
|
||
'settings.render.recButtonDesc': 'Show the "Record session log" button in the top-right corner',
|
||
'settings.render.openLogsButton': 'Terminal toolbar · Open log folder',
|
||
'settings.render.openLogsButtonDesc': 'Show the "Open log folder" button in the top-right corner',
|
||
'settings.render.openCwdButton': 'Terminal toolbar · Open workspace folder',
|
||
'settings.render.openCwdButtonDesc':
|
||
'Show the "Open current folder" button in the top-right corner (hidden in SSH sessions; the folder follows cd in real time and needs shell integration or the cd command)',
|
||
'settings.system.launchAtLogin': 'Launch at startup',
|
||
'settings.system.launchAtLoginDesc':
|
||
'Start OpenTerminal when the system boots (in development mode the dev build is registered)',
|
||
'settings.system.preventSleep': 'Prevent system sleep',
|
||
'settings.system.preventSleepDesc':
|
||
'While on, OpenTerminal keeps the system from sleeping automatically; when off, the system follows its own power settings',
|
||
'settings.system.restoreSession': 'Restore last session on startup',
|
||
'settings.system.restoreSessionDesc':
|
||
'Restore the split layout on the next launch and return each terminal to its last directory; when off, OpenTerminal always starts with a single terminal',
|
||
'settings.system.shellIntegration': 'Shell integration',
|
||
'settings.system.shellIntegrationDesc':
|
||
'Let the shell report its working directory (OSC 7) for more precise path tracking, including cd inside scripts; it wraps your prompt, so turn it off if the prompt theme looks wrong',
|
||
'settings.system.closeAction': 'Close button behavior',
|
||
'settings.system.closeActionDesc':
|
||
'What happens when you click the window close button; after minimizing to the tray you can quit from the tray icon context menu',
|
||
'settings.system.closeActionTray': 'Minimize to tray',
|
||
'settings.system.closeActionExit': 'Quit directly',
|
||
'settings.system.closeActionAsk': 'Ask every time',
|
||
'settings.system.globalShortcut': 'Global show/hide shortcut',
|
||
'settings.system.globalShortcutDesc':
|
||
'Click the field, then press the key combination; Esc cancels, Backspace clears and disables it',
|
||
'settings.system.globalShortcutHint':
|
||
'Together with the global key this shows or hides the window from anywhere; if registration fails (a conflict with another app) it simply has no effect and the app reports no error.',
|
||
'settings.system.shortcutRecording': 'Press the keys…',
|
||
'settings.system.shortcutPlaceholder': 'Click and press a shortcut, leave empty to disable',
|
||
'settings.system.shortcutConflict':
|
||
'This shortcut is already used by the app (Ctrl+= / Ctrl+- / Ctrl+0 / Ctrl+PgUp / Ctrl+PgDn). Please choose another.',
|
||
'settings.lock.password.title': 'Lock password',
|
||
'settings.lock.password.desc': 'A password is required before the lock can be enabled',
|
||
'settings.lock.password.configured': 'Set',
|
||
'settings.lock.password.notConfigured': 'Not set',
|
||
'settings.lock.password.current': 'Current password',
|
||
'settings.lock.password.currentPlaceholder': 'Enter the current password',
|
||
'settings.lock.password.new': 'New password',
|
||
'settings.lock.password.newPlaceholder': 'Enter a new password',
|
||
'settings.lock.password.confirm': 'Confirm new password',
|
||
'settings.lock.password.confirmPlaceholder': 'Repeat the new password',
|
||
'settings.lock.password.set': 'Set password',
|
||
'settings.lock.password.change': 'Change password',
|
||
'settings.lock.password.clear': 'Remove password',
|
||
'settings.lock.password.clearTitle': 'Remove the lock password?',
|
||
'settings.lock.password.clearDesc':
|
||
'The lock is turned off along with it. The current password is required to confirm.',
|
||
'settings.lock.password.mismatch': 'The two new passwords do not match',
|
||
'settings.lock.password.empty': 'Enter a password',
|
||
'settings.lock.password.saved': 'Password saved',
|
||
'settings.lock.password.cleared': 'Lock password removed',
|
||
'settings.lock.password.forgot':
|
||
'A forgotten lock password cannot be recovered from any cloud or backdoor: the only way back in is deleting this machine\u2019s lock data and setting a new one.',
|
||
'settings.lock.enabled': 'Enable lock',
|
||
'settings.lock.enabledDesc':
|
||
'Lock the main window when idle or at startup; unlocking needs the password above',
|
||
'settings.lock.needPassword': 'Set a lock password first',
|
||
'settings.lock.autoLock': 'Lock when idle',
|
||
'settings.lock.autoLockDesc': 'Lock once the system has been idle this long (0 = never)',
|
||
'settings.lock.autoLockOff': 'Off',
|
||
'settings.lock.autoLockMinutes': '{n} min',
|
||
'settings.lock.lockAtStartup': 'Lock at startup',
|
||
'settings.lock.lockAtStartupDesc': 'Ask for the password right after every launch',
|
||
'settings.lock.lockNow': 'Lock now',
|
||
'settings.lock.lockNowDesc': 'Lock the main window immediately (sessions keep running, Ctrl+L)',
|
||
'settings.lock.title': 'Locked',
|
||
'settings.lock.screenDesc': 'Enter the lock password to unlock',
|
||
'settings.lock.passwordPlaceholder': 'Password',
|
||
'settings.lock.unlock': 'Unlock',
|
||
'settings.lock.unlocking': 'Unlocking…',
|
||
'settings.lock.screenForgot':
|
||
'Forgot it? The lock password cannot be recovered \u2014 the only way out is deleting this machine\u2019s lock data.',
|
||
'settings.lock.error.invalidPassword': 'Password is invalid (empty or too short)',
|
||
'settings.lock.error.wrongPassword': 'Wrong password',
|
||
'settings.lock.error.cooldown': 'Too many attempts \u2014 try again in {n}s',
|
||
'settings.lock.error.cooldownGeneric': 'Too many attempts \u2014 try again later',
|
||
'settings.lock.error.saveFailed': 'Save failed, please retry',
|
||
'settings.resetTerminal': 'Reset terminal settings',
|
||
'settings.resetTerminalTitle': 'Reset terminal settings?',
|
||
'settings.resetTerminalDesc': 'All terminal settings — font, cursor, rendering and theme — will be restored to defaults.',
|
||
'settings.highlight.alert':
|
||
'Custom highlighting improves readability at a small performance cost. Rules are applied in priority order. PS: colors are injected as text is written to the terminal, so existing scrollback is unaffected',
|
||
'settings.highlight.enabled': 'Enabled',
|
||
'settings.highlight.pattern': 'Pattern',
|
||
'settings.highlight.patternPlaceholder': 'e.g. \\b(ERROR|FAILED)\\b',
|
||
'settings.highlight.invalidRegex': 'Invalid regular expression',
|
||
'settings.highlight.priority': 'Priority',
|
||
'settings.highlight.priorityHint': 'Lower values apply first',
|
||
'settings.highlight.color': 'Color',
|
||
'settings.highlight.clearBg': 'Clear',
|
||
'settings.highlight.addBg': 'Add',
|
||
'settings.highlight.palette': 'Palette',
|
||
'settings.highlight.sampleText': 'Highlight',
|
||
'settings.highlight.note': 'Note',
|
||
'settings.highlight.notePlaceholder': 'Rule description (optional)',
|
||
'settings.highlight.caseInsensitive': 'Ignore case',
|
||
'settings.highlight.caseInsensitiveHint': 'letters match in any case (OK also matches ok)',
|
||
'settings.highlight.bands': 'Value bands',
|
||
'settings.highlight.bandsHint':
|
||
'Colour by the first number in the match; no number (or below the lowest band) keeps the foreground colour',
|
||
'settings.highlight.bandMin': 'Min',
|
||
'settings.highlight.addBand': '+ Add band',
|
||
'settings.highlight.removeBand': 'Remove band',
|
||
'settings.highlight.importExport': 'Import / export',
|
||
'settings.highlight.importExportTitle': 'Import / export highlight rules',
|
||
'settings.highlight.exportSection': 'Export — copy or save this JSON to share the set',
|
||
'settings.highlight.copy': 'Copy',
|
||
'settings.highlight.copied': 'Copied',
|
||
'settings.highlight.download': 'Save as file',
|
||
'settings.highlight.importSection': 'Import — paste JSON, or pick a .json file',
|
||
'settings.highlight.chooseFile': 'Choose file',
|
||
'settings.highlight.importMode': 'Mode',
|
||
'settings.highlight.importReplace': 'Replace current rules',
|
||
'settings.highlight.importAppend': 'Append to current rules',
|
||
'settings.highlight.importReplaceTitle': 'Replace current rules?',
|
||
'settings.highlight.importReplaceDesc':
|
||
'Importing overwrites every current rule with this file. This cannot be undone.',
|
||
'settings.highlight.importOk': 'Import',
|
||
'settings.highlight.importEmpty': 'No usable rules found',
|
||
'settings.highlight.importBadJson': 'Not valid JSON',
|
||
'settings.highlight.importWrongKind': 'This JSON is not a highlight-rule file',
|
||
'settings.highlight.importWrongVersion': 'This JSON has an unsupported version',
|
||
'settings.highlight.importReadFailed': 'Could not read the file',
|
||
'settings.highlight.importSkipped': 'Skipped {n}: {list}',
|
||
'settings.highlight.imported': 'Imported {n} rule(s)',
|
||
'settings.highlight.testText': 'Test text',
|
||
'settings.highlight.testHint': 'see the effect as you edit the pattern (first 2000 characters only)',
|
||
'settings.highlight.mode': 'Highlighting',
|
||
'settings.highlight.modeAll': 'All',
|
||
'settings.highlight.modeBasic': 'Basic only',
|
||
'settings.highlight.modeOff': 'Off',
|
||
'settings.highlight.modeDesc':
|
||
'Basic only: keeps just the key rules (errors, success, warnings, dangerous commands, secrets) — cheaper and quieter. Off: no colour injection at all (rules and colours are kept).',
|
||
'settings.highlight.basic': 'Basic rule',
|
||
'settings.highlight.basicHint': 'keep this rule active when the highlight mode is "Basic only"',
|
||
'settings.highlight.category': 'Category',
|
||
'settings.highlight.groupByCategory': 'Group by category',
|
||
'settings.highlight.category.safety': 'Safety',
|
||
'settings.highlight.category.status': 'Status',
|
||
'settings.highlight.category.file': 'Files',
|
||
'settings.highlight.category.net': 'Network',
|
||
'settings.highlight.category.text': 'Text',
|
||
'settings.highlight.category.metric': 'Metrics',
|
||
'settings.highlight.category.none': 'Uncategorised',
|
||
'settings.highlight.stats': 'Count hits and time',
|
||
'settings.highlight.statsHint':
|
||
'Collect per-rule hit counts and durations for this page (zero cost while off)',
|
||
'settings.highlight.statsHits': 'Hits',
|
||
'settings.highlight.statsMs': 'Time',
|
||
'settings.highlight.statsReset': 'Reset stats',
|
||
'settings.highlight.statsEmpty': 'No stats yet — run some output in a terminal first',
|
||
'settings.highlight.themeColors': 'Follow theme colours',
|
||
'settings.highlight.themeColorsHint':
|
||
'Map highlight colours onto the active terminal palette by hue (neutral greys are kept as-is)',
|
||
'settings.highlight.perHost': 'Per-host rule sets',
|
||
'settings.highlight.perHostHint':
|
||
'When on, an SSH connection bound to a rule set runs only that subset; when off every session uses all rules',
|
||
'settings.highlight.profiles': 'Host rule sets',
|
||
'settings.highlight.profilesHint':
|
||
'Save a subset of the rules under a name, then bind it to a host in the connection editor',
|
||
'settings.highlight.profileNew': '+ New rule set',
|
||
'settings.highlight.profileEdit': 'Edit rule set',
|
||
'settings.highlight.profileName': 'Name',
|
||
'settings.highlight.profileNamePlaceholder': 'e.g. production (errors only)',
|
||
'settings.highlight.profileRules': 'Included rules',
|
||
'settings.highlight.profileRulesHint': 'Unchecked rules stay off on that host',
|
||
'settings.highlight.profileExcluded': 'Excluded {n}: {list}',
|
||
'settings.highlight.profileEmpty': 'No rule sets yet',
|
||
'settings.highlight.profileDeleteTitle': 'Delete rule set',
|
||
'settings.highlight.actions': 'Actions',
|
||
'settings.highlight.addRule': '+ Add rule',
|
||
'settings.highlight.empty': 'No highlight rules yet — click "+ Add rule" to create one',
|
||
'settings.highlight.deleteTitle': 'Delete highlight rule',
|
||
'settings.highlight.resetTitle': 'Restore default highlight rules',
|
||
'settings.highlight.resetDesc': 'Replaces every current rule with the built-in presets. This cannot be undone.',
|
||
'settings.highlight.resetOk': 'Restore',
|
||
'settings.highlight.createTitle': 'New highlight rule',
|
||
'settings.highlight.editTitle': 'Edit highlight rule',
|
||
'settings.highlight.builtin.perm': 'Linux permissions and user/group',
|
||
'settings.highlight.builtin.path': 'Linux file paths',
|
||
'settings.highlight.builtin.shellkw': 'Shell keywords and control flow',
|
||
'settings.highlight.builtin.danger': 'Dangerous / destructive commands',
|
||
'settings.highlight.builtin.secret': 'Possible secret / token',
|
||
'settings.highlight.builtin.loglevel': 'Log levels',
|
||
'settings.highlight.builtin.rootat': 'Root prompt (root@)',
|
||
'settings.highlight.builtin.exitcode': 'Exit codes',
|
||
'settings.highlight.builtin.percent': 'Percentages & progress',
|
||
'settings.highlight.builtin.http': 'HTTP status codes',
|
||
'settings.highlight.builtin.latency': 'Durations (milliseconds)',
|
||
'settings.highlight.builtin.delop': 'Delete / move / overwrite operations',
|
||
'settings.highlight.builtin.createop': 'Create / add operations',
|
||
'settings.highlight.builtin.okstate': 'Success states',
|
||
'settings.highlight.builtin.warnstate': 'Warnings and TODO markers',
|
||
'settings.highlight.builtin.badstate': 'Error / failure states',
|
||
'settings.highlight.builtin.quoted': 'Strings and quotes',
|
||
'settings.highlight.builtin.envvar': 'Environment variables and arguments',
|
||
'settings.highlight.builtin.ipv4': 'Network and IP addresses',
|
||
'settings.highlight.builtin.datetime': 'Time and date',
|
||
'settings.highlight.builtin.numbers': 'Numbers and counts',
|
||
'settings.highlight.builtin.url': 'Web links',
|
||
'settings.theme.accent': 'Tab accent color',
|
||
'settings.theme.accentDesc': 'Accent color for the active tab border, the sidebar indicator, and SSH badges',
|
||
'settings.theme.backgroundImage': 'Background image',
|
||
'settings.theme.backgroundImageDesc': 'Show an image behind the terminal; remove it to go back to a solid background. In every theme the image dims toward dark and text is brightened automatically; lower the opacity if it is still hard to read (20–40% works well for bright images)',
|
||
'settings.theme.chooseImage': 'Choose image',
|
||
'settings.theme.clearImage': 'Remove',
|
||
'settings.theme.imageOpacity': 'Image opacity',
|
||
'settings.theme.backgroundImageDim': 'Background dim',
|
||
'settings.theme.backgroundImageDimDesc': 'Overlays a black dim layer on top of the image; text is brightened automatically. 30–50% works well for bright images',
|
||
'settings.theme.customBadge': 'Custom',
|
||
'settings.theme.deleteTitle': 'Delete custom theme',
|
||
'settings.theme.create': 'New theme',
|
||
'settings.theme.editTitle': 'Edit theme',
|
||
'settings.themeEditor.name': 'Name',
|
||
'settings.themeEditor.namePlaceholder': 'Theme name',
|
||
'settings.themeEditor.duplicateName': 'Same name as another theme (saving is still allowed)',
|
||
'settings.themeEditor.copySuffix': ' (copy)',
|
||
'settings.about.currentVersion': 'Current version',
|
||
'settings.about.statusIdle': 'Click to check for updates',
|
||
'settings.about.statusChecking': 'Checking for updates…',
|
||
'settings.about.statusAvailable': 'A new version is available',
|
||
'settings.about.statusLatest': 'Already up to date',
|
||
'settings.about.statusDownloading': 'Downloading…',
|
||
'settings.about.statusDownloaded': 'Download complete — restart to install',
|
||
'settings.about.statusError': 'Check failed',
|
||
'settings.about.statusDev': 'Update checks are unavailable in development mode',
|
||
'settings.about.autoCheck': 'Check automatically at startup',
|
||
'settings.about.download': 'Download update',
|
||
'settings.about.downloadGithub': ' (GitHub source)',
|
||
'settings.about.install': 'Restart and install',
|
||
'settings.about.check': 'Check for updates',
|
||
'settings.about.checkingButton': 'Checking',
|
||
'settings.about.changelog': 'Changelog',
|
||
'settings.about.changelogEmpty': 'No changelog available'
|
||
}
|
||
|
||
export default settings
|