keyed the dock, header and shell chrome (555 -> 487)

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.
This commit is contained in:
2026-08-23 04:40:39 +00:00
parent 6d8709c05a
commit 926034750f
17 changed files with 685 additions and 179 deletions
+188 -10
View File
@@ -46,23 +46,201 @@
"translateToLabel": "Traduzir para",
"translateToHint": "Idioma alvo ao traduzir conteúdo que não falas."
}
},
"sections": {
"profile": {
"label": "Perfil",
"hint": "avatar, nome, email"
},
"changePassword": {
"label": "Alterar palavra-passe"
},
"apiKeys": {
"label": "Chaves de API",
"hint": "chaves que iniciam sessão como você"
},
"languages": {
"label": "Idiomas",
"hint": "falados e tradução"
},
"voice": {
"label": "Voz",
"hint": "conversão de texto em fala"
},
"dock": {
"label": "Dock",
"hint": "escolher e reordenar"
},
"myModels": {
"label": "Os meus modelos"
},
"channelModels": {
"label": "Modelos do canal"
},
"defaultModels": {
"label": "Modelos predefinidos"
},
"providers": {
"label": "Fornecedores",
"hint": "harnesses"
},
"tts": {
"label": "Texto para fala"
},
"stt": {
"label": "Fala para texto"
},
"ocr": {
"label": "OCR"
},
"maintenance": {
"label": "Reconstruir e reiniciar",
"hint": "manutenção"
},
"smtp": {
"label": "SMTP",
"hint": "correio a enviar"
},
"googleOauth": {
"label": "Google OAuth"
},
"apify": {
"label": "Apify"
},
"davSync": {
"label": "Sincronização de Calendário e Contactos",
"hint": "palavras-passe de aplicação"
},
"accounts": {
"label": "Contas",
"hint": "utilizadores"
},
"permissions": {
"label": "Permissões"
}
}
},
"header": {
"userMenu": {
"profile": "Perfil",
"systemSettings": "Definições do Sistema",
"signOut": "Terminar Sessão"
"signOut": "Terminar Sessão",
"ai": "IA",
"integrations": "Integrações",
"userManagement": "Gestão de Utilizadores"
},
"tabName": "Nome do separador",
"tabNameHint": "Clique para renomear este separador — limpe-o para voltar ao nome da página",
"logoAlt": "Officer",
"navigation": "Navegação",
"jobsRunning": "Trabalho em execução",
"jobsNothingRunning": "Nada em execução",
"jobsQueued": "Trabalhos em fila"
},
"nav": {
"home": "Início",
"files": "Ficheiros",
"chat": "Chat",
"commandHq": "Command HQ",
"editor": "Editor",
"jobs": "Trabalhos",
"terminal": "Terminal",
"browser": "Navegador",
"monitor": "Monitor",
"activity": "Atividade",
"dashboards": "Painéis",
"sendOff": "SendOff",
"calendar": "Calendário",
"contacts": "Contactos",
"appStore": "Loja de aplicações",
"marketplace": "Marketplace"
},
"theme": {
"pillTitle": "Tema: {{name}} · ctrl+shift+←/→ percorrer · ctrl+shift+space explorar · ctrl+shift+f {{starAction}}",
"pillLabel": "Tema: {{name}}",
"star": "marcar",
"unstar": "desmarcar",
"cycleHint": "ctrl+shift+←/→ percorrer · ctrl+shift+space explorar",
"everyShortcutHint": "ctrl+? para todos os atalhos",
"favouritesOnly": "Apenas favoritos ({{count}})",
"favourites": "Favoritos ({{count}})",
"noFavourites": "Ainda não há favoritos — marque um com o botão na sua linha.",
"starNamed": "Marcar {{name}}",
"unstarNamed": "Desmarcar {{name}}",
"addToFavourites": "Adicionar aos favoritos",
"removeFromFavourites": "Remover dos favoritos",
"addToFavouritesKey": "Adicionar aos favoritos (f)",
"removeFromFavouritesKey": "Remover dos favoritos (f)",
"active": "ativo",
"browseHint": "j/k ou ↑/↓ mover · l ou → pré-visualizar · f marcar · h ou ← reiniciar · enter manter · esc cancelar"
},
"spotlight": {
"placeholder": "Ir para…",
"noResults": "Nada corresponde a “{{query}}”."
},
"shortcutsModal": {
"title": "Atalhos de teclado",
"hint": "Ctrl+? · Esc para fechar"
},
"screenError": {
"title": "Este ecrã não conseguiu ser apresentado",
"description": "Nada foi perdido — esta é uma falha de apresentação, não de dados. As transcrições do agente, os trabalhos e os ficheiros estão intactos.",
"unknownError": "Erro desconhecido",
"tryAgain": "Tentar novamente",
"reload": "Recarregar",
"goHome": "Ir para o início",
"resetHint": "Se falhar novamente no mesmo local, a causa habitual é um layout de painéis guardado. Reiniciar devolve os painéis de todos os ecrãs às predefinições.",
"dashboardsSafe": "Os seus painéis não são afetados.",
"resetting": "A reiniciar…",
"resetConfirm": "Sim — reiniciar o layout de todos os ecrãs",
"reset": "Reiniciar layouts dos ecrãs"
},
"rescan": {
"label": "Reanalisar itens",
"title": "Reanalisar officer-items (aplicar alterações sem reiniciar)",
"failed": "Falha ao reanalisar itens",
"done": "Itens reanalisados — {{summary}}",
"counts": {
"tasks": {
"one": "{{count}} tarefa",
"other": "{{count}} tarefas"
},
"agents": {
"one": "{{count}} agente",
"other": "{{count}} agentes"
},
"tools": {
"one": "{{count}} ferramenta",
"other": "{{count}} ferramentas"
},
"skills": {
"one": "{{count}} skill",
"other": "{{count}} skills"
},
"processes": {
"one": "{{count}} processo",
"other": "{{count}} processos"
},
"affordances": {
"one": "{{count}} affordance",
"other": "{{count}} affordances"
}
},
"newChatsOnly": "Aplica-se a novos chats — um chat aberto mantém o que tinha ao iniciar.",
"noDescription": {
"one": "{{count}} skill não tem descrição, pelo que não é oferecida a nenhum agente.",
"other": "{{count}} skills não têm descrição, pelo que não são oferecidas a nenhum agente."
}
},
"dock": {
"chat": "Chat",
"files": "Ficheiros",
"terminal": "Terminal",
"plans": "Planos",
"skills": "Skills",
"tasks": "Tarefas",
"processes": "Processos",
"logs": "Registos"
"bugReport": {
"label": "Comunicar um erro",
"title": "Comunicar um erro",
"describePlaceholder": "Descreva o que aconteceu...",
"screenshot": "Captura de ecrã",
"noScreenshot": "Nenhuma captura de ecrã obtida",
"collectedNote": "Os registos da consola, a informação do navegador e os erros recentes da API são recolhidos automaticamente.",
"submitted": "Comunicação de erro enviada",
"failed": "Falha ao enviar a comunicação de erro",
"submit": "Enviar"
}
}