SettingsSection now carries titleKey/descriptionKey instead of title/description, and the sidebar and content pane resolve them. The section arrays are module-level consts holding JSX content, so they cannot call a hook — the data holds keys and the renderers translate. Sidebar search matches the RESOLVED words, so it works in the language on screen. Capital K in titleKey is load-bearing: docs-check-settings.ts greps key:\s*'…' for route segments, and a lowercase title_key would have fed it twenty bogus paths. Verified 0 bogus, 26 declared, 20 offered, 0 missing. Section titles now share one key with the Spotlight rows that name the same section, per 'one key per meaning'. Two casings had to converge, so Settings shows Spotlight's: 'Change Password' now reads 'Change password'. Settings sidebar search placeholder was 'Search...'; it is now 'Search settings…', which is what the skeleton catalog already said and what distinguishes it from the global Spotlight.
302 lines
9.7 KiB
JSON
302 lines
9.7 KiB
JSON
{
|
||
"common": {
|
||
"save": "Save",
|
||
"saving": "Saving...",
|
||
"cancel": "Cancel"
|
||
},
|
||
"settings": {
|
||
"profile": {
|
||
"searchPlaceholder": "Search settings...",
|
||
"sections": {
|
||
"profileTitle": "Profile",
|
||
"profileDescription": "Update your name and avatar.",
|
||
"changePasswordTitle": "Change Password",
|
||
"changePasswordDescription": "Update your account password.",
|
||
"tasksTitle": "Tasks",
|
||
"tasksDescription": "Default model for file browser tasks.",
|
||
"languagesTitle": "Languages",
|
||
"languagesDescription": "Set your spoken languages and translation preferences."
|
||
},
|
||
"userData": {
|
||
"emailLabel": "Email",
|
||
"nameLabel": "Name",
|
||
"namePlaceholder": "Your name",
|
||
"profileUpdated": "Profile updated",
|
||
"profileUpdateFailed": "Failed to update profile",
|
||
"selectImageFile": "Please select an image file",
|
||
"imageTooLarge": "Image must be smaller than 384KB"
|
||
},
|
||
"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"
|
||
},
|
||
"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."
|
||
}
|
||
},
|
||
"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"
|
||
},
|
||
"stt": {
|
||
"label": "Speech to Text",
|
||
"description": "Whisper server URL"
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"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",
|
||
"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"
|
||
},
|
||
"theme": {
|
||
"pillTitle": "Theme: {{name}} · ctrl+shift+←/→ cycle · ctrl+shift+space browse · ctrl+shift+f {{starAction}}",
|
||
"pillLabel": "Theme: {{name}}",
|
||
"star": "star",
|
||
"unstar": "unstar",
|
||
"cycleHint": "ctrl+shift+←/→ cycle · ctrl+shift+space 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 star · 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"
|
||
}
|
||
}
|