import type { LocalePlugin } from "../types"; /** Pi Web 内置英语语言包。 */ export const enLocale: LocalePlugin = { id: "en", label: "English", messages: { "common.ok": "OK", "common.language": "Language", "common.models": "Models", "common.skills": "Skills", "common.plugins": "Plugins", "appUpdate.releaseNotes": "Pi Web v{version} is available. View release notes", "sidebar.hide": "Hide sidebar", "sidebar.show": "Show sidebar", "theme.light": "Light mode (click for dark)", "theme.dark": "Dark mode (click for system)", "theme.auto": "System theme (click for light)", "history.full": "Full history", "history.unsaved": "Full history is available after the session is saved", "history.label": "Full history", "title.generating": "Generating...", "title.updated": "Title updated", "title.failed": "Generation failed", "title.generate": "Generate title", "title.unsaved": "Title generation is available after the session is saved", "title.noMessages": "Send a message before naming this session", "title.generateSession": "Generate a session title", "system.prompt": "System prompt", "system.empty": "System prompt is empty (tools are disabled)", "system.load": "System prompt has not loaded yet", "system.loading": "Loading system prompt…", "system.label": "System", "session.info": "Session info", "session.name": "Name", "session.file": "File", "session.inMemory": "In-memory", "session.id": "ID", "session.user": "User", "session.assistant": "Assistant", "session.toolCalls": "Tool Calls", "session.toolResults": "Tool Results", "session.total": "Total", "session.input": "Input", "session.output": "Output", "session.cacheRead": "Cache Read", "session.cacheWrite": "Cache Write", "session.cost": "Cost", "session.context": "Context", "session.cacheHitRate": "Avg cache hit rate", "session.copy": "Copy {value}", "session.copied": "Copied", "session.title": "Session info", "session.load": "Send a message or run /session to load session info", "session.infoSection": "Session Info", "session.messages": "Messages", "session.tokens": "Tokens", "session.totalActive": "Active Time", "session.copyFile": "Copy file path", "session.copyId": "Copy session ID", "workspace.opening": "Opening workspace...", "workspace.unable": "Unable to open workspace", "workspace.selectSession": "Select a session from the sidebar", "workspace.getStarted": "Get Started", "workspace.selectProject": "Select a project directory from the sidebar", "workspace.addModels": "Add models via the Models button at the bottom", "workspace.stepProject": "Select a project directory from the sidebar", "workspace.stepModels": "Add models via the Models button at the bottom", "files.hidePanel": "Hide file panel", "files.showPanel": "Show file panel", "files.noneOpen": "No file open", "layout.resizeSidebar": "Resize sidebar", "layout.resizeFilePanel": "Resize file panel", "layout.resizeHint": "Drag to resize. Double-click or press Enter to reset.", "sidebar.new": "New", "sidebar.newSessionTitle": "New session in {path}", "sidebar.refresh": "Refresh", "sidebar.selectProject": "Select project…", "sidebar.filterProjects": "Filter projects…", "sidebar.noMatchingProjects": "No matching projects", "sidebar.useDefaultDirectory": "Use default directory", "sidebar.customPath": "Custom path…", "directoryPicker.selectDirectory": "Select directory", "directoryPicker.goToParent": "Go to parent directory", "directoryPicker.directoryPath": "Directory path", "directoryPicker.goToDirectory": "Go to directory", "directoryPicker.go": "Go", "directoryPicker.loadingDirectories": "Loading directories…", "directoryPicker.noSubdirectories": "No subdirectories", "directoryPicker.openBeforeSelecting": "Open this path before selecting it", "directoryPicker.selectCurrentDirectory": "Select current directory", "directoryPicker.selectThisFolder": "Select this folder", "directoryPicker.noDrives": "No drives found", "sidebar.checking": "Checking…", "sidebar.open": "Open", "sidebar.cancel": "Cancel", "sidebar.openRepoRoot": "Open repo root", "sidebar.openRepoRootTitle": "Open the repository root to manage worktrees.", "sidebar.gitRepoRootOnly": "Git repo root only", "sidebar.gitRepoRootOnlyTitle": "Worktrees are available in Git repository roots.", "sidebar.worktrees": "Worktrees...", "sidebar.checkingWorktrees": "Checking worktrees for this directory.", "sidebar.filterWorktrees": "Filter worktrees…", "sidebar.noMatchingWorktrees": "No matching worktrees", "sidebar.switchWorktree": "Switch worktree", "sidebar.switchWorktreeTitle": "Switch worktree: {path}", "sidebar.main": "main", "sidebar.forceRemoveCheckout": "Uncommitted changes. Force remove checkout?", "sidebar.force": "Force", "sidebar.createWorktreeTitle": "Create a worktree checkout for a branch", "sidebar.newWorktree": "New worktree…", "sidebar.branchName": "branch name", "sidebar.creating": "Creating…", "sidebar.create": "Create", "sidebar.uploadFilesTitle": "Upload files to project root", "sidebar.uploadFiles": "Upload files", "sidebar.refreshExplorer": "Refresh explorer", "sidebar.changedFiles": "{count} changed files", "sidebar.loading": "Loading...", "sidebar.noSessions": "No sessions found", "sidebar.agentRunning": "Agent running…", "sidebar.newActivity": "New activity", "sidebar.newSessionActivity": "New session activity", "sidebar.deleteSession": "Delete {title}?", "sidebar.rename": "Rename", "sidebar.delete": "Delete", "sidebar.deleteWithShiftClick": "Delete (Shift+click to delete without confirmation)", "sidebar.expandForks": "Expand forks", "sidebar.collapseForks": "Collapse forks", "sidebar.messagesCount": "{count} msgs", "sidebar.worktreePath": "Worktree: {path}", "sidebar.removeWorktreeTitle": "Remove worktree checkout {path}; the branch is kept", "files.modified": "Modified", "files.added": "Added", "files.deleted": "Deleted", "files.renamed": "Renamed", "files.untracked": "Untracked", "files.conflict": "Conflict", "files.newlyUploaded": "Newly uploaded", "files.containsChangedFiles": "Contains changed files", "files.insertPath": "Insert path into chat", "files.mention": "mention", "files.download": "Download file", "files.dismissError": "Dismiss error", "files.addUploadedFile": "Add uploaded file to chat", "files.addAllUploadedFiles": "Add all uploaded files to chat", "files.dismissUploadResults": "Dismiss upload results", "files.loading": "Loading files...", "files.noFiles": "No files found", "files.explorer": "Explorer", "files.changedCount": "{count} files", "files.changeStats": "{count} changed files, {additions} lines added, {deletions} lines deleted", "files.conflictSummary": "{count} file{countSuffix} already exist: {files}", "files.cannotReplace": "Cannot replace: {files}", "files.replace": "Replace", "files.skipExisting": "Skip existing", "files.cancel": "Cancel", "files.checking": "Checking files", "files.uploading": "Uploading, {progress}%", "chat.loadingSession": "Loading session...", "chat.runningTool": "Running tool...", "chat.runningNamedTool": "Running {name}...", "chat.runningTools": "Running {names}...", "chat.runningToolsMore": "Running {names} (+{count})...", "chat.waitingModel": "Waiting for model...", "chat.runningCommand": "Running command...", "chat.thinking": "Thinking...", "chat.processDetails": "Process details", "chat.message": "message", "chat.messages": "messages", "chat.toolCall": "tool call", "chat.toolCalls": "tool calls", "chat.collapseProcess": "Collapse process details", "chat.expandProcess": "Expand process details", "chat.filesWritten": "Files changed", "chat.openWrittenFile": "Open {name}", "chat.loadEarlier": "Scroll up to load earlier messages ({count} hidden)", "chat.extensionRequest": "extension request", "chat.cancel": "Cancel", "chat.confirm": "Confirm", "chat.submit": "Submit", "chat.extensionInput": "Extension terminal input", "chat.extensionPanel": "Extension panel", "chat.extensionWidgets": "Extension widgets", "chat.extensionWidgetAbove": "Above editor widget", "chat.extensionWidgetBelow": "Below editor widget", "chat.extensionWidgetLine": "{count} line", "chat.extensionWidgetLines": "{count} lines", "chat.close": "Close", "chat.queued": "Queued · {count}", "chat.recall": "Recall to input", "chat.recallTitle": "Remove all queued messages and put them back into the input box for editing", "chat.retrying": "Retrying ({attempt}/{max})…", "chat.loadingCommands": "Loading commands...", "chat.slashCommands": "Slash commands · {label}", "chat.tabEnter": "Tab / Enter", "chat.noCommands": "No extension, prompt, or skill commands found", "chat.match": "1 match", "chat.matches": "{count} matches", "chat.command": "1 command", "chat.commands": "{count} commands", "chat.loadingFiles": "Loading files...", "chat.files": "Files · {label}{hint}", "chat.searching": "Searching…", "chat.noMatchingFiles": "No matching files", "chat.searchingAll": " · searching all files…", "chat.indexTruncated": " · index truncated", "chat.steerPlaceholder": "Steer now / queue follow-up...", "chat.agentPlaceholder": "Agent is running…", "chat.messagePlaceholder": "Message… Type / for commands, @ for files", "chat.steer": "Steer", "chat.followUp": "Follow-up", "chat.send": "Send", "chat.attachImage": "Attach image", "chat.previewImage": "Preview image", "chat.filterModels": "Filter models…", "chat.noMatchingModels": "No matching models", "chat.moreControls": "More controls", "chat.collapseControls": "Collapse controls", "chat.shell": "Shell", "chat.outputLocal": "output stays local", "chat.outputModel": "output sent to model", "chat.noTools": "No tools", "chat.readOnlyTools": "{count} read-only built-in tools", "chat.builtInTools": "{count} built-in tools", "chat.allBuiltInTools": "All built-in tools", "chat.changeReasoning": "Change reasoning level: {level}", "chat.changeReasoningLabel": "Change reasoning level", "chat.changeToolPreset": "Change tool preset", "chat.stopCompaction": "Stop compaction", "chat.compactContext": "Compact context", "chat.compacting": "Compacting…", "chat.compact": "Compact", "chat.stopAgent": "Stop agent", "chat.stop": "Stop", "chat.disableSound": "Disable completion sound", "chat.enableSound": "Enable completion sound", "chat.thinkingUseDefault": "Use pi default", "chat.thinkingOff": "Reasoning off", "chat.thinkingMinimal": "Minimal reasoning", "chat.thinkingLow": "Low reasoning", "chat.thinkingMedium": "Medium reasoning", "chat.thinkingHigh": "High reasoning", "chat.thinkingXhigh": "Extra-high reasoning", "chat.thinkingMax": "Max reasoning", "chat.builtIn": "Built-in", "chat.extensions": "Extensions", "chat.prompts": "Prompts", "chat.skills": "Skills", "chat.dormant": "dormant", "chat.commandCompact": "Compress context, optionally with instructions", "chat.commandReload": "Reload extensions, skills, prompts, and tools", "chat.commandName": "Set the session display name", "chat.commandSession": "Show session message, token, and cost stats", "chat.commandCopy": "Copy the last assistant message", "chat.compacted": "Compacted", "chat.tokensSaved": "{saved} saved", "i18n.close": "Close", "i18n.copy": "Copy", "i18n.copied": "Copied", "i18n.cancel": "Cancel", "i18n.save": "Save", "i18n.saving": "Saving…", "i18n.saved": "Saved", "i18n.remove": "Remove", "i18n.removing": "Removing…", "i18n.delete": "Delete", "i18n.loading": "Loading...", "i18n.search": "Search", "i18n.refresh": "Refresh", "i18n.update": "Update", "i18n.updating": "Updating...", "i18n.check": "Check", "i18n.checking": "Checking...", "i18n.install": "Install", "i18n.installing": "Installing...", "i18n.noResults": "No results", "i18n.searchProviders": "Search providers…", "i18n.noProviders": "No providers match", "i18n.newModel": "new model", "i18n.addProvider": "Add provider", "i18n.selectProviderModel": "Select a provider or model", "i18n.visibleInPrompt": "Visible in model prompt — click to disable", "i18n.hiddenFromPrompt": "Hidden from model prompt — click to enable", "i18n.dormant": "Dormant", "i18n.hiddenButInvocable": "Hidden from model, still manually invocable", "i18n.skillSearchPlaceholder": "e.g. react, testing, deploy", "i18n.searching": "Searching…", "i18n.noSkills": "No skills found", "i18n.checkUpdates": "Check updates", "i18n.updates": "updates", "i18n.noResolvedResources": "No resolved resources", "i18n.enablePackage": "Enable package", "i18n.disablePackage": "Disable package", "i18n.filtered": "filtered", "i18n.openSessionToReload": "Open a session to reload", "i18n.notFound": "Not found", "i18n.noPlugins": "No plugins configured", "trust.resourcesNotLoaded": "Restricted mode", "trust.trustProject": "Trust project", "trust.trusting": "Trusting...", "trust.cancel": "Cancel", "trust.dialogTitle": "Trust this project?", "trust.dialogBody": "Project resources can run local code. Trust only projects whose contents you know.", "trust.skillsNotLoaded": "Project skills are not loaded because this project is not trusted.", "trust.pluginsNotLoaded": "Project plugins are not loaded because this project is not trusted.", "trust.projectScopeUnavailable": "Project installs are unavailable while project resources are not loaded.", "i18n.creatingSession": "Creating new session…", "i18n.creating": "Creating…", "i18n.subscription": "Subscription", "i18n.subscriptions": "Subscriptions", "i18n.customEndpoint": "Custom endpoint format", "i18n.noChanges": "No changes", "i18n.branches": "Branches", "i18n.noActiveSession": "No active session", "i18n.noBranches": "This session has no branches", "i18n.source": "Source", "i18n.preview": "Preview", "i18n.diff": "Diff", "i18n.downloadFile": "Download file", "i18n.liveSync": "Live sync active", "i18n.notWatching": "Not watching", "i18n.fileViewMode": "File view mode", "i18n.compareHead": "Compare working tree with HEAD", "i18n.mentionSelectedLines": "Mention selected lines", "i18n.disableWrap": "Disable word wrap", "i18n.enableWrap": "Enable word wrap", "i18n.htmlPreview": "HTML preview", "i18n.previewFile": "Preview {file}", "i18n.invalidMermaid": "Invalid Mermaid diagram", "i18n.renderingMermaid": "Rendering Mermaid diagram", "i18n.previewAfterStreaming": "Preview available after streaming", "i18n.showMermaidSource": "Show Mermaid source", "i18n.previewMermaid": "Preview Mermaid diagram", "i18n.openMermaidViewer": "Open diagram viewer", "i18n.mermaidViewer": "Mermaid diagram viewer", "i18n.mermaidDiagram": "Mermaid diagram", "i18n.zoomOut": "Zoom out", "i18n.zoomIn": "Zoom in", "i18n.fitToWidth": "Fit to width", "models.discoveryFetching": "Importing models…", "models.discoveryFetch": "Import models…", "models.discoveryFilterPlaceholder": "Filter {count} models…", "models.discoveryFilter": "Filter upstream models", "models.discoverySelectShown": "Select shown", "models.discoveryNoMatches": "No matching models.", "models.discoveryAdded": "added", "models.discoveryShowing": "Showing first {shown} of {total}", "models.discoveryFetched": "{count} models fetched", "models.discoveryAddSelected": "Add selected", "models.discoveryAddSelectedCount": "Add selected ({count})", "models.catalogSource": "source: models.dev ↗", "models.catalogFilling": "Filling details…", "models.catalogFill": "Fill model details", "models.catalogFilled": "{count} fields filled", "models.catalogNoEmptyFields": "No empty fields to fill", "models.catalogNoExactMatch": "No exact models.dev match", "models.catalogPriceProvider": "Price matched Provider {provider}", "models.catalogPriceBaseUrl": "Price matched Base URL to {provider}", "models.catalogPriceConsensus": "Price agreed by {support}/{total} records", "models.catalogPriceUnreliable": "No reliable price found", "models.catalogUndo": "Undo", "models.capabilities": "Capabilities", "models.reasoning": "Reasoning / thinking", "models.imageInput": "Image input", "models.modelSpecs": "Model specifications", "models.contextWindow": "Context window (tokens)", "models.maxOutputTokens": "Max output tokens", "models.costPerMillion": "Cost per million tokens", "models.costInput": "Input", "models.costOutput": "Output", "models.costCacheRead": "Cache read", "models.costCacheWrite": "Cache write", "models.notProvided": "Not provided", "models.editCosts": "Edit prices", "models.finishEditingCosts": "Done", "models.costAllRequired": "Enter a valid non-negative price; blank fields are saved as 0.", "models.advancedSettings": "Advanced settings", "models.providerDefaults": "Using provider defaults", "models.headersSummary": "Headers: {count}", "models.compatSummary": "Compatibility: {count}", "models.thinkingSummary": "Thinking levels: {count}", "models.apiOverride": "API override", "models.headers": "Headers", "models.headersHelp": "Added to this model's requests and overrides provider headers.", "models.compatibility": "Compatibility", "models.deepSeekThinkingCompat": "DeepSeek thinking compatibility", "models.developerRole": "Use the developer role for the system prompt", "models.thinkingLevelMap": "Thinking level map", "models.clearAll": "Clear all", "i18n.testingModel": "Testing model connection...", "i18n.connected": "Connected", "i18n.failed": "Failed", "i18n.test": "Test", "i18n.testConnection": "Test model connection", "i18n.provider": "Provider", "i18n.model": "Model", "i18n.providerName": "Provider name", "i18n.rename": "Rename", "i18n.default": "Default", "i18n.disabled": "Disabled", "i18n.noResources": "No resources", "i18n.unknown": "Unknown", "i18n.installedVersion": "installed {version}", "i18n.configuredVersion": "configured {version}", "i18n.extensions": "Extensions", "i18n.prompts": "Prompts", "i18n.themes": "Themes", "i18n.resourceCount": "{count} {label}", "i18n.extensionShort": "ext", "i18n.skillShort": "skills", "i18n.promptShort": "prompts", "i18n.themeShort": "themes", "i18n.custom": "Custom", "i18n.clearAll": "clear all", "i18n.connectedSuccessfully": "Connected successfully.", "i18n.notConnected": "not connected", "i18n.configured": "configured", "i18n.notConfigured": "not configured", "i18n.openingBrowser": "Opening browser…", "i18n.submit": "Submit", "i18n.login": "Login", "i18n.relogin": "Re-login", "i18n.disconnect": "Disconnect", "i18n.networkError": "Network error", "i18n.continuing": "Continuing…", "i18n.skills": "Skills", "i18n.plugins": "Plugins", "i18n.addSkill": "Add skill", "i18n.addPlugin": "Add plugin", "i18n.selectSkill": "Select a skill", "i18n.selectPackage": "Select a package", "i18n.updateAvailable": "Update available", "i18n.upToDate": "Up to date", "i18n.automaticChecksUnavailable": "Automatic checks unavailable", "i18n.checkFailed": "Check failed", "i18n.installed": "Installed", "i18n.status": "Status", "i18n.version": "Version", "i18n.package": "Package", "i18n.resources": "Resources", "i18n.installedPath": "Installed path", "i18n.cwd": "CWD", "i18n.resolvedResources": "Resolved Resources", "i18n.reloadSession": "Reload session", "i18n.reloading": "Reloading...", "i18n.packageRemoved": "Package removed.", "i18n.packageInstalled": "Package installed.", "i18n.packageUpdated": "Package updated.", "i18n.packageDisabled": "Package disabled.", "i18n.packageEnabled": "Package enabled.", "i18n.sessionReloaded": "Session reloaded.", "i18n.thinking": "Thinking", "i18n.largeMessageReveal": "Message content is very large ({size}). Click to view as plain text — markdown rendering is disabled to keep the page responsive.", "i18n.loadingThinking": "Loading thinking...", "i18n.copyMessage": "Copy message", "i18n.editFromHere": "Edit from here", "i18n.editFromHereTitle": "Edit from here — branches within this session", "i18n.newSession": "New session", "i18n.newSessionTitle": "New session — creates an independent copy from here", "i18n.estimatedTokens": "Estimated token count while streaming", "i18n.noOutput": "(no output)", "i18n.noSummary": "(no summary)", "i18n.conversationCompacted": "Conversation compacted", "i18n.compactionDescription": "The conversation history before this point was compacted into the following summary:", "i18n.fileContext": "File context: {details}", "i18n.readFiles": "Read files", "i18n.modifiedFiles": "Modified files", "i18n.hiddenExtensionMessage": "hidden extension message", "i18n.noMessage": "(no message)", "i18n.showExtensionMessage": "Show extension message", "i18n.collapse": "Collapse", "i18n.expand": "Expand", "i18n.hideDetails": "Hide details", "i18n.showDetails": "Show details", "i18n.thinkingUnavailable": "Thinking content unavailable", "i18n.before": "Before", "i18n.after": "After", "i18n.sessionComplete": "Session complete", "i18n.taskFinished": "Task finished.", "i18n.attentionNeeded": "Pi needs your attention", "i18n.extensionInputNeeded": "An extension is waiting for your input.", }, };