Layout reaches zero. The dock, header, user menu, theme switcher, spotlight, shortcuts modal, screen-error fallback, rescan and bug report. Three things worth knowing: CORE_DOCK_ITEMS now carries labelKey instead of label, and one useDockItems() hook resolves the composed list. DashboardLayout, Spotlight and DockSettings each spread the same two sources before, so each would have had to resolve labels itself. Plugin tiles keep the name from their own manifest — a plugin's strings are not ours. Spotlight resolves labels INSIDE the hook, so rank() still matches what the reader can see rather than a dot-path. Its to: '/settings/...' literals are untouched, which is what docs:check parses — verified still 20 offered, 0 missing. The rescan toast said 'N skill(s)'. That is English giving up on a plural, so it is now a real plural entry per noun and reads correctly at 0, 1 and 2 in both locales. ThemeSwitcher used t as its theme loop variable; renamed to entry.
247 lines
7.6 KiB
JSON
247 lines
7.6 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"
|
||
},
|
||
"changePassword": {
|
||
"label": "Change password"
|
||
},
|
||
"apiKeys": {
|
||
"label": "API keys",
|
||
"hint": "keys that sign in as you"
|
||
},
|
||
"languages": {
|
||
"label": "Languages",
|
||
"hint": "spoken and translation"
|
||
},
|
||
"voice": {
|
||
"label": "Voice",
|
||
"hint": "text-to-speech"
|
||
},
|
||
"dock": {
|
||
"label": "Dock",
|
||
"hint": "choose and reorder"
|
||
},
|
||
"myModels": {
|
||
"label": "My Models"
|
||
},
|
||
"channelModels": {
|
||
"label": "Channel Models"
|
||
},
|
||
"defaultModels": {
|
||
"label": "Default Models"
|
||
},
|
||
"providers": {
|
||
"label": "Providers",
|
||
"hint": "harnesses"
|
||
},
|
||
"tts": {
|
||
"label": "Text to Speech"
|
||
},
|
||
"stt": {
|
||
"label": "Speech to Text"
|
||
},
|
||
"ocr": {
|
||
"label": "OCR"
|
||
},
|
||
"maintenance": {
|
||
"label": "Rebuild & restart",
|
||
"hint": "maintenance"
|
||
},
|
||
"smtp": {
|
||
"label": "SMTP",
|
||
"hint": "outgoing mail"
|
||
},
|
||
"googleOauth": {
|
||
"label": "Google OAuth"
|
||
},
|
||
"apify": {
|
||
"label": "Apify"
|
||
},
|
||
"davSync": {
|
||
"label": "Calendar & Contacts sync",
|
||
"hint": "app passwords"
|
||
},
|
||
"accounts": {
|
||
"label": "Accounts",
|
||
"hint": "users"
|
||
},
|
||
"permissions": {
|
||
"label": "Permissions"
|
||
}
|
||
}
|
||
},
|
||
"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"
|
||
}
|
||
}
|