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: "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 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).",
|
||
};
|