{ "common": { "save": "Save", "saving": "Saving...", "cancel": "Cancel" }, "settings": { "profile": { "userData": { "email": "Email", "username": "Username", "name": "Name", "namePlaceholder": "Your name", "updated": "Profile updated", "updateFailed": "Failed to update profile", "selectImage": "Please select an image file", "imageTooLarge": "Image must be smaller than 384KB" }, "apiKeys": { "intro": "An API key signs in as you, without a password and without expiring. One key works everywhere — a key is not tied to an app. Giving each device its own is only so you can cut one off without touching the rest. Send it as", "loading": "Loading keys…", "mintedTitle": "Key for “{{name}}” — shown once", "savedIt": "I’ve saved it", "copyKey": "Copy key", "copied": "Key copied", "copyFailed": "Could not copy — select and copy manually", "newKey": "New key", "namePlaceholder": "iPhone, Music app, laptop CLI…", "create": "Create", "createFailed": "Could not create the key", "noneYet": "No keys yet.", "noneInUse": "No keys in use.", "revoked": "revoked", "expired": "expired", "lastUsed": "last used {{date}}", "neverUsed": "never used", "forget": "Remove this record", "forgetFailed": "Could not remove it", "revoke": "Revoke", "revokeDone": "Revoked — anything using that key is signed out", "revokeFailed": "Could not revoke", "hideDead": "Hide revoked and expired", "showDead": { "one": "Show {{count}} revoked or expired key", "other": "Show {{count}} revoked or expired keys" } }, "voice": { "label": "Voice", "refresh": "Refresh voices", "serverDefault": "Server default", "hint": "Choose a voice for text-to-speech. Leave as server default to use the admin-configured voice.", "stop": "Stop", "listen": "Listen" }, "dock": { "visible": "Visible", "hidden": "Hidden", "dragToShow": "Drag items here to show in dock", "allVisible": "All items visible", "reset": "Reset to defaults" }, "languages": { "spokenLabel": "Languages you speak", "addLanguage": "Add a language...", "defaultLabel": "Default language", "defaultHint": "Used for UI localization.", "translateToLabel": "Translate to", "translateToHint": "Target language when translating content you don't speak." }, "changePassword": { "currentPasswordLabel": "Current Password", "currentPasswordPlaceholder": "Current password", "newPasswordLabel": "New Password", "newPasswordPlaceholder": "New password", "confirmPasswordLabel": "Confirm New Password", "confirmPasswordPlaceholder": "Confirm new password", "changeButton": "Change Password", "changingButton": "Changing...", "passwordChanged": "Password changed", "passwordChangeFailed": "Failed to change password" }, "models": { "defaultModel": "Default Model", "sameAsChat": "Same as chat default", "taskDefaultsSaved": "Task defaults saved", "saveFailed": "Failed to save settings", "defaultChat": "Default Chat Model", "defaultChatHint": "Used when starting a new chat from the home screen", "defaultProject": "Default Project Model", "defaultProjectHint": "Used when starting a new chat inside a project dashboard", "defaultTask": "Default Task Model", "defaultTaskHint": "Used when running tasks from the file browser", "aiDefaultsSaved": "AI model defaults saved" } }, "sections": { "profile": { "label": "Profile", "hint": "avatar, name, email", "description": "Avatar, name, and email" }, "changePassword": { "label": "Change password", "description": "Update your password" }, "apiKeys": { "label": "API keys", "hint": "keys that sign in as you", "description": "Keys that sign in as you, revocable one at a time" }, "languages": { "label": "Languages", "hint": "spoken and translation", "description": "Spoken, default, and translation" }, "voice": { "label": "Voice", "hint": "text-to-speech", "description": "Text-to-speech voice preference" }, "dock": { "label": "Dock", "hint": "choose and reorder", "description": "Choose and reorder dock items" }, "myModels": { "label": "My Models", "description": "Show or hide models for yourself" }, "channelModels": { "label": "Channel Models", "description": "Models reachable by non-owner accounts" }, "defaultModels": { "label": "Default Models", "description": "Default models for chat, projects, and tasks" }, "providers": { "label": "Providers", "hint": "harnesses", "description": "Remote and local AI providers" }, "tts": { "label": "Text to Speech", "description": "TTS provider and voice" }, "ocr": { "label": "OCR", "description": "Vision model for text extraction" }, "maintenance": { "label": "Rebuild & restart", "hint": "maintenance", "description": "Load changes without a terminal" }, "smtp": { "label": "SMTP", "hint": "outgoing mail", "description": "Email delivery provider" }, "googleOauth": { "label": "Google OAuth", "description": "Client ID and secret for Google APIs" }, "apify": { "label": "Apify", "description": "API token for web scraping actors" }, "davSync": { "label": "Calendar & Contacts sync", "hint": "app passwords", "description": "Per-device passwords for CalDAV/CardDAV clients" }, "accounts": { "label": "Accounts", "hint": "users", "description": "Who has access, and as what" }, "permissions": { "label": "Permissions", "description": "What each role can reach" } }, "searchPlaceholder": "Search settings…", "selectSection": "Select a section", "groups": { "models": "Models", "defaults": "Defaults", "providers": "Providers", "ai": "AI", "maintenance": "Maintenance", "email": "Email" }, "nav": { "profile": "Profile", "ai": "AI", "system": "System", "integrations": "Integrations", "users": "Users" }, "ai": { "noModels": "No models available. Configure API keys in Providers.", "dragToShow": "Drag models here to show", "allVisible": "All models visible", "dragToEnable": "Drag models here to enable", "allEnabled": "All models enabled", "visible": "Visible", "hidden": "Hidden", "enabled": "Enabled", "disabled": "Disabled", "refresh": "Refresh models from providers", "refreshed": "Models refreshed", "refreshFailed": "Failed to refresh models" }, "integrations": { "enterprise": "Enterprise", "personal": "Personal" }, "server": { "loading": "Loading…", "provider": "Provider", "model": "Model", "voice": "Voice", "ocr": { "serverUrl": "Vision Model Server URL", "refreshModels": "Refresh models", "selectModel": "Select a model", "saved": "OCR settings saved", "saveFailed": "Failed to save OCR settings", "reachable": "Vision model server is reachable" }, "tts": { "openaiCompatible": "OpenAI-compatible (Kokoro, OpenAI, etc.)", "elevenLabs": "ElevenLabs", "refreshVoices": "Refresh voices", "selectVoice": "Select a voice", "saved": "TTS settings saved", "saveFailed": "Failed to save TTS settings", "playing": "Playing test audio", "testFailed": "Test failed — could not reach TTS server" }, "smtp": { "mailhog": "MailHog (local testing)", "resend": "Resend", "custom": "Custom SMTP", "apiKey": "API Key", "host": "Host", "port": "Port", "username": "Username", "password": "Password", "tls": "TLS / SSL", "fromName": "From Name", "fromEmail": "From Email", "sendTest": "Send Test Email", "userExample": "user@example.com", "recipientExample": "recipient@example.com", "saved": "SMTP settings saved", "saveFailed": "Failed to save SMTP settings", "connected": "Connection successful", "testSent": "Test email sent to {{email}}" }, "maintenance": { "updateTitle": "Update the platform", "updateHint": "Changes nothing that is running. Whatever the update needs is listed here, and stays your call.", "rebuild": "Rebuild the frontend", "restart": "Restart the server", "upToDate": "Already up to date", "rebuilt": "Frontend rebuilt — refresh this page to see it", "restarting": "Restarting — the page will reconnect on its own", "pulled": { "one": "Pulled {{count}} commit", "other": "Pulled {{count}} commits" } }, "harnesses": { "piMono": "Pi Mono", "checking": "Checking…", "localProviders": "Local Providers", "remoteProviders": "Remote Providers", "connect": "Connect", "authenticate": "Authenticate", "connectLocal": "Connect Local Provider", "connectProvider": "Connect Provider", "none": "No providers found.", "updatePiMono": "Update Pi Mono", "removeProvider": "Remove provider", "namePlaceholder": "Name (e.g. My Ollama)", "username": "Username", "password": "Password", "apiKey": "API Key", "editKey": "Edit key", "disconnect": "Disconnect provider", "saveKey": "Save key", "enterKey": "Enter API key", "search": "Search providers…", "connectFailed": "Failed to connect", "authFailed": "Authentication failed", "saveFailed": "Failed to save provider", "connectedTo": "Connected to {{name}}" } }, "users": { "loadingPermissions": "Loading permissions…", "permissionsFailed": "Could not load permissions.", "deniedUnlessGranted": "Everything is denied unless granted here.", "read": "Read", "full": "Full", "noAccess": "No access", "role": "Role", "permissionsSaved": "Saved what {{role}}s can reach", "copyBeforeClosing": "Copy what you need before closing — none of it can be shown again.", "password": "Password", "linuxAccount": "Linux account", "sshKey": "Their SSH public key", "addToGitea": "Add this to their Gitea account", "linuxIncomplete": "The account works, but its Linux side did not finish", "done": "Done", "addAccount": "Add account", "newAccount": "New account", "email": "Email", "name": "Name", "username": "Username", "usernameHint": "Letters, numbers, dots, hyphens and underscores.", "generatePassword": "Generate a password", "copyPassword": "Copy the password", "passwordHint": "At least 12 characters, with upper and lower case, a number and a symbol.", "sshPlaceholder": "ssh-ed25519 AAAAC3Nza… ana@laptop", "passwordCopied": "Password copied", "loadingAccounts": "Loading accounts…", "accountsFailed": "Could not load the accounts.", "removeAccount": "Remove account", "generateNewPassword": "Generate a new password", "serverOwner": "Server owner", "copySshTitle": "Copy their SSH public key (add it to their Gitea account)", "resetPasswordTitle": "Generate a new password — shown once, and signs them out everywhere", "copyNewPassword": "Copy the new password", "publicKeyCopied": "Public key copied", "copyFailed": "Could not copy — select it and copy by hand", "repairFor": "Repair {{email}}’s Linux account", "linuxAccountFor": "Linux account: {{osUser}} — click to repair or replace their SSH key", "copySshFor": "Copy {{email}}’s SSH public key", "resetPasswordFor": "Reset {{email}}’s password", "removeFor": "Remove {{email}}", "provisionPrompt": "Linux account for {{email}}.\n\nPaste an SSH public key to allow them to SSH in, or leave empty to keep the current one.", "createLinux": "Create a Linux account", "noLinux": "No Linux account — click to create one", "removeTitle": "Remove {{email}}?", "removeBody": "This deletes the account and everything belonging to it — passkeys, dashboards, saved layouts, and anything an installed plugin keeps for them. It cannot be undone.", "resetTitle": "Reset the password for {{email}}?", "resetBody": "A new password is generated and shown to you once — it is not stored anywhere and cannot be looked up afterwards. Their existing password stops working immediately, and they are signed out everywhere.", "resetLinuxNote": "Their Linux account ({{osUser}}) is not affected: it has no password, and SSH keys are unchanged." }, "dav": { "newDevice": "New device", "create": "Create", "none": "No devices yet.", "placeholder": "Pixel 9, iPad, Thunderbird…", "revoke": "Revoke", "delete": "Delete", "copyFailed": "Could not copy — select and copy manually", "createFailed": "Could not create the app password", "revoked": "Revoked — that device will stop syncing", "revokeFailed": "Could not revoke", "deleteFailed": "Could not delete", "copyField": "Copy {{field}}", "copied": "{{what}} copied" }, "google": { "guideToggle": "Step-by-step setup guide", "step1": { "title": "Create a Google Cloud project", "body": "Open the project creation page, give it a name (for example “Officer”), and click:", "link": "New Project" }, "step2": { "title": "Enable the APIs", "body": "Open the API library and search for each of these, then click:", "link": "API Library" }, "step3": { "title": "Configure the OAuth consent screen", "link": "OAuth Branding", "appName": "Set your organization name, or “Officer”, as:", "supportEmail": "Set your admin email as:", "devContact": "Add your admin email under:", "save": "Then click:" }, "step4": { "title": "Set the audience", "link": "OAuth Audience", "internal": "If your team uses Google Workspace, choose — no verification needed:", "external": "Otherwise choose, and add your team’s emails under Test users (required while the app is unverified; limit of 100 test users):" }, "step5": { "title": "Add scopes", "link": "Data Access", "body": "Open data access and search for and add the scopes below, then click:", "note": "Google classifies the calendar scope as sensitive and the Gmail scope as restricted. That is fine for Internal apps (Google Workspace) and for External apps in testing mode; publishing to production with restricted scopes requires Google verification." }, "step6": { "title": "Create OAuth credentials", "link": "Clients", "body": "Open the clients page and click:", "appType": "Application type:", "nameAnything": "Name: anything (for example “Officer”)", "redirectUris": "Authorized redirect URIs — add:", "thenClick": "Then click:" }, "step7": { "title": "Copy the credentials", "body": "A dialog shows your client ID and client secret. Copy both and paste them into the fields below." }, "scopeGmail": "Read emails", "scopeCalendar": "Read calendar events", "verifying": "Verifying credentials…", "valid": "Credentials valid", "invalid": "Invalid credentials", "verifyFailed": "Verification request failed", "clientId": "Client ID", "clientSecret": "Client Secret", "redirectUri": "Redirect URI", "redirectUriHint": "Add this URI to your Google OAuth client’s authorized redirect URIs", "saved": "Google OAuth configuration saved", "saveFailed": "Failed to save Google OAuth configuration" }, "googleAccount": { "title": "Google Account", "hint": "Connect your Google account for Calendar, Contacts, and other Google services.", "connected": "Connected", "disconnect": "Disconnect", "connect": "Connect Google Account", "connectedToast": "Google account connected", "connectFailed": "Failed to connect Google account", "disconnectedToast": "Google account disconnected", "disconnectFailed": "Failed to disconnect Google account" }, "apify": { "token": "API Token", "saved": "Apify API token saved", "saveFailed": "Failed to save Apify API token" } }, "header": { "userMenu": { "profile": "Profile", "systemSettings": "System Settings", "signOut": "Sign Out", "ai": "AI", "integrations": "Integrations", "userManagement": "User Management" }, "tabName": "Tab name", "tabNameHint": "Click to rename this tab — clear it to go back to the page name", "logoAlt": "Officer", "navigation": "Navigation", "jobsRunning": "Running job", "jobsNothingRunning": "Nothing running", "jobsQueued": "Queued jobs" }, "nav": { "home": "Home", "files": "Files", "chat": "Chat", "commandHq": "Command HQ", "bots": "Bots", "editor": "Editor", "jobs": "Jobs", "terminal": "Terminal", "browser": "Browser", "monitor": "Monitor", "activity": "Activity", "dashboards": "Dashboards", "sendOff": "SendOff", "calendar": "Calendar", "contacts": "Contacts", "appStore": "App store", "marketplace": "Marketplace", "codeEditor": "Code Editor" }, "theme": { "pillTitle": "Theme: {{name}} · ctrl+shift+←/→ cycle · ctrl+shift+↑/↓ browse · ctrl+shift+f {{starAction}}", "pillLabel": "Theme: {{name}}", "star": "star", "unstar": "unstar", "cycleHint": "ctrl+shift+←/→ cycle · ctrl+shift+↑/↓ browse", "everyShortcutHint": "ctrl+? for every shortcut", "favouritesOnly": "Favourites only ({{count}})", "favourites": "Favourites ({{count}})", "noFavourites": "No favourites yet — star one with the button on its row.", "starNamed": "Star {{name}}", "unstarNamed": "Unstar {{name}}", "addToFavourites": "Add to favourites", "removeFromFavourites": "Remove from favourites", "addToFavouritesKey": "Add to favourites (f)", "removeFromFavouritesKey": "Remove from favourites (f)", "active": "active", "browseHint": "j/k or ↑/↓ move · l or → preview · f favourites · h or ← reset · enter keep · esc cancel" }, "spotlight": { "placeholder": "Go to…", "noResults": "Nothing matches “{{query}}”." }, "shortcutsModal": { "title": "Keyboard shortcuts", "hint": "Ctrl+? · Esc to close" }, "screenError": { "title": "This screen failed to render", "description": "Nothing was lost — this is a display failure, not a data one. Agent transcripts, jobs and files are untouched.", "unknownError": "Unknown error", "tryAgain": "Try again", "reload": "Reload", "goHome": "Go home", "resetHint": "If it fails again in the same place, a saved panel layout is the usual cause. Resetting puts every screen’s panes back to their defaults.", "dashboardsSafe": "Your dashboards are not touched.", "resetting": "Resetting…", "resetConfirm": "Yes — reset every screen layout", "reset": "Reset screen layouts" }, "rescan": { "label": "Rescan items", "title": "Rescan officer-items (apply changes without restarting)", "failed": "Failed to rescan items", "done": "Rescanned items — {{summary}}", "counts": { "tasks": { "one": "{{count}} task", "other": "{{count}} tasks" }, "agents": { "one": "{{count}} agent", "other": "{{count}} agents" }, "tools": { "one": "{{count}} tool", "other": "{{count}} tools" }, "skills": { "one": "{{count}} skill", "other": "{{count}} skills" }, "processes": { "one": "{{count}} process", "other": "{{count}} processes" }, "affordances": { "one": "{{count}} affordance", "other": "{{count}} affordances" } }, "newChatsOnly": "Applies to new chats — an open one keeps what it started with.", "noDescription": { "one": "{{count}} skill has no description, so no agent is offered it.", "other": "{{count}} skills have no description, so no agent is offered them." } }, "bugReport": { "label": "Report a bug", "title": "Report a Bug", "describePlaceholder": "Describe what went wrong...", "screenshot": "Screenshot", "noScreenshot": "No screenshot captured", "collectedNote": "Console logs, browser info, and recent API errors are collected automatically.", "submitted": "Bug report submitted", "failed": "Failed to submit bug report", "submit": "Submit" }, "auth": { "signInTitle": "Welcome Back", "signInSubtitle": "Sign in to your account", "emailOrUsername": "Email or username", "password": "Password", "forgotPassword": "Forgot password?", "emailPlaceholder": "you@example.com", "passwordPlaceholder": "Your password", "forgotTitle": "Forgot Password", "forgotSubtitle": "Enter your email to receive a reset link", "email": "Email", "backToLogin": "Back to login", "checkEmail": "Check your email", "checkEmailHint": "Click it to reset your password.", "resetOk": "Password reset successfully. Please sign in.", "verifying": "Verifying…", "invalidLink": "Invalid Link", "invalidLinkHint": "This reset link is invalid or has expired.", "resetTitle": "Reset Password", "resetSubtitle": "Enter your new password", "confirmPassword": "Confirm Password", "minChars": "Min 12 characters", "confirmPlaceholder": "Confirm your password", "bootstrapTitle": "Welcome, Admin", "bootstrapSubtitle": "Create your administrator account", "name": "Name", "username": "Username", "namePlaceholder": "Your name", "adminEmailPlaceholder": "admin@example.com", "bootstrapOk": "Administrator account created. Please sign in.", "debug": { "controls": "Controls:", "camera": "Camera:", "model": "Model:" } }, "shortcuts": { "navigation": "Navigation", "spotlight": "Spotlight — go to any screen, plugin or setting by name", "thisList": "This list", "themes": "Themes", "themesNote": "The browser applies as you move, so you watch the app change rather than reading names.", "openBrowser": "Open the theme browser", "prevNextTheme": "Previous / next theme, without opening anything", "starCurrent": "Star or unstar the current theme, from anywhere", "inBrowser": "In the theme browser", "moveList": "Move through the list", "applyKeepBrowsing": "Apply the focused theme and keep browsing", "restoreStart": "Put back the theme you started on", "starFocused": "Star or unstar the focused theme", "keepLooking": "Keep what you are looking at", "cancelRestore": "Cancel and restore", "inSpotlight": "In Spotlight", "moveResults": "Move through the results", "goThere": "Go there", "close": "Close", "chat": "Chat", "chatNote": "Recall only takes the arrow key from an EMPTY composer, and any other key ends a recall — so a draft is never overwritten.", "prevNextPrompt": "Previous / next prompt you sent, shell-style", "send": "Send · on an empty composer with something queued, send that now", "newline": "Newline", "stopTurn": "Stop the turn that is generating" }, "jobs": { "runningQueued": "Running & Queued", "loading": "Loading…", "nothingRunning": "Nothing running", "history": "History", "clearAll": "Clear all", "selectJob": "Select a job", "notFound": "Job not found.", "backToJobs": "Back to jobs", "stop": "Stop", "testNotification": "Send a test notification to every configured channel", "search": "Search…", "deleteFinished": "Delete all finished jobs", "noChannels": "No channels configured", "notifyFailed": "Failed to send notification", "stopRequested": "Stop requested", "stopFailed": "Failed to stop", "titles": "Titles", "download": "Download", "input": "Input", "output": "Output", "steps": "Steps", "selectStep": "Select a step or sub-task to view output", "noOutput": "No output yet", "tokens": "Tokens:", "cost": "Cost:", "status": { "running": "Running", "queued": "Queued", "completed": "Completed", "failed": "Failed", "stopped": "Stopped", "interrupted": "Interrupted" }, "failedWithCode": "Failed (exit {{code}})" }, "activity": { "title": "Activity", "backgroundTasks": "Background tasks", "detached": "Detached", "backToList": "Back to the list", "selectTask": "Select a task to follow its live output", "noneRunning": "none running" }, "passkeyGate": { "setUp": "Set up your passkey" }, "chatHistory": { "loadFailed": "Could not load this conversation: {{reason}}" }, "capability": { "frontmatter": "Frontmatter", "noMatches": "No matches", "emptyFile": "Empty file", "fromPlugin": "Ships with the {{plugin}} plugin — read-only", "createFailed": "Could not create the {{kind}}", "deleteFailed": "Could not delete the {{kind}}", "searchPlaceholder": "Search {{kind}}…", "selectOne": "Select a {{kind}}", "selectToView": "Select a {{kind}} to view its contents", "delete": "Delete", "createPrompt": "Help me create the content for this new {{kind}} file", "improvePrompt": "Help me understand and improve this {{kind}} file" } }