458 lines
21 KiB
TypeScript
458 lines
21 KiB
TypeScript
|
|
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 didn’t work",
|
|||
|
|
loadFailed: "Couldn’t load",
|
|||
|
|
settingsFailed: "Couldn’t save settings",
|
|||
|
|
loginFailed: "Couldn’t sign in",
|
|||
|
|
rememberFailed: "Couldn’t 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: "You’re controlling the screen, so {name} is paused. Press “Release control” when you’re 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 you’re 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 can’t 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 it’s verified or it needs you",
|
|||
|
|
searchSkills: "Search skills",
|
|||
|
|
noMatchingSkills: "No matching skills",
|
|||
|
|
teachDialogLead: "You’ll 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 you’re 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 it’s done",
|
|||
|
|
skillDistillFailed: "The model couldn’t 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 it’s done",
|
|||
|
|
skillWhatToReturn: "What to report when finished",
|
|||
|
|
skillCautions: "Cautions (one per line)",
|
|||
|
|
deleteSkill: "Delete skill",
|
|||
|
|
deleteSkillConfirm: "Delete skill “{name}”? The bot won’t 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 isn’t a valid skill file. Choose a JSON export from LazyBoy.",
|
|||
|
|
collapseSidebar: "Collapse sidebar",
|
|||
|
|
botComputer: "{name}’s computer",
|
|||
|
|
dedicatedScreen: "This screen",
|
|||
|
|
enlarge: "Enlarge",
|
|||
|
|
userControlling: "You’re 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 agent’s long-term memory stays.",
|
|||
|
|
cancel: "Cancel",
|
|||
|
|
clearMessages: "Clear messages",
|
|||
|
|
deleteConversationTitle: "Delete this chat?",
|
|||
|
|
deleteConversationDescription: "It will leave the list. This agent’s 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 doesn’t 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: "Couldn’t 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 agent’s 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 can’t open it. Use this computer’s 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 don’t 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 agent’s desktop. Start it, take over mouse and keyboard, or let it drive.",
|
|||
|
|
helpMemoryTitle: "Memory",
|
|||
|
|
helpMemory: "Clearing a chat doesn’t 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 else’s file onto another bot.",
|
|||
|
|
helpAttachTitle: "Attachments",
|
|||
|
|
helpAttach: "+ → Attach a file. Images go to the model on that message and aren’t 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 it’s 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: "Couldn’t 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 don’t 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 bot’s 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 bot’s own browser. The session stays on its computer — don’t type passwords in chat.",
|
|||
|
|
language: "Language",
|
|||
|
|
languageZh: "中文",
|
|||
|
|
languageEn: "English",
|
|||
|
|
languageHint: "Interface language. Chat history and agent replies are not translated.",
|
|||
|
|
helpLanguageTitle: "Language",
|
|||
|
|
helpLanguage: "Switch Chinese and English from the workspace menu or Settings.",
|
|||
|
|
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 didn’t 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 doesn’t 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).",
|
|||
|
|
};
|