lazyBoy/apps/web/src/locales/en.ts

458 lines
21 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { zhTW } from "./zh-TW";
/** English UI copy. Keys must stay in lockstep with zh-TW. */
export const en: { [K in keyof typeof zhTW]: string } = {
search: "Search",
sharedComputer: "Shared computer",
privateComputer: "Private computer",
stopped: "Stopped",
booting: "Starting",
running: "Running",
suspended: "Sleeping",
error: "Error",
openComputer: "Start computer",
stopTask: "Stop task",
takeControl: "Take control",
takeOverNow: "Take over",
releaseControl: "Release control",
done: "Done",
skip: "Skip",
localWorkspace: "Local workspace",
pinned: "Pinned",
agentGroup: "Agent",
operationFailed: "That didnt work",
loadFailed: "Couldnt load",
settingsFailed: "Couldnt save settings",
loginFailed: "Couldnt sign in",
rememberFailed: "Couldnt remember that message",
clipboardWriteBlocked: "The browser blocked clipboard access.",
newConversation: "New chat",
workTools: "Work tools",
computer: "Computer",
memory: "Memory",
plugins: "Plugins",
pluginShort: "Plugin",
botSettings: "Bot settings",
add: "Add",
addBot: "New bot",
addGroup: "New group",
groups: "Groups",
unreadMessages: "{count} unread",
members: "{count} members",
hideHiddenItems: "Hide hidden items",
showHiddenItems: "Show hidden items",
mcpConnected: "{count} MCP connected",
connectMcpServer: "Connect an MCP server",
openOnPhone: "Open on phone",
settings: "Settings",
about: "About",
helpCenter: "Help",
sendFeedback: "Send feedback",
logout: "Sign out",
workspaceMenu: "Workspace menu",
chooseBot: "Choose a bot",
startRoomDiscussion: "Start a discussion with {name}",
startBotWork: "Start working with {name}",
roomWillReply: "{names} will all reply.",
botWelcome: "Send a message and it will get it done on its own computer.",
remembered: "Remembered",
remember: "Remember",
working: "{name} is working…",
copyCode: "Copy code",
copiedCode: "Copied",
copyMessage: "Copy",
copiedMessage: "Copied",
anotherConversationQueued: "Another chat is running, so this one is queued.",
workingStep: "{name} is working… {step}",
queuedMessages: "{count} more messages queued",
pausedUserControl: "Youre controlling the screen, so {name} is paused. Press “Release control” when youre done and it will continue from here (queued messages too).",
pausedNeedsUser: "{name} needs you on the screen (sign-in or verification). Press “Take over”, then “Release control” when youre done.",
releaseAndContinue: "Release and continue",
attachFile: "Attach file",
attachFileHint: "Images go to the model on this message. Other files land in the computer inbox and are deleted after two hours.",
attachTooMany: "Up to 4 attachments at a time",
attachTooLarge: "Each file must be 10 MB or smaller",
attachType: "That file type cant be attached",
attachRemove: "Remove {name}",
attachedFile: "Attached {name}",
attachDrop: "Drop to attach",
teachTask: "Teach a task",
teachTaskHint: "You demonstrate once; it turns that into a skill",
teachNeedsBot: "Choose a bot first",
taughtSkills: "Taught skills",
goalCommandHint: "Keep planning and executing until its verified or it needs you",
searchSkills: "Search skills",
noMatchingSkills: "No matching skills",
teachDialogLead: "Youll drive the screen while {name} watches: which controls you click, what you type, which pages you visit. It becomes a skill about intent and flow, not replayed coordinates.",
teachGoalLabel: "What are you demonstrating? (one sentence)",
teachGoalPlaceholder: "For example: open the STAR training system, finish the assigned videos, and complete the quiz",
teachTip1: "Work at a normal pace. Extra clicks are ignored.",
teachTip2: "Values that change (search terms, names, dates) can become parameters — use a real example while you demonstrate.",
teachTip3: "Password fields are not recorded. Sign in before you start if you need to.",
startDemo: "Start demo",
finishDemo: "Finish demo",
teachingBadge: "Recording",
teachingComposerHint: "Recording: finish the demo before sending a message",
teachingLive: "Learning: {goal}",
teachingHint: "The screen is yours — work on the right (or enlarge it). Press “Finish demo” when youre done.",
teachingCaptured: "{count} actions captured",
distilling: "Turning the “{goal}” demo into a skill…",
skillDraftTitle: "New skill draft",
skillDraftFrom: "From {count} actions",
skillName: "Skill name",
skillNamePlaceholder: "For example: Complete STAR training course",
skillInputs: "Inputs",
skillSteps: "Steps (intent, editable)",
moreSteps: "…and {count} more",
editSteps: "Edit steps",
skillCheck: "How to know its done",
skillDistillFailed: "The model couldnt tidy this up. This list is from the raw actions — edit before saving.",
discard: "Discard",
testRun: "Try it",
saveSkill: "Save skill",
messageTo: "Message {name}",
chooseConversationFirst: "Choose a chat first",
stopConversation: "Stop",
editSkill: "Edit skill",
editSkillFull: "Full edit",
runSkillNamed: "Run “{name}”",
skillEditLead: "Write this for the bot: intent and on-screen wording, not coordinates. One item per line.",
skillIntent: "Intent (what this skill should achieve)",
skillWhenToUse: "When to use it",
skillInputsLabel: "Inputs (one per line: name: description | e.g. example)",
skillInputsPlaceholder: "courseName: course title | e.g. Workplace Bullying Prevention (2026)",
skillPreconditions: "Preconditions",
skillStepsLabel: "Steps (one per line; use → for what you should see)",
skillStepsPlaceholder: "Click “Next” → page number increases; if Next is locked, wait until it enables",
skillHowToCheck: "How to know its done",
skillWhatToReturn: "What to report when finished",
skillCautions: "Cautions (one per line)",
deleteSkill: "Delete skill",
deleteSkillConfirm: "Delete skill “{name}”? The bot wont recognize it after that.",
skillSaved: "Saved",
exportSkill: "Export",
exportSkillHint: "Download as JSON to import on another bot",
importSkill: "Import skill",
importSkillHint: "Add a skill from a previously exported JSON file",
skillImportInvalid: "That isnt a valid skill file. Choose a JSON export from LazyBoy.",
collapseSidebar: "Collapse sidebar",
botComputer: "{name}s computer",
dedicatedScreen: "This screen",
enlarge: "Enlarge",
userControlling: "Youre in control",
aiReadOnly: "AI is working (view only)",
readOnly: "View only",
pasteClipboard: "Paste clipboard",
copyDesktopClipboard: "Copy desktop clipboard",
moreActions: "More",
unpin: "Unpin",
pin: "Pin",
markUnread: "Mark unread",
enterGroupName: "Enter a group name",
changeGroup: "Change group",
createOrMoveGroup: "Create / move to group",
removeFromGroup: "Remove from group",
unhide: "Unhide",
hide: "Hide",
delete: "Delete",
chooseConversation: "Choose a chat",
deleteConversation: "Delete chat",
clearConversation: "Clear this chat",
clearConversationTitle: "Clear this chat?",
clearConversationDescription: "Messages will be deleted. This agents long-term memory stays.",
cancel: "Cancel",
clearMessages: "Clear messages",
deleteConversationTitle: "Delete this chat?",
deleteConversationDescription: "It will leave the list. This agents long-term memory stays.",
avatarAppearance: "Avatar",
avatarAppearanceHint: "Color, shape, expression, and background. Eyes follow the cursor.",
color: "Color",
chooseColor: "Choose {value}",
customColor: "Custom color",
shape: "Shape",
expression: "Expression",
background: "Background",
bgNone: "None",
bgCircle: "Circle",
bgSquircle: "Squircle",
bgSquare: "Square",
exprIdle: "Idle",
exprHappy: "Happy",
exprSad: "Sad",
exprMad: "Mad",
exprSurprised: "Surprised",
exprWink: "Wink",
exprSleepy: "Sleepy",
exprSmug: "Smug",
exprUnsure: "Unsure",
exprScared: "Scared",
exprLove: "Love",
exprShy: "Shy",
exprSick: "Sick",
exprThinking: "Thinking",
name: "Name",
tags: "Tags",
tagsPlaceholder: "research, design, support (comma-separated)",
tagsLimit: "Up to 6 tags",
shortTitle: "Short title",
shortTitlePlaceholder: "For example: product research assistant",
description: "Description",
descriptionPlaceholder: "What this bot is for",
saving: "Saving…",
saveSettings: "Save settings",
deleteBot: "Delete bot",
memoryHelp: "Clearing a chat doesnt delete these. Store clear preferences or facts — never passwords.",
enableLongTermMemory: "Long-term memory",
addMemory: "Add memory",
memoryPlaceholder: "Clear preferences or facts only. Passwords and tokens are rejected.",
memorySearch: "Search",
filterMemory: "Filter memory",
noMemory: "No long-term memory yet. Ask the agent to remember something from chat, or add it here.",
noMatchingMemory: "No matching memories.",
save: "Save",
edit: "Edit",
clearAllMemoryConfirm: "Clear all memory?",
clearMemoryConfirm: "Clear",
clearAll: "Clear all",
mcpHelp: "Press “Choose MCP” to connect from the catalog. If a key is required, fill it in first. Local stdio servers start inside the API container.",
mcpNamePlaceholder: "For example: github",
mcpConnectFailed: "Couldnt connect. Check the key and try again.",
command: "Command",
commandPlaceholder: "npx, uvx, or a full path",
arguments: "Arguments",
environmentVariables: "Environment KEY=value",
headers: "Headers KEY=value",
connecting: "Connecting…",
connectMcp: "Connect MCP",
chooseMcp: "Choose MCP",
mcpPickerTitle: "Choose MCP",
mcpPickerLead: "Pick a featured or registry server. Every agent can use its tools.",
searchMcp: "Search MCP",
mcpRemote: "Remote",
mcpLocal: "Local",
mcpAdded: "Connected",
mcpNeedsKey: "Needs a key",
mcpNoResults: "No matching MCP. Try another search, or connect a custom server.",
mcpCustom: "Custom",
mcpBackToList: "Back to list",
mcpConnectNamed: "Connect {name}",
mcpKeyHint: "This MCP needs credentials.",
noMcp: "No MCP yet. Press “Choose MCP” above to connect one from the catalog.",
toolsCount: "{count} tools",
disabled: "Off",
disconnected: "Disconnected",
noTools: "No tools",
reconnect: "Reconnect",
disable: "Disable",
enable: "Enable",
preparingDesktop: "Preparing this agents desktop…",
computerPreviewHint: "Start the computer and the screen will show up here.",
bootingProgress: "Starting…",
restartComputer: "Restart",
shutDownComputer: "Shut down",
computerPower: "Computer menu",
sharedPowerHint: "This is a shared computer. The action affects every agent using it.",
stopAndTakeOver: "Stop and take over",
hudBooting: "Computer starting…",
hudWaking: "Waking…",
hudConnecting: "Connecting…",
hudHandoff: "Handing off…",
pasteToRemoteComputer: "Paste to remote computer",
pasteRemoteHelp: "Paste text here, then send it into VNC. This works over plain HTTP on the LAN.",
pasteTextPlaceholder: "Paste text here…",
pasteIntoVnc: "Paste into VNC",
botNamePlaceholder: "For example: research assistant",
sharedComputerHint: "Shares the environment with other bots",
privateComputerHint: "A fresh dedicated Docker desktop",
create: "Create",
groupDescription: "A group opens one chat where every selected agent speaks.",
groupName: "Group name",
groupNamePlaceholder: "For example: product research",
chooseBots: "Choose bots (at least two)",
creating: "Creating…",
createGroup: "Create group",
deleteGroup: "Delete group",
deleteNamed: "Delete {name}?",
deleteGroupDescription: "The group chat will be deleted. The bots and their own chats and memory stay.",
deleteDedicatedBotDescription: "The chat, private computer, and files on it will be permanently deleted.",
deleteSharedBotDescription: "The chat will be deleted. The shared computer and its files stay.",
phoneAccessDescription: "On the same LAN, open this URL in a phone browser and sign in with the same access token.",
localAddressWarning: "This is a loopback address — a phone cant open it. Use this computers LAN IP, for example http://192.168.x.x:3101.",
close: "Close",
copied: "Copied",
copyUrl: "Copy URL",
workspaceName: "Workspace name",
showHiddenBots: "Show hidden bots",
collapseRightSidebar: "Collapse right sidebar",
workspaceSettingsHint: "Avatar, memory, and MCP live in the right-hand tabs. This only changes how this workspace is shown.",
modelSettings: "Models",
modelSettingsHint: "This provider and model apply to bots that dont have their own.",
modelProvider: "Model provider",
providerXai: "xAI",
providerOpencodeGo: "OpenCode Go",
providerOpenaiCompatible: "OpenAI-compatible",
providerXaiHint: "Grok. Get a key from console.x.ai.",
providerOpencodeGoHint: "OpenCode Go subscription. Get a key from opencode.ai/auth.",
providerOpenaiCompatibleHint: "Self-hosted vLLM, Ollama, LiteLLM, or another OpenAI-compatible endpoint.",
apiKey: "API key",
apiKeyPlaceholder: "sk-…",
apiKeyStored: "A key is saved. Leave blank to keep it.",
usingEnvKey: "Using environment variable {name}.",
clearApiKey: "Clear saved key",
modelId: "Model",
modelIdPlaceholder: "For example: qwen2.5 or llama3.1",
reloadModels: "Reload models",
baseUrl: "Base URL",
baseUrlPlaceholder: "http://127.0.0.1:11434/v1",
baseUrlHint: "If the API runs in Docker, use host.docker.internal instead of localhost for services on this machine.",
workspaceModelHint: "Pick a provider, then the key and model. OpenAI-compatible needs your own endpoint.",
aboutDescription: "A local multi-agent workspace. Each bot has its own Linux computer. You can put them in a group chat and connect MCP tools.",
apiStatus: "API status: {status}",
statusNormal: "OK",
statusUnavailable: "Unreachable",
statusChecking: "Checking…",
helpBotsTitle: "Bots",
helpBots: "Use + at the top left to add a bot. Click the list to chat. Right-click to pin, hide, or delete.",
helpGroupsTitle: "Groups",
helpGroups: "+ → New group, pick at least two. One message, every agent in the group replies.",
helpComputerTitle: "Computer",
helpComputer: "The Computer tab on the right is this agents desktop. Start it, take over mouse and keyboard, or let it drive.",
helpMemoryTitle: "Memory",
helpMemory: "Clearing a chat doesnt wipe long-term memory. Ask the agent to remember, or add it in Memory on the right.",
helpMcpTitle: "MCP plugins",
helpMcp: "Plugins in the lower left connect MCP servers. Their tools show up on screen and the agent can use them in chat.",
helpSkillsTitle: "Skills",
helpSkills: "+ → Teach a task, demonstrate once, and it becomes a skill. Export JSON after, or import someone elses file onto another bot.",
helpAttachTitle: "Attachments",
helpAttach: "+ → Attach a file. Images go to the model on that message and arent stored in chat history. If the computer needs the original, it sits in inbox/ for two hours, then is deleted.",
helpShortcutsTitle: "Shortcuts",
helpShortcuts: "Enter sends, Shift+Enter makes a new line. While its replying, the send button becomes Stop. On a call, Space interrupts and Esc hangs up.",
helpVoiceTitle: "Voice calls",
helpVoice: "The phone in a 1:1 header calls the bot. Speak a task and it uses its computer. It answers immediately whether it can, and you can interrupt to change course.",
call: "Call",
hangUp: "Hang up",
interrupt: "Interrupt",
listening: "Listening…",
speaking: "Speaking…",
callConnecting: "Connecting…",
workingOnComputer: "Working on the computer…",
callPrompt: "Just say what you need. A short pause sends it.",
callShortcuts: "Space interrupts · Esc hangs up",
callFailed: "The call dropped.",
micDenied: "Microphone permission is required for calls.",
micFailed: "Couldnt open the microphone.",
callAudioFailed: "Call audio stopped working. Hang up and call again.",
takeOverToContinue: "You need to take over the screen.",
setUpVoiceToCall: "Set up voice before calling",
voiceEnabled: "Enable voice calls",
voiceEnabledHint: "Off by default. Turn on and save to use the call button.",
voiceDisabledHint: "Voice calls are off. Turn them on in Settings → Voice.",
voiceSettings: "Voice",
voiceSettingsHint: "Voice is separate from the text model. If you already have an xAI chat key, you usually dont need another. Billed per minute.",
voiceProvider: "Voice provider",
voiceModel: "Voice model",
voiceName: "Voice",
providerOpenai: "OpenAI",
providerXaiVoiceHint: "Grok Voice. Live calls with barge-in; computer work is handed to the text model.",
providerOpenaiVoiceHint: "OpenAI Realtime. Same call UI; you can switch later.",
voiceReusesTextKey: "Reusing the xAI key saved for the text model.",
feedbackDescription: "Write a problem, idea, or request. This is a local workspace, so the text is copied to the clipboard for you to paste into an issue or message.",
feedbackPlaceholder: "For example: in group chats I want to pick who speaks first…",
copyContent: "Copy",
loginTitle: "Sign in to LazyBoy",
loginDescription: "Enter the shared access token configured on the server.",
accessToken: "Access token",
verifying: "Checking…",
login: "Sign in",
agentComputer: "Agent computer",
url: "URL",
stdio: "stdio",
http: "HTTP",
sse: "SSE",
argumentsPlaceholder: "-y @modelcontextprotocol/server-github",
environmentVariablesPlaceholder: "GITHUB_TOKEN=…",
urlPlaceholder: "https://mcp.example.com/mcp",
headersPlaceholder: "Authorization=Bearer …",
back: "Back",
accounts: "Accounts",
accountsHelp: "Stored in this bots vault. Passwords are entered only here — never in chat, never shown to the model. Schedules fill the form at a login wall.",
accountSite: "Site",
accountSitePlaceholder: "For example: Gmail",
accountHost: "URL or domain",
accountHostPlaceholder: "mail.google.com",
accountUsername: "Username",
accountPassword: "Password",
accountPasswordKeep: "Leave blank to keep the current password",
accountNotes: "Notes",
accountNotesPlaceholder: "Optional, for example: work inbox",
addAccount: "Add account",
noAccounts: "No saved accounts yet. Add one here if a schedule should sign in by itself.",
loginNeedsYou: "Needs you to sign in on the keyboard",
loginOpenScreen: "Open its screen",
loginWhy: "After sign-in: {why}",
scheduleChip: "Scheduled",
scheduleRunChip: "Schedule run",
schedules: "Schedules",
schedule: "Schedule",
schedCreate: "New schedule",
schedEmpty: "No schedules yet. Say “every day at 9…” in chat, or press +.",
schedPaused: "Paused",
schedRunNow: "Run now",
schedRunning: "Running…",
schedActive: "On",
schedNamePlaceholder: "For example: morning digest",
schedInstruction: "What to do each time",
schedInstructionPlaceholder: "For example: open mail and write an unread summary back to chat.",
schedWhen: "When",
schedEveryHour: "Every hour",
schedEveryDay: "Every day",
schedWeekdays: "Weekdays",
schedEveryWeek: "Every Monday",
schedEveryMonth: "Monthly",
schedInterval: "Interval",
schedAdvanced: "Advanced cron",
schedMinutes: "minutes",
schedHours: "hours",
schedDays: "days",
computerLoginHint: "Sign in inside this bots own browser. The session stays on its computer — dont type passwords in chat.",
language: "Interface language",
languageZh: "繁體中文",
languageEn: "English",
languageHint: "Interface language. Chat history and agent replies are not translated.",
helpLanguageTitle: "Language",
helpLanguage: "Switch between Traditional Chinese and English in Settings, accessible from the workspace menu.",
clipboardSynced: "Clipboard synced",
clipboardSyncBlocked: "The browser blocked sync. Use the copy button.",
clipboardPasted: "Pasted",
clipboardPasteFailed: "Paste failed. Take over the computer and try again.",
clipboardCopiedSelection: "Copied selection",
clipboardCopyFailed: "Copy didnt sync. Use the copy button, or Ctrl+Shift+C on the desktop.",
slashMode: "Mode",
slashFileSkill: "Skill",
slashList: "Commands and skills",
schedIntervalHint: "Elapsed time, not the clock. A day is 24 hours and doesnt reset at month-end or DST.",
schedInvalidInterval: "Interval must be a whole number from 1 to 365",
schedHumanDaily: "Daily at {time}",
schedHumanWeekdays: "Weekdays at {time}",
schedHumanWeekly: "Mondays at {time}",
schedHumanMonthly: "Monthly at {time}",
schedHumanInterval: "Every {n} {unit}",
stepThinking: "Thinking",
stepWatchingScreen: "Looking at the screen",
stepUsingSkill: "Using skill {name}",
stepFillingLogin: "Filling a saved login",
stepListingAccounts: "Listing saved accounts",
stepScheduling: "Scheduling {name}",
stepListingSchedules: "Listing schedules",
stepCancelingSchedule: "Canceling a schedule",
stepRecheckingScreen: "Checking the screen again",
schedEveryMinute: "Every minute",
schedHumanEveryMinutes: "Every {n} minutes",
schedHumanEveryHours: "Every {n} hours",
schedHumanMonthlyDay: "Monthly on the 1st at {time}",
schedHumanElapsed: "Every {n} minutes (elapsed)",
schedCalendar: "Calendar schedule: {expr}",
teachInProgress: "A demo is in progress. Finish or cancel it before sending a message.",
aiTimeout: "The model timed out (120 seconds).",
};