import type { Messages } from '../types';

export const EN_MESSAGES: Messages = {
  "common.loading": "Loading...",
  "common.confirm": "Confirm",
  "common.done": "Done",
  "common.cancel": "Cancel",
  "common.save": "Save",
  "common.discard": "Discard",
  "common.delete": "Delete",
  "common.remove": "Remove",
  "common.edit": "Edit",
  "common.project": "Project",
  "common.previous": "Previous",
  "common.next": "Next",
  "common.show": "Show",
  "common.hide": "Hide",
  "common.download": "Download",
  "common.copied": "Copied!",
  "common.copy": "Copy",
  "testCase.untitled": "Untitled",
  "pagination.showing": "Showing {from} to {to} of {total}",
  "pagination.noRecords": "No records",
  "pagination.rowsPerPage": "Rows per page:",
  "pagination.previous": "Previous",
  "pagination.next": "Next",
  "pagination.pageOf": "Page {page} of {totalPages}",
  "header.accountSettings": "Account Settings",
  "header.connectMcp": "Connect MCP",
  "header.logout": "Logout",
  "header.team": "Team",
  "header.addTeam": "+ Add Team",
  "header.myTeams": "Team Settings",
  "breadcrumbs.projects": "Projects",
  "auth.finishing": "Finishing authentication...",
  "welcome.badge": "Getting started",
  "welcome.title": "Create your first team",
  "welcome.teamName": "Team name",
  "welcome.placeholder": "e.g. QA Team",
  "welcome.create": "Create team",
  "welcome.error.required": "Team name is required.",
  "welcome.error.create": "Failed to create team.",
  "projects.title": "Projects",
  "projects.newProject": "New Project",
  "projects.addProjectTitle": "Add Project",
  "projects.projectName": "Project Name",
  "projects.enterProjectName": "Enter project name",
  "projects.createError": "Failed to create project",
  "projects.deleteProject.title": "Delete Project",
  "projects.deleteProject.confirm": "Delete",
  "projects.deleteProject.body": "Are you sure you want to delete {name}? This will permanently delete all test cases in this project.",
  "projects.editProject.title": "Edit Project Name",
  "projects.editProject.save": "Save",
  "projects.newProject.formPlaceholder": "Project Name",
  "projects.create": "Create",
  "projects.cancel": "Cancel",
  "projects.team.emptyTitle": "Create your first team",
  "projects.team.emptySubtitle": "Projects belong to teams. Create a team before creating projects.",
  "projects.team.placeholder": "Team name",
  "projects.team.create": "Create Team",
  "projects.team.createError": "Failed to create team",
  "projects.testCasesCount": "{count} Test Cases",
  "projects.lastUpdated": "Last updated: {time}",
  "projects.noProjects.title": "No projects yet",
  "projects.noProjects.subtitle": "Get started by creating your first project to organize your test cases.",
  "projects.noProjects.create": "Create Project",
  "projects.tooltip.edit": "Edit Project",
  "projects.tooltip.delete": "Delete Project",
  "projects.tooltip.cannotDeleteRunning": "Cannot delete project with running tests",
  "team.page.title": "Team Settings",
  "team.page.create.open": "Add Team",
  "team.page.create.placeholder": "Team name",
  "team.page.create.confirm": "Create Team",
  "team.page.settings.name": "Team Name",
  "team.page.settings.edit": "Edit",
  "team.page.settings.save": "Save",
  "team.page.transfer.title": "Transfer Ownership",
  "team.page.transfer.subtitle": "Enter the email of a joined member to receive ownership.",
  "team.page.transfer.emailLabel": "New owner email",
  "team.page.transfer.emailPlaceholder": "teammate@example.com",
  "team.page.transfer.noEligibleMembers": "No eligible member to transfer ownership to.",
  "team.page.transfer.confirm": "Transfer Ownership",
  "team.page.transfer.dialog.title": "Transfer Ownership",
  "team.page.transfer.dialog.body": "Transfer ownership to this member? You will become a member.",
  "team.page.transfer.dialog.target": "New owner: {email}",
  "team.page.transfer.error.emailRequired": "Email is required.",
  "team.page.transfer.error.emailInvalid": "Please enter a valid email.",
  "team.page.transfer.error.notFound": "Member not found in this team.",
  "team.page.delete.title": "Delete Team",
  "team.page.delete.body": "Delete {name}? This removes every project and record in this team.",
  "team.page.delete.confirm": "Delete Team",
  "team.page.delete.open": "Delete Team",
  "team.page.delete.confirmNameLabel": "Type {name} to confirm deletion",
  "team.page.delete.zoneTitle": "Danger Zone",
  "team.page.delete.zoneSubtitle": "Deleting this team removes every project and record in this team.",
  "team.page.tab.members": "Members",
  "team.page.tab.api": "API Key & Usage",
  "team.page.tab.runners": "Runners",
  "team.page.tab.integration": "Integration",
  "team.page.tab.settings": "Settings",
  "team.integration.slack.title": "Slack Notifications",
  "team.integration.slack.description": "Connect a Slack bot token for this team workspace.",
  "team.integration.slack.connectionStatus": "Connection status:",
  "team.integration.slack.workspace": "Workspace:",
  "team.integration.slack.botUser": "Bot user:",
  "team.integration.slack.tokenLabel": "Bot token",
  "team.integration.slack.tokenPlaceholder": "xoxb-...",
  "team.integration.slack.connect": "Connect",
  "team.integration.slack.disconnect": "Disconnect",
  "team.integration.slack.test": "Test connection",
  "team.integration.slack.testing": "Testing...",
  "team.integration.slack.saving": "Saving...",
  "team.integration.slack.status.connected": "Connected",
  "team.integration.slack.status.disconnected": "Not connected",
  "team.integration.slack.notice.saved": "Slack token saved.",
  "team.integration.slack.notice.removed": "Slack token removed.",
  "team.integration.slack.notice.tested": "Slack connection successful.",
  "team.integration.slack.error.tokenRequired": "Slack bot token is required.",
  "team.integration.slack.error.tokenMissing": "No saved Slack token. Paste a token or connect first.",
  "team.integration.slack.error.tokenInvalid": "Slack token is invalid. Reconnect it and try again.",
  "team.integration.slack.error.slackUpstream": "Slack is temporarily unavailable. Try again.",
  "team.integration.slack.error.invalidPayload": "Invalid request payload.",
  "team.integration.slack.error.loadFailed": "Failed to load Slack settings.",
  "team.integration.slack.error.saveFailed": "Failed to save Slack token.",
  "team.integration.slack.error.disconnectFailed": "Failed to disconnect Slack.",
  "team.integration.slack.error.testFailed": "Slack connection test failed.",
  "team.integration.slack.helpPrefix": "Setup guide",
  "team.integration.slack.setup.step1": "Create or open your Slack app at",
  "team.integration.slack.setup.step2": "Go to Features > OAuth & Permissions.",
  "team.integration.slack.setup.step3": "Add Bot Token Scopes: chat:write, channels:read, channels:join, and groups:read.",
  "team.integration.slack.setup.step4": "In OAuth Tokens section, install the app to your workspace.",
  "team.integration.slack.setup.step5": "Copy the Bot User OAuth Token (xoxb-...), paste it above, then click Connect and Test connection.",
  "team.page.error.load": "Failed to load team details.",
  "team.page.error.create": "Failed to create team.",
  "team.page.error.rename": "Failed to update team.",
  "team.page.error.transfer": "Failed to transfer ownership.",
  "team.page.error.delete": "Failed to delete team.",
  "team.members.title": "Team Members",
  "team.members.subtitle": "Manage members for this team.",
  "team.members.roles.owner": "Owner",
  "team.members.roles.member": "Member",
  "team.members.readOnly": "Read only",
  "team.members.empty": "No team members yet.",
  "team.members.unknownEmail": "Unknown email",
  "team.members.pendingSuffix": "(pending)",
  "team.members.remove.title": "Remove team member",
  "team.members.remove.confirm": "Remove",
  "team.members.remove.body": "Remove {email} from this team?",
  "team.members.error.load": "Failed to load team members.",
  "team.members.error.remove": "Failed to remove team member.",
  "team.members.add.open": "Add Member",
  "team.members.add.confirm": "Add Member",
  "team.members.add.email": "Email",
  "team.members.add.emailPlaceholder": "teammate@example.com",
  "team.members.add.error.email": "Email is required.",
  "team.members.add.error.create": "Failed to add team member.",
  "team.members.table.person": "Member",
  "team.members.table.role": "Role",
  "team.members.table.dateAdded": "Date added",
  "team.members.table.actions": "Actions",
  "team.ai.title": "AI Provider Key",
  "team.ai.description": "This provider key is shared by every run in this team.",
  "team.ai.placeholder": "Enter provider API key",
  "team.ai.apiKey.helperText": "Keys must be plain ASCII. No spaces, newlines, or emojis.",
  "team.ai.apiKey.invalid.empty": "API key is required",
  "team.ai.apiKey.invalid.tooShort": "API key must be at least 8 characters",
  "team.ai.apiKey.invalid.nonAscii": "API key must use visible ASCII characters only (no spaces, newlines, or emojis)",
  "team.ai.apiKey.storedInvalid": "This team's AI key is stored in an invalid format. Re-save it to continue running tests.",
  "team.ai.save": "Save",
  "team.ai.saving": "Saving...",
  "team.ai.remove": "Remove key",
  "team.ai.error.load": "Failed to load team key status",
  "team.ai.error.save": "Failed to save team key",
  "team.ai.error.remove": "Failed to remove team key",
  "team.ai.notice.keyMissingAfterConfigSave": "Provider settings saved. Add an API key before running AI steps.",
  "team.ai.error.temperature": "Temperature must be between 0 and 2",
  "team.ai.provider.label": "Provider",
  "team.ai.provider.option.openrouter": "OpenRouter",
  "team.ai.provider.option.openaiCompatible": "OpenAI-compatible",
  "team.ai.baseUrl": "Base URL",
  "team.ai.mainModel": "Main model",
  "team.ai.planningModel": "Planning model",
  "team.ai.insightModel": "Insight model",
  "team.ai.temperature": "Temperature",
  "team.ai.resetToDefault": "Reset to Default",
  "team.ai.modelConfigHint": "Model and common config reference:",
  "team.ai.removeConfirm.message": "Are you sure you want to remove the team API key? Runs will not work without a configured key.",
  "team.ai.removeConfirm.confirm": "Remove",
  "team.usage.title": "Usage Records",
  "team.usage.subtitle": "All test run usage records for this team.",
  "team.usage.filters.project": "Project",
  "team.usage.filters.allProjects": "All projects",
  "team.usage.filters.from": "From",
  "team.usage.filters.to": "To",
  "team.usage.table.project": "Project",
  "team.usage.table.id": "ID",
  "team.usage.table.testCase": "Test Case",
  "team.usage.table.run": "Test Run",
  "team.usage.table.noTestCase": "No linked test case",
  "team.usage.empty": "No usage records yet.",
  "team.usage.error.load": "Failed to load team usage.",
  "team.runners.title": "Runners",
  "team.runners.subtitle": "Manage team-level execution capacity and Android devices.",
  "team.runners.add": "Add Runner",
  "team.runners.add.loading": "Creating...",
  "team.runners.error.load": "Failed to load runners.",
  "team.runners.error.pairing": "Failed to create pairing token.",
  "team.runners.error.unpair": "Failed to unpair runner.",
  "team.runners.execution.macos": "macOS runners online",
  "team.runners.execution.availableDevices": "Available devices",
  "team.runners.execution.staleDevices": "Offline devices",
  "team.runners.table.title": "Connected Runners",
  "team.runners.table.empty": "No runners connected yet.",
  "team.runners.table.runner": "Runner",
  "team.runners.table.kind": "Kind",
  "team.runners.table.status": "Status",
  "team.runners.table.devices": "Devices",
  "team.runners.table.lastSeen": "Last seen",
  "team.runners.table.actions": "Actions",
  "team.runners.unpair": "Unpair",
  "team.runners.unpair.loading": "Unpairing...",
  "team.runners.unpair.dialog.title": "Unpair runner",
  "team.runners.unpair.dialog.warning": "This will disconnect the runner from this team.",
  "team.runners.unpair.dialog.target": "Runner: {label}",
  "team.runners.installation.title": "Install or Update CLI",
  "team.runners.installation.subtitle": "Install the SkyTest CLI on the machine that will run your tests.",
  "team.runners.installation.install": "Install",
  "team.runners.installation.update": "Update to latest version",
  "team.runners.troubleshooting.title": "CLI Reference",
  "team.runners.troubleshooting.subtitle": "Run these commands on the machine where this runner is installed.",
  "team.runners.troubleshooting.commonTitle": "Common commands",
  "team.runners.troubleshooting.noOffline": "No offline runners detected.",
  "team.runners.troubleshooting.runnerId": "Runner ID: {id}",
  "team.runners.troubleshooting.runnerCommandsTitle": "Runner commands",
  "team.runners.devices.title": "Android Devices",
  "team.runners.devices.empty": "No Android devices published yet.",
  "team.runners.devices.name": "Device",
  "team.runners.devices.id": "Device ID",
  "team.runners.devices.runner": "Runner",
  "team.runners.devices.status": "Status",
  "team.runners.devices.lastSeen": "Last seen",
  "team.runners.pairing.title": "Add Runner",
  "team.runners.pairing.subtitle": "Use this one-time token in your macOS runner setup.",
  "team.runners.pairing.token": "Pairing token",
  "team.runners.pairing.expiresAt": "Expires at: {time}",
  "team.runners.pairing.generate": "Generate pairing token",
  "team.runners.pairing.regenerate": "Regenerate",
  "team.runners.pairing.step1.description": "A one-time token that links a runner on this machine to your team. It expires in 10 minutes.",
  "team.runners.pairing.pairTitle": "Pair your runner",
  "team.runners.pairing.pairDescription": "Run this command on the target machine. The runner will auto-start after pairing and appear in the table above.",
  "team.runners.pairing.commandLabel": "Pair command",
  "team.runners.troubleshooting.referenceTitle": "CLI reference",
  "team.runners.troubleshooting.listRunners": "List runners",
  "team.runners.troubleshooting.listRunnersDesc": "Check all paired runners and their current status.",
  "team.runners.troubleshooting.syncRunners": "Sync runners",
  "team.runners.troubleshooting.syncRunnersDesc": "Reconcile local runners with server state and remove stale local entries.",
  "team.runners.troubleshooting.pairRunner": "Pair a new runner",
  "team.runners.troubleshooting.pairRunnerDesc": "Link a runner to this team. Get a one-time token from the Add Runner button above.",
  "team.runners.troubleshooting.offlineTitle": "Offline runners",
  "team.runners.troubleshooting.start": "Start runner",
  "team.runners.troubleshooting.startDesc": "Run this on the machine where the runner is installed.",
  "team.runners.troubleshooting.stop": "Stop runner",
  "team.runners.troubleshooting.logs": "View logs",
  "team.runners.troubleshooting.unpairRunner": "Unpair runner",
  "project.startNewRun": "Start New Run",
  "project.startNewLoginFlow": "New Login Flow",
  "project.search.placeholder": "Search...",
  "project.search.button": "Search",
  "project.exportAll": "Export All",
  "project.exportSelected": "Export",
  "project.exportSelected.count": "Export",
  "project.batchImport.button": "Import",
  "project.batchImport.dialog.titleError": "Import Issues Found",
  "project.batchImport.dialog.titleWarning": "Import Warnings",
  "project.batchImport.dialog.titleOverwrite": "Confirm Overwrite",
  "project.batchImport.dialog.importValidOnly": "Import Valid Records",
  "project.batchImport.dialog.overwriteAndImport": "Overwrite and Import",
  "project.batchImport.dialog.overwriteValidRecords": "Overwrite Valid Records",
  "project.batchImport.dialog.continueImport": "Continue Import",
  "project.batchImport.dialog.discard": "Discard",
  "project.batchImport.dialog.importCompleteOnly": "Import complete only",
  "project.batchImport.dialog.importAllDraft": "Import all as draft",
  "project.batchImport.dialog.summary": "Files: {total}, complete: {complete}, incomplete: {incomplete}, invalid: {invalid}",
  "project.table.id": "ID",
  "project.table.name": "Name",
  "project.table.latestStatus": "Latest Status",
  "project.table.status": "Status",
  "project.table.verification": "Verification",
  "project.table.lastRun": "Last Run",
  "project.table.updated": "Updated",
  "project.table.actions": "Actions",
  "project.table.selectAll": "Select all test cases",
  "project.table.selectOne": "Select test case: {name}",
  "project.noTestCases.title": "No test cases yet",
  "project.noTestCases.subtitle": "Create your first test case by starting a new test run.",
  "project.noLoginFlows.title": "No login flows yet",
  "project.noLoginFlows.subtitle": "Create a reusable login flow that can run like a test case.",
  "project.loginFlows.caption": "Login flows are reusable sign-in sequences. Attach one to a test case's target so the test starts already authenticated.",
  "project.loginFlow.usedBy": "Used by {count} test cases",
  "project.loginFlow.unused": "Not used by any test case yet",
  "project.deleteTestCase.title": "Delete Test Case",
  "project.deleteTestCase.confirm": "Delete",
  "project.deleteTestCase.body": "Are you sure you want to delete {name}? This will permanently delete all test history for this test case.",
  "project.testCase.type.multi": "multi-browser",
  "project.testCase.type.single": "single-browser",
  "project.tooltip.clone": "Clone Test Case",
  "project.tooltip.run": "Run Test",
  "project.tooltip.viewRunning": "View Running Test",
  "project.tooltip.viewHistory": "View History",
  "project.tooltip.delete": "Delete Test Case",
  "project.tooltip.cannotDeleteRunning": "Cannot delete while test is running or queued",
  "run.breadcrumb.runTest": "Run Test",
  "run.breadcrumb.newRun": "New Run",
  "run.breadcrumb.editLoginFlow": "Run Login Flow",
  "run.breadcrumb.newLoginFlow": "New Login Flow",
  "run.title.runTest": "Run Test",
  "run.title.startNewRun": "Start New Run",
  "run.title.editLoginFlow": "Run Login Flow",
  "run.title.newLoginFlow": "New Login Flow",
  "run.subtitle.loginFlow": "A reusable sign-in sequence that other test cases attach to so they start already authenticated.",
  "run.button.stopTest": "Stop Test",
  "run.button.quitQueue": "Quit Queue",
  "run.testInProgress.title": "Test in Progress",
  "run.testInProgress.subtitle": "A test is currently running for this test case.",
  "run.testInProgress.view": "View Running Test",
  "run.error.connectionLost": "Connection lost. Please refresh to check status.",
  "run.error.testStopped": "Test stopped by user",
  "run.error.failedToStop": "Failed to stop test",
  "run.error.failedToSave": "Failed to save test case",
  "run.error.selectOrCreate": "Please select or create a test case first.",
  "run.error.selectProjectUpload": "Please select a project before uploading files.",
  "run.error.noProjectSelected": "No project selected",
  "run.error.failedCreateTestCaseUpload": "Failed to create test case for file uploads. Please ensure required fields are filled (URL and a prompt or steps).",
  "run.error.nameRequired": "Test case name is required",
  "run.error.testCaseIdRequired": "Test case ID is required",
  "history.title": "Test History",
  "history.error.load": "Failed to load test history.",
  "history.table.status": "Status",
  "history.table.date": "Date",
  "history.table.runBy": "Run by",
  "history.table.actions": "Actions",
  "history.table.testCase": "Test case",
  "history.table.started": "Started",
  "history.noHistory.title": "No test history",
  "history.noHistory.subtitle": "This test case hasn't been run yet. Run the test to see results here.",
  "history.viewLive": "View Live",
  "history.viewDetails": "View Details",
  "history.deleteRun": "Delete Run",
  "history.cannotDeleteRunning": "Cannot delete while running or queued",
  "history.modal.delete.title": "Delete Test Run",
  "history.modal.delete.titleRunning": "Stop & Delete Test Run",
  "history.modal.delete.confirm": "Delete",
  "history.modal.delete.confirmRunning": "Stop & Delete",
  "history.modal.runningWarningTitle": "Warning: This test is currently running or queued.",
  "history.modal.runningWarningBody": "Deleting it will STOP the execution immediately and remove all records.",
  "history.modal.delete.body": "Are you sure you want to delete this test run? This action cannot be undone.",
  "runDetail.title": "Test Run Details",
  "runDetail.notFound": "Test run not found.",
  "runDetail.breadcrumb.testCaseFallback": "Test Case",
  "runDetail.breadcrumb.runPrefix": "Run - {time}",
  "runDetail.runBy": "Run by: {email}",
  "usage.agentKeys.title": "Agent API Keys",
  "usage.agentKeys.description": "Generate API keys for external agents (e.g., Claude Code, Claude Desktop, Codex, Antigravity) to access SkyTest via MCP.",
  "usage.agentKeys.generate": "Generate Key",
  "usage.agentKeys.name": "Key Name",
  "usage.agentKeys.name.placeholder": "e.g. claude-code-local",
  "usage.agentKeys.prefix": "Prefix",
  "usage.agentKeys.lastUsed": "Last Used",
  "usage.agentKeys.never": "Never",
  "usage.agentKeys.revoke": "Revoke",
  "usage.agentKeys.revokeConfirm.title": "Revoke API Key",
  "usage.agentKeys.revokeConfirm.body": "Revoke \"{name}\"? Any agent using this key will lose access.",
  "usage.agentKeys.revokeConfirm.confirm": "Revoke",
  "usage.agentKeys.created.title": "API Key Created",
  "usage.agentKeys.created.warning": "Copy this key now. It will not be shown again.",
  "usage.agentKeys.created.copied": "Copied",
  "usage.agentKeys.created.modal.title": "API Key Created",
  "usage.agentKeys.created.modal.keyLabel": "Agent API Key",
  "usage.agentKeys.created.modal.claudeInstallTitle": "Install to Claude Code",
  "usage.agentKeys.created.modal.claudeInstallSummary": "Copy and run this command to add SkyTest MCP directly to your Claude Code user config.",
  "usage.agentKeys.noKeys": "No agent API keys yet.",
  "usage.history.title": "Usage History",
  "usage.table.dateTime": "Date Time",
  "usage.table.type": "Type",
  "usage.table.description": "Description",
  "usage.table.actionsCount": "Actions Count",
  "usage.noUsageRecords": "No usage records found.",
  "usage.type.testRun": "Test Run",
  "usage.pagination.showing": "Showing {from} to {to} of {total}",
  "mcp.connection.title": "Connection Details",
  "mcp.connection.summary": "Use one of the following methods to connect SkyTest MCP.",
  "mcp.connection.general.title": "General MCP Configuration",
  "mcp.connection.general.summary": "Use this JSON snippet for MCP clients that support a `mcpServers` config file.",
  "mcp.connection.claudeCode.title": "Install to Claude Code",
  "mcp.connection.claudeCode.summary": "Run this command in your terminal, then restart Claude Code.",
  "mcp.connection.codex.title": "Install to Codex",
  "mcp.connection.codex.summary": "Run this command in your terminal, then restart Codex.",
  "mcp.connection.aiAgent.summary": "Connect your AI agent (Claude Code/Desktop, Codex, Antigravity, or other MCP clients) by adding the configuration below. It uses mcp-remote as a bridge to your SkyTest MCP endpoint.",
  "mcp.connection.aiAgent.step1": "Open your AI agent's MCP configuration file.",
  "mcp.connection.aiAgent.step2": "Add the \"skytest\" server entry under \"mcpServers\" using the sample below.",
  "mcp.connection.aiAgent.step3": "Replace <AGENT_API_KEY> with your key, save the file, then restart your AI agent.",
  "mcp.connection.aiAgent.configExample": "MCP configuration",
  "mcp.connection.skillInstall.title": "Install SkyTest Skills",
  "mcp.connection.skillInstall.summary": "Copy this prompt and send it to your agent:",
  "mcp.connection.skillInstall.prompt": "Install SkyTest skills from {link}.",
  "testForm.title": "Test Instructions",
  "testForm.import": "Import",
  "testForm.export": "Export",
  "testForm.importTitle": "Import test case from Excel",
  "testForm.exportTitle": "Export test case to Excel",
  "testForm.importWarnings": "Import warnings: {warnings}",
  "testForm.importError.invalidExcelFormat": "Only Excel files (.xlsx) are supported",
  "testForm.importError.failed": "Failed to import file",
  "testForm.tab.configurations": "Configurations",
  "testForm.tab.testSteps": "Test Steps",
  "testForm.sampleData": "Test with Sample Data",
  "testForm.testCaseName": "Test Case Name",
  "testForm.testCaseName.placeholder": "e.g. Login and Add to Cart",
  "testForm.testCaseId": "Test Case ID",
  "testForm.testCaseId.placeholder": "e.g. TC-001",
  "testForm.title.loginFlow": "Login Flow Instructions",
  "testForm.loginFlowName": "Login Flow Name",
  "testForm.loginFlowName.placeholder": "e.g. Standard user sign-in",
  "testForm.loginFlowId": "Login Flow ID",
  "testForm.loginFlowId.placeholder": "e.g. LF-001",
  "testForm.saveDraft": "Save Draft",
  "testForm.saving": "Saving...",
  "testForm.discard": "Discard Changes",
  "testForm.running": "Running Test...",
  "testForm.run": "Run Test",
  "builderForm.browserConfigs": "Browser Configurations",
  "builderForm.addBrowser": "Add Browser Target",
  "builderForm.testFiles": "Test Files",
  "builderForm.addFiles": "Add files",
  "builderForm.upload": "+ Upload",
  "builderForm.noFilesHint.title": "Upload files and copy the relative path to use in [Code] mode:",
  "builderForm.noFilesHint.max": "Max {mb}MB per file. Supports PDF, images, Office docs, CSV, JSON, XML, and more.",
  "builderForm.noFilesUploaded": "No files uploaded",
  "builderForm.testSteps": "Test Steps",
  "builderForm.variablesHint": "You can use the username and password as variables as below examples.",
  "builderForm.aiStep": "AI Step:",
  "builderForm.codeStep": "Code Step:",
  "builderForm.noSteps": "No steps defined yet.",
  "builderForm.noStepsHint": "Click below to add a step.",
  "builderForm.addStep": "Add Step",
  "builderForm.emptyStep": "Empty step",
  "builderForm.stepType.code": "Code",
  "builderForm.stepType.ai": "AI",
  "builderForm.alert.cannotDeleteBrowser": "Cannot delete this browser. There are steps linked to it. Please reassign or delete those steps first.",
  "browserConfig.url": "URL",
  "step.drag": "Drag step",
  "step.remove": "Remove step",
  "step.type.aiTitle": "AI Action - Natural language instruction",
  "step.type.codeTitle": "Playwright Code - Custom JavaScript",
  "step.label.ai": "Action Instructions",
  "step.label.code": "Playwright Code",
  "step.ai.placeholder": "Describe the action to perform...",
  "step.editor.loading": "Loading editor...",
  "file.copyPath": "Copy reference",
  "file.download": "Download",
  "file.delete": "Delete",
  "file.deleteFailed": "Failed to delete file",
  "upload.uploading": "Uploading...",
  "upload.clickToUpload": "Click to upload",
  "upload.orDragDrop": " or drag and drop",
  "upload.maxPerFile": "Max {mb}MB per file",
  "upload.error.noTestCase": "No test case available for upload",
  "upload.error.noTestCaseAttach": "No test case to attach files to",
  "upload.error.failedCreateTestCase": "Failed to create test case",
  "upload.error.uploadFailed": "Upload failed",
  "upload.error.fileTooLarge": "File \"{name}\" exceeds {mb}MB limit",
  "upload.error.fileTypeNotAllowed": "File type \"{type}\" is not allowed",
  "results.newActivity": "New Activity",
  "results.title": "Test Results",
  "results.copyLogs": "Copy Logs",
  "results.copied": "Copied!",
  "results.eventsCount": "{count} events",
  "results.readyTitle": "Ready to Run",
  "results.readySubtitle": "Configure your test parameters and click Run Test to begin",
  "results.queuedForLoginFlow": "Waiting for the login flow(s) below to finish before this test starts:",
  "results.waiting": "Waiting for events...",
  "results.closeLightbox": "Close lightbox",
  "results.slackDeliveryFailed": "Slack: not delivered ({reason})",
  "results.slackDeliveryReason.invalidAuth": "authentication failed",
  "results.slackDeliveryReason.notInChannel": "bot is not in the channel",
  "results.slackDeliveryReason.channelNotFound": "channel not found",
  "results.slackDeliveryReason.missingScope": "missing required Slack permissions",
  "results.slackDeliveryReason.tokenRevoked": "token revoked",
  "results.slackDeliveryReason.rateLimited": "Slack rate limit reached",
  "results.slackDeliveryReason.unknown": "delivery failed",
  "results.slackDeliveryReason.maxAttempts": "{reason}; retry attempts exhausted",
  "status.preparing": "Setting up…",
  "status.preparing.detail": "Preparing the test environment. This may take a moment.",
  "status.preparing.detailGeneric": "Preparing the test environment. This may take a moment.",
  "status.preparing.detailAndroid": "Starting the testing target and preparing the app state. This may take a few minutes.",
  "results.pass.title": "Test Passed",
  "results.pass.body": "All test steps completed successfully without errors.",
  "results.cancelled.title": "Test Cancelled",
  "results.cancelled.bodyWithEvents": "The test was stopped before completion. Partial results have been saved to history.",
  "results.cancelled.bodyNoEvents": "The test was stopped before any results were captured.",
  "run.cancellation.userSingle": "This test run was stopped manually.",
  "run.cancellation.userGroup": "This run was stopped when its test group was stopped.",
  "run.cancellation.mcp": "This run was stopped from the MCP integration.",
  "run.cancellation.mcpForUpdate": "This run was stopped from the MCP integration to apply a test case update.",
  "run.cancellation.loginFlowFailed": "This test did not run because a login flow in the group failed before it.",
  "run.cancellation.earlierCaseFailed": "This test did not run because an earlier test case in the group failed.",
  "results.fail.title": "Test Failed",
  "results.fail.copyError": "Copy Error",
  "results.fail.errorCode": "Error Code",
  "results.fail.infrastructure.title": "Infrastructure Network Failure",
  "results.fail.infrastructure.body": "This failure was caused by environment/network conditions (for example DNS resolution or blocked requests), not necessarily by product behavior.",
  "results.fail.aiKeyInvalidFormat": "Team AI key format invalid. Re-save key in Team Settings.",
  "results.fail.errorDetails": "Error Details:",
  "results.fail.bodyNoError": "The test encountered an error during execution. Check the logs above for details.",
  "timeline.screenshot": "Screenshot",
  "timeline.clickToEnlarge": "Click to enlarge",
  "sample.multi.name": "Sample Add to Cart Flow",
  "sample.multi.testCaseId": "TC-SAMPLE-001",
  "sample.multi.browserAName": "Shopper A Session",
  "sample.multi.browserBName": "Shopper B Session",
  "sample.multi.step1": "Log in with username {username} and password {password}.",
  "sample.multi.step2": "Log in with username {username} and password {password}.",
  "sample.multi.step3": "Add 'Sauce Labs Backpack' to cart.",
  "sample.multi.step4": "Add 'Sauce Labs Bike Light' to cart.",
  "sample.multi.step5": "Open the cart.",
  "sample.multi.step6": "Verify 'Sauce Labs Backpack' is visible in the cart.",
  "sample.multi.step7": "Verify there is exactly 1 item in the cart.",
  "sample.multi.step8": "Open the cart.",
  "sample.multi.step9": "Verify 'Sauce Labs Bike Light' is visible in the cart.",
  "sample.multi.step10": "Verify there is exactly 1 item in the cart.",
  "project.tab.testCases": "Test Cases",
  "project.tab.loginFlows": "Login Flows",
  "project.tab.testGroups": "Test Groups",
  "testGroup.caption": "Run several test cases back-to-back in one browser session.",
  "testGroup.new": "New Test Group",
  "testGroup.edit": "Edit Test Group",
  "testGroup.name": "Name",
  "testGroup.name.placeholder": "e.g. Checkout regression",
  "testGroup.displayId": "Group ID",
  "testGroup.items": "Test Cases (run in order)",
  "testGroup.items.empty": "No test cases added yet.",
  "testGroup.items.add": "Add a test case...",
  "testGroup.items.moveUp": "Move up",
  "testGroup.items.moveDown": "Move down",
  "testGroup.loginSessions": "Login Sessions",
  "testGroup.loginSessions.add": "Add login session...",
  "testGroup.loginSessions.namePlaceholder": "Session name",
  "testGroup.loginSessions.defaultName": "Login Session {label}",
  "testGroup.onFailure": "When a case fails",
  "testGroup.onFailure.stop": "Stop and skip the rest",
  "testGroup.onFailure.continue": "Continue running remaining cases",
  "testGroup.running.locked": "This test group is running — stop the run to edit.",
  "testGroup.sessions": "Sessions",
  "testGroup.sessions.notApplicable": "Not Applicable",
  "testGroup.empty": "No test groups yet. Create one to run several test cases in sequence.",
  "testGroup.noResults": "No test groups match your search.",
  "testGroup.run": "Run",
  "testGroup.running": "Starting...",
  "testGroup.caseCount": "{count} test cases",
  "testGroup.error.nameRequired": "Name is required",
  "testGroup.error.saveFailed": "Failed to save test group",
  "testGroup.error.runFailed": "Failed to start test group",
  "testGroup.tooltip.run": "Test group",
  "testGroup.tooltip.viewRunning": "View running run",
  "testGroup.tooltip.history": "Run history",
  "testGroup.history.title": "Test Group History",
  "testGroup.history.empty.title": "No runs yet",
  "testGroup.history.empty.subtitle": "This test group hasn't been run yet. Run it to see results here.",
  "testGroup.tooltip.cannotDeleteRunning": "Stop the run before deleting",
  "testGroup.delete.confirmTitle": "Delete test group?",
  "testGroup.delete.confirmBody": "\"{name}\" will be permanently deleted. Test runs already recorded are kept.",
  "testGroup.run.title": "Test Group Run",
  "testGroup.run.notFound": "Run not found",
  "testGroup.run.reused": "Reused session",
  "testGroup.run.progress": "{done}/{total} done",
  "testGroup.run.start": "Run Test Group",
  "testGroup.run.stop": "Stop Test Group",
  "testGroup.run.stopping": "Stopping...",
  "testGroup.run.stopConfirmTitle": "Stop test group?",
  "testGroup.run.stopConfirmBody": "Queued and running test cases in this group will be cancelled. Completed runs are kept.",
  "project.tab.configs": "Variables",
  "project.tab.integration": "Integration",
  "project.tab.scheduler": "Scheduler",
  "project.tab.settings": "Settings",
  "project.scheduler.title": "Scheduler",
  "project.scheduler.description": "Create saved schedules that enqueue project test cases automatically.",
  "project.scheduler.add": "Add schedule",
  "project.scheduler.empty": "No schedules yet.",
  "project.scheduler.fields.description": "Description",
  "project.scheduler.fields.timezone": "Timezone",
  "project.scheduler.fields.interval": "Interval",
  "project.scheduler.fields.testCases": "Test cases",
  "project.scheduler.fields.testGroups": "Test groups",
  "project.scheduler.testGroups.empty": "No test groups in this project yet.",
  "project.scheduler.testGroups.search": "Search test groups",
  "project.scheduler.fields.enabled": "Enabled",
  "project.scheduler.fields.enabledCaption": "When on, the selected tests run automatically on the schedule below.",
  "project.scheduler.fields.selectDays": "Select days",
  "project.scheduler.pattern.daily": "Every day",
  "project.scheduler.pattern.weekly": "Every week",
  "project.scheduler.pattern.monthly": "Every month",
  "project.scheduler.pattern.custom": "Custom",
  "project.scheduler.cronHelp": "Cron syntax reference",
  "project.scheduler.preview.cron": "Cron: {cron}",
  "project.scheduler.preview.nextRun": "Next run: {value}",
  "project.scheduler.preview.lastRun": "Last run: {value}",
  "project.scheduler.preview.never": "Never",
  "project.scheduler.cadence.daily": "Every day at {time} ({timezone})",
  "project.scheduler.cadence.weekly": "Every {weekday} at {time} ({timezone})",
  "project.scheduler.cadence.monthly": "Day {day} of every month at {time} ({timezone})",
  "project.scheduler.cadence.custom": "{cron} ({timezone})",
  "project.scheduler.weekday.0": "SUN",
  "project.scheduler.weekday.1": "MON",
  "project.scheduler.weekday.2": "TUE",
  "project.scheduler.weekday.3": "WED",
  "project.scheduler.weekday.4": "THU",
  "project.scheduler.weekday.5": "FRI",
  "project.scheduler.weekday.6": "SAT",
  "project.scheduler.status.enabled": "Enabled",
  "project.scheduler.status.disabled": "Disabled",
  "project.scheduler.enable": "Enable",
  "project.scheduler.disable": "Disable",
  "project.scheduler.validation.descriptionRequired": "Description is required.",
  "project.scheduler.validation.testCasesRequired": "Select at least one test case.",
  "project.scheduler.saving": "Saving...",
  "project.scheduler.discard": "Discard",
  "project.scheduler.deleteTitle": "Delete schedule",
  "project.scheduler.deleteBody": "Delete this saved schedule?",
  "project.scheduler.testCases.search": "Search test cases",
  "project.scheduler.testCases.selectedOnly": "Show selected only",
  "project.scheduler.testCases.id": "ID",
  "project.scheduler.testCases.name": "Name",
  "project.scheduler.testCases.empty": "No matching test cases.",
  "project.scheduler.testCases.loading": "Loading test cases...",
  "project.scheduler.testCases.loadFailed": "Failed to load test cases.",
  "project.scheduler.testCases.remoteMode": "Large project mode uses server-side search and paging.",
  "project.scheduler.testCases.selectedCount": "{count} selected",
  "project.scheduler.testCases.selectedCountLabel": "No. of test cases selected: {count}",
  "project.scheduler.testCases.neverRun": "Never run",
  "project.scheduler.runStatus.QUEUED": "Queued",
  "project.scheduler.runStatus.PREPARING": "Preparing",
  "project.scheduler.runStatus.RUNNING": "Running",
  "project.scheduler.runStatus.PASS": "Pass",
  "project.scheduler.runStatus.FAIL": "Fail",
  "project.scheduler.runStatus.CANCELLED": "Cancelled",
  "project.scheduler.runStatus.DRAFT": "Draft",
  "run.trigger.scheduler": "Scheduler",
  "project.settings.title": "Execution Settings",
  "project.settings.description": "Control how many test runs can execute at the same time in this project.",
  "project.settings.concurrentRuns.label": "Max concurrent runs",
  "project.settings.concurrentRuns.help": "Allowed range: 1 to {max}.",
  "project.settings.saving": "Saving...",
  "project.settings.error.invalidInteger": "Enter a whole number.",
  "project.settings.error.outOfRange": "Value must be between 1 and {max}.",
  "project.settings.error.save": "Failed to update project settings.",
  "project.integration.slack.title": "Slack Notifications",
  "project.integration.slack.description": "Configure Slack notifications for this project.",
  "project.integration.slack.enable": "Enable Slack notifications",
  "project.integration.slack.enableCaption": "Post this project's test results to Slack.",
  "project.integration.slack.individual.enable": "Enable test case notifications",
  "project.integration.slack.individual.caption": "Send a message when a single test case run finishes.",
  "project.integration.slack.channelScopeNote": "All Slack notifications for this project are sent to this channel.",
  "project.integration.slack.group.title": "Test group run notifications",
  "project.integration.slack.individual.title": "Test case run notifications",
  "project.integration.slack.template.groupFailedTitle": "Failed message template (Test Group)",
  "project.integration.slack.template.groupPassedTitle": "Passed message template (Test Group)",
  "project.integration.slack.templates.heading": "Message templates",
  "project.integration.slack.templates.tooLong": "A message template exceeds 3500 characters.",
  "project.integration.slack.sendTestGroupFailed": "Send test message (Failed group)",
  "project.integration.slack.sendTestGroupPassed": "Send test message (Passed group)",
  "project.integration.slack.status.enabled": "Enabled",
  "project.integration.slack.status.disabled": "Disabled",
  "project.integration.slack.notifyMode.failedOnly": "Notify for failed test case runs only",
  "project.integration.slack.notifyMode.bothPassedAndFailed": "Notify for both passed and failed test case runs",
  "project.integration.slack.parentTokenMissing": "Team Slack token is missing.",
  "project.integration.slack.openTeamIntegration": "Open team integration",
  "project.integration.slack.channel": "Channel",
  "project.integration.slack.channelPlaceholder": "Slack channel ID (e.g. C123ABC)",
  "project.integration.slack.template.failedTitle": "Failed message template (Test Case)",
  "project.integration.slack.template.passedTitle": "Passed message template (Test Case)",
  "project.integration.slack.group.enable": "Enable test group notifications",
  "project.integration.slack.group.suppressionNote": "When a test group run completes, one summary message is sent to the channel. Per-case messages are suppressed, and nothing is sent if the run is cancelled or stopped.",
  "project.integration.slack.template.mentionTip": "Tip: mention a user with <@U123ABC> (replace U123ABC with the user's Slack ID).",
  "project.integration.slack.resetDefault": "Reset to default",
  "project.integration.slack.channelSelected": "Selected channel:",
  "project.integration.slack.sendTestFailed": "Send test message (Failed case)",
  "project.integration.slack.sendTestPassed": "Send test message (Passed case)",
  "project.integration.slack.notice.saved": "Slack settings saved.",
  "project.integration.slack.notice.tested": "Test message sent.",
  "project.integration.slack.error.invalidChannel": "Slack channel is invalid or the bot cannot access it.",
  "project.integration.slack.error.teamTokenMissing": "Team Slack token is missing. Configure it in Team Settings > Integration.",
  "project.integration.slack.error.teamTokenInvalid": "Team Slack token is invalid. Reconnect it in Team Settings > Integration.",
  "project.integration.slack.error.slackUpstream": "Slack is temporarily unavailable. Try again.",
  "project.integration.slack.error.invalidTemplate": "Slack message template is invalid.",
  "project.integration.slack.error.invalidTemplateWithDetail": "Slack message template is invalid: {detail}",
  "project.integration.slack.error.notConfigured": "Slack notifications are not fully configured for this project.",
  "project.integration.slack.error.loadFailed": "Failed to load Slack settings.",
  "project.integration.slack.error.saveFailed": "Failed to save Slack settings.",
  "project.integration.slack.error.testFailed": "Failed to send Slack test message.",
  "project.usage.summary.records": "Usage records",
  "project.usage.summary.actions": "AI actions",
  "project.usage.summary.members": "Active members",
  "project.usage.summary.tokens": "Tokens",
  "project.usage.summary.cost": "Estimated cost",
  "project.usage.notReported": "Not reported",
  "project.usage.filters.user": "User",
  "project.usage.filters.allUsers": "All users",
  "project.usage.filters.testCase": "Test case",
  "project.usage.filters.allTestCases": "All test cases",
  "project.usage.filters.from": "From",
  "project.usage.filters.to": "To",
  "project.usage.table.user": "User",
  "project.usage.table.testCase": "Test case",
  "project.usage.table.noDescription": "No description",
  "project.usage.table.noTestCase": "No linked test case",
  "project.usage.error.load": "Failed to load project usage.",
  "android.setup.help": "Start an existing emulator on your Mac:\n1. List emulators: `emulator -list-avds`\n2. Boot one emulator: `emulator -avd <AVD_NAME> -port 5554`",
  "device.section.connected": "Physical Devices",
  "device.section.profiles": "Emulators",
  "device.bootWindow": "Boot (window)",
  "device.stop": "Stop",
  "device.inUseProject": "In Use ({project})",
  "device.inUseAnotherTeam": "In Use (Another Team)",
  "device.notRunning": "Not running",
  "device.connected": "Connected",
  "device.adb.unauthorized": "Unauthorized",
  "device.adb.offline": "Offline",
  "device.adb.unknown": "Unavailable",
  "device.state.starting": "Starting",
  "device.state.booting": "Booting",
  "device.state.idle": "Idle",
  "device.state.cleaning": "Cleaning",
  "device.state.stopping": "Stopping",
  "device.state.dead": "Stopped",
  "device.state.online": "Online",
  "device.state.notRunning": "Not Running",
  "device.state.offline": "Offline",
  "device.state.unavailable": "Unavailable",
  "device.state.stale": "Stale",
  "device.actionFailed": "Failed to update device state. Please try again.",
  "device.testRun": "Test Run",
  "configs.title.urls": "URLs",
  "configs.title.appIds": "App IDs",
  "configs.title.variables": "Variables",
  "configs.title.files": "Files",
  "configs.add": "Add",
  "configs.name": "Name",
  "configs.name.placeholder": "MY_VARIABLE",
  "configs.name.placeholder.url": "URL_1",
  "configs.name.placeholder.app_id": "APP_ID_1",
  "configs.name.placeholder.variable": "VARIABLE_1",
  "configs.name.placeholder.file": "FILE_1",
  "configs.value": "Value",
  "configs.value.placeholder": "Enter value",
  "configs.url.placeholder": "https://example.com",
  "configs.empty": "No configurations yet",
  "configs.empty.hint": "Add configurations to reuse across test cases.",
  "configs.hint.intro": "Use variables in your test steps. For example, add a variable \"USERNAME\" = admin, a variable \"PASSWORD\" = s3cret and mark it masked, and upload a file \"avatar.png\":",
  "configs.hint.aiStep": "AI Step:",
  "configs.hint.codeStep": "Code Step:",
  "configs.hint.aiExample": "Login with username {{USERNAME}} and password {{PASSWORD}}.\nClick the Done button.",
  "configs.hint.codeExample": "await page.fill('#username', vars[\"USERNAME\"]);\nawait page.fill('#password', vars[\"PASSWORD\"]);\nawait page.setInputFiles('input[type=\"file\"]', testFiles[\"AVATAR_FILE\"]);\nawait page.getByRole('button', { name: 'Done' }).click();",
  "configs.error.nameTaken": "A config with this name already exists",
  "configs.error.invalidName": "Name must be UPPER_SNAKE_CASE (e.g. MY_VARIABLE)",
  "configs.error.nameRequired": "Name is required",
  "configs.error.valueRequired": "Value is required",
  "configs.error.fileRequired": "File is required",
  "configs.type.url": "URL",
  "configs.type.app_id": "App ID",
  "configs.type.variable": "Variable",
  "configs.type.random_string": "Random String",
  "configs.type.file": "File",
  "configs.title.randomStrings": "Random Strings",
  "configs.masked": "Masked",
  "configs.name.placeholder.enter": "Enter name",
  "configs.name.placeholder.random_string": "RANDOM_1",
  "configs.randomString.timestampUnix": "Timestamp (Unix)",
  "configs.randomString.timestampDatetime": "Timestamp (Datetime)",
  "configs.randomString.uuid": "UUID",
  "configs.copyRef": "Copy reference",
  "configs.manage": "Manage",
  "configs.override": "overrides project",
  "configs.insertVariable": "Insert Variable",
  "configs.noVariables": "No variables available",
  "configs.section.projectVariables": "Project Variables",
  "configs.section.testCaseVariables": "Test Case Variables",
  "configs.section.browserConfig": "Testing Targets",
  "configs.section.projectVariables.empty": "—",
  "configs.browser.name": "Name",
  "configs.browser.name.placeholder": "e.g. Admin Panel",
  "configs.android.name.placeholder": "e.g. User App",
  "configs.browser.url": "URL",
  "configs.browser.url.placeholder": "Select URL or type one",
  "configs.browser.width": "Width",
  "configs.browser.height": "Height",
  "configs.browser.loginFlow": "Login Flow",
  "configs.browser.loginFlow.none": "None",
  "configs.browser.auth": "Authentication",
  "configs.browser.reuseSession": "Reuse test-group login session",
  "configs.browser.reuseSession.hint": "When this case runs inside a Test Group, skip logging in again and reuse the session established earlier in the group.",
  "configs.browser.reuseSession.disabled": "select a login flow first",
  "configs.browser.webauthn": "Test passkey login",
  "configs.browser.webauthn.hint": "Installs a virtual WebAuthn authenticator so passkey (WebAuthn) login and registration work in headless runs.",
  "configs.browser.addBrowser": "Add Browser Target",
  "configs.android.appId": "App ID",
  "configs.android.appId.placeholder": "Select App ID or type one",
  "configs.android.appId.none": "No app IDs found on this device",
  "configs.android.device": "Select Device",
  "configs.android.device.placeholder": "Select device",
  "configs.android.device.none": "No available devices",
  "configs.android.clearAppState": "Clear app data",
  "configs.android.allowAllPermissions": "Allow all permissions",
  "configs.target.addAndroid": "Add Android Target"
};
