"use strict";

(function initSettingsI18n(root) {
  const STRINGS = {
    en: {
      settingsTitle: "Settings",
      settingsSubtitle: "Configure how Clawd behaves on your desktop.",
      settingsTutorialReplayLink: "Show getting started guide",
      settingsTutorialReplayFailed: "Couldn't open the guide",
      sidebarGeneral: "General",
      sidebarAgents: "Agents",
      sidebarTheme: "Theme",
      sidebarAnimOverrides: "Animation & Sound",
      sidebarShortcuts: "Shortcuts",
      sidebarAbout: "About",
      sidebarRemoteSsh: "Remote SSH",
      sidebarMobile: "Mobile",
      sidebarTelegramApproval: "Remote Approval",
      remoteApprovalTitle: "Remote Approval",
      remoteApprovalSubtitle: "Route local permission prompts to a remote channel. Secrets stay outside prefs and the desktop bubble remains the local fallback. Telegram and Feishu are supported today.",
      telegramApprovalChannelName: "Telegram",
      telegramApprovalCardKind_incomplete: "Setup incomplete",
      telegramApprovalCardKind_ready: "Ready to enable",
      telegramApprovalCardKind_starting: "Starting…",
      telegramApprovalCardKind_running: "Running",
      telegramApprovalCardKind_failed: "Failed",
      telegramApprovalCardMissingBoth: "Save a bot token and a recipient user id below to continue.",
      telegramApprovalCardMissingToken: "Save a bot token below to continue.",
      telegramApprovalCardMissingRecipient: "Save the recipient user id below to continue.",
      telegramApprovalCardReadyToEnable: "Token and recipient are saved. Flip the switch in step 3 to start.",
      telegramApprovalCardStarting: "Connecting to the Telegram approval sidecar…",
      telegramApprovalCardRunning: "Telegram approval is live. Approvals will route to your bot.",
      telegramApprovalCardFailed: "Sidecar reported a failure. Check the message below or restart.",
      telegramMigrationLoading: "Loading migration status…",
      telegramMigrationTitle: "Telegram bot transport (v0.9.0 spike)",
      telegramMigrationStateLabel: "State",
      telegramMigrationRuntimeFailedSuffix: " (runtime: failed — {reason})",
      telegramMigrationRuntimeUnknown: "unknown",
      telegramMigrationOwnerLabel: "Owner",
      telegramMigrationRunning: "running",
      telegramMigrationStopped: "stopped",
      telegramMigrationPolling: "polling",
      telegramMigrationImportFailed: "Native config import failed: {error}",
      telegramMigrationRetryImport: "Retry import",
      telegramMigrationConfigureBelow: "Configure the Telegram bot below, then choose how to run it:",
      telegramMigrationTestAndSwitch: "Test native bot and switch",
      telegramMigrationEnableLegacy: "Enable legacy sidecar",
      telegramMigrationLegacyNotRunning: "Legacy sidecar is not running.",
      telegramMigrationRetryLegacy: "Retry legacy sidecar",
      telegramMigrationNativeAvailable: "Native Telegram bot is available. Test it to switch over — legacy stays as fallback.",
      telegramMigrationTestAndSwitchShort: "Test native and switch",
      telegramMigrationLegacyActive: "Legacy sidecar is active.",
      telegramMigrationDisableApproval: "Disable Telegram approval",
      telegramMigrationWaitingTap: "Waiting for your Telegram tap… (60s timeout)",
      telegramMigrationNativeActive: "Native Telegram is active. Legacy files kept for rollback.",
      telegramMigrationRollbackToLegacy: "Roll back to legacy",
      telegramMigrationDeleteLegacyToken: "Delete legacy token file",
      telegramMigrationSwitchingToLegacy: "Switching to legacy approval…",
      telegramMigrationWorking: "Working…",
      telegramMigrationTokenAlreadyRemoved: "Telegram token file was already removed.",
      telegramMigrationTokenDeleted: "Telegram token file deleted.",
      telegramMigrationTokenDeleteFailed: "Telegram token file delete failed",
      telegramMigrationErrorToast: "Telegram migration: {code}",
      telegramApprovalStep1Title: "1. Bot Token",
      telegramApprovalBotToken: "Bot token",
      telegramApprovalBotTokenHintHtml: "Create a bot with [@BotFather](https://t.me/botfather) using /newbot, then paste the token here. It is stored in the user-data env file, never in clawd-prefs.json.",
      telegramApprovalBotTokenPlaceholder: "Paste new bot token",
      telegramApprovalSaveToken: "Save token",
      telegramApprovalSaving: "Saving…",
      telegramApprovalTokenEmpty: "Paste a Telegram bot token first.",
      telegramApprovalTokenSaved: "Token saved.",
      telegramApprovalTokenSaveFailed: "Could not save Telegram bot token.",
      telegramApprovalTokenConfiguredLabel: "Token configured",
      telegramApprovalTokenConfiguredNoMask: "(stored)",
      telegramApprovalTokenConfiguredDesc: "The bot token is saved on disk. Replace it if you rotated the bot.",
      telegramApprovalReplaceToken: "Replace token",
      telegramApprovalCancel: "Cancel",
      telegramApprovalTokenCurrent: "Current: {masked}",
      telegramApprovalTokenReplaceHintHtml: "Pasting a new token replaces the saved one. Get a fresh one from [@BotFather](https://t.me/botfather) if needed.",
      telegramApprovalStep2Title: "2. Recipient",
      telegramApprovalRecipientLabel: "Your Telegram user id",
      telegramApprovalRecipientHintHtml: "Open [@userinfobot](https://t.me/userinfobot) in Telegram and send /start to get your numeric id. Clawd uses it both as the allowed approver and as the chat to send approval cards. Send /start to your own bot at least once first.",
      telegramApprovalRecipientPlaceholder: "e.g. 123456789",
      telegramApprovalRecipientEmpty: "Enter your Telegram user id first.",
      telegramApprovalRecipientInvalid: "Telegram user id must be a number with at least 5 digits.",
      telegramApprovalSaveRecipient: "Save recipient",
      telegramApprovalConfigSaved: "Telegram approval config saved.",
      telegramApprovalStep3Title: "3. Enable & Test",
      telegramApprovalToggle: "Enable Telegram approval",
      telegramApprovalToggleDesc: "When configured, actionable local permission bubbles also send an approval card to Telegram.",
      telegramApprovalCompletionOutput: "Completion output",
      telegramApprovalCompletionOutputDesc: "Controls whether Telegram completion pings include assistant text. Full answer may include code, file contents, or secrets if the assistant wrote them.",
      telegramApprovalCompletionOutput_off: "Off",
      telegramApprovalCompletionOutput_full: "Full answer",
      telegramApprovalCompletionOutputFullConfirm: "Full answer sends the assistant's final text to Telegram. It may include code, file contents, or secrets if the assistant wrote them. Continue?",
      telegramApprovalDirectSend: "Direct Send (paste-only)",
      telegramApprovalDirectSendDesc: "When you reply to a Clawd completion notification, focus the matching local terminal and paste one line. It does not send Enter.",
      telegramApprovalTest: "Test message",
      telegramApprovalTestDesc: "Sends a standalone test approval card. It is not attached to any agent permission request.",
      telegramApprovalSendTest: "Send test",
      telegramApprovalTesting: "Waiting…",
      telegramApprovalTestSent: "Telegram test completed.",
      telegramApprovalTestFailed: "Telegram test failed.",
      telegramApprovalPrereqLabel: "Finish steps 1 and 2 first",
      telegramApprovalPrereqDesc: "Still needed:",
      telegramApprovalPrereqMissingToken: "bot token",
      telegramApprovalPrereqMissingRecipient: "recipient user id",
      feishuApprovalChannelName: "Feishu",
      feishuApprovalCardMissingBoth: "Save app credentials and an approver user id below to continue.",
      feishuApprovalCardMissingSecrets: "Save Feishu app credentials below to continue.",
      feishuApprovalCardMissingApprover: "Save the approver user id below to continue.",
      feishuApprovalCardReadyToEnable: "App credentials and approver are saved. Flip the switch in step 3 to start.",
      feishuApprovalCardStarting: "Connecting to Feishu long connection…",
      feishuApprovalCardRunning: "Feishu approval is live. Approval cards will route to your bot.",
      feishuApprovalCardFailed: "Feishu approval reported a failure. Check the message below or restart.",
      feishuApprovalStep1Title: "1. App Credentials",
      feishuApprovalSecretsLabel: "Feishu app credentials",
      feishuApprovalSecretsHintHtml: "Paste the App ID and App Secret from your Feishu self-built app. Verification Token and Encrypt Key are optional unless enabled in Feishu event settings.",
      feishuApprovalSecretsReplaceHintHtml: "Pasting new values replaces the saved fields. Blank fields keep their current values.",
      feishuApprovalAppIdPlaceholder: "App ID, e.g. cli_xxx",
      feishuApprovalAppSecretPlaceholder: "App Secret",
      feishuApprovalVerificationTokenPlaceholder: "Verification Token (optional)",
      feishuApprovalEncryptKeyPlaceholder: "Encrypt Key (optional)",
      feishuApprovalSaveSecrets: "Save secrets",
      feishuApprovalSaving: "Saving…",
      feishuApprovalSecretsRequired: "Enter App ID and App Secret first.",
      feishuApprovalSecretsEmpty: "Enter at least one Feishu secret to update.",
      feishuApprovalSecretsSaved: "Feishu secrets saved.",
      feishuApprovalSecretsSaveFailed: "Could not save Feishu secrets.",
      feishuApprovalSecretsConfiguredLabel: "Secrets configured",
      feishuApprovalSecretsConfiguredNoMask: "(stored)",
      feishuApprovalSecretsConfiguredDesc: "Feishu app credentials are saved on disk, outside clawd-prefs.json.",
      feishuApprovalSecretsCurrent: "Current App ID: {masked}",
      feishuApprovalReplaceSecrets: "Replace secrets",
      feishuApprovalStep2Title: "2. Approver",
      feishuApprovalApproverLabel: "Feishu approver user id",
      feishuApprovalApproverHintHtml: "Use the same id type that your app receives in card action callbacks. For a normal bot-to-user card, open_id is usually the right choice.",
      feishuApprovalApproverPlaceholder: "e.g. ou_xxx",
      feishuApprovalApproverEmpty: "Enter the Feishu approver user id first.",
      feishuApprovalSaveApprover: "Save approver",
      feishuApprovalConfigSaved: "Feishu approval config saved.",
      feishuApprovalStep3Title: "3. Enable & Test",
      feishuApprovalToggle: "Enable Feishu approval",
      feishuApprovalToggleDesc: "When configured, actionable local permission bubbles also send an approval card to Feishu.",
      feishuApprovalConnectionTimeout: "Long connection timeout",
      feishuApprovalConnectionTimeoutDesc: "How long Clawd waits for Feishu to connect or reconnect before showing failed. The SDK can still keep reconnecting in the background.",
      feishuApprovalConnectionTimeoutOption: "{seconds}s",
      feishuApprovalTest: "Test card",
      feishuApprovalTestDesc: "Sends a standalone Feishu approval card. It is not attached to any agent permission request.",
      feishuApprovalSendTest: "Send test",
      feishuApprovalTesting: "Waiting…",
      feishuApprovalTestSent: "Feishu test completed.",
      feishuApprovalTestFailed: "Feishu test failed.",
      feishuApprovalPrereqLabel: "Finish steps 1 and 2 first",
      feishuApprovalPrereqDesc: "Still needed:",
      feishuApprovalPrereqMissingSecrets: "app credentials",
      feishuApprovalPrereqMissingApprover: "approver user id",
      remoteSshTitle: "Remote SSH",
      remoteSshSubtitle: "Manage one-click SSH tunnels for remote AI coding sessions. Profiles never store passwords or passphrases — Clawd relies on your existing ssh-agent / SSH keys.",
      remoteSshSectionProfiles: "Profiles",
      remoteSshAddProfile: "+ Add profile",
      remoteSshEmpty: "No profiles yet. Click \"Add profile\" to set up your first remote SSH tunnel.",
      remoteSshConnect: "Connect",
      remoteSshDisconnect: "Disconnect",
      remoteSshAuthenticate: "Authenticate",
      remoteSshAuthenticateHint: "Open a system terminal to complete first-time host key confirmation or load your SSH key.",
      remoteSshOpenTerminal: "Open Terminal",
      remoteSshDeploy: "Deploy / Repair Hooks",
      remoteSshDeploying: "Deploying…",
      remoteSshDeploySuccess: "Hook files deployed.",
      remoteSshDeployDriftWarning: "Deploy ran against the previous configuration — please redeploy",
      remoteSshEdit: "Edit",
      remoteSshDelete: "Delete",
      remoteSshDeleteConfirm: "Delete profile \"{label}\"? This cannot be undone.",
      remoteSshAddTitle: "Add Remote SSH Profile",
      remoteSshEditTitle: "Edit Remote SSH Profile",
      remoteSshSave: "Save",
      remoteSshCancel: "Cancel",
      remoteSshAddSuccess: "Profile added.",
      remoteSshUpdateSuccess: "Profile updated.",
      remoteSshFieldLabel: "Label",
      remoteSshFieldHost: "Host",
      remoteSshFieldPort: "SSH Port (default 22)",
      remoteSshFieldIdentityFile: "Identity File (optional)",
      remoteSshFieldIdentityFileHint: "Absolute path to a private key. Leave empty to use ssh-agent or ~/.ssh/config.",
      remoteSshFieldRemoteForwardPort: "Remote Forward Port",
      remoteSshFieldHostPrefix: "Host Prefix (optional)",
      remoteSshFieldHostPrefixHint: "Short name shown in Sessions menu. Avoid control characters, quotes, backslash, $, `, and !.",
      remoteSshFieldAutoStartCodex: "Auto-start Codex fallback monitor on connect",
      remoteSshFieldConnectOnLaunch: "Connect automatically when Clawd starts",
      remoteSshStatus_idle: "Idle",
      remoteSshStatus_connecting: "Connecting…",
      remoteSshStatus_connected: "Connected",
      remoteSshStatus_reconnecting: "Reconnecting…",
      remoteSshStatus_failed: "Failed",
      remoteSshStep_verify: "Verify local files",
      remoteSshStep_mkdir: "Create remote hooks directory",
      "remoteSshStep_check-node": "Check remote Node",
      remoteSshStep_scp: "Copy hook files",
      "remoteSshStep_host-prefix": "Write host prefix",
      "remoteSshStep_install-claude": "Register Claude hooks",
      "remoteSshStep_install-codex": "Register Codex hooks",
      "remoteSshStep_install-copilot": "Register Copilot hooks",
      "remoteSshStep_remote-shell": "Probe remote shell",
      remoteSshErrAuthDenied: "Authentication failed. Click Authenticate to complete first-time host key confirmation or load your SSH key.",
      remoteSshErrHostKey: "Host key not yet trusted. Click Authenticate to confirm the fingerprint in a terminal.",
      remoteSshErrForwardFailed: "Remote port unavailable. Try a different Remote Forward Port (23333-23337).",
      remoteSshErrBadConfig: "ssh refused the configuration. Check the profile fields.",
      remoteSshErrIdentityMissing: "Identity file not accessible. Check the path and permissions.",
      remoteSshErrDns: "Could not resolve hostname.",
      remoteSshErrNetTimeout: "Network timeout. Will retry shortly.",
      remoteSshErrNetUnreachable: "Network unreachable. Will retry shortly.",
      remoteSshErrBrokenPipe: "Connection dropped. Will retry shortly.",
      remoteSshErrSpawnFailed: "Could not spawn ssh process.",
      remoteSshErrSshMissing: "OpenSSH client not found. On Windows, install via Settings → Apps → Optional Features → Add OpenSSH Client.",
      remoteSshErrWindowsOpenSshLegacy: "This Windows OpenSSH version is too old for reliable Remote SSH. Upgrade OpenSSH to 8.x or newer.",
      remoteSshErrWindowsCmdShell: "Remote default shell is Windows cmd.exe. Remote SSH needs a POSIX shell (mkdir -p / ~ expansion / sh -c). On the remote, set OpenSSH DefaultShell to Git Bash or WSL bash, then click Deploy again. PowerShell: New-ItemProperty -Path 'HKLM:\\SOFTWARE\\OpenSSH' -Name DefaultShell -Value 'C:\\Program Files\\Git\\bin\\bash.exe' -PropertyType String -Force",
      remoteSshErrNoLocalPort: "Local Clawd server is not yet running.",
      remoteSshErrUnknownStrikes: "Multiple unrecognized errors in a row — please check the profile and logs.",
      remoteSshProbeLocalUnhealthy: "Tunnel established but local Clawd server is not healthy.",
      remoteSshProbeUnresponsive: "Tunnel established but Clawd is not responding. Make sure Clawd is running.",
      remoteSshProbePortHijack: "Remote port is occupied by another HTTP service. Try a different Remote Forward Port.",
      remoteSshProbeHttpTimeout: "Remote HTTP timed out. Will retry shortly.",
      remoteSshProbeNodeNotExec: "Remote node binary is not executable. Check permissions.",
      remoteSshProbeNodeMissing: "Remote node not found. Run Deploy first or install Node on the remote.",
      remoteSshProbeSignal: "Probe interrupted. Will retry shortly.",
      remoteSshHooksLabel: "Hooks:",
      remoteSshHooksNever: "Never deployed",
      remoteSshHooksDeployedJustNow: "Deployed just now",
      remoteSshHooksDeployedAgoMin: "Deployed {n} min ago",
      remoteSshHooksDeployedAgoHr: "Deployed {n} hr ago",
      remoteSshHooksDeployedAgoDay: "Deployed {n} day(s) ago",
      remoteSshConnectWarnNoDeploy: "Hooks are not deployed yet. Connect alone only builds the SSH tunnel — Clawd will not react to remote sessions until you click Deploy / Repair Hooks.",
      codexHookReviewReminder: "Next step: open Codex CLI and run /hooks to review and activate the new hooks (Codex requires this before they fire).",
      doctorSidebarLabel: "Doctor",
      doctorTitle: "Clawd Doctor",
      doctorStatusUnknown: "Unknown",
      doctorStatusPass: "OK",
      doctorStatusWarning: "Warning",
      doctorStatusCritical: "Critical",
      doctorStatusInfo: "Info",
      doctorIssueCount: "{count} issues",
      doctorLastCheckedAt: (time) => `Checked ${time}`,
      doctorCheckLocalServer: "Local server",
      doctorCheckAgentIntegrations: "Agent integrations",
      doctorAgentSummaryOk: (count) => `${count} OK`,
      doctorAgentSummaryAttention: (count) => `${count} need attention`,
      doctorAgentSummaryNeedsAttention: "need attention",
      doctorAgentSummarySkipped: (count) => `${count} skipped`,
      doctorAgentSummaryNoneActive: "No active integrations",
      doctorCheckPermissionBubbles: "Permission bubbles",
      doctorCheckTheme: "Theme",
      doctorCheckUnknown: "Check",
      doctorPrivacy: "Privacy notice: this report is generated locally. Clawd does not upload data. User paths and secrets are redacted before copying.",
      doctorCopyReport: "Copy diagnostic report",
      doctorRerun: "Re-run checks",
      doctorClose: "Close",
      doctorCopied: "Diagnostic report copied",
      doctorCopyFailed: "Could not copy diagnostic report.",
      doctorRunFailed: "Could not run diagnostic checks.",
      doctorFix: "Fix",
      doctorFixing: "Fixing",
      doctorFixApplied: "Repair finished.",
      doctorFixFailed: "Could not repair this issue.",
      doctorFixConfirmCodex: "Clawd will set [features].hooks = true in your Codex config. Continue?",
      doctorFixConfirmCodexTitle: "Enable Codex hooks?",
      doctorFixConfirmCodexDetail: "This repair will change your Codex config and set [features].hooks = true. Clawd will not make that change unless you confirm it here.",
      doctorFixConfirmCodexAction: "Enable and repair",
      doctorFixConfirmCancel: "Cancel",
      doctorRestartButton: "Restart Clawd",
      doctorRestarting: "Restarting",
      doctorRestartConfirmTitle: "Restart Clawd?",
      doctorRestartConfirmDetail: "Clawd will close and reopen. In-flight requests from your AI coding agents will be dropped. The Doctor window will close as part of the restart.",
      doctorRestartConfirmAction: "Restart now",
      doctorNoResult: "No diagnostic result yet.",
      doctorConnectionTitle: "Test connection",
      doctorConnectionInstruction: "Send a message in any AI coding agent, then come back after the countdown.",
      doctorConnectionIdle: "Not tested",
      doctorConnectionTesting: "Waiting {seconds}s",
      doctorConnectionHttpVerified: "HTTP path verified",
      doctorConnectionHttpDropped: "HTTP works, events dropped",
      doctorConnectionHttpBlocked: "HTTP blocked",
      doctorConnectionNoActivity: "No activity",
      doctorConnectionNoActivityHint: "No agent hook traffic reached Clawd during the test. If you haven't enabled an agent yet, enable or install one in Settings, then send a message from that agent and run the test again.",
      doctorConnectionError: "Connection test failed",
      doctorTestConnection: "Test connection",
      doctorOpenLog: "Open debug log",
      doctorOpenLogOpened: "Debug log opened",
      doctorOpenLogFailed: "Could not open debug log.",
      shortcutsTitle: "Shortcuts",
      shortcutsSubtitle: "Set global shortcuts for pet visibility and permission actions. Leave a field empty to unbind it.",
      shortcutLabelBubbleNextOption: "Bubble: Next option",
      shortcutLabelBubblePrevOption: "Bubble: Previous option",
      shortcutLabelBubbleToggleOption: "Bubble: Toggle option",
      shortcutLabelBubbleSubmit: "Bubble: Submit answer",
      shortcutBuiltinKeyTooltip: "Built-in key, not customizable",
      shortcutRecordButton: "Change",
      shortcutClearButton: "Clear",
      shortcutResetButton: "Reset",
      shortcutResetAllButton: "Reset All",
      shortcutRecordingHint: "Press keys (Esc)",
      shortcutUnassigned: "— unassigned —",
      shortcutErrorConflict: "Conflict with {other}. Try another key.",
      shortcutErrorSystemConflict: "Already in use by system or another app.",
      shortcutErrorReserved: "This combination is reserved. Try another key.",
      shortcutErrorInvalid: "That key combination is not supported.",
      shortcutErrorNeedsModifier: "Shortcut must include at least one modifier key.",
      shortcutErrorRegistrationFailed: "Saved, but currently not active due to system conflict. Rebind or try again later.",
      shortcutLabelTogglePet: "Toggle pet visibility",
      shortcutLabelPermissionAllow: "Permission: Allow",
      shortcutLabelPermissionDeny: "Permission: Deny",
      shortcutToastSaved: "Shortcut updated",
      sidebarSoon: "Soon",
      sectionAppearance: "Appearance",
      sectionSession: "Session management",
      sectionAlerts: "Alerts & feedback",
      sectionBehavior: "Behavior & position",
      sectionSystemStartup: "System & startup",
      sectionPermissions: "Permissions",
      hardwareBuddyTitle: "Hardware Buddy",
      hardwareBuddyDesc: "Connect a paired BLE desk device through the separate Clawstick runtime. Permission replies stay off unless explicitly enabled and the link is secure.",
      hardwareBuddyEnable: "Enable Hardware Buddy",
      hardwareBuddyEnableDesc: "Start the BLE sidecar and send state-only session snapshots by default.",
      hardwareBuddyAddress: "BLE address",
      hardwareBuddyAddressDesc: "Optional fixed device address. Leave empty to scan by name prefix.",
      hardwareBuddyNamePrefix: "Device name prefix",
      hardwareBuddyNamePrefixDesc: "Scan for devices whose advertised name starts with this text.",
      hardwareBuddyPermissions: "Allow hardware permission replies",
      hardwareBuddyPermissionsDesc: "Requires this opt-in plus a secure paired transport before Allow/Deny prompts appear on the device.",
      hardwareBuddyQuickCommands: "Enable Quick Commands",
      hardwareBuddyQuickCommandsDesc: "Expose local preset buttons that create adapter-owned quick_command events. Clawd does not paste text or run shell commands.",
      hardwareBuddyQuickCommandPresets: "Quick Command presets",
      hardwareBuddyQuickCommandPresetsDesc: "Click a preset to enqueue a validated event for the active-session adapter.",
      hardwareBuddyQuickCommandsDisabled: "Turn on Quick Commands to enable preset buttons.",
      hardwareBuddyQuickCommandsLoading: "Loading presets...",
      hardwareBuddyQuickCommandsUnavailable: "Quick Commands are not available.",
      hardwareBuddyQuickCommandSent: "Quick Command queued.",
      hardwareBuddyQuickCommandFailed: "Quick Command failed: ",
      hardwareBuddyRepliesOn: "Replies on",
      hardwareBuddyRepliesOff: "Replies off",
      hardwareBuddyRepliesBlocked: "Replies waiting",
      hardwareBuddyTest: "Test approval",
      hardwareBuddyTestButton: "Send test",
      hardwareBuddyTestWaiting: "Waiting...",
      hardwareBuddyTestDesc: "Send a harmless approval request to the paired device.",
      hardwareBuddyTestPending: "Waiting for a button press on the device.",
      hardwareBuddyTestOk: "Device replied: {decision}",
      hardwareBuddyTestError: "Test approval failed.",
      hardwareBuddyTestErr_disabled: "Hardware Buddy is not enabled.",
      hardwareBuddyTestErr_permissions_off: "Hardware permission replies are disabled.",
      hardwareBuddyTestErr_not_secure: "Hardware Buddy is not connected over a secure link.",
      hardwareBuddyTestErr_timeout: "The device did not reply before the test timed out.",
      hardwareBuddyTestErr_no_decision: "Hardware Buddy test did not receive a decision.",
      hardwareBuddyTestErr_internal_error: "Hardware Buddy test failed inside Clawd.",
      hardwareBuddyTestDisabled: "Enable Hardware Buddy before testing approvals.",
      hardwareBuddyTestRepliesOff: "Turn on hardware permission replies before testing approvals.",
      hardwareBuddyTestNeedsSecure: "Connect over a secure paired link before testing approvals.",
      hardwareBuddyTestToastOk: "Hardware Buddy test reply received.",
      hardwareBuddyTestToastError: "Hardware Buddy test failed: ",
      hardwareBuddyStatus: "Connection status",
      hardwareBuddyStatus_off: "Off",
      hardwareBuddyStatus_idle: "Idle",
      hardwareBuddyStatus_searching: "Searching",
      hardwareBuddyStatus_connected: "Connected",
      hardwareBuddyStatus_secure: "Secure",
      hardwareBuddyStatus_error: "Needs attention",
      hardwareBuddyStatusOffDetail: "Hardware Buddy is disabled.",
      hardwareBuddyStatusError: "Needs attention",
      hardwareBuddyStatusErrorDetail: "Check the Hardware Buddy sidecar status.",
      hardwareBuddyStatusConnectedDetail: "{device} connected, secure link {secure}",
      hardwareBuddyStatusAddressDetail: "Looking for {address}.",
      hardwareBuddyStatusPrefixDetail: "Scanning for names starting with {prefix}.",
      hardwareBuddySecureOn: "on",
      hardwareBuddySecureOff: "off",
      hardwareBuddyErr_missing_bleak: "Install bleak",
      hardwareBuddyErr_python_missing: "Python missing",
      hardwareBuddyErr_auth_required: "Pair required",
      hardwareBuddyErr_device_not_found: "Device not found",
      hardwareBuddyErr_bad_config: "Bad config",
      hardwareBuddyErr_core_missing: "Install Clawstick",
      hardwareBuddyErr_sidecar_exited: "Sidecar exited",
      hardwareBuddyErr_sidecar_error: "Sidecar error",
      collapsibleExpand: "Expand section",
      collapsibleCollapse: "Collapse section",
      agentsTitle: "Agents",
      agentsSubtitle: "Turn tracking on or off per agent. Disabled agents stop log monitors and drop hook events at the HTTP boundary — they won't drive the pet, show permission bubbles, or keep sessions.",
      agentsEmpty: "No agents registered.",
      agentSectionConnected: "Connected",
      agentSectionRecommended: "Detected locally",
      agentSectionUnavailable: "Not detected locally",
      eventSourceHook: "Hook",
      eventSourceLogPoll: "Log poll",
      eventSourcePlugin: "Plugin",
      eventSourceExtension: "Extension",
      badgePermissionBubble: "Permission bubble",
      agentIntegrationInstalled: "Installed",
      agentIntegrationNotInstalled: "Not installed",
      agentIntegrationInstall: "Install",
      agentIntegrationUninstall: "Uninstall",
      agentIntegrationWorking: "Working...",
      agentIntegrationUninstallConfirm: "Uninstall this Clawd-managed integration? Only Clawd-managed hooks, plugins, or extensions will be removed.",
      agentIntegrationInstallSkipped: "No local installation was found for {agents}. Nothing changed.",
      agentListSeparator: ", ",
      agentInstallHintTitle: "Connect detected agents",
      agentInstallHintDesc: "Detected local signals for {agents}. Connect them to Clawd by installing Clawd-managed hooks, plugins, or extensions.",
      agentInstallHintInstallRecommended: "Install recommended",
      agentInstallHintDismiss: "Not now",
      agentInstanceSection: "Instances",
      agentInstanceScanWsl: "Scan WSL",
      agentInstanceScanWslDesc: "Re-scan WSL distros for agent installations",
      agentInstanceScanning: "Scanning...",
      agentInstancePair: "Pair",
      agentInstancePairing: "Pairing...",
      agentInstancePaired: "Paired successfully",
      agentInstanceUnpair: "Unpair",
      agentInstanceUnpairing: "Unpairing...",
      agentInstanceUnpaired: "Unpaired",
      agentInstanceDeployedBadge: "Hooks deployed",
      agentInstancePairedNoConnectivity: "Paired, but this distro cannot reach Clawd — WSL NAT networking does not share localhost. Set networkingMode=mirrored in .wslconfig and restart WSL.",
      agentCleanupHintTitle: "Review missing local agents",
      agentCleanupHintDesc: "Clawd is connected to {agents}, but no matching local installation was detected. Remove the Clawd-managed integration to stop startup sync and event entry for those agents.",
      agentCleanupHintRemove: "Remove integrations",
      agentCleanupHintDismiss: "Keep for now",
      rowAgentPermissions: "Show pop-up bubbles",
      rowAgentPermissionsDesc: "Turn off to let this agent handle prompts in its own terminal instead of showing a Clawd bubble.",
      rowAgentSubagentPermissions: "Subagent permission bubbles",
      rowAgentSubagentPermissionsDesc: "Turn off to stop bubbling permission requests from Task subagents; they fall back to the terminal prompt.",
      rowCodexPermissionMode: "Codex permission mode",
      rowCodexPermissionModeDesc: "Native keeps Codex AutoReview and terminal prompts in charge. Intercept shows Clawd Allow/Deny bubbles.",
      codexPermissionModeNative: "Native",
      codexPermissionModeIntercept: "Intercept",
      rowCodexNativeNotificationSound: "Native notification sound",
      rowCodexNativeNotificationSoundDesc: "When off, Codex Native permission prompts still show the notification animation without the prompt sound. Completion sound still plays.",
      agentCodexHookNeedsAttention: "Needs attention",
      codexHookHealthReasonDisabled: "Codex hooks are turned off in config ([features].hooks=false), so Codex never runs the approval hook. Enable them, or run Doctor → Fix.",
      codexHookHealthReasonNeedsReview: "Clawd's Codex hooks are registered but need approval in Codex — run /hooks in Codex, or use Doctor → Fix.",
      codexHookHealthReasonInactive: "Clawd's Codex hook isn't active, so approval prompts won't appear. Reinstall the integration or run Doctor → Fix.",
      rowCodexHookHealthNotify: "Warn when the Codex hook is inactive",
      rowCodexHookHealthNotifyDesc: "On launch, show a one-time tray notification if Codex's official approval hook is disabled or needs review. Shown once per issue, not every launch.",
      rowAgentIdleAlerts: "Wait-for-input alerts",
      rowAgentIdleAlertsDesc: "Bell animation + sound triggered by this agent's Notification hook (e.g. Claude Code fires one after ~60s idle). Permission bubbles are unaffected.",
      rowLanguage: "Language",
      rowLanguageDesc: "Interface language for menus and bubbles.",
      rowSound: "Sound effects",
      rowSoundEnabled: "Enable sound effects",
      rowSoundDesc: "Play a chime when Clawd finishes a task or asks for input.",
      rowVolume: "Volume",
      rowVolumeDesc: "Adjust sound effect volume. Disabled when sound effects are off.",
      rowLowPowerIdleMode: "Low power idle",
      rowLowPowerIdleModeDesc: "Pause idle SVG animation after Clawd has been still for a few seconds; activity resumes animation immediately.",
      rowKeepAwakeWhileWorking: "Block sleep while working",
      rowKeepAwakeWhileWorkingDesc: "Prevent the computer from sleeping while an agent task is in progress; sleep is allowed again once tasks finish.",
      rowFlashTaskbarOnComplete: "Flash tray icon on complete",
      rowFlashTaskbarOnCompleteDesc: "Flash the system tray icon when an AI task completes, so you notice even when working in another window.",
      rowFlash: "Flash tray icon",
      rowFlashDesc: "Configure system tray icon flashing on task completion.",
      rowFlashInterval: "Flash interval",
      rowFlashIntervalDesc: "How fast the tray icon toggles between normal and highlight.",
      rowFlashDuration: "Flash duration",
      rowFlashDurationDesc: "How long the flashing lasts. Set to 0 to flash until manually dismissed.",
      unitMilliseconds: "ms",
      valueAlways: "Always",
      rowSessionHud: "Session HUD",
      rowSessionHudDesc: "Show active session status below the pet.",
      rowSessionHudMaster: "Enable",
      sessionHudSummaryEnabled: "HUD: {state}",
      sessionHudSummaryLabels: "Labels: {state}",
      sessionHudSummaryElapsed: "Time: {state}",
      sessionHudSummaryContextUsage: "Context: {state}",
      sessionHudSummaryCleanup: "Auto-clear: {state}",
      rowSessionHudStateLabels: "Show state labels",
      rowSessionHudStateLabelsDesc: "Display compact status chips for working, thinking, waiting, and other active sessions. Completed sessions still use the bell.",
      rowSessionHudElapsed: "Show HUD time",
      rowSessionHudElapsedDesc: "Display elapsed time in the Session HUD. Turning this off makes the HUD narrower.",
      rowSessionHudContextUsage: "Show context usage",
      rowSessionHudContextUsageDesc: "Display compact token usage when a session reports context-window data.",
      shortcutLabelPetReveal: "Click pet: Show Session HUD",
      shortcutLabelOpenDashboard: "Ctrl/Cmd + Click pet: Open Dashboard",
      sessionHudPinTooltip: "Pin HUD",
      sessionHudUnpinTooltip: "Unpin HUD",
      sessionHudFocusUnavailableTooltip: "Terminal focus unavailable",
      sessionHudRemoteFocusUnavailableTooltip: "Remote session - terminal focus unavailable",
      rowSessionHudCleanupDetached: "Auto-clear detached sessions",
      rowSessionHudCleanupDetachedDesc: "Hide ended sessions after their terminal closes, then remove them from the session list shortly after.",
      rowSessionCleanupGroup: "Session cleanup",
      rowSessionCleanupGroupDesc: "How long Clawd waits before clearing inactive sessions. Mainly affects remote SSH sessions where the terminal isn't visible — raise the limit for long-running remote work, or set Session timeout to 0 to never clear by time.",
      rowStaleSession: "Session timeout (idle)",
      rowStaleSessionDesc: "Remote SSH sessions are removed after this much idle time. Local sessions whose terminal is still open are not removed — they just dim to idle. Default 10 min. 0 = never remove by time. Must be at least as long as Working timeout.",
      rowStaleWorking: "Working timeout",
      rowStaleWorkingDesc: "If a session is stuck in working/thinking, mark it idle after this long. Default 5 min. Capped at the Session timeout when that is non-zero.",
      rowStaleDetached: "Cleanup delay after terminal closes",
      rowStaleDetachedDesc: "Only active when 'Auto-clear detached sessions' is on. After a session's terminal window closes, wait this many seconds before removing it from the HUD. Default 30 s.",
      unitMinutes: "min",
      unitSeconds: "s",
      valueDisabled: "Disabled",
      actionResetSessionCleanup: "Reset to defaults",
      rowSessionDashboard: "Sessions dashboard",
      rowSessionDashboardDesc: "Open a window listing every active Claude Code, Codex, and other agent session.",
      actionOpenDashboard: "Open",
      rowOpenAtLogin: "Open at login",
      rowOpenAtLoginDesc: "Start Clawd automatically when you log in.",
      rowManageClaudeHooks: "Manage Claude hooks automatically",
      rowManageClaudeHooksDesc: "Sync Claude hooks at startup and restore them if ~/.claude/settings.json gets overwritten.",
      rowManageClaudeHooksOffNote: "Turning this off stops future automatic management only. Existing Claude hooks stay installed unless you disconnect them.",
      actionDisconnectClaudeHooks: "Disconnect",
      claudeHooksDisableConfirmTitle: "Turn off automatic Claude hook management?",
      claudeHooksDisableConfirmDetail: "If you only turn management off, the Claude hooks already installed in ~/.claude/settings.json will stay in place. Start with Claude Code will be kept for later re-enable.",
      claudeHooksDisableConfirmDisconnect: "Disable and remove installed hooks",
      claudeHooksDisableConfirmDisableOnly: "Disable automatic management only",
      claudeHooksDisableConfirmKeep: "Keep automatic management",
      claudeHooksDisconnectConfirmTitle: "Disconnect Claude hooks?",
      claudeHooksDisconnectConfirmDetail: "This removes Clawd-managed Claude hooks from ~/.claude/settings.json and turns off automatic management. Start with Claude Code will be kept for later re-enable.",
      claudeHooksDisconnectConfirmAction: "Disconnect hooks",
      claudeHooksDisconnectConfirmKeep: "Keep connected",
      rowStartWithClaude: "Start with Claude Code",
      rowStartWithClaudeDesc: "Auto-launch Clawd whenever a Claude Code session starts.",
      rowStartWithClaudeDisabledDesc: "Requires automatic Claude hook management. Port changes and overwritten settings will not be reconciled while management is off.",
      rowHideBubbles: "Hide bubbles",
      rowHideBubblesDesc: "Hide permission, notification, and update bubbles across Clawd.",
      rowBubbleFollow: "Bubbles follow Clawd",
      rowBubbleFollowDesc: "Place permission and update bubbles next to the pet instead of the screen corner.",
      rowAutoApproveAll: "Auto-approve all requests",
      rowAutoApproveAllDesc: "DANGER: auto-approve every agent permission request — commands, file edits, deletions — with no prompt. Per-agent toggles and Do Not Disturb still apply.",
      menuAutoApproveAll: "Auto-approve all requests",
      autoApproveAllConfirmTitle: "Turn on auto-approve all requests?",
      autoApproveAllConfirmDetail: "Every permission request from every agent will be approved automatically, including running shell commands and deleting files. Clawd will not ask you first. Only enable this if you fully trust what your agents are doing.",
      autoApproveAllConfirmEnable: "Enable auto-approve all",
      autoApproveAllConfirmCancel: "Cancel",
      rowBubblePolicy: "Bubble display and auto close",
      rowBubblePolicyDesc: "Choose which bubble categories appear and how long passive bubbles stay visible.",
      bubblePermissionLabel: "Permission / interaction bubbles",
      bubblePermissionDesc: "Off sends approval prompts back to the agent terminal/TUI. Plan review and AskUserQuestion prompts stay visible to avoid agent hangs. Seconds is an optional auto-dismiss for stuck bubbles when the hook connection stays half-alive (0 = off).",
      bubbleNotificationLabel: "Notification bubbles",
      bubbleNotificationDesc: "Switch controls Codex / Kimi Code passive notices. Seconds sets the auto-close upper bound; later session states may dismiss it earlier. 0 hides them.",
      bubbleUpdateLabel: "Update bubbles",
      bubbleUpdateDesc: "Switch controls update checking, download, success, failure, and restart prompts. Seconds controls how long they stay visible.",
      bubbleUpdateWarning: "Hiding update bubbles is not recommended; you may miss errors or restart prompts.",
      bubbleSecondsPrefix: "Stay",
      bubbleSecondsUnit: "s",
      bubbleSecondsInvalid: "Seconds must be an integer from 0 to 3600",
      bubblePolicySummaryPermission: "Permission {state}",
      bubblePolicySummaryNotification: "Notify up to {seconds}s",
      bubblePolicySummaryUpdate: "Update {seconds}s",
      bubblePolicySummaryOn: "on",
      bubblePolicySummaryOff: "off",
      updateBubbleDisableConfirmTitle: "Hide update bubbles?",
      updateBubbleDisableConfirmDetail: "You may miss update failures, download-complete messages, and restart prompts. The update flow itself will still run, but Clawd will not show update bubbles.",
      updateBubbleDisableConfirmAction: "Hide update bubbles",
      updateBubbleDisableConfirmCancel: "Keep showing them",
      rowAllowEdgePinning: "Allow pinning to screen edges",
      rowAllowEdgePinningDesc: "Top/bottom decorations (sparkles, buildings, bubbles, …) may be clipped by the screen edge",
      rowDisableMiniMode: "Disable mini mode",
      rowDisableMiniModeDesc: "Prevent Clawd from entering mini mode from edge snap or the menu",
      rowFreeRoam: "Free roam",
      rowFreeRoamDesc: "Let Clawd wander freely around the desk when idle. Movement stops when you move the mouse.",
      rowKeepSizeAcrossDisplays: "Keep size across displays",
      rowKeepSizeAcrossDisplaysDesc: "Don't auto-resize when moving to another monitor. The slider still adjusts the pet on whichever display it's on.",
      rowFullscreenOverlay: "Float over fullscreen games",
      rowFullscreenOverlayDesc: "On Windows, keep the pet usable over fullscreen games — it stays on top, stays draggable, and won't steal the game's focus. Off restores the unoptimized default. A borderless-fullscreen game always keeps the pet on top; to remove it use Hide Pet. (Behavior over exclusive-fullscreen games may vary.)",
      rowSize: "Size",
      rowSizeDesc: "Drag to resize the pet.",
      rowTextScale: "Text size",
      rowTextScaleDesc: "Scale text in bubbles, HUD, dashboard, and settings on this display. Each display remembers its own value; the pet itself is not affected.",
      textScaleResetTitle: "Reset to 100%",
      rowSizeResetTitle: "Reset to default size",
      placeholderTitle: "Coming soon",
      placeholderDesc: "This panel will land in a future Clawd release. The plan lives in docs/plans/plan-settings-panel.md.",
      toastSaveFailed: "Couldn't save: ",
      toastAgentIntegrationInstalled: "Integration installed.",
      toastAgentIntegrationUninstalled: "Integration uninstalled.",
      toastAgentInstallHintInstalled: "Recommended integrations installed.",
      toastAgentInstallHintSkipped: "No local installation was found for {agents}. Nothing changed.",
      toastAgentInstallHintPartialSkipped: "{success} installed. Skipped {agents} because no local installation was found.",
      toastAgentInstallHintPartial: "{success} installed, {failed} failed: {message}",
      toastAgentCleanupHintRemoved: "Missing integrations removed.",
      toastAgentCleanupHintPartial: "{success} removed, {failed} failed: {message}",
      langEnglish: "English",
      langChinese: "简体中文",
      langTraditionalChinese: "繁體中文",
      langKorean: "한국어",
      langJapanese: "日本語",
      themeTitle: "Theme",
      themeSubtitle: "Pick a theme for Clawd. Cards show built-in + capability badges so you can see tracked/static/mini differences before switching.",
      themeEmpty: "No themes available.",
      themeBadgeBuiltin: "Built-in",
      themeBadgeCodexPet: "Codex Pet",
      themeBadgeActive: "Active",
      themeActionGroupCodexPets: "Codex Pets",
      themeActionGroupUserThemes: "User themes",
      themeRefreshImportedPets: "Refresh Codex Pets",
      themeImportPetZip: "Import Codex Pet package (.zip)",
      themeOpenCodexPetsFolder: "Open Codex Pet folder",
      themeImportUserThemeZip: "Import Clawd theme package (.zip)",
      themeImportUserThemeZipHint: "Clawd theme zip: root or one top-level folder must contain theme.json. Put SVG, GIF, APNG, PNG, WebP, JPG, or JPEG assets in assets/. Use Codex Pet import for Codex Pet packages.",
      themeOpenUserThemesFolder: "Open themes folder",
      themeRefreshThemes: "Refresh themes",
      themeGroupBuiltIn: "Built-in",
      themeGroupImportedCodexPets: "Imported Codex Pets",
      themeGroupUserThemes: "User Themes",
      themeUninstallPetLabel: "Uninstall",
      themeCapabilityTracked: "Tracked idle",
      themeCapabilityAnimated: "Animated idle",
      themeCapabilityStatic: "Static theme",
      themeCapabilityMini: "Mini",
      themeCapabilityDirectSleep: "Direct sleep",
      themeCapabilityFineMotion: "Fine motion",
      themeCapabilityNoReactions: "No reactions",
      themeActiveIndicator: "\u2713 Active",
      themeThumbMissing: "\u{1F3AD}",
      themeDeleteLabel: "Delete theme",
      themeVariantStripLabel: "Variants",
      toastThemeDeleted: "Theme deleted.",
      toastThemeDeleteFailed: "Couldn't delete theme: ",
      toastCodexPetsRefreshOk: (imported, updated, unchanged, removed, invalid, switched) =>
        `Codex Pets refreshed: ${imported} new, ${updated} updated, ${unchanged} unchanged, ${removed} removed${invalid ? `, ${invalid} invalid` : ""}${switched ? "; active theme reset to Clawd" : ""}.`,
      toastCodexPetsRefreshFailed: (message) => `Couldn't refresh Codex Pets: ${message}`,
      toastCodexPetsFolderFailed: "Couldn't open Codex Pet folder: ",
      toastUserThemesFolderFailed: "Couldn't open themes folder: ",
      toastUserThemeZipImportOk: (name) => `Imported theme "${name}".`,
      toastUserThemeZipImportFailed: (message) => `Couldn't import theme (.zip): ${message}`,
      toastCodexPetZipImportOk: (name) => `Imported "${name}" and switched to it.`,
      toastCodexPetZipImportFailed: (message) => `Couldn't import Codex Pet (.zip): ${message}`,
      toastCodexPetRemoveOk: (name, switched) => `Uninstalled "${name}"${switched ? " and switched back to Clawd" : ""}.`,
      toastCodexPetRemoveFailed: (message) => `Couldn't uninstall imported pet: ${message}`,
      animMapTitle: "Animation Map",
      animMapSubtitle: "Silence individual interrupt animations. Events still fire — Clawd just skips the visual and sound for the selected states.",
      animMapSemanticsNote: "Disable = no visual + no sound. Permission bubbles, sessions, and terminal focus still work.",
      animMapResetAll: "Reset all",
      animMapAttentionLabel: "Task complete (happy)",
      animMapAttentionDesc: "The happy bounce when the agent finishes a turn (Stop).",
      animMapErrorLabel: "Error flash",
      animMapErrorDesc: "The shake animation when a tool call fails.",
      animMapSweepingLabel: "Context sweep",
      animMapSweepingDesc: "The broom animation during PreCompact / context clearing.",
      animMapNotificationLabel: "Notification",
      animMapNotificationDesc: "The bell animation for permission requests and elicitations.",
      animMapCarryingLabel: "Worktree carry",
      animMapCarryingDesc: "The carrying animation when a worktree is created.",
      toastAnimMapResetOk: "Animation and sound overrides cleared.",
      animOverridesTitle: "Animation & Sound",
      animOverridesSubtitle: "Swap per-card animation files, adjust fade / return timing, and replace the theme's sound effects.",
      animOverridesLoading: "Loading animation and sound overrides…",
      animOverridesCurrentTheme: "Current theme",
      animOverridesReplacementConfig: "Animation override settings",
      animOverridesOpenThemeTab: "Open Theme tab",
      animOverridesOpenAssets: "Open assets folder",
      animOverridesResetAll: "Restore theme defaults",
      animOverridesExport: "Export config…",
      animOverridesImport: "Import config…",
      toastAnimOverridesExportOk: (count, path) =>
        `Exported overrides for ${count} theme${count === 1 ? "" : "s"} → ${path}`,
      toastAnimOverridesImportOk: (count) =>
        `Imported overrides for ${count} theme${count === 1 ? "" : "s"}.`,
      toastAnimOverridesExportEmpty: "No overrides to export yet.",
      toastAnimOverridesExportFailed: (message) => `Export failed: ${message}`,
      toastAnimOverridesImportFailed: (message) => `Import failed: ${message}`,
      animOverridesChangeFile: "Change file",
      animOverridesPreview: "Preview once",
      animOverridesReset: "Reset slot",
      animOverridesFade: "Fade",
      animOverridesFadeIn: "Fade in on enter",
      animOverridesFadeOut: "Fade out on exit",
      animOverridesSaveFade: "Save fade",
      animOverridesDuration: "Auto-return",
      animOverridesSaveDuration: "Save timing",
      animOverridesContinuousHint: "Continuous state: no auto-return editor here.",
      animOverridesAssetCycle: "Asset cycle",
      animOverridesSuggestedTiming: "Suggested timing",
      animOverridesTimingEstimated: "estimated",
      animOverridesTimingFallback: "theme default",
      animOverridesTimingUnavailable: "unavailable",
      animOverridesDisplayHintWarning: "displayHintMap can override this slot at runtime.",
      animOverridesFallbackHint: "This slot currently falls back to {state}.",
      animOverridesOverriddenTooltip: "Modified from default",
      animOverridesUseOwnFile: "Use own file",
      animOverridesDurationIdle: "Pool hold",
      animOverridesSectionIdle: "Idle",
      animOverridesSectionWork: "Work",
      animOverridesSectionInterrupts: "Interrupts",
      animOverridesSectionSleep: "Sleep",
      animOverridesSectionMini: "Mini Mode",
      animOverridesSectionReactions: "Reactions",
      animOverridesSectionIdleTracked: "Cursor-follow idle",
      animOverridesSectionIdleAnimated: "Idle random pool",
      animOverridesSectionIdleStatic: "Single static idle",
      animOverridesSectionSleepFull: "Full sleep sequence",
      animOverridesSectionSleepDirect: "Direct sleep only",
      animReactionDrag: "Drag (held)",
      animReactionClickLeft: "Poke (left)",
      animReactionClickRight: "Poke (right)",
      animReactionAnnoyed: "Annoyed (rapid poke)",
      animReactionDouble: "Double-tap",
      animOverridesWideHitboxToggle: "Wide hitbox",
      animOverridesWideHitboxDesc: "Use a wider click zone for this frame. Helpful when the visual reaches beyond the default pet silhouette.",
      animOverridesWideHitboxResetToTheme: "Reset to theme default",
      animOverridesAspectWarning: "This asset's aspect ratio differs from the original by {pct}% — the hitbox and positioning may need manual tuning.",
      animOverridesExpandRow: "Expand",
      animOverridesModalTitle: "Choose an asset file",
      animOverridesModalSubtitle: "Add files to the current theme assets folder, then refresh the list here.",
      animOverridesModalEmpty: "No supported assets found in this theme yet.",
      animOverridesModalSelected: "Selected file",
      animOverridesModalUse: "Use this file",
      animOverridesModalCancel: "Cancel",
      animOverridesRefresh: "Refresh list",
      animOverridesSubtabAnimations: "Animations",
      animOverridesSubtabSounds: "Sounds",
      animOverridesSubtabMap: "On / off",
      soundOverridesSectionTitle: "Sound effects",
      soundOverridesSectionSubtitle: "Replace the theme's audio files. Picked files are copied into a per-theme overrides folder.",
      soundOverridesLabelComplete: "Task complete (complete)",
      soundOverridesLabelConfirm: "Permission prompt (confirm)",
      soundOverridesPreview: "Play",
      soundOverridesChangeFile: "Choose file…",
      soundOverridesReset: "Reset to default",
      soundOverridesOpenDir: "Open overrides folder",
      soundOverridesOverriddenTooltip: "Overridden",
      soundOverridesEmpty: "This theme declares no sound effects.",
      toastSoundOverrideSetOk: (name, file) => `Replaced '${name}' with ${file}`,
      toastSoundOverrideResetOk: (name) => `Reset '${name}' to theme default`,
      toastSoundOverrideFailed: (message) => `Sound override failed: ${message}`,
      aboutTitle: "About Clawd",
      aboutSubtitle: "The pixel crab that watches your AI coding sessions.",
      aboutTagline: "A desktop companion for your AI coding journey.",
      aboutVersionLabel: "Version",
      aboutCheckForUpdates: "Check for Updates",
      aboutUpdateAvailableHint: "Update available: v{version}",
      autoUpdateCheck: "Automatically check for updates",
      autoUpdateCheckDescription: "Quietly checks GitHub every 12 hours. Only notifies you when a new version is available.",
      aboutRepositoryLabel: "Repository",
      aboutLicenseLabel: "License",
      aboutAuthorLabel: "Made by",
      aboutMaintainersLabel: "Maintainers",
      aboutContributorsLabel: "Contributors",
      aboutFooter: "Clawd is open source. Built with care by the community.",
      aboutCleanupButton: "Remove Clawd integrations…",
      aboutCleanupConfirm: "Remove Clawd hooks/plugins from local agents and mark all agent integrations as uninstalled and disabled in Clawd? This does not delete agent apps or user configs.",
      aboutCleanupRunning: "Removing integrations…",
      aboutCleanupSuccess: "Removed {removed} item(s) from {affected} integration(s). Failed: {failed}.",
      aboutCleanupFailed: "Integration cleanup failed",
      aboutCleanupKiroNote: "Kiro clawd.json is kept; only hook entries were removed.",
      mobileTitle: "Mobile / PWA",
      mobileDesc: "Connect your phone to monitor sessions. Read-only LAN preview — no write or approval operations.",
      mobileToggle: "Enable mobile preview",
      mobileToggleDesc: "Start a LAN WebSocket bridge so a phone on the same network can view session state in real time.",
      mobileDisabled: "Enable the toggle above to start the LAN bridge.",
      mobileLoading: "Loading connection info…",
      mobileError: "Unable to load connection info.",
      mobileRegenerate: "Regenerate Token",
      mobileRegenerateConfirm: "Regenerate token? All connected devices will be disconnected and will need to re-pair.",
      mobileReset: "Reset Mobile Access",
      mobileResetConfirm: "Reset mobile access? All connected devices will be disconnected and a new token will be generated.",
      aboutEasterEggToast: "\u{1F980} Coding shouldn't feel lonely. — Ruller_Lulu / \u9e7f\u9e7f",
      aboutOpenExternalFailed: "Couldn't open the link in your browser.",
    },
    zh: {
      settingsTitle: "设置",
      settingsSubtitle: "配置 Clawd 在桌面上的行为。",
      settingsTutorialReplayLink: "重新打开新手指南",
      settingsTutorialReplayFailed: "无法打开新手指南",
      sidebarGeneral: "通用",
      sidebarAgents: "Agent 管理",
      sidebarTheme: "主题",
      sidebarAnimOverrides: "动画 / 音效",
      sidebarShortcuts: "快捷键",
      sidebarAbout: "关于",
      sidebarRemoteSsh: "远程 SSH",
      sidebarMobile: "移动端",
      sidebarTelegramApproval: "远程审批",
      remoteApprovalTitle: "远程审批",
      remoteApprovalSubtitle: "把本地权限请求路由到远程渠道。密钥不写入 prefs，本地权限气泡仍然保留作为兜底。目前支持 Telegram 和飞书。",
      telegramApprovalChannelName: "Telegram",
      telegramApprovalCardKind_incomplete: "未完成配置",
      telegramApprovalCardKind_ready: "可启用",
      telegramApprovalCardKind_starting: "启动中…",
      telegramApprovalCardKind_running: "运行中",
      telegramApprovalCardKind_failed: "失败",
      telegramApprovalCardMissingBoth: "请在下方保存 bot token 和接收 user id 后继续。",
      telegramApprovalCardMissingToken: "请在下方保存 bot token 后继续。",
      telegramApprovalCardMissingRecipient: "请在下方保存接收 user id 后继续。",
      telegramApprovalCardReadyToEnable: "Token 和接收人都已保存，在第 3 步打开开关即可启动。",
      telegramApprovalCardStarting: "正在连接 Telegram 审批 sidecar…",
      telegramApprovalCardRunning: "Telegram 审批运行中，审批请求会发到你的 bot。",
      telegramApprovalCardFailed: "Sidecar 报错，看下方信息或重启。",
      telegramMigrationLoading: "正在加载迁移状态…",
      telegramMigrationTitle: "Telegram 机器人传输方式(v0.9.0 内测)",
      telegramMigrationStateLabel: "状态",
      telegramMigrationRuntimeFailedSuffix: "(运行状态：失败 — {reason})",
      telegramMigrationRuntimeUnknown: "未知",
      telegramMigrationOwnerLabel: "当前使用",
      telegramMigrationRunning: "运行中",
      telegramMigrationStopped: "已停止",
      telegramMigrationPolling: "轮询中",
      telegramMigrationImportFailed: "原生配置导入失败：{error}",
      telegramMigrationRetryImport: "重试导入",
      telegramMigrationConfigureBelow: "先在下方配置 Telegram 机器人，再选择运行方式：",
      telegramMigrationTestAndSwitch: "测试原生机器人并切换",
      telegramMigrationEnableLegacy: "启用旧版 Sidecar",
      telegramMigrationLegacyNotRunning: "旧版 Sidecar 未在运行。",
      telegramMigrationRetryLegacy: "重试旧版 Sidecar",
      telegramMigrationNativeAvailable: "原生 Telegram 机器人可用，测试后即可切换——旧版将保留作为兜底。",
      telegramMigrationTestAndSwitchShort: "测试原生并切换",
      telegramMigrationLegacyActive: "旧版 Sidecar 正在使用中。",
      telegramMigrationDisableApproval: "关闭 Telegram 审批",
      telegramMigrationWaitingTap: "等待你在 Telegram 上点击…(60秒超时)",
      telegramMigrationNativeActive: "原生 Telegram 已启用，旧版文件保留以便回滚。",
      telegramMigrationRollbackToLegacy: "回滚到旧版",
      telegramMigrationDeleteLegacyToken: "删除旧版 Token 文件",
      telegramMigrationSwitchingToLegacy: "正在切换回旧版审批…",
      telegramMigrationWorking: "处理中…",
      telegramMigrationTokenAlreadyRemoved: "Telegram Token 文件已经被删除过了。",
      telegramMigrationTokenDeleted: "Telegram Token 文件已删除。",
      telegramMigrationTokenDeleteFailed: "Telegram Token 文件删除失败",
      telegramMigrationErrorToast: "Telegram 迁移：{code}",
      telegramApprovalStep1Title: "1. Bot Token",
      telegramApprovalBotToken: "Bot token",
      telegramApprovalBotTokenHintHtml: "去 [@BotFather](https://t.me/botfather) 用 /newbot 创建机器人，把 token 贴到这里。Token 存到 userData env 文件，不会写入 clawd-prefs.json。",
      telegramApprovalBotTokenPlaceholder: "粘贴新的 bot token",
      telegramApprovalSaveToken: "保存 token",
      telegramApprovalSaving: "保存中…",
      telegramApprovalTokenEmpty: "请先粘贴 Telegram bot token。",
      telegramApprovalTokenSaved: "Token 已保存。",
      telegramApprovalTokenSaveFailed: "无法保存 Telegram bot token。",
      telegramApprovalTokenConfiguredLabel: "Token 已配置",
      telegramApprovalTokenConfiguredNoMask: "（已存）",
      telegramApprovalTokenConfiguredDesc: "Bot token 已经保存到磁盘。如果你换了机器人，可以替换。",
      telegramApprovalReplaceToken: "更换 token",
      telegramApprovalCancel: "取消",
      telegramApprovalTokenCurrent: "当前：{masked}",
      telegramApprovalTokenReplaceHintHtml: "贴新 token 会覆盖原来的。需要新 token 就再去 [@BotFather](https://t.me/botfather) 申请。",
      telegramApprovalStep2Title: "2. 接收人",
      telegramApprovalRecipientLabel: "你的 Telegram 用户 ID",
      telegramApprovalRecipientHintHtml: "去 Telegram 找 [@userinfobot](https://t.me/userinfobot) 私聊 /start 拿到你的数字 ID。Clawd 会用它既作为唯一可审批者，也作为接收审批卡的 chat。记得先去你自己的机器人发一条 /start 激活私聊。",
      telegramApprovalRecipientPlaceholder: "例如：123456789",
      telegramApprovalRecipientEmpty: "请先填你的 Telegram 用户 ID。",
      telegramApprovalRecipientInvalid: "Telegram 用户 ID 必须是至少 5 位的数字。",
      telegramApprovalSaveRecipient: "保存接收人",
      telegramApprovalConfigSaved: "Telegram 审批配置已保存。",
      telegramApprovalStep3Title: "3. 启用与测试",
      telegramApprovalToggle: "启用 Telegram 审批",
      telegramApprovalToggleDesc: "配置完成后，可操作的本地权限气泡会同时发送一张 Telegram 审批卡片。",
      telegramApprovalCompletionOutput: "完成提醒输出",
      telegramApprovalCompletionOutputDesc: "控制 Telegram 完成提醒是否附带 assistant 文本。完整回答可能包含代码、文件内容或 assistant 写出的敏感信息。",
      telegramApprovalCompletionOutput_off: "关闭",
      telegramApprovalCompletionOutput_full: "完整回答",
      telegramApprovalCompletionOutputFullConfirm: "完整回答会把 assistant 最后一条文本发送到 Telegram。如果 assistant 写出了代码、文件内容或敏感信息，也可能一并发送。继续吗？",
      telegramApprovalDirectSend: "Direct Send（仅粘贴）",
      telegramApprovalDirectSendDesc: "回复 Clawd 完成通知时，聚焦对应的本地终端并粘贴单行文本。不会按 Enter。",
      telegramApprovalTest: "测试消息",
      telegramApprovalTestDesc: "发送一张独立测试审批卡片，不绑定任何 agent 权限请求。",
      telegramApprovalSendTest: "发送测试",
      telegramApprovalTesting: "等待中…",
      telegramApprovalTestSent: "Telegram 测试完成。",
      telegramApprovalTestFailed: "Telegram 测试失败。",
      telegramApprovalPrereqLabel: "请先完成第 1 步和第 2 步",
      telegramApprovalPrereqDesc: "还差：",
      telegramApprovalPrereqMissingToken: "bot token",
      telegramApprovalPrereqMissingRecipient: "接收人 user id",
      feishuApprovalChannelName: "飞书",
      feishuApprovalCardMissingBoth: "请先在下方保存应用凭证和审批人 user id。",
      feishuApprovalCardMissingSecrets: "请先在下方保存飞书应用凭证。",
      feishuApprovalCardMissingApprover: "请先在下方保存审批人 user id。",
      feishuApprovalCardReadyToEnable: "应用凭证和审批人都已保存，在第 3 步打开开关即可启动。",
      feishuApprovalCardStarting: "正在连接飞书长连接…",
      feishuApprovalCardRunning: "飞书审批运行中，审批卡片会发到你的机器人。",
      feishuApprovalCardFailed: "飞书审批报错，看下方信息或重启。",
      feishuApprovalStep1Title: "1. 应用凭证",
      feishuApprovalSecretsLabel: "飞书应用凭证",
      feishuApprovalSecretsHintHtml: "填写企业自建应用里的 App ID 和 App Secret。Verification Token 和 Encrypt Key 只有在飞书事件配置里开启时才需要填。",
      feishuApprovalSecretsReplaceHintHtml: "填入新值会覆盖对应字段；留空的字段会保留当前值。",
      feishuApprovalAppIdPlaceholder: "App ID，例如 cli_xxx",
      feishuApprovalAppSecretPlaceholder: "App Secret",
      feishuApprovalVerificationTokenPlaceholder: "Verification Token（可选）",
      feishuApprovalEncryptKeyPlaceholder: "Encrypt Key（可选）",
      feishuApprovalSaveSecrets: "保存密钥",
      feishuApprovalSaving: "保存中…",
      feishuApprovalSecretsRequired: "请先填写 App ID 和 App Secret。",
      feishuApprovalSecretsEmpty: "请至少填写一个要更新的飞书密钥。",
      feishuApprovalSecretsSaved: "飞书密钥已保存。",
      feishuApprovalSecretsSaveFailed: "无法保存飞书密钥。",
      feishuApprovalSecretsConfiguredLabel: "密钥已配置",
      feishuApprovalSecretsConfiguredNoMask: "（已存）",
      feishuApprovalSecretsConfiguredDesc: "飞书应用凭证已保存到磁盘，不会写入 clawd-prefs.json。",
      feishuApprovalSecretsCurrent: "当前 App ID：{masked}",
      feishuApprovalReplaceSecrets: "更换密钥",
      feishuApprovalStep2Title: "2. 审批人",
      feishuApprovalApproverLabel: "飞书审批人 user id",
      feishuApprovalApproverHintHtml: "这里要和飞书卡片回调里的用户 ID 类型一致。普通机器人给用户发卡片，通常选择 open_id。",
      feishuApprovalApproverPlaceholder: "例如 ou_xxx",
      feishuApprovalApproverEmpty: "请先填写飞书审批人 user id。",
      feishuApprovalSaveApprover: "保存审批人",
      feishuApprovalConfigSaved: "飞书审批配置已保存。",
      feishuApprovalStep3Title: "3. 启用与测试",
      feishuApprovalToggle: "启用飞书审批",
      feishuApprovalToggleDesc: "配置完成后，可操作的本地权限气泡会同时发送一张飞书审批卡片。",
      feishuApprovalConnectionTimeout: "长连接超时",
      feishuApprovalConnectionTimeoutDesc: "启动或重连等待超过这个时间后显示失败；底层长连接仍会继续自动重连。",
      feishuApprovalConnectionTimeoutOption: "{seconds} 秒",
      feishuApprovalTest: "测试卡片",
      feishuApprovalTestDesc: "发送一张独立飞书审批卡片，不绑定任何 agent 权限请求。",
      feishuApprovalSendTest: "发送测试",
      feishuApprovalTesting: "等待中…",
      feishuApprovalTestSent: "飞书测试完成。",
      feishuApprovalTestFailed: "飞书测试失败。",
      feishuApprovalPrereqLabel: "请先完成第 1 步和第 2 步",
      feishuApprovalPrereqDesc: "还差：",
      feishuApprovalPrereqMissingSecrets: "应用凭证",
      feishuApprovalPrereqMissingApprover: "审批人 user id",
      remoteSshTitle: "远程 SSH",
      remoteSshSubtitle: "管理一键 SSH 隧道，让远程 AI 编码会话像本地一样工作。Clawd 不存任何密码或私钥口令——依赖你已配置的 ssh-agent / SSH 密钥。",
      remoteSshSectionProfiles: "配置",
      remoteSshAddProfile: "+ 新增配置",
      remoteSshEmpty: "还没有配置。点击\"新增配置\"添加你的第一个远程 SSH 隧道。",
      remoteSshConnect: "连接",
      remoteSshDisconnect: "断开",
      remoteSshAuthenticate: "首次认证",
      remoteSshAuthenticateHint: "在系统终端打开一次以完成 host key 确认或加载 SSH 密钥。",
      remoteSshOpenTerminal: "打开终端",
      remoteSshDeploy: "部署 / 修复 Hook",
      remoteSshDeploying: "部署中…",
      remoteSshDeploySuccess: "Hook 文件部署完成。",
      remoteSshDeployDriftWarning: "部署期间配置被改动，已部署的是旧配置 — 请重新部署",
      remoteSshEdit: "编辑",
      remoteSshDelete: "删除",
      remoteSshDeleteConfirm: "确定删除配置\"{label}\"？此操作不可撤销。",
      remoteSshAddTitle: "新增远程 SSH 配置",
      remoteSshEditTitle: "编辑远程 SSH 配置",
      remoteSshSave: "保存",
      remoteSshCancel: "取消",
      remoteSshAddSuccess: "配置已添加。",
      remoteSshUpdateSuccess: "配置已更新。",
      remoteSshFieldLabel: "标签",
      remoteSshFieldHost: "主机",
      remoteSshFieldPort: "SSH 端口（默认 22）",
      remoteSshFieldIdentityFile: "私钥文件（可选）",
      remoteSshFieldIdentityFileHint: "私钥的绝对路径。留空则使用 ssh-agent 或 ~/.ssh/config。",
      remoteSshFieldRemoteForwardPort: "远端转发端口",
      remoteSshFieldHostPrefix: "主机前缀（可选）",
      remoteSshFieldHostPrefixHint: "在 Sessions 菜单显示的简短名称。避免控制字符、引号、反斜杠、$、` 和 !。",
      remoteSshFieldAutoStartCodex: "连接时自动启动 Codex 兜底监控",
      remoteSshFieldConnectOnLaunch: "Clawd 启动时自动连接",
      remoteSshStatus_idle: "未连接",
      remoteSshStatus_connecting: "连接中…",
      remoteSshStatus_connected: "已连接",
      remoteSshStatus_reconnecting: "重连中…",
      remoteSshStatus_failed: "失败",
      remoteSshStep_verify: "校验本地文件",
      remoteSshStep_mkdir: "创建远端 hook 目录",
      "remoteSshStep_check-node": "检查远端 Node",
      remoteSshStep_scp: "复制 hook 文件",
      "remoteSshStep_host-prefix": "写入主机前缀",
      "remoteSshStep_install-claude": "注册 Claude hooks",
      "remoteSshStep_install-codex": "注册 Codex hooks",
      "remoteSshStep_install-copilot": "注册 Copilot hooks",
      "remoteSshStep_remote-shell": "探测远端 shell",
      remoteSshErrAuthDenied: "认证失败。点击\"首次认证\"在终端完成 host key 确认或加载密钥。",
      remoteSshErrHostKey: "Host key 尚未确认。点击\"首次认证\"在终端确认指纹。",
      remoteSshErrForwardFailed: "远端端口不可用。请换一个远端转发端口（23333-23337）。",
      remoteSshErrBadConfig: "ssh 拒绝了配置。请检查配置项。",
      remoteSshErrIdentityMissing: "无法读取私钥文件。请检查路径和权限。",
      remoteSshErrDns: "无法解析主机名。",
      remoteSshErrNetTimeout: "网络超时，稍后将重试。",
      remoteSshErrNetUnreachable: "网络不可达，稍后将重试。",
      remoteSshErrBrokenPipe: "连接断开，稍后将重连。",
      remoteSshErrSpawnFailed: "无法启动 ssh 进程。",
      remoteSshErrSshMissing: "未检测到 OpenSSH 客户端。Windows：设置 → 应用 → 可选功能 → 添加 OpenSSH 客户端。",
      remoteSshErrWindowsOpenSshLegacy: "当前 Windows OpenSSH 版本过旧，Remote SSH 健康检查不可靠。请升级到 OpenSSH 8.x 或更新版本。",
      remoteSshErrWindowsCmdShell: "远端默认 shell 是 Windows cmd.exe，Remote SSH 依赖 POSIX shell（mkdir -p / ~ 展开 / sh -c）。请在远端把 OpenSSH 的 DefaultShell 改成 Git Bash 或 WSL bash 后再点 Deploy。PowerShell 一条命令：New-ItemProperty -Path 'HKLM:\\SOFTWARE\\OpenSSH' -Name DefaultShell -Value 'C:\\Program Files\\Git\\bin\\bash.exe' -PropertyType String -Force",
      remoteSshErrNoLocalPort: "本地 Clawd 服务尚未启动。",
      remoteSshErrUnknownStrikes: "连续多次未识别错误，请检查配置和日志。",
      remoteSshProbeLocalUnhealthy: "隧道已建立但本地 Clawd 服务异常。",
      remoteSshProbeUnresponsive: "隧道已建立但 Clawd 无响应，请确认 Clawd 在运行。",
      remoteSshProbePortHijack: "远端端口被另一个 HTTP 服务占用。请换一个远端转发端口。",
      remoteSshProbeHttpTimeout: "远端 HTTP 响应超时，稍后将重试。",
      remoteSshProbeNodeNotExec: "远端 node 二进制不可执行。请检查权限。",
      remoteSshProbeNodeMissing: "远端找不到 Node。请先 Deploy 或在远端安装 Node。",
      remoteSshProbeSignal: "Probe 进程被中断，稍后将重试。",
      remoteSshHooksLabel: "Hook 状态：",
      remoteSshHooksNever: "从未部署",
      remoteSshHooksDeployedJustNow: "刚刚部署",
      remoteSshHooksDeployedAgoMin: "{n} 分钟前部署",
      remoteSshHooksDeployedAgoHr: "{n} 小时前部署",
      remoteSshHooksDeployedAgoDay: "{n} 天前部署",
      remoteSshConnectWarnNoDeploy: "Hook 文件还没部署。Connect 只建 SSH 隧道，不部署 hook——必须点 Deploy / Repair Hooks 之后 Clawd 才会响应远端会话。",
      codexHookReviewReminder: "下一步：打开 Codex 命令行，输入 /hooks 走一遍 review 激活新 hook（Codex 要求 review 后才会触发）。",
      doctorSidebarLabel: "Doctor",
      doctorTitle: "Clawd Doctor",
      doctorStatusUnknown: "未知",
      doctorStatusPass: "正常",
      doctorStatusWarning: "警告",
      doctorStatusCritical: "严重",
      doctorStatusInfo: "提示",
      doctorIssueCount: "{count} 个问题",
      doctorLastCheckedAt: (time) => `检查 ${time}`,
      doctorCheckLocalServer: "本地服务",
      doctorCheckAgentIntegrations: "Agent 集成",
      doctorAgentSummaryOk: (count) => `${count} 正常`,
      doctorAgentSummaryAttention: (count) => `${count} 需处理`,
      doctorAgentSummaryNeedsAttention: "需处理",
      doctorAgentSummarySkipped: (count) => `${count} 跳过`,
      doctorAgentSummaryNoneActive: "未启用任何 agent 集成",
      doctorCheckPermissionBubbles: "权限气泡",
      doctorCheckTheme: "主题",
      doctorCheckUnknown: "检查项",
      doctorPrivacy: "隐私说明：诊断报告只在本机生成，Clawd 不会上传数据。复制前会脱敏用户路径和密钥。",
      doctorCopyReport: "复制诊断报告",
      doctorRerun: "重新检查",
      doctorClose: "关闭",
      doctorCopied: "诊断报告已复制",
      doctorCopyFailed: "无法复制诊断报告。",
      doctorRunFailed: "无法运行诊断检查。",
      doctorFix: "修复",
      doctorFixing: "修复中",
      doctorFixApplied: "修复已完成。",
      doctorFixFailed: "无法修复该问题。",
      doctorFixConfirmCodex: "Clawd 会把 Codex 配置里的 [features].hooks 设为 true。继续吗？",
      doctorFixConfirmCodexTitle: "启用 Codex hooks？",
      doctorFixConfirmCodexDetail: "这次修复会修改你的 Codex 配置，把 [features].hooks 设为 true。只有你在这里确认后，Clawd 才会做这个改动。",
      doctorFixConfirmCodexAction: "启用并修复",
      doctorFixConfirmCancel: "取消",
      doctorRestartButton: "重启 Clawd",
      doctorRestarting: "重启中",
      doctorRestartConfirmTitle: "重启 Clawd？",
      doctorRestartConfirmDetail: "Clawd 会关闭并重新启动。AI coding agent 正在进行的请求会被中断。重启过程中 Doctor 窗口也会一起关闭。",
      doctorRestartConfirmAction: "立即重启",
      doctorNoResult: "暂无诊断结果。",
      doctorConnectionTitle: "连接测试",
      doctorConnectionInstruction: "在任意 AI coding agent 里发送一条消息，然后倒计时结束后回来查看结果。",
      doctorConnectionIdle: "未测试",
      doctorConnectionTesting: "等待 {seconds} 秒",
      doctorConnectionHttpVerified: "HTTP 链路已验证",
      doctorConnectionHttpDropped: "HTTP 可达，但事件被丢弃",
      doctorConnectionHttpBlocked: "HTTP 被拦截",
      doctorConnectionNoActivity: "没有活动",
      doctorConnectionNoActivityHint: "测试期间没有 agent 的 hook 流量到达 Clawd。如果你还没启用 agent，请先在设置里启用或安装一个，然后从该 agent 发一条消息，再重新测试。",
      doctorConnectionError: "连接测试失败",
      doctorTestConnection: "测试连接",
      doctorOpenLog: "打开调试日志",
      doctorOpenLogOpened: "已打开调试日志",
      doctorOpenLogFailed: "无法打开调试日志。",
      shortcutsTitle: "快捷键",
      shortcutsSubtitle: "为桌宠显隐和权限操作设置全局快捷键。留空即可解绑。",
      shortcutLabelBubbleNextOption: "气泡：下一项",
      shortcutLabelBubblePrevOption: "气泡：上一项",
      shortcutLabelBubbleToggleOption: "气泡：勾选/取消",
      shortcutLabelBubbleSubmit: "气泡：提交答案",
      shortcutBuiltinKeyTooltip: "内置键，暂不可更改",
      shortcutRecordButton: "修改",
      shortcutClearButton: "清空",
      shortcutResetButton: "恢复默认",
      shortcutResetAllButton: "全部恢复默认",
      shortcutRecordingHint: "按下组合键（Esc）",
      shortcutUnassigned: "— 未绑定 —",
      shortcutErrorConflict: "与 {other} 冲突，请换一个组合键。",
      shortcutErrorSystemConflict: "该组合键已被系统或其他应用占用。",
      shortcutErrorReserved: "该组合键属于保留快捷键，请换一个。",
      shortcutErrorInvalid: "暂不支持这个组合键。",
      shortcutErrorNeedsModifier: "快捷键至少要包含一个修饰键。",
      shortcutErrorRegistrationFailed: "已保存，但当前因系统冲突未生效。请重新绑定或稍后再试。",
      shortcutLabelTogglePet: "显示/隐藏桌宠",
      shortcutLabelPermissionAllow: "权限：允许",
      shortcutLabelPermissionDeny: "权限：拒绝",
      shortcutToastSaved: "快捷键已更新",
      sidebarSoon: "待推出",
      sectionAppearance: "外观",
      sectionSession: "会话管理",
      sectionAlerts: "提醒与反馈",
      sectionBehavior: "行为与位置",
      sectionSystemStartup: "系统与启动",
      sectionPermissions: "权限",
      hardwareBuddyTitle: "Hardware Buddy",
      hardwareBuddyDesc: "通过单独安装的 Clawstick runtime 连接已配对 BLE 桌面设备。权限回复默认关闭，必须显式开启且链路安全才会启用。",
      hardwareBuddyEnable: "启用 Hardware Buddy",
      hardwareBuddyEnableDesc: "启动 BLE sidecar，默认只发送会话状态快照。",
      hardwareBuddyAddress: "BLE 地址",
      hardwareBuddyAddressDesc: "可选的固定设备地址。留空则按设备名前缀扫描。",
      hardwareBuddyNamePrefix: "设备名前缀",
      hardwareBuddyNamePrefixDesc: "扫描广播名称以该文本开头的设备。",
      hardwareBuddyPermissions: "允许硬件权限回复",
      hardwareBuddyPermissionsDesc: "需要此开关和安全配对链路同时成立，设备上才会显示允许/拒绝提示。",
      hardwareBuddyQuickCommands: "启用 Quick Commands",
      hardwareBuddyQuickCommandsDesc: "显示本地 preset 按钮，只创建由 adapter 处理的 quick_command 事件；Clawd 不粘贴文本，也不运行 shell。",
      hardwareBuddyQuickCommandPresets: "Quick Command presets",
      hardwareBuddyQuickCommandPresetsDesc: "点击 preset 会为 active-session adapter 写入一个已校验事件。",
      hardwareBuddyQuickCommandsDisabled: "打开 Quick Commands 后才能使用 preset 按钮。",
      hardwareBuddyQuickCommandsLoading: "正在加载 presets...",
      hardwareBuddyQuickCommandsUnavailable: "Quick Commands 当前不可用。",
      hardwareBuddyQuickCommandSent: "Quick Command 已入队。",
      hardwareBuddyQuickCommandFailed: "Quick Command 失败：",
      hardwareBuddyRepliesOn: "权限回复开启",
      hardwareBuddyRepliesOff: "权限回复关闭",
      hardwareBuddyRepliesBlocked: "权限回复待连接",
      hardwareBuddyTest: "测试审批",
      hardwareBuddyTestButton: "发送测试",
      hardwareBuddyTestWaiting: "等待中...",
      hardwareBuddyTestDesc: "向已配对设备发送一条无害的审批测试。",
      hardwareBuddyTestPending: "正在等待设备按钮回复。",
      hardwareBuddyTestOk: "设备已回复：{decision}",
      hardwareBuddyTestError: "测试审批失败。",
      hardwareBuddyTestErr_disabled: "Hardware Buddy 尚未启用。",
      hardwareBuddyTestErr_permissions_off: "硬件权限回复尚未开启。",
      hardwareBuddyTestErr_not_secure: "Hardware Buddy 尚未通过安全配对链路连接。",
      hardwareBuddyTestErr_timeout: "设备未在测试超时前回复。",
      hardwareBuddyTestErr_no_decision: "Hardware Buddy 测试没有收到明确决定。",
      hardwareBuddyTestErr_internal_error: "Clawd 内部执行 Hardware Buddy 测试失败。",
      hardwareBuddyTestDisabled: "先启用 Hardware Buddy，才能测试审批。",
      hardwareBuddyTestRepliesOff: "先打开硬件权限回复，才能测试审批。",
      hardwareBuddyTestNeedsSecure: "先连接到安全配对链路，才能测试审批。",
      hardwareBuddyTestToastOk: "Hardware Buddy 测试回复已收到。",
      hardwareBuddyTestToastError: "Hardware Buddy 测试失败：",
      hardwareBuddyStatus: "连接状态",
      hardwareBuddyStatus_off: "关闭",
      hardwareBuddyStatus_idle: "空闲",
      hardwareBuddyStatus_searching: "搜索中",
      hardwareBuddyStatus_connected: "已连接",
      hardwareBuddyStatus_secure: "安全",
      hardwareBuddyStatus_error: "需处理",
      hardwareBuddyStatusOffDetail: "Hardware Buddy 已关闭。",
      hardwareBuddyStatusError: "需处理",
      hardwareBuddyStatusErrorDetail: "请检查 Hardware Buddy sidecar 状态。",
      hardwareBuddyStatusConnectedDetail: "{device} 已连接，安全链路{secure}",
      hardwareBuddyStatusAddressDetail: "正在寻找 {address}。",
      hardwareBuddyStatusPrefixDetail: "正在扫描名称以 {prefix} 开头的设备。",
      hardwareBuddySecureOn: "开启",
      hardwareBuddySecureOff: "关闭",
      hardwareBuddyErr_missing_bleak: "需安装 bleak",
      hardwareBuddyErr_python_missing: "缺少 Python",
      hardwareBuddyErr_auth_required: "需要配对",
      hardwareBuddyErr_device_not_found: "未找到设备",
      hardwareBuddyErr_bad_config: "配置错误",
      hardwareBuddyErr_core_missing: "需安装 Clawstick",
      hardwareBuddyErr_sidecar_exited: "Sidecar 已退出",
      hardwareBuddyErr_sidecar_error: "Sidecar 错误",
      collapsibleExpand: "展开分组",
      collapsibleCollapse: "收起分组",
      agentsTitle: "Agent 管理",
      agentsSubtitle: "按 agent 类型开关追踪。关闭后会停掉日志监视器、在 HTTP 入口丢弃 hook 事件——不会再驱动桌宠、不弹权限气泡、不记会话。",
      agentsEmpty: "没有已注册的 agent。",
      agentSectionConnected: "已接入",
      agentSectionRecommended: "建议安装",
      agentSectionUnavailable: "未检测到",
      eventSourceHook: "Hook",
      eventSourceLogPoll: "日志轮询",
      eventSourcePlugin: "插件",
      eventSourceExtension: "扩展",
      badgePermissionBubble: "权限气泡",
      agentIntegrationInstalled: "已安装",
      agentIntegrationNotInstalled: "未安装",
      agentIntegrationInstall: "安装",
      agentIntegrationUninstall: "卸载",
      agentIntegrationWorking: "处理中...",
      agentIntegrationUninstallConfirm: "要卸载这个由 Clawd 管理的集成吗？只会移除 Clawd 管理的 hooks、插件或扩展。",
      agentIntegrationInstallSkipped: "没有检测到本机安装了 {agents}，所以没有写入集成。",
      agentListSeparator: "、",
      agentInstallHintTitle: "连接检测到的 Agent",
      agentInstallHintDesc: "检测到本机可能有 {agents}。安装由 Clawd 管理的 hooks、插件或扩展后，它们就能驱动桌宠。",
      agentInstallHintInstallRecommended: "安装推荐项",
      agentInstallHintDismiss: "暂不处理",
      agentInstanceSection: "实例",
      agentInstanceScanWsl: "扫描 WSL",
      agentInstanceScanWslDesc: "重新扫描 WSL 发行版中的 Agent 安装",
      agentInstanceScanning: "扫描中...",
      agentInstancePair: "配对",
      agentInstancePairing: "配对中...",
      agentInstancePaired: "配对成功",
      agentInstanceUnpair: "取消配对",
      agentInstanceUnpairing: "取消配对中...",
      agentInstanceUnpaired: "已取消配对",
      agentInstanceDeployedBadge: "已部署 hooks",
      agentInstancePairedNoConnectivity: "已配对，但该发行版无法访问 Clawd——WSL 的 NAT 网络不互通 localhost。请在 .wslconfig 中设置 networkingMode=mirrored 并重启 WSL。",
      agentCleanupHintTitle: "检查缺失的本机 Agent",
      agentCleanupHintDesc: "Clawd 当前连接了 {agents}，但本机没有检测到对应安装。移除 Clawd 管理的集成后，会同时关闭这些 agent 的启动同步和事件入口。",
      agentCleanupHintRemove: "移除集成",
      agentCleanupHintDismiss: "先保留",
      rowAgentPermissions: "显示弹窗",
      rowAgentPermissionsDesc: "关闭后让该 agent 在自己的终端里处理提示，不再弹 Clawd 气泡。",
      rowAgentSubagentPermissions: "子 agent 权限弹窗",
      rowAgentSubagentPermissionsDesc: "关闭后，Task 子 agent 发起的权限请求不再弹 Clawd 气泡，改回终端处理。",
      rowCodexPermissionMode: "Codex 权限模式",
      rowCodexPermissionModeDesc: "Native 保持 Codex AutoReview 和终端原生提示接管；Intercept 显示 Clawd 允许/拒绝气泡。",
      codexPermissionModeNative: "Native",
      codexPermissionModeIntercept: "Intercept",
      rowCodexNativeNotificationSound: "Native 通知音",
      rowCodexNativeNotificationSoundDesc: "关闭后，Codex Native 权限提示仍显示通知动画，但不播放提示音；完成音效仍会播放。",
      agentCodexHookNeedsAttention: "需要注意",
      codexHookHealthReasonDisabled: "Codex hooks 在配置里被关闭（[features].hooks=false），Codex 不会运行审批 hook。请启用，或用 Doctor → Fix 修复。",
      codexHookHealthReasonNeedsReview: "Clawd 的 Codex hooks 已注册但需在 Codex 里确认——在 Codex 运行 /hooks，或用 Doctor → Fix。",
      codexHookHealthReasonInactive: "Clawd 的 Codex hook 未生效，审批提示不会弹出。请重装集成或用 Doctor → Fix 修复。",
      rowCodexHookHealthNotify: "Codex hook 失效时提醒",
      rowCodexHookHealthNotifyDesc: "启动时若 Codex 官方审批 hook 被禁用或需检查，弹一次性托盘通知。每种问题只提醒一次，不会每次启动都弹。",
      rowAgentIdleAlerts: "等待输入提醒",
      rowAgentIdleAlertsDesc: "当前 agent 的 Notification hook 触发的铃铛动画和音效（例如 Claude Code 闲置约 60 秒时发送）。权限气泡不受影响。",
      rowLanguage: "语言",
      rowLanguageDesc: "菜单和气泡的界面语言。",
      rowSound: "音效",
      rowSoundEnabled: "启用音效",
      rowSoundDesc: "Clawd 完成任务或需要输入时播放提示音。",
      rowVolume: "音量",
      rowVolumeDesc: "调整音效音量。关闭音效时不可用。",
      rowLowPowerIdleMode: "低功耗 idle",
      rowLowPowerIdleModeDesc: "Clawd 静止几秒后暂停 idle SVG 动画；有活动时会立即恢复动画。",
      rowKeepAwakeWhileWorking: "工作时阻止休眠",
      rowKeepAwakeWhileWorkingDesc: "有任务进行中时阻止电脑休眠；任务完成后恢复允许休眠。",
      rowFlashTaskbarOnComplete: "任务完成时闪烁系统托盘图标",
      rowFlashTaskbarOnCompleteDesc: "AI 完成任务时系统托盘图标闪烁提醒，即使在其他窗口工作也能注意到。",
      rowFlash: "系统托盘闪烁",
      rowFlashDesc: "设置任务完成后系统托盘图标的闪烁行为。",
      rowFlashInterval: "闪烁间隔",
      rowFlashIntervalDesc: "图标在正常和高亮之间切换的速度。",
      rowFlashDuration: "闪烁时长",
      rowFlashDurationDesc: "闪烁持续多久。设为 0 表示一直闪烁，直到手动点击停止。",
      unitMilliseconds: "毫秒",
      valueAlways: "一直闪烁",
      rowSessionHud: "会话 HUD",
      rowSessionHudDesc: "在桌宠下方显示活跃会话状态。",
      rowSessionHudMaster: "启用",
      sessionHudSummaryEnabled: "HUD: {state}",
      sessionHudSummaryLabels: "标签: {state}",
      sessionHudSummaryElapsed: "时间: {state}",
      sessionHudSummaryContextUsage: "上下文: {state}",
      sessionHudSummaryCleanup: "自动清理: {state}",
      rowSessionHudStateLabels: "显示状态标签",
      rowSessionHudStateLabelsDesc: "为工作中、思考中、等待中等活跃会话显示紧凑状态标签。已完成会话仍显示铃铛。",
      rowSessionHudElapsed: "显示 HUD 时间",
      rowSessionHudElapsedDesc: "在会话 HUD 中显示经过时间。关闭后 HUD 会变窄。",
      rowSessionHudContextUsage: "显示上下文用量",
      rowSessionHudContextUsageDesc: "当会话上报上下文窗口数据时，显示紧凑的 token 用量。",
      shortcutLabelPetReveal: "单击桌宠：显示会话 HUD",
      shortcutLabelOpenDashboard: "Ctrl / ⌘ + 单击桌宠：打开会话面板",
      sessionHudPinTooltip: "固定 HUD",
      sessionHudUnpinTooltip: "取消固定",
      sessionHudFocusUnavailableTooltip: "无法跳转终端",
      sessionHudRemoteFocusUnavailableTooltip: "远程会话无法跳转终端",
      rowSessionHudCleanupDetached: "自动清理已分离会话",
      rowSessionHudCleanupDetachedDesc: "会话结束且终端关闭后，先从 HUD 隐藏，再在稍后从会话列表移除。",
      rowSessionCleanupGroup: "会话清理",
      rowSessionCleanupGroupDesc: "Clawd 等待多久才清理不活跃会话。主要影响远程 SSH 会话（看不到终端窗口）——远程长任务可调大；设为 0 则永远不按时间清理。",
      rowStaleSession: "会话超时（空闲）",
      rowStaleSessionDesc: "远程 SSH 会话空闲达到该时长后移除。本地会话只要终端还开着就不会被移除，只会变灰为 idle。默认 10 分钟。0 = 永不按时间移除。必须不短于“工作超时”。",
      rowStaleWorking: "工作超时",
      rowStaleWorkingDesc: "会话长时间卡在 working/thinking 状态时，到达该时长后改为 idle。默认 5 分钟。当“会话超时”非 0 时，最大不会超过它。",
      rowStaleDetached: "终端关闭后清理延迟",
      rowStaleDetachedDesc: "仅当“自动清理已分离会话”开启时生效。会话的终端窗口关闭后，等待这么多秒再从 HUD 移除。默认 30 秒。",
      unitMinutes: "分钟",
      unitSeconds: "秒",
      valueDisabled: "关闭",
      actionResetSessionCleanup: "恢复默认",
      rowSessionDashboard: "会话面板",
      rowSessionDashboardDesc: "打开窗口查看所有 Claude Code、Codex 等 agent 的活跃会话。",
      actionOpenDashboard: "打开",
      rowOpenAtLogin: "开机自启",
      rowOpenAtLoginDesc: "登录系统时自动启动 Clawd。",
      rowManageClaudeHooks: "自动管理 Claude hooks",
      rowManageClaudeHooksDesc: "启动时同步 Claude hooks，并在 `~/.claude/settings.json` 被其他工具覆盖后自动补回。",
      rowManageClaudeHooksOffNote: "关闭后只会停止后续自动管理。当前已安装的 Claude hooks 会保留，除非你主动断开。",
      actionDisconnectClaudeHooks: "断开",
      claudeHooksDisableConfirmTitle: "关闭 Claude hooks 自动管理？",
      claudeHooksDisableConfirmDetail: "如果只关闭自动管理，`~/.claude/settings.json` 里当前已安装的 Claude hooks 会继续保留。`随 Claude Code 启动` 的偏好也会保留，方便以后重新启用。",
      claudeHooksDisableConfirmDisconnect: "关闭并移除当前 hooks",
      claudeHooksDisableConfirmDisableOnly: "只关闭自动管理",
      claudeHooksDisableConfirmKeep: "继续保留自动管理",
      claudeHooksDisconnectConfirmTitle: "断开 Claude hooks？",
      claudeHooksDisconnectConfirmDetail: "这会从 `~/.claude/settings.json` 移除 Clawd 管理的 Claude hooks，并关闭自动管理。`随 Claude Code 启动` 的偏好会保留，方便以后重新启用。",
      claudeHooksDisconnectConfirmAction: "断开 hooks",
      claudeHooksDisconnectConfirmKeep: "继续保留",
      rowStartWithClaude: "随 Claude Code 启动",
      rowStartWithClaudeDesc: "Claude Code 会话开始时自动拉起 Clawd。",
      rowStartWithClaudeDisabledDesc: "需要先开启 Claude hooks 自动管理。关闭期间，端口变化和外部覆盖都不会被自动修补。",
      rowHideBubbles: "隐藏气泡",
      rowHideBubblesDesc: "隐藏 Clawd 的权限、通知和更新气泡。",
      rowBubbleFollow: "气泡跟随 Clawd",
      rowBubbleFollowDesc: "把权限气泡和更新气泡放在桌宠旁边，而不是屏幕角落。",
      rowAutoApproveAll: "自动放行所有请求",
      rowAutoApproveAllDesc: "危险：自动通过所有 agent 的权限请求——执行命令、修改文件、删除文件——不再询问。各 agent 的开关和「请勿打扰」仍然生效。",
      menuAutoApproveAll: "自动放行所有请求",
      autoApproveAllConfirmTitle: "开启自动放行所有请求？",
      autoApproveAllConfirmDetail: "所有 agent 的每一个权限请求都会被自动通过，包括执行 shell 命令和删除文件。Clawd 不会再先问你。只有在你完全信任 agent 的行为时才开启。",
      autoApproveAllConfirmEnable: "开启自动放行",
      autoApproveAllConfirmCancel: "取消",
      rowBubblePolicy: "气泡显示与自动关闭",
      rowBubblePolicyDesc: "分别控制各类气泡是否显示，以及被动气泡停留多久。",
      bubblePermissionLabel: "权限 / 交互气泡",
      bubblePermissionDesc: "关闭后审批提示会回到 agent 终端 / TUI 处理。Plan review 和 AskUserQuestion 仍会显示，避免 agent 卡住。秒数是可选的超时自动关闭，用于 hook 连接挂死但等不到决定的场景（0 = 不自动关闭）。",
      bubbleNotificationLabel: "通知气泡",
      bubbleNotificationDesc: "开关控制 Codex / Kimi Code 被动通知。秒数表示自动关闭上限；后续状态可能提前关闭。0 表示隐藏。",
      bubbleUpdateLabel: "更新气泡",
      bubbleUpdateDesc: "开关控制检查更新、下载、成功、失败和重启提示。秒数控制它们停留多久。",
      bubbleUpdateWarning: "不建议隐藏更新气泡，否则可能错过失败原因或重启提示。",
      bubbleSecondsPrefix: "停留",
      bubbleSecondsUnit: "秒",
      bubbleSecondsInvalid: "秒数必须是 0 到 3600 的整数",
      bubblePolicySummaryPermission: "权限{state}",
      bubblePolicySummaryNotification: "通知最多 {seconds} 秒",
      bubblePolicySummaryUpdate: "更新 {seconds} 秒",
      bubblePolicySummaryOn: "开",
      bubblePolicySummaryOff: "关",
      updateBubbleDisableConfirmTitle: "隐藏更新气泡？",
      updateBubbleDisableConfirmDetail: "隐藏后可能错过更新失败原因、下载完成提示和重启安装提示。更新流程本身仍会继续，但 Clawd 不再显示更新气泡。",
      updateBubbleDisableConfirmAction: "隐藏更新气泡",
      updateBubbleDisableConfirmCancel: "继续显示",
      rowAllowEdgePinning: "允许贴靠屏幕边缘",
      rowAllowEdgePinningDesc: "开启后桌宠贴屏幕边缘时，顶/底装饰（花花、建筑、气泡等）可能被裁掉。",
      rowDisableMiniMode: "关闭极简模式",
      rowDisableMiniModeDesc: "开启后桌宠不会进入极简模式，也不会播放边缘吸附的迷你动画。",
      rowFreeRoam: "自由漫步",
      rowFreeRoamDesc: "空闲时让桌宠在桌面上自由漫步，移动鼠标即停止。",
      rowKeepSizeAcrossDisplays: "跨显示器保持大小",
      rowKeepSizeAcrossDisplaysDesc: "移动到另一台显示器时不自动重新缩放。滑块仍按当前显示器的比例调整桌宠。",
      rowFullscreenOverlay: "浮在全屏游戏上方",
      rowFullscreenOverlayDesc: "在 Windows 上让桌宠在全屏游戏上方依然好用——保持在上方、可拖动，且不会抢走游戏焦点。关闭则回到未优化的原样。无边框全屏游戏下桌宠始终浮在上方；想彻底移除请用「隐藏桌宠」。（独占全屏游戏下的表现可能不一致。）",
      rowSize: "大小",
      rowSizeDesc: "拖动调整桌宠大小。",
      rowTextScale: "文字大小",
      rowTextScaleDesc: "缩放本屏幕上气泡、会话 HUD、Dashboard 和设置页的文字。每块屏幕分别记忆；不影响桌宠本体。",
      textScaleResetTitle: "重置为 100%",
      rowSizeResetTitle: "重置为默认大小",
      placeholderTitle: "即将推出",
      placeholderDesc: "此面板将在 Clawd 后续版本中加入，规划见 docs/plans/plan-settings-panel.md。",
      toastSaveFailed: "保存失败：",
      toastAgentIntegrationInstalled: "集成已安装。",
      toastAgentIntegrationUninstalled: "集成已卸载。",
      toastAgentInstallHintInstalled: "推荐集成已安装。",
      toastAgentInstallHintSkipped: "没有检测到本机安装了 {agents}，所以没有写入集成。",
      toastAgentInstallHintPartialSkipped: "已安装 {success} 个；{agents} 未检测到本机安装，已跳过。",
      toastAgentInstallHintPartial: "已安装 {success} 个，失败 {failed} 个：{message}",
      toastAgentCleanupHintRemoved: "缺失的集成已移除。",
      toastAgentCleanupHintPartial: "已移除 {success} 个，失败 {failed} 个：{message}",
      langEnglish: "English",
      langChinese: "简体中文",
      langTraditionalChinese: "繁體中文",
      langKorean: "한국어",
      langJapanese: "日本語",
      themeTitle: "主题",
      themeSubtitle: "为 Clawd 选择一个主题。卡片会显示内建和能力角标，切换前就能看出 tracked / static / mini 等差异。",
      themeEmpty: "没有可用的主题。",
      themeBadgeBuiltin: "内建",
      themeBadgeCodexPet: "Codex Pet",
      themeBadgeActive: "当前",
      themeActionGroupCodexPets: "Codex Pets",
      themeActionGroupUserThemes: "用户主题",
      themeRefreshImportedPets: "刷新 Codex Pets",
      themeImportPetZip: "导入 Codex Pet 包（.zip）",
      themeOpenCodexPetsFolder: "打开 Codex Pet 文件夹",
      themeImportUserThemeZip: "导入 Clawd 主题包（.zip）",
      themeImportUserThemeZipHint: "Clawd 主题 zip：根目录或一个顶层文件夹内必须包含 theme.json；素材放在 assets/，可使用 SVG、GIF、APNG、PNG、WebP、JPG、JPEG。Codex Pet 包请用上方入口。",
      themeOpenUserThemesFolder: "打开主题文件夹",
      themeRefreshThemes: "刷新主题",
      themeGroupBuiltIn: "内建",
      themeGroupImportedCodexPets: "导入的 Codex Pets",
      themeGroupUserThemes: "用户主题",
      themeUninstallPetLabel: "卸载",
      themeCapabilityTracked: "跟随 idle",
      themeCapabilityAnimated: "动画 idle",
      themeCapabilityStatic: "静态主题",
      themeCapabilityMini: "Mini",
      themeCapabilityDirectSleep: "直睡",
      themeCapabilityFineMotion: "精细动效",
      themeCapabilityNoReactions: "无反应",
      themeActiveIndicator: "\u2713 当前",
      themeThumbMissing: "\u{1F3AD}",
      themeDeleteLabel: "删除主题",
      themeVariantStripLabel: "变体",
      toastThemeDeleted: "主题已删除。",
      toastThemeDeleteFailed: "删除主题失败：",
      toastCodexPetsRefreshOk: (imported, updated, unchanged, removed, invalid, switched) =>
        `Codex Pet 已刷新：新增 ${imported}，更新 ${updated}，未变 ${unchanged}，移除 ${removed}${invalid ? `，无效 ${invalid}` : ""}${switched ? "；当前主题已回退到 Clawd" : ""}。`,
      toastCodexPetsRefreshFailed: (message) => `刷新 Codex Pet 失败：${message}`,
      toastCodexPetsFolderFailed: "打开 Codex Pet 文件夹失败：",
      toastUserThemesFolderFailed: "打开主题文件夹失败：",
      toastUserThemeZipImportOk: (name) => `已导入主题 "${name}"。`,
      toastUserThemeZipImportFailed: (message) => `导入主题（.zip）失败：${message}`,
      toastCodexPetZipImportOk: (name) => `已导入 "${name}" 并切换使用。`,
      toastCodexPetZipImportFailed: (message) => `导入 Codex Pet（.zip）失败：${message}`,
      toastCodexPetRemoveOk: (name, switched) => `已卸载 "${name}"${switched ? "，并切回 Clawd" : ""}。`,
      toastCodexPetRemoveFailed: (message) => `卸载导入宠物失败：${message}`,
      animMapTitle: "动画映射",
      animMapSubtitle: "关掉不想看的打扰动画。事件照样会触发——Clawd 只是不再播放对应的动画和音效。",
      animMapSemanticsNote: "关闭 = 不播动画 + 不响音效。权限气泡、会话记录、终端聚焦照常工作。",
      animMapResetAll: "全部恢复",
      animMapAttentionLabel: "完成提示（happy）",
      animMapAttentionDesc: "Agent 结束一轮时的开心跳动（Stop）。",
      animMapErrorLabel: "错误提示",
      animMapErrorDesc: "工具调用失败时的抖动动画。",
      animMapSweepingLabel: "上下文清理",
      animMapSweepingDesc: "PreCompact / 清空上下文时的扫把动画。",
      animMapNotificationLabel: "通知提示",
      animMapNotificationDesc: "权限请求、消息询问时的铃铛动画。",
      animMapCarryingLabel: "Worktree 搬运",
      animMapCarryingDesc: "创建 worktree 时的搬运动画。",
      toastAnimMapResetOk: "动画和音效覆盖已清空。",
      animOverridesTitle: "动画 / 音效",
      animOverridesSubtitle: "按卡片换动画文件、调整当前主题的淡入淡出与返回时机，以及替换主题音效。",
      animOverridesLoading: "正在加载动画和音效替换…",
      animOverridesCurrentTheme: "当前主题",
      animOverridesReplacementConfig: "动画覆盖设置",
      animOverridesOpenThemeTab: "打开主题页",
      animOverridesOpenAssets: "打开素材目录",
      animOverridesResetAll: "恢复主题默认",
      animOverridesExport: "导出配置…",
      animOverridesImport: "导入配置…",
      toastAnimOverridesExportOk: (count, path) => `已导出 ${count} 个主题的覆盖 → ${path}`,
      toastAnimOverridesImportOk: (count) => `已导入 ${count} 个主题的覆盖。`,
      toastAnimOverridesExportEmpty: "当前没有覆盖可导出。",
      toastAnimOverridesExportFailed: (message) => `导出失败：${message}`,
      toastAnimOverridesImportFailed: (message) => `导入失败：${message}`,
      animOverridesChangeFile: "换文件",
      animOverridesPreview: "预览一次",
      animOverridesReset: "恢复槽位",
      animOverridesFade: "Fade",
      animOverridesFadeIn: "进入时淡入",
      animOverridesFadeOut: "退出时淡出",
      animOverridesSaveFade: "保存 Fade",
      animOverridesDuration: "返回时长",
      animOverridesSaveDuration: "保存时长",
      animOverridesContinuousHint: "持续态不提供 auto-return 编辑。",
      animOverridesAssetCycle: "素材周期",
      animOverridesSuggestedTiming: "建议时长",
      animOverridesTimingEstimated: "估算",
      animOverridesTimingFallback: "主题默认值",
      animOverridesTimingUnavailable: "不可用",
      animOverridesDisplayHintWarning: "运行时可能被 displayHintMap 盖掉。",
      animOverridesFallbackHint: "这个槽位当前回退到 {state}。",
      animOverridesOverriddenTooltip: "已修改（非默认值）",
      animOverridesUseOwnFile: "使用独立素材",
      animOverridesDurationIdle: "驻留时长",
      animOverridesSectionIdle: "Idle",
      animOverridesSectionWork: "工作态",
      animOverridesSectionInterrupts: "打扰态",
      animOverridesSectionSleep: "睡眠",
      animOverridesSectionMini: "Mini Mode",
      animOverridesSectionReactions: "反应动画",
      animOverridesSectionIdleTracked: "跟随鼠标的 idle",
      animOverridesSectionIdleAnimated: "idle 随机池",
      animOverridesSectionIdleStatic: "单张静态 idle",
      animOverridesSectionSleepFull: "完整睡眠序列",
      animOverridesSectionSleepDirect: "直睡模式",
      animReactionDrag: "拖拽（按住）",
      animReactionClickLeft: "戳（左）",
      animReactionClickRight: "戳（右）",
      animReactionAnnoyed: "烦躁（连续戳）",
      animReactionDouble: "双击",
      animOverridesWideHitboxToggle: "宽点击区",
      animOverridesWideHitboxDesc: "给这一帧启用更宽的点击区。素材视觉延伸超出默认桌宠轮廓时有用。",
      animOverridesWideHitboxResetToTheme: "恢复主题默认",
      animOverridesAspectWarning: "此素材宽高比与原文件差了 {pct}%，点击区和位置可能需要手动校准。",
      animOverridesExpandRow: "展开",
      animOverridesModalTitle: "选择素材文件",
      animOverridesModalSubtitle: "把文件放进当前主题 assets 目录后，可在这里刷新列表重新选择。",
      animOverridesModalEmpty: "当前主题里还没有可用素材。",
      animOverridesModalSelected: "当前选中",
      animOverridesModalUse: "使用这个文件",
      animOverridesModalCancel: "取消",
      animOverridesRefresh: "刷新列表",
      animOverridesSubtabAnimations: "动画",
      animOverridesSubtabSounds: "声音",
      animOverridesSubtabMap: "开关",
      soundOverridesSectionTitle: "音效替换",
      soundOverridesSectionSubtitle: "替换当前主题的音效文件。所选文件会复制到主题独立的覆盖目录。",
      soundOverridesLabelComplete: "完成提示 (complete)",
      soundOverridesLabelConfirm: "权限提示 (confirm)",
      soundOverridesPreview: "试听",
      soundOverridesChangeFile: "选择文件…",
      soundOverridesReset: "恢复默认",
      soundOverridesOpenDir: "打开覆盖目录",
      soundOverridesOverriddenTooltip: "已替换",
      soundOverridesEmpty: "当前主题没有声明音效。",
      toastSoundOverrideSetOk: (name, file) => `已将「${name}」替换为 ${file}`,
      toastSoundOverrideResetOk: (name) => `已将「${name}」恢复为主题默认`,
      toastSoundOverrideFailed: (message) => `音效替换失败：${message}`,
      aboutTitle: "关于 Clawd",
      aboutSubtitle: "陪你写代码的像素螃蟹。",
      aboutTagline: "陪你 AI 编码的桌面伙伴。",
      aboutVersionLabel: "版本",
      aboutCheckForUpdates: "检查更新",
      aboutUpdateAvailableHint: "有新版本: v{version}",
      autoUpdateCheck: "自动检查更新",
      autoUpdateCheckDescription: "每 12 小时静默向 GitHub 查一次，发现新版本才通知你。",
      aboutRepositoryLabel: "代码仓库",
      aboutLicenseLabel: "开源协议",
      aboutAuthorLabel: "作者",
      aboutMaintainersLabel: "维护者",
      aboutContributorsLabel: "贡献者",
      aboutFooter: "Clawd 是开源项目 · 与社区一起打造。",
      aboutCleanupButton: "移除 Clawd 集成…",
      aboutCleanupConfirm: "要移除本机各 agent 里的 Clawd hooks / plugins，并在 Clawd 里把所有 agent 集成标记为未安装且禁用吗？不会删除 agent 应用或用户配置。",
      aboutCleanupRunning: "正在移除集成…",
      aboutCleanupSuccess: "已从 {affected} 个集成移除 {removed} 项，失败 {failed} 项。",
      aboutCleanupFailed: "集成清理失败",
      aboutCleanupKiroNote: "Kiro 的 clawd.json 已保留，只移除了 hook 条目。",
      mobileTitle: "移动端 / PWA",
      mobileDesc: "连接手机查看会话状态。只读局域网预览——无写入或审批操作。",
      mobileToggle: "启用移动端预览",
      mobileToggleDesc: "启动局域网 WebSocket 桥接，同一网络下的手机可实时查看会话状态。",
      mobileDisabled: "请先启用上方开关以启动局域网桥接。",
      mobileLoading: "加载连接信息…",
      mobileError: "无法加载连接信息。",
      mobileRegenerate: "重新生成令牌",
      mobileRegenerateConfirm: "确定重新生成令牌？所有已连接设备将断开，需要重新配对。",
      mobileReset: "重置移动端访问",
      mobileResetConfirm: "确定重置移动端访问？所有设备将断开并生成新令牌。",
      aboutEasterEggToast: "\u{1F980} Coding shouldn't feel lonely. — Ruller_Lulu / \u9e7f\u9e7f",
      aboutOpenExternalFailed: "无法在浏览器中打开链接。",
    },
    "zh-TW": {
      settingsTitle: "設定",
      settingsSubtitle: "設定 Clawd 在桌面上怎麼動作。",
      settingsTutorialReplayLink: "重新開啟新手指南",
      settingsTutorialReplayFailed: "無法開啟新手指南",
      sidebarGeneral: "一般",
      sidebarAgents: "Agent 管理",
      sidebarTheme: "主題",
      sidebarAnimOverrides: "動畫與音效",
      sidebarShortcuts: "快速鍵",
      sidebarAbout: "關於",
      sidebarRemoteSsh: "遠端 SSH",
      sidebarMobile: "行動端",
      sidebarTelegramApproval: "遠端核准",
      remoteApprovalTitle: "遠端核准",
      remoteApprovalSubtitle: "將本機權限請求路由到遠端通道。Secrets 不會寫入 prefs，本機權限泡泡仍保留為備援。目前支援 Telegram 與 Feishu。",
      telegramApprovalChannelName: "Telegram",
      telegramApprovalCardKind_incomplete: "未完成設定",
      telegramApprovalCardKind_ready: "可啟用",
      telegramApprovalCardKind_starting: "啟動中…",
      telegramApprovalCardKind_running: "執行中",
      telegramApprovalCardKind_failed: "失敗",
      telegramApprovalCardMissingBoth: "請在下方儲存 bot token 與接收 user id 後繼續。",
      telegramApprovalCardMissingToken: "請在下方儲存 bot token 後繼續。",
      telegramApprovalCardMissingRecipient: "請在下方儲存接收 user id 後繼續。",
      telegramApprovalCardReadyToEnable: "Token 與接收人皆已儲存，在第 3 步打開開關即可啟動。",
      telegramApprovalCardStarting: "正在連線到 Telegram 核准 sidecar…",
      telegramApprovalCardRunning: "Telegram 核准運作中，核准請求會送到你的 bot。",
      telegramApprovalCardFailed: "Sidecar 回報失敗，請看下方訊息或重啟。",
      telegramMigrationLoading: "正在載入遷移狀態…",
      telegramMigrationTitle: "Telegram 機器人傳輸方式(v0.9.0 內測)",
      telegramMigrationStateLabel: "狀態",
      telegramMigrationRuntimeFailedSuffix: "(執行狀態：失敗 — {reason})",
      telegramMigrationRuntimeUnknown: "未知",
      telegramMigrationOwnerLabel: "目前使用",
      telegramMigrationRunning: "執行中",
      telegramMigrationStopped: "已停止",
      telegramMigrationPolling: "輪詢中",
      telegramMigrationImportFailed: "原生設定匯入失敗：{error}",
      telegramMigrationRetryImport: "重試匯入",
      telegramMigrationConfigureBelow: "先在下方設定 Telegram 機器人，再選擇執行方式：",
      telegramMigrationTestAndSwitch: "測試原生機器人並切換",
      telegramMigrationEnableLegacy: "啟用舊版 Sidecar",
      telegramMigrationLegacyNotRunning: "舊版 Sidecar 未在執行。",
      telegramMigrationRetryLegacy: "重試舊版 Sidecar",
      telegramMigrationNativeAvailable: "原生 Telegram 機器人可用，測試後即可切換——舊版將保留作為備援。",
      telegramMigrationTestAndSwitchShort: "測試原生並切換",
      telegramMigrationLegacyActive: "舊版 Sidecar 正在使用中。",
      telegramMigrationDisableApproval: "關閉 Telegram 審批",
      telegramMigrationWaitingTap: "等待你在 Telegram 上點擊…(60秒逾時)",
      telegramMigrationNativeActive: "原生 Telegram 已啟用，舊版檔案保留以便回滾。",
      telegramMigrationRollbackToLegacy: "回滾到舊版",
      telegramMigrationDeleteLegacyToken: "刪除舊版 Token 檔案",
      telegramMigrationSwitchingToLegacy: "正在切換回舊版審批…",
      telegramMigrationWorking: "處理中…",
      telegramMigrationTokenAlreadyRemoved: "Telegram Token 檔案已經被刪除過了。",
      telegramMigrationTokenDeleted: "Telegram Token 檔案已刪除。",
      telegramMigrationTokenDeleteFailed: "Telegram Token 檔案刪除失敗",
      telegramMigrationErrorToast: "Telegram 遷移：{code}",
      telegramApprovalStep1Title: "1. Bot Token",
      telegramApprovalBotToken: "Bot token",
      telegramApprovalBotTokenHintHtml: "到 [@BotFather](https://t.me/botfather) 用 /newbot 建立機器人，把 token 貼在這裡。Token 儲存在 userData env 檔，不會寫入 clawd-prefs.json。",
      telegramApprovalBotTokenPlaceholder: "貼上新的 bot token",
      telegramApprovalSaveToken: "儲存 token",
      telegramApprovalSaving: "儲存中…",
      telegramApprovalTokenEmpty: "請先貼上 Telegram bot token。",
      telegramApprovalTokenSaved: "Token 已儲存。",
      telegramApprovalTokenSaveFailed: "無法儲存 Telegram bot token。",
      telegramApprovalTokenConfiguredLabel: "Token 已設定",
      telegramApprovalTokenConfiguredNoMask: "（已儲存）",
      telegramApprovalTokenConfiguredDesc: "Bot token 已經存到磁碟。若你換了機器人，可以替換。",
      telegramApprovalReplaceToken: "更換 token",
      telegramApprovalCancel: "取消",
      telegramApprovalTokenCurrent: "目前：{masked}",
      telegramApprovalTokenReplaceHintHtml: "貼新 token 會覆蓋原本的。需要新 token 就再到 [@BotFather](https://t.me/botfather) 申請。",
      telegramApprovalStep2Title: "2. 接收人",
      telegramApprovalRecipientLabel: "你的 Telegram 使用者 ID",
      telegramApprovalRecipientHintHtml: "到 Telegram 找 [@userinfobot](https://t.me/userinfobot) 私訊 /start 取得你的數字 ID。Clawd 會用它同時做為唯一核准者與接收核准卡片的 chat。記得先到你自己的機器人發一次 /start 啟動私訊。",
      telegramApprovalRecipientPlaceholder: "例如：123456789",
      telegramApprovalRecipientEmpty: "請先填你的 Telegram 使用者 ID。",
      telegramApprovalRecipientInvalid: "Telegram 使用者 ID 必須是至少 5 位的數字。",
      telegramApprovalSaveRecipient: "儲存接收人",
      telegramApprovalConfigSaved: "Telegram 核准設定已儲存。",
      telegramApprovalStep3Title: "3. 啟用與測試",
      telegramApprovalToggle: "啟用 Telegram 核准",
      telegramApprovalToggleDesc: "設定完成後，可操作的本機權限泡泡也會送出 Telegram 核准卡片。",
      telegramApprovalCompletionOutput: "完成提醒輸出",
      telegramApprovalCompletionOutputDesc: "控制 Telegram 完成提醒是否附帶 assistant 文字。完整回答可能包含程式碼、檔案內容或 assistant 寫出的敏感資訊。",
      telegramApprovalCompletionOutput_off: "關閉",
      telegramApprovalCompletionOutput_full: "完整回答",
      telegramApprovalCompletionOutputFullConfirm: "完整回答會把 assistant 最後一則文字送到 Telegram。如果 assistant 寫出程式碼、檔案內容或敏感資訊，也可能一併送出。繼續嗎？",
      telegramApprovalDirectSend: "Direct Send（僅貼上）",
      telegramApprovalDirectSendDesc: "回覆 Clawd 完成通知時，聚焦對應的本機終端並貼上單行文字。不會按 Enter。",
      telegramApprovalTest: "測試訊息",
      telegramApprovalTestDesc: "送出一張獨立測試核准卡片，不綁定任何 agent 權限請求。",
      telegramApprovalSendTest: "送出測試",
      telegramApprovalTesting: "等待中…",
      telegramApprovalTestSent: "Telegram 測試完成。",
      telegramApprovalTestFailed: "Telegram 測試失敗。",
      telegramApprovalPrereqLabel: "請先完成第 1 步與第 2 步",
      telegramApprovalPrereqDesc: "還缺：",
      telegramApprovalPrereqMissingToken: "bot token",
      telegramApprovalPrereqMissingRecipient: "接收人 user id",
      feishuApprovalChannelName: "Feishu",
      feishuApprovalCardMissingBoth: "Save app credentials and an approver user id below to continue.",
      feishuApprovalCardMissingSecrets: "Save Feishu app credentials below to continue.",
      feishuApprovalCardMissingApprover: "Save the approver user id below to continue.",
      feishuApprovalCardReadyToEnable: "App credentials and approver are saved. Flip the switch in step 3 to start.",
      feishuApprovalCardStarting: "Connecting to Feishu long connection…",
      feishuApprovalCardRunning: "Feishu approval is live. Approval cards will route to your bot.",
      feishuApprovalCardFailed: "Feishu approval reported a failure. Check the message below or restart.",
      feishuApprovalStep1Title: "1. App Credentials",
      feishuApprovalSecretsLabel: "Feishu app credentials",
      feishuApprovalSecretsHintHtml: "Paste the App ID and App Secret from your Feishu self-built app. Verification Token and Encrypt Key are optional unless enabled in Feishu event settings.",
      feishuApprovalSecretsReplaceHintHtml: "Pasting new values replaces the saved fields. Blank fields keep their current values.",
      feishuApprovalAppIdPlaceholder: "App ID, e.g. cli_xxx",
      feishuApprovalAppSecretPlaceholder: "App Secret",
      feishuApprovalVerificationTokenPlaceholder: "Verification Token (optional)",
      feishuApprovalEncryptKeyPlaceholder: "Encrypt Key (optional)",
      feishuApprovalSaveSecrets: "Save secrets",
      feishuApprovalSaving: "Saving…",
      feishuApprovalSecretsRequired: "Enter App ID and App Secret first.",
      feishuApprovalSecretsEmpty: "Enter at least one Feishu secret to update.",
      feishuApprovalSecretsSaved: "Feishu secrets saved.",
      feishuApprovalSecretsSaveFailed: "Could not save Feishu secrets.",
      feishuApprovalSecretsConfiguredLabel: "Secrets configured",
      feishuApprovalSecretsConfiguredNoMask: "(stored)",
      feishuApprovalSecretsConfiguredDesc: "Feishu app credentials are saved on disk, outside clawd-prefs.json.",
      feishuApprovalSecretsCurrent: "Current App ID: {masked}",
      feishuApprovalReplaceSecrets: "Replace secrets",
      feishuApprovalStep2Title: "2. Approver",
      feishuApprovalApproverLabel: "Feishu approver user id",
      feishuApprovalApproverHintHtml: "Use the same id type that your app receives in card action callbacks. For a normal bot-to-user card, open_id is usually the right choice.",
      feishuApprovalApproverPlaceholder: "e.g. ou_xxx",
      feishuApprovalApproverEmpty: "Enter the Feishu approver user id first.",
      feishuApprovalSaveApprover: "Save approver",
      feishuApprovalConfigSaved: "Feishu approval config saved.",
      feishuApprovalStep3Title: "3. Enable & Test",
      feishuApprovalToggle: "Enable Feishu approval",
      feishuApprovalToggleDesc: "When configured, actionable local permission bubbles also send an approval card to Feishu.",
      feishuApprovalConnectionTimeout: "Long connection timeout",
      feishuApprovalConnectionTimeoutDesc: "How long Clawd waits for Feishu to connect or reconnect before showing failed. The SDK can still keep reconnecting in the background.",
      feishuApprovalConnectionTimeoutOption: "{seconds}s",
      feishuApprovalTest: "Test card",
      feishuApprovalTestDesc: "Sends a standalone Feishu approval card. It is not attached to any agent permission request.",
      feishuApprovalSendTest: "Send test",
      feishuApprovalTesting: "Waiting…",
      feishuApprovalTestSent: "Feishu test completed.",
      feishuApprovalTestFailed: "Feishu test failed.",
      feishuApprovalPrereqLabel: "Finish steps 1 and 2 first",
      feishuApprovalPrereqDesc: "Still needed:",
      feishuApprovalPrereqMissingSecrets: "app credentials",
      feishuApprovalPrereqMissingApprover: "approver user id",
      remoteSshTitle: "遠端 SSH",
      remoteSshSubtitle: "管理一鍵 SSH 通道，讓遠端 AI 程式設計工作階段像在本機一樣順手。Clawd 不會留下任何密碼或私鑰通行片語——靠你已經設好的 ssh-agent 或 SSH 金鑰。",
      remoteSshSectionProfiles: "設定檔",
      remoteSshAddProfile: "+ 新增設定檔",
      remoteSshEmpty: "還沒有設定檔。點「新增設定檔」加入第一個遠端 SSH 通道。",
      remoteSshConnect: "連線",
      remoteSshDisconnect: "中斷連線",
      remoteSshAuthenticate: "首次驗證",
      remoteSshAuthenticateHint: "在系統終端機開啟一次，完成主機金鑰確認或載入 SSH 金鑰。",
      remoteSshOpenTerminal: "開啟終端機",
      remoteSshDeploy: "部署 / 修復 Hook",
      remoteSshDeploying: "部署中……",
      remoteSshDeploySuccess: "Hook 檔案已部署完成。",
      remoteSshDeployDriftWarning: "部署期間設定被改過，已部署的是舊設定 — 請重新部署",
      remoteSshEdit: "編輯",
      remoteSshDelete: "刪除",
      remoteSshDeleteConfirm: "確定要刪除設定檔「{label}」？刪了就回不來了。",
      remoteSshAddTitle: "新增遠端 SSH 設定檔",
      remoteSshEditTitle: "編輯遠端 SSH 設定檔",
      remoteSshSave: "儲存",
      remoteSshCancel: "取消",
      remoteSshAddSuccess: "設定檔已新增。",
      remoteSshUpdateSuccess: "設定檔已更新。",
      remoteSshFieldLabel: "標籤",
      remoteSshFieldHost: "主機",
      remoteSshFieldPort: "SSH 連接埠（預設 22）",
      remoteSshFieldIdentityFile: "私鑰檔案（選填）",
      remoteSshFieldIdentityFileHint: "私鑰的絕對路徑。留空就用 ssh-agent 或 ~/.ssh/config。",
      remoteSshFieldRemoteForwardPort: "遠端轉送連接埠",
      remoteSshFieldHostPrefix: "主機前綴（選填）",
      remoteSshFieldHostPrefixHint: "在 Sessions 選單看到的簡短名稱。別用控制字元、引號、反斜線、$、` 和 !。",
      remoteSshFieldAutoStartCodex: "連線時順便啟動 Codex 備援監控",
      remoteSshFieldConnectOnLaunch: "Clawd 啟動時自動連線",
      remoteSshStatus_idle: "未連線",
      remoteSshStatus_connecting: "連線中……",
      remoteSshStatus_connected: "已連線",
      remoteSshStatus_reconnecting: "重新連線中……",
      remoteSshStatus_failed: "失敗",
      remoteSshStep_verify: "驗證本機檔案",
      remoteSshStep_mkdir: "建立遠端 hook 目錄",
      "remoteSshStep_check-node": "檢查遠端 Node",
      remoteSshStep_scp: "複製 hook 檔案",
      "remoteSshStep_host-prefix": "寫入主機前綴",
      "remoteSshStep_install-claude": "註冊 Claude hooks",
      "remoteSshStep_install-codex": "註冊 Codex hooks",
      "remoteSshStep_install-copilot": "註冊 Copilot hooks",
      "remoteSshStep_remote-shell": "偵測遠端 shell",
      remoteSshErrAuthDenied: "驗證失敗。點「首次驗證」在終端機確認主機金鑰或載入金鑰。",
      remoteSshErrHostKey: "主機金鑰還沒確認。點「首次驗證」在終端機確認指紋。",
      remoteSshErrForwardFailed: "遠端連接埠無法使用。請換一個遠端轉送連接埠（23333-23337）。",
      remoteSshErrBadConfig: "ssh 無法接受這個設定。請檢查設定項目。",
      remoteSshErrIdentityMissing: "無法讀取私鑰檔案。請檢查路徑和權限。",
      remoteSshErrDns: "無法解析主機名稱。",
      remoteSshErrNetTimeout: "網路逾時，稍後會重試。",
      remoteSshErrNetUnreachable: "網路無法連線，稍後會重試。",
      remoteSshErrBrokenPipe: "連線已中斷，稍後會重新連線。",
      remoteSshErrSpawnFailed: "啟動 ssh 行程失敗。",
      remoteSshErrSshMissing: "未偵測到 OpenSSH 用戶端。Windows：設定 → 應用程式 → 選用功能 → 新增 OpenSSH 用戶端。",
      remoteSshErrWindowsOpenSshLegacy: "目前 Windows OpenSSH 版本過舊，Remote SSH 健康檢查不可靠。請升級到 OpenSSH 8.x 或更新版本。",
      remoteSshErrWindowsCmdShell: "遠端預設 shell 是 Windows cmd.exe，Remote SSH 依賴 POSIX shell（mkdir -p / ~ 展開 / sh -c）。請在遠端把 OpenSSH 的 DefaultShell 改成 Git Bash 或 WSL bash 後再點 Deploy。PowerShell：New-ItemProperty -Path 'HKLM:\\SOFTWARE\\OpenSSH' -Name DefaultShell -Value 'C:\\Program Files\\Git\\bin\\bash.exe' -PropertyType String -Force",
      remoteSshErrNoLocalPort: "本機 Clawd 服務尚未啟動。",
      remoteSshErrUnknownStrikes: "連續多次無法識別錯誤，請檢查設定和記錄檔。",
      remoteSshProbeLocalUnhealthy: "通道已建立，但本機 Clawd 服務狀態異常。",
      remoteSshProbeUnresponsive: "通道已建立，但 Clawd 沒有回應，請確認 Clawd 是否正在執行。",
      remoteSshProbePortHijack: "遠端連接埠已被另一個 HTTP 服務占用。請換一個遠端轉送連接埠。",
      remoteSshProbeHttpTimeout: "遠端 HTTP 回應逾時，稍後會重試。",
      remoteSshProbeNodeNotExec: "遠端 node 執行檔無法執行。請檢查權限。",
      remoteSshProbeNodeMissing: "遠端找不到 Node。請先 Deploy 或在遠端安裝 Node。",
      remoteSshProbeSignal: "Probe 行程被中斷，稍後會重試。",
      remoteSshHooksLabel: "Hook 狀態：",
      remoteSshHooksNever: "從未部署",
      remoteSshHooksDeployedJustNow: "剛剛部署",
      remoteSshHooksDeployedAgoMin: "{n} 分鐘前部署",
      remoteSshHooksDeployedAgoHr: "{n} 小時前部署",
      remoteSshHooksDeployedAgoDay: "{n} 天前部署",
      remoteSshConnectWarnNoDeploy: "Hook 檔案還沒部署。Connect 只接 SSH 通道、不會部署 hook——要先點 Deploy / Repair Hooks，Clawd 才會回應遠端工作階段。",
      codexHookReviewReminder: "下一步：開啟 Codex 命令列，輸入 /hooks 走一遍 review，新 hook 才會啟用（Codex 規定 review 後才會觸發）。",
      doctorSidebarLabel: "Doctor",
      doctorTitle: "Clawd Doctor",
      doctorStatusUnknown: "未知",
      doctorStatusPass: "正常",
      doctorStatusWarning: "警告",
      doctorStatusCritical: "嚴重",
      doctorStatusInfo: "提示",
      doctorIssueCount: "{count} 個問題",
      doctorLastCheckedAt: (time) => `檢查 ${time}`,
      doctorCheckLocalServer: "本機服務",
      doctorCheckAgentIntegrations: "Agent 整合",
      doctorAgentSummaryOk: (count) => `${count} 正常`,
      doctorAgentSummaryAttention: (count) => `${count} 需要處理`,
      doctorAgentSummaryNeedsAttention: "需要處理",
      doctorAgentSummarySkipped: (count) => `${count} 已跳過`,
      doctorAgentSummaryNoneActive: "未啟用任何 agent 整合",
      doctorCheckPermissionBubbles: "權限對話框",
      doctorCheckTheme: "主題",
      doctorCheckUnknown: "檢查項目",
      doctorPrivacy: "隱私權聲明：診斷報告只在本機產生，Clawd 不會上傳任何資料。複製前會自動把使用者路徑和金鑰遮起來。",
      doctorCopyReport: "複製診斷報告",
      doctorRerun: "重新檢查",
      doctorClose: "關閉",
      doctorCopied: "診斷報告已複製。",
      doctorCopyFailed: "無法複製診斷報告。",
      doctorRunFailed: "無法執行診斷檢查。",
      doctorFix: "修復",
      doctorFixing: "修復中",
      doctorFixApplied: "修復完成。",
      doctorFixFailed: "無法修復這個問題。",
      doctorFixConfirmCodex: "Clawd 會把 Codex 設定裡的 [features].hooks 改成 true。要繼續嗎？",
      doctorFixConfirmCodexTitle: "啟用 Codex hooks？",
      doctorFixConfirmCodexDetail: "這次修復會更動你的 Codex 設定，把 [features].hooks 改成 true。除非你在這裡確認，否則 Clawd 不會更動。",
      doctorFixConfirmCodexAction: "啟用並修復",
      doctorFixConfirmCancel: "取消",
      doctorRestartButton: "重新啟動 Clawd",
      doctorRestarting: "重新啟動中",
      doctorRestartConfirmTitle: "重新啟動 Clawd？",
      doctorRestartConfirmDetail: "Clawd 會關掉再開起來。AI coding agent 還在跑的請求會被中斷。重新啟動時 Doctor 視窗也會一起關掉。",
      doctorRestartConfirmAction: "立刻重新啟動",
      doctorNoResult: "還沒有診斷結果。",
      doctorConnectionTitle: "連線測試",
      doctorConnectionInstruction: "在任一個 AI coding agent 裡送出一則訊息，請等待倒數結束後確認結果。",
      doctorConnectionIdle: "未測試",
      doctorConnectionTesting: "等 {seconds} 秒",
      doctorConnectionHttpVerified: "HTTP 連線已驗證",
      doctorConnectionHttpDropped: "HTTP 連線成功，但事件已被丟棄",
      doctorConnectionHttpBlocked: "HTTP 連線遭封鎖",
      doctorConnectionNoActivity: "沒有活動",
      doctorConnectionNoActivityHint: "測試期間沒有 agent 的 hook 流量到達 Clawd。如果你還沒啟用 agent，請先在設定裡啟用或安裝一個，然後從該 agent 發一則訊息，再重新測試。",
      doctorConnectionError: "連線測試失敗",
      doctorTestConnection: "測試連線",
      doctorOpenLog: "開啟除錯記錄",
      doctorOpenLogOpened: "已開啟除錯記錄。",
      doctorOpenLogFailed: "無法開啟除錯記錄。",
      shortcutsTitle: "快速鍵",
      shortcutsSubtitle: "設定桌寵顯示或隱藏，以及權限動作的全域快速鍵。留空就解除綁定。",
      shortcutLabelBubbleNextOption: "對話框：下一項",
      shortcutLabelBubblePrevOption: "對話框：上一項",
      shortcutLabelBubbleToggleOption: "對話框：勾選/取消",
      shortcutLabelBubbleSubmit: "對話框：送出答案",
      shortcutBuiltinKeyTooltip: "內建鍵，目前無法修改",
      shortcutRecordButton: "修改",
      shortcutClearButton: "清除",
      shortcutResetButton: "還原預設值",
      shortcutResetAllButton: "全部還原預設值",
      shortcutRecordingHint: "按下組合鍵（Esc）",
      shortcutUnassigned: "— 未綁定 —",
      shortcutErrorConflict: "和 {other} 衝突，請改用其他組合鍵。",
      shortcutErrorSystemConflict: "系統或別的應用程式已經在用這個組合鍵。",
      shortcutErrorReserved: "這是保留快速鍵，請改用其他組合鍵。",
      shortcutErrorInvalid: "暫時還不支援這個組合鍵。",
      shortcutErrorNeedsModifier: "快速鍵必須包含至少一個輔助鍵。",
      shortcutErrorRegistrationFailed: "已儲存，但系統衝突所以目前未生效。重新綁定或晚點再試。",
      shortcutLabelTogglePet: "顯示/隱藏桌寵",
      shortcutLabelPermissionAllow: "權限：允許",
      shortcutLabelPermissionDeny: "權限：拒絕",
      shortcutToastSaved: "快速鍵已更新",
      sidebarSoon: "即將推出",
      sectionAppearance: "外觀",
      sectionSession: "工作階段管理",
      sectionAlerts: "提醒與回饋",
      sectionBehavior: "行為與位置",
      sectionSystemStartup: "系統與啟動",
      sectionPermissions: "權限",
      hardwareBuddyTitle: "Hardware Buddy",
      hardwareBuddyDesc: "透過單獨安裝的 Clawstick runtime 連接已配對 BLE 桌面裝置。權限回覆預設關閉，必須明確開啟且連線安全才會啟用。",
      hardwareBuddyEnable: "Enable Hardware Buddy",
      hardwareBuddyEnableDesc: "Start the BLE sidecar and send state-only session snapshots by default.",
      hardwareBuddyAddress: "BLE address",
      hardwareBuddyAddressDesc: "Optional fixed device address. Leave empty to scan by name prefix.",
      hardwareBuddyNamePrefix: "Device name prefix",
      hardwareBuddyNamePrefixDesc: "Scan for devices whose advertised name starts with this text.",
      hardwareBuddyPermissions: "Allow hardware permission replies",
      hardwareBuddyPermissionsDesc: "Requires this opt-in plus a secure paired transport before Allow/Deny prompts appear on the device.",
      hardwareBuddyQuickCommands: "啟用 Quick Commands",
      hardwareBuddyQuickCommandsDesc: "顯示本機 preset 按鈕，只建立由 adapter 處理的 quick_command 事件；Clawd 不貼上文字，也不執行 shell。",
      hardwareBuddyQuickCommandPresets: "Quick Command presets",
      hardwareBuddyQuickCommandPresetsDesc: "點擊 preset 會替 active-session adapter 佇列一個已驗證事件。",
      hardwareBuddyQuickCommandsDisabled: "開啟 Quick Commands 後才能使用 preset 按鈕。",
      hardwareBuddyQuickCommandsLoading: "正在載入 presets...",
      hardwareBuddyQuickCommandsUnavailable: "Quick Commands 目前不可用。",
      hardwareBuddyQuickCommandSent: "Quick Command 已佇列。",
      hardwareBuddyQuickCommandFailed: "Quick Command 失敗：",
      hardwareBuddyRepliesOn: "Replies on",
      hardwareBuddyRepliesOff: "Replies off",
      hardwareBuddyRepliesBlocked: "Replies waiting",
      hardwareBuddyTest: "Test approval",
      hardwareBuddyTestButton: "Send test",
      hardwareBuddyTestWaiting: "Waiting...",
      hardwareBuddyTestDesc: "Send a harmless approval request to the paired device.",
      hardwareBuddyTestPending: "Waiting for a button press on the device.",
      hardwareBuddyTestOk: "Device replied: {decision}",
      hardwareBuddyTestError: "Test approval failed.",
      hardwareBuddyTestErr_disabled: "Hardware Buddy is not enabled.",
      hardwareBuddyTestErr_permissions_off: "Hardware permission replies are disabled.",
      hardwareBuddyTestErr_not_secure: "Hardware Buddy is not connected over a secure link.",
      hardwareBuddyTestErr_timeout: "The device did not reply before the test timed out.",
      hardwareBuddyTestErr_no_decision: "Hardware Buddy test did not receive a decision.",
      hardwareBuddyTestErr_internal_error: "Hardware Buddy test failed inside Clawd.",
      hardwareBuddyTestDisabled: "Enable Hardware Buddy before testing approvals.",
      hardwareBuddyTestRepliesOff: "Turn on hardware permission replies before testing approvals.",
      hardwareBuddyTestNeedsSecure: "Connect over a secure paired link before testing approvals.",
      hardwareBuddyTestToastOk: "Hardware Buddy test reply received.",
      hardwareBuddyTestToastError: "Hardware Buddy test failed: ",
      hardwareBuddyStatus: "Connection status",
      hardwareBuddyStatus_off: "Off",
      hardwareBuddyStatus_idle: "Idle",
      hardwareBuddyStatus_searching: "Searching",
      hardwareBuddyStatus_connected: "Connected",
      hardwareBuddyStatus_secure: "Secure",
      hardwareBuddyStatus_error: "Needs attention",
      hardwareBuddyStatusOffDetail: "Hardware Buddy is disabled.",
      hardwareBuddyStatusError: "Needs attention",
      hardwareBuddyStatusErrorDetail: "Check the Hardware Buddy sidecar status.",
      hardwareBuddyStatusConnectedDetail: "{device} connected, secure link {secure}",
      hardwareBuddyStatusAddressDetail: "Looking for {address}.",
      hardwareBuddyStatusPrefixDetail: "Scanning for names starting with {prefix}.",
      hardwareBuddySecureOn: "on",
      hardwareBuddySecureOff: "off",
      hardwareBuddyErr_missing_bleak: "Install bleak",
      hardwareBuddyErr_python_missing: "Python missing",
      hardwareBuddyErr_auth_required: "Pair required",
      hardwareBuddyErr_device_not_found: "Device not found",
      hardwareBuddyErr_bad_config: "Bad config",
      hardwareBuddyErr_core_missing: "需安裝 Clawstick",
      hardwareBuddyErr_sidecar_exited: "Sidecar exited",
      hardwareBuddyErr_sidecar_error: "Sidecar error",
      collapsibleExpand: "展開群組",
      collapsibleCollapse: "收合群組",
      agentsTitle: "Agent 管理",
      agentsSubtitle: "依 agent 類型開關追蹤。關掉之後記錄監視器會停止、HTTP 入口也會忽略 hook 事件——桌寵不會動、不彈權限對話框、也不記工作階段。",
      agentsEmpty: "還沒有註冊任何 agent。",
      agentSectionConnected: "已接入",
      agentSectionRecommended: "建議安裝",
      agentSectionUnavailable: "未偵測到",
      eventSourceHook: "Hook",
      eventSourceLogPoll: "記錄輪詢",
      eventSourcePlugin: "外掛",
      eventSourceExtension: "擴充功能",
      badgePermissionBubble: "權限對話框",
      agentIntegrationInstalled: "已安裝",
      agentIntegrationNotInstalled: "未安裝",
      agentIntegrationInstall: "安裝",
      agentIntegrationUninstall: "解除安裝",
      agentIntegrationWorking: "處理中...",
      agentIntegrationUninstallConfirm: "要解除安裝這個由 Clawd 管理的整合嗎？只會移除 Clawd 管理的 hooks、外掛或擴充功能。",
      agentIntegrationInstallSkipped: "沒有偵測到本機安裝了 {agents}，所以沒有寫入整合。",
      agentListSeparator: "、",
      agentInstallHintTitle: "連接偵測到的 Agent",
      agentInstallHintDesc: "偵測到本機可能有 {agents}。安裝由 Clawd 管理的 hooks、外掛或擴充功能後，它們就能驅動桌寵。",
      agentInstallHintInstallRecommended: "安裝推薦項",
      agentInstallHintDismiss: "暫不處理",
      agentInstanceSection: "實例",
      agentInstanceScanWsl: "掃描 WSL",
      agentInstanceScanWslDesc: "重新掃描 WSL 發行版中的 Agent 安裝",
      agentInstanceScanning: "掃描中...",
      agentInstancePair: "配對",
      agentInstancePairing: "配對中...",
      agentInstancePaired: "配對成功",
      agentInstanceUnpair: "取消配對",
      agentInstanceUnpairing: "取消配對中...",
      agentInstanceUnpaired: "已取消配對",
      agentInstanceDeployedBadge: "已部署 hooks",
      agentInstancePairedNoConnectivity: "已配對，但該發行版無法存取 Clawd——WSL 的 NAT 網路不互通 localhost。請在 .wslconfig 中設定 networkingMode=mirrored 並重新啟動 WSL。",
      agentCleanupHintTitle: "檢查缺失的本機 Agent",
      agentCleanupHintDesc: "Clawd 目前連接了 {agents}，但本機沒有偵測到對應安裝。移除 Clawd 管理的整合後，也會關閉這些 agent 的啟動同步與事件入口。",
      agentCleanupHintRemove: "移除整合",
      agentCleanupHintDismiss: "先保留",
      rowAgentPermissions: "顯示彈出視窗",
      rowAgentPermissionsDesc: "關掉以後，這個 agent 會改由自己的終端機處理提示，不會再彈 Clawd 對話框。",
      rowAgentSubagentPermissions: "子 agent 權限彈窗",
      rowAgentSubagentPermissionsDesc: "關掉以後，Task 子 agent 發起的權限請求不會再彈 Clawd 對話框，改回終端機處理。",
      rowCodexPermissionMode: "Codex 權限模式",
      rowCodexPermissionModeDesc: "Native 維持 Codex AutoReview 和終端機原本的提示；Intercept 改成顯示 Clawd 的允許或拒絕對話框。",
      codexPermissionModeNative: "Native",
      codexPermissionModeIntercept: "Intercept",
      rowCodexNativeNotificationSound: "Native 通知音",
      rowCodexNativeNotificationSoundDesc: "關閉後，Codex Native 權限提示仍會顯示通知動畫，但不播放提示音；完成音效仍會播放。",
      agentCodexHookNeedsAttention: "需要注意",
      codexHookHealthReasonDisabled: "Codex hooks 在設定裡被關閉（[features].hooks=false），Codex 不會執行審批 hook。請啟用，或用 Doctor → Fix 修復。",
      codexHookHealthReasonNeedsReview: "Clawd 的 Codex hooks 已註冊但需在 Codex 裡確認——在 Codex 執行 /hooks，或用 Doctor → Fix。",
      codexHookHealthReasonInactive: "Clawd 的 Codex hook 未生效，審批提示不會跳出。請重新安裝整合或用 Doctor → Fix 修復。",
      rowCodexHookHealthNotify: "Codex hook 失效時提醒",
      rowCodexHookHealthNotifyDesc: "啟動時若 Codex 官方審批 hook 被停用或需檢查，跳出一次性系統匣通知。每種問題只提醒一次，不會每次啟動都跳。",
      rowAgentIdleAlerts: "等待輸入提醒",
      rowAgentIdleAlertsDesc: "目前 agent 的 Notification hook 觸發的鈴鐺動畫和音效（例如 Claude Code 閒置約 60 秒會送出）。不影響權限對話框。",
      rowLanguage: "語言",
      rowLanguageDesc: "選單和對話框的介面語言。",
      rowSound: "音效",
      rowSoundEnabled: "啟用音效",
      rowSoundDesc: "Clawd 完成任務或要等輸入時會播放提示聲。",
      rowVolume: "音量",
      rowVolumeDesc: "調整音效音量。停用音效後無法使用。",
      rowLowPowerIdleMode: "低耗電閒置狀態",
      rowLowPowerIdleModeDesc: "Clawd 不動幾秒後就暫停閒置狀態 SVG 動畫；有活動時立即恢復。",
      rowKeepAwakeWhileWorking: "工作時阻止休眠",
      rowKeepAwakeWhileWorkingDesc: "有任務進行中時阻止電腦休眠；任務完成後恢復允許休眠。",
      rowFlashTaskbarOnComplete: "工作完成時閃爍系統匣圖示",
      rowFlashTaskbarOnCompleteDesc: "AI 完成工作時系統匣圖示閃爍提醒，即使在其他視窗工作也能注意到。",
      rowFlash: "系統匣閃爍",
      rowFlashDesc: "設定工作完成後系統匣圖示的閃爍行為。",
      rowFlashInterval: "閃爍間隔",
      rowFlashIntervalDesc: "圖示在正常與高亮之間切換的速度。",
      rowFlashDuration: "閃爍時長",
      rowFlashDurationDesc: "閃爍持續多久。設為 0 表示一直閃爍，直到手動點擊停止。",
      unitMilliseconds: "毫秒",
      valueAlways: "一直閃爍",
      rowSessionHud: "工作階段 HUD",
      rowSessionHudDesc: "在桌寵下方顯示進行中的工作階段狀態。",
      rowSessionHudMaster: "啟用",
      sessionHudSummaryEnabled: "HUD: {state}",
      sessionHudSummaryLabels: "標籤: {state}",
      sessionHudSummaryElapsed: "時間: {state}",
      sessionHudSummaryContextUsage: "上下文: {state}",
      sessionHudSummaryCleanup: "自動清理: {state}",
      rowSessionHudStateLabels: "顯示狀態標籤",
      rowSessionHudStateLabelsDesc: "為作業中、思考中、等待中等進行中的工作階段顯示精簡狀態標籤。已完成的工作階段仍顯示鈴鐺。",
      rowSessionHudElapsed: "顯示 HUD 時間",
      rowSessionHudElapsedDesc: "在工作階段 HUD 顯示經過時間。關掉之後 HUD 會變窄。",
      rowSessionHudContextUsage: "顯示上下文用量",
      rowSessionHudContextUsageDesc: "當工作階段回報上下文視窗資料時，顯示精簡的 token 用量。",
      shortcutLabelPetReveal: "點擊桌寵：顯示工作階段 HUD",
      shortcutLabelOpenDashboard: "Ctrl / ⌘ + 點擊桌寵：開啟工作階段面板",
      sessionHudPinTooltip: "釘選 HUD",
      sessionHudUnpinTooltip: "取消釘選",
      sessionHudFocusUnavailableTooltip: "無法跳轉終端機",
      sessionHudRemoteFocusUnavailableTooltip: "遠端工作階段無法跳轉終端機",
      rowSessionHudCleanupDetached: "自動清除已分離的工作階段",
      rowSessionHudCleanupDetachedDesc: "工作階段結束、終端機也關掉之後，先從 HUD 隱藏，再過一段時間從工作階段列表移除。",
      rowSessionCleanupGroup: "工作階段清理",
      rowSessionCleanupGroupDesc: "Clawd 等多久才清掉沒動靜的工作階段。主要影響遠端 SSH 工作階段（看不到終端機）——遠端長任務可以放寬；設成 0 就完全不按時間清。",
      rowStaleSession: "工作階段逾時（閒置）",
      rowStaleSessionDesc: "遠端 SSH 工作階段閒置這麼久就移除。本地工作階段只要終端機還開著就不會移除，只會變灰為 idle。預設 10 分鐘。0 = 永不按時間移除。值必須不小於「工作逾時」。",
      rowStaleWorking: "工作逾時",
      rowStaleWorkingDesc: "工作階段卡在 working / thinking 太久時，到這個時間就改成 idle。預設 5 分鐘。當「工作階段逾時」不為 0 時，最大會被它限制住。",
      rowStaleDetached: "終端機關閉後清理延遲",
      rowStaleDetachedDesc: "只有開啟「自動清除已分離的工作階段」時才生效。工作階段的終端機視窗關掉後，等這麼多秒再從 HUD 移除。預設 30 秒。",
      unitMinutes: "分鐘",
      unitSeconds: "秒",
      valueDisabled: "關閉",
      actionResetSessionCleanup: "還原預設",
      rowSessionDashboard: "工作階段面板",
      rowSessionDashboardDesc: "開啟視窗看所有 Claude Code、Codex 等 agent 目前進行中的工作階段。",
      actionOpenDashboard: "開啟",
      rowOpenAtLogin: "登入時啟動",
      rowOpenAtLoginDesc: "登入系統時自動啟動 Clawd。",
      rowManageClaudeHooks: "自動管理 Claude hooks",
      rowManageClaudeHooksDesc: "啟動時同步 Claude hooks；`~/.claude/settings.json` 被其他工具改掉時也會自動補回來。",
      rowManageClaudeHooksOffNote: "關掉只會停止後面的自動管理。目前裝好的 Claude hooks 還在，除非你主動中斷連線。",
      actionDisconnectClaudeHooks: "中斷連線",
      claudeHooksDisableConfirmTitle: "關掉 Claude hooks 自動管理？",
      claudeHooksDisableConfirmDetail: "只關掉自動管理的話，`~/.claude/settings.json` 裡目前的 Claude hooks 還會留著。「隨 Claude Code 啟動」的偏好也會保留，方便之後再開啟。",
      claudeHooksDisableConfirmDisconnect: "關掉並移除目前的 hooks",
      claudeHooksDisableConfirmDisableOnly: "只關掉自動管理",
      claudeHooksDisableConfirmKeep: "繼續保留自動管理",
      claudeHooksDisconnectConfirmTitle: "中斷 Claude hooks 連線？",
      claudeHooksDisconnectConfirmDetail: "這會從 `~/.claude/settings.json` 移除 Clawd 管的 Claude hooks，並關掉自動管理。「隨 Claude Code 啟動」的偏好會保留，方便之後再開啟。",
      claudeHooksDisconnectConfirmAction: "中斷 hooks 連線",
      claudeHooksDisconnectConfirmKeep: "繼續保留",
      rowStartWithClaude: "隨 Claude Code 啟動",
      rowStartWithClaudeDesc: "Claude Code 工作階段一開始就自動把 Clawd 叫起來。",
      rowStartWithClaudeDisabledDesc: "要先開啟 Claude hooks 自動管理。關掉的時候，連接埠變動和外部更動都不會自動修。",
      rowHideBubbles: "隱藏對話框",
      rowHideBubblesDesc: "隱藏 Clawd 的權限、通知和更新對話框。",
      rowBubbleFollow: "對話框跟著 Clawd",
      rowBubbleFollowDesc: "把權限和更新對話框放在桌寵旁邊，不放螢幕角落。",
      rowAutoApproveAll: "自動放行所有請求",
      rowAutoApproveAllDesc: "危險：自動允許所有 agent 的權限請求——執行命令、修改檔案、刪除檔案——不再詢問。各 agent 的開關和「請勿打擾」仍然生效。",
      menuAutoApproveAll: "自動放行所有請求",
      autoApproveAllConfirmTitle: "開啟自動放行所有請求？",
      autoApproveAllConfirmDetail: "所有 agent 的每一個權限請求都會被自動允許，包括執行 shell 命令和刪除檔案。Clawd 不會再先問你。只有在你完全信任 agent 的行為時才開啟。",
      autoApproveAllConfirmEnable: "開啟自動放行",
      autoApproveAllConfirmCancel: "取消",
      rowBubblePolicy: "對話框顯示和自動關閉",
      rowBubblePolicyDesc: "分別控制每種對話框要不要顯示，以及被動對話框停多久。",
      bubblePermissionLabel: "權限 / 互動對話框",
      bubblePermissionDesc: "關掉之後審查提示會回到 agent 終端機或 TUI 處理。計畫預覽和 AskUserQuestion 還是會顯示，避免 agent 卡住。秒數是選填的，逾時自動關閉，用在 hook 連線卡住、等不到決定的時候（0 = 不自動關閉）。",
      bubbleNotificationLabel: "通知對話框",
      bubbleNotificationDesc: "開關控制 Codex 或 Kimi Code 的被動通知。秒數是自動關閉的上限；後面有狀態變化可能提前關掉。0 表示隱藏。",
      bubbleUpdateLabel: "更新對話框",
      bubbleUpdateDesc: "開關控制檢查更新、下載、成功、失敗和重新啟動的提示。秒數決定它們停多久。",
      bubbleUpdateWarning: "不建議隱藏更新對話框，否則可能會錯過失敗原因或重新啟動提示。",
      bubbleSecondsPrefix: "停留",
      bubbleSecondsUnit: "秒",
      bubbleSecondsInvalid: "秒數要是 0 到 3600 的整數",
      bubblePolicySummaryPermission: "權限{state}",
      bubblePolicySummaryNotification: "通知最多 {seconds} 秒",
      bubblePolicySummaryUpdate: "更新 {seconds} 秒",
      bubblePolicySummaryOn: "開",
      bubblePolicySummaryOff: "關",
      updateBubbleDisableConfirmTitle: "隱藏更新對話框？",
      updateBubbleDisableConfirmDetail: "隱藏後可能會錯過更新失敗原因、下載完成提示和重新啟動安裝提示。更新流程本身還是會繼續，只是 Clawd 不再顯示更新對話框。",
      updateBubbleDisableConfirmAction: "隱藏更新對話框",
      updateBubbleDisableConfirmCancel: "繼續顯示",
      rowAllowEdgePinning: "允許貼齊螢幕邊緣",
      rowAllowEdgePinningDesc: "開啟後桌寵貼齊螢幕邊緣時，頂部或底部裝飾（小花、建築、對話框等）可能會被切掉。",
      rowDisableMiniMode: "關閉極簡模式",
      rowDisableMiniModeDesc: "開啟後桌寵不會進入極簡模式，也不會播放邊緣吸附的迷你動畫。",
      rowFreeRoam: "自由漫步",
      rowFreeRoamDesc: "閒置時讓桌寵在桌面上自由漫步，移動滑鼠即停止。",
      rowKeepSizeAcrossDisplays: "跨螢幕保持大小",
      rowKeepSizeAcrossDisplaysDesc: "移到另一台螢幕時不自動重新縮放。滑桿還是會依目前螢幕比例調整桌寵。",
      rowFullscreenOverlay: "浮在全螢幕遊戲上方",
      rowFullscreenOverlayDesc: "在 Windows 上讓桌寵在全螢幕遊戲上方依然好用——保持在上方、可拖曳，且不會搶走遊戲焦點。關閉則回到未最佳化的原樣。無邊框全螢幕遊戲下桌寵始終浮在上方；想徹底移除請用「隱藏桌寵」。（獨佔全螢幕遊戲下的表現可能不一致。）",
      rowSize: "大小",
      rowSizeDesc: "拖滑桿調整桌寵大小。",
      rowTextScale: "文字大小",
      rowTextScaleDesc: "縮放本螢幕上氣泡、工作階段 HUD、Dashboard 與設定頁的文字。每個螢幕分別記憶；不影響桌寵本體。",
      textScaleResetTitle: "重設為 100%",
      rowSizeResetTitle: "重設為預設大小",
      placeholderTitle: "即將推出",
      placeholderDesc: "這個面板會在 Clawd 後續版本加入，規劃見 docs/plans/plan-settings-panel.md。",
      toastSaveFailed: "存檔失敗：",
      toastAgentIntegrationInstalled: "整合已安裝。",
      toastAgentIntegrationUninstalled: "整合已解除安裝。",
      toastAgentInstallHintInstalled: "推薦整合已安裝。",
      toastAgentInstallHintSkipped: "沒有偵測到本機安裝了 {agents}，所以沒有寫入整合。",
      toastAgentInstallHintPartialSkipped: "已安裝 {success} 個；{agents} 未偵測到本機安裝，已略過。",
      toastAgentInstallHintPartial: "已安裝 {success} 個，失敗 {failed} 個：{message}",
      toastAgentCleanupHintRemoved: "缺失的整合已移除。",
      toastAgentCleanupHintPartial: "已移除 {success} 個，失敗 {failed} 個：{message}",
      langEnglish: "English",
      langChinese: "简体中文",
      langTraditionalChinese: "繁體中文",
      langKorean: "한국어",
      langJapanese: "日本語",
      themeTitle: "主題",
      themeSubtitle: "幫 Clawd 選擇主題。主題卡會顯示是否為內建主題，以及游標跟隨、靜態、迷你模式等支援項目，方便切換前比較差異。",
      themeEmpty: "沒有主題可以用。",
      themeBadgeBuiltin: "內建",
      themeBadgeCodexPet: "Codex Pet",
      themeBadgeActive: "目前",
      themeActionGroupCodexPets: "Codex Pets",
      themeActionGroupUserThemes: "使用者主題",
      themeRefreshImportedPets: "重新整理 Codex Pets",
      themeImportPetZip: "匯入 Codex Pet 套件（.zip）",
      themeOpenCodexPetsFolder: "開啟 Codex Pet 資料夾",
      themeImportUserThemeZip: "匯入 Clawd 主題套件（.zip）",
      themeImportUserThemeZipHint: "Clawd 主題 zip：根目錄或單一頂層資料夾裡要有 theme.json；素材放在 assets/，支援 SVG、GIF、APNG、PNG、WebP、JPG、JPEG。Codex Pet 套件請改用上面的入口。",
      themeOpenUserThemesFolder: "開啟主題資料夾",
      themeRefreshThemes: "重新整理主題",
      themeGroupBuiltIn: "內建",
      themeGroupImportedCodexPets: "已匯入的 Codex Pets",
      themeGroupUserThemes: "使用者主題",
      themeUninstallPetLabel: "解除安裝",
      themeCapabilityTracked: "游標跟隨閒置狀態",
      themeCapabilityAnimated: "動畫閒置狀態",
      themeCapabilityStatic: "靜態主題",
      themeCapabilityMini: "迷你模式",
      themeCapabilityDirectSleep: "直接睡",
      themeCapabilityFineMotion: "精細動效",
      themeCapabilityNoReactions: "無反應",
      themeActiveIndicator: "✓ 目前",
      themeThumbMissing: "\u{1F3AD}",
      themeDeleteLabel: "刪除主題",
      themeVariantStripLabel: "變體",
      toastThemeDeleted: "主題已刪除。",
      toastThemeDeleteFailed: "刪除主題失敗：",
      toastCodexPetsRefreshOk: (imported, updated, unchanged, removed, invalid, switched) =>
        `Codex Pet 已重新整理：新增 ${imported}，更新 ${updated}，沒變 ${unchanged}，移除 ${removed}${invalid ? `，無效 ${invalid}` : ""}${switched ? "；目前主題已切回 Clawd" : ""}。`,
      toastCodexPetsRefreshFailed: (message) => `重新整理 Codex Pet 失敗：${message}`,
      toastCodexPetsFolderFailed: "開啟 Codex Pet 資料夾失敗：",
      toastUserThemesFolderFailed: "開啟主題資料夾失敗：",
      toastUserThemeZipImportOk: (name) => `已匯入主題「${name}」。`,
      toastUserThemeZipImportFailed: (message) => `匯入主題（.zip）失敗：${message}`,
      toastCodexPetZipImportOk: (name) => `已匯入「${name}」並切換使用。`,
      toastCodexPetZipImportFailed: (message) => `匯入 Codex Pet（.zip）失敗：${message}`,
      toastCodexPetRemoveOk: (name, switched) => `已解除安裝「${name}」${switched ? "，並切回 Clawd" : ""}。`,
      toastCodexPetRemoveFailed: (message) => `解除安裝匯入的寵物失敗：${message}`,
      animMapTitle: "動畫對應",
      animMapSubtitle: "關掉不想看的打擾動畫。事件還是會觸發——Clawd 只是不再播對應的動畫和音效。",
      animMapSemanticsNote: "關掉 = 不播動畫 + 不發音效。權限對話框、工作階段記錄、終端機焦點都照常運作。",
      animMapResetAll: "全部還原",
      animMapAttentionLabel: "完成提示（happy）",
      animMapAttentionDesc: "Agent 結束一輪時的開心跳動（Stop）。",
      animMapErrorLabel: "錯誤提示",
      animMapErrorDesc: "工具呼叫失敗時的抖動動畫。",
      animMapSweepingLabel: "上下文清理",
      animMapSweepingDesc: "PreCompact 或清空上下文時的掃把動畫。",
      animMapNotificationLabel: "通知提示",
      animMapNotificationDesc: "權限請求、訊息詢問時的鈴鐺動畫。",
      animMapCarryingLabel: "Worktree 搬運",
      animMapCarryingDesc: "建 worktree 時的搬運動畫。",
      toastAnimMapResetOk: "動畫和音效自訂設定已清除。",
      animOverridesTitle: "動畫與音效",
      animOverridesSubtitle: "依卡片變更動畫檔，調整目前主題的淡化與自動回復時間，也能自訂主題音效。",
      animOverridesLoading: "正在載入動畫與音效自訂設定……",
      animOverridesCurrentTheme: "目前主題",
      animOverridesReplacementConfig: "動畫自訂設定",
      animOverridesOpenThemeTab: "開啟主題頁",
      animOverridesOpenAssets: "開啟素材目錄",
      animOverridesResetAll: "還原主題預設值",
      animOverridesExport: "匯出設定…",
      animOverridesImport: "匯入設定…",
      toastAnimOverridesExportOk: (count, path) => `已匯出 ${count} 個主題的自訂設定 → ${path}`,
      toastAnimOverridesImportOk: (count) => `已匯入 ${count} 個主題的自訂設定。`,
      toastAnimOverridesExportEmpty: "目前沒有可匯出的自訂設定。",
      toastAnimOverridesExportFailed: (message) => `匯出失敗：${message}`,
      toastAnimOverridesImportFailed: (message) => `匯入失敗：${message}`,
      animOverridesChangeFile: "變更檔案",
      animOverridesPreview: "預覽一次",
      animOverridesReset: "還原槽位",
      animOverridesFade: "淡化",
      animOverridesFadeIn: "進入時淡化顯示",
      animOverridesFadeOut: "退出時淡化隱藏",
      animOverridesSaveFade: "儲存淡化設定",
      animOverridesDuration: "自動回復時間",
      animOverridesSaveDuration: "儲存時間設定",
      animOverridesContinuousHint: "持續狀態不需要自動回復設定。",
      animOverridesAssetCycle: "素材週期",
      animOverridesSuggestedTiming: "建議時長",
      animOverridesTimingEstimated: "估算",
      animOverridesTimingFallback: "主題預設",
      animOverridesTimingUnavailable: "無法使用",
      animOverridesDisplayHintWarning: "執行時可能會被 displayHintMap 取代。",
      animOverridesFallbackHint: "這個槽位目前會回復到 {state}。",
      animOverridesOverriddenTooltip: "已自訂（不是預設值）",
      animOverridesUseOwnFile: "使用自訂素材",
      animOverridesDurationIdle: "停留時長",
      animOverridesSectionIdle: "閒置狀態",
      animOverridesSectionWork: "工作狀態",
      animOverridesSectionInterrupts: "打擾狀態",
      animOverridesSectionSleep: "睡眠",
      animOverridesSectionMini: "迷你模式",
      animOverridesSectionReactions: "反應動畫",
      animOverridesSectionIdleTracked: "跟隨滑鼠的閒置狀態",
      animOverridesSectionIdleAnimated: "閒置狀態隨機池",
      animOverridesSectionIdleStatic: "單張靜態閒置狀態",
      animOverridesSectionSleepFull: "完整睡眠序列",
      animOverridesSectionSleepDirect: "直接睡模式",
      animReactionDrag: "拖曳（按住）",
      animReactionClickLeft: "戳（左）",
      animReactionClickRight: "戳（右）",
      animReactionAnnoyed: "煩躁（連續戳）",
      animReactionDouble: "點兩下",
      animOverridesWideHitboxToggle: "寬點按區",
      animOverridesWideHitboxDesc: "幫這一張影格開啟更寬的點按區。素材視覺超出預設桌寵輪廓時很有用。",
      animOverridesWideHitboxResetToTheme: "還原主題預設值",
      animOverridesAspectWarning: "這個素材長寬比和原檔差了 {pct}%，點按區和位置可能要手動校準。",
      animOverridesExpandRow: "展開",
      animOverridesModalTitle: "選素材檔案",
      animOverridesModalSubtitle: "將檔案加入目前主題的 assets 目錄後，可以在這裡重新整理列表再選一次。",
      animOverridesModalEmpty: "目前主題裡還沒有可以用的素材。",
      animOverridesModalSelected: "目前選取的檔案",
      animOverridesModalUse: "使用此檔案",
      animOverridesModalCancel: "取消",
      animOverridesRefresh: "重新整理列表",
      animOverridesSubtabAnimations: "動畫",
      animOverridesSubtabSounds: "音效",
      animOverridesSubtabMap: "開關",
      soundOverridesSectionTitle: "音效自訂",
      soundOverridesSectionSubtitle: "自訂目前主題的音效檔案。所選檔案會複製到主題專用的自訂音效資料夾。",
      soundOverridesLabelComplete: "完成提示 (complete)",
      soundOverridesLabelConfirm: "權限提示 (confirm)",
      soundOverridesPreview: "試聽",
      soundOverridesChangeFile: "選擇檔案…",
      soundOverridesReset: "回到預設值",
      soundOverridesOpenDir: "開啟自訂音效資料夾",
      soundOverridesOverriddenTooltip: "已自訂",
      soundOverridesEmpty: "目前主題沒有宣告音效。",
      toastSoundOverrideSetOk: (name, file) => `已將「${name}」改為 ${file}`,
      toastSoundOverrideResetOk: (name) => `已將「${name}」還原為主題預設`,
      toastSoundOverrideFailed: (message) => `音效自訂失敗：${message}`,
      aboutTitle: "關於 Clawd",
      aboutSubtitle: "陪你寫程式的像素螃蟹。",
      aboutTagline: "陪你 AI 程式設計的桌面夥伴。",
      aboutVersionLabel: "版本",
      aboutCheckForUpdates: "檢查更新",
      aboutUpdateAvailableHint: "有新版本: v{version}",
      autoUpdateCheck: "自動檢查更新",
      autoUpdateCheckDescription: "每 12 小時靜默向 GitHub 查一次，發現新版本才會通知您。",
      aboutRepositoryLabel: "程式碼儲存庫",
      aboutLicenseLabel: "開源授權",
      aboutAuthorLabel: "作者",
      aboutMaintainersLabel: "維護者",
      aboutContributorsLabel: "貢獻者",
      aboutFooter: "Clawd 是開源專案 · 和社群一起做出來的。",
      aboutCleanupButton: "移除 Clawd 整合…",
      aboutCleanupConfirm: "要移除本機各 agent 內的 Clawd hooks / plugins，並在 Clawd 中將所有 agent 整合標記為未安裝且停用嗎？不會刪除 agent 應用程式或使用者設定。",
      aboutCleanupRunning: "正在移除整合…",
      aboutCleanupSuccess: "已從 {affected} 個整合移除 {removed} 項，失敗 {failed} 項。",
      aboutCleanupFailed: "整合清理失敗",
      aboutCleanupKiroNote: "Kiro 的 clawd.json 已保留，只移除了 hook 條目。",
      mobileTitle: "行動端 / PWA",
      mobileDesc: "連接手機查看工作階段狀態。唯讀區域網路預覽——無寫入或核准操作。",
      mobileToggle: "啟用行動端預覽",
      mobileToggleDesc: "啟動區域網路 WebSocket 橋接，同一網路下的手機可即時查看工作階段狀態。",
      mobileDisabled: "請先啟用上方開關以啟動區域網路橋接。",
      mobileLoading: "載入連線資訊…",
      mobileError: "無法載入連線資訊。",
      mobileRegenerate: "重新生成令牌",
      mobileRegenerateConfirm: "確定重新生成令牌？所有已連線裝置將斷線，需要重新配對。",
      mobileReset: "重置行動裝置存取",
      mobileResetConfirm: "確定重置行動裝置存取？所有裝置將斷線並產生新令牌。",
      aboutEasterEggToast: "\u{1F980} Coding shouldn't feel lonely. — Ruller_Lulu / 鹿鹿",
      aboutOpenExternalFailed: "無法開啟瀏覽器連結。",
    },
    ko: {
      settingsTitle: "설정",
      settingsSubtitle: "데스크톱에서 Clawd의 동작 방식을 설정합니다.",
      settingsTutorialReplayLink: "시작 가이드 다시 보기",
      settingsTutorialReplayFailed: "가이드를 열 수 없습니다",
      sidebarGeneral: "일반",
      sidebarAgents: "에이전트",
      sidebarTheme: "테마",
      sidebarAnimOverrides: "애니메이션 · 음향",
      sidebarShortcuts: "단축키",
      sidebarAbout: "정보",
      sidebarRemoteSsh: "원격 SSH",
      sidebarMobile: "모바일",
      sidebarTelegramApproval: "원격 승인",
      remoteApprovalTitle: "원격 승인",
      remoteApprovalSubtitle: "로컬 권한 요청을 원격 채널로 라우팅합니다. Secrets는 prefs에 저장하지 않으며 데스크톱 버블은 로컬 fallback으로 유지됩니다. 현재 Telegram과 Feishu를 지원합니다.",
      telegramApprovalChannelName: "Telegram",
      telegramApprovalCardKind_incomplete: "설정 미완성",
      telegramApprovalCardKind_ready: "활성화 가능",
      telegramApprovalCardKind_starting: "시작 중…",
      telegramApprovalCardKind_running: "실행 중",
      telegramApprovalCardKind_failed: "실패",
      telegramApprovalCardMissingBoth: "아래에서 bot token과 수신 user id를 저장한 후 계속하세요.",
      telegramApprovalCardMissingToken: "아래에서 bot token을 저장한 후 계속하세요.",
      telegramApprovalCardMissingRecipient: "아래에서 수신 user id를 저장한 후 계속하세요.",
      telegramApprovalCardReadyToEnable: "Token과 수신자가 모두 저장되었습니다. 3단계에서 스위치를 켜면 시작합니다.",
      telegramApprovalCardStarting: "Telegram 승인 sidecar에 연결 중…",
      telegramApprovalCardRunning: "Telegram 승인 실행 중. 승인 요청이 bot으로 전달됩니다.",
      telegramApprovalCardFailed: "Sidecar가 실패를 보고했습니다. 아래 메시지를 확인하거나 재시작하세요.",
      telegramMigrationLoading: "마이그레이션 상태 불러오는 중…",
      telegramMigrationTitle: "Telegram 봇 전송 방식(v0.9.0 스파이크)",
      telegramMigrationStateLabel: "상태",
      telegramMigrationRuntimeFailedSuffix: " (실행 상태: 실패 — {reason})",
      telegramMigrationRuntimeUnknown: "알 수 없음",
      telegramMigrationOwnerLabel: "현재 사용 중",
      telegramMigrationRunning: "실행 중",
      telegramMigrationStopped: "중지됨",
      telegramMigrationPolling: "폴링 중",
      telegramMigrationImportFailed: "네이티브 설정 가져오기 실패: {error}",
      telegramMigrationRetryImport: "가져오기 재시도",
      telegramMigrationConfigureBelow: "아래에서 Telegram 봇을 설정한 뒤 실행 방식을 선택하세요:",
      telegramMigrationTestAndSwitch: "네이티브 봇 테스트 후 전환",
      telegramMigrationEnableLegacy: "레거시 Sidecar 사용",
      telegramMigrationLegacyNotRunning: "레거시 Sidecar가 실행되고 있지 않습니다.",
      telegramMigrationRetryLegacy: "레거시 Sidecar 재시도",
      telegramMigrationNativeAvailable: "네이티브 Telegram 봇을 사용할 수 있습니다. 테스트 후 전환하면 레거시는 폴백으로 남습니다.",
      telegramMigrationTestAndSwitchShort: "네이티브 테스트 후 전환",
      telegramMigrationLegacyActive: "레거시 Sidecar가 사용 중입니다.",
      telegramMigrationDisableApproval: "Telegram 승인 비활성화",
      telegramMigrationWaitingTap: "Telegram에서 탭하기를 기다리는 중…(60초 제한)",
      telegramMigrationNativeActive: "네이티브 Telegram이 활성화되었습니다. 레거시 파일은 롤백을 위해 유지됩니다.",
      telegramMigrationRollbackToLegacy: "레거시로 롤백",
      telegramMigrationDeleteLegacyToken: "레거시 Token 파일 삭제",
      telegramMigrationSwitchingToLegacy: "레거시 승인으로 전환 중…",
      telegramMigrationWorking: "처리 중…",
      telegramMigrationTokenAlreadyRemoved: "Telegram Token 파일이 이미 삭제되어 있습니다.",
      telegramMigrationTokenDeleted: "Telegram Token 파일이 삭제되었습니다.",
      telegramMigrationTokenDeleteFailed: "Telegram Token 파일 삭제 실패",
      telegramMigrationErrorToast: "Telegram 마이그레이션: {code}",
      telegramApprovalStep1Title: "1. Bot Token",
      telegramApprovalBotToken: "Bot token",
      telegramApprovalBotTokenHintHtml: "[@BotFather](https://t.me/botfather)에서 /newbot으로 bot을 만들고 token을 여기에 붙여넣으세요. userData env 파일에 저장되며 clawd-prefs.json에는 저장되지 않습니다.",
      telegramApprovalBotTokenPlaceholder: "새 bot token 붙여넣기",
      telegramApprovalSaveToken: "Token 저장",
      telegramApprovalSaving: "저장 중…",
      telegramApprovalTokenEmpty: "Telegram bot token을 먼저 붙여넣으세요.",
      telegramApprovalTokenSaved: "Token이 저장되었습니다.",
      telegramApprovalTokenSaveFailed: "Telegram bot token을 저장할 수 없습니다.",
      telegramApprovalTokenConfiguredLabel: "Token 설정됨",
      telegramApprovalTokenConfiguredNoMask: "(저장됨)",
      telegramApprovalTokenConfiguredDesc: "Bot token이 디스크에 저장되었습니다. bot을 교체했다면 변경하세요.",
      telegramApprovalReplaceToken: "Token 변경",
      telegramApprovalCancel: "취소",
      telegramApprovalTokenCurrent: "현재: {masked}",
      telegramApprovalTokenReplaceHintHtml: "새 token을 붙여넣으면 기존 token을 덮어씁니다. 새 token이 필요하면 [@BotFather](https://t.me/botfather)에서 발급받으세요.",
      telegramApprovalStep2Title: "2. 수신자",
      telegramApprovalRecipientLabel: "당신의 Telegram 사용자 ID",
      telegramApprovalRecipientHintHtml: "Telegram에서 [@userinfobot](https://t.me/userinfobot)에게 /start를 보내 숫자 ID를 받으세요. Clawd는 이 ID를 승인 가능한 유일한 사용자이자 승인 카드 수신 chat으로 사용합니다. 본인의 bot에게도 먼저 /start를 한 번 보내 비공개 채팅을 활성화해야 합니다.",
      telegramApprovalRecipientPlaceholder: "예: 123456789",
      telegramApprovalRecipientEmpty: "Telegram 사용자 ID를 먼저 입력하세요.",
      telegramApprovalRecipientInvalid: "Telegram 사용자 ID는 5자리 이상의 숫자여야 합니다.",
      telegramApprovalSaveRecipient: "수신자 저장",
      telegramApprovalConfigSaved: "Telegram 승인 설정이 저장되었습니다.",
      telegramApprovalStep3Title: "3. 활성화 및 테스트",
      telegramApprovalToggle: "Telegram 승인 활성화",
      telegramApprovalToggleDesc: "설정되면 처리 가능한 로컬 권한 버블이 Telegram 승인 카드도 보냅니다.",
      telegramApprovalCompletionOutput: "완료 알림 출력",
      telegramApprovalCompletionOutputDesc: "Telegram 완료 알림에 assistant 텍스트를 포함할지 제어합니다. 전체 답변에는 코드, 파일 내용 또는 assistant가 쓴 민감한 정보가 포함될 수 있습니다.",
      telegramApprovalCompletionOutput_off: "끄기",
      telegramApprovalCompletionOutput_full: "전체 답변",
      telegramApprovalCompletionOutputFullConfirm: "전체 답변은 assistant의 마지막 텍스트를 Telegram으로 보냅니다. assistant가 코드, 파일 내용 또는 민감한 정보를 썼다면 함께 전송될 수 있습니다. 계속할까요?",
      telegramApprovalDirectSend: "Direct Send (paste-only)",
      telegramApprovalDirectSendDesc: "Clawd 완료 알림에 답장하면 해당 로컬 터미널을 포커스하고 한 줄 텍스트를 붙여넣습니다. Enter는 누르지 않습니다.",
      telegramApprovalTest: "테스트 메시지",
      telegramApprovalTestDesc: "agent 권한 요청에 연결되지 않은 독립 테스트 승인 카드를 보냅니다.",
      telegramApprovalSendTest: "테스트 보내기",
      telegramApprovalTesting: "대기 중…",
      telegramApprovalTestSent: "Telegram 테스트가 완료되었습니다.",
      telegramApprovalTestFailed: "Telegram 테스트 실패.",
      telegramApprovalPrereqLabel: "먼저 1단계와 2단계를 완료하세요",
      telegramApprovalPrereqDesc: "아직 필요한 것:",
      telegramApprovalPrereqMissingToken: "bot token",
      telegramApprovalPrereqMissingRecipient: "수신자 user id",
      feishuApprovalChannelName: "Feishu",
      feishuApprovalCardMissingBoth: "Save app credentials and an approver user id below to continue.",
      feishuApprovalCardMissingSecrets: "Save Feishu app credentials below to continue.",
      feishuApprovalCardMissingApprover: "Save the approver user id below to continue.",
      feishuApprovalCardReadyToEnable: "App credentials and approver are saved. Flip the switch in step 3 to start.",
      feishuApprovalCardStarting: "Connecting to Feishu long connection…",
      feishuApprovalCardRunning: "Feishu approval is live. Approval cards will route to your bot.",
      feishuApprovalCardFailed: "Feishu approval reported a failure. Check the message below or restart.",
      feishuApprovalStep1Title: "1. App Credentials",
      feishuApprovalSecretsLabel: "Feishu app credentials",
      feishuApprovalSecretsHintHtml: "Paste the App ID and App Secret from your Feishu self-built app. Verification Token and Encrypt Key are optional unless enabled in Feishu event settings.",
      feishuApprovalSecretsReplaceHintHtml: "Pasting new values replaces the saved fields. Blank fields keep their current values.",
      feishuApprovalAppIdPlaceholder: "App ID, e.g. cli_xxx",
      feishuApprovalAppSecretPlaceholder: "App Secret",
      feishuApprovalVerificationTokenPlaceholder: "Verification Token (optional)",
      feishuApprovalEncryptKeyPlaceholder: "Encrypt Key (optional)",
      feishuApprovalSaveSecrets: "Save secrets",
      feishuApprovalSaving: "Saving…",
      feishuApprovalSecretsRequired: "Enter App ID and App Secret first.",
      feishuApprovalSecretsEmpty: "Enter at least one Feishu secret to update.",
      feishuApprovalSecretsSaved: "Feishu secrets saved.",
      feishuApprovalSecretsSaveFailed: "Could not save Feishu secrets.",
      feishuApprovalSecretsConfiguredLabel: "Secrets configured",
      feishuApprovalSecretsConfiguredNoMask: "(stored)",
      feishuApprovalSecretsConfiguredDesc: "Feishu app credentials are saved on disk, outside clawd-prefs.json.",
      feishuApprovalSecretsCurrent: "Current App ID: {masked}",
      feishuApprovalReplaceSecrets: "Replace secrets",
      feishuApprovalStep2Title: "2. Approver",
      feishuApprovalApproverLabel: "Feishu approver user id",
      feishuApprovalApproverHintHtml: "Use the same id type that your app receives in card action callbacks. For a normal bot-to-user card, open_id is usually the right choice.",
      feishuApprovalApproverPlaceholder: "e.g. ou_xxx",
      feishuApprovalApproverEmpty: "Enter the Feishu approver user id first.",
      feishuApprovalSaveApprover: "Save approver",
      feishuApprovalConfigSaved: "Feishu approval config saved.",
      feishuApprovalStep3Title: "3. Enable & Test",
      feishuApprovalToggle: "Enable Feishu approval",
      feishuApprovalToggleDesc: "When configured, actionable local permission bubbles also send an approval card to Feishu.",
      feishuApprovalConnectionTimeout: "Long connection timeout",
      feishuApprovalConnectionTimeoutDesc: "How long Clawd waits for Feishu to connect or reconnect before showing failed. The SDK can still keep reconnecting in the background.",
      feishuApprovalConnectionTimeoutOption: "{seconds}s",
      feishuApprovalTest: "Test card",
      feishuApprovalTestDesc: "Sends a standalone Feishu approval card. It is not attached to any agent permission request.",
      feishuApprovalSendTest: "Send test",
      feishuApprovalTesting: "Waiting…",
      feishuApprovalTestSent: "Feishu test completed.",
      feishuApprovalTestFailed: "Feishu test failed.",
      feishuApprovalPrereqLabel: "Finish steps 1 and 2 first",
      feishuApprovalPrereqDesc: "Still needed:",
      feishuApprovalPrereqMissingSecrets: "app credentials",
      feishuApprovalPrereqMissingApprover: "approver user id",
      remoteSshTitle: "원격 SSH",
      remoteSshSubtitle: "원클릭 SSH 터널을 관리해 원격 AI 코딩 세션을 매끄럽게 사용하세요. Clawd는 비밀번호나 패스프레이즈를 저장하지 않으며, 기존 ssh-agent / SSH 키를 사용합니다.",
      remoteSshSectionProfiles: "프로필",
      remoteSshAddProfile: "+ 프로필 추가",
      remoteSshEmpty: "아직 프로필이 없습니다. \"프로필 추가\"를 눌러 첫 원격 SSH 터널을 설정하세요.",
      remoteSshConnect: "연결",
      remoteSshDisconnect: "연결 해제",
      remoteSshAuthenticate: "최초 인증",
      remoteSshAuthenticateHint: "시스템 터미널을 열어 호스트 키 확인이나 SSH 키 로드를 완료하세요.",
      remoteSshOpenTerminal: "터미널 열기",
      remoteSshDeploy: "Hook 배포 / 복구",
      remoteSshDeploying: "배포 중…",
      remoteSshDeploySuccess: "Hook 파일이 배포되었습니다.",
      remoteSshDeployDriftWarning: "배포 중 설정이 변경되어 이전 설정으로 배포됨 — 다시 배포하세요",
      remoteSshEdit: "편집",
      remoteSshDelete: "삭제",
      remoteSshDeleteConfirm: "프로필 \"{label}\"을(를) 삭제할까요? 되돌릴 수 없습니다.",
      remoteSshAddTitle: "원격 SSH 프로필 추가",
      remoteSshEditTitle: "원격 SSH 프로필 편집",
      remoteSshSave: "저장",
      remoteSshCancel: "취소",
      remoteSshAddSuccess: "프로필이 추가되었습니다.",
      remoteSshUpdateSuccess: "프로필이 업데이트되었습니다.",
      remoteSshFieldLabel: "레이블",
      remoteSshFieldHost: "호스트",
      remoteSshFieldPort: "SSH 포트 (기본 22)",
      remoteSshFieldIdentityFile: "Identity 파일 (선택)",
      remoteSshFieldIdentityFileHint: "개인 키의 절대 경로. 비워 두면 ssh-agent 또는 ~/.ssh/config가 사용됩니다.",
      remoteSshFieldRemoteForwardPort: "원격 포워드 포트",
      remoteSshFieldHostPrefix: "호스트 접두사 (선택)",
      remoteSshFieldHostPrefixHint: "Sessions 메뉴에 표시되는 짧은 이름. 제어 문자, 따옴표, 백슬래시, $, `, !는 피하세요.",
      remoteSshFieldAutoStartCodex: "연결 시 Codex 폴백 모니터 자동 시작",
      remoteSshFieldConnectOnLaunch: "Clawd 시작 시 자동 연결",
      remoteSshStatus_idle: "유휴",
      remoteSshStatus_connecting: "연결 중…",
      remoteSshStatus_connected: "연결됨",
      remoteSshStatus_reconnecting: "재연결 중…",
      remoteSshStatus_failed: "실패",
      remoteSshStep_verify: "로컬 파일 확인",
      remoteSshStep_mkdir: "원격 hooks 디렉터리 생성",
      "remoteSshStep_check-node": "원격 Node 확인",
      remoteSshStep_scp: "Hook 파일 복사",
      "remoteSshStep_host-prefix": "호스트 접두사 쓰기",
      "remoteSshStep_install-claude": "Claude hooks 등록",
      "remoteSshStep_install-codex": "Codex hooks 등록",
      "remoteSshStep_install-copilot": "Copilot hooks 등록",
      "remoteSshStep_remote-shell": "원격 셸 감지",
      remoteSshErrAuthDenied: "인증에 실패했습니다. \"최초 인증\"을 눌러 호스트 키 확인이나 SSH 키를 로드하세요.",
      remoteSshErrHostKey: "호스트 키가 신뢰되지 않았습니다. \"최초 인증\"으로 지문을 확인하세요.",
      remoteSshErrForwardFailed: "원격 포트를 사용할 수 없습니다. 다른 원격 포워드 포트(23333-23337)를 시도하세요.",
      remoteSshErrBadConfig: "ssh가 설정을 거부했습니다. 프로필 항목을 확인하세요.",
      remoteSshErrIdentityMissing: "Identity 파일을 읽을 수 없습니다. 경로와 권한을 확인하세요.",
      remoteSshErrDns: "호스트 이름을 해석할 수 없습니다.",
      remoteSshErrNetTimeout: "네트워크 시간 초과. 곧 재시도합니다.",
      remoteSshErrNetUnreachable: "네트워크에 연결할 수 없습니다. 곧 재시도합니다.",
      remoteSshErrBrokenPipe: "연결이 끊어졌습니다. 곧 재연결합니다.",
      remoteSshErrSpawnFailed: "ssh 프로세스를 시작할 수 없습니다.",
      remoteSshErrSshMissing: "OpenSSH 클라이언트가 없습니다. Windows: 설정 → 앱 → 선택적 기능 → OpenSSH 클라이언트 추가.",
      remoteSshErrWindowsOpenSshLegacy: "이 Windows OpenSSH 버전은 Remote SSH 상태 확인에 너무 오래되었습니다. OpenSSH 8.x 이상으로 업그레이드하세요.",
      remoteSshErrWindowsCmdShell: "원격 기본 셸이 Windows cmd.exe입니다. Remote SSH는 POSIX 셸이 필요합니다 (mkdir -p / ~ 확장 / sh -c). 원격에서 OpenSSH DefaultShell을 Git Bash 또는 WSL bash로 설정한 뒤 다시 Deploy를 누르세요. PowerShell: New-ItemProperty -Path 'HKLM:\\SOFTWARE\\OpenSSH' -Name DefaultShell -Value 'C:\\Program Files\\Git\\bin\\bash.exe' -PropertyType String -Force",
      remoteSshErrNoLocalPort: "로컬 Clawd 서버가 아직 시작되지 않았습니다.",
      remoteSshErrUnknownStrikes: "인식할 수 없는 오류가 연속 발생했습니다. 프로필과 로그를 확인하세요.",
      remoteSshProbeLocalUnhealthy: "터널은 연결되었지만 로컬 Clawd 서버가 비정상입니다.",
      remoteSshProbeUnresponsive: "터널은 연결되었지만 Clawd가 응답하지 않습니다. Clawd가 실행 중인지 확인하세요.",
      remoteSshProbePortHijack: "원격 포트가 다른 HTTP 서비스에 의해 사용 중입니다. 다른 원격 포워드 포트로 변경하세요.",
      remoteSshProbeHttpTimeout: "원격 HTTP 응답 시간 초과. 곧 재시도합니다.",
      remoteSshProbeNodeNotExec: "원격 node 바이너리가 실행 가능하지 않습니다. 권한을 확인하세요.",
      remoteSshProbeNodeMissing: "원격에 Node가 없습니다. Deploy를 먼저 실행하거나 원격에 Node를 설치하세요.",
      remoteSshProbeSignal: "Probe 프로세스가 중단되었습니다. 곧 재시도합니다.",
      remoteSshHooksLabel: "Hooks:",
      remoteSshHooksNever: "배포되지 않음",
      remoteSshHooksDeployedJustNow: "방금 배포됨",
      remoteSshHooksDeployedAgoMin: "{n}분 전 배포됨",
      remoteSshHooksDeployedAgoHr: "{n}시간 전 배포됨",
      remoteSshHooksDeployedAgoDay: "{n}일 전 배포됨",
      remoteSshConnectWarnNoDeploy: "Hook 파일이 아직 배포되지 않았습니다. Connect는 SSH 터널만 구축하므로, Deploy / Repair Hooks를 눌러야 원격 세션에 Clawd가 반응합니다.",
      codexHookReviewReminder: "다음 단계: Codex CLI를 열고 /hooks를 실행해 새 후크를 검토하고 활성화하세요(Codex가 검토 후에만 후크를 실행합니다).",
      doctorSidebarLabel: "Doctor",
      doctorTitle: "Clawd Doctor",
      doctorStatusUnknown: "알 수 없음",
      doctorStatusPass: "정상",
      doctorStatusWarning: "경고",
      doctorStatusCritical: "심각",
      doctorStatusInfo: "정보",
      doctorIssueCount: "문제 {count}개",
      doctorLastCheckedAt: (time) => `검사 ${time}`,
      doctorCheckLocalServer: "로컬 서버",
      doctorCheckAgentIntegrations: "에이전트 연동",
      doctorAgentSummaryOk: (count) => `${count} 정상`,
      doctorAgentSummaryAttention: (count) => `${count} 확인 필요`,
      doctorAgentSummaryNeedsAttention: "확인 필요",
      doctorAgentSummarySkipped: (count) => `${count} 건너뜀`,
      doctorAgentSummaryNoneActive: "활성화된 연동 없음",
      doctorCheckPermissionBubbles: "권한 버블",
      doctorCheckTheme: "테마",
      doctorCheckUnknown: "검사",
      doctorPrivacy: "개인정보 안내: 진단 보고서는 로컬에서 생성됩니다. Clawd는 데이터를 업로드하지 않으며 복사 전에 사용자 경로와 비밀값을 가립니다.",
      doctorCopyReport: "진단 보고서 복사",
      doctorRerun: "다시 검사",
      doctorClose: "닫기",
      doctorCopied: "진단 보고서를 복사했습니다",
      doctorCopyFailed: "진단 보고서를 복사할 수 없습니다.",
      doctorRunFailed: "진단 검사를 실행할 수 없습니다.",
      doctorFix: "수정",
      doctorFixing: "수정 중",
      doctorFixApplied: "수리를 완료했습니다.",
      doctorFixFailed: "이 문제를 수정할 수 없습니다.",
      doctorFixConfirmCodex: "Clawd가 Codex 설정의 [features].hooks를 true로 변경합니다. 계속할까요?",
      doctorFixConfirmCodexTitle: "Codex hooks를 켤까요?",
      doctorFixConfirmCodexDetail: "이 복구는 Codex 설정의 [features].hooks를 true로 변경합니다. 여기에서 확인하기 전에는 Clawd가 이 변경을 하지 않습니다.",
      doctorFixConfirmCodexAction: "켜고 복구",
      doctorFixConfirmCancel: "취소",
      doctorRestartButton: "Clawd 재시작",
      doctorRestarting: "재시작 중",
      doctorRestartConfirmTitle: "Clawd를 재시작할까요?",
      doctorRestartConfirmDetail: "Clawd가 종료된 뒤 다시 실행됩니다. 진행 중인 AI 코딩 에이전트 요청은 중단됩니다. 재시작 중에는 Doctor 창도 함께 닫힙니다.",
      doctorRestartConfirmAction: "지금 재시작",
      doctorNoResult: "아직 진단 결과가 없습니다.",
      doctorConnectionTitle: "연결 테스트",
      doctorConnectionInstruction: "아무 AI coding agent에서 메시지를 보낸 뒤 카운트다운이 끝나면 돌아오세요.",
      doctorConnectionIdle: "테스트 안 함",
      doctorConnectionTesting: "{seconds}초 대기",
      doctorConnectionHttpVerified: "HTTP 경로 확인됨",
      doctorConnectionHttpDropped: "HTTP는 동작하지만 이벤트가 삭제됨",
      doctorConnectionHttpBlocked: "HTTP 차단됨",
      doctorConnectionNoActivity: "활동 없음",
      doctorConnectionNoActivityHint: "테스트 중에 에이전트의 hook 트래픽이 Clawd에 도달하지 않았습니다. 아직 에이전트를 활성화하지 않았다면 설정에서 활성화하거나 설치한 뒤, 해당 에이전트에서 메시지를 보내고 다시 테스트하세요.",
      doctorConnectionError: "연결 테스트 실패",
      doctorTestConnection: "연결 테스트",
      doctorOpenLog: "디버그 로그 열기",
      doctorOpenLogOpened: "디버그 로그를 열었습니다",
      doctorOpenLogFailed: "디버그 로그를 열 수 없습니다.",
      shortcutsTitle: "단축키",
      shortcutsSubtitle: "펫 표시 전환과 권한 동작에 사용할 전역 단축키를 설정합니다. 비워 두면 해제됩니다.",
      shortcutLabelBubbleNextOption: "버블: 다음 항목",
      shortcutLabelBubblePrevOption: "버블: 이전 항목",
      shortcutLabelBubbleToggleOption: "버블: 항목 선택/해제",
      shortcutLabelBubbleSubmit: "버블: 답변 제출",
      shortcutBuiltinKeyTooltip: "내장 키, 변경할 수 없습니다",
      shortcutRecordButton: "변경",
      shortcutClearButton: "해제",
      shortcutResetButton: "기본값 복원",
      shortcutResetAllButton: "모두 기본값 복원",
      shortcutRecordingHint: "키 조합 (Esc)",
      shortcutUnassigned: "— 미지정 —",
      shortcutErrorConflict: "{other} 와(과) 충돌합니다. 다른 키를 사용해 주세요.",
      shortcutErrorSystemConflict: "시스템 또는 다른 앱이 이미 사용 중입니다.",
      shortcutErrorReserved: "예약된 단축키 조합입니다. 다른 키를 사용해 주세요.",
      shortcutErrorInvalid: "지원하지 않는 키 조합입니다.",
      shortcutErrorNeedsModifier: "단축키에는 하나 이상의 보조 키가 필요합니다.",
      shortcutErrorRegistrationFailed: "저장되었지만 현재는 시스템 충돌로 활성화되지 않았습니다. 다시 바인딩하거나 나중에 다시 시도해 주세요.",
      shortcutLabelTogglePet: "펫 표시 전환",
      shortcutLabelPermissionAllow: "권한: 허용",
      shortcutLabelPermissionDeny: "권한: 거부",
      shortcutToastSaved: "단축키가 업데이트되었습니다",
      sidebarSoon: "예정",
      sectionAppearance: "외관",
      sectionSession: "세션 관리",
      sectionAlerts: "알림 및 피드백",
      sectionBehavior: "동작 및 위치",
      sectionSystemStartup: "시스템 및 시작",
      sectionPermissions: "권한",
      hardwareBuddyTitle: "Hardware Buddy",
      hardwareBuddyDesc: "별도로 설치한 Clawstick runtime을 통해 페어링된 BLE 데스크 장치에 연결합니다. 권한 응답은 명시적으로 활성화되고 연결이 안전할 때만 켜집니다.",
      hardwareBuddyEnable: "Enable Hardware Buddy",
      hardwareBuddyEnableDesc: "Start the BLE sidecar and send state-only session snapshots by default.",
      hardwareBuddyAddress: "BLE address",
      hardwareBuddyAddressDesc: "Optional fixed device address. Leave empty to scan by name prefix.",
      hardwareBuddyNamePrefix: "Device name prefix",
      hardwareBuddyNamePrefixDesc: "Scan for devices whose advertised name starts with this text.",
      hardwareBuddyPermissions: "Allow hardware permission replies",
      hardwareBuddyPermissionsDesc: "Requires this opt-in plus a secure paired transport before Allow/Deny prompts appear on the device.",
      hardwareBuddyQuickCommands: "Quick Commands 켜기",
      hardwareBuddyQuickCommandsDesc: "로컬 preset 버튼을 표시해 adapter가 처리하는 quick_command 이벤트만 만듭니다. Clawd는 텍스트를 붙여넣거나 shell을 실행하지 않습니다.",
      hardwareBuddyQuickCommandPresets: "Quick Command presets",
      hardwareBuddyQuickCommandPresetsDesc: "preset을 클릭하면 active-session adapter용 검증된 이벤트를 큐에 넣습니다.",
      hardwareBuddyQuickCommandsDisabled: "preset 버튼을 쓰려면 Quick Commands를 켜세요.",
      hardwareBuddyQuickCommandsLoading: "presets 로드 중...",
      hardwareBuddyQuickCommandsUnavailable: "Quick Commands를 사용할 수 없습니다.",
      hardwareBuddyQuickCommandSent: "Quick Command가 큐에 추가되었습니다.",
      hardwareBuddyQuickCommandFailed: "Quick Command 실패: ",
      hardwareBuddyRepliesOn: "Replies on",
      hardwareBuddyRepliesOff: "Replies off",
      hardwareBuddyRepliesBlocked: "Replies waiting",
      hardwareBuddyTest: "Test approval",
      hardwareBuddyTestButton: "Send test",
      hardwareBuddyTestWaiting: "Waiting...",
      hardwareBuddyTestDesc: "Send a harmless approval request to the paired device.",
      hardwareBuddyTestPending: "Waiting for a button press on the device.",
      hardwareBuddyTestOk: "Device replied: {decision}",
      hardwareBuddyTestError: "Test approval failed.",
      hardwareBuddyTestErr_disabled: "Hardware Buddy is not enabled.",
      hardwareBuddyTestErr_permissions_off: "Hardware permission replies are disabled.",
      hardwareBuddyTestErr_not_secure: "Hardware Buddy is not connected over a secure link.",
      hardwareBuddyTestErr_timeout: "The device did not reply before the test timed out.",
      hardwareBuddyTestErr_no_decision: "Hardware Buddy test did not receive a decision.",
      hardwareBuddyTestErr_internal_error: "Hardware Buddy test failed inside Clawd.",
      hardwareBuddyTestDisabled: "Enable Hardware Buddy before testing approvals.",
      hardwareBuddyTestRepliesOff: "Turn on hardware permission replies before testing approvals.",
      hardwareBuddyTestNeedsSecure: "Connect over a secure paired link before testing approvals.",
      hardwareBuddyTestToastOk: "Hardware Buddy test reply received.",
      hardwareBuddyTestToastError: "Hardware Buddy test failed: ",
      hardwareBuddyStatus: "Connection status",
      hardwareBuddyStatus_off: "Off",
      hardwareBuddyStatus_idle: "Idle",
      hardwareBuddyStatus_searching: "Searching",
      hardwareBuddyStatus_connected: "Connected",
      hardwareBuddyStatus_secure: "Secure",
      hardwareBuddyStatus_error: "Needs attention",
      hardwareBuddyStatusOffDetail: "Hardware Buddy is disabled.",
      hardwareBuddyStatusError: "Needs attention",
      hardwareBuddyStatusErrorDetail: "Check the Hardware Buddy sidecar status.",
      hardwareBuddyStatusConnectedDetail: "{device} connected, secure link {secure}",
      hardwareBuddyStatusAddressDetail: "Looking for {address}.",
      hardwareBuddyStatusPrefixDetail: "Scanning for names starting with {prefix}.",
      hardwareBuddySecureOn: "on",
      hardwareBuddySecureOff: "off",
      hardwareBuddyErr_missing_bleak: "Install bleak",
      hardwareBuddyErr_python_missing: "Python missing",
      hardwareBuddyErr_auth_required: "Pair required",
      hardwareBuddyErr_device_not_found: "Device not found",
      hardwareBuddyErr_bad_config: "Bad config",
      hardwareBuddyErr_core_missing: "Clawstick 설치 필요",
      hardwareBuddyErr_sidecar_exited: "Sidecar exited",
      hardwareBuddyErr_sidecar_error: "Sidecar error",
      collapsibleExpand: "섹션 펼치기",
      collapsibleCollapse: "섹션 접기",
      agentsTitle: "에이전트",
      agentsSubtitle: "에이전트별로 추적을 켜거나 끕니다. 비활성화된 에이전트는 로그 모니터를 멈추고 HTTP 경계에서 hook 이벤트를 버리므로, 펫을 움직이거나 권한 말풍선을 띄우거나 세션을 유지하지 않습니다.",
      agentsEmpty: "등록된 에이전트가 없습니다.",
      agentSectionConnected: "연결됨",
      agentSectionRecommended: "로컬에서 감지됨",
      agentSectionUnavailable: "로컬에서 감지되지 않음",
      eventSourceHook: "훅",
      eventSourceLogPoll: "로그 폴링",
      eventSourcePlugin: "플러그인",
      eventSourceExtension: "확장",
      badgePermissionBubble: "권한 말풍선",
      agentIntegrationInstalled: "설치됨",
      agentIntegrationNotInstalled: "미설치",
      agentIntegrationInstall: "설치",
      agentIntegrationUninstall: "제거",
      agentIntegrationWorking: "처리 중...",
      agentIntegrationUninstallConfirm: "이 Clawd 관리 통합을 제거할까요? Clawd가 관리하는 hooks, 플러그인 또는 확장만 제거됩니다.",
      agentIntegrationInstallSkipped: "{agents}의 로컬 설치를 찾지 못해 통합을 쓰지 않았습니다.",
      agentListSeparator: ", ",
      agentInstallHintTitle: "감지된 에이전트 연결",
      agentInstallHintDesc: "{agents}에 대한 로컬 신호를 감지했습니다. Clawd 관리 hooks, 플러그인 또는 확장을 설치해 Clawd에 연결할 수 있습니다.",
      agentInstallHintInstallRecommended: "추천 항목 설치",
      agentInstallHintDismiss: "나중에",
      agentInstanceSection: "인스턴스",
      agentInstanceScanWsl: "WSL 스캔",
      agentInstanceScanWslDesc: "WSL 배포판에서 에이전트 설치 재스캔",
      agentInstanceScanning: "스캔 중...",
      agentInstancePair: "페어링",
      agentInstancePairing: "페어링 중...",
      agentInstancePaired: "페어링 완료",
      agentInstanceUnpair: "페어링 해제",
      agentInstanceUnpairing: "페어링 해제 중...",
      agentInstanceUnpaired: "페어링 해제됨",
      agentInstanceDeployedBadge: "훅 배포됨",
      agentInstancePairedNoConnectivity: "페어링됐지만 이 배포판에서 Clawd에 접근할 수 없습니다 — WSL NAT 네트워크는 localhost를 공유하지 않습니다. .wslconfig에 networkingMode=mirrored를 설정하고 WSL을 재시작하세요.",
      agentCleanupHintTitle: "누락된 로컬 에이전트 검토",
      agentCleanupHintDesc: "Clawd가 {agents}에 연결되어 있지만 일치하는 로컬 설치를 찾지 못했습니다. Clawd 관리 통합을 제거하면 해당 에이전트의 시작 동기화와 이벤트 입력도 꺼집니다.",
      agentCleanupHintRemove: "통합 제거",
      agentCleanupHintDismiss: "지금은 유지",
      rowAgentPermissions: "팝업 말풍선 표시",
      rowAgentPermissionsDesc: "끄면 이 에이전트는 Clawd 말풍선 대신 자체 터미널에서 프롬프트를 처리합니다.",
      rowAgentSubagentPermissions: "서브 에이전트 권한 말풍선",
      rowAgentSubagentPermissionsDesc: "끄면 Task 서브 에이전트의 권한 요청은 Clawd 말풍선 없이 터미널에서 처리됩니다.",
      rowCodexPermissionMode: "Codex 권한 모드",
      rowCodexPermissionModeDesc: "Native는 Codex AutoReview와 터미널 프롬프트를 그대로 사용합니다. Intercept는 Clawd 허용/거부 말풍선을 표시합니다.",
      codexPermissionModeNative: "Native",
      codexPermissionModeIntercept: "Intercept",
      rowCodexNativeNotificationSound: "Native 알림 소리",
      rowCodexNativeNotificationSoundDesc: "끄면 Codex Native 권한 프롬프트는 알림 애니메이션만 표시하고 프롬프트 소리는 재생하지 않습니다. 완료 소리는 계속 재생됩니다.",
      agentCodexHookNeedsAttention: "주의 필요",
      codexHookHealthReasonDisabled: "Codex 훅이 설정에서 꺼져 있어([features].hooks=false) Codex가 승인 훅을 실행하지 않습니다. 활성화하거나 Doctor → Fix를 실행하세요.",
      codexHookHealthReasonNeedsReview: "Clawd의 Codex 훅이 등록됐지만 Codex에서 승인이 필요합니다 — Codex에서 /hooks를 실행하거나 Doctor → Fix를 사용하세요.",
      codexHookHealthReasonInactive: "Clawd의 Codex 훅이 활성화되지 않아 승인 프롬프트가 표시되지 않습니다. 통합을 다시 설치하거나 Doctor → Fix를 실행하세요.",
      rowCodexHookHealthNotify: "Codex 훅이 비활성일 때 알림",
      rowCodexHookHealthNotifyDesc: "실행 시 Codex 공식 승인 훅이 비활성화되었거나 검토가 필요하면 일회성 트레이 알림을 표시합니다. 문제마다 한 번만 표시되며 매번 표시되지 않습니다.",
      rowAgentIdleAlerts: "입력 대기 알림",
      rowAgentIdleAlertsDesc: "이 에이전트의 Notification 훅이 트리거하는 종 애니메이션과 사운드입니다(예: Claude Code는 약 60초 유휴 시 전송). 권한 말풍선에는 영향을 주지 않습니다.",
      rowLanguage: "언어",
      rowLanguageDesc: "메뉴와 말풍선의 인터페이스 언어입니다.",
      rowSound: "효과음",
      rowSoundEnabled: "효과음 사용",
      rowSoundDesc: "Clawd가 작업을 마치거나 입력을 요청할 때 알림음을 재생합니다.",
      rowVolume: "볼륨",
      rowVolumeDesc: "효과음 볼륨을 조절합니다. 효과음이 꺼져 있을 때는 비활성화됩니다.",
      rowLowPowerIdleMode: "저전력 idle",
      rowLowPowerIdleModeDesc: "Clawd가 몇 초 동안 가만히 있으면 idle SVG 애니메이션을 일시 중지하고, 활동이 있으면 즉시 다시 재생합니다.",
      rowKeepAwakeWhileWorking: "작업 중 절전 차단",
      rowKeepAwakeWhileWorkingDesc: "에이전트 작업이 진행 중일 때 컴퓨터가 절전 모드로 들어가지 않도록 막고, 작업이 끝나면 다시 절전을 허용합니다.",
      rowFlashTaskbarOnComplete: "작업 완료 시 트레이 아이콘 깜빡임",
      rowFlashTaskbarOnCompleteDesc: "AI 작업이 완료되면 시스템 트레이 아이콘이 깜빡여 다른 창에서 작업 중에도 알 수 있습니다.",
      rowFlash: "트레이 아이콘 깜빡임",
      rowFlashDesc: "작업 완료 시 시스템 트레이 아이콘 깜빡임을 설정합니다.",
      rowFlashInterval: "깜빡임 간격",
      rowFlashIntervalDesc: "아이콘이 일반과 강조 사이를 전환하는 속도입니다.",
      rowFlashDuration: "깜빡임 지속 시간",
      rowFlashDurationDesc: "깜빡임이 지속되는 시간입니다. 0으로 설정하면 수동으로 멈출 때까지 계속 깜빡입니다.",
      unitMilliseconds: "ms",
      valueAlways: "항상 깜빡임",
      rowSessionHud: "세션 HUD",
      rowSessionHudDesc: "펫 아래에 활성 세션 상태를 표시합니다.",
      rowSessionHudMaster: "사용",
      sessionHudSummaryEnabled: "HUD: {state}",
      sessionHudSummaryLabels: "라벨: {state}",
      sessionHudSummaryElapsed: "시간: {state}",
      sessionHudSummaryContextUsage: "컨텍스트: {state}",
      sessionHudSummaryCleanup: "자동 정리: {state}",
      rowSessionHudStateLabels: "상태 라벨 표시",
      rowSessionHudStateLabelsDesc: "작업 중, 생각 중, 대기 중 등 활성 세션에 간결한 상태 라벨을 표시합니다. 완료된 세션은 계속 종 모양을 사용합니다.",
      rowSessionHudElapsed: "HUD 시간 표시",
      rowSessionHudElapsedDesc: "세션 HUD에 경과 시간을 표시합니다. 끄면 HUD 폭이 줄어듭니다.",
      rowSessionHudContextUsage: "컨텍스트 사용량 표시",
      rowSessionHudContextUsageDesc: "세션이 컨텍스트 창 데이터를 보고하면 간결한 토큰 사용량을 표시합니다.",
      shortcutLabelPetReveal: "펫 클릭: 세션 HUD 표시",
      shortcutLabelOpenDashboard: "Ctrl / ⌘ + 펫 클릭: 대시보드 열기",
      sessionHudPinTooltip: "HUD 고정",
      sessionHudUnpinTooltip: "HUD 고정 해제",
      sessionHudFocusUnavailableTooltip: "터미널 포커스를 사용할 수 없습니다",
      sessionHudRemoteFocusUnavailableTooltip: "원격 세션은 터미널 포커스를 사용할 수 없습니다",
      rowSessionHudCleanupDetached: "분리된 세션 자동 정리",
      rowSessionHudCleanupDetachedDesc: "종료된 세션의 터미널이 닫히면 HUD에서 숨긴 뒤 잠시 후 세션 목록에서 제거합니다.",
      rowSessionCleanupGroup: "세션 정리",
      rowSessionCleanupGroupDesc: "Clawd가 비활성 세션을 얼마나 기다린 뒤 정리할지 설정합니다. 주로 터미널이 보이지 않는 원격 SSH 세션에 적용됩니다 — 장시간 원격 작업은 한도를 늘리거나, 세션 타임아웃을 0으로 두면 시간으로는 정리하지 않습니다.",
      rowStaleSession: "세션 타임아웃 (유휴)",
      rowStaleSessionDesc: "원격 SSH 세션은 이 시간 동안 유휴 상태면 제거됩니다. 로컬 세션은 터미널이 열려 있는 동안 제거되지 않고 idle로 흐려질 뿐입니다. 기본 10분. 0 = 시간으로 제거 안 함. 작업 타임아웃보다 작을 수 없습니다.",
      rowStaleWorking: "작업 타임아웃",
      rowStaleWorkingDesc: "세션이 working/thinking 상태로 멈춰 있으면 이 시간이 지나면 idle로 표시합니다. 기본 5분. 세션 타임아웃이 0이 아니면 그 값으로 제한됩니다.",
      rowStaleDetached: "터미널 닫힌 후 정리 지연",
      rowStaleDetachedDesc: "'분리된 세션 자동 정리'가 켜져 있을 때만 동작합니다. 세션의 터미널 창이 닫힌 뒤 이 초만큼 기다린 다음 HUD에서 제거합니다. 기본 30초.",
      unitMinutes: "분",
      unitSeconds: "초",
      valueDisabled: "비활성화",
      actionResetSessionCleanup: "기본값으로 되돌리기",
      rowSessionDashboard: "세션 대시보드",
      rowSessionDashboardDesc: "Claude Code, Codex 등 모든 에이전트의 활성 세션을 한 창에서 확인합니다.",
      actionOpenDashboard: "열기",
      rowOpenAtLogin: "로그인 시 자동 실행",
      rowOpenAtLoginDesc: "로그인할 때 Clawd를 자동으로 시작합니다.",
      rowManageClaudeHooks: "Claude hooks 자동 관리",
      rowManageClaudeHooksDesc: "시작 시 Claude hooks를 동기화하고 `~/.claude/settings.json`이 덮어써지면 다시 복구합니다.",
      rowManageClaudeHooksOffNote: "이 옵션을 꺼도 이후 자동 관리만 중지됩니다. 기존 Claude hooks는 직접 연결 해제하기 전까지 남아 있습니다.",
      actionDisconnectClaudeHooks: "연결 해제",
      claudeHooksDisableConfirmTitle: "Claude hooks 자동 관리를 끌까요?",
      claudeHooksDisableConfirmDetail: "자동 관리만 끄면 `~/.claude/settings.json`에 이미 설치된 Claude hooks는 그대로 유지됩니다. `Claude Code와 함께 시작` 설정도 나중에 다시 켤 수 있도록 유지됩니다.",
      claudeHooksDisableConfirmDisconnect: "끄고 설치된 hooks 제거",
      claudeHooksDisableConfirmDisableOnly: "자동 관리만 끄기",
      claudeHooksDisableConfirmKeep: "자동 관리 계속 유지",
      claudeHooksDisconnectConfirmTitle: "Claude hooks 연결을 해제할까요?",
      claudeHooksDisconnectConfirmDetail: "`~/.claude/settings.json`에서 Clawd가 관리하는 Claude hooks를 제거하고 자동 관리를 끕니다. `Claude Code와 함께 시작` 설정은 나중에 다시 켤 수 있도록 유지됩니다.",
      claudeHooksDisconnectConfirmAction: "hooks 연결 해제",
      claudeHooksDisconnectConfirmKeep: "계속 유지",
      rowStartWithClaude: "Claude Code와 함께 시작",
      rowStartWithClaudeDesc: "Claude Code 세션이 시작될 때마다 Clawd를 자동으로 실행합니다.",
      rowStartWithClaudeDisabledDesc: "Claude hooks 자동 관리가 필요합니다. 관리가 꺼져 있는 동안에는 포트 변경이나 설정 덮어쓰기를 자동으로 복구하지 않습니다.",
      rowHideBubbles: "말풍선 숨기기",
      rowHideBubblesDesc: "Clawd의 권한, 알림, 업데이트 말풍선을 숨깁니다.",
      rowBubbleFollow: "말풍선이 Clawd를 따라다님",
      rowBubbleFollowDesc: "권한 및 업데이트 말풍선을 화면 구석 대신 펫 옆에 표시합니다.",
      rowAutoApproveAll: "모든 요청 자동 승인",
      rowAutoApproveAllDesc: "위험: 모든 에이전트의 권한 요청(명령 실행, 파일 수정, 삭제)을 묻지 않고 자동 승인합니다. 에이전트별 토글과 방해 금지는 계속 적용됩니다.",
      menuAutoApproveAll: "모든 요청 자동 승인",
      autoApproveAllConfirmTitle: "모든 요청 자동 승인을 켤까요?",
      autoApproveAllConfirmDetail: "셸 명령 실행과 파일 삭제를 포함해 모든 에이전트의 모든 권한 요청이 자동으로 승인됩니다. Clawd가 먼저 묻지 않습니다. 에이전트의 동작을 완전히 신뢰할 때만 켜세요.",
      autoApproveAllConfirmEnable: "자동 승인 켜기",
      autoApproveAllConfirmCancel: "취소",
      rowBubblePolicy: "말풍선 표시 및 자동 닫기",
      rowBubblePolicyDesc: "말풍선 종류별 표시 여부와 수동 조작이 필요 없는 말풍선의 유지 시간을 설정합니다.",
      bubblePermissionLabel: "권한 / 상호작용 말풍선",
      bubblePermissionDesc: "끄면 승인 프롬프트가 에이전트 터미널/TUI로 돌아갑니다. Plan review와 AskUserQuestion 프롬프트는 에이전트가 멈추지 않도록 계속 표시됩니다. 초 값은 훅 연결이 반쯤 끊긴 상태로 멈춘 말풍선을 자동으로 닫는 선택적 옵션입니다(0 = 끔).",
      bubbleNotificationLabel: "알림 말풍선",
      bubbleNotificationDesc: "스위치는 Codex / Kimi Code 수동 알림 표시를 제어합니다. 초 값은 자동 종료 상한이며, 후속 상태가 더 일찍 닫을 수 있습니다. 0이면 숨깁니다.",
      bubbleUpdateLabel: "업데이트 말풍선",
      bubbleUpdateDesc: "스위치는 업데이트 확인, 다운로드, 성공, 실패, 재시작 안내 표시를 제어합니다. 초 값은 표시 시간을 제어합니다.",
      bubbleUpdateWarning: "업데이트 말풍선을 숨기면 오류 원인이나 재시작 안내를 놓칠 수 있어 권장하지 않습니다.",
      bubbleSecondsPrefix: "유지",
      bubbleSecondsUnit: "초",
      bubbleSecondsInvalid: "초 값은 0부터 3600 사이의 정수여야 합니다",
      bubblePolicySummaryPermission: "권한 {state}",
      bubblePolicySummaryNotification: "알림 최대 {seconds}초",
      bubblePolicySummaryUpdate: "업데이트 {seconds}초",
      bubblePolicySummaryOn: "켜짐",
      bubblePolicySummaryOff: "꺼짐",
      updateBubbleDisableConfirmTitle: "업데이트 말풍선을 숨길까요?",
      updateBubbleDisableConfirmDetail: "업데이트 실패 원인, 다운로드 완료 메시지, 재시작 안내를 놓칠 수 있습니다. 업데이트 흐름은 계속 실행되지만 Clawd는 업데이트 말풍선을 표시하지 않습니다.",
      updateBubbleDisableConfirmAction: "업데이트 말풍선 숨기기",
      updateBubbleDisableConfirmCancel: "계속 표시",
      rowAllowEdgePinning: "화면 가장자리에 붙이기 허용",
      rowAllowEdgePinningDesc: "화면 가장자리에 붙을 때 상/하단 장식(반짝임·건물·말풍선 등)이 잘릴 수 있습니다.",
      rowDisableMiniMode: "미니 모드 끄기",
      rowDisableMiniModeDesc: "켜면 가장자리 스냅이나 메뉴로 미니 모드에 들어가지 않습니다.",
      rowFreeRoam: "자유 배회",
      rowFreeRoamDesc: "대기 중에 Clawd가 책상 위를 자유롭게 돌아다닙니다. 마우스를 움직이면 멈춥니다.",
      rowKeepSizeAcrossDisplays: "디스플레이 간 크기 유지",
      rowKeepSizeAcrossDisplaysDesc: "다른 모니터로 옮겨도 자동으로 리사이즈하지 않습니다. 슬라이더는 현재 디스플레이 기준으로 계속 작동합니다.",
      rowFullscreenOverlay: "전체화면 게임 위에 띄우기",
      rowFullscreenOverlayDesc: "Windows에서 전체화면 게임 위에서도 펫을 계속 쓸 수 있게 합니다 — 위에 유지되고 드래그할 수 있으며, 게임의 포커스를 빼앗지 않습니다. 끄면 최적화 전 기본 동작으로 돌아갑니다. 테두리 없는 전체화면 게임에서는 펫이 항상 위에 표시됩니다. 완전히 없애려면 펫 숨기기를 사용하세요. (독점 전체화면 게임에서는 동작이 다를 수 있습니다.)",
      rowSize: "크기",
      rowSizeDesc: "드래그하여 펫 크기를 조절하세요.",
      rowTextScale: "텍스트 크기",
      rowTextScaleDesc: "이 디스플레이의 말풍선, 세션 HUD, 대시보드, 설정 텍스트 크기를 조절합니다. 디스플레이마다 따로 기억되며 펫 본체에는 영향을 주지 않습니다.",
      textScaleResetTitle: "100%로 재설정",
      rowSizeResetTitle: "기본 크기로 재설정",
      placeholderTitle: "곧 제공 예정",
      placeholderDesc: "이 패널은 향후 Clawd 릴리스에 추가됩니다. 계획은 docs/plans/plan-settings-panel.md에 있습니다.",
      toastSaveFailed: "저장 실패: ",
      toastAgentIntegrationInstalled: "통합을 설치했습니다.",
      toastAgentIntegrationUninstalled: "통합을 제거했습니다.",
      toastAgentInstallHintInstalled: "추천 통합을 설치했습니다.",
      toastAgentInstallHintSkipped: "{agents}의 로컬 설치를 찾지 못해 통합을 쓰지 않았습니다.",
      toastAgentInstallHintPartialSkipped: "{success}개를 설치했습니다. 로컬 설치가 없어 {agents}는 건너뛰었습니다.",
      toastAgentInstallHintPartial: "{success}개 설치, {failed}개 실패: {message}",
      toastAgentCleanupHintRemoved: "누락된 통합을 제거했습니다.",
      toastAgentCleanupHintPartial: "{success}개 제거, {failed}개 실패: {message}",
      langEnglish: "English",
      langChinese: "简体中文",
      langTraditionalChinese: "繁體中文",
      langKorean: "한국어",
      langJapanese: "日本語",
      themeTitle: "테마",
      themeSubtitle: "Clawd의 테마를 선택합니다. 카드에는 기본 제공/능력 배지가 표시되어 tracked/static/mini 차이를 미리 볼 수 있습니다.",
      themeEmpty: "사용 가능한 테마가 없습니다.",
      themeBadgeBuiltin: "기본 제공",
      themeBadgeCodexPet: "Codex Pet",
      themeBadgeActive: "활성",
      themeActionGroupCodexPets: "Codex Pets",
      themeActionGroupUserThemes: "사용자 테마",
      themeRefreshImportedPets: "Codex Pets 새로고침",
      themeImportPetZip: "Codex Pet 패키지 가져오기 (.zip)",
      themeOpenCodexPetsFolder: "Codex Pet 폴더 열기",
      themeImportUserThemeZip: "Clawd 테마 패키지 가져오기 (.zip)",
      themeImportUserThemeZipHint: "Clawd 테마 zip: 루트 또는 하나의 최상위 폴더에 theme.json이 있어야 합니다. SVG, GIF, APNG, PNG, WebP, JPG, JPEG 파일은 assets/에 넣으세요. Codex Pet 패키지는 위의 가져오기를 사용하세요.",
      themeOpenUserThemesFolder: "테마 폴더 열기",
      themeRefreshThemes: "테마 새로고침",
      themeGroupBuiltIn: "기본 제공",
      themeGroupImportedCodexPets: "가져온 Codex Pets",
      themeGroupUserThemes: "사용자 테마",
      themeUninstallPetLabel: "제거",
      themeCapabilityTracked: "커서 추적 idle",
      themeCapabilityAnimated: "애니메이션 idle",
      themeCapabilityStatic: "정적 테마",
      themeCapabilityMini: "Mini",
      themeCapabilityDirectSleep: "직접 수면",
      themeCapabilityFineMotion: "섬세한 모션",
      themeCapabilityNoReactions: "반응 없음",
      themeActiveIndicator: "\u2713 활성",
      themeThumbMissing: "\u{1F3AD}",
      themeDeleteLabel: "테마 삭제",
      themeVariantStripLabel: "변형",
      toastThemeDeleted: "테마를 삭제했습니다.",
      toastThemeDeleteFailed: "테마 삭제 실패: ",
      toastCodexPetsRefreshOk: (imported, updated, unchanged, removed, invalid, switched) =>
        `Codex Pet을 새로고침했습니다: 신규 ${imported}, 업데이트 ${updated}, 변경 없음 ${unchanged}, 제거 ${removed}${invalid ? `, 무효 ${invalid}` : ""}${switched ? "; 활성 테마를 Clawd로 되돌림" : ""}.`,
      toastCodexPetsRefreshFailed: (message) => `Codex Pet 새로고침 실패: ${message}`,
      toastCodexPetsFolderFailed: "Codex Pet 폴더를 열지 못했습니다: ",
      toastUserThemesFolderFailed: "테마 폴더를 열지 못했습니다: ",
      toastUserThemeZipImportOk: (name) => `테마 "${name}"을(를) 가져왔습니다.`,
      toastUserThemeZipImportFailed: (message) => `테마 (.zip)을 가져오지 못했습니다: ${message}`,
      toastCodexPetZipImportOk: (name) => `"${name}"을(를) 가져와 전환했습니다.`,
      toastCodexPetZipImportFailed: (message) => `Codex Pet (.zip)을 가져오지 못했습니다: ${message}`,
      toastCodexPetRemoveOk: (name, switched) => `"${name}"을(를) 제거했습니다${switched ? " (Clawd로 전환됨)" : ""}.`,
      toastCodexPetRemoveFailed: (message) => `가져온 펫을 제거하지 못했습니다: ${message}`,
      animMapTitle: "애니메이션 맵",
      animMapSubtitle: "개별 인터럽트 애니메이션을 끕니다. 이벤트는 계속 발생하지만 Clawd는 선택한 상태의 화면과 소리만 건너뜁니다.",
      animMapSemanticsNote: "비활성화 = 화면 없음 + 소리 없음. 권한 말풍선, 세션, 터미널 포커스는 그대로 작동합니다.",
      animMapResetAll: "모두 초기화",
      animMapAttentionLabel: "작업 완료 (happy)",
      animMapAttentionDesc: "에이전트가 한 턴을 마쳤을 때 재생되는 즐거운 바운스 애니메이션입니다. (Stop)",
      animMapErrorLabel: "오류 플래시",
      animMapErrorDesc: "도구 호출이 실패했을 때 흔들리는 애니메이션입니다.",
      animMapSweepingLabel: "컨텍스트 정리",
      animMapSweepingDesc: "PreCompact / 컨텍스트 정리 중 빗자루 애니메이션입니다.",
      animMapNotificationLabel: "알림",
      animMapNotificationDesc: "권한 요청과 입력 요청 시 재생되는 종 애니메이션입니다.",
      animMapCarryingLabel: "워크트리 운반",
      animMapCarryingDesc: "worktree가 생성될 때 재생되는 운반 애니메이션입니다.",
      toastAnimMapResetOk: "애니메이션과 음향 덮어쓰기를 초기화했습니다.",
      animOverridesTitle: "애니메이션 · 음향",
      animOverridesSubtitle: "현재 테마의 카드별 애니메이션 파일을 바꾸고, 페이드/복귀 타이밍을 조정하며, 테마 음향을 교체합니다.",
      animOverridesLoading: "애니메이션 및 사운드 교체 설정을 불러오는 중…",
      animOverridesCurrentTheme: "현재 테마",
      animOverridesReplacementConfig: "애니메이션 덮어쓰기 설정",
      animOverridesOpenThemeTab: "테마 탭 열기",
      animOverridesOpenAssets: "assets 폴더 열기",
      animOverridesResetAll: "테마 기본값으로 복원",
      animOverridesExport: "설정 내보내기…",
      animOverridesImport: "설정 가져오기…",
      toastAnimOverridesExportOk: (count, path) => `${count}개 테마 덮어쓰기를 내보냈습니다 → ${path}`,
      toastAnimOverridesImportOk: (count) => `${count}개 테마 덮어쓰기를 가져왔습니다.`,
      toastAnimOverridesExportEmpty: "내보낼 덮어쓰기가 없습니다.",
      toastAnimOverridesExportFailed: (message) => `내보내기 실패: ${message}`,
      toastAnimOverridesImportFailed: (message) => `가져오기 실패: ${message}`,
      animOverridesChangeFile: "파일 변경",
      animOverridesPreview: "한 번 미리보기",
      animOverridesReset: "슬롯 초기화",
      animOverridesFade: "페이드",
      animOverridesFadeIn: "진입 시 페이드 인",
      animOverridesFadeOut: "종료 시 페이드 아웃",
      animOverridesSaveFade: "페이드 저장",
      animOverridesDuration: "자동 복귀",
      animOverridesSaveDuration: "타이밍 저장",
      animOverridesContinuousHint: "지속 상태는 여기서 auto-return을 편집할 수 없습니다.",
      animOverridesAssetCycle: "에셋 주기",
      animOverridesSuggestedTiming: "권장 타이밍",
      animOverridesTimingEstimated: "추정값",
      animOverridesTimingFallback: "테마 기본값",
      animOverridesTimingUnavailable: "사용할 수 없음",
      animOverridesDisplayHintWarning: "displayHintMap이 런타임에 이 슬롯을 덮어쓸 수 있습니다.",
      animOverridesFallbackHint: "이 슬롯은 현재 {state}(으)로 폴백됩니다.",
      animOverridesOverriddenTooltip: "기본값에서 변경됨",
      animOverridesUseOwnFile: "개별 파일 사용",
      animOverridesDurationIdle: "유지 시간",
      animOverridesSectionIdle: "Idle",
      animOverridesSectionWork: "작업",
      animOverridesSectionInterrupts: "인터럽트",
      animOverridesSectionSleep: "수면",
      animOverridesSectionMini: "Mini Mode",
      animOverridesSectionReactions: "반응 애니메이션",
      animOverridesSectionIdleTracked: "커서 추적 idle",
      animOverridesSectionIdleAnimated: "idle 랜덤 풀",
      animOverridesSectionIdleStatic: "단일 정적 idle",
      animOverridesSectionSleepFull: "전체 수면 시퀀스",
      animOverridesSectionSleepDirect: "직접 수면",
      animReactionDrag: "드래그 (누름)",
      animReactionClickLeft: "콕 찌르기 (왼쪽)",
      animReactionClickRight: "콕 찌르기 (오른쪽)",
      animReactionAnnoyed: "짜증 (연속 찌르기)",
      animReactionDouble: "더블탭",
      animOverridesWideHitboxToggle: "넓은 클릭 영역",
      animOverridesWideHitboxDesc: "이 프레임에 더 넓은 클릭 영역을 사용합니다. 애셋이 기본 펫 실루엣을 넘어설 때 유용합니다.",
      animOverridesWideHitboxResetToTheme: "테마 기본값으로 복원",
      animOverridesAspectWarning: "이 애셋의 가로세로 비율이 원본과 {pct}% 차이납니다. 클릭 영역과 위치를 수동으로 조정해야 할 수 있습니다.",
      animOverridesExpandRow: "펼치기",
      animOverridesModalTitle: "에셋 파일 선택",
      animOverridesModalSubtitle: "파일을 현재 테마의 assets 폴더에 추가한 뒤 여기서 목록을 새로고침하세요.",
      animOverridesModalEmpty: "이 테마에는 아직 지원되는 에셋이 없습니다.",
      animOverridesModalSelected: "선택된 파일",
      animOverridesModalUse: "이 파일 사용",
      animOverridesModalCancel: "취소",
      animOverridesRefresh: "목록 새로고침",
      animOverridesSubtabAnimations: "애니메이션",
      animOverridesSubtabSounds: "사운드",
      animOverridesSubtabMap: "켜기 / 끄기",
      soundOverridesSectionTitle: "음향 덮어쓰기",
      soundOverridesSectionSubtitle: "현재 테마의 음향 파일을 교체합니다. 선택한 파일은 테마별 덮어쓰기 폴더로 복사됩니다.",
      soundOverridesLabelComplete: "작업 완료 (complete)",
      soundOverridesLabelConfirm: "권한 요청 (confirm)",
      soundOverridesPreview: "재생",
      soundOverridesChangeFile: "파일 선택…",
      soundOverridesReset: "기본값으로 복원",
      soundOverridesOpenDir: "덮어쓰기 폴더 열기",
      soundOverridesOverriddenTooltip: "덮어쓰기됨",
      soundOverridesEmpty: "현재 테마에는 선언된 음향이 없습니다.",
      toastSoundOverrideSetOk: (name, file) => `'${name}'을(를) ${file}(으)로 교체했습니다`,
      toastSoundOverrideResetOk: (name) => `'${name}'을(를) 테마 기본값으로 복원했습니다`,
      toastSoundOverrideFailed: (message) => `음향 덮어쓰기 실패: ${message}`,
      aboutTitle: "Clawd 정보",
      aboutSubtitle: "당신의 AI 코딩 세션을 지켜보는 픽셀 게.",
      aboutTagline: "AI 코딩 여정을 함께하는 데스크톱 동반자.",
      aboutVersionLabel: "버전",
      aboutCheckForUpdates: "업데이트 확인",
      aboutUpdateAvailableHint: "새 버전 있음: v{version}",
      autoUpdateCheck: "업데이트 자동 확인",
      autoUpdateCheckDescription: "12시간마다 GitHub를 조용히 확인하고, 새 버전이 있을 때만 알려드립니다.",
      aboutRepositoryLabel: "저장소",
      aboutLicenseLabel: "라이선스",
      aboutAuthorLabel: "제작",
      aboutMaintainersLabel: "메인테이너",
      aboutContributorsLabel: "기여자",
      aboutFooter: "Clawd는 오픈 소스 · 커뮤니티와 함께 만듭니다.",
      aboutCleanupButton: "Clawd 통합 제거…",
      aboutCleanupConfirm: "로컬 에이전트의 Clawd hooks/plugins를 제거하고 Clawd의 모든 에이전트 통합을 미설치 및 비활성 상태로 표시할까요? 에이전트 앱이나 사용자 설정은 삭제하지 않습니다.",
      aboutCleanupRunning: "통합 제거 중…",
      aboutCleanupSuccess: "{affected}개 통합에서 {removed}개 항목을 제거했습니다. 실패: {failed}.",
      aboutCleanupFailed: "통합 정리에 실패했습니다",
      aboutCleanupKiroNote: "Kiro clawd.json은 유지하고 hook 항목만 제거했습니다.",
      mobileTitle: "모바일 / PWA",
      mobileDesc: "휴대폰을 연결하여 세션을 모니터링합니다. 읽기 전용 LAN 미리보기 — 쓰기 또는 승인 작업 불가.",
      mobileToggle: "모바일 미리보기 활성화",
      mobileToggleDesc: "LAN WebSocket 브릿지를 시작하여 같은 네트워크의 휴대폰에서 세션 상태를 실시간으로 볼 수 있습니다.",
      mobileDisabled: "LAN 브릿지를 시작하려면 위의 토글을 활성화하세요.",
      mobileLoading: "연결 정보 로딩 중…",
      mobileError: "연결 정보를 불러올 수 없습니다.",
      mobileRegenerate: "토큰 재생성",
      mobileRegenerateConfirm: "토큰을 재생성하시겠습니까? 연결된 모든 기기가 연결 해제되며 다시 페어링해야 합니다.",
      mobileReset: "모바일 액세스 초기화",
      mobileResetConfirm: "모바일 액세스를 초기화하시겠습니까? 모든 기기가 연결 해제되고 새 토큰이 생성됩니다.",
      aboutEasterEggToast: "\u{1F980} Coding shouldn't feel lonely. — Ruller_Lulu / \u9e7f\u9e7f",
      aboutOpenExternalFailed: "링크를 브라우저에서 열 수 없습니다.",
    },
    ja: {
      settingsTitle: "設定",
      settingsSubtitle: "Clawd のデスクトップでの動作を設定します。",
      settingsTutorialReplayLink: "はじめにガイドを開く",
      settingsTutorialReplayFailed: "ガイドを開けませんでした",
      sidebarGeneral: "一般",
      sidebarAgents: "エージェント",
      sidebarTheme: "テーマ",
      sidebarAnimOverrides: "アニメーション・サウンド",
      sidebarShortcuts: "ショートカット",
      sidebarAbout: "情報",
      sidebarRemoteSsh: "リモート SSH",
      sidebarMobile: "モバイル",
      sidebarTelegramApproval: "リモート承認",
      remoteApprovalTitle: "リモート承認",
      remoteApprovalSubtitle: "ローカルの権限リクエストをリモートチャンネルにルーティングします。Secrets は prefs に保存せず、デスクトップの吹き出しはローカル fallback として残ります。現在は Telegram と Feishu に対応しています。",
      telegramApprovalChannelName: "Telegram",
      telegramApprovalCardKind_incomplete: "設定未完了",
      telegramApprovalCardKind_ready: "有効化可能",
      telegramApprovalCardKind_starting: "起動中…",
      telegramApprovalCardKind_running: "実行中",
      telegramApprovalCardKind_failed: "失敗",
      telegramApprovalCardMissingBoth: "下の欄で bot token と受信先 user id を保存してから続けてください。",
      telegramApprovalCardMissingToken: "下の欄で bot token を保存してから続けてください。",
      telegramApprovalCardMissingRecipient: "下の欄で受信先 user id を保存してから続けてください。",
      telegramApprovalCardReadyToEnable: "Token と受信先がどちらも保存済みです。ステップ 3 のスイッチを入れると開始します。",
      telegramApprovalCardStarting: "Telegram 承認 sidecar に接続中…",
      telegramApprovalCardRunning: "Telegram 承認が稼働中。承認リクエストが bot に届きます。",
      telegramApprovalCardFailed: "Sidecar がエラーを返しました。下のメッセージを確認するか再起動してください。",
      telegramMigrationLoading: "移行状態を読み込み中…",
      telegramMigrationTitle: "Telegram ボット転送方式(v0.9.0 スパイク)",
      telegramMigrationStateLabel: "状態",
      telegramMigrationRuntimeFailedSuffix: "（実行状態：失敗 — {reason}）",
      telegramMigrationRuntimeUnknown: "不明",
      telegramMigrationOwnerLabel: "現在の使用状況",
      telegramMigrationRunning: "実行中",
      telegramMigrationStopped: "停止中",
      telegramMigrationPolling: "ポーリング中",
      telegramMigrationImportFailed: "ネイティブ設定のインポートに失敗しました：{error}",
      telegramMigrationRetryImport: "インポートを再試行",
      telegramMigrationConfigureBelow: "下で Telegram ボットを設定してから、実行方法を選んでください：",
      telegramMigrationTestAndSwitch: "ネイティブボットをテストして切り替え",
      telegramMigrationEnableLegacy: "レガシー Sidecar を有効化",
      telegramMigrationLegacyNotRunning: "レガシー Sidecar が実行されていません。",
      telegramMigrationRetryLegacy: "レガシー Sidecar を再試行",
      telegramMigrationNativeAvailable: "ネイティブ Telegram ボットが利用可能です。テストして切り替えると、レガシーはフォールバックとして残ります。",
      telegramMigrationTestAndSwitchShort: "ネイティブをテストして切り替え",
      telegramMigrationLegacyActive: "レガシー Sidecar が使用中です。",
      telegramMigrationDisableApproval: "Telegram 承認を無効化",
      telegramMigrationWaitingTap: "Telegram でのタップを待っています…（60秒でタイムアウト）",
      telegramMigrationNativeActive: "ネイティブ Telegram が有効です。レガシーファイルはロールバック用に保持されます。",
      telegramMigrationRollbackToLegacy: "レガシーにロールバック",
      telegramMigrationDeleteLegacyToken: "レガシー Token ファイルを削除",
      telegramMigrationSwitchingToLegacy: "レガシー承認に切り替え中…",
      telegramMigrationWorking: "処理中…",
      telegramMigrationTokenAlreadyRemoved: "Telegram Token ファイルはすでに削除されています。",
      telegramMigrationTokenDeleted: "Telegram Token ファイルを削除しました。",
      telegramMigrationTokenDeleteFailed: "Telegram Token ファイルの削除に失敗しました",
      telegramMigrationErrorToast: "Telegram 移行：{code}",
      telegramApprovalStep1Title: "1. Bot Token",
      telegramApprovalBotToken: "Bot token",
      telegramApprovalBotTokenHintHtml: "[@BotFather](https://t.me/botfather) で /newbot を使って bot を作り、token をここに貼り付けます。token は userData env ファイルに保存され、clawd-prefs.json には保存されません。",
      telegramApprovalBotTokenPlaceholder: "新しい bot token を貼り付け",
      telegramApprovalSaveToken: "Token 保存",
      telegramApprovalSaving: "保存中…",
      telegramApprovalTokenEmpty: "先に Telegram bot token を貼り付けてください。",
      telegramApprovalTokenSaved: "Token を保存しました。",
      telegramApprovalTokenSaveFailed: "Telegram bot token を保存できません。",
      telegramApprovalTokenConfiguredLabel: "Token 設定済み",
      telegramApprovalTokenConfiguredNoMask: "（保存済み）",
      telegramApprovalTokenConfiguredDesc: "Bot token はディスクに保存済みです。bot を入れ替えた場合は再保存してください。",
      telegramApprovalReplaceToken: "Token を変更",
      telegramApprovalCancel: "キャンセル",
      telegramApprovalTokenCurrent: "現在: {masked}",
      telegramApprovalTokenReplaceHintHtml: "新しい token を貼り付けると既存のものを上書きします。新しい token が必要なら [@BotFather](https://t.me/botfather) で取得してください。",
      telegramApprovalStep2Title: "2. 受信者",
      telegramApprovalRecipientLabel: "あなたの Telegram ユーザー ID",
      telegramApprovalRecipientHintHtml: "Telegram で [@userinfobot](https://t.me/userinfobot) に /start を送って数値 ID を取得します。Clawd はこの ID を唯一の承認者と承認カードを送る chat の両方として使います。事前に自分の bot にも /start を一度送ってプライベートチャットを有効にしてください。",
      telegramApprovalRecipientPlaceholder: "例：123456789",
      telegramApprovalRecipientEmpty: "Telegram ユーザー ID を先に入力してください。",
      telegramApprovalRecipientInvalid: "Telegram ユーザー ID は 5 桁以上の数値である必要があります。",
      telegramApprovalSaveRecipient: "受信者を保存",
      telegramApprovalConfigSaved: "Telegram 承認設定を保存しました。",
      telegramApprovalStep3Title: "3. 有効化とテスト",
      telegramApprovalToggle: "Telegram 承認を有効化",
      telegramApprovalToggleDesc: "設定済みの場合、操作可能なローカル権限吹き出しから Telegram 承認カードも送信します。",
      telegramApprovalCompletionOutput: "完了通知の出力",
      telegramApprovalCompletionOutputDesc: "Telegram の完了通知に assistant テキストを含めるかを制御します。全文には、assistant が書いたコード、ファイル内容、機密情報が含まれる場合があります。",
      telegramApprovalCompletionOutput_off: "オフ",
      telegramApprovalCompletionOutput_full: "全文",
      telegramApprovalCompletionOutputFullConfirm: "全文は assistant の最後のテキストを Telegram に送信します。assistant がコード、ファイル内容、機密情報を書いた場合、それも送られる可能性があります。続行しますか？",
      telegramApprovalDirectSend: "Direct Send（貼り付けのみ）",
      telegramApprovalDirectSendDesc: "Clawd の完了通知に返信すると、対応するローカル端末をフォーカスして 1 行のテキストを貼り付けます。Enter は送信しません。",
      telegramApprovalTest: "テストメッセージ",
      telegramApprovalTestDesc: "agent 権限リクエストに紐づかない単独のテスト承認カードを送ります。",
      telegramApprovalSendTest: "テスト送信",
      telegramApprovalTesting: "待機中…",
      telegramApprovalTestSent: "Telegram テストが完了しました。",
      telegramApprovalTestFailed: "Telegram テストに失敗しました。",
      telegramApprovalPrereqLabel: "先にステップ 1 と 2 を完了してください",
      telegramApprovalPrereqDesc: "まだ必要なもの:",
      telegramApprovalPrereqMissingToken: "bot token",
      telegramApprovalPrereqMissingRecipient: "受信者 user id",
      feishuApprovalChannelName: "Feishu",
      feishuApprovalCardMissingBoth: "Save app credentials and an approver user id below to continue.",
      feishuApprovalCardMissingSecrets: "Save Feishu app credentials below to continue.",
      feishuApprovalCardMissingApprover: "Save the approver user id below to continue.",
      feishuApprovalCardReadyToEnable: "App credentials and approver are saved. Flip the switch in step 3 to start.",
      feishuApprovalCardStarting: "Connecting to Feishu long connection…",
      feishuApprovalCardRunning: "Feishu approval is live. Approval cards will route to your bot.",
      feishuApprovalCardFailed: "Feishu approval reported a failure. Check the message below or restart.",
      feishuApprovalStep1Title: "1. App Credentials",
      feishuApprovalSecretsLabel: "Feishu app credentials",
      feishuApprovalSecretsHintHtml: "Paste the App ID and App Secret from your Feishu self-built app. Verification Token and Encrypt Key are optional unless enabled in Feishu event settings.",
      feishuApprovalSecretsReplaceHintHtml: "Pasting new values replaces the saved fields. Blank fields keep their current values.",
      feishuApprovalAppIdPlaceholder: "App ID, e.g. cli_xxx",
      feishuApprovalAppSecretPlaceholder: "App Secret",
      feishuApprovalVerificationTokenPlaceholder: "Verification Token (optional)",
      feishuApprovalEncryptKeyPlaceholder: "Encrypt Key (optional)",
      feishuApprovalSaveSecrets: "Save secrets",
      feishuApprovalSaving: "Saving…",
      feishuApprovalSecretsRequired: "Enter App ID and App Secret first.",
      feishuApprovalSecretsEmpty: "Enter at least one Feishu secret to update.",
      feishuApprovalSecretsSaved: "Feishu secrets saved.",
      feishuApprovalSecretsSaveFailed: "Could not save Feishu secrets.",
      feishuApprovalSecretsConfiguredLabel: "Secrets configured",
      feishuApprovalSecretsConfiguredNoMask: "(stored)",
      feishuApprovalSecretsConfiguredDesc: "Feishu app credentials are saved on disk, outside clawd-prefs.json.",
      feishuApprovalSecretsCurrent: "Current App ID: {masked}",
      feishuApprovalReplaceSecrets: "Replace secrets",
      feishuApprovalStep2Title: "2. Approver",
      feishuApprovalApproverLabel: "Feishu approver user id",
      feishuApprovalApproverHintHtml: "Use the same id type that your app receives in card action callbacks. For a normal bot-to-user card, open_id is usually the right choice.",
      feishuApprovalApproverPlaceholder: "e.g. ou_xxx",
      feishuApprovalApproverEmpty: "Enter the Feishu approver user id first.",
      feishuApprovalSaveApprover: "Save approver",
      feishuApprovalConfigSaved: "Feishu approval config saved.",
      feishuApprovalStep3Title: "3. Enable & Test",
      feishuApprovalToggle: "Enable Feishu approval",
      feishuApprovalToggleDesc: "When configured, actionable local permission bubbles also send an approval card to Feishu.",
      feishuApprovalConnectionTimeout: "Long connection timeout",
      feishuApprovalConnectionTimeoutDesc: "How long Clawd waits for Feishu to connect or reconnect before showing failed. The SDK can still keep reconnecting in the background.",
      feishuApprovalConnectionTimeoutOption: "{seconds}s",
      feishuApprovalTest: "Test card",
      feishuApprovalTestDesc: "Sends a standalone Feishu approval card. It is not attached to any agent permission request.",
      feishuApprovalSendTest: "Send test",
      feishuApprovalTesting: "Waiting…",
      feishuApprovalTestSent: "Feishu test completed.",
      feishuApprovalTestFailed: "Feishu test failed.",
      feishuApprovalPrereqLabel: "Finish steps 1 and 2 first",
      feishuApprovalPrereqDesc: "Still needed:",
      feishuApprovalPrereqMissingSecrets: "app credentials",
      feishuApprovalPrereqMissingApprover: "approver user id",
      remoteSshTitle: "リモート SSH",
      remoteSshSubtitle: "ワンクリック SSH トンネルを管理し、リモートの AI コーディングセッションをローカルのように扱えます。Clawd はパスワードやパスフレーズを保存せず、既存の ssh-agent / SSH キーを使います。",
      remoteSshSectionProfiles: "プロフィール",
      remoteSshAddProfile: "+ プロフィール追加",
      remoteSshEmpty: "プロフィールがまだありません。「プロフィール追加」を押して最初のリモート SSH トンネルを設定してください。",
      remoteSshConnect: "接続",
      remoteSshDisconnect: "切断",
      remoteSshAuthenticate: "初回認証",
      remoteSshAuthenticateHint: "システムターミナルを開いてホストキー確認や SSH キーのロードを完了します。",
      remoteSshOpenTerminal: "ターミナルを開く",
      remoteSshDeploy: "Hook デプロイ / 修復",
      remoteSshDeploying: "デプロイ中…",
      remoteSshDeploySuccess: "Hook ファイルをデプロイしました。",
      remoteSshDeployDriftWarning: "デプロイ中に設定が変更されたため旧設定でデプロイされました — 再度デプロイしてください",
      remoteSshEdit: "編集",
      remoteSshDelete: "削除",
      remoteSshDeleteConfirm: "プロフィール \"{label}\" を削除しますか？元に戻せません。",
      remoteSshAddTitle: "リモート SSH プロフィールを追加",
      remoteSshEditTitle: "リモート SSH プロフィールを編集",
      remoteSshSave: "保存",
      remoteSshCancel: "キャンセル",
      remoteSshAddSuccess: "プロフィールを追加しました。",
      remoteSshUpdateSuccess: "プロフィールを更新しました。",
      remoteSshFieldLabel: "ラベル",
      remoteSshFieldHost: "ホスト",
      remoteSshFieldPort: "SSH ポート (デフォルト 22)",
      remoteSshFieldIdentityFile: "Identity ファイル (任意)",
      remoteSshFieldIdentityFileHint: "秘密鍵の絶対パス。空欄にすると ssh-agent または ~/.ssh/config を使います。",
      remoteSshFieldRemoteForwardPort: "リモートフォワードポート",
      remoteSshFieldHostPrefix: "ホストプレフィックス (任意)",
      remoteSshFieldHostPrefixHint: "Sessions メニューに表示される短い名前。制御文字、引用符、バックスラッシュ、$、`、! は避けてください。",
      remoteSshFieldAutoStartCodex: "接続時に Codex フォールバックモニターを自動起動",
      remoteSshFieldConnectOnLaunch: "Clawd 起動時に自動接続",
      remoteSshStatus_idle: "待機",
      remoteSshStatus_connecting: "接続中…",
      remoteSshStatus_connected: "接続済み",
      remoteSshStatus_reconnecting: "再接続中…",
      remoteSshStatus_failed: "失敗",
      remoteSshStep_verify: "ローカルファイル確認",
      remoteSshStep_mkdir: "リモート hooks ディレクトリ作成",
      "remoteSshStep_check-node": "リモート Node 確認",
      remoteSshStep_scp: "Hook ファイルコピー",
      "remoteSshStep_host-prefix": "ホストプレフィックス書き込み",
      "remoteSshStep_install-claude": "Claude hooks 登録",
      "remoteSshStep_install-codex": "Codex hooks 登録",
      "remoteSshStep_install-copilot": "Copilot hooks 登録",
      "remoteSshStep_remote-shell": "リモートシェル検出",
      remoteSshErrAuthDenied: "認証に失敗しました。「初回認証」を押してホストキー確認や SSH キーのロードを完了してください。",
      remoteSshErrHostKey: "ホストキーがまだ信頼されていません。「初回認証」でフィンガープリントを確認してください。",
      remoteSshErrForwardFailed: "リモートポートが使用できません。別のリモートフォワードポート (23333-23337) を試してください。",
      remoteSshErrBadConfig: "ssh が設定を拒否しました。プロフィールを確認してください。",
      remoteSshErrIdentityMissing: "Identity ファイルを読み込めません。パスと権限を確認してください。",
      remoteSshErrDns: "ホスト名を解決できません。",
      remoteSshErrNetTimeout: "ネットワークタイムアウト。間もなく再試行します。",
      remoteSshErrNetUnreachable: "ネットワークに到達できません。間もなく再試行します。",
      remoteSshErrBrokenPipe: "接続が切断されました。間もなく再接続します。",
      remoteSshErrSpawnFailed: "ssh プロセスを起動できません。",
      remoteSshErrSshMissing: "OpenSSH クライアントが見つかりません。Windows: 設定 → アプリ → オプション機能 → OpenSSH クライアントを追加。",
      remoteSshErrWindowsOpenSshLegacy: "この Windows OpenSSH は古く、Remote SSH のヘルスチェックが安定しません。OpenSSH 8.x 以降へ更新してください。",
      remoteSshErrWindowsCmdShell: "リモートのデフォルトシェルが Windows cmd.exe です。Remote SSH には POSIX シェルが必要です (mkdir -p / ~ 展開 / sh -c)。リモート側で OpenSSH の DefaultShell を Git Bash か WSL bash に変更してから Deploy を再実行してください。PowerShell: New-ItemProperty -Path 'HKLM:\\SOFTWARE\\OpenSSH' -Name DefaultShell -Value 'C:\\Program Files\\Git\\bin\\bash.exe' -PropertyType String -Force",
      remoteSshErrNoLocalPort: "ローカル Clawd サーバーがまだ起動していません。",
      remoteSshErrUnknownStrikes: "認識できないエラーが連続して発生しました。プロフィールとログを確認してください。",
      remoteSshProbeLocalUnhealthy: "トンネルは確立しましたがローカル Clawd サーバーが異常です。",
      remoteSshProbeUnresponsive: "トンネルは確立しましたが Clawd が応答しません。Clawd が起動しているか確認してください。",
      remoteSshProbePortHijack: "リモートポートが別の HTTP サービスに使われています。別のリモートフォワードポートを試してください。",
      remoteSshProbeHttpTimeout: "リモート HTTP がタイムアウト。間もなく再試行します。",
      remoteSshProbeNodeNotExec: "リモートの node バイナリが実行できません。権限を確認してください。",
      remoteSshProbeNodeMissing: "リモートに Node が見つかりません。先に Deploy を実行するかリモートに Node をインストールしてください。",
      remoteSshProbeSignal: "Probe プロセスが中断されました。間もなく再試行します。",
      remoteSshHooksLabel: "Hooks:",
      remoteSshHooksNever: "未デプロイ",
      remoteSshHooksDeployedJustNow: "たった今デプロイ",
      remoteSshHooksDeployedAgoMin: "{n} 分前にデプロイ",
      remoteSshHooksDeployedAgoHr: "{n} 時間前にデプロイ",
      remoteSshHooksDeployedAgoDay: "{n} 日前にデプロイ",
      remoteSshConnectWarnNoDeploy: "Hook ファイルがまだデプロイされていません。Connect は SSH トンネルを張るだけなので、Deploy / Repair Hooks を押さないとリモートセッションに Clawd が反応しません。",
      codexHookReviewReminder: "次のステップ：Codex CLI を開いて /hooks を実行し、新しいフックをレビューして有効化してください（Codex はレビュー後にのみ実行します）。",
      doctorSidebarLabel: "Doctor",
      doctorTitle: "Clawd Doctor",
      doctorStatusUnknown: "不明",
      doctorStatusPass: "正常",
      doctorStatusWarning: "警告",
      doctorStatusCritical: "重大",
      doctorStatusInfo: "情報",
      doctorIssueCount: "{count} 件の問題",
      doctorLastCheckedAt: (time) => `チェック ${time}`,
      doctorCheckLocalServer: "ローカルサーバー",
      doctorCheckAgentIntegrations: "エージェント連携",
      doctorAgentSummaryOk: (count) => `${count} 正常`,
      doctorAgentSummaryAttention: (count) => `${count} 要確認`,
      doctorAgentSummaryNeedsAttention: "要確認",
      doctorAgentSummarySkipped: (count) => `${count} スキップ`,
      doctorAgentSummaryNoneActive: "有効な連携なし",
      doctorCheckPermissionBubbles: "権限吹き出し",
      doctorCheckTheme: "テーマ",
      doctorCheckUnknown: "チェック",
      doctorPrivacy: "プライバシー: この診断レポートはローカルで生成されます。Clawd はデータをアップロードしません。コピー前にユーザーパスと秘密情報はマスクされます。",
      doctorCopyReport: "診断レポートをコピー",
      doctorRerun: "再チェック",
      doctorClose: "閉じる",
      doctorCopied: "診断レポートをコピーしました",
      doctorCopyFailed: "診断レポートをコピーできませんでした。",
      doctorRunFailed: "診断チェックを実行できませんでした。",
      doctorFix: "修復",
      doctorFixing: "修復中",
      doctorFixApplied: "修復が完了しました。",
      doctorFixFailed: "この問題を修復できませんでした。",
      doctorFixConfirmCodex: "Clawd が Codex 設定の [features].hooks を true にします。続行しますか？",
      doctorFixConfirmCodexTitle: "Codex hooks を有効にしますか？",
      doctorFixConfirmCodexDetail: "この修復は Codex 設定を変更し、[features].hooks を true にします。ここで確認するまで、Clawd はこの変更を行いません。",
      doctorFixConfirmCodexAction: "有効化して修復",
      doctorFixConfirmCancel: "キャンセル",
      doctorRestartButton: "Clawd を再起動",
      doctorRestarting: "再起動中",
      doctorRestartConfirmTitle: "Clawd を再起動しますか？",
      doctorRestartConfirmDetail: "Clawd を終了して再起動します。進行中の AI coding agent リクエストは切断されます。再起動中は Doctor ウィンドウも閉じます。",
      doctorRestartConfirmAction: "今すぐ再起動",
      doctorNoResult: "診断結果はまだありません。",
      doctorConnectionTitle: "接続テスト",
      doctorConnectionInstruction: "任意の AI coding agent でメッセージを送信し、カウントダウン後に戻って結果を確認してください。",
      doctorConnectionIdle: "未テスト",
      doctorConnectionTesting: "{seconds} 秒待機",
      doctorConnectionHttpVerified: "HTTP 経路を確認済み",
      doctorConnectionHttpDropped: "HTTP は動作していますが、イベントが破棄されました",
      doctorConnectionHttpBlocked: "HTTP がブロックされています",
      doctorConnectionNoActivity: "活動なし",
      doctorConnectionNoActivityHint: "テスト中にエージェントの hook トラフィックが Clawd に届きませんでした。まだエージェントを有効化していない場合は、設定で有効化またはインストールし、そのエージェントからメッセージを送ってから再度テストしてください。",
      doctorConnectionError: "接続テストに失敗しました",
      doctorTestConnection: "接続をテスト",
      doctorOpenLog: "デバッグログを開く",
      doctorOpenLogOpened: "デバッグログを開きました",
      doctorOpenLogFailed: "デバッグログを開けませんでした。",
      shortcutsTitle: "ショートカット",
      shortcutsSubtitle: "ペット表示の切替と権限操作にグローバルショートカットを設定します。空欄にすると解除されます。",
      shortcutLabelBubbleNextOption: "吹き出し: 次の項目",
      shortcutLabelBubblePrevOption: "吹き出し: 前の項目",
      shortcutLabelBubbleToggleOption: "吹き出し: 項目を切替",
      shortcutLabelBubbleSubmit: "吹き出し: 回答を送信",
      shortcutBuiltinKeyTooltip: "組み込みキーのため変更不可",
      shortcutRecordButton: "変更",
      shortcutClearButton: "クリア",
      shortcutResetButton: "デフォルトに戻す",
      shortcutResetAllButton: "すべてデフォルトに戻す",
      shortcutRecordingHint: "キーを押してください (Esc)",
      shortcutUnassigned: "— 未割り当て —",
      shortcutErrorConflict: "{other} と競合しています。別のキーを試してください。",
      shortcutErrorSystemConflict: "システムまたは他のアプリで既に使用されています。",
      shortcutErrorReserved: "このキーの組み合わせは予約済みです。別のキーを試してください。",
      shortcutErrorInvalid: "このキーの組み合わせはサポートされていません。",
      shortcutErrorNeedsModifier: "ショートカットには修飾キーを少なくとも 1 つ含める必要があります。",
      shortcutErrorRegistrationFailed: "保存しましたが、システム競合により現在は無効です。再バインドするか後で再試行してください。",
      shortcutLabelTogglePet: "ペット表示の切替",
      shortcutLabelPermissionAllow: "権限: 許可",
      shortcutLabelPermissionDeny: "権限: 拒否",
      shortcutToastSaved: "ショートカットを更新しました",
      sidebarSoon: "近日対応",
      sectionAppearance: "外観",
      sectionSession: "セッション管理",
      sectionAlerts: "通知とフィードバック",
      sectionBehavior: "動作と位置",
      sectionSystemStartup: "システムと起動",
      sectionPermissions: "権限",
      hardwareBuddyTitle: "Hardware Buddy",
      hardwareBuddyDesc: "別途インストールした Clawstick runtime 経由で、ペアリング済みの BLE デスクデバイスに接続します。権限応答は明示的に有効化され、安全なリンクの場合のみオンになります。",
      hardwareBuddyEnable: "Enable Hardware Buddy",
      hardwareBuddyEnableDesc: "Start the BLE sidecar and send state-only session snapshots by default.",
      hardwareBuddyAddress: "BLE address",
      hardwareBuddyAddressDesc: "Optional fixed device address. Leave empty to scan by name prefix.",
      hardwareBuddyNamePrefix: "Device name prefix",
      hardwareBuddyNamePrefixDesc: "Scan for devices whose advertised name starts with this text.",
      hardwareBuddyPermissions: "Allow hardware permission replies",
      hardwareBuddyPermissionsDesc: "Requires this opt-in plus a secure paired transport before Allow/Deny prompts appear on the device.",
      hardwareBuddyQuickCommands: "Quick Commands を有効化",
      hardwareBuddyQuickCommandsDesc: "ローカル preset ボタンを表示し、adapter が処理する quick_command イベントだけを作成します。Clawd は貼り付けや shell 実行をしません。",
      hardwareBuddyQuickCommandPresets: "Quick Command presets",
      hardwareBuddyQuickCommandPresetsDesc: "preset をクリックすると active-session adapter 向けの検証済みイベントをキューに入れます。",
      hardwareBuddyQuickCommandsDisabled: "preset ボタンを使うには Quick Commands をオンにしてください。",
      hardwareBuddyQuickCommandsLoading: "presets を読み込み中...",
      hardwareBuddyQuickCommandsUnavailable: "Quick Commands は利用できません。",
      hardwareBuddyQuickCommandSent: "Quick Command をキューに入れました。",
      hardwareBuddyQuickCommandFailed: "Quick Command 失敗: ",
      hardwareBuddyRepliesOn: "Replies on",
      hardwareBuddyRepliesOff: "Replies off",
      hardwareBuddyRepliesBlocked: "Replies waiting",
      hardwareBuddyTest: "Test approval",
      hardwareBuddyTestButton: "Send test",
      hardwareBuddyTestWaiting: "Waiting...",
      hardwareBuddyTestDesc: "Send a harmless approval request to the paired device.",
      hardwareBuddyTestPending: "Waiting for a button press on the device.",
      hardwareBuddyTestOk: "Device replied: {decision}",
      hardwareBuddyTestError: "Test approval failed.",
      hardwareBuddyTestErr_disabled: "Hardware Buddy is not enabled.",
      hardwareBuddyTestErr_permissions_off: "Hardware permission replies are disabled.",
      hardwareBuddyTestErr_not_secure: "Hardware Buddy is not connected over a secure link.",
      hardwareBuddyTestErr_timeout: "The device did not reply before the test timed out.",
      hardwareBuddyTestErr_no_decision: "Hardware Buddy test did not receive a decision.",
      hardwareBuddyTestErr_internal_error: "Hardware Buddy test failed inside Clawd.",
      hardwareBuddyTestDisabled: "Enable Hardware Buddy before testing approvals.",
      hardwareBuddyTestRepliesOff: "Turn on hardware permission replies before testing approvals.",
      hardwareBuddyTestNeedsSecure: "Connect over a secure paired link before testing approvals.",
      hardwareBuddyTestToastOk: "Hardware Buddy test reply received.",
      hardwareBuddyTestToastError: "Hardware Buddy test failed: ",
      hardwareBuddyStatus: "Connection status",
      hardwareBuddyStatus_off: "Off",
      hardwareBuddyStatus_idle: "Idle",
      hardwareBuddyStatus_searching: "Searching",
      hardwareBuddyStatus_connected: "Connected",
      hardwareBuddyStatus_secure: "Secure",
      hardwareBuddyStatus_error: "Needs attention",
      hardwareBuddyStatusOffDetail: "Hardware Buddy is disabled.",
      hardwareBuddyStatusError: "Needs attention",
      hardwareBuddyStatusErrorDetail: "Check the Hardware Buddy sidecar status.",
      hardwareBuddyStatusConnectedDetail: "{device} connected, secure link {secure}",
      hardwareBuddyStatusAddressDetail: "Looking for {address}.",
      hardwareBuddyStatusPrefixDetail: "Scanning for names starting with {prefix}.",
      hardwareBuddySecureOn: "on",
      hardwareBuddySecureOff: "off",
      hardwareBuddyErr_missing_bleak: "Install bleak",
      hardwareBuddyErr_python_missing: "Python missing",
      hardwareBuddyErr_auth_required: "Pair required",
      hardwareBuddyErr_device_not_found: "Device not found",
      hardwareBuddyErr_bad_config: "Bad config",
      hardwareBuddyErr_core_missing: "Clawstick のインストールが必要",
      hardwareBuddyErr_sidecar_exited: "Sidecar exited",
      hardwareBuddyErr_sidecar_error: "Sidecar error",
      collapsibleExpand: "セクションを展開",
      collapsibleCollapse: "セクションを折りたたむ",
      agentsTitle: "エージェント",
      agentsSubtitle: "エージェントごとに追跡をオン/オフできます。無効化したエージェントはログ監視を停止し、HTTP 境界で hook イベントを破棄します — ペットの動作・権限吹き出し・セッション保持はいずれも行われません。",
      agentsEmpty: "登録されているエージェントはありません。",
      agentSectionConnected: "接続済み",
      agentSectionRecommended: "ローカルで検出",
      agentSectionUnavailable: "ローカル未検出",
      eventSourceHook: "Hook",
      eventSourceLogPoll: "ログポーリング",
      eventSourcePlugin: "プラグイン",
      eventSourceExtension: "拡張",
      badgePermissionBubble: "権限の吹き出し",
      agentIntegrationInstalled: "インストール済み",
      agentIntegrationNotInstalled: "未インストール",
      agentIntegrationInstall: "インストール",
      agentIntegrationUninstall: "アンインストール",
      agentIntegrationWorking: "処理中...",
      agentIntegrationUninstallConfirm: "この Clawd 管理の連携をアンインストールしますか？Clawd が管理する hooks、プラグイン、または拡張機能だけを削除します。",
      agentIntegrationInstallSkipped: "{agents} のローカルインストールが見つからなかったため、連携は書き込まれませんでした。",
      agentListSeparator: "、",
      agentInstallHintTitle: "検出したエージェントを接続",
      agentInstallHintDesc: "{agents} のローカル信号を検出しました。Clawd 管理の hooks、プラグイン、または拡張機能をインストールして Clawd に接続できます。",
      agentInstallHintInstallRecommended: "おすすめをインストール",
      agentInstallHintDismiss: "後で",
      agentInstanceSection: "インスタンス",
      agentInstanceScanWsl: "WSL スキャン",
      agentInstanceScanWslDesc: "WSLディストリビューションのエージェントを再スキャン",
      agentInstanceScanning: "スキャン中...",
      agentInstancePair: "ペアリング",
      agentInstancePairing: "ペアリング中...",
      agentInstancePaired: "ペアリング完了",
      agentInstanceUnpair: "ペアリング解除",
      agentInstanceUnpairing: "ペアリング解除中...",
      agentInstanceUnpaired: "ペアリング解除済み",
      agentInstanceDeployedBadge: "フック配備済み",
      agentInstancePairedNoConnectivity: "ペアリングしましたが、このディストリビューションから Clawd に到達できません — WSL の NAT ネットワークは localhost を共有しません。.wslconfig に networkingMode=mirrored を設定し WSL を再起動してください。",
      agentCleanupHintTitle: "見つからないローカルエージェントを確認",
      agentCleanupHintDesc: "Clawd は {agents} に接続されていますが、一致するローカルインストールが検出されませんでした。Clawd 管理の連携を削除すると、それらのエージェントの起動時同期とイベント入口もオフになります。",
      agentCleanupHintRemove: "連携を削除",
      agentCleanupHintDismiss: "今は保持",
      rowAgentPermissions: "ポップアップ吹き出しを表示",
      rowAgentPermissionsDesc: "オフにすると、このエージェントは Clawd の吹き出しではなく自身のターミナル上でプロンプトを処理します。",
      rowAgentSubagentPermissions: "サブエージェントの権限吹き出し",
      rowAgentSubagentPermissionsDesc: "オフにすると、Task サブエージェントの権限リクエストは Clawd の吹き出しを表示せず、ターミナル側で処理されます。",
      rowCodexPermissionMode: "Codex 権限モード",
      rowCodexPermissionModeDesc: "Native は Codex AutoReview とターミナルの標準プロンプトに任せます。Intercept は Clawd の許可/拒否吹き出しを表示します。",
      codexPermissionModeNative: "Native",
      codexPermissionModeIntercept: "Intercept",
      rowCodexNativeNotificationSound: "Native 通知音",
      rowCodexNativeNotificationSoundDesc: "オフにすると、Codex Native の権限プロンプトは通知アニメーションのみ表示し、通知音は鳴らしません。完了音は引き続き再生されます。",
      agentCodexHookNeedsAttention: "要確認",
      codexHookHealthReasonDisabled: "Codex フックが設定で無効になっており（[features].hooks=false）、Codex は承認フックを実行しません。有効化するか、Doctor → Fix で修復してください。",
      codexHookHealthReasonNeedsReview: "Clawd の Codex フックは登録済みですが Codex での承認が必要です — Codex で /hooks を実行するか、Doctor → Fix を使用してください。",
      codexHookHealthReasonInactive: "Clawd の Codex フックが有効でないため、承認プロンプトが表示されません。連携を再インストールするか Doctor → Fix を実行してください。",
      rowCodexHookHealthNotify: "Codex フックが無効なとき通知",
      rowCodexHookHealthNotifyDesc: "起動時に Codex の公式承認フックが無効または要確認の場合、一度だけトレイ通知を表示します。問題ごとに1回のみで、毎回は表示しません。",
      rowAgentIdleAlerts: "入力待ちアラート",
      rowAgentIdleAlertsDesc: "このエージェントの Notification hook によるベルアニメーション + 効果音 (例: Claude Code は約 60 秒のアイドル後に発火)。権限の吹き出しには影響しません。",
      rowLanguage: "言語",
      rowLanguageDesc: "メニューと吹き出しの表示言語です。",
      rowSound: "効果音",
      rowSoundEnabled: "効果音を有効化",
      rowSoundDesc: "Clawd がタスクを完了したとき、または入力を求めたときに音を再生します。",
      rowVolume: "音量",
      rowVolumeDesc: "効果音の音量を調整します。効果音オフの時は無効になります。",
      rowLowPowerIdleMode: "省電力アイドル",
      rowLowPowerIdleModeDesc: "数秒間 Clawd が静止していたら idle SVG アニメーションを停止し、活動が再開すると即座に復帰します。",
      rowKeepAwakeWhileWorking: "作業中はスリープを抑止",
      rowKeepAwakeWhileWorkingDesc: "エージェントのタスクが進行中の間はパソコンがスリープしないようにし、タスクが終わると再びスリープを許可します。",
      rowFlashTaskbarOnComplete: "タスク完了時にトレイアイコンを点滅",
      rowFlashTaskbarOnCompleteDesc: "AIタスクが完了するとシステムトレイアイコンが点滅し、別のウィンドウで作業していても気づけます。",
      rowFlash: "トレイアイコン点滅",
      rowFlashDesc: "タスク完了時のシステムトレイアイコン点滅を設定します。",
      rowFlashInterval: "点滅間隔",
      rowFlashIntervalDesc: "通常アイコンとハイライトアイコンの切り替え速度です。",
      rowFlashDuration: "点滅時間",
      rowFlashDurationDesc: "点滅の継続時間です。0に設定すると手動で停止するまで点滅し続けます。",
      unitMilliseconds: "ms",
      valueAlways: "常に点滅",
      rowSessionHud: "セッション HUD",
      rowSessionHudDesc: "ペットの下にアクティブセッション状態を表示します。",
      rowSessionHudMaster: "有効化",
      sessionHudSummaryEnabled: "HUD: {state}",
      sessionHudSummaryLabels: "ラベル: {state}",
      sessionHudSummaryElapsed: "時間: {state}",
      sessionHudSummaryContextUsage: "コンテキスト: {state}",
      sessionHudSummaryCleanup: "自動整理: {state}",
      rowSessionHudStateLabels: "状態ラベルを表示",
      rowSessionHudStateLabelsDesc: "作業中、思考中、待機中などのアクティブなセッションに小さな状態ラベルを表示します。完了したセッションは引き続きベルを使います。",
      rowSessionHudElapsed: "HUD 時間を表示",
      rowSessionHudElapsedDesc: "セッション HUD に経過時間を表示します。オフにすると HUD が狭くなります。",
      rowSessionHudContextUsage: "コンテキスト使用量を表示",
      rowSessionHudContextUsageDesc: "セッションがコンテキストウィンドウのデータを報告したとき、小さな token 使用量を表示します。",
      shortcutLabelPetReveal: "ペットをクリック: セッション HUD を表示",
      shortcutLabelOpenDashboard: "Ctrl / ⌘ + ペットをクリック: ダッシュボードを開く",
      sessionHudPinTooltip: "HUD を固定",
      sessionHudUnpinTooltip: "HUD の固定を解除",
      sessionHudFocusUnavailableTooltip: "ターミナルフォーカスは利用できません",
      sessionHudRemoteFocusUnavailableTooltip: "リモートセッションはターミナルフォーカスできません",
      rowSessionHudCleanupDetached: "切り離されたセッションを自動整理",
      rowSessionHudCleanupDetachedDesc: "終了したセッションのターミナルが閉じた後、HUD から隠し、少ししてからセッション一覧から削除します。",
      rowSessionCleanupGroup: "セッション整理",
      rowSessionCleanupGroupDesc: "Clawd が非アクティブなセッションを整理するまでの待機時間。主にターミナルが見えないリモート SSH セッションに影響します — 長時間のリモート作業では制限を緩めるか、セッションタイムアウトを 0 にすると時間では整理しません。",
      rowStaleSession: "セッションタイムアウト（待機）",
      rowStaleSessionDesc: "リモート SSH セッションはこの時間待機すると削除されます。ローカルセッションはターミナルが開いていれば削除されず、idle に薄まるだけです。既定 10 分。0 = 時間では削除しない。作業タイムアウト以上である必要があります。",
      rowStaleWorking: "作業タイムアウト",
      rowStaleWorkingDesc: "セッションが working/thinking のまま動かない場合、この時間で idle に切り替えます。既定 5 分。セッションタイムアウトが 0 以外なら、その値が上限になります。",
      rowStaleDetached: "ターミナルを閉じてから整理するまでの遅延",
      rowStaleDetachedDesc: "「切り離されたセッションを自動整理」を有効にしたときだけ動作します。セッションのターミナルウィンドウが閉じてからこの秒数だけ待ってから HUD から削除します。既定 30 秒。",
      unitMinutes: "分",
      unitSeconds: "秒",
      valueDisabled: "無効",
      actionResetSessionCleanup: "既定に戻す",
      rowSessionDashboard: "セッションダッシュボード",
      rowSessionDashboardDesc: "Claude Code・Codex などすべてのエージェントのアクティブセッションを一覧する別ウィンドウを開きます。",
      actionOpenDashboard: "開く",
      rowOpenAtLogin: "ログイン時に開く",
      rowOpenAtLoginDesc: "ログイン時に Clawd を自動起動します。",
      rowManageClaudeHooks: "Claude hooks を自動管理",
      rowManageClaudeHooksDesc: "起動時に Claude hooks を同期し、`~/.claude/settings.json` が上書きされた場合は復元します。",
      rowManageClaudeHooksOffNote: "オフにしても今後の自動管理が止まるだけです。既にインストール済みの Claude hooks は明示的に切断するまで残ります。",
      actionDisconnectClaudeHooks: "切断",
      claudeHooksDisableConfirmTitle: "Claude hooks の自動管理をオフにしますか？",
      claudeHooksDisableConfirmDetail: "自動管理だけをオフにする場合、`~/.claude/settings.json` 内に既にインストール済みの Claude hooks はそのまま残ります。`Claude Code と同時に起動` 設定も後で再有効化できるよう保持されます。",
      claudeHooksDisableConfirmDisconnect: "オフにして hooks も削除",
      claudeHooksDisableConfirmDisableOnly: "自動管理だけオフにする",
      claudeHooksDisableConfirmKeep: "自動管理を継続",
      claudeHooksDisconnectConfirmTitle: "Claude hooks を切断しますか？",
      claudeHooksDisconnectConfirmDetail: "`~/.claude/settings.json` から Clawd 管理の Claude hooks を削除し、自動管理をオフにします。`Claude Code と同時に起動` 設定は後で再有効化できるよう保持されます。",
      claudeHooksDisconnectConfirmAction: "hooks を切断",
      claudeHooksDisconnectConfirmKeep: "接続を維持",
      rowStartWithClaude: "Claude Code と同時に起動",
      rowStartWithClaudeDesc: "Claude Code セッションが開始するたびに Clawd を自動起動します。",
      rowStartWithClaudeDisabledDesc: "Claude hooks の自動管理が必要です。管理がオフの間はポート変更や設定上書きが自動修復されません。",
      rowHideBubbles: "吹き出しを非表示",
      rowHideBubblesDesc: "Clawd の権限・通知・アップデート吹き出しをまとめて非表示にします。",
      rowBubbleFollow: "吹き出しが Clawd に追従",
      rowBubbleFollowDesc: "権限とアップデートの吹き出しを画面端ではなくペットの隣に表示します。",
      rowAutoApproveAll: "すべてのリクエストを自動承認",
      rowAutoApproveAllDesc: "危険：すべてのエージェントの権限リクエスト（コマンド実行・ファイル編集・削除）を確認なしで自動承認します。エージェントごとの切り替えとおやすみモードは引き続き有効です。",
      menuAutoApproveAll: "すべてのリクエストを自動承認",
      autoApproveAllConfirmTitle: "すべてのリクエストの自動承認を有効にしますか？",
      autoApproveAllConfirmDetail: "シェルコマンドの実行やファイルの削除を含め、すべてのエージェントのすべての権限リクエストが自動的に承認されます。Clawd は事前に確認しません。エージェントの動作を完全に信頼できる場合のみ有効にしてください。",
      autoApproveAllConfirmEnable: "自動承認を有効化",
      autoApproveAllConfirmCancel: "キャンセル",
      rowBubblePolicy: "吹き出しの表示と自動クローズ",
      rowBubblePolicyDesc: "各種吹き出しの表示有無と、操作不要な吹き出しが何秒で自動クローズするかを設定します。",
      bubblePermissionLabel: "権限・操作系の吹き出し",
      bubblePermissionDesc: "オフにすると承認プロンプトはエージェントのターミナル/TUI に戻ります。Plan review と AskUserQuestion はエージェントが固まらないよう常に表示されます。秒数は、フック接続が半開状態のままハングした吹き出しを自動で閉じる任意設定です（0 でオフ）。",
      bubbleNotificationLabel: "通知吹き出し",
      bubbleNotificationDesc: "スイッチで Codex / Kimi Code の受動通知を制御します。秒数は自動クローズの上限で、後続のセッション状態によりそれより早く閉じる場合があります。0 で非表示。",
      bubbleUpdateLabel: "アップデート吹き出し",
      bubbleUpdateDesc: "スイッチでアップデート確認・ダウンロード・成功・失敗・再起動プロンプトを制御します。秒数は表示時間です。",
      bubbleUpdateWarning: "アップデート吹き出しを非表示にすると、エラーや再起動プロンプトを見逃す可能性があるためおすすめしません。",
      bubbleSecondsPrefix: "表示",
      bubbleSecondsUnit: "秒",
      bubbleSecondsInvalid: "秒数は 0〜3600 の整数で指定してください",
      bubblePolicySummaryPermission: "権限 {state}",
      bubblePolicySummaryNotification: "通知 最大 {seconds}秒",
      bubblePolicySummaryUpdate: "アップデート {seconds}秒",
      bubblePolicySummaryOn: "オン",
      bubblePolicySummaryOff: "オフ",
      updateBubbleDisableConfirmTitle: "アップデート吹き出しを非表示にしますか？",
      updateBubbleDisableConfirmDetail: "アップデートエラーの原因・ダウンロード完了通知・再起動プロンプトを見逃す可能性があります。アップデート処理自体は継続しますが、Clawd は吹き出しを表示しません。",
      updateBubbleDisableConfirmAction: "アップデート吹き出しを非表示",
      updateBubbleDisableConfirmCancel: "表示し続ける",
      rowAllowEdgePinning: "画面端への貼り付けを許可",
      rowAllowEdgePinningDesc: "上下の装飾 (キラキラ・建物・吹き出しなど) が画面端で見切れる可能性があります。",
      rowDisableMiniMode: "ミニモードを無効化",
      rowDisableMiniModeDesc: "オンにすると、端へのスナップやメニューからミニモードに入りません。",
      rowFreeRoam: "自由散策",
      rowFreeRoamDesc: "待機中にClawdがデスク上を自由に歩き回ります。マウスを動かすと停止します。",
      rowKeepSizeAcrossDisplays: "ディスプレイ間でサイズ維持",
      rowKeepSizeAcrossDisplaysDesc: "別モニターに移動しても自動でリサイズしません。スライダーは現在のディスプレイ上でペットを調整します。",
      rowFullscreenOverlay: "全画面ゲームの上に表示",
      rowFullscreenOverlayDesc: "Windows で全画面ゲームの上でもペットを使えるようにします — 上に表示され、ドラッグでき、ゲームのフォーカスを奪いません。オフにすると最適化前の既定動作に戻ります。ボーダーレス全画面ゲームではペットは常に上に表示されます。完全に消すにはペットを非表示を使ってください。（排他的全画面ゲームでは動作が異なる場合があります。）",
      rowSize: "サイズ",
      rowSizeDesc: "ドラッグでペットのサイズを変更します。",
      rowTextScale: "文字サイズ",
      rowTextScaleDesc: "このディスプレイ上のバブル・セッションHUD・ダッシュボード・設定の文字を拡大縮小します。ディスプレイごとに記憶され、ペット本体には影響しません。",
      textScaleResetTitle: "100%にリセット",
      rowSizeResetTitle: "デフォルトサイズにリセット",
      placeholderTitle: "近日公開",
      placeholderDesc: "このパネルは Clawd の今後のリリースで追加されます。計画は docs/plans/plan-settings-panel.md にあります。",
      toastSaveFailed: "保存できませんでした: ",
      toastAgentIntegrationInstalled: "連携をインストールしました。",
      toastAgentIntegrationUninstalled: "連携をアンインストールしました。",
      toastAgentInstallHintInstalled: "おすすめの連携をインストールしました。",
      toastAgentInstallHintSkipped: "{agents} のローカルインストールが見つからなかったため、連携は書き込まれませんでした。",
      toastAgentInstallHintPartialSkipped: "{success} 件インストールしました。{agents} はローカルインストールが見つからなかったためスキップしました。",
      toastAgentInstallHintPartial: "{success} 件インストール、{failed} 件失敗: {message}",
      toastAgentCleanupHintRemoved: "見つからない連携を削除しました。",
      toastAgentCleanupHintPartial: "{success} 件削除、{failed} 件失敗: {message}",
      langEnglish: "English",
      langChinese: "简体中文",
      langTraditionalChinese: "繁體中文",
      langKorean: "한국어",
      langJapanese: "日本語",
      themeTitle: "テーマ",
      themeSubtitle: "Clawd のテーマを選びます。カードには組み込み・能力バッジが表示されるので、tracked / static / mini の違いを切替前に確認できます。",
      themeEmpty: "利用可能なテーマがありません。",
      themeBadgeBuiltin: "組み込み",
      themeBadgeCodexPet: "Codex Pet",
      themeBadgeActive: "使用中",
      themeActionGroupCodexPets: "Codex Pets",
      themeActionGroupUserThemes: "ユーザーテーマ",
      themeRefreshImportedPets: "Codex Pets を更新",
      themeImportPetZip: "Codex Pet パッケージをインポート（.zip）",
      themeOpenCodexPetsFolder: "Codex Pet フォルダを開く",
      themeImportUserThemeZip: "Clawd テーマパッケージをインポート（.zip）",
      themeImportUserThemeZipHint: "Clawd テーマ zip: ルートまたは 1 つのトップフォルダに theme.json が必要です。SVG、GIF、APNG、PNG、WebP、JPG、JPEG は assets/ に入れてください。Codex Pet パッケージは上の入口を使います。",
      themeOpenUserThemesFolder: "テーマフォルダを開く",
      themeRefreshThemes: "テーマを更新",
      themeGroupBuiltIn: "組み込み",
      themeGroupImportedCodexPets: "インポート済み Codex Pets",
      themeGroupUserThemes: "ユーザーテーマ",
      themeUninstallPetLabel: "アンインストール",
      themeCapabilityTracked: "目線追従 idle",
      themeCapabilityAnimated: "アニメ idle",
      themeCapabilityStatic: "静的テーマ",
      themeCapabilityMini: "Mini",
      themeCapabilityDirectSleep: "直接スリープ",
      themeCapabilityFineMotion: "精細モーション",
      themeCapabilityNoReactions: "リアクションなし",
      themeActiveIndicator: "✓ 使用中",
      themeThumbMissing: "\u{1F3AD}",
      themeDeleteLabel: "テーマを削除",
      themeVariantStripLabel: "バリアント",
      toastThemeDeleted: "テーマを削除しました。",
      toastThemeDeleteFailed: "テーマの削除に失敗: ",
      toastCodexPetsRefreshOk: (imported, updated, unchanged, removed, invalid, switched) =>
        `Codex Pet を更新しました: 新規 ${imported}、更新 ${updated}、変更なし ${unchanged}、削除 ${removed}${invalid ? `、無効 ${invalid}` : ""}${switched ? "、使用中テーマを Clawd に戻しました" : ""}。`,
      toastCodexPetsRefreshFailed: (message) => `Codex Pet の更新に失敗: ${message}`,
      toastCodexPetsFolderFailed: "Codex Pet フォルダを開けませんでした: ",
      toastUserThemesFolderFailed: "テーマフォルダを開けませんでした: ",
      toastUserThemeZipImportOk: (name) => `テーマ "${name}" をインポートしました。`,
      toastUserThemeZipImportFailed: (message) => `テーマ（.zip）をインポートできませんでした: ${message}`,
      toastCodexPetZipImportOk: (name) => `"${name}" をインポートして切り替えました。`,
      toastCodexPetZipImportFailed: (message) => `Codex Pet（.zip）をインポートできませんでした: ${message}`,
      toastCodexPetRemoveOk: (name, switched) => `"${name}" をアンインストールしました${switched ? "。Clawd に戻しました" : ""}。`,
      toastCodexPetRemoveFailed: (message) => `インポート済みペットをアンインストールできませんでした: ${message}`,
      animMapTitle: "アニメーションマップ",
      animMapSubtitle: "個別の割り込みアニメーションをオフにできます。イベント自体は発火しますが、Clawd は選択した状態の表示と効果音をスキップします。",
      animMapSemanticsNote: "オフ = 表示なし + 効果音なし。権限の吹き出し・セッション・ターミナルフォーカスは引き続き動きます。",
      animMapResetAll: "すべてリセット",
      animMapAttentionLabel: "タスク完了 (happy)",
      animMapAttentionDesc: "エージェントのターン終了時の喜びバウンス (Stop)。",
      animMapErrorLabel: "エラー演出",
      animMapErrorDesc: "ツール呼び出しが失敗したときの揺れアニメーション。",
      animMapSweepingLabel: "コンテキスト掃除",
      animMapSweepingDesc: "PreCompact / コンテキストクリア中のほうきアニメーション。",
      animMapNotificationLabel: "通知",
      animMapNotificationDesc: "権限要求や質問時のベルアニメーション。",
      animMapCarryingLabel: "Worktree 運搬",
      animMapCarryingDesc: "worktree 作成時の運搬アニメーション。",
      toastAnimMapResetOk: "アニメーションと効果音の差し替えをリセットしました。",
      animOverridesTitle: "アニメーション・サウンド",
      animOverridesSubtitle: "現在のテーマのカード別アニメ差し替え、フェード/復帰タイミング調整、サウンド差し替えを行います。",
      animOverridesLoading: "アニメーションとサウンドの差し替え設定を読み込み中…",
      animOverridesCurrentTheme: "現在のテーマ",
      animOverridesReplacementConfig: "アニメーション上書き設定",
      animOverridesOpenThemeTab: "テーマタブを開く",
      animOverridesOpenAssets: "assets フォルダを開く",
      animOverridesResetAll: "テーマのデフォルトに戻す",
      animOverridesExport: "設定をエクスポート…",
      animOverridesImport: "設定をインポート…",
      toastAnimOverridesExportOk: (count, path) =>
        `${count} 件のテーマ差し替えをエクスポートしました → ${path}`,
      toastAnimOverridesImportOk: (count) =>
        `${count} 件のテーマ差し替えをインポートしました。`,
      toastAnimOverridesExportEmpty: "エクスポート対象の差し替えがありません。",
      toastAnimOverridesExportFailed: (message) => `エクスポート失敗: ${message}`,
      toastAnimOverridesImportFailed: (message) => `インポート失敗: ${message}`,
      animOverridesChangeFile: "ファイルを変更",
      animOverridesPreview: "1 回プレビュー",
      animOverridesReset: "スロットをリセット",
      animOverridesFade: "フェード",
      animOverridesFadeIn: "開始時フェードイン",
      animOverridesFadeOut: "終了時フェードアウト",
      animOverridesSaveFade: "フェードを保存",
      animOverridesDuration: "自動復帰",
      animOverridesSaveDuration: "タイミング保存",
      animOverridesContinuousHint: "継続状態のため auto-return は編集できません。",
      animOverridesAssetCycle: "アセットサイクル",
      animOverridesSuggestedTiming: "推奨タイミング",
      animOverridesTimingEstimated: "推定値",
      animOverridesTimingFallback: "テーマのデフォルト",
      animOverridesTimingUnavailable: "利用不可",
      animOverridesDisplayHintWarning: "displayHintMap が実行時にこのスロットを上書きする可能性があります。",
      animOverridesFallbackHint: "このスロットは現在 {state} にフォールバックしています。",
      animOverridesOverriddenTooltip: "デフォルトから変更済み",
      animOverridesUseOwnFile: "独自ファイルを使う",
      animOverridesDurationIdle: "プール保持時間",
      animOverridesSectionIdle: "Idle",
      animOverridesSectionWork: "作業",
      animOverridesSectionInterrupts: "割り込み",
      animOverridesSectionSleep: "スリープ",
      animOverridesSectionMini: "Mini Mode",
      animOverridesSectionReactions: "リアクション",
      animOverridesSectionIdleTracked: "目線追従 idle",
      animOverridesSectionIdleAnimated: "idle ランダムプール",
      animOverridesSectionIdleStatic: "1 枚静的 idle",
      animOverridesSectionSleepFull: "フルスリープシーケンス",
      animOverridesSectionSleepDirect: "直接スリープのみ",
      animReactionDrag: "ドラッグ (押下中)",
      animReactionClickLeft: "つつく (左)",
      animReactionClickRight: "つつく (右)",
      animReactionAnnoyed: "イライラ (連続つつき)",
      animReactionDouble: "ダブルタップ",
      animOverridesWideHitboxToggle: "広い当たり判定",
      animOverridesWideHitboxDesc: "このフレームでクリック領域を広げます。アセットがデフォルトのペットシルエットを超えるときに有効です。",
      animOverridesWideHitboxResetToTheme: "テーマのデフォルトに戻す",
      animOverridesAspectWarning: "このアセットは元ファイルとアスペクト比が {pct}% 違います。当たり判定と位置を手動調整する必要があるかもしれません。",
      animOverridesExpandRow: "展開",
      animOverridesModalTitle: "アセットファイルを選択",
      animOverridesModalSubtitle: "現在のテーマの assets フォルダにファイルを追加してから、ここでリストを更新してください。",
      animOverridesModalEmpty: "このテーマには対応するアセットがまだありません。",
      animOverridesModalSelected: "選択中のファイル",
      animOverridesModalUse: "このファイルを使う",
      animOverridesModalCancel: "キャンセル",
      animOverridesRefresh: "リストを更新",
      animOverridesSubtabAnimations: "アニメーション",
      animOverridesSubtabSounds: "サウンド",
      animOverridesSubtabMap: "オン / オフ",
      soundOverridesSectionTitle: "効果音",
      soundOverridesSectionSubtitle: "テーマのオーディオファイルを差し替えます。選択したファイルはテーマごとの差し替えフォルダにコピーされます。",
      soundOverridesLabelComplete: "タスク完了 (complete)",
      soundOverridesLabelConfirm: "権限プロンプト (confirm)",
      soundOverridesPreview: "再生",
      soundOverridesChangeFile: "ファイルを選択…",
      soundOverridesReset: "デフォルトに戻す",
      soundOverridesOpenDir: "差し替えフォルダを開く",
      soundOverridesOverriddenTooltip: "差し替え済み",
      soundOverridesEmpty: "このテーマには効果音が定義されていません。",
      toastSoundOverrideSetOk: (name, file) => `「${name}」を ${file} に差し替えました`,
      toastSoundOverrideResetOk: (name) => `「${name}」をテーマのデフォルトに戻しました`,
      toastSoundOverrideFailed: (message) => `効果音の差し替えに失敗: ${message}`,
      aboutTitle: "Clawd について",
      aboutSubtitle: "あなたの AI コーディングを見守るピクセル蟹。",
      aboutTagline: "AI コーディングのデスクトップ相棒。",
      aboutVersionLabel: "バージョン",
      aboutCheckForUpdates: "アップデートを確認",
      aboutUpdateAvailableHint: "新しいバージョンがあります: v{version}",
      autoUpdateCheck: "アップデートを自動で確認",
      autoUpdateCheckDescription: "12 時間ごとに GitHub を静かに確認し、新しいバージョンがある時だけ通知します。",
      aboutRepositoryLabel: "リポジトリ",
      aboutLicenseLabel: "ライセンス",
      aboutAuthorLabel: "制作",
      aboutMaintainersLabel: "メンテナー",
      aboutContributorsLabel: "コントリビューター",
      aboutFooter: "Clawd はオープンソース。コミュニティと一緒に作っています。",
      aboutCleanupButton: "Clawd 連携を削除…",
      aboutCleanupConfirm: "ローカル agent から Clawd hooks/plugins を削除し、Clawd のすべての agent 連携を未インストールかつ無効としてマークしますか？agent アプリやユーザー設定は削除しません。",
      aboutCleanupRunning: "連携を削除中…",
      aboutCleanupSuccess: "{affected} 件の連携から {removed} 件を削除しました。失敗: {failed}。",
      aboutCleanupFailed: "連携クリーンアップに失敗しました",
      aboutCleanupKiroNote: "Kiro の clawd.json は保持し、hook 項目だけを削除しました。",
      mobileTitle: "モバイル / PWA",
      mobileDesc: "スマートフォンを接続してセッションを監視します。読み取り専用 LAN プレビュー — 書き込みや承認操作は不可。",
      mobileToggle: "モバイルプレビューを有効化",
      mobileToggleDesc: "LAN WebSocket ブリッジを起動し、同一ネットワークのスマートフォンからセッション状態をリアルタイムで確認できます。",
      mobileDisabled: "LAN ブリッジを開始するには、上のトグルを有効にしてください。",
      mobileLoading: "接続情報を読み込み中…",
      mobileError: "接続情報を読み込めません。",
      mobileRegenerate: "トークンを再生成",
      mobileRegenerateConfirm: "トークンを再生成しますか？接続中のすべてのデバイスが切断され、再ペアリングが必要になります。",
      mobileReset: "モバイルアクセスをリセット",
      mobileResetConfirm: "モバイルアクセスをリセットしますか？すべてのデバイスが切断され、新しいトークンが生成されます。",
      aboutEasterEggToast: "\u{1F980} Coding shouldn't feel lonely. — Ruller_Lulu / 鹿鹿",
      aboutOpenExternalFailed: "ブラウザでリンクを開けませんでした。",
    },
  };

  const MAINTAINERS = [
    "rullerzhou-afk", "YOIMIYA66", "Bynlk",
  ];

  const CONTRIBUTORS = [
    "PixelCookie-zyf", "yujiachen-y", "AooooooZzzz", "purefkh", "Tobeabellwether", "Jasonhonghh", "crashchen",
    "hongbigtou", "InTimmyDate", "NeizhiTouhu", "xu3stones-cmd", "androidZzT", "Ye-0413", "WanfengzzZ",
    "TaoXieSZ", "ssly", "stickycandy", "Rladmsrl", "YOIMIYA66", "Kevin7Qi", "sefuzhou770801-hub",
    "Tonic-Jin", "seoki180", "sophie-haynes", "PeterShanxin", "CHIANGANGSTER", "JaeHyeon-KAIST", "hhhzxyhhh",
    "TVpoet", "zeus6768", "anhtrinh919", "tomaioo", "v-avuso", "livlign", "tongguang2",
    "Ziy1-Tan", "tatsuyanakanogaroinc", "yeonhub", "joshua-wu", "nmsn", "sunnysonx", "YuChenYunn", "jhseo-b",
    "Hwasowl", "XiangZheng2002", "keiyo118", "pan93412", "taehwanis", "linnin233", "xiyouMc",
    "Bynlk", "zxypro1", "NeroAyase", "divergentD", "Ne9roni", "QingXB", "29206394",
    "Tsdsj", "godlockin",
    "sLingli", "ustin-star", "cod3hulk", "lxgxhsy", "rebootcrab-blip",
    "zhaoxv210", "serenNan", "IatomicreactorI", "quantai1314", "Git-creat7", "undownding", "chrono-meta",
  ];

  root.ClawdSettingsI18n = {
    STRINGS,
    MAINTAINERS,
    CONTRIBUTORS,
  };
})(globalThis);
