From dc89d494fe37d6361d613607a35b604e6bfe6b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Salavisa?= Date: Fri, 7 Aug 2026 04:56:55 +0200 Subject: [PATCH] feat(i18n): add European Portuguese (pt-PT) locale (#2349) Co-authored-by: Kandev Agent --- apps/backend/internal/i18n/i18n.go | 1 + apps/backend/internal/i18n/i18n_test.go | 11 +- apps/backend/internal/i18n/locales/pt-pt.json | 36 + apps/backend/internal/webapp/shell_test.go | 3 + apps/web/lib/i18n/formats.test.ts | 17 + apps/web/lib/i18n/index.test.ts | 23 +- apps/web/lib/i18n/index.ts | 3 +- apps/web/src/locales/pt-pt/account.json | 42 + apps/web/src/locales/pt-pt/agents.json | 209 +++++ apps/web/src/locales/pt-pt/auth.json | 20 + apps/web/src/locales/pt-pt/automations.json | 203 +++++ apps/web/src/locales/pt-pt/azuredevops.json | 253 ++++++ apps/web/src/locales/pt-pt/chat.json | 123 +++ apps/web/src/locales/pt-pt/common.json | 132 +++ apps/web/src/locales/pt-pt/configChat.json | 21 + apps/web/src/locales/pt-pt/diff.json | 50 ++ apps/web/src/locales/pt-pt/editors.json | 80 ++ apps/web/src/locales/pt-pt/executors.json | 262 ++++++ apps/web/src/locales/pt-pt/github.json | 545 ++++++++++++ apps/web/src/locales/pt-pt/gitlab.json | 297 +++++++ apps/web/src/locales/pt-pt/integrations.json | 63 ++ apps/web/src/locales/pt-pt/jira.json | 212 +++++ apps/web/src/locales/pt-pt/kanban.json | 92 ++ apps/web/src/locales/pt-pt/linear.json | 174 ++++ apps/web/src/locales/pt-pt/lsp.json | 78 ++ apps/web/src/locales/pt-pt/plugins.json | 117 +++ apps/web/src/locales/pt-pt/review.json | 82 ++ apps/web/src/locales/pt-pt/sentry.json | 176 ++++ apps/web/src/locales/pt-pt/settings.json | 695 ++++++++++++++++ apps/web/src/locales/pt-pt/sidebar.json | 94 +++ apps/web/src/locales/pt-pt/slack.json | 39 + apps/web/src/locales/pt-pt/stats.json | 83 ++ apps/web/src/locales/pt-pt/system.json | 453 ++++++++++ apps/web/src/locales/pt-pt/task.json | 785 ++++++++++++++++++ apps/web/src/locales/pt-pt/tasks.json | 44 + apps/web/src/locales/pt-pt/workflows.json | 242 ++++++ apps/web/src/locales/pt-pt/workspaces.json | 123 +++ docs/i18n.md | 4 +- 38 files changed, 5880 insertions(+), 7 deletions(-) create mode 100644 apps/backend/internal/i18n/locales/pt-pt.json create mode 100644 apps/web/src/locales/pt-pt/account.json create mode 100644 apps/web/src/locales/pt-pt/agents.json create mode 100644 apps/web/src/locales/pt-pt/auth.json create mode 100644 apps/web/src/locales/pt-pt/automations.json create mode 100644 apps/web/src/locales/pt-pt/azuredevops.json create mode 100644 apps/web/src/locales/pt-pt/chat.json create mode 100644 apps/web/src/locales/pt-pt/common.json create mode 100644 apps/web/src/locales/pt-pt/configChat.json create mode 100644 apps/web/src/locales/pt-pt/diff.json create mode 100644 apps/web/src/locales/pt-pt/editors.json create mode 100644 apps/web/src/locales/pt-pt/executors.json create mode 100644 apps/web/src/locales/pt-pt/github.json create mode 100644 apps/web/src/locales/pt-pt/gitlab.json create mode 100644 apps/web/src/locales/pt-pt/integrations.json create mode 100644 apps/web/src/locales/pt-pt/jira.json create mode 100644 apps/web/src/locales/pt-pt/kanban.json create mode 100644 apps/web/src/locales/pt-pt/linear.json create mode 100644 apps/web/src/locales/pt-pt/lsp.json create mode 100644 apps/web/src/locales/pt-pt/plugins.json create mode 100644 apps/web/src/locales/pt-pt/review.json create mode 100644 apps/web/src/locales/pt-pt/sentry.json create mode 100644 apps/web/src/locales/pt-pt/settings.json create mode 100644 apps/web/src/locales/pt-pt/sidebar.json create mode 100644 apps/web/src/locales/pt-pt/slack.json create mode 100644 apps/web/src/locales/pt-pt/stats.json create mode 100644 apps/web/src/locales/pt-pt/system.json create mode 100644 apps/web/src/locales/pt-pt/task.json create mode 100644 apps/web/src/locales/pt-pt/tasks.json create mode 100644 apps/web/src/locales/pt-pt/workflows.json create mode 100644 apps/web/src/locales/pt-pt/workspaces.json diff --git a/apps/backend/internal/i18n/i18n.go b/apps/backend/internal/i18n/i18n.go index 009c1e2039..fdc2ad1714 100644 --- a/apps/backend/internal/i18n/i18n.go +++ b/apps/backend/internal/i18n/i18n.go @@ -44,6 +44,7 @@ const LocaleCookie = "kandev_locale" // with SUPPORTED_LOCALES in apps/web/lib/i18n/index.ts. var supportedLocales = map[string]bool{ "en": true, + "pt-pt": true, "zh-cn": true, "pseudo": true, } diff --git a/apps/backend/internal/i18n/i18n_test.go b/apps/backend/internal/i18n/i18n_test.go index 129e95b513..65c8019854 100644 --- a/apps/backend/internal/i18n/i18n_test.go +++ b/apps/backend/internal/i18n/i18n_test.go @@ -7,12 +7,18 @@ import ( "testing" ) +// localePtPT is the canonical European Portuguese id, spelled once so the +// catalog, negotiation, and parity assertions cannot drift apart. +const localePtPT = "pt-pt" + func TestNormalize(t *testing.T) { t.Parallel() for _, tc := range []struct{ in, want string }{ {"en", "en"}, {"zh-cn", "zh-cn"}, {"zh-CN", "zh-cn"}, + {localePtPT, localePtPT}, + {"pt-PT", localePtPT}, {"pseudo", "pseudo"}, {"", "en"}, {"fr", "en"}, @@ -38,6 +44,9 @@ func TestTranslatesAndFallsBack(t *testing.T) { if chinese := T("zh-cn", "webapp.shellUnavailable"); chinese == en { t.Fatalf("zh-cn message should differ from en, both %q", en) } + if portuguese := T(localePtPT, "webapp.shellUnavailable"); portuguese == en { + t.Fatalf("pt-pt message should differ from en, both %q", en) + } // An unknown locale falls back to en rather than erroring or blanking. if got := T("klingon", "webapp.shellUnavailable"); got != en { t.Fatalf("unknown locale = %q, want en fallback %q", got, en) @@ -118,7 +127,7 @@ func TestCatalogsHaveMatchingKeys(t *testing.T) { t.Parallel() load() source := catalogs[DefaultLocale] - for _, locale := range []string{"pseudo", "zh-cn"} { + for _, locale := range []string{"pseudo", "zh-cn", localePtPT} { translated := catalogs[locale] if len(translated) != len(source) { t.Fatalf("%s catalog has %d keys, want %d", locale, len(translated), len(source)) diff --git a/apps/backend/internal/i18n/locales/pt-pt.json b/apps/backend/internal/i18n/locales/pt-pt.json new file mode 100644 index 0000000000..f87fb72d22 --- /dev/null +++ b/apps/backend/internal/i18n/locales/pt-pt.json @@ -0,0 +1,36 @@ +{ + "share.brandTag": "tarefa partilhada", + "share.builtWith": "Criado com", + "share.ctaTryKandev": "Experimente o kandev no GitHub", + "share.emptyMessage": "vazia", + "share.gistDescription": "partilha do kandev: {{title}}", + "share.gistDescriptionUntitled": "partilha de tarefa do kandev", + "share.messageCount_one": "{{count}} mensagem", + "share.messageCount_other": "{{count}} mensagens", + "share.metaAgent": "Agente", + "share.metaCompleted": "Concluída", + "share.metaExecutor": "Executor", + "share.metaModel": "Modelo", + "share.metaStarted": "Iniciada", + "share.metaWorkflowStep": "Passo do fluxo de trabalho", + "share.noMessages": "Sem mensagens.", + "share.noMetadata": "sem metadados", + "share.openRenderedView": "**[Abrir a vista renderizada →]({{url}})** para ver a conversa devidamente formatada.", + "share.openShareHTML": "**Abra {{file}}** para ver a conversa renderizada.", + "share.pageTitle": "{{title}} — partilha do kandev", + "share.pitch": "Partilhado a partir do **[kandev]({{url}})** — o ambiente de desenvolvimento com agentes de código aberto.", + "share.rawExport": "Exportação em bruto:", + "share.redacted": "Censurado:", + "share.redactedBeforePublish": "Censurado antes da publicação:", + "share.roleAssistant": "Assistente", + "share.roleSystem": "Sistema", + "share.roleUser": "Utilizador", + "share.roleYou": "Eu", + "share.sessionDetails": "Detalhes da sessão", + "share.toolOutput": "Saída da ferramenta", + "share.toolOutputTruncated": "Saída da ferramenta (truncada)", + "share.untitledTask": "Tarefa sem título", + "webapp.assetReadFailed": "Não foi possível ler um recurso web.", + "webapp.devServerUnavailable": "O servidor de desenvolvimento do Vite não está disponível.", + "webapp.shellUnavailable": "A aplicação web do Kandev não está disponível." +} diff --git a/apps/backend/internal/webapp/shell_test.go b/apps/backend/internal/webapp/shell_test.go index 8baeb62bbf..b63d9d265a 100644 --- a/apps/backend/internal/webapp/shell_test.go +++ b/apps/backend/internal/webapp/shell_test.go @@ -111,6 +111,7 @@ func TestRenderShellSetsHTMLLangFromLocale(t *testing.T) { }{ {name: "default when empty", locale: "", wantLang: `lang="en"`}, {name: "supported simplified chinese", locale: "zh-cn", wantLang: `lang="zh-cn"`}, + {name: "supported european portuguese", locale: "pt-pt", wantLang: `lang="pt-pt"`}, {name: "supported pseudo", locale: "pseudo", wantLang: `lang="pseudo"`}, {name: "unknown coerces to en", locale: "klingon", wantLang: `lang="en"`}, } @@ -163,6 +164,8 @@ func TestNormalizeLocale(t *testing.T) { {"en", "en"}, {"zh-cn", "zh-cn"}, {"zh-CN", "zh-cn"}, + {"pt-pt", "pt-pt"}, + {"pt-PT", "pt-pt"}, {"pseudo", "pseudo"}, {"", "en"}, {"fr", "en"}, diff --git a/apps/web/lib/i18n/formats.test.ts b/apps/web/lib/i18n/formats.test.ts index 7f32741ff9..5f0d95ad4b 100644 --- a/apps/web/lib/i18n/formats.test.ts +++ b/apps/web/lib/i18n/formats.test.ts @@ -66,4 +66,21 @@ describe("locale-aware Intl wrappers", () => { ); await activateLocale("en"); }); + + it("passes pt-pt to number and date formatters", async () => { + await activateLocale("pt-pt"); + const dateOptions: Intl.DateTimeFormatOptions = { + year: "numeric", + month: "long", + day: "numeric", + timeZone: "UTC", + }; + const date = "2026-07-27T00:00:00Z"; + + expect(formatNumber(1234.5)).toBe(new Intl.NumberFormat("pt-pt").format(1234.5)); + expect(formatDate(date, dateOptions)).toBe( + new Intl.DateTimeFormat("pt-pt", dateOptions).format(new Date(date)), + ); + await activateLocale("en"); + }); }); diff --git a/apps/web/lib/i18n/index.test.ts b/apps/web/lib/i18n/index.test.ts index 59e5738369..76abd3ffb1 100644 --- a/apps/web/lib/i18n/index.test.ts +++ b/apps/web/lib/i18n/index.test.ts @@ -12,6 +12,7 @@ import { import { LOCALE_COOKIE, readLocaleCookie } from "./cookie"; const ZH_CN_LOCALE = "zh-cn"; +const PT_PT_LOCALE = "pt-pt"; const DISPLAY_LANGUAGE_KEY = "settings:displayLanguage"; afterEach(async () => { @@ -27,6 +28,8 @@ describe("locale predicates", () => { expect(isSupportedLocale(ZH_CN_LOCALE)).toBe(true); expect(isSupportedLocale("zh-CN")).toBe(true); expect(isSupportedLocale(" ZH-CN ")).toBe(true); + expect(isSupportedLocale(PT_PT_LOCALE)).toBe(true); + expect(isSupportedLocale("pt-PT")).toBe(true); expect(isSupportedLocale("pseudo")).toBe(true); expect(isSupportedLocale("fr")).toBe(false); expect(isSupportedLocale(42)).toBe(false); @@ -36,6 +39,7 @@ describe("locale predicates", () => { expect(normalizeLocale(ZH_CN_LOCALE)).toBe(ZH_CN_LOCALE); expect(normalizeLocale("zh-CN")).toBe(ZH_CN_LOCALE); expect(normalizeLocale(" ZH-CN ")).toBe(ZH_CN_LOCALE); + expect(normalizeLocale("pt-PT")).toBe(PT_PT_LOCALE); expect(normalizeLocale("pseudo")).toBe("pseudo"); expect(normalizeLocale("nope")).toBe(DEFAULT_LOCALE); expect(normalizeLocale(undefined)).toBe(DEFAULT_LOCALE); @@ -43,12 +47,12 @@ describe("locale predicates", () => { it("exposes en as the default and lists every shipped locale", () => { expect(DEFAULT_LOCALE).toBe("en"); - expect([...SUPPORTED_LOCALES]).toEqual(["en", "zh-cn", "pseudo"]); + expect([...SUPPORTED_LOCALES]).toEqual(["en", "pt-pt", "zh-cn", "pseudo"]); }); it("hides the pseudo locale in production builds only", () => { - expect(selectableLocales(false)).toEqual(["en", "zh-cn", "pseudo"]); - expect(selectableLocales(true)).toEqual(["en", "zh-cn"]); + expect(selectableLocales(false)).toEqual(["en", "pt-pt", "zh-cn", "pseudo"]); + expect(selectableLocales(true)).toEqual(["en", "pt-pt", "zh-cn"]); }); }); @@ -88,4 +92,17 @@ describe("activateLocale", () => { expect(i18n.getResource(ZH_CN_LOCALE, "settings", "displayLanguage")).toBe("显示语言"); expect(i18n.t(DISPLAY_LANGUAGE_KEY)).toBe("显示语言"); }); + + it("activates European Portuguese and resolves its real catalog", async () => { + const result = await activateLocale("pt-PT"); + expect(result).toBe(PT_PT_LOCALE); + expect(i18n.language).toBe(PT_PT_LOCALE); + expect(document.documentElement.lang).toBe(PT_PT_LOCALE); + expect(readLocaleCookie()).toBe(PT_PT_LOCALE); + expect(i18n.hasResourceBundle(PT_PT_LOCALE, "settings")).toBe(true); + expect(i18n.getResource(PT_PT_LOCALE, "settings", "displayLanguage")).toBe( + "Idioma de apresentação", + ); + expect(i18n.t(DISPLAY_LANGUAGE_KEY)).toBe("Idioma de apresentação"); + }); }); diff --git a/apps/web/lib/i18n/index.ts b/apps/web/lib/i18n/index.ts index 7a0de334b2..d687d2b12e 100644 --- a/apps/web/lib/i18n/index.ts +++ b/apps/web/lib/i18n/index.ts @@ -18,12 +18,13 @@ import { writeLocaleCookie } from "./cookie"; */ export const DEFAULT_LOCALE = "en"; export const DEFAULT_NAMESPACE = "common"; -export const SUPPORTED_LOCALES = ["en", "zh-cn", "pseudo"] as const; +export const SUPPORTED_LOCALES = ["en", "pt-pt", "zh-cn", "pseudo"] as const; export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number]; /** Human-readable labels for the language switcher. */ export const LOCALE_LABELS: Record = { en: "English", + "pt-pt": "Português (Portugal)", "zh-cn": "简体中文", pseudo: "Pseudo (QA)", }; diff --git a/apps/web/src/locales/pt-pt/account.json b/apps/web/src/locales/pt-pt/account.json new file mode 100644 index 0000000000..a233a356b3 --- /dev/null +++ b/apps/web/src/locales/pt-pt/account.json @@ -0,0 +1,42 @@ +{ + "actions": "Ações", + "activeSessions": "Sessões ativas", + "apiTokens": "Tokens de API", + "apiTokensBlurb": "Os tokens de acesso pessoal autenticam scripts e CLI como se fosse o utilizador. Revogue um token de imediato se houver a possibilidade de ter sido divulgado.", + "cancel": "Cancelar", + "changePassword": "Alterar palavra-passe", + "couldNotChangePassword": "Não foi possível alterar a palavra-passe.", + "couldNotCreateToken": "Não foi possível criar o token.", + "createApiToken": "Criar token de API", + "createApiTokenDescription": "Concede a qualquer script ou CLI que o utilize o mesmo acesso da sua conta. Atribua-lhe um nome para o reconhecer mais tarde.", + "createToken": "Criar token", + "created": "Criado", + "creating": "A criar...", + "currentPassword": "Palavra-passe atual", + "device": "Dispositivo", + "done": "Concluído", + "failedToLoadSessions": "Não foi possível carregar as sessões.", + "failedToLoadTokens": "Não foi possível carregar os tokens.", + "ipAddress": "IP", + "lastSeen": "Visto pela última vez", + "lastUsed": "Última utilização", + "loadingSessions": "A carregar as sessões...", + "loadingTokens": "A carregar os tokens...", + "name": "Nome", + "never": "Nunca", + "newPassword": "Nova palavra-passe", + "newToken": "Novo token", + "noTokensYet": "Ainda não há tokens.", + "password": "Palavra-passe", + "passwordUpdated": "Palavra-passe atualizada.", + "revoke": "Revogar", + "saving": "A guardar...", + "securityPageDescription": "Altere a sua palavra-passe e reveja os dispositivos com sessão iniciada na sua conta.", + "securityPageTitle": "Perfil e palavra-passe", + "signOut": "Terminar sessão", + "thisDevice": "Este dispositivo", + "tokenCreated": "Token criado", + "tokenShownOnlyOnce": "Isto é mostrado apenas uma vez — copie-o agora e guarde-o em segurança.", + "tokensPageDescription": "Tokens de acesso pessoal para scripts e CLI que atuam em seu nome.", + "tokensPageTitle": "Tokens de API" +} diff --git a/apps/web/src/locales/pt-pt/agents.json b/apps/web/src/locales/pt-pt/agents.json new file mode 100644 index 0000000000..8227f66cf9 --- /dev/null +++ b/apps/web/src/locales/pt-pt/agents.json @@ -0,0 +1,209 @@ +{ + "actionCannotBeUndone": "Esta ação não pode ser anulada.", + "add": "Adicionar", + "addProfile": "Adicionar perfil", + "addTuiAgent": "Adicionar agente TUI", + "addTuiAgentDescription": "Registe uma ferramenta de CLI como agente TUI. Aparecerá na lista de agentes com um perfil de passagem direta pré-definido.", + "agentCliFlags": "Flags da CLI do agente", + "agentCliFlagsDescription": "Flags passadas à CLI do agente no arranque. Só as entradas ativadas são aplicadas.", + "agentInstallAlreadyInProgress": "Já está em curso uma instalação do agente.", + "agentInstallationInProgress": "Está em curso a instalação do agente", + "agentNotFound": "Agente não encontrado.", + "agentProfileSettings": "Definições do perfil {{name}}", + "agentProfiles": "Perfis de agente", + "agentProfilesDescription": "Gerir os perfis existentes por agente.", + "agentProfilesTitle": "Perfis de {{name}}", + "approveUpdate": "Aprovar a atualização", + "authRequiredOpenLoginTerminal": "É necessária autenticação - clique para abrir o terminal de início de sessão", + "authRequiredOpenShell": "É necessária autenticação - clique para abrir uma shell e iniciar sessão", + "authenticationRequired": "É necessária autenticação", + "automaticallyAvailable": "Disponível automaticamente", + "availableCommandsCount_one": "Comandos disponíveis ({{count}})", + "availableCommandsCount_other": "Comandos disponíveis ({{count}})", + "availableSlashCommands": "Comandos slash disponíveis", + "availableSlashCommandsHelp": "Escreva-os durante o chat de uma sessão para os invocar - ex.: <0>{{example}}.", + "availableToInstall": "Disponíveis para instalar", + "availableToInstallDescription": "Clique em Instalar para executar o script de instalação do agente no anfitrião do kandev. O progresso é transmitido em direto; pode iniciar várias instalações em paralelo.", + "backToAgents": "Voltar a Agentes", + "backToModelSettings": "Voltar às definições de modelo a partir de {{name}}", + "builtIn": "Incorporado", + "cannotDeleteAgentProfile": "Não é possível eliminar o perfil de agente", + "capabilityAuthRequired": "É necessária autenticação. Execute a CLI do agente no seu terminal para se autenticar e depois atualize.", + "capabilityNotInstalled": "A CLI do agente não está instalada.", + "capabilityProbeFailed": "A sondagem falhou. Consulte os registos do agente para mais detalhes.", + "capabilityProbing": "A verificar as capacidades do agente…", + "changeTierMappingsFirst": "Altere estes mapeamentos de escalão da área de trabalho antes de eliminar este perfil.", + "checkingAuthentication": "A verificar a autenticação", + "checkingCapabilitiesAndAuth": "A verificar as capacidades e a autenticação do agente...", + "checkingLatestRuntimeVersion": "A verificar a versão mais recente do runtime…", + "cliFlagsEnabledCount_one": "{{enabled}} de {{count}} ativada", + "cliFlagsEnabledCount_other": "{{enabled}} de {{count}} ativadas", + "command": "Comando", + "commandPrefix": "Prefixo do comando", + "commandPrefixHelp": "Elementos acrescentados no início do comando de arranque do agente, para que este seja executado sob um lançador de sandbox (ex.: <0>{{example}}). O valor é dividido como na shell. Deixe vazio para executar o agente diretamente. Aplica-se apenas a sessões ACP — não tem efeito quando o perfil usa passagem direta TUI.", + "commandPreview": "Pré-visualização do comando", + "commandPreviewHelp": "O comando de CLI que será executado com base nas definições atuais.", + "commandRequired": "O comando é obrigatório", + "commandThatWillRun": "Comando que será executado", + "configureProfilesIntro": "Configure os perfis e as pré-definições deste agente.", + "configured": "Configurado", + "conflictAutomationRow": "<0>{{name}} em {{workspace}}", + "conflictAutomationsTitle": "Automatizações:", + "conflictQuickChatsTitle": "Chats rápidos:", + "conflictTasksTitle": "Tarefas:", + "conflictTierMappingRow": "Escalão <0>{{tier}} em {{workspace}} para {{provider}}", + "conflictTierMappingsTitle": "Mapeamentos de escalão da área de trabalho:", + "conflictWatchersTitle": "Vigilâncias (serão desativadas):", + "copied": "Copiado", + "copyInstallCommand": "Copiar o comando de instalação", + "copyToClipboard": "Copiar para a área de transferência", + "create": "Criar", + "createAgentProfileTitle": "Criar perfil de {{name}}", + "createNewProfile": "Criar um novo perfil", + "createProfileIntro": "Crie um novo perfil para este agente.", + "creating": "A criar...", + "defaultProfile": "Perfil pré-definido", + "defaultSuffix": "(pré-definido)", + "delete": "Eliminar", + "deleteAgent": "Eliminar agente", + "deleteAgentDescription": "Isto remove permanentemente o agente e todos os seus perfis. Esta ação não pode ser anulada.", + "deleteAgentProfileDescription": "Isto elimina permanentemente este perfil. Esta ação não pode ser anulada.", + "deleteAgentProfileTitle": "Eliminar o perfil de agente?", + "deleteAgentTitle": "Eliminar {{name}}?", + "deleteAnyway": "Eliminar mesmo assim", + "deleteAnywayConsequences": "Estas sessões deixarão de poder usar este perfil e as vigilâncias listadas serão desativadas. Esta ação não pode ser anulada.", + "deleteProfile": "Eliminar perfil", + "details": "detalhes", + "detectedAt": "Detetado em {{path}}", + "disableProfile": "Desativar perfil", + "disableProfileNamed": "Desativar {{name}}", + "disableSetting": "Desativar {{name}}", + "displayName": "Nome a apresentar", + "displayNameRequired": "O nome a apresentar é obrigatório", + "done": "Concluído", + "enableMcp": "Ativar o MCP", + "enableMcpDescription": "Permitir que este perfil use servidores MCP durante as sessões.", + "enableProfile": "Ativar perfil", + "enableProfileNamed": "Ativar {{name}}", + "enableSetting": "Ativar {{name}}", + "enabled": "Ativado", + "enabledProfileInfo": "Mais informações sobre a disponibilidade do perfil", + "enabledProfileHelper": "Os perfis desativados continuam a servir as sessões existentes, mas não são oferecidos ao criar novas tarefas ou agentes.", + "everyProfileNeedsNameAndModel": "Todos os perfis precisam de um nome e de um modelo.", + "exampleValue": "ex.: {{example}}", + "failedToCreateAgent": "Não foi possível criar o agente", + "failedToDeleteProfile": "Não foi possível eliminar o perfil", + "failedToFetchCapabilities": "Não foi possível obter as capacidades", + "failedToLoadCommandPreview": "Não foi possível carregar a pré-visualização do comando", + "failedToLoadMcpConfig": "Não foi possível carregar a configuração MCP", + "failedToRefresh": "Não foi possível atualizar: {{error}}", + "failedToSaveAgent": "Não foi possível guardar o agente", + "failedToSaveMcpConfig": "Não foi possível guardar a configuração MCP", + "failedToSaveProfile": "Não foi possível guardar o perfil", + "failedToUpdateProfile": "Não foi possível atualizar o perfil", + "filterModels": "Filtrar modelos...", + "fixInvalidMcpConfig": "Corrija a configuração MCP inválida antes de guardar.", + "fixInvalidMcpJson": "Corrija o JSON de MCP inválido antes de guardar.", + "flag": "Flag", + "goToAgents": "Ir para Agentes", + "hostTerminal": "Terminal do anfitrião", + "hostTerminalDescription": "Executa uma shell no anfitrião do kandev. Use-a para instalar ou configurar agentes manualmente.", + "install": "Instalar", + "installQueued": "Em fila…", + "installationNotDetected": "Instalação não detetada", + "installed": "Instalado", + "installedAgents": "Agentes instalados", + "installedAgentsDescription": "Os agentes detetados nesta máquina estão prontos a configurar.", + "installing": "A instalar…", + "invalidJson": "JSON inválido", + "invalidMcpConfig": "Configuração MCP inválida", + "kandevMcpChip": "✓ {{name}}", + "kandevMcpTools": "Ferramentas: {{tools}}", + "manageAgentsFromMainPage": "Faça a gestão dos agentes a partir da página principal de Agentes.", + "mcpConfigMustBeJsonObject": "A configuração dos servidores MCP tem de ser um objeto JSON", + "mcpConfiguration": "Configuração MCP", + "mcpDraftHint": "A configuração MCP será aplicada depois de o perfil ser guardado.", + "mcpKeyMustBeJsonObject": "{{key}} tem de ser um objeto JSON", + "mcpPassthroughInjectionHint": "No modo de passagem direta da CLI, o kandev injeta estes servidores MCP através de {{mechanism}}.", + "mcpSaveProfileHint": "Guarde este perfil para configurar servidores MCP.", + "mcpServersHelp": "As definições de MCP são guardadas na base de dados e resolvidas por executor em tempo de execução. Isto não substitui a configuração local do seu agente.", + "mcpServersJson": "Servidores MCP (JSON)", + "model": "Modelo", + "modelHeading": "Modelo", + "modelRequiredForAllProfiles": "O modelo é obrigatório em todos os perfis.", + "noAuthHintLogin": "Clique em Abrir terminal para iniciar sessão e depois atualize.", + "noAuthHintNotInstalled": "Instale a CLI do agente e depois clique em Atualizar.", + "noAuthHintShell": "Clique em Abrir terminal para iniciar uma shell, execute o comando de início de sessão do agente e depois atualize.", + "noAuthLoginRequired": "Sem autenticação - é necessário iniciar sessão", + "noCliFlagsConfigured": "Não há flags de CLI configuradas. Adicione uma abaixo.", + "noCommandPreview": "Não há pré-visualização do comando disponível.", + "noInstalledAgentsDetected": "Não foram detetados agentes instalados. Instale um abaixo e clique em Voltar a analisar.", + "noModeFound": "Nenhum modo encontrado.", + "noModelFound": "Nenhum modelo encontrado.", + "noModelsFound": "Nenhum modelo encontrado.", + "notInstalled": "Não instalado", + "openTerminal": "Abrir terminal", + "pageDescription": "Descubra os agentes instalados, instale novos e faça a gestão dos respetivos perfis.", + "popularServers": "Servidores populares", + "probingCapabilities": "A sondar as capacidades do agente… normalmente demora alguns segundos.", + "profileInUseIntro": "Este perfil está atualmente em uso. Eliminá-lo afeta o seguinte:", + "profileName": "Nome do perfil", + "profileNameRequired": "O nome do perfil é obrigatório.", + "profileNameRequiredDescription": "Introduza um nome de perfil antes de guardar.", + "profileNameRequiredTitle": "O nome do perfil é obrigatório", + "profileNotFound": "Perfil não encontrado.", + "profileSettings": "Definições do perfil", + "profileStartModelSettings": "Definições do modelo inicial do perfil", + "promptTokenHint": "<0>{{token}} será substituído pela descrição da sua tarefa ou pela mensagem de seguimento.", + "ptyConnectionError": "Erro de ligação", + "refresh": "Atualizar", + "refreshCapabilitiesTooltip": "Atualizar as capacidades do agente (modelos + modos)", + "remove": "Remover", + "removeCliFlag": "Remover {{name}}", + "removeThisProfile": "Remover este perfil", + "requestFailed": "O pedido falhou", + "rescan": "Voltar a analisar", + "retry": "Tentar novamente", + "retryUpdate": "Repetir a atualização", + "retryVersionCheck": "Repetir a verificação da versão", + "reviewUpdateBeforeApplying": "Reveja a atualização antes de o Kandev alterar o runtime deste anfitrião.", + "runtimeAlreadyUpToDate": "O runtime já está atualizado.", + "runtimeUpdateExplainer": "Isto atualiza o runtime gerido neste anfitrião do Kandev e depois atualiza os respetivos modelos e capacidades.", + "runtimeUpdateFailed": "A atualização do runtime falhou.", + "runtimeUpdateSessionsNote": "As sessões ativas continuam a correr; só as sondagens e os arranques posteriores usam o runtime atualizado.", + "runtimeUpdatedRefreshFailed": "O runtime foi atualizado, mas não foi possível atualizar as capacidades: {{error}}", + "runtimeUpdatedSuccess": "Runtime atualizado com êxito.", + "runtimeVersion": "Versão do runtime", + "scanningForInstalledAgents": "À procura de agentes instalados...", + "searchModels": "Pesquisar modelos...", + "searchModes": "Pesquisar modos...", + "selectAModel": "Selecione um modelo...", + "selectAModelShort": "Selecionar um modelo", + "sessionEnded": "A sessão terminou.", + "sessionEndedWithCode": "A sessão terminou (saída {{code}}).", + "sessionUnavailable": "A sessão já não está disponível.", + "setupProfile": "Configurar perfil", + "signInToAgent": "Iniciar sessão: {{name}}", + "startMode": "Modo inicial", + "startModel": "Modelo inicial", + "startingSession": "A iniciar a sessão…", + "terminal": "Terminal", + "tuiCommandHelp": "O nome do binário é procurado na PATH. Use <0>{{token}} para inserir o valor do modelo.", + "tuiModelHelp": "Etiqueta do perfil mostrada na lista de seleção de agentes", + "unableToStartUpdate": "Não foi possível iniciar a atualização: {{error}}", + "untitledQuickChat": "Chat rápido sem título", + "untitledTask": "Tarefa sem título", + "upToDate": "Atualizado", + "updateAgent": "Atualizar {{name}}", + "updatePhaseQueued": "Atualização em fila…", + "updatePhaseRefreshing": "A atualizar as capacidades do agente…", + "updatePhaseResolving": "A verificar a versão mais recente…", + "updatePhaseUpdating": "A atualizar o runtime…", + "valueOptional": "valor (opcional)", + "valueOptionalLabel": "Valor (opcional)", + "valuePlaceholder": "valor", + "watcherKindGithubIssue": "Issues do GitHub", + "watcherKindGithubReview": "Revisões de PR do GitHub", + "watcherKindJira": "Jira", + "watcherKindLinear": "Linear" +} diff --git a/apps/web/src/locales/pt-pt/auth.json b/apps/web/src/locales/pt-pt/auth.json new file mode 100644 index 0000000000..8aa82909bd --- /dev/null +++ b/apps/web/src/locales/pt-pt/auth.json @@ -0,0 +1,20 @@ +{ + "acceptInvite": "Aceitar convite", + "atLeast8Characters": "Pelo menos 8 caracteres.", + "authenticationIsEnabledForThisDeployment": "A autenticação está ativada nesta instalação. Crie a primeira conta abaixo — torna-se a conta de administrador e pode convidar mais utilizadores.", + "checkingInvite": "A verificar o convite...", + "continueWithProvider": "Continuar com {{provider}}", + "createAdminAccount": "Criar conta de administrador", + "creatingAdminAccount": "A criar a conta de administrador...", + "displayName": "Nome a apresentar", + "email": "E-mail", + "joining": "A aderir...", + "joinThisKandevDeployment": "Adira a esta instalação do Kandev.", + "orContinueWith": "ou continuar com", + "password": "Palavra-passe", + "setUpKandev": "Configurar o Kandev", + "signIn": "Iniciar sessão", + "signingIn": "A iniciar sessão...", + "signInToYourKandevAccount": "Inicie sessão na sua conta Kandev para continuar.", + "youVeBeenInvitedAs": "Foi convidado como {{role}}." +} diff --git a/apps/web/src/locales/pt-pt/automations.json b/apps/web/src/locales/pt-pt/automations.json new file mode 100644 index 0000000000..8ad6f07b96 --- /dev/null +++ b/apps/web/src/locales/pt-pt/automations.json @@ -0,0 +1,203 @@ +{ + "aboutSchedulePolling": "Sobre a sondagem de agendamentos", + "addCondition": "Adicionar condição", + "addRepository": "Adicionar repositório", + "agentProfileLabel": "Perfil de agente", + "agentProfilePlaceholder": "Selecionar agente", + "allRuns": "Todas as execuções", + "alreadyAdded": "Já adicionado", + "anyAutomation": "Qualquer automatização", + "atMinute": "ao minuto", + "authorsLabel": "Autores (separados por vírgulas)", + "automation": "Automatização", + "automationCreated": "Automatização criada", + "automations": "Automatizações", + "availablePlaceholders": "Marcadores disponíveis", + "availablePlaceholdersColon": "Marcadores disponíveis:", + "baseBranchesLabel": "Branches de base (separados por vírgulas)", + "boardMoveNoticeBody": "As automatizações aqui costumavam criar um cartão no kanban quando eram executadas. Continuam a ser executadas, mas os seus relatórios passaram a ficar junto da automatização — abra uma para ler o que encontrou. Os cartões que já estão no quadro não são afetados.", + "boardMoveNoticeDismiss": "Percebi", + "boardMoveNoticeTitle": "As execuções de automatizações já não aparecem no quadro", + "branchPatternsLabel": "Padrões de branch (separados por vírgulas, aceita globs)", + "checkNamesLabel": "Nomes das verificações (separados por vírgulas, opcional)", + "ciConclusionCancelled": "Cancelada", + "ciConclusionFailure": "Falha", + "ciConclusionSuccess": "Sucesso", + "ciConclusionsLabel": "Conclusões", + "clearFilters": "Limpar filtros", + "columnEnabled": "Ativada", + "columnLastTriggered": "Último acionamento", + "columnName": "Nome", + "columnTriggers": "Acionadores", + "comingSoonSuffix": " (Brevemente)", + "completeRequiredFields": "Preencha os campos obrigatórios da automatização antes de guardar.", + "completed": "Concluída", + "configurationLabel": "Configuração", + "couldNotLoadWorkflows": "Não foi possível carregar os fluxos de trabalho", + "couldNotRefreshRuns": "Não foi possível atualizar as execuções — repostas a partir da cache local", + "couldNotTrigger": "Não foi possível acionar a automatização", + "createAnAutomation": "Criar uma automatização", + "createWorkspace": "Criar área de trabalho", + "cronEveryDay": "Todos os dias", + "cronEveryHour": "Todas as horas", + "cronEveryWeek": "Todas as semanas", + "cronExpressionLabel": "Expressão cron", + "cronHelp": "Cron padrão de 5 campos ou atalhos ({{shortcuts}})", + "delete": "Eliminar", + "deleteAll": "Eliminar todas", + "deleteAllRuns": "Eliminar todas as execuções", + "deleteAllRunsDescription": "Isto remove permanentemente todos os registos de execução desta automatização — incluindo os que não estão carregados neste momento — e as tarefas associadas. Esta ação não pode ser anulada.", + "deleteAllRunsTitle": "Eliminar todas as execuções?", + "deleteRun": "Eliminar execução", + "details": "Detalhes", + "done": "Concluído", + "emptyListBody": "As automatizações são executadas com base num agendamento ou num webhook e devolvem o que encontraram. Configure uma e os seus relatórios aparecem aqui.", + "emptyListTitle": "Ainda não há automatizações nesta área de trabalho", + "emptyRunsTitle": "Ainda nenhuma automatização reportou", + "enabledLabel": "Ativada", + "eventsLabel": "Eventos", + "excludeDraftPrs": "Excluir PRs em rascunho", + "executorProfileLabel": "Perfil de executor", + "executorProfilePlaceholder": "Selecionar executor", + "failedToDeleteAutomation": "Não foi possível eliminar a automatização", + "failedToDeleteRun": "Não foi possível eliminar a execução", + "failedToDeleteRuns": "Não foi possível eliminar as execuções", + "failedToLoadWebhookSecret": "Não foi possível carregar o segredo do webhook: {{error}}", + "failedToSaveAutomation": "Não foi possível guardar a automatização: {{error}}", + "hasNotRunYet": "Esta automatização ainda não foi executada.", + "hideRunDetail": "Ocultar os detalhes da execução", + "instructionsLabel": "Instruções", + "interpretedAsUtcSetTimezone": "interpretado como UTC, defina um fuso horário", + "lastRan": "Última execução {{when}}", + "listDescription": "Crie regras que acionam tarefas de agente automaticamente.", + "loading": "A carregar...", + "loadingActivity": "A carregar a atividade…", + "loadingAutomations": "A carregar as automatizações...", + "loadingRuns": "A carregar as execuções…", + "maxConcurrentRuns": "Máximo de execuções em simultâneo", + "nameHelp": "Introduza um nome de automatização para poder guardar.", + "nameLabel": "Nome", + "namePlaceholder": "Nome da automatização", + "neverTriggered": "Nunca", + "newAutomation": "Nova automatização", + "nextRun": "Próxima execução", + "noAutomationsYet": "Ainda não há automatizações", + "noConversationForRun": "Esta execução não produziu nenhuma conversa para ler.", + "noRepositoriesHelp": "Sem repositórios selecionados, esta automatização é executada sobre o primeiro repositório da área de trabalho.", + "noRunsMatchFilters": "Nenhuma execução corresponde a estes filtros.", + "noRunsYet": "Ainda não há execuções", + "noSchedule": "Sem agendamento — esta automatização não é executada por si só.", + "noStep": "Sem passo", + "noTimezoneFound": "Nenhum fuso horário encontrado.", + "noTriggers": "Nenhum", + "noWorkflow": "Sem fluxo de trabalho", + "noWorkspacesDescription": "Crie primeiro uma área de trabalho e depois agende automatizações dentro dela.", + "noWorkspacesYet": "Ainda não há áreas de trabalho", + "nothingHasRunYet": "Ainda não foi executado nada.", + "openAutomations": "Abrir automatizações", + "orUseWebhookInstead": "Ou use antes um webhook", + "outcome": "Resultado", + "pickAWorkflowFirst": "Escolha primeiro um fluxo de trabalho", + "pickWorkspace": "Escolha uma área de trabalho para gerir as suas automatizações.", + "prEventOpened": "Aberto", + "prEventOpenedTooltip": "Dispara uma vez quando é detetado um novo PR aberto. Cada número de PR é desduplicado — o mesmo PR não volta a acionar.", + "prTriggerRepositoryHelp": "Os acionadores de PR usam sempre o repositório do próprio PR.", + "pushTriggerHelp": "Aciona quando é feito push de código para branches correspondentes", + "recentRuns": "Execuções recentes", + "recentRuns_one": "Execuções recentes ({{count}})", + "recentRuns_other": "Execuções recentes ({{count}})", + "refresh": "Atualizar", + "removeRepository": "Remover repositório", + "replyToThisRun": "Responder a esta execução…", + "repositoryLabel": "Repositório", + "repositoryNone": "Nenhum — sem repositório", + "repositoryPlaceholderAuto": "Automático", + "required": "obrigatório", + "resizeRuns": "Redimensionar as execuções", + "run": "Executar", + "runAll": "Todas", + "runArchived": "Arquivada", + "runCancelled": "Cancelada", + "runFailed": "Falhou", + "runNow": "Executar agora", + "runRunning": "Em execução", + "runSkipped": "Ignorada", + "runStatusArchived": "Arquivada", + "runStatusCancelled": "Cancelada", + "runStatusFailed": "Falhou", + "runStatusRunning": "Em execução", + "runStatusSkipped": "Ignorada", + "runStatusSucceeded": "Bem-sucedida", + "runStatusTriggered": "Acionada", + "runSucceeded": "Bem-sucedida", + "runTriggered": "Acionada", + "running": "Em execução", + "runs": "Execuções", + "runsColumnStatus": "Estado", + "runsColumnTime": "Hora", + "runsColumnTrigger": "Acionador", + "runsCount_one": "{{count}} execução", + "runsCount_other": "{{count}} execuções", + "runsTitle": "Todas as execuções", + "samplePayloadHelp": "Cole um corpo JSON de exemplo para descobrir os marcadores disponíveis.", + "samplePayloadLabel": "Payload de exemplo (opcional)", + "scheduleLabel": "Agendamento", + "schedulePollingHelp": "Verificado a cada 30 segundos por um processo em segundo plano. Os agendamentos persistem entre reinícios do backend.", + "schedulerNote": "As automatizações agendadas só são executadas enquanto o kandev estiver a correr. Um disparo perdido enquanto esteve fechado é executado uma vez no tique seguinte, não uma vez por cada ocorrência perdida.", + "searchConditions": "Pesquisar condições...", + "searchTimezones": "Pesquisar fusos horários…", + "selectRepositoryPlaceholder": "Selecione um repositório", + "selectStepOptional": "Selecionar passo (opcional)", + "selectWorkflowOptional": "Selecionar fluxo de trabalho (opcional)", + "setUpAnAutomation": "Configurar uma automatização", + "showLess": "Mostrar menos", + "showMore": "Mostrar mais", + "showRunDetail": "Detalhes da execução", + "skipped": "Ignorada — {{reason}}", + "skippedAlreadyRunning": "Ignorada — já está em execução", + "starting": "A iniciar…", + "stateIdle": "Inativa", + "statePaused": "Em pausa", + "stateRunning": "Em execução", + "summaryCiCompleted": "CI concluído", + "summaryCustomSchedule": "Agendamento personalizado", + "summaryPrEvents": "PR: {{events}}", + "summaryPullRequestEvent": "Evento de pull request", + "summaryPushToBranch": "Push para um branch", + "summaryWebhook": "Webhook", + "switchToScheduled": "Mudar para agendada", + "taskTitleHelp": "Deixe vazio para usar a pré-definição. Aceita marcadores.", + "taskTitleLabel": "Título da tarefa", + "taskTitlePlaceholder": "[Auto] nome da automatização", + "thenDescription": "Será criada uma nova tarefa sempre que esta automatização for acionada", + "thenTitle": "Então", + "triggerCategoryGithub": "GitHub", + "triggerCategoryWebhook": "Webhook", + "triggerInfoGithubPr": "Sonda a API do GitHub segundo o seu agendamento à procura de PRs que correspondam aos filtros.", + "triggerInfoNotImplemented": "Ainda não implementado.", + "triggerInfoScheduled": "Verificado a cada 30 segundos. Dispara quando o agendamento cron corresponde.", + "triggerInfoWebhook": "Dispara imediatamente quando um pedido POST chega ao URL do webhook.", + "triggerLabelGithubCi": "CI do GitHub", + "triggerLabelGithubPr": "PR do GitHub", + "triggerLabelGithubPush": "Push do GitHub", + "triggerLabelScheduled": "Agendada", + "triggerLabelWebhook": "Webhook", + "triggerManually": "Acionar manualmente", + "triggered": "Acionada", + "tryAgain": "Tente novamente", + "unknownTriggerType": "Tipo de acionador desconhecido", + "upNext": "A seguir", + "watchForLabel": "Vigiar", + "webhookCreatedDescription": "Configure o seu sistema externo para fazer POST para este URL com o segredo no cabeçalho <0>{{header}}. Pode voltar a esta automatização quando quiser para copiar novamente estes valores.", + "webhookSecretLabel": "Segredo do webhook", + "webhookSecretLoading": "A carregar…", + "webhookUrlAfterSave": "O URL do webhook ficará disponível depois de guardar a automatização.", + "webhookUrlLabel": "URL do webhook", + "webhookUsageHelp": "Envie um pedido POST com um corpo JSON e o segredo no cabeçalho <0>{{header}}. Referencie campos do payload com <1>{{placeholder}}, ex.: <2>{{example}}.", + "whenDescription": "O que faz esta automatização ser executada", + "whenTitle": "Quando", + "workflowLabel": "Fluxo de trabalho", + "workflowLoadError": "Não foi possível carregar os fluxos de trabalho.", + "workflowStepHelpNoWorkflow": "Selecione um fluxo de trabalho antes de escolher um passo.", + "workflowStepLabel": "Passo do fluxo de trabalho" +} diff --git a/apps/web/src/locales/pt-pt/azuredevops.json b/apps/web/src/locales/pt-pt/azuredevops.json new file mode 100644 index 0000000000..b300e30d34 --- /dev/null +++ b/apps/web/src/locales/pt-pt/azuredevops.json @@ -0,0 +1,253 @@ +{ + "actionHintAria": "Dica da ação de {{kind}} {{index}}", + "actionLabelAria": "Etiqueta da ação de {{kind}} {{index}}", + "addPrAction": "Adicionar ação de PR", + "addPrQuery": "Adicionar consulta de PR", + "addPrWatch": "Adicionar vigilância de PR", + "addWorkItemAction": "Adicionar ação de item de trabalho", + "addWorkItemQuery": "Adicionar consulta de itens de trabalho", + "addWorkItemWatch": "Adicionar vigilância de itens de trabalho", + "advanced": "Avançado", + "agentProfileId": "ID do perfil de agente", + "assignment": "Atribuição", + "assignToMe": "Atribuir a mim", + "azureDevopsFilters": "Filtros do Azure DevOps", + "azureDevopsReviewAndPolicyState": "Estado da revisão e das políticas do Azure DevOps", + "azureDevopsWorkItemDetails": "Detalhes do item de trabalho do Azure DevOps", + "azureProjectId": "ID do projeto do Azure", + "azureRepositoryIdOptional": "ID do repositório do Azure (opcional)", + "baseBranch": "Branch de base", + "board": "Quadro", + "boardColumn": "Coluna do quadro", + "boardColumns": "Colunas do quadro", + "boardsAndRepos": "{{organizationUrl}} · Boards e Repos", + "branchPolicies": "Políticas de branch", + "checkedAt": "verificado {{at}}", + "cleanupAlways": "sempre", + "cleanupAuto": "automática", + "cleanupNever": "nunca", + "cleanupPolicy": "Política de limpeza", + "cleanupPolicyAlways": "Sempre", + "cleanupPolicyAuto": "Automática", + "cleanupPolicyNever": "Nunca", + "closeWatchEditor": "Fechar o editor de vigilâncias", + "closeWorkItemDetails": "Fechar os detalhes do item de trabalho", + "configurationRemoved": "Configuração do Azure DevOps removida", + "configurationSaved": "Configuração do Azure DevOps guardada", + "connected": "Ligado", + "connectedAs": "Ligado como {{name}}", + "connectionFailed": "A ligação falhou", + "couldNotLoadQuickActions": "Não foi possível carregar as ações rápidas existentes: {{error}}", + "couldNotSaveView": "Não foi possível guardar esta vista. Tente novamente.", + "createPersonalAccessToken": "Criar um token de acesso pessoal", + "createWatch": "Criar vigilância", + "creator": "Criador", + "creatorId": "ID do criador", + "defaultProject": "Projeto pré-definido", + "defaultQueries": "Consultas pré-definidas", + "defaultQueriesDescription": "Atalhos de consulta mostrados em {{path}} para pull requests e itens de trabalho.", + "defaultQueriesSaved": "Consultas pré-definidas do Azure DevOps guardadas", + "defaultQueryInvalid": "Todas as consultas pré-definidas precisam de uma etiqueta e de filtros válidos.", + "delete": "Eliminar", + "deleteWatchConfirm": "Eliminar esta vigilância?", + "description": "Descrição", + "disable": "Desativar", + "disabled": "Desativada", + "discussion": "Discussão", + "done": "Concluído", + "draft": "Rascunho", + "edit": "Editar", + "editPrompt": "Editar o prompt", + "editWatchTitle": "Editar a vigilância de {{kind}}", + "eGPlatformTriage": "ex.: Triagem da plataforma", + "enable": "Ativar", + "enabled": "Ativada", + "enterValidOrganizationUrl": "Introduza um URL de organização válido para abrir as respetivas definições de token.", + "executorProfileId": "ID do perfil de executor", + "failedToLoadConfig": "Não foi possível carregar a configuração do Azure DevOps: {{error}}", + "failedToLoadQuickActions": "Não foi possível carregar as ações rápidas.", + "failedToSaveDefaultQueries": "Não foi possível guardar as consultas pré-definidas", + "failedToSaveQuickActions": "Não foi possível guardar as ações rápidas", + "fallbackAuthor": "Azure DevOps", + "fallbackUnassigned": "Sem responsável", + "fallbackUnknown": "Desconhecido", + "fallbackWorkItem": "Item de trabalho", + "feedback": "Comentários", + "fieldArea": "Área", + "fieldAssignee": "Responsável", + "fieldState": "Estado", + "fieldType": "Tipo", + "group": "Grupo", + "groupCreated": "Criados", + "groupInbox": "Caixa de entrada", + "hidePrompt": "Ocultar o prompt", + "hint": "Dica", + "hintOptional": "Dica (opcional)", + "howToCreatePat": "Como criar um token de acesso pessoal", + "icon": "Ícone", + "identityIdPlaceholder": "{{token}} ou ID de identidade", + "identityPlaceholder": "{{token}} ou identidade", + "inProgress": "Em curso", + "integrationDescription": "Organização, projeto e PAT do Azure DevOps Services para esta área de trabalho.", + "integrationTitle": "Integração com o Azure DevOps", + "kandevRepositoryId": "ID do repositório do Kandev", + "label": "Etiqueta", + "linkedItemsCount_one": "{{count}} item associado", + "linkedItemsCount_other": "{{count}} itens associados", + "linkedKandevTasks": "Tarefas do Kandev associadas", + "loading": "A carregar...", + "loading2": "A carregar…", + "loadingBoard": "A carregar o quadro…", + "loadingFeedback": "A carregar os comentários...", + "loadingLinkedTasks": "A carregar as tarefas associadas…", + "loadingProjects": "A carregar os projetos...", + "loadingResults": "A carregar os resultados...", + "loadingWatchers": "A carregar as vigilâncias…", + "loadingWorkItem": "A carregar o item de trabalho…", + "loadOlderDiscussion": "Carregar discussão mais antiga", + "maxInflightTasks": "Máximo de tarefas em curso (0 = ilimitado)", + "move": "Mover", + "moveToColumn": "Mover para a coluna", + "name": "Nome", + "newMatches_one": "{{count}} nova correspondência.", + "newMatches_other": "{{count}} novas correspondências.", + "newWatchTitle": "Nova vigilância de {{kind}}", + "nextBoardColumn": "Coluna seguinte do quadro", + "nextPullRequestPage": "Página seguinte de pull requests", + "noComments": "Sem comentários.", + "noDescription": "Sem descrição.", + "noDiscussionYet": "Ainda não há discussão.", + "noLinkedTasks": "Não há tarefas associadas.", + "noMatchingResults": "Não há resultados correspondentes.", + "none": "nenhum", + "noPolicyEvaluations": "Não há avaliações de políticas.", + "noPullRequestWatches": "Ainda não há vigilâncias de pull requests.", + "noReviewers": "Sem revisores.", + "notCheckedYet": "Ainda não verificada", + "notConnectedNotice": "O Azure DevOps não está ligado nesta área de trabalho. <2>Configure o Azure DevOps", + "noWorkItemWatches": "Ainda não há vigilâncias de itens de trabalho.", + "openAzureDevopsFilters": "Abrir os filtros do Azure DevOps", + "openPullRequestInAzureDevops": "Abrir o pull request {{id}} no Azure DevOps", + "openWorkItemInAzureDevops": "Abrir o item de trabalho {{id}} no Azure DevOps", + "openWorkItemInAzureDevops2": "Abrir o item de trabalho no Azure DevOps", + "optional": "Opcional", + "organizationUrl": "URL da organização", + "pastePat": "Colar o PAT", + "patHelpTitle": "Criar um token de acesso pessoal para editar o quadro", + "patStepCheckScopes": "Em <1>{{workItems}}, marque Read & write. Em <4>{{code}}, marque Read. Deixe todos os outros âmbitos por marcar.", + "patStepChooseScopes": "Escolha esta organização, uma validade curta e âmbitos definidos como Custom defined.", + "patStepCreateAndPaste": "Crie o token, copie-o e cole-o neste campo.", + "patStepOpenTokenSettings": "Abra as definições de tokens e selecione New Token.", + "pending": "pendente", + "personalAccessToken": "Token de acesso pessoal", + "placeholderTitleDescription": "Título do item de trabalho ou do pull request do Azure DevOps", + "placeholderUrlDescription": "URL do item de trabalho ou do pull request do Azure DevOps", + "planningAndEffort": "Planeamento e esforço", + "policiesLabelled": "Políticas: {{state}}", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "previousBoardColumn": "Coluna anterior do quadro", + "previousPullRequestPage": "Página anterior de pull requests", + "project": "Projeto", + "prompt": "Prompt", + "promptPlaceholdersHint": "Escreva {{open}} para ver os marcadores disponíveis. <3>{{url}} e <6>{{title}} são substituídos quando a ação é executada.", + "pullRequestAny": "qualquer", + "pullRequestFeedback": "Comentários do pull request", + "pullRequestFilter": "Filtro de pull requests", + "pullRequestFilters": "filtros de pull request", + "pullRequestKindLower": "pull request", + "pullRequestKindNoun": "pull request", + "pullRequestKindTitle": "Pull request", + "pullRequests": "Pull requests", + "pullRequestsTab": "Pull requests", + "pullRequestSubtitle": "{{repository}} · PR {{id}}", + "pullRequestWatches": "Vigilâncias de pull requests", + "pullRequestWatchesDescription": "Crie tarefas automaticamente a partir dos pull requests correspondentes do Azure DevOps.", + "pullRequestWatchFieldsRequired": "O projeto, o repositório, o fluxo de trabalho, o passo, o agente e o executor são obrigatórios.", + "queryCreatorAria": "Criador da consulta de {{kind}} {{index}}", + "queryGroupAria": "Grupo da consulta de {{kind}} {{index}}", + "queryLabelAria": "Etiqueta da consulta de {{kind}} {{index}}", + "queryReviewerAria": "Revisor da consulta de {{kind}} {{index}}", + "queryStatusAria": "Estado da consulta de {{kind}} {{index}}", + "queryTopAria": "Máximo da consulta de {{kind}} {{index}}", + "queryWiqlAria": "WIQL da consulta de {{kind}} {{index}}", + "quickActionInvalid": "Todas as ações rápidas precisam de uma etiqueta e de um prompt.", + "quickActions": "Ações rápidas", + "quickActionsDescription": "Prompts mostrados em {{path}} ao iniciar uma tarefa a partir de um pull request ou de um item de trabalho.", + "quickActionsSaved": "Ações rápidas do Azure DevOps guardadas", + "remove": "Remover", + "removeActionAria": "Remover a ação de {{kind}} {{index}}", + "removeConfigurationConfirm": "Remover a configuração do Azure DevOps?", + "removeFailed": "Não foi possível remover: {{error}}", + "removeQueryAria": "Remover a consulta de {{kind}} {{index}}", + "repository": "Repositório", + "resetWatchConfirm_one": "Repor esta vigilância de {{policy}} e remover {{count}} tarefa?", + "resetWatchConfirm_other": "Repor esta vigilância de {{policy}} e remover {{count}} tarefas?", + "resultLimit": "Limite de resultados", + "resultsCount_one": "{{count}} resultado", + "resultsCount_other": "{{count}} resultados", + "retry": "Tentar novamente", + "reviewer": "Revisor", + "reviewerId": "ID do revisor", + "reviewers": "Revisores", + "reviewLabelled": "Revisão: {{state}}", + "runNow": "Executar agora", + "save": "Guardar", + "saveAzureDevopsView": "Guardar a vista do Azure DevOps", + "savedCredential": "Credencial guardada", + "saveFailed": "Não foi possível guardar: {{error}}", + "saveViewDescription": "Guardar {{kind}} atual nesta área de trabalho.", + "saving": "A guardar...", + "savingEllipsis": "A guardar…", + "selectAProjectToViewIts": "Selecione um projeto para ver o respetivo quadro.", + "selectProject": "Selecionar projeto", + "selectRepository": "Selecionar repositório", + "startTask": "Iniciar tarefa", + "status": "Estado", + "statusAbandoned": "Abandonado", + "statusActive": "Ativo", + "statusAll": "Todos", + "statusAny": "Qualquer estado", + "statusCompleted": "Concluído", + "statusLine": "Estado: {{status}}", + "task": "Tarefa", + "taskActions": "Ações da tarefa", + "taskActionsForPullRequest": "Ações de tarefa para o pull request {{id}}", + "taskActionsForWorkItem": "Ações de tarefa para o item de trabalho {{id}}", + "team": "Equipa", + "testConnection": "Testar a ligação", + "testing": "A testar...", + "top": "Máximo", + "unassign": "Remover a atribuição", + "unassigned": "Sem responsável", + "untitledWorkItem": "Item de trabalho sem título", + "update": "Atualizar", + "updateWatch": "Atualizar vigilância", + "updating": "A atualizar…", + "voteApproved": "Aprovado", + "voteApprovedWithSuggestions": "Aprovado com sugestões", + "voteNone": "Sem voto", + "voteRejected": "Rejeitado", + "voteWaitingForAuthor": "A aguardar o autor", + "watchDeleted": "Vigilância eliminada.", + "watchDisabled": "Vigilância desativada.", + "watchEnabled": "Vigilância ativada.", + "watchReset": "Vigilância reposta.", + "watchStatusAbandoned": "abandonado", + "watchStatusActive": "ativo", + "watchStatusCompleted": "concluído", + "watchSummary_one": "{{projectId}} · a cada {{count}}s · limpeza {{policy}}", + "watchSummary_other": "{{projectId}} · a cada {{count}}s · limpeza {{policy}}", + "workflowId": "ID do fluxo de trabalho", + "workflowStepId": "ID do passo do fluxo de trabalho", + "workItemKindLower": "item de trabalho", + "workItemKindNoun": "item de trabalho", + "workItemKindTitle": "Item de trabalho", + "workItemQuery": "Consulta de itens de trabalho", + "workItemQuery2": "consulta de itens de trabalho", + "workItems": "Itens de trabalho", + "workItemsTab": "Itens de trabalho", + "workItemUnavailable": "Item de trabalho indisponível.", + "workItemWatches": "Vigilâncias de itens de trabalho", + "workItemWatchesDescription": "Crie tarefas automaticamente a partir das consultas de itens de trabalho correspondentes do Azure DevOps.", + "workItemWatchFieldsRequired": "O projeto, o WIQL, o repositório, o fluxo de trabalho, o passo, o agente e o executor são obrigatórios." +} diff --git a/apps/web/src/locales/pt-pt/chat.json b/apps/web/src/locales/pt-pt/chat.json new file mode 100644 index 0000000000..2817117259 --- /dev/null +++ b/apps/web/src/locales/pt-pt/chat.json @@ -0,0 +1,123 @@ +{ + "aboutRepositoryContext": "Sobre o contexto do repositório", + "addedToChatContext": "{{name}} adicionado ao contexto do chat", + "addRepository": "Adicionar repositório", + "addToChatContext": "Adicionar ao contexto do chat", + "agentOptional": "Agente (opcional)", + "agentProfile": "Perfil de agente", + "agentProfileHelp": "Escolha o agente para esta conversa.", + "allConversationHistory": "Todo o histórico da conversa", + "allWorkspaceRepositoriesAdded": "Todos os repositórios da área de trabalho já foram adicionados", + "attachmentDeliveryFile": "Ficheiro", + "attachmentDeliveryMode": "Modo de entrega dos anexos", + "attachmentDeliveryPathDescription": "Carrega para a área de trabalho para que o agente possa ler ou editar o ficheiro.", + "attachmentDeliveryPrompt": "Prompt", + "attachmentDeliveryPromptDescription": "Envia como contexto do prompt para compreensão visual. O agente não recebe um caminho de ficheiro.", + "attachmentFallbackName": "Anexo", + "attachmentMessageAlt": "Anexo {{index}}", + "attachmentPreviewAlt": "Pré-visualização", + "attachmentPreviewFullAlt": "Pré-visualização em tamanho real", + "attachmentUploadFailed": "Não foi possível carregar o anexo", + "attachmentUploadPending": "A carregar o anexo…", + "attachmentUploadPendingSubmit": "Termine o carregamento dos anexos antes de enviar.", + "chatTabName": "Chat {{index}}", + "clarificationNeeded": "É necessário esclarecimento", + "clearAll": "Limpar tudo", + "clearAllQueuedMessages": "Limpar todas as mensagens em fila", + "close": "Fechar {{name}}", + "closeQuickChat": "Fechar o chat rápido", + "collapseClarification": "Recolher o esclarecimento", + "collapseMessage": "Recolher a mensagem", + "collapseQueuedMessages": "Recolher as mensagens em fila", + "configChatPlaceholder": "Pergunte o que quiser sobre a sua configuração...", + "configurationChat": "Chat de configuração", + "configurationChatDescription": "Deixe o agente atualizar as definições, fluxos de trabalho, perfis de agente e configuração MCP do Kandev.", + "configurationChatTab": "Chat de configuração", + "delete": "Eliminar", + "deleteQuickChat": "Eliminar o chat rápido?", + "deleteQuickChatIntro": "Isto elimina permanentemente esta sessão de chat rápido, incluindo:", + "doubleClickToRename": "Faça duplo clique para mudar o nome", + "editQueuedMessage": "Editar a mensagem em fila", + "expandClarification": "Expandir o esclarecimento", + "expandMessage": "Expandir a mensagem", + "failedToClearQueuedMessages": "Não foi possível limpar as mensagens em fila.", + "failedToDeleteQuickChat": "Não foi possível eliminar o chat rápido", + "failedToMergeQueuedMessages": "Não foi possível unir as mensagens em fila.", + "failedToRemoveQueuedMessage": "Não foi possível remover a mensagem em fila.", + "failedToRunQueuedMessage": "Não foi possível executar a mensagem em fila.", + "failedToStartQuickChat": "Não foi possível iniciar o chat rápido", + "fileTreeActions": "Ações de ficheiro", + "loadingRepositories": "A carregar os repositórios", + "failedToSendQueuedMessageNow": "Não foi possível enviar agora a mensagem em fila.", + "mergeReferenceOverflow": "Demasiadas referências a entidades para unir estas mensagens em fila.", + "mergeWithAbove": "Unir com a anterior", + "newChatTab": "Novo chat", + "newQuickChat": "Novo chat rápido", + "noAgentsAvailable": "Nenhum agente disponível", + "noRepositoriesAvailableInWorkspace": "Não há repositórios disponíveis nesta área de trabalho", + "noRepository": "Sem repositório", + "optional": "(opcional)", + "providerQuotaModel": "Modelo: {{model}}", + "providerQuotaProviderFallback": "Fornecedor", + "providerQuotaReset": "A capacidade é reposta {{resetAt}}.", + "providerQuotaResetUnknown": "Tente novamente quando o fornecedor disponibilizar capacidade.", + "providerQuotaTitle": "Limite de utilização do {{provider}} atingido", + "queueCapacity_one": "{{count}} de {{max}}", + "queueCapacity_other": "{{count}} de {{max}}", + "queueCapacityFull_one": "{{count}} de {{max}} · cheia", + "queueCapacityFull_other": "{{count}} de {{max}} · cheia", + "queueChipExpand_one": "{{count}} mensagem em fila, clique para expandir", + "queueChipExpand_other": "{{count}} mensagens em fila, clique para expandir", + "queueCount_one": "{{count}}", + "queueCount_other": "{{count}}", + "queued": "Em fila", + "queuedCount_one": "{{count}} em fila", + "queuedCount_other": "{{count}} em fila", + "queuedMessages": "Mensagens em fila", + "queueEditAlreadySent": "Mensagem já enviada — o agente recebeu-a antes de a sua edição ser aplicada.", + "queueEditSaveFailed": "Não foi possível guardar a edição. Tente novamente.", + "queueFullSuffix": "· cheia", + "quickChatDialogIntro": "Inicie uma conversa rápida com um agente sem criar uma tarefa formal.", + "quickChatIntro": "Converse com um agente sobre uma ideia, uma dúvida ou uma base de código.", + "quickChatIntroSecondary": "Os chats rápidos ficam fora do seu quadro de tarefas.", + "removeQueuedMessage": "Remover a mensagem em fila", + "renameChat": "Mudar o nome do chat", + "renameSavedOnThisDeviceOnly": "Nome guardado apenas neste dispositivo", + "renameSyncFailedDescription": "Não foi possível sincronizar o novo nome com os seus outros dispositivos.", + "repositories": "Repositórios", + "repositoriesHelp": "Adicione contexto de repositório para se focar em código e branches específicos.", + "repositoryContextHelp": "O Kandev usa um worktree isolado a partir do branch selecionado. As alterações locais sem commit não são incluídas.", + "repositoryOptional": "Repositório (opcional)", + "resizeQuickChatFromLeft": "Redimensionar o chat rápido pela esquerda", + "resizeQuickChatFromRight": "Redimensionar o chat rápido pela direita", + "retryAttachmentUpload": "Repetir o carregamento do anexo", + "runNext": "Executar a seguinte", + "runNextQueuedMessage": "Executar a próxima mensagem em fila", + "selectAgent": "Selecionar agente", + "selectARepository": "Selecione um repositório...", + "startChat": "Iniciar chat", + "startChatAction": "Iniciar chat", + "starting": "A iniciar...", + "startingChat": "A iniciar o chat...", + "startNewChat": "Iniciar um novo chat", + "sendNow": "Enviar agora", + "sendNowQueuedMessage": "Enviar agora a mensagem em fila", + "sendNowQueuedMessages": "Enviar agora todas as mensagens em fila", + "sendNowEntryAlreadySent": "Mensagem já enviada — o agente recebeu-a antes de o Enviar agora poder começar.", + "sendNowQueueEmpty": "A fila está vazia.", + "sendNowQueueChanged": "A fila mudou antes de o Enviar agora poder começar.", + "sendNowConflict": "Está em curso outra operação de cancelamento ou de Enviar agora.", + "sendNowTurnChanged": "O turno ativo mudou antes de o Enviar agora poder começar.", + "sendNowAttachmentOverflow": "Os anexos combinados excedem os limites da mensagem.", + "sendNowReferenceOverflow": "As referências a entidades combinadas excedem o limite da mensagem.", + "technicalDetails": "Detalhes técnicos", + "theAssociatedWorktree": "O worktree associado", + "theTaskAndItsData": "A tarefa e os respetivos dados", + "thisActionCannotBeUndone": "Esta ação não pode ser anulada.", + "turnGroupToolCalls_one": "{{count}} chamada de ferramenta", + "turnGroupToolCalls_other": "{{count}} chamadas de ferramentas", + "composerSteerPlaceholder": "Enviar agora — entregue ao turno em curso", + "unknownError": "Erro desconhecido", + "useWorkspaceDefault": "Usar a pré-definição da área de trabalho...", + "useWorkspaceDefaultOption": "Usar a pré-definição da área de trabalho" +} diff --git a/apps/web/src/locales/pt-pt/common.json b/apps/web/src/locales/pt-pt/common.json new file mode 100644 index 0000000000..cec13d4103 --- /dev/null +++ b/apps/web/src/locales/pt-pt/common.json @@ -0,0 +1,132 @@ +{ + "aboutContextCompactionCount": "Sobre a contagem inferida de compactações", + "activeSubagents_one": "{{count}} subagente em execução", + "activeSubagents_other": "{{count}} subagentes em execução", + "agentDashboard": "painel do agente", + "agentRun": "execução do agente", + "agentRuns": "execuções do agente", + "agents": "Agentes", + "allowIndexing": "Permitir indexação", + "autoApproveAllPermissions": "Aprovar automaticamente todas as permissões", + "automations": "Automatizações", + "backToTaskOverview": "Voltar à visão geral da tarefa", + "breadcrumb": "trilho de navegação", + "cancel": "Cancelar", + "changelog": "Registo de alterações", + "cliClient": "Cliente CLI", + "cliPassthrough": "Passagem direta para a CLI", + "commandAgentsSettingsKeywords": "agentes, definições de agentes, perfis de agente, agentes instalados, claude", + "commandConfigChatKeywords": "chat de configuração, modo de configuração, configurar kandev, configuração de fluxo de trabalho, configuração mcp", + "commandExecutorsSettingsKeywords": "executores, perfis de executor, ambiente de execução, variáveis de ambiente, runtime, computação", + "commandGoToAllTasks": "Ir para Todas as tarefas", + "commandGoToAllTasksKeywords": "tarefas, lista, todas", + "commandGoToGitHubDashboard": "Ir para o painel do GitHub", + "commandGoToGitHubDashboardKeywords": "github, painel, pr, pull request, revisão de código, issues, revisão", + "commandGoToHome": "Ir para o Início", + "commandGoToHomeKeywords": "início, kanban, quadro", + "commandGoToSettings": "Ir para as Definições", + "commandGoToSettingsKeywords": "definições, preferências, configuração, definições gerais", + "commandGoToStats": "Ir para as Estatísticas", + "commandGoToStatsKeywords": "estatísticas, análises, métricas", + "commandGroupActions": "Ações", + "commandGroupCommands": "Comandos", + "commandGroupNavigation": "Navegação", + "commandGroupPreferences": "Preferências", + "commandGroupSettings": "Definições", + "commandPromptsSettingsKeywords": "prompts, definições de prompts, prompts personalizados, excertos de prompt, modelos de prompt", + "commandQuickChat": "Chat rápido", + "commandQuickChatKeywords": "chat rápido, novo chat rápido, pergunta rápida, perguntar ao agente", + "commandSwitchToDarkMode": "Mudar para o modo escuro", + "commandSwitchToLightMode": "Mudar para o modo claro", + "commandThemeKeywords": "tema, tema de cores, aspeto", + "commandWorkspaceSettingsKeywords": "área de trabalho, áreas de trabalho", + "configurationChat": "Chat de configuração", + "contextCompactionCountHelp": "O Kandev infere esta contagem a partir das quedas observadas na utilização do contexto. Amostras em falta ou reinícios do fornecedor podem torná-la aproximada.", + "contextCompactions": "Compactações", + "createAWorkspaceToConfigureThisIntegration": "Crie uma área de trabalho para configurar esta integração.", + "dAgo": "há {{diffDay}}d", + "default": "pré-definido", + "deleteSession": "Eliminar sessão", + "edit": "Editar", + "editTask": "Editar tarefa", + "gitScopeSkipped": "{{scope}} foi ignorado porque uma operação num repositório filho falhou ({{failedScopes}}).", + "executors": "Executores", + "externalMcp": "MCP externo", + "failedToLoadRoutine": "Não foi possível carregar a rotina", + "failedToLoadSetup": "Não foi possível carregar a configuração", + "forwardStdinStdoutStraightToThe": "Encaminha o stdin/stdout diretamente para o subprocesso da CLI. Desativa o ACP.", + "hAgo": "há {{diffHr}}h", + "hideAdvancedOptions": "Ocultar opções avançadas", + "integrations": "Integrações", + "justNow": "agora mesmo", + "kandevAllowsEveryAgentPermissionRequest": "O Kandev permite todos os pedidos de permissão do agente sem o questionar.", + "kandevCouldNotLoad": "Não foi possível carregar o Kandev.", + "loadingEllipsis": "A carregar...", + "loadingLabel": "A carregar {{label}}...", + "loadingRoute": "A carregar {{routeName}}…", + "loadingRoutine": "A carregar a rotina...", + "loadingTask": "A carregar a tarefa…", + "mAgo": "há {{diffMin}}m", + "mode": "Modo", + "model": "Modelo", + "multiRepoUnavailableLocal": "As tarefas multi-repositório não estão disponíveis no Local até que o seu percurso de arranque inicial consiga projetar repositórios irmãos.", + "multiRepoUnavailableRemoteDocker": "As tarefas multi-repositório não estão disponíveis no Remote Docker até que este suporte a criação de instâncias de tarefa.", + "multiRepoUnsupportedExecutor": "As tarefas multi-repositório não são suportadas por este executor.", + "noCliClientsInstalledYetInstall": "Ainda não há clientes CLI instalados. Instale o Claude / Codex / OpenCode / Amp para ativar este seletor.", + "officeIsNotEnabledForThis": "O Office não está ativado para este runtime.", + "officeRouteNotPortedYet": "Esta rota do Office é tratada pela shell da SPA, mas a sua página de cliente dedicada ainda está a ser migrada: <1>{{pathname}}", + "openFullPage": "Abrir a página completa", + "openingLastTask": "A abrir a última tarefa…", + "panels": "Painéis", + "permitTheCliToUploadCode": "Permite que a CLI carregue código para indexação na nuvem (auggie / semelhantes).", + "pickACliClient": "Escolher um cliente CLI", + "pickACliClientToLoad": "Escolha um cliente CLI para carregar os modelos e modos disponíveis.", + "pluginPanelFailedToLoad": "Não foi possível carregar este painel de plugin.", + "pluginPanelUnavailable": "Este painel já não está disponível.", + "plugins": "Plugins", + "prDetails": "Detalhes do PR", + "presetIconBug": "Bug", + "presetIconCheck": "Visto", + "presetIconCode": "Código", + "presetIconEye": "Olho", + "presetIconMessage": "Mensagem", + "presetIconSearch": "Pesquisa", + "presetIconSparkle": "Brilho", + "presetIconTool": "Ferramenta", + "profileName": "Nome do perfil", + "prompts": "Prompts", + "reload": "Recarregar", + "reloadTheApplicationToTryAgain": "Recarregue a aplicação para tentar novamente.", + "requestFailed": "O pedido falhou", + "rename": "Mudar o nome", + "reviewSubmoduleBoundary": "Submódulo: {{scope}}", + "reset": "Repor", + "resizeTableColumns": "Redimensionar as colunas {{left}} e {{right}} da tabela", + "resetWatchChecking": "A verificar quantas tarefas seriam eliminadas…", + "resetWatchDeleteAllTasks": "Isto irá eliminar todas as tarefas criadas anteriormente pela vigilância, incluindo as arquivadas. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", + "resetWatchDeleteTasks_one": "Isto irá eliminar {{count}} tarefa criada anteriormente pela vigilância, incluindo as arquivadas. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", + "resetWatchDeleteTasks_other": "Isto irá eliminar {{count}} tarefas criadas anteriormente pela vigilância, incluindo as arquivadas. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", + "resetWatchNoTasks": "Esta vigilância ainda não criou tarefas — apenas o estado de sondagem será limpo. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", + "resetWatchPreviewFailedRequired": "Não foi possível carregar o número de tarefas afetadas. Tente novamente a pré-visualização antes de repor esta vigilância.", + "resetWatchTitle": "Repor {{label}}?", + "resetting": "A repor…", + "retryPreview": "Repetir a pré-visualização", + "save": "Guardar", + "settings": "Definições", + "shell": "Shell", + "showAdvancedOptions": "Mostrar opções avançadas", + "status": "Estado", + "subtaskTitle": "Título da subtarefa", + "system": "Sistema", + "taskLoading": "A carregar a tarefa...", + "taskUnavailable": "Tarefa indisponível", + "taskUnavailableDescription": "Não foi possível carregar esta tarefa. Pode ter sido eliminada ou pode não ter acesso.", + "thisPageCouldNotLoad": "Não foi possível carregar esta página.", + "title": "Título", + "toastRegionLabel": "Notificações", + "unknownPanel": "Painel desconhecido: {{component}}", + "unsavedChanges": "Alterações por guardar", + "workspace": "Área de trabalho", + "workspaces": "Áreas de trabalho", + "youCanUseTheNavigationOr": "Pode usar a navegação ou recarregar para tentar novamente." +} diff --git a/apps/web/src/locales/pt-pt/configChat.json b/apps/web/src/locales/pt-pt/configChat.json new file mode 100644 index 0000000000..e949db8db0 --- /dev/null +++ b/apps/web/src/locales/pt-pt/configChat.json @@ -0,0 +1,21 @@ +{ + "agentProfileHeading": "Perfil de agente de configuração", + "agentProfileHelp": "Escolha o agente com acesso às ferramentas de configuração. Passa a ser a pré-definição da área de trabalho.", + "closePanel": "Fechar o chat de configuração", + "dialogDescription": "Peça a um agente para gerir fluxos de trabalho, perfis de agente e configuração MCP.", + "noAgentProfiles": "Não há perfis de agente disponíveis. Crie um primeiro nas definições de Agentes.", + "openInQuickChat": "Abrir no Chat rápido", + "profileUnavailable": "O perfil de agente selecionado ainda não está disponível. Tente novamente dentro de momentos.", + "promptHeading": "O que pretende configurar?", + "promptPlaceholder": "Pergunte o que quiser sobre a sua configuração...", + "startChat": "Iniciar chat", + "startChatAria": "Iniciar o chat de configuração", + "startingChat": "A iniciar o chat...", + "suggestionAddReviewStep": "Adiciona um passo de \"Revisão de código\" ao meu fluxo de trabalho", + "suggestionCreateProfile": "Cria um novo perfil de agente com aprovação automática ativada", + "suggestionShowWorkflow": "Mostra-me a configuração atual do fluxo de trabalho", + "suggestionUpdateMcp": "Atualiza os servidores MCP do perfil de agente pré-definido", + "tagline": "Configure o Kandev em linguagem natural", + "tryAsking": "Experimente perguntar", + "unknownError": "Erro desconhecido" +} diff --git a/apps/web/src/locales/pt-pt/diff.json b/apps/web/src/locales/pt-pt/diff.json new file mode 100644 index 0000000000..1f8d9770c8 --- /dev/null +++ b/apps/web/src/locales/pt-pt/diff.json @@ -0,0 +1,50 @@ +{ + "add": "Adicionar", + "addAComment": "Adicionar um comentário...", + "addComment": "Adicionar comentário", + "closeWalkthrough": "Fechar o passo a passo", + "collapseUnchangedLines": "Recolher as linhas inalteradas", + "copyDiff": "Copiar o diff", + "deleteComment": "Eliminar comentário", + "dismiss": "Dispensar", + "editComment": "Editar comentário", + "enterToAdd": "{{modKey}}+Enter para adicionar", + "enterToAddShiftEnterToRun": "{{modKey}}+Enter para adicionar, {{modKey}}+Shift+Enter para executar", + "expandAllLines": "Expandir todas as linhas", + "failedToSendWalkthroughNote": "Não foi possível enviar a nota do passo a passo", + "lineLabel": "Linha {{line}}", + "lineRangeLabel": "Linhas {{start}}–{{end}}", + "new": "nova", + "next": "Seguinte", + "noActiveSessionForWalkthroughNote": "Não há sessão ativa para a nota do passo a passo", + "noDiffAvailable": "Nenhum diff disponível", + "old": "antiga", + "openFileAtLine": "Abrir {{file}}:{{line}}", + "previewMarkdown": "Pré-visualizar o markdown", + "previous": "Anterior", + "reopen": "Reabrir", + "resolve": "Resolver", + "revertChanges": "Reverter alterações", + "run": "Executar", + "runComment": "Executar o comentário", + "saveAndSendToAgent": "Guardar e enviar ao agente ({{modKey}}+Shift+Enter)", + "saveCommentForReview": "Guardar o comentário para revisão ({{modKey}}+Enter)", + "sendToAgent": "Enviar ao agente", + "stale": "Desatualizado", + "staleFindingsForThisFile_one": "{{count}} deteção desatualizada neste ficheiro", + "staleFindingsForThisFile_other": "{{count}} deteções desatualizadas neste ficheiro", + "stepProgress": "Passo {{current}} / {{total}} · {{lineLabel}}", + "suggestedChangeNotAppliedAutomatically": "Alteração sugerida — não aplicada automaticamente", + "switchToSplitView": "Mudar para a vista dividida", + "switchToUnifiedView": "Mudar para a vista unificada", + "theDiffChangedAfterThisReview": "O diff mudou depois desta revisão e o código descrito por esta deteção já não consta dele.", + "theDiffChangedAfterThisReviewRelocated": "O diff mudou depois desta revisão; a deteção foi reancorada ao código que descreve.", + "toggleWordWrap": "Alternar a quebra de linha", + "unableToRenderDiffForThis": "Não foi possível apresentar o diff deste ficheiro. O diff em cache pode estar dessincronizado da árvore de trabalho — atualize para tentar novamente.", + "undo": "Anular", + "update": "Atualizar", + "walkthrough": "Passo a passo", + "walkthroughNoteAdded": "Nota do passo a passo adicionada", + "walkthroughNoteQueued": "Nota do passo a passo em fila", + "walkthroughNoteSent": "Nota do passo a passo enviada" +} diff --git a/apps/web/src/locales/pt-pt/editors.json b/apps/web/src/locales/pt-pt/editors.json new file mode 100644 index 0000000000..b7ba7e6748 --- /dev/null +++ b/apps/web/src/locales/pt-pt/editors.json @@ -0,0 +1,80 @@ +{ + "apply": "Aplicar", + "applyLatestAgentChangesToFile": "Aplicar as últimas alterações do agente a este ficheiro", + "boldCmdB": "Negrito (Cmd+B)", + "comment": "Comentar", + "commentAdded": "Comentário adicionado", + "commentCmdShiftC": "Comentar (Cmd+Shift+C)", + "commentCount_one": "{{count}} comentário", + "commentCount_other": "{{count}} comentários", + "commentDeleted": "Comentário eliminado", + "commentMarkerTitle_one": "{{count}} comentário - clique para ver", + "commentMarkerTitle_other": "{{count}} comentários - clique para ver", + "commentSent": "Comentário enviado", + "commentUpdated": "Comentário atualizado", + "commentWillBeSentWithNextMessage": "O seu comentário será enviado com a próxima mensagem.", + "copyAllChangedLines": "Copiar todas as linhas alteradas", + "copyCode": "Copiar o código", + "copyDiff": "Copiar o diff", + "copyLine": "Copiar a linha {{lineNumber}}", + "copyPath": "Copiar o caminho", + "default": "pré-definido", + "deleteFile": "Eliminar ficheiro", + "disableWordWrap": "Desativar a quebra de linha", + "enableWordWrap": "Ativar a quebra de linha", + "failedToSendComment": "Não foi possível enviar o comentário", + "foldUnchangedLines": "Dobrar as linhas inalteradas", + "hideDiffIndicators": "Ocultar os indicadores de diff", + "highlight": "Destacar", + "inlineCode": "Código inline", + "insertBlock": "Inserir bloco", + "italicCmdI": "Itálico (Cmd+I)", + "link": "Ligação", + "loadingDiff": "A carregar o diff...", + "loadingEditor": "A carregar o editor...", + "noDiffAvailable": "Nenhum diff disponível", + "noEditorsConfigured": "Nenhum editor configurado", + "openFolder": "Abrir a pasta", + "openWith": "Abrir com...", + "pasteLink": "Colar a ligação...", + "pleaseTryAgain": "Tente novamente.", + "previewMarkdown": "Pré-visualizar o markdown", + "queuedForTheAgent": "Em fila para o agente.", + "reload": "Recarregar", + "revertAllChanges": "Reverter todas as alterações", + "revertChanges": "Reverter alterações", + "saving": "A guardar...", + "sentToTheAgent": "Enviado ao agente.", + "showAllLines": "Mostrar todas as linhas", + "showDiffIndicators": "Mostrar os indicadores de diff", + "slashBlockquote": "Citação", + "slashBlockquoteDescription": "Texto citado", + "slashBulletList": "Lista com marcas", + "slashBulletListDescription": "Lista não ordenada", + "slashCategoryBlocks": "Blocos", + "slashCategoryLists": "Listas", + "slashCategoryText": "Texto", + "slashCodeBlock": "Bloco de código", + "slashCodeBlockDescription": "Código delimitado", + "slashDivider": "Divisor", + "slashDividerDescription": "Linha horizontal", + "slashHeading1": "Título 1", + "slashHeading1Description": "Título grande", + "slashHeading2": "Título 2", + "slashHeading2Description": "Título médio", + "slashHeading3": "Título 3", + "slashHeading3Description": "Título pequeno", + "slashNumberedList": "Lista numerada", + "slashNumberedListDescription": "Lista ordenada", + "slashTable": "Tabela", + "slashTableDescription": "Tabela 3x3", + "slashTaskList": "Lista de tarefas", + "slashTaskListDescription": "Itens de lista de verificação", + "startTyping": "Comece a escrever...", + "strikethroughCmdShiftX": "Rasurado (Cmd+Shift+X)", + "switchToSplitView": "Mudar para a vista dividida", + "switchToUnifiedView": "Mudar para a vista unificada", + "toggleCode": "Alternar código", + "toggleWordWrap": "Alternar a quebra de linha", + "underlineCmdU": "Sublinhado (Cmd+U)" +} diff --git a/apps/web/src/locales/pt-pt/executors.json b/apps/web/src/locales/pt-pt/executors.json new file mode 100644 index 0000000000..1848f1c89e --- /dev/null +++ b/apps/web/src/locales/pt-pt/executors.json @@ -0,0 +1,262 @@ +{ + "action": "Ação", + "add": "Adicionar", + "addASpritesApiKeyBeforeCreating": "Adicione uma chave de API do Sprites antes de criar o perfil.", + "addDockerfileContentBeforeCreating": "Adicione o conteúdo do Dockerfile antes de criar o perfil.", + "addRule": "Adicionar regra", + "advanced": "Avançado", + "agent": "Agente", + "allow": "Permitir", + "allowlistGithubPlaywright": "Permitir o GitHub + Playwright", + "apiKey": "Chave de API", + "areYouSureThisActionCannot": "Tem a certeza? Esta ação não pode ser anulada.", + "areYouSureYouWantTo": "Tem a certeza de que quer eliminar este perfil? Esta ação não pode ser anulada.", + "authFilesNotFoundOnThisMachine": "{{files}} — ficheiros não encontrados nesta máquina", + "backToExecutor": "Voltar ao executor", + "backToExecutors": "Voltar aos executores", + "buildFailedWithMessage": "A compilação falhou: {{message}}", + "buildFailedWithStatus": "A compilação falhou ({{status}}): {{text}}", + "buildImage": "Construir imagem", + "buildThisDockerImageBeforeCreating": "Construa esta imagem Docker antes de criar o perfil.", + "building": "A construir...", + "checking": "A verificar...", + "chooseAnExecutorTypeToRun": "Escolha um tipo de executor para executar ambientes na sua infraestrutura.", + "cleanupScript": "Script de limpeza", + "configureAuthenticationForToolsAndAgents": "Configure a autenticação de ferramentas e agentes no ambiente remoto.", + "configured": "Configurado", + "confirmDelete": "Confirmar a eliminação", + "connected": "Ligado", + "connectedActiveSprites_one": "Ligado. {{count}} sprite ativo.", + "connectedActiveSprites_other": "Ligado. {{count}} sprites ativos.", + "connection": "Ligação", + "connectionSettings": "Definições de ligação", + "connectionTestFailed": "O teste de ligação falhou", + "connectionTestPassed": "O teste de ligação foi bem-sucedido", + "connectsToARemoteDockerHost": "Liga-se a um anfitrião Docker remoto. O repositório é clonado dentro do contentor.", + "copyAuthFiles": "Copiar os ficheiros de autenticação", + "createANewProfileForThis": "Crie um novo perfil para este executor. Pode configurar scripts e variáveis de ambiente na página do perfil.", + "createExecutor": "Criar executor", + "createNewProfile": "Criar novo perfil", + "createNewSecret": "Criar novo segredo...", + "createProfile": "Criar perfil", + "creating": "A criar...", + "creatingProfile": "A criar o perfil...", + "defaultNoTls": "Pré-definido (sem TLS)", + "defineNetworkAccessRulesAppliedWhen": "Defina as regras de acesso à rede aplicadas quando é criado um sprite para este perfil.", + "defineTheDockerImageBuildAnd": "Defina a imagem Docker. Construa-a e teste-a aqui.", + "delete": "Eliminar", + "deleteExecutor": "Eliminar executor", + "deleteProfile": "Eliminar perfil", + "deleteProfileConfirm": "Tem a certeza de que quer eliminar \"{{name}}\"? Esta ação não pode ser anulada.", + "deleting": "A eliminar...", + "deny": "Negar", + "descriptionCustom": "Executor personalizado.", + "descriptionLocalDocker": "Executa contentores Docker nesta máquina.", + "descriptionLocalPc": "Executa os agentes diretamente na pasta do repositório.", + "descriptionRemoteDocker": "Liga-se a um anfitrião Docker remoto.", + "descriptionSprites": "Executa os agentes em sandboxes na nuvem do Sprites.dev.", + "descriptionSsh": "Executa os agentes num anfitrião Linux amd64 ou macOS fidedigno, através de SSH.", + "descriptionSshCreate": "Liga-se a um anfitrião remoto através de SSH e executa aí o agentctl.", + "descriptionWorktree": "Cria worktrees do Git para sessões de agente isoladas.", + "differentConfigurationsForThisExecutorEach": "Configurações diferentes para este executor. Cada perfil pode ter o seu próprio script de preparação, variáveis de ambiente e definições.", + "disabled": "Desativado", + "disconnected": "Desligado", + "dockerContainers": "Contentores Docker", + "dockerContainersCreatedByThisProfile": "Contentores Docker criados por este perfil.", + "dockerHost": "Anfitrião Docker", + "dockerHostRemotePlaceholder": "{{tcp}} ou {{ssh}}", + "dockerfile": "Dockerfile", + "dockerfileContent": "Conteúdo do Dockerfile", + "domain": "Domínio", + "eGMyApiToken": "ex.: {{example}}", + "eGProductionDevelopment": "ex.: {{example}}", + "enabled": "Ativado", + "enterAProfileName": "Introduza um nome de perfil.", + "enterAnImageTagBeforeCreating": "Introduza uma etiqueta de imagem antes de criar o perfil.", + "envVarsConfiguredCount_one": "{{count}} configurada", + "envVarsConfiguredCount_other": "{{count}} configuradas", + "environmentVariables": "Variáveis de ambiente", + "executorName": "Nome do executor", + "executorNotFound": "Executor não encontrado", + "executorType": "Tipo de executor", + "failed": "Falhou", + "failedToConnectToBackend": "Não foi possível ligar ao backend", + "failedToCreateProfile": "Não foi possível criar o perfil", + "failedToCreateSecret": "Não foi possível criar o segredo", + "failedToLoadExecutor": "Não foi possível carregar o executor", + "missingSecretReference": "Referência de segredo em falta", + "failedToSaveProfile": "Não foi possível guardar o perfil", + "filesSelected": "Ficheiros selecionados", + "gitIdentity": "Identidade do Git", + "gitIdentityAutoDetect": "Detetar automaticamente", + "gitIdentityCustom": "Personalizada", + "gitTokenOptional": "Token do Git (opcional)", + "gitUserEmail": "E-mail do utilizador do Git", + "gitUserName": "Nome do utilizador do Git", + "goToExecutors": "Ir para Executores", + "host": "Anfitrião", + "hubDescription": "Os perfis de executor definem como e onde os agentes são executados. Cada perfil configura um ambiente de execução com scripts, variáveis de ambiente e políticas de MCP.", + "hubDescriptionDocker": "Execute contentores Docker nesta máquina.", + "hubDescriptionLocal": "Execute os agentes diretamente na pasta do repositório.", + "hubDescriptionSprites": "Execute os agentes em sandboxes na nuvem do Sprites.dev.", + "hubDescriptionSsh": "Ligue-se a um anfitrião remoto através de SSH e execute aí o agentctl.", + "hubDescriptionWorktree": "Crie worktrees do Git para sessões de agente isoladas.", + "image": "Imagem", + "imageTag": "Etiqueta da imagem", + "include": "Incluir", + "injectedIntoTheExecutionEnvironmentUse": "Injetadas no ambiente de execução. Use o modo Segredo para tokens e chaves de API; os valores literais são guardados no JSON do perfil.", + "injectedIntoTheExecutionEnvironmentVariables": "Injetadas no ambiente de execução. As variáveis podem referenciar segredos para valores sensíveis.", + "invalidJson": "JSON inválido", + "janeDeveloper": "Jane Developer", + "key": "Chave", + "loading": "A carregar...", + "loadingEditor": "A carregar o editor...", + "loadingExecutor": "A carregar o executor...", + "localDocker": "Docker local", + "localDockerExecutor": "Executor Docker local", + "localGitIdentityNotDetected": "Não foram detetados user.name/user.email do Git locais nesta máquina", + "mcpPolicy": "Política de MCP", + "mcpPolicyJson": "JSON da política de MCP", + "mcpPolicyMustBeAJsonObject": "A política de MCP tem de ser um objeto JSON", + "mcpPolicyOverridesForExecutor": "Substituições de política em JSON para os servidores MCP deste executor.", + "mcpPolicyOverridesForProfile": "Substituições de política em JSON para os servidores MCP deste perfil.", + "mode": "Modo", + "name": "Nome", + "networkPolicies": "Políticas de rede", + "newProfile": "Novo perfil", + "newSshExecutor": "Novo executor SSH", + "newTypeProfile": "Novo perfil {{type}}", + "noDockerContainers": "Não há contentores Docker.", + "noEnvironmentVariablesConfigured": "Não há variáveis de ambiente configuradas.", + "noEnvironmentVariablesConfiguredAddOne": "Não há variáveis de ambiente configuradas. Adicione uma abaixo.", + "noNetworkPolicyRulesConfigured": "Não há regras de política de rede configuradas.", + "noProfilesConfigured": "Não há perfis configurados.", + "noResponseBody": "Sem corpo de resposta", + "noTransferableCredentialsFound": "Não foram encontradas credenciais transferíveis.", + "none": "Nenhum", + "notAnSshExecutor": "O executor {{id}} não é um executor SSH", + "notConfigured": "Não configurado", + "onlyHttpSse": "Apenas HTTP/SSE", + "onlyStdio": "Apenas stdio", + "optionalAuthorIdentityAppliedInRemote": "Identidade de autor opcional aplicada nos ambientes de executores remotos.", + "optionalPattern": "Padrão opcional", + "overrideIdentity": "Substituir a identidade", + "pasteYourSecretValue": "Cole o valor do seu segredo...", + "pathToTlsCertificatesForThe": "Caminho para os certificados TLS do anfitrião Docker.", + "personalAccessTokenForCloningRepositories": "Token de acesso pessoal para clonar repositórios dentro do contentor. É detetado automaticamente a partir do ambiente do anfitrião se não for definido.", + "port": "Porta", + "prepareScript": "Script de preparação", + "prepareScriptBadge": "Script de preparação", + "prepareScriptDescriptionLocal": "É executado na máquina anfitriã antes de o agente arrancar.", + "prepareScriptDescriptionRemote": "É executado dentro do ambiente de execução antes de o agente arrancar. Escreva {{trigger}} para ver os marcadores disponíveis.", + "profileDetails": "Detalhes do perfil", + "profileForExecutor": "Perfil de {{name}}", + "profileNameIsRequired": "O nome do perfil é obrigatório.", + "profileNotFound": "Perfil não encontrado", + "profileSaved": "Perfil guardado", + "profiles": "Perfis", + "provideSecret": "Indicar um segredo", + "quickPresets": "Predefinições rápidas", + "refresh": "Atualizar", + "relatedDockerContainersRemoved_one": "{{count}} contentor Docker relacionado também será removido.", + "relatedDockerContainersRemoved_other": "{{count}} contentores Docker relacionados também serão removidos.", + "remoteAuthMethod": "Método de autenticação remota", + "remoteCredentials": "Credenciais remotas", + "remoteDocker": "Docker remoto", + "remoteDockerExecutor": "Executor Docker remoto", + "remove": "Remover", + "removeEnvVar": "Remover a variável de ambiente", + "removeEnvVarNamed": "Remover {{key}}", + "removeRelatedDockerContainers": "Remover os contentores Docker relacionados", + "removeThisExecutor": "Remover este executor", + "repositoriesWillBeMountedAsVolumes": "Os repositórios serão montados como volumes em tempo de execução.", + "rewriteLocalhostForDocker": "Reescrever o localhost para o Docker", + "runsAfterTheAgentSessionEnds": "É executado depois de a sessão do agente terminar, para tarefas de limpeza.", + "save": "Guardar", + "secret": "Segredo", + "selectASecret": "Selecione um segredo...", + "selectOrCreateASecret": "Selecione ou crie um segredo...", + "selectSecret": "Selecionar segredo...", + "selectTheSecretContainingYourSprites": "Selecione o segredo que contém o seu token de API do Sprites.dev.", + "session": "Sessão", + "setACustomNameAndEmail": "Defina um nome e um e-mail personalizados para os commits remotos do Git.", + "setEnvVarViaStoredSecret": "Definir <1>{{envVar}} através de um segredo guardado", + "spritesApiKeyIsRequired": "A chave de API do Sprites é obrigatória.", + "spritesTokenIsRequired": "O token do Sprites é obrigatório.", + "sshActiveSessions": "Sessões ativas", + "sshActiveSessionsDescription": "Sessões atualmente em execução neste anfitrião SSH. Atualiza a cada 90 segundos.", + "sshAvailableAgents": "Agentes disponíveis neste anfitrião", + "sshAvailableAgentsDescription": "Sonda o {{pathVar}} remoto para cada agente ativado, sob a shell de início de sessão escolhida. Copie a sugestão de instalação e execute-a no anfitrião remoto quando faltar um agente.", + "sshBinary": "Binário", + "sshConfirmRunningSessions_one": "Este executor tem {{count}} sessão em execução. Continuará a correr no anfitrião atual. Só as novas sessões iniciadas depois de guardar usam a configuração atualizada. Continuar?", + "sshConfirmRunningSessions_other": "Este executor tem {{count}} sessões em execução. Continuarão a correr no anfitrião atual. Só as novas sessões iniciadas depois de guardar usam a configuração atualizada. Continuar?", + "sshConnectionDescription": "Execute um agente em anfitriões Linux amd64 ou macOS acessíveis por SSH.", + "sshConnectionTestFailed": "O teste de ligação falhou", + "sshConnectionTestPassed": "O teste de ligação foi bem-sucedido", + "sshCopyInstallHint": "Copiar a sugestão de instalação", + "sshCreateDescription": "Ligue-se a um anfitrião remoto Linux amd64 ou macOS e execute aí o agentctl.", + "sshExecutorPageDescription": "Edite as definições de ligação ou volte a confiar no anfitrião. As sessões existentes mantêm o instantâneo da configuração anterior.", + "sshFailedToLoadSessions": "Não foi possível carregar as sessões", + "sshFailedToProbeAgents": "Não foi possível sondar os agentes", + "sshFailedToReachBackend": "Não foi possível contactar o backend", + "sshFailedToSaveExecutor": "Não foi possível guardar o executor", + "sshFailedToSaveShell": "Não foi possível guardar a shell", + "sshFingerprintChanged": "Aviso: esta impressão digital difere da que está atualmente afixada (<1>{{fingerprint}}). Confiar nela substitui a chave afixada. Se não estava à espera de uma mudança de chave do anfitrião, pare aqui.", + "sshFingerprintObserved": "Impressão digital do anfitrião observada:", + "sshHostAliasHint": "Se for definido, herda HostName / Port / User / IdentityFile / ProxyJump da sua configuração.", + "sshHostAliasLabel": "Alias de anfitrião de {{path}} (opcional)", + "sshIdentityFileHint": "As chaves protegidas por frase-passe têm de ser carregadas primeiro no ssh-agent.", + "sshIdentityFilePath": "Caminho do ficheiro de identidade", + "sshIdentitySource": "Origem da identidade", + "sshIdentitySourceAgent": "{{program}} ({{envVar}})", + "sshIdentitySourceFile": "Ficheiro de identidade (caminho da chave privada)", + "sshInstallHint": "Sugestão de instalação", + "sshInstallHintCopied": "Sugestão de instalação copiada", + "sshInstalled": "Instalado", + "sshLocalForward": "Encam. local", + "sshLoginShell": "Shell de início de sessão", + "sshMissing": "Em falta", + "sshNamePlaceholder": "O meu VPS", + "sshNoActiveSessions": "Não há sessões ativas.", + "sshNoEnabledAgents": "Não há agentes ativados para sondar.", + "sshNoHintAvailable": "Não há sugestão disponível", + "sshPinnedFingerprint": "Impressão digital afixada:", + "sshProbeAgents": "Sondar agentes", + "sshProbeError": "Erro na sondagem", + "sshProbeHint": "Clique em \"{{button}}\" para verificar que agentes estão instalados no anfitrião remoto.", + "sshProxyJumpHint": "Um único salto por bastião. Saltos encadeados não são suportados.", + "sshProxyJumpLabel": "ProxyJump (opcional)", + "sshRemotePort": "Porta remota", + "sshReprobe": "Voltar a sondar", + "sshShellNotDetected": "(não detetada)", + "sshTestAndTrustToSave": "Teste a ligação e confie na sua impressão digital para poder guardar.", + "sshTestConnection": "Testar a ligação", + "sshTestResultStale": "Alterou um campo da ligação depois de este teste ter sido executado. Volte a executar o Testar a ligação antes de confiar e guardar.", + "sshTrustThisHost": "<0>Confiar neste anfitrião. Verifiquei que a impressão digital acima corresponde ao meu servidor. As ligações futuras que apresentem uma impressão digital diferente serão recusadas.", + "sshTrusted": "Fidedigno", + "sshUnverified": "Não verificado", + "status": "Estado", + "stop": "Parar", + "success": "Sucesso", + "task": "Tarefa", + "testConnection": "Testar a ligação", + "theRemoteDockerHostUrlTcp": "O URL do anfitrião Docker remoto ({{schemes}}).", + "thisActionCannotBeUndone": "Esta ação não pode ser anulada.", + "tlsCertificatePath": "Caminho do certificado TLS", + "tlsVerify": "Verificação de TLS", + "tokenConfiguredButUnableToConnect": "O token está configurado, mas não foi possível estabelecer ligação.", + "typeLocal": "Local", + "typeTokenToConfirmDeletion": "Escreva \"{{token}}\" para confirmar a eliminação. Esta ação não pode ser anulada.", + "typeWorktree": "Worktree", + "unknownError": "Erro desconhecido", + "unknownExecutorType": "Tipo de executor desconhecido", + "untrackedTask": "Não controlada", + "uptime": "Tempo ativo", + "useDefaults": "Usar as pré-definições", + "useLocalGitConfig": "Usar a configuração local do Git", + "usedByRemoteExecutorsForCommit": "Usado pelos executores remotos para configurar o autor dos commits.", + "user": "Utilizador", + "usesTheLocalDockerDaemonOn": "Usa o daemon local do Docker nesta máquina.", + "value": "Valor", + "verifyingConnection": "A verificar a ligação..." +} diff --git a/apps/web/src/locales/pt-pt/github.json b/apps/web/src/locales/pt-pt/github.json new file mode 100644 index 0000000000..b9a9f3b4e8 --- /dev/null +++ b/apps/web/src/locales/pt-pt/github.json @@ -0,0 +1,545 @@ +{ + "aRegistrationCanBeReusedAcross": "Um registo pode ser reutilizado em várias áreas de trabalho, ou pode manter separadas as Apps de trabalho e pessoais. Cada área de trabalho seleciona e instala a sua própria credencial.", + "accountsUnavailable": "Contas indisponíveis", + "actionPromptPlaceholderHelp": "Escreva {{token}} para ver os marcadores disponíveis. <4>{{url}} e <7>{{title}} são substituídos quando a ação é executada.", + "actions": "Ações", + "active": "Ativa", + "addAll": "Adicionar tudo", + "addAllCommentsToChatContext": "Adicionar todos os comentários ao contexto do chat", + "addAllFailedChecksToChat": "Adicionar todas as verificações falhadas ao contexto do chat", + "addAllReviewsToChatContext": "Adicionar todas as revisões ao contexto do chat", + "addAllToChatContext": "Adicionar tudo ao contexto do chat", + "addAnExistingGithubApp": "Adicionar uma App do GitHub existente", + "addExistingApp": "Adicionar App existente", + "addFailuresToChatContext": "Adicionar as falhas de {{workflow}} ao contexto do chat", + "addIssueAction": "Adicionar ação de issue", + "addIssueQuery": "Adicionar consulta de issues", + "addPrAction": "Adicionar ação de PR", + "addPrQuery": "Adicionar consulta de PRs", + "addRepository": "Adicionar repositório", + "addToChatContext": "Adicionar ao contexto do chat", + "addWatch": "Adicionar vigilância", + "addWholeThreadToChatContext": "Adicionar todo o tópico ao contexto do chat", + "addedToChatContext": "Adicionado ao contexto do chat", + "agentProfile": "Perfil de agente", + "allRepos": "Todos os repositórios", + "allRepositories": "Todos os repositórios", + "allRepositoriesAllowedByThisWorkspace": "Todos os repositórios permitidos por esta área de trabalho", + "allowsInstallationElsewhereItDoesNot": "Permite a instalação noutros locais. Não publica no Marketplace nem concede acesso a repositórios.", + "anErrorOccurred": "Ocorreu um erro", + "anExecutorProfileGhTokenOr": "Um {{ghToken}} ou {{githubToken}} do perfil de executor tem precedência sobre as credenciais geridas da área de trabalho nessa tarefa.", + "anImportedAppMustHaveAt": "Uma App importada tem de ter, no mínimo, estas permissões de repositório e eventos subscritos.", + "apiRateLimit": "Limite de taxa da API", + "appId": "ID da App", + "appInstallationFailed": "A instalação da App falhou", + "approvalRate": "Taxa de aprovação", + "approveAs": "Aprovar como {{mutationActor}}", + "approved": "Aprovado", + "approving": "A aprovar...", + "authenticationUnavailable": "Autenticação indisponível", + "auto": "Automático", + "autoFix": "Correção automática", + "autoFixCiAndAddressComments": "Corrigir automaticamente o CI e responder aos comentários", + "autoFixPrompt": "Prompt da correção automática", + "autoFixPromptDescription": "Este prompt é usado apenas nesta tarefa. Deixe-o em branco para usar o prompt pré-definido. Adicione <0>{{placeholder}} quando quiser que o Kandev inclua o seu instantâneo do feedback do PR.", + "autoFixRoundExplanation": "A correção automática já usou {{current}} de {{max}} rondas neste PR. Uma ronda é contada quando o Kandev envia ou coloca em fila uma mensagem de correção automática do CI. O Kandev espera que todas as verificações do PR terminem antes de iniciar um novo turno de correção automática do CI, para que o agente receba em conjunto as verificações falhadas finais e os comentários atuais. Atualizar uma mensagem de correção automática já em fila não consome outra ronda. Quando isto estiver em {{max}}/{{max}} e não restar nenhuma mensagem de correção automática pendente para atualizar, o Kandev suspende a correção automática neste PR para que não entre num ciclo infinito. Desative e reative a correção automática após revisão manual para recomeçar.", + "autoMerge": "Merge automático", + "autoMergeWhenReady": "Fazer merge automático quando estiver pronto", + "automaticallyCreateTasksForGithubIssues": "Cria automaticamente tarefas para as issues do GitHub que correspondam aos seus critérios.", + "automaticallyCreateTasksForPrsThat": "Cria automaticamente tarefas para os PRs que precisam da sua revisão.", + "automaticallyCreateTasksWhenNewGithub": "Cria automaticamente tarefas quando novas issues do GitHub correspondem aos seus critérios.", + "automaticallyCreateTasksWhenNewPull": "Cria automaticamente tarefas quando novos pull requests precisam da sua revisão.", + "automation": "Automatização", + "available": "Disponível", + "availablePlaceholders": "Marcadores disponíveis:", + "avgTimeToMerge": "Tempo médio até ao merge", + "backToRegisteredApps": "Voltar às Apps registadas", + "behindBase": "Atrasado em relação à base", + "bestForPersonalOrCompanyInternal": "Ideal para automatização pessoal ou interna da empresa.", + "blocked": "Bloqueado", + "blockedByBranchProtection": "Bloqueado pela proteção do branch", + "blockedGeneric": "As revisões obrigatórias, os code owners ou as regras do repositório ainda têm de ser cumpridos.", + "blockedNeedsApprovals_one": "Precisa de mais {{count}} aprovação para poder fazer merge.", + "blockedNeedsApprovals_other": "Precisa de mais {{count}} aprovações para poder fazer merge.", + "blockedStatusCheck": "Uma verificação de estado obrigatória ainda não passou.", + "botComments": "Comentários de bots (", + "byAuthor": "por <1>", + "byAuthorOpenedAgo": "por {{author}} · aberto {{time}}", + "changeConnection": "Mudar a ligação", + "changeGithubConnection": "Mudar a ligação ao GitHub", + "changesRequested": "Alterações solicitadas", + "checkBucketFailed": "Falhadas", + "checkBucketInProgress": "Em curso", + "checkBucketPassed": "Passadas", + "checkNow": "Verificar agora", + "checkingForNewIssues": "À procura de novas issues...", + "checkingForNewPrs": "À procura de novos PRs...", + "checkingGithubConnection": "A verificar a ligação ao GitHub...", + "checkingGithubStatus": "A verificar o estado do GitHub…", + "checksFailed": "Verificações falhadas", + "checksFailedCount_one": "{{count}} falhada", + "checksFailedCount_other": "{{count}} falhadas", + "checksPassed": "Verificações passadas", + "checksPassedCount_one": "{{count}} passada", + "checksPassedCount_other": "{{count}} passadas", + "checksPendingCount_one": "{{count}} pendente", + "checksPendingCount_other": "{{count}} pendentes", + "checksRunning": "Verificações em execução", + "chooseAGithubApp": "Escolher uma App do GitHub", + "chooseHowNewlyLaunchedTasksAuthenticate": "Escolha como as tarefas recém-lançadas se autenticam no GitHub. Isto não altera a ligação de automatização da área de trabalho acima.", + "chooseMergeMethod": "Escolher o método de merge", + "chooseTheAutomationAndPersonalIdentities": "Escolha as identidades de automatização e pessoal usadas por esta área de trabalho.", + "chooseTheExactAccountKandevDoes": "Escolha a conta exata. O Kandev não acompanha silenciosamente a mudança de conta ativa da CLI.", + "ciChecks": "Verificações de CI{{summary}}", + "ciPassRate": "Taxa de sucesso do CI", + "cleanUpClosed": "Limpar os fechados", + "cleanUpMerged": "Limpar os integrados", + "cleaning": "A limpar…", + "cleanupBehavior": "Comportamento da limpeza", + "cleanupFailed": "A limpeza falhou", + "cleanupPolicyAlways": "Eliminar sempre", + "cleanupPolicyAlwaysDescription": "Eliminar sempre tem precedência sobre a retenção: elimina no merge/fecho mesmo que a tarefa tenha interação do utilizador ou prompts de ciclo de vida do PR ativados.", + "cleanupPolicyAuto": "Automático (recomendado)", + "cleanupPolicyAutoDescription": "Mantém as tarefas de PRs integrados/fechados quando têm interação do utilizador ou prompts de ciclo de vida do PR ativados; caso contrário, elimina-as.", + "cleanupPolicyNever": "Nunca eliminar automaticamente", + "cleanupPolicyNeverDescription": "Mantém todas as tarefas. Elimine-as manualmente na lista de tarefas.", + "cliAccountActiveSuffix": " - ativa", + "clientId": "ID do cliente", + "clientSecret": "Segredo do cliente", + "closePrStatus": "Fechar o estado do PR", + "closedAgo": "fechado {{time}}", + "commentCount_one": "{{count}} comentário", + "commentCount_other": "{{count}} comentários", + "comments": "Comentários", + "configureTheExistingAppOnGithub": "Configurar a App existente no GitHub", + "conflicts": "Conflitos", + "connectGithub": "Ligar o GitHub", + "connectIdentity": "Ligar identidade", + "connectYourPersonalGithubIdentityTo": "Ligue a sua identidade pessoal do GitHub para ver os pull requests e as issues que lhe estão atribuídos.", + "connectionMethod": "Método de ligação", + "continueOnGithub": "Continuar no GitHub", + "controlsHowNewlyLaunchedTasksAuthenticate": "Controla como as tarefas recém-lançadas se autenticam no GitHub para o Git via HTTPS e para os comandos gh. As credenciais geridas da área de trabalho usam a ligação da área de trabalho do Kandev; as credenciais do executor usam a configuração de Git ou SSH do executor selecionado.", + "copy": "Copiar {{label}}", + "couldNotLoadGithubCliAccounts": "Não foi possível carregar as contas da CLI do GitHub. {{error}}", + "create": "Criar", + "createAGithubApp": "Criar uma App do GitHub", + "createIssueWatch": "Criar vigilância de issues", + "createNewApp": "Criar nova App", + "createReviewWatch": "Criar vigilância de revisões", + "created": "Criado", + "createdByKandev": "Criado pelo Kandev", + "credentialUsedForRepositorySyncWatches": "Credencial usada na sincronização de repositórios, nas vigilâncias e nos comandos git e gh dos agentes geridos. Os tokens dos perfis de executor têm precedência.", + "currentGithubApiRateAndQuery": "Limites atuais de taxa e de consultas da API do GitHub para esta ligação da área de trabalho.", + "customQuery": "Consulta personalizada", + "customQueryPressEnterEG": "Consulta personalizada — prima Enter. Ex.: \"is:open review-requested:@me\"", + "defaultQueries": "Consultas pré-definidas", + "defaultQueriesAreStillLoading": "As consultas pré-definidas ainda estão a carregar.", + "defaultQueriesSaved": "Consultas pré-definidas guardadas", + "defaultRepository": "Repositório pré-definido", + "delete": "Eliminar", + "deleteSavedQuery": "Eliminar a consulta guardada", + "deletedTasks_one": "{{count}} tarefa eliminada", + "deletedTasks_other": "{{count}} tarefas eliminadas", + "description": "Descrição", + "disconnect": "Desligar", + "disconnectFailed": "Não foi possível desligar", + "draft": "Rascunho", + "eGBugEnhancementPriorityHigh": "ex.: {{examples}}", + "eGNeedsMyReview": "ex.: Precisa da minha revisão", + "editAutoFixPromptForThis": "Editar o prompt de correção automática desta tarefa", + "editDefaultPrompt": "Editar o prompt pré-definido", + "editDetails": "Editar detalhes", + "editIssueWatch": "Editar a vigilância de issues", + "editPrompt": "Editar o prompt", + "editReviewWatch": "Editar a vigilância de revisões", + "enable": "Ativar", + "enabled": "Ativada", + "enterANameUpTo100Characters": "Introduza um nome com até 100 caracteres.", + "enterAPublicHostNotLocalhost": "Introduza um anfitrião público, não localhost.", + "enterAPublicHttpsOrigin": "Introduza uma origem HTTPS pública.", + "enterAValidGithubAccountLogin": "Introduza um login de conta do GitHub válido.", + "enterAnOriginWithoutAPath": "Introduza uma origem sem caminho, consulta ou fragmento.", + "enterTheAppClientId": "Introduza o ID de cliente da App.", + "enterTheAppClientSecret": "Introduza o segredo de cliente da App.", + "enterTheGithubAppSlug": "Introduza o slug da App do GitHub.", + "enterTheNumericGithubAppId": "Introduza o ID numérico da App do GitHub.", + "enterTheWebhookSecret": "Introduza o segredo do webhook.", + "executorProfile": "Perfil de executor", + "explainAutoFixRounds": "Explicar as rondas de correção automática", + "explainCiAutomationOptions": "Explicar as opções de automatização do CI", + "explainFinalPrStateNotifications": "Explicar as notificações de estado final do PR", + "explainHowManagedTaskCredentialsWork": "Explicar como funcionam as credenciais geridas das tarefas", + "explainRepositoryScope": "Explicar o âmbito dos repositórios", + "explainReviewRequestNotifications": "Explicar as notificações de pedido de revisão", + "explainTaskGitAccess": "Explicar o acesso Git das tarefas", + "explainWorkspaceGithubIdentity": "Explicar a identidade do GitHub da área de trabalho", + "failedToApprove": "Não foi possível aprovar", + "failedToCheckForIssues": "Não foi possível procurar issues", + "failedToCheckForPrs": "Não foi possível procurar PRs", + "failedToDeleteIssueWatch": "Não foi possível eliminar a vigilância de issues", + "failedToDeleteReviewWatch": "Não foi possível eliminar a vigilância de revisões", + "failedToLoadGithubWorkspaceSettings": "Não foi possível carregar as definições do GitHub da área de trabalho", + "failedToMerge": "Não foi possível fazer merge", + "failedToResetIssueWatch": "Não foi possível repor a vigilância de issues", + "failedToResetReviewWatch": "Não foi possível repor a vigilância de revisões", + "failedToSaveDefaultQueries": "Não foi possível guardar as consultas pré-definidas", + "failedToSaveGithubWorkspaceSettings": "Não foi possível guardar as definições do GitHub da área de trabalho", + "failedToSaveQuickActions": "Não foi possível guardar as ações rápidas", + "failedToUnlinkPullRequest": "Não foi possível desassociar o pull request", + "filter": "Filtro", + "filterGithubResultsByRepository": "Filtrar os resultados do GitHub por repositório", + "filterRepositories": "Filtrar repositórios...", + "filters": "Filtros", + "forWebhooksChooseContentType": "Para os webhooks, escolha <1>{{contentType}} como tipo de conteúdo e mantenha a verificação de SSL ativada.", + "foundNewIssues_one": "Encontrada {{count}} nova issue", + "foundNewIssues_other": "Encontradas {{count}} novas issues", + "foundNewPrs_one": "Encontrado {{count}} novo PR", + "foundNewPrs_other": "Encontrados {{count}} novos PRs", + "general": "(geral)", + "generateSetupInstructions": "Gerar as instruções de configuração", + "githubAccessSettingsSaved": "Definições de acesso ao GitHub guardadas", + "githubApiAccessIsExhaustedFor": "O acesso à API do GitHub está esgotado para {{resources}}. As verificações em segundo plano de PRs e issues estão suspensas até o último limite ser reposto {{reset}}.", + "githubApiLimits": "Limites da API do GitHub", + "githubApp": "App do GitHub", + "githubAppAdded": "App do GitHub adicionada", + "githubAppConfigurationInstructions": "Instruções de configuração da App do GitHub", + "githubAppConnected": "App do GitHub ligada", + "githubAppCouldNotBeImported": "Não foi possível importar a App do GitHub", + "githubAppImportedItIsReady": "App do GitHub importada. Está pronta a instalar.", + "githubAppPermissions": "Permissões da App do GitHub", + "githubAppSetupCancelled": "Configuração da App do GitHub cancelada", + "githubAppSetupCouldNotStart": "Não foi possível iniciar a configuração da App do GitHub", + "githubAppSlug": "Slug da App do GitHub", + "githubAuthenticationLost": "Perdeu-se a autenticação no GitHub.", + "githubCli": "CLI do GitHub", + "githubCliAccount": "Conta da CLI do GitHub", + "githubDidNotReturnARedirectUrl": "O GitHub não devolveu um URL de redirecionamento", + "githubDidNotReturnAnInstallationUrl": "O GitHub não devolveu um URL de instalação", + "githubIdentityConnected": "Identidade do GitHub ligada", + "githubIntegration": "Integração com o GitHub", + "githubIsNotConnectedConfigureWorkspace": "O GitHub não está ligado. Configure a automatização da área de trabalho com a CLI gh ou com um token de acesso pessoal.", + "githubIsReadyToCreateThe": "O GitHub está pronto para criar a App", + "githubMustReachThisHttpsOrigin": "O GitHub tem de conseguir alcançar esta origem HTTPS para webhooks assinados e chamadas de retorno.", + "githubOwnerLogin": "Login do proprietário no GitHub", + "githubSearchQuerySupportsFullGithub": "Consulta de pesquisa do GitHub. Suporta toda a sintaxe de pesquisa do GitHub para máxima flexibilidade.", + "githubSearchQueryWhenSetOverrides": "Consulta de pesquisa do GitHub. Quando definida, substitui o filtro de etiquetas acima.", + "githubSetupWasNotCompleted": "A configuração do GitHub não foi concluída", + "githubWillShowTheGeneratedPermissions": "O GitHub mostra as permissões geradas e pede-lhe que confirme. Ao regressar do GitHub, o registo é adicionado; instalá-lo nesta área de trabalho continua a ser um passo explícito.", + "githubWorkspaceSettingsSaved": "Definições do GitHub da área de trabalho guardadas", + "graphqlQueryLimit": "Limite de consultas GraphQL", + "group": "Grupo", + "hidePrompt": "Ocultar o prompt", + "hideToken": "Ocultar o token", + "hint": "Dica", + "hintOptional": "Dica (opcional)", + "howManagedTaskCredentialsWork": "Como funcionam as credenciais geridas das tarefas", + "howOftenToCheckForNew": "Com que frequência procurar novas issues. Mínimo 60s, máximo 3600s.", + "howOftenToCheckForNew2": "Com que frequência procurar novos PRs. Mínimo 60s, máximo 3600s.", + "icon": "Ícone", + "identityConnectionFailed": "A ligação da identidade falhou", + "importSetupCouldNotStart": "Não foi possível iniciar a configuração da importação", + "imported": "Importada", + "inUse": "Em uso", + "inbox": "Caixa de entrada", + "inheritExecutorGitCredentials": "Herdar as credenciais Git do executor", + "initialStepForNewTasks": "Passo inicial das novas tarefas.", + "initialStepForNewTasksAuto": "Passo inicial das novas tarefas. O arranque automático está definido no passo.", + "insertPrFeedback": "Inserir o feedback do PR", + "installAGithubAppAboveTo": "Instale acima uma App do GitHub para mudar a ligação da área de trabalho. O acesso das tarefas pode ser guardado depois de a instalação terminar.", + "installForThisWorkspace": "Instalar nesta área de trabalho", + "interval": "Intervalo", + "issue": "Issue #{{number}}", + "issue2": "Issue #", + "issueCleanupPolicyAlwaysDescription": "Elimina ao fechar, mesmo que tenha interagido com a tarefa.", + "issueCleanupPolicyAutoDescription": "Elimina as tarefas de issues fechadas, exceto se tiver escrito nelas alguma mensagem.", + "issueWatch": "vigilância de issues", + "issueWatchCreated": "Vigilância de issues criada", + "issueWatchDeleted": "Vigilância de issues eliminada", + "issueWatchNotFound": "Vigilância de issues não encontrada", + "issueWatchPromptHelp": "O prompt enviado ao agente por cada nova issue. Escreva {{token}} para inserir marcadores.", + "issueWatchUpdated": "Vigilância de issues atualizada", + "issueWatches": "Vigilâncias de issues", + "issues": "Issues", + "kandevBrokersTheWorkspacePatNamed": "O Kandev intermedeia o PAT da área de trabalho, a conta nomeada da CLI do GitHub ou a identidade da App para esta tarefa, para o GitHub via HTTPS e para o gh.", + "kandevFirstReservesExactCallbackAnd": "O Kandev reserva primeiro os URLs exatos de chamada de retorno e de webhook e depois guia-o pelas definições da App no GitHub. O acesso atual da área de trabalho mantém-se inalterado até instalar a App importada.", + "kandevGeneratesTheExactAppPolicy": "O Kandev gera a política exata da App. O utilizador confirma a criação no GitHub; o Kandev guarda depois este registo para que possa ser selecionado por uma área de trabalho.", + "kandevManagedOperationsActAs": "As operações geridas pelo Kandev atuam como {{actor}}.", + "kandevManagedOperationsUseTheGithub": "As operações geridas pelo Kandev usam a App do GitHub instalada para {{actor}}.", + "kandevStoresThisTokenForThis": "O Kandev guarda este token para esta área de trabalho. O GitHub regista as ações em nome do proprietário do token.", + "kandevUsesThisWorkspaceConnectionFor": "O Kandev usa esta ligação da área de trabalho para a sincronização de repositórios, as vigilâncias, as tarefas em segundo plano e os comandos do GitHub dos agentes geridos. Com um PAT ou uma conta da CLI do GitHub, O meu GitHub e as ações que desencadeia usam a mesma identidade humana.", + "kindIssue": "issue", + "kindPullRequest": "pull request", + "label": "Etiqueta", + "labels": "Etiquetas", + "labelsCommaSeparated": "Etiquetas (separadas por vírgulas)", + "lastPolled": "Última sondagem", + "lastSynced": "Última sincronização", + "legacySharedConnection": "Ligação partilhada antiga", + "limitsGithubPullRequestsAndIssues": "Limita os pull requests e as issues do GitHub mostrados ou importados nesta área de trabalho.", + "loadingAccounts": "A carregar as contas...", + "loadingOrganizations": "A carregar as organizações...", + "loadingRegisteredApps": "A carregar as Apps registadas...", + "loadingTaskAccess": "A carregar o acesso das tarefas…", + "localAndWorktreeTasksUseHost": "As tarefas Local e Worktree usam as credenciais Git ou SSH visíveis no anfitrião. As tarefas Docker, SSH e na nuvem usam as credenciais configuradas nesse executor.", + "managedWorkspaceCredentials": "Credenciais geridas da área de trabalho", + "me": "Eu", + "meMyTeams": "Eu e as minhas equipas", + "mergeConflictsWith": "Conflitos de merge com", + "mergeMethodDefault": "Fazer merge do PR", + "mergeMethodMergeCommit": "Criar um commit de merge", + "mergeMethodMergeCommitShort": "Commit de merge", + "mergeMethodRebase": "Rebase e merge", + "mergeMethodRebaseShort": "Rebase", + "mergeMethodSquash": "Squash e merge", + "mergeMethodSquashShort": "Squash", + "merged": "Integrado", + "mergedAgo": "integrado {{time}}", + "merging": "A fazer merge...", + "missing": "Em falta", + "mode": "Modo", + "myGithubIdentity": "A minha identidade do GitHub", + "myGithubNowUsesYourVerified": "O meu GitHub passa a usar a sua identidade pessoal verificada.", + "name": "Nome", + "nameInKandev": "Nome no Kandev", + "needsAttention": "Precisa de atenção", + "never": "Nunca", + "noAutomationConnection": "Sem ligação de automatização", + "noChecks": "Sem verificações", + "noChecksHaveStarted": "Nenhuma verificação foi iniciada", + "noCommentsYet": "Ainda não há comentários", + "noGhAccountsFound": "Não foram encontradas contas do gh", + "noGithubAppsAreRegisteredYet": "Ainda não há Apps do GitHub registadas. Adicione uma App existente ou crie uma abaixo.", + "noIssueWatchesConfiguredCreateOne": "Não há vigilâncias de issues configuradas. Crie uma para começar a monitorizar as issues do GitHub.", + "noIssuesMatchThisFilter": "Nenhuma issue corresponde a este filtro.", + "noNewIssuesFound": "Não foram encontradas novas issues", + "noNewPrsFound": "Não foram encontrados novos PRs", + "noPullRequestLinkedToThis": "Não há nenhum pull request associado a esta sessão.", + "noPullRequestsMatchThisFilter": "Nenhum pull request corresponde a este filtro.", + "noReposFoundFor": "Não foram encontrados repositórios para \"{{org}}\"", + "noRepositoriesFound": "Nenhum repositório encontrado.", + "noReviewWatchesConfiguredCreateOne": "Não há vigilâncias de revisões configuradas. Crie uma para começar a monitorizar os PRs.", + "noReviewsYet": "Ainda não há revisões", + "noSavedQueriesYet": "Ainda não há consultas guardadas.", + "noStatsAvailableYet": "Ainda não há estatísticas disponíveis.", + "noTaskCreatedYet": "Ainda não foi criada nenhuma tarefa", + "noTasksToCleanUp": "Não há tarefas para limpar", + "noWorkspaceConfiguredCreateAWorkspace": "Não há nenhuma área de trabalho configurada. Crie primeiro uma área de trabalho para iniciar tarefas a partir de PRs/issues.", + "notMergeable": "Não é possível fazer merge", + "omitThePlaceholderIfYouWant": "Omita o marcador se quiser que o agente faça pull ou fetch do branch e inspecione ele próprio o GitHub, em vez de receber o instantâneo do Kandev.", + "onlyMatchIssuesWithTheseLabels": "Corresponder apenas às issues com estas etiquetas. Deixe vazio para todas as issues.", + "onlyPrsWhereYouAreExplicitly": "Apenas os PRs em que é explicitamente pedido como revisor (não por pertencer a uma equipa)", + "onlyTheAppOwner": "Apenas o proprietário da App", + "openDetails": "Abrir os detalhes de {{title}}", + "openGithubAppSettings": "Abrir as definições da App do GitHub", + "openGithubFilters": "Abrir os filtros do GitHub", + "openOnGithub": "Abrir {{workflow}} no GitHub", + "openSettingsToSeePrsAndIssues": "<0>Abra as definições do GitHub para ver os seus pull requests e issues.", + "openedAgo": "aberto {{time}}", + "optionalFallsBackToStepDefault": "Opcional — recorre à pré-definição do passo.", + "optionalFallsBackToStepDefault2": "Opcional — recorre à pré-definição do passo. O ambiente de executor onde o agente vai correr.", + "optionallyConnectYourGithubUserFor": "Opcionalmente, ligue o seu utilizador do GitHub para O meu GitHub e para ações atribuídas a pessoas. Esta identidade nunca é entregue aos agentes geridos; a automatização da área de trabalho continua a atuar como a App.", + "or": "ou", + "organization": "Organização", + "organizations": "Organizações", + "otherGithubAccounts": "Outras contas do GitHub", + "overallLabel": "Global:", + "passRate": "Taxa de sucesso", + "pasteTheAppPrivateKey": "Cole a chave privada da App.", + "pause": "Pausar", + "pauseOrResumePolling": "Pausar ou retomar a sondagem.", + "paused": "Em pausa", + "pending": "{{pending}} pendentes", + "pendingReview": "Revisão pendente", + "pendingReviewCount_one": "({{count}} pendente)", + "pendingReviewCount_other": "({{count}} pendentes)", + "pendingReviewS": "{{pending}} revisão(ões) pendente(s)", + "permissionsAvailableToKandevThroughThis": "Permissões disponíveis para o Kandev através da instalação da App do GitHub nesta área de trabalho.", + "personalAccessToken": "Token de acesso pessoal", + "personalAccount": "Conta pessoal", + "personalGithubIdentityDisconnected": "Identidade pessoal do GitHub desligada", + "personalOauth": "OAuth pessoal", + "placeholderActionTitle": "Título do PR ou da issue", + "placeholderActionUrl": "URL do PR ou da issue", + "placeholderCommaSeparatedLabels": "Etiquetas separadas por vírgulas", + "placeholderIssueAuthor": "Nome de utilizador do autor da issue", + "placeholderIssueBody": "Texto do corpo da issue", + "placeholderIssueNumber": "Número da issue", + "placeholderIssueTitle": "Título da issue", + "placeholderIssueUrl": "URL da issue", + "placeholderPrAuthor": "Nome de utilizador do autor do PR", + "placeholderPrNumber": "Número do PR", + "placeholderPrTitle": "Título do PR", + "placeholderPrUrl": "URL do PR", + "placeholderRepository": "Repositório", + "placeholderSourceBranch": "Branch de origem", + "placeholderTargetBranch": "Branch de destino", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "pr": "PR #", + "prAnalytics": "Análise de PRs", + "prApproved": "PR aprovado", + "prClosedWithoutMerging": "PR fechado sem merge", + "prMerged": "PR integrado", + "prepareAppOnGithub": "Preparar a App no GitHub", + "presetIconBug": "Bug", + "presetIconCheck": "Visto", + "presetIconCode": "Código", + "presetIconEye": "Olho", + "presetIconMessage": "Mensagem", + "presetIconSearch": "Pesquisa", + "presetIconSparkle": "Brilho", + "presetIconTool": "Ferramenta", + "pressEnter": "Prima Enter", + "private": "privado", + "privateKeyPem": "Chave privada ({{extension}})", + "promptsShownOnGithubWhenStarting": "Prompts mostrados em {{route}} ao iniciar uma tarefa a partir de um PR ou de uma issue.", + "prs": "PRs", + "prsByDay": "PRs por dia", + "prsCreated": "PRs criados", + "prsOnDay_one": "{{date}}: {{count}} PR", + "prsOnDay_other": "{{date}}: {{count}} PRs", + "prsReviewed": "PRs revistos", + "prsWhereYouOrAnyOf": "PRs em que o utilizador ou qualquer uma das suas equipas são pedidos como revisores", + "publicKandevUrl": "URL público do Kandev", + "pullRequestActivityForThisWorkspace": "Atividade de pull requests desta área de trabalho.", + "pullRequestCiStatusReviewsAnd": "Estado do CI, revisões e resumo das verificações do pull request.", + "pullRequestCount_one": "{{count}} pull request", + "pullRequestCount_other": "{{count}} pull requests", + "pullRequests": "Pull requests", + "pullRequestsAndIssuesAcrossYour": "Pull requests e issues de todos os seus repositórios.", + "pullRequestsLinkedToTask_one": "{{count}} pull request associado a esta tarefa — abrir", + "pullRequestsLinkedToTask_other": "{{count}} pull requests associados a esta tarefa — abrir um", + "query": "Consulta", + "queryExample": "ex.: {{query}}", + "quickActions": "Ações rápidas", + "quickActionsAreStillLoading": "As ações rápidas ainda estão a carregar.", + "quickActionsSaved": "Ações rápidas guardadas", + "rateLimitRemaining": "Restam {{remaining}} de {{limit}} {{unit}}", + "rateLimitUnitPoints": "pontos", + "rateLimitUnitRequests": "pedidos", + "rateLimitUnknown": "desconhecido", + "reRequestReview": "Voltar a pedir revisão", + "reRequestReviewFrom": "Voltar a pedir revisão a {{author}}", + "reconnectGithub": "Voltar a ligar o GitHub", + "reconnectIdentity": "Voltar a ligar a identidade", + "refresh": "Atualizar", + "refreshGithubConnection": "Atualizar a ligação ao GitHub", + "remove": "Remover", + "removeFromTask": "Remover {{repo}} #{{prnumber}} da tarefa", + "repositories": "Repositórios", + "repository": "Repositório", + "repositoryPermissions": "Permissões de repositório", + "repositoryScope": "Âmbito dos repositórios", + "repositoryScopeHelp": "Limita os pull requests e as issues do GitHub que o Kandev descobre para esta área de trabalho, incluindo os resultados de O meu GitHub e as vigilâncias de revisões e de issues. Não altera as permissões do GitHub nem o acesso aos repositórios.", + "requesting": "A pedir...", + "requiredGithubAppPolicy": "Política obrigatória da App do GitHub", + "resetCompleteDeletedTasks_one": "Reposição concluída — {{count}} tarefa eliminada; a próxima sondagem volta a importar.", + "resetCompleteDeletedTasks_other": "Reposição concluída — {{count}} tarefas eliminadas; a próxima sondagem volta a importar.", + "resetCompleteNextPollWillRe": "Reposição concluída — a próxima sondagem volta a importar as correspondências.", + "resetWatch": "Repor a vigilância", + "resets": "· reposição {{reset}}", + "resolveConflicts": "Resolver os conflitos", + "resolvedFromOneNamedHostAccount": "Resolvido a partir de uma conta nomeada do anfitrião quando necessário. As tarefas geridas recebem uma identidade intermediada e delimitada; o Git do anfitrião não é herdado, exceto se for selecionado abaixo.", + "retry": "Tentar novamente", + "reviewCount_one": "{{count}} revisão", + "reviewCount_other": "{{count}} revisões", + "reviewFollowUp": "Seguimento da revisão", + "reviewPermissions": "Rever as permissões", + "reviewWatch": "vigilância de revisões", + "reviewWatchCreated": "Vigilância de revisões criada", + "reviewWatchDeleted": "Vigilância de revisões eliminada", + "reviewWatchNotFound": "Vigilância de revisões não encontrada", + "reviewWatchPromptHelp": "O prompt enviado ao agente por cada novo PR. Escreva {{token}} para inserir marcadores, ou {{mention}} para referenciar um prompt guardado pelo nome — é expandido da mesma forma que nos prompts dos passos do fluxo de trabalho, uma vez que este prompt passa a ser a descrição da tarefa e segue essa mesma montagem.", + "reviewWatchUpdated": "Vigilância de revisões atualizada", + "reviewWatches": "Vigilâncias de revisões", + "reviews": "Revisões{{summary}}", + "saveChanges": "Guardar alterações", + "saveCurrentQuery": "Guardar a consulta atual", + "savePresetDescription": "Guarde esta consulta de {{kind}} na barra lateral para aceder rapidamente mais tarde.", + "savePrompt": "Guardar o prompt", + "saveQuery": "Guardar consulta", + "saved": "Guardada", + "savedQueryFallback": "Consulta guardada", + "saving": "A guardar...", + "savingChanges": "A guardar as alterações…", + "searchLimit": "Limite de pesquisas", + "searchQuery": "Consulta de pesquisa", + "searching": "A pesquisar...", + "selectWorkflow": "Selecionar fluxo de trabalho", + "selectWorkspace": "Selecionar área de trabalho", + "selectedRepositories": "Repositórios selecionados", + "setTheseExactUrlsCreateAClientSecret": "Defina exatamente estes URLs, crie um segredo de cliente e um segredo de webhook e transfira uma chave privada. Esta configuração única expira {{expiresAt}}.", + "showGithubApiLimits": "Mostrar os limites da API do GitHub", + "showLess": "Mostrar menos", + "showMore": "Mostrar mais", + "showToken": "Mostrar o token", + "sidebarQueriesShownOnGithubFor": "Consultas da barra lateral mostradas em {{route}} para pull requests e issues.", + "signInWithGhAuthLogin": "Inicie sessão com <1>{{command}} e volte a abrir esta janela.", + "someSettingsWereSavedButAnother": "Algumas definições foram guardadas, mas outra alteração falhou: {{detail}}", + "startOver": "Recomeçar", + "stepLabelled": "Passo: {{stepTitle}}", + "storedAppCredentialsMintShortLived": "As credenciais guardadas da App geram tokens de instalação de curta duração. As tarefas geridas recebem uma identidade da App intermediada e delimitada aos repositórios permitidos.", + "storedEncryptedByKandevWorkspaceAutomation": "Guardado encriptado pelo Kandev. A automatização da área de trabalho e o GitHub via HTTPS/gh das tarefas geridas atuam como a sua conta.", + "subscribedEvents": "Eventos subscritos", + "task": "Tarefa", + "taskAccess": "Acesso das tarefas:", + "taskAccessUnavailable": "Acesso das tarefas indisponível", + "taskAutoFixPrompt": "Prompt de correção automática da tarefa", + "taskGitAccess": "Acesso Git das tarefas", + "taskLabelled": "Tarefa: {{title}}", + "taskPrompt": "Prompt da tarefa", + "tasks": "Tarefas", + "tasksCreatedByThisWatcherLand": "As tarefas criadas por esta vigilância vão para a área de trabalho selecionada.", + "theAppIsReadyToSelect": "A App está pronta a ser selecionada e instalada nesta área de trabalho.", + "theExistingWorkspaceConnectionWasNot": "A ligação existente da área de trabalho não foi alterada.", + "theGithubResponseCouldNotBe": "Não foi possível verificar a resposta do GitHub. Reveja a ligação e tente novamente.", + "thePlaceholderInsertsTheCurrentPr": "O marcador insere o identificador atual do PR, as verificações falhadas novas ou alteradas com ligações para os jobs do GitHub, e os comentários de revisão novos ou alterados com ficheiro, linha e texto.", + "thePullRequestIsStillLinked": "O pull request continua associado.", + "theRepositoryWillBeAutomaticallyCloned": "O repositório será clonado automaticamente para {{path}} se ainda não estiver presente na área de trabalho.", + "theSettingsCouldNotBeSaved": "Não foi possível guardar as definições", + "theStoredAppCredentialsAreUnavailable": "As credenciais guardadas da App não estão disponíveis.", + "theWorkflowToCreateTasksIn": "O fluxo de trabalho onde criar as tarefas.", + "theWorkspaceChangedBeforeTaskAccess": "A área de trabalho mudou antes de o acesso das tarefas ser guardado", + "thisAccountAlsoPowersMyGithub": "Esta conta também suporta O meu GitHub e as ações desencadeadas pelo utilizador.", + "thisAppRegistrationIsShared_one": "Este registo de App é partilhado por {{count}} área de trabalho. As alterações ao registo afetam todas as áreas de trabalho que o usam; o acesso da instalação continua específico de cada área de trabalho.", + "thisAppRegistrationIsShared_other": "Este registo de App é partilhado por {{count}} áreas de trabalho. As alterações ao registo afetam todas as áreas de trabalho que o usam; o acesso da instalação continua específico de cada área de trabalho.", + "thisBranchCanTBeMerged": "Não é possível fazer merge automático deste branch. Resolva os conflitos antes de fazer merge.", + "thisRepositoryOpensByDefaultYou": "Este repositório abre por pré-definição. Pode mudar o filtro depois de abrir a consulta.", + "thisWorkspaceUsesOneCredentialFor": "Esta área de trabalho usa uma credencial para a sincronização de repositórios, as vigilâncias, as tarefas em segundo plano e o acesso ao GitHub dos agentes geridos. As credenciais dos perfis de executor podem continuar a ter precedência.", + "titleIssues": "Issues", + "titlePullRequests": "Pull requests", + "toggleReviewFollowUpAutomation": "Alternar a automatização de seguimento da revisão", + "typeACustomQueryFirst": "Escreva primeiro uma consulta personalizada", + "typeOwnerRepoToSearch": "Escreva {{format}} para pesquisar", + "unableToLoadTheCurrentTask": "Não foi possível carregar a definição atual de acesso das tarefas.", + "unexpectedResponseFromTheServer": "Resposta inesperada do servidor", + "unresolvedComments_one": "{{count}} comentário por resolver", + "unresolvedComments_other": "{{count}} comentários por resolver", + "untitledPr": "PR sem título", + "update": "Atualizar", + "updated": "Atualizado ", + "updatedAgo": "atualizado há {{elapsed}}", + "updatedJustNow": "atualizado agora mesmo", + "useAnAppWhenAutomationNeeds": "Use uma App quando a automatização precisar de identidade própria, tokens de curta duração e controlo da instalação ao nível do repositório. A configuração é mais trabalhosa e exige um URL HTTPS acessível publicamente.", + "useCommaSeparatedOwnerRepoValues": "Use valores owner/repo separados por vírgulas.", + "useDefault": "Usar a pré-definição", + "usedByWorkspaces_one": "Usado por {{count}} área de trabalho. Editá-lo ou eliminá-lo afeta-as a todas.", + "usedByWorkspaces_other": "Usado por {{count}} áreas de trabalho. Editá-lo ou eliminá-lo afeta-as a todas.", + "verifyAndImportApp": "Verificar e importar a App", + "viewPermissions": "Ver as permissões", + "viewPullRequestOnGithub": "Ver o pull request no GitHub", + "waitingOnBranchProtection": "A aguardar a proteção do branch", + "watchesThisTaskSLinkedPull": "Vigia o pull request associado a esta tarefa durante o ciclo de atualização do PR de 1 minuto. A correção automática coloca em fila prompts de tarefa para o novo feedback observado, o merge automático espera que o PR esteja pronto e os interruptores de notificação acordam o agente da tarefa quando a conta do GitHub ligada à área de trabalho é pedida para revisão ou quando o PR atinge um estado final. Os pedidos de revisão registam silenciosamente o estado atual dos pedidos da conta como referência, notificando apenas num pedido posterior.", + "webhook": "Webhook", + "webhookSecret": "Segredo do webhook", + "whichAllowedGithubRepositoriesToMonitor": "Que repositórios permitidos do GitHub monitorizar nesta vigilância.", + "whoCanInstallThisApp": "Quem pode instalar esta App?", + "withManagedWorkspaceCredentialsKandevConfigures": "Com as credenciais geridas da área de trabalho, o Kandev configura o agentctl como assistente de credenciais do Git dentro dos processos de tarefa recém-lançados. Quando o Git pede credenciais para um repositório do GitHub via HTTPS associado, o assistente resgata uma concessão do intermediário delimitada à tarefa e ao repositório. A credencial é devolvida ao Git a pedido e não é escrita no repositório nem na configuração do Git. O comando gh usa o shim do Kandev com suporte para o intermediário. A herança do executor ignora ambos e usa as credenciais visíveis no executor selecionado. As alterações aplicam-se aos novos lançamentos de tarefas e ao próximo retomar, não aos processos já em execução.", + "workflow": "Fluxo de trabalho", + "workflowStep": "Passo do fluxo de trabalho", + "workflowStepPromptWrapHelp": "O prompt do passo do fluxo de trabalho envolve este prompt. Por exemplo, se o prompt do passo for <2>{{stepPrompt}}, o prompt final passa a ser <5>{{finalPrompt}}", + "workspaceAutomationNowUsesTheVerified": "A automatização da área de trabalho passa a usar a instalação verificada da App.", + "workspaceGithubAccess": "Acesso ao GitHub da área de trabalho", + "workspaceGithubConnectionRemoved": "Ligação ao GitHub da área de trabalho removida", + "workspaceGithubIdentity": "Identidade do GitHub da área de trabalho", + "yourReviewIsRequested": "A sua revisão foi pedida" +} diff --git a/apps/web/src/locales/pt-pt/gitlab.json b/apps/web/src/locales/pt-pt/gitlab.json new file mode 100644 index 0000000000..8a1996b59e --- /dev/null +++ b/apps/web/src/locales/pt-pt/gitlab.json @@ -0,0 +1,297 @@ +{ + "actionApprove": "Aprovar", + "actionAssignees": "Responsáveis", + "actionFailed": "{{action}} falhou", + "actionHint": "Dica da ação {{index}}", + "actionLabel": "Etiqueta da ação {{index}}", + "actionLabels": "Etiquetas", + "actionMerge": "Fazer merge", + "actionPrompt": "Prompt da ação {{index}}", + "actionReply": "Responder", + "actionResolve": "Resolver", + "actionReviewers": "Revisores", + "actionUnapprove": "Retirar aprovação", + "actionUnlink": "Desassociar", + "actions": "Ações", + "active": "Ativa", + "addAllDiscussionsToTaskContext": "Adicionar todas as discussões ao contexto da tarefa", + "addDiscussionToTaskContext": "Adicionar a discussão ao contexto da tarefa", + "addIssueAction": "Adicionar ação de issue", + "addMrAction": "Adicionar ação de MR", + "agentProfile": "Perfil de agente", + "allProjects": "Todos os projetos", + "alwaysDelete": "Eliminar sempre", + "apply": "Aplicar", + "approvalRemoved": "Aprovação removida", + "approvals": "Aprovações", + "approve": "Aprovar", + "approvedCount_one": "{{count}} aprovação", + "approvedCount_other": "{{count}} aprovações", + "assignees": "Responsáveis", + "assigneesUpdated": "Responsáveis atualizados", + "authenticationMethod": "Método de autenticação", + "auto": "Automático", + "autoKeepEngagedTasks": "Automático; manter as tarefas em curso", + "between60And3600Seconds": "Entre 60 e 3600 segundos.", + "bugBackend": "bug, backend", + "byAuthorOpenedAgo": "por {{author}} · aberto {{time}}", + "checkNow": "Verificar agora", + "checkingGitlabStatus": "A verificar o estado do GitLab…", + "chooseAWorkspacePatTheLocal": "Escolha um PAT da área de trabalho, o início de sessão local da CLI glab ou um token fornecido pelo ambiente. As credenciais da CLI e do ambiente já têm de estar disponíveis para o backend do kandev.", + "chooseWhetherToIncludeOnlyDirect": "Escolha se pretende incluir apenas os pedidos diretos de revisão ou o âmbito compatível mais alargado.", + "cleanupPolicy": "Política de limpeza", + "clearToken": "Limpar o token", + "commits": "Commits", + "conflicts": "Conflitos", + "connectAGitlabAccountSoKandev": "Ligue uma conta do GitLab para que o kandev possa abrir merge requests, ler as discussões de revisão e responder-lhes / resolvê-las em seu nome.", + "connected": "Ligado", + "controlsTaskDeletionWhenTheGitlab": "Controla a eliminação de tarefas quando o item do GitLab é fechado.", + "couldNotReachHost": "Não foi possível contactar <1>{{host}}: {{error}}", + "createIssueWatch": "Criar vigilância de issues do GitLab", + "createReviewWatch": "Criar vigilância de revisões do GitLab", + "createTask": "Criar tarefa", + "createWatch": "Criar vigilância", + "created": "Criada", + "customQueryPressEnterEG": "Consulta personalizada — prima Enter. Ex.: \"labels=bug&state=opened\"", + "deleteSavedQuery": "Eliminar a consulta guardada", + "deleteSavedQuery2": "Eliminar a consulta guardada {{label}}", + "deleteWatch": "Eliminar vigilância", + "deleteWatchTitle": "Eliminar {{label}}?", + "deleting": "A eliminar...", + "description": "Descrição", + "directAndGroupCompatibleRequests": "Pedidos diretos e compatíveis por grupo", + "directRequests": "Pedidos diretos", + "discussionReply": "Resposta na discussão", + "discussionResolved": "Discussão resolvida", + "discussions": "Discussões", + "draft": "Rascunho", + "eGNeedsMyReview": "ex.: Precisa da minha revisão", + "editIssueWatch": "Editar a vigilância de issues do GitLab", + "editReviewWatch": "Editar a vigilância de revisões do GitLab", + "editWatch": "Editar vigilância", + "enableThisWatchBeforeCheckingNow": "Ative esta vigilância antes de verificar agora", + "enableWatch": "Ativar vigilância", + "enterAPersonalAccessTokenToSwitch": "Introduza um token de acesso pessoal para mudar para PAT.", + "enterAValidHttpOrHttpsGitlabHost": "Introduza um URL de anfitrião do GitLab válido em HTTP ou HTTPS.", + "environmentToken": "Token do ambiente", + "everyQuickActionNeedsALabel": "Todas as ações rápidas precisam de uma etiqueta e de um prompt.", + "executorProfile": "Perfil de executor", + "failedToClearToken": "Não foi possível limpar o token", + "failedToLinkMergeRequest": "Não foi possível associar o merge request", + "failedToResetQuickActions": "Não foi possível repor as ações rápidas", + "failedToSaveQuickActions": "Não foi possível guardar as ações rápidas", + "failedToUnlinkMergeRequest": "Não foi possível desassociar o merge request", + "failedToUpdateAuthenticationMethod": "Não foi possível atualizar o método de autenticação", + "files": "Ficheiros", + "filters": "Filtros", + "foundMatchingIssues_one": "Encontrada {{count}} issue correspondente", + "foundMatchingIssues_other": "Encontradas {{count}} issues correspondentes", + "foundMatchingMergeRequests_one": "Encontrado {{count}} merge request correspondente", + "foundMatchingMergeRequests_other": "Encontrados {{count}} merge requests correspondentes", + "gitlabAuthenticationMethodUpdated": "Método de autenticação do GitLab atualizado", + "gitlabCredentialsAreConfiguredButAuthentication": "As credenciais do GitLab estão configuradas, mas a autenticação falhou. Volte a ligar em ", + "gitlabHostUrlOverrideForSelf": "URL do anfitrião do GitLab. Substitua-o em instâncias autogeridas; mantenha a pré-definição para {{host}}.", + "gitlabIsNotConnectedConfigureGitlab": "O GitLab não está ligado. Configure a autenticação do GitLab em ", + "gitlabIssueWatch": "Vigilância de issues do GitLab", + "gitlabMergeRequest": "Merge request !{{mriid}} do GitLab", + "gitlabMergeRequests": "{{length}} merge requests do GitLab", + "gitlabQueryParameters": "Parâmetros de consulta do GitLab", + "gitlabQuickActionsReset": "Ações rápidas do GitLab repostas", + "gitlabQuickActionsSaved": "Ações rápidas do GitLab guardadas", + "gitlabRejectedAction": "O GitLab rejeitou a ação.", + "gitlabRejectedTheAction": "O GitLab rejeitou a ação.", + "gitlabRejectedTheMergeRequestLink": "O GitLab rejeitou a associação do merge request.", + "gitlabRejectedTheRequest": "O GitLab rejeitou o pedido.", + "gitlabReviewWatch": "Vigilância de revisões do GitLab", + "gitlabTokenCleared": "Token do GitLab limpo", + "gitlabWatchCouldNotBeSaved": "Não foi possível guardar a vigilância do GitLab", + "gitlabWillMergeDescription": "O GitLab fará o merge de {{mr}} para {{baseBranch}} usando a pré-definição do projeto.", + "glabCli": "CLI glab", + "hideToken": "Ocultar o token", + "inbox": "Caixa de entrada", + "initialStepForEachNewTask": "Passo inicial de cada nova tarefa.", + "interval": "Intervalo", + "intervalMinutesLabel_one": "intervalo de {{count}}m", + "intervalMinutesLabel_other": "intervalo de {{count}}m", + "intervalMinutes_one": "{{count}}m", + "intervalMinutes_other": "{{count}}m", + "into": "para", + "issueWatchCheckFailed": "A verificação da vigilância de issues falhou", + "issueWatchCreated": "Vigilância de issues criada", + "issueWatchCreationFailed": "Não foi possível criar a vigilância de issues", + "issueWatchDeleted": "Vigilância de issues eliminada", + "issueWatchDeletionFailed": "Não foi possível eliminar a vigilância de issues", + "issueWatchDialogDescription": "Cria automaticamente tarefas na área de trabalho para as novas issues correspondentes do GitLab.", + "issueWatchResetFailed": "Não foi possível repor a vigilância de issues", + "issueWatchReset_one": "Vigilância de issues reposta; {{count}} tarefa eliminada", + "issueWatchReset_other": "Vigilância de issues reposta; {{count}} tarefas eliminadas", + "issueWatchUpdateFailed": "Não foi possível atualizar a vigilância de issues", + "issueWatchUpdated": "Vigilância de issues atualizada", + "issueWatches": "Vigilâncias de issues", + "issues": "Issues", + "kindIssue": "issue", + "kindMergeRequest": "merge request", + "label": "Etiqueta", + "labels": "Etiquetas", + "labelsUpdated": "Etiquetas atualizadas", + "lastChecked": "Última verificação", + "lastCheckedAt": "Última verificação {{value}}", + "leaveEmptyToMatchMergeRequests": "Deixe vazio para corresponder aos merge requests que pedem a sua revisão. Adicionar parâmetros explicitamente substitui essa restrição de revisor.", + "linkAnotherMergeRequest": "Associar outro merge request", + "linkGitlabMergeRequest": "Associar merge request do GitLab", + "linkMergeRequest": "Associar merge request", + "linkedMergeRequest": "Merge request associado", + "linking": "A associar…", + "loadingMergeRequest": "A carregar o merge request", + "loggedInAs": "Sessão iniciada como <1>{{username}}", + "match": "Correspondência", + "maximumInFlightTasks": "Máximo de tarefas em curso", + "merge": "Fazer merge", + "mergeRequest": "Merge request !{{mriid}}", + "mergeRequestApproved": "Merge request aprovado", + "mergeRequestLabels": "Etiquetas do merge request", + "mergeRequestMerged": "Merge request integrado", + "mergeRequestReviewWatches": "Vigilâncias de revisão de merge requests", + "mergeRequestUnlinked": "Merge request desassociado", + "mergeRequestUrl": "URL do merge request", + "mergeRequests": "Merge requests", + "mergeRequestsAndIssues": "{{host}} · merge requests e issues", + "mergeThisMergeRequest": "Fazer merge deste merge request?", + "mergeability": "Possibilidade de merge", + "mockTest": "Mock (teste)", + "mrs": "MRs", + "name": "Nome", + "never": "Nunca", + "neverDelete": "Nunca eliminar", + "newWatch": "Nova vigilância", + "noChangedFiles": "Nenhum ficheiro alterado", + "noCommits": "Nenhum commit", + "noDiscussionsYet": "Ainda não há discussões", + "noIssuesMatchThisFilter": "Nenhuma issue corresponde a este filtro.", + "noLimit": "Sem limite", + "noMergeRequestLinked": "Não há nenhum merge request associado a esta sessão.", + "noMergeRequestsMatchThisFilter": "Nenhum merge request corresponde a este filtro.", + "noNewIssuesMatched": "Nenhuma nova issue correspondeu", + "noNewMergeRequestsMatched": "Nenhum novo merge request correspondeu", + "noPipeline": "Sem pipeline", + "noSavedQueriesYet": "Ainda não há consultas guardadas.", + "noTaskCreatedYet": "Ainda não foi criada nenhuma tarefa", + "noWatchesConfigured": "Não há vigilâncias configuradas.", + "noneAssigned": "Nenhum atribuído", + "notConfigured": "Não configurado", + "notConnected": "Não ligado", + "notificationStatusUnavailable": "Estado das notificações indisponível", + "notificationUpdateFailed": "Não foi possível atualizar a notificação", + "openGitlabFilters": "Abrir os filtros do GitLab", + "openInGitlab": "Abrir no GitLab", + "openMergeRequestInGitlab": "Abrir o merge request no GitLab", + "openSettingsToSeeMrsAndIssues": "<0>Definições → GitLab para ver os seus merge requests e issues.", + "optionalCapPollingResumesWhenActive": "Limite opcional; a sondagem é retomada quando as tarefas ativas descerem abaixo dele.", + "optionalCommaSeparatedGitlabLabelsThat": "Etiquetas do GitLab opcionais, separadas por vírgulas, que as issues correspondentes têm de incluir.", + "optionalCommaSeparatedNamespaceProjectPaths": "Caminhos namespace/projeto opcionais, separados por vírgulas. Se estiver vazio, vigia todos os projetos acessíveis.", + "optionalGitlabApiQueryParametersSuch": "Parâmetros de consulta opcionais da API do GitLab, como {{example}}.", + "optionalOtherwiseUsesTheWorkflowStep": "Opcional; caso contrário, usa a pré-definição do passo do fluxo de trabalho.", + "pasteAMergeRequestUrlFrom": "Cole o URL de um merge request do anfitrião do GitLab configurado nesta área de trabalho.", + "pauseWatch": "Pausar a vigilância", + "paused": "Em pausa", + "personalAccessToken": "Token de acesso pessoal", + "pipeline": "Pipeline", + "pollGitlabForMergeRequestsAwaiting": "Sonda o GitLab à procura de merge requests a aguardar revisão e cria uma tarefa por cada nova correspondência.", + "pollGitlabIssuesAndCreateOne": "Sonda as issues do GitLab e cria uma tarefa por cada nova correspondência.", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "pollingAndCleanup": "Sondagem e limpeza", + "pressEnter": "Prima Enter", + "project": "Projeto", + "projectPaths": "Caminhos dos projetos", + "projects": "Projetos", + "promptSentToTheSelectedAgent": "Prompt enviado ao perfil de agente selecionado por cada nova correspondência.", + "promptUsingUrlAndTitle": "Prompt com {{url}} e {{title}}", + "query": "Consulta", + "quickActions": "Ações rápidas", + "reconnectRequired": "É necessário voltar a ligar", + "refresh": "Atualizar", + "refreshFailed": "Não foi possível atualizar: {{error}}", + "refreshFailedShowingCached": "Não foi possível atualizar o GitLab: {{error}}. A mostrar os últimos dados de revisão carregados com êxito.", + "refreshMergeRequest": "Atualizar o merge request", + "remove": "Remover {{label}}", + "removeFromAssignees": "Remover {{username}} dos responsáveis", + "removeFromReviewers": "Remover {{username}} dos revisores", + "reply": "Responder", + "replyAdded": "Resposta adicionada", + "replyToThisDiscussion": "Responder a esta discussão", + "resetQuickActionsToDefaults": "Repor as ações rápidas para as pré-definições", + "resetWatch": "Repor a vigilância", + "resolve": "Resolver", + "resolved": "Resolvida", + "retry": "Tentar novamente", + "review": "Revisão", + "reviewScope": "Âmbito da revisão", + "reviewWatchCheckFailed": "A verificação da vigilância de revisões falhou", + "reviewWatchCreated": "Vigilância de revisões criada", + "reviewWatchCreationFailed": "Não foi possível criar a vigilância de revisões", + "reviewWatchDeleted": "Vigilância de revisões eliminada", + "reviewWatchDeletionFailed": "Não foi possível eliminar a vigilância de revisões", + "reviewWatchDialogDescription": "Cria automaticamente tarefas na área de trabalho para os novos merge requests correspondentes do GitLab.", + "reviewWatchResetFailed": "Não foi possível repor a vigilância de revisões", + "reviewWatchReset_one": "Vigilância de revisões reposta; {{count}} tarefa eliminada", + "reviewWatchReset_other": "Vigilância de revisões reposta; {{count}} tarefas eliminadas", + "reviewWatchUpdateFailed": "Não foi possível atualizar a vigilância de revisões", + "reviewWatchUpdated": "Vigilância de revisões atualizada", + "reviewers": "Revisores", + "reviewersUpdated": "Revisores atualizados", + "saveChangesBeforeCheckingNow": "Guarde as alterações antes de verificar agora", + "saveCurrentQuery": "Guardar a consulta atual", + "saveGitlabQuery": "Guardar a consulta do GitLab", + "savePresetDescription": "Guarde esta consulta de {{kind}} na barra lateral para aceder rapidamente mais tarde.", + "saved": "Guardada", + "savedQueryFallback": "Consulta guardada", + "saving": "A guardar...", + "searchAssignees": "Pesquisar responsáveis", + "searchProjectMembers": "Pesquisar membros do projeto", + "searchReviewers": "Pesquisar revisores", + "selectWorkflow": "Selecionar fluxo de trabalho", + "shortHint": "Dica curta", + "showToken": "Mostrar o token", + "subscribe": "Subscrever", + "subscribeToNotifications": "Subscrever as notificações do GitLab", + "subscribedToGitlabNotifications": "Subscreveu as notificações do GitLab", + "task": "Tarefa", + "taskAutomation": "Automatização de tarefas", + "taskPrompt": "Prompt da tarefa", + "taskPromptsShownOnTheGitlab": "Prompts de tarefa mostrados na página de exploração do GitLab, para merge requests e issues.", + "taskRepository": "Repositório da tarefa", + "theMergeRequestIsStillLinked": "O merge request continua associado.", + "thisMergeRequestBelongsToA": "Este merge request pertence a um anfitrião do GitLab diferente do da ligação ativa da área de trabalho.", + "thisWillDeleteEveryTaskCreated": "Isto elimina todas as tarefas criadas por esta vigilância, incluindo as arquivadas, e remove o seu histórico de sondagem. Esta ação não pode ser anulada.", + "titleIssues": "Issues", + "titleMergeRequests": "Merge requests", + "typeACustomQueryFirst": "Escreva primeiro uma consulta personalizada", + "unapprove": "Retirar aprovação", + "unlink": "Desassociar !", + "unlinkMergeRequest": "Desassociar o merge request", + "unreachable": "Inacessível", + "unsubscribe": "Anular a subscrição", + "unsubscribeFromNotifications": "Anular a subscrição das notificações do GitLab", + "unsubscribedFromGitlabNotifications": "Anulou a subscrição das notificações do GitLab", + "updateWatch": "Atualizar vigilância", + "updated": "Atualizado ", + "verifyingGitlabConnection": "A verificar a ligação ao GitLab", + "watchDeletionFailed": "Não foi possível eliminar a vigilância", + "workflow": "Fluxo de trabalho", + "workflowStep": "Passo do fluxo de trabalho", + "workflowThatReceivesNewTasks": "Fluxo de trabalho que recebe as novas tarefas.", + "yourTokenMayStillBeValid": "O seu token pode continuar válido — isto parece um problema de rede ou do serviço.", + "mrAutomationClosedLabel": "MR fechado sem merge", + "mrAutomationDescription": "Acorda o agente desta tarefa quando a sua revisão é pedida num merge request associado ou quando um deles é integrado ou fechado. As notificações vão para a fila de sessão que estiver ativa nesta tarefa.", + "mrAutomationMergedLabel": "MR integrado", + "mrAutomationRetry": "Tentar novamente", + "mrAutomationReviewRequestedHelp": "Acorda o agente quando a conta do GitLab ligada à área de trabalho é adicionada como revisora. Voltar a ser adicionada depois de removida conta como um novo pedido; continuar atribuída ao longo das atualizações do MR não conta.", + "mrAutomationReviewRequestedHelpAriaLabel": "Explicar as notificações de pedido de revisão", + "mrAutomationReviewRequestedLabel": "A sua revisão foi pedida", + "mrAutomationTerminalHelp": "Acorda o agente quando o trabalho de revisão termina. Escolha um dos resultados ou ambos.", + "mrAutomationTerminalHelpAriaLabel": "Explicar as notificações de estado final do MR", + "mrAutomationToggleAriaLabel": "Alternar a automatização de seguimento da revisão", + "mrAutomationTriggerLabel": "Seguimento da revisão", + "mrAutomationUpdateFailedDescription": "A definição não foi guardada.", + "mrAutomationUpdateFailedTitle": "Não foi possível atualizar a automatização de MR" +} diff --git a/apps/web/src/locales/pt-pt/integrations.json b/apps/web/src/locales/pt-pt/integrations.json new file mode 100644 index 0000000000..f13101d22c --- /dev/null +++ b/apps/web/src/locales/pt-pt/integrations.json @@ -0,0 +1,63 @@ +{ + "addDetailsAboutThisChange": "Adicione detalhes sobre esta alteração...", + "allRepos": "Todos os repositórios", + "anErrorOccurred": "Ocorreu um erro", + "authRequiredHeading": "É necessária autenticação no {{name}}", + "authRequiredInline": "É necessária autenticação no {{name}}.", + "authenticated": "Autenticado", + "authenticationFailed": "A autenticação falhou: {{error}}", + "branchPushedNotCreated": "Branch enviado; {{shortName}} não criado", + "branchWasPushedRetryCreation": "O branch foi enviado; tente novamente criar o {{longName}}.", + "checkedRelative": "· verificado {{relative}}", + "commit": "Commit", + "commitChanges": "Fazer commit das alterações", + "commitChangesScoped": "Fazer commit das alterações — {{scopedRepo}}", + "committingEllipsis": "A fazer commit...", + "configureAUtilityAgentInSettings": "Configure um agente utilitário nas definições para ativar a geração por IA", + "copiedConfigTo": "Configuração do {{label}} copiada para {{targetName}}.", + "copyConfig": "Copiar configuração", + "copyConfigSettingsOnly": "Copie as definições do {{label}} de <4>{{sourceName}} para outra área de trabalho. Isto substitui a configuração atual do {{label}} na área de trabalho de destino. As vigilâncias e as automatizações não são copiadas.", + "copyConfigToAnotherWorkspace": "Copiar a configuração para outra área de trabalho", + "copyConfigWithCredentials": "Copie as definições e as credenciais do {{label}} de <4>{{sourceName}} para outra área de trabalho. Isto substitui a configuração atual do {{label}} na área de trabalho de destino. As vigilâncias e as automatizações não são copiadas.", + "copyConfiguration": "Copiar a configuração do {{label}}", + "copyingConfigTo": "A copiar a configuração do {{label}} para {{targetName}}…", + "createAsDraft": "Criar como rascunho", + "createFailed": "Não foi possível criar o {{shortName}}", + "createLongName": "Criar {{longName}}", + "createScoped": "Criar {{longName}} — {{scopedRepo}}", + "createShortName": "Criar {{shortName}}", + "createdSuccessfully": "{{longName}} criado com êxito", + "creatingEllipsis": "A criar...", + "creatingFrom": "A criar o {{shortName}} a partir de <4>{{displayBranch}}", + "creatingFromInto": "A criar o {{shortName}} a partir de <4>{{displayBranch}} → <6>{{baseBranch}}", + "deleteSavedQuery": "Eliminar a consulta guardada", + "describeYourChanges": "Descreva as suas alterações...", + "description": "Descrição", + "disabled": "Desativado", + "draftCreated": "Rascunho de {{shortName}} criado", + "enabled": "Ativado", + "enterCommitMessage": "Introduza a mensagem de commit...", + "failedToCopyConfig": "Não foi possível copiar a configuração: {{err}}", + "filesChanged_one": "<0>{{count}} ficheiro alterado", + "filesChanged_other": "<0>{{count}} ficheiros alterados", + "generateCommitDescriptionWithAi": "Gerar a descrição do commit com IA", + "generateCommitMessageWithAi": "Gerar a mensagem de commit com IA", + "generateDescriptionWithAi": "Gerar a descrição do {{shortName}} com IA", + "generateTitleWithAi": "Gerar o título do {{shortName}} com IA", + "loading": "A carregar…", + "longNameTitle": "Título do {{longName}}", + "longNameTitlePlaceholder": "Título do {{longName}}...", + "noChangesToCommit": "Não há alterações para commit", + "noSavedQueriesYet": "Ainda não há consultas guardadas", + "reconnectProvider": "Voltar a ligar o {{name}}", + "repository": "Repositório", + "retryShortName": "Repetir o {{shortName}}", + "saveCurrentQuery": "Guardar a consulta atual", + "savedQueries": "Guardadas", + "selectAWorkspace": "Selecione uma área de trabalho…", + "shortNameCreated": "{{shortName}} criado", + "stageAllChangesBeforeCommitting": "Preparar todas as alterações antes de fazer commit", + "targetWorkspace": "Área de trabalho de destino", + "unknownError": "erro desconhecido", + "waitingForTheNextBackendHealth": "A aguardar a próxima verificação de saúde do backend…" +} diff --git a/apps/web/src/locales/pt-pt/jira.json b/apps/web/src/locales/pt-pt/jira.json new file mode 100644 index 0000000000..09a93c1d26 --- /dev/null +++ b/apps/web/src/locales/pt-pt/jira.json @@ -0,0 +1,212 @@ +{ + "aCredentialIsRequired": "É obrigatória uma credencial.", + "actions": "Ações", + "active": "Ativa", + "addPreset": "Adicionar predefinição", + "agentProfile": "Perfil de agente", + "aJiraSiteUrlIsRequired": "É obrigatório o URL do site do Jira.", + "anEmailAddressIsRequired": "É obrigatório um endereço de e-mail.", + "apiToken": "Token de API", + "apiTokenRecommended": "Token de API (recomendado)", + "apply": "Aplicar", + "assignee": "Responsável", + "assigneeAnyone": "Qualquer pessoa", + "assigneeMe": "Eu", + "assigneeUnassigned": "Sem responsável", + "atlassianCloud": "Atlassian Cloud", + "atlassianJqlHelp": "JQL da Atlassian. A vigilância sonda esta consulta e cria uma tarefa por cada novo ticket correspondente.", + "authenticationMethod": "Método de autenticação", + "availablePlaceholders": "Marcadores disponíveis:", + "browserSessionCookie": "Cookie de sessão do navegador", + "builtIn": "Incorporado", + "capOnOpenTasksCreatedBy": "Limite de tarefas em aberto criadas por esta vigilância. Deixe em branco para não ter limite. As novas correspondências são adiadas para a sondagem seguinte quando o limite é atingido.", + "checkFailed": "A verificação falhou: {{error}}", + "checkingJiraStatus": "A verificar o estado do Jira…", + "checkNow": "Verificar agora", + "clear": "Limpar {{lowerCase}}", + "clearFilters": "Limpar filtros", + "connectedAs": "Ligado como {{name}}", + "connectThisWorkspaceToAtlassianCloud": "Ligue esta área de trabalho ao Atlassian Cloud ou a uma instância própria de Jira Server / Data Center. As credenciais são guardadas encriptadas no servidor, para a área de trabalho selecionada.", + "cookieExpired": "O cookie expirou — cole um novo", + "cookieExpiresInDays_one": "O cookie expira dentro de {{count}} dia", + "cookieExpiresInDays_other": "O cookie expira dentro de {{count}} dias", + "cookieExpiresInHours_one": "O cookie expira dentro de {{count}}h", + "cookieExpiresInHours_other": "O cookie expira dentro de {{count}}h", + "cookieInstructions": "Abra as DevTools ({{shortcut}}) no separador da Atlassian →\nseparador Application → Storage → Cookies → {{host}} →\nprocure a linha com o nome \"{{cookieName}}\" (ou \"{{ssoCookieName}}\"\nem tenants com SSO) → copie a célula Value → cole-a abaixo.\nNão inclua o nome do cookie nem qualquer \"=\" — apenas o valor do token.", + "create": "Criar", + "createATokenAt": "Crie um token em <2>{{url}}", + "createFailed": "Não foi possível criar: {{error}}", + "createJiraWatcher": "Criar vigilância do JIRA", + "createPatNoProfileLink": "Crie um Personal Access Token no seu perfil do Jira → Personal Access Tokens. Âmbitos obrigatórios: leitura e escrita.", + "createPatWithProfileLink": "Crie um Personal Access Token no seu perfil do Jira (<1>{{url}}) → Personal Access Tokens. Âmbitos obrigatórios: leitura e escrita.", + "customJqlOverridePillFiltersAre": "Substituição por JQL personalizado — os filtros em pastilha estão em pausa.", + "defaultProjectKeyOptional": "Chave do projeto pré-definido (opcional)", + "delete": "Eliminar", + "deleteFailed": "Não foi possível eliminar: {{error}}", + "deleteThisJiraWatcher": "Eliminar esta vigilância do JIRA?", + "deleteView": "Eliminar vista", + "description": "Descrição", + "details": "Detalhes", + "editJiraWatcher": "Editar a vigilância do JIRA", + "editPrompt": "Editar o prompt", + "email": "E-mail", + "enable": "Ativar", + "enabled": "Ativada", + "enterAPositiveIntegerOrLeave": "Introduza um número inteiro positivo ou deixe em branco.", + "executorProfile": "Perfil de executor", + "expiryUnknown": "Validade desconhecida", + "failedToLoadJiraConfig": "Não foi possível carregar a configuração do Jira: {{error}}", + "failedToSaveTaskPresets": "Não foi possível guardar as predefinições de tarefa", + "fallbackTicket": "Ticket do Jira", + "filterDisabled": "Filtro {{label}} desativado", + "foundNewTickets_one": "Encontrado {{count}} novo ticket — as tarefas aparecem dentro de instantes.", + "foundNewTickets_other": "Encontrados {{count}} novos tickets — as tarefas aparecem dentro de instantes.", + "hidePrompt": "Ocultar o prompt", + "hideSessionTokenHelp": "Ocultar como copiar o token de sessão", + "hint": "Dica", + "hintOptional": "Dica (opcional)", + "howOftenToReRunThe": "Com que frequência o JQL é repetido. Mínimo 60s, máximo 3600s.", + "icon": "Ícone", + "import": "Importar", + "importFromJira": "Importar do Jira", + "importFromJiraTicketUrlOr": "Importar a partir do URL ou da chave de um ticket do Jira", + "importJiraTicket": "Importar ticket do Jira", + "initialStepForNewTasks": "Passo inicial das novas tarefas.", + "instanceType": "Tipo de instância", + "interval": "Intervalo", + "intervalMinutes_one": "{{count}}m", + "intervalMinutes_other": "{{count}}m", + "jiraConfigurationRemoved": "Configuração do Jira removida", + "jiraConfigurationSaved": "Configuração do Jira guardada", + "jiraIntegration": "Integração com o Jira", + "jiraWatcher": "Vigilância do JIRA", + "jiraWatchers": "Vigilâncias do JIRA", + "jiraWatchersDescription": "Sondar uma consulta JQL e criar automaticamente uma tarefa do Kandev para cada novo ticket correspondente.", + "jqlError": "Erro de JQL: {{error}}", + "jqlIsGeneratedFromThePills": "O JQL é gerado a partir das pastilhas acima. Edite para o substituir.", + "label": "Etiqueta", + "lastPolled": "Última sondagem", + "loading": "A carregar...", + "loading2": "A carregar…", + "loadingTicket": "A carregar o ticket…", + "matchedTickets_one": "{{count}} ticket correspondente nesta página.", + "matchedTickets_other": "{{count}} tickets correspondentes nesta página.", + "maxInFlightTasks": "Máximo de tarefas em curso", + "myOpenBugs": "Os meus bugs em aberto", + "never": "Nunca", + "newWatcher": "Nova vigilância", + "noCap": "(sem limite)", + "noDescription": "Sem descrição.", + "noJiraWatchersConfiguredCreateOne": "Não há vigilâncias do JIRA configuradas. Crie uma para criar tarefas automaticamente a partir de consultas JQL.", + "noNewTicketsMatched": "Nenhum novo ticket correspondeu.", + "noProjectsMatch": "Nenhum projeto corresponde.", + "noResults": "Sem resultados", + "noStatusesForProject": "Não há estados disponíveis para o projeto selecionado", + "noStatusesMatch": "Nenhum estado corresponde.", + "notConfiguredNotice": "O Jira não está configurado. <2>Configure o Jira para ver aqui os seus tickets.", + "noTicketsFound": "Nenhum ticket encontrado.", + "noView": "Sem vista", + "openInAtlassian": "Abrir na Atlassian", + "openJiraTicket": "Abrir o ticket do Jira", + "openTicketDetails": "Abrir os detalhes do ticket", + "optionalFallsBackToStepDefault": "Opcional — recorre à pré-definição do passo.", + "pageNumber": "Página {{page}}", + "pasteAJiraTicketUrlOr": "Cole o URL ou a chave de um ticket do Jira (PROJ-123)", + "pasteApiTokenHere": "cole aqui o token de API", + "pasteATokenToTestTheConnection": "Cole um token para testar a ligação", + "pastePersonalAccessTokenHere": "cole aqui o personal access token", + "pasteSessionTokenValue": "cole o valor de {{cookieName}}", + "pause": "Pausar", + "paused": "Em pausa", + "pauseOrResumePolling": "Pausar ou retomar a sondagem.", + "personalAccessToken": "Personal Access Token", + "placeholderAssigneeDisplayName": "Nome do responsável", + "placeholderIssueType": "Tipo de issue", + "placeholderPriority": "Prioridade", + "placeholderProjectKey": "Chave do projeto", + "placeholderReporterDisplayName": "Nome do relator", + "placeholderStatusName": "Nome do estado", + "placeholderTicketDescription": "Descrição do ticket", + "placeholderTicketKey": "Chave do ticket", + "placeholderTicketSummary": "Resumo do ticket", + "placeholderTicketUrl": "URL do ticket", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "presetIconBug": "Bug", + "presetIconCheck": "Visto", + "presetIconCode": "Código", + "presetIconEye": "Olho", + "presetIconMessage": "Mensagem", + "presetIconSearch": "Pesquisa", + "presetIconSparkle": "Brilho", + "presetIconTool": "Ferramenta", + "presetPlaceholderTicketDescription": "Descrição do ticket", + "presetPlaceholderTicketKey": "Chave do ticket do Jira", + "presetPlaceholderTicketSummary": "Resumo do ticket", + "presetPlaceholderTicketUrl": "URL do ticket do Jira", + "presetPromptPlaceholderHelp": "Escreva {{token}} para ver os marcadores disponíveis. <4>{{key}}, <7>{{url}}, <10>{{title}} e <13>{{description}} são substituídos quando a ação é executada.", + "proj123OrPasteTicketUrl": "PROJ-123 ou cole o URL do ticket", + "project": "Projeto", + "promptFieldHelp": "O prompt enviado ao agente por cada novo ticket. Escreva {{token}} para inserir marcadores.", + "refresh": "Atualizar", + "remove": "Remover", + "removeConfiguration": "Remover configuração", + "removeJiraConfiguration": "Remover a configuração do Jira?", + "reporter": "Relator", + "resetCompleteDeletedTasks_one": "Reposição concluída — {{count}} tarefa eliminada; a próxima sondagem volta a importar as correspondências.", + "resetCompleteDeletedTasks_other": "Reposição concluída — {{count}} tarefas eliminadas; a próxima sondagem volta a importar as correspondências.", + "resetCompleteNoTasksDeleted": "Reposição concluída — a próxima sondagem volta a importar as correspondências.", + "resetFailed": "Não foi possível repor: {{error}}", + "resetToPills": "Repor para as pastilhas", + "resetWatch": "Repor a vigilância", + "saveCurrentFiltersAs": "Guardar os filtros atuais como…", + "saveCurrentFiltersAsAView": "Guardar os filtros atuais como uma vista", + "saved": "Guardado", + "savedLeaveBlank": "(guardado — deixe em branco para manter o valor atual)", + "saveFailed": "Não foi possível guardar: {{error}}", + "saveView": "Guardar vista", + "saving": "A guardar…", + "searchProjects": "Pesquisar projetos…", + "searchStatuses": "Pesquisar estados…", + "searchTicketKeyOrText": "Pesquisar a chave ou o texto do ticket…", + "selectProjectToFilterStatus": "Selecione um projeto para filtrar por estado", + "selectWorkflow": "Selecionar fluxo de trabalho", + "selectWorkspace": "Selecionar área de trabalho", + "selfHostedJiraServerOrDataCenter": "Jira em instalação própria (Server ou Data Center).", + "serverDataCenter": "Server / Data Center", + "sessionTokenValue": "Valor do token de sessão", + "showSessionTokenHelp": "Mostrar como copiar o token de sessão", + "sitesHostedAt": "Sites alojados em {{domain}}.", + "siteUrl": "URL do site", + "sortCreated": "Criação", + "sortLabelled": "Ordenar: {{label}}", + "sortPriority": "Prioridade", + "sortUpdated": "Atualização", + "startTask": "Iniciar tarefa", + "taskPresets": "Predefinições de tarefa", + "taskPresetsDescription": "Prompts mostrados em {{route}} ao iniciar uma tarefa a partir de um ticket.", + "taskPresetsSaved": "Predefinições de tarefa guardadas", + "taskPrompt": "Prompt da tarefa", + "tasksAreCreatedInThisWorkflow": "As tarefas são criadas neste fluxo de trabalho.", + "tasksCreatedByThisWatcherLand": "As tarefas criadas por esta vigilância vão para a área de trabalho selecionada.", + "testConnection": "Testar a ligação", + "testFailed": "Falhou: {{error}}", + "testingConnection": "A testar...", + "testingJql": "A testar…", + "testJql": "Testar o JQL", + "ticketOnThisPage_one": "{{count}} ticket nesta página", + "ticketOnThisPage_other": "{{count}} tickets nesta página", + "ticketsAcrossYourAtlassianProjects": "Tickets de todos os seus projetos da Atlassian.", + "toggleRawJqlEditor": "Alternar o editor de JQL em bruto", + "unassigned": "Sem responsável", + "update": "Atualizar", + "updatedAgo": "· atualizado {{time}}", + "updatedTime": "Atualizado {{time}}", + "updateFailed": "Não foi possível atualizar: {{error}}", + "watchDialogDescription": "Sonde uma consulta JQL e crie automaticamente uma tarefa do Kandev para cada novo ticket correspondente. Opcionalmente, associe um repositório para que cada tarefa seja executada sobre essa base de código, ou deixe por definir para executar sem repositório.", + "watcherCreated": "Vigilância criada", + "watcherDeleted": "Vigilância eliminada", + "watcherUpdated": "Vigilância atualizada", + "workflow": "Fluxo de trabalho", + "workflowStep": "Passo do fluxo de trabalho", + "yourJiraSessionExpiredOrNeeds": "A sua sessão do Jira expirou ou precisa de autenticação reforçada. Volte a ligar para ver este ticket." +} diff --git a/apps/web/src/locales/pt-pt/kanban.json b/apps/web/src/locales/pt-pt/kanban.json new file mode 100644 index 0000000000..ffac4e2bbb --- /dev/null +++ b/apps/web/src/locales/pt-pt/kanban.json @@ -0,0 +1,92 @@ +{ + "addRepositoryPullRequestSessionParent": "Adicionar o contexto de repositório, pull request, sessão, tarefa-mãe e revisão às linhas da Lista.", + "addTask": "Adicionar tarefa", + "allRepositories": "Todos os repositórios", + "allWorkflows": "Todos os fluxos de trabalho", + "allWorkflowsTitleCase": "Todos os fluxos de trabalho", + "approvalRequired": "Aprovação necessária", + "archive": "Arquivar", + "archiveCount_one": "Arquivar {{count}}", + "archiveCount_other": "Arquivar {{count}}", + "archiveTask": "Arquivar tarefa", + "autoStart": "Arranque automático", + "boardNavigator": "Navegador do quadro", + "cannotMoveTasksFromDifferentWorkflows": "Não é possível mover tarefas de fluxos de trabalho diferentes", + "changesRequested": "Alterações solicitadas", + "chooseHowTasksAreOrderedIn": "Escolha a ordem das tarefas nesta lista.", + "chooseStep": "{{stepLabel}}. Escolher passo.", + "chooseWorkflowAndStepShownOn": "Escolha o fluxo de trabalho e o passo mostrados no quadro.", + "chooseWorkflowOrStep": "{{name}}, {{stepLabel}}. Escolher fluxo de trabalho ou passo.", + "clearSelection": "Limpar a seleção", + "closePreview": "Fechar a pré-visualização", + "current": "Atual", + "delete": "Eliminar", + "deleteCount_one": "Eliminar {{count}}", + "deleteCount_other": "Eliminar {{count}}", + "deleteTask": "Eliminar tarefa", + "detachFromParent": "Separar da tarefa-mãe", + "dismiss": "Dispensar", + "displayOptions": "Opções de apresentação", + "dropOnAColumnToMove": "Largue numa coluna para mover a tarefa", + "githubIssue": "Issue do GitHub", + "githubPullRequest": "Pull Request do GitHub", + "gitlabMergeRequest": "Merge Request do GitLab", + "goToTask": "Ir para a tarefa", + "group": "Agrupar", + "groupTasksIntoSectionsByState": "Agrupar as tarefas em secções por estado, fluxo de trabalho, repositório ou não agrupar.", + "healthIssues": "Problemas de saúde", + "improveKandev": "Melhorar o Kandev", + "jiraTicket": "Ticket do Jira", + "kanban": "Kanban", + "kandevHome": "Início do Kandev", + "linearIssue": "Issue do Linear", + "link": "Ligar", + "list": "Lista", + "listRows": "Linhas da lista", + "loadingRepositories": "A carregar os repositórios...", + "menu": "Menu", + "moreOptions": "Mais opções", + "moveTo": "Mover para", + "multiSelect": "Seleção múltipla", + "nextCapacity": "próxima capacidade", + "nextStep": "Passo seguinte", + "noRepositories": "Nenhum repositório", + "noSteps": "Nenhum passo", + "noStepsConfigured": "Nenhum passo configurado.", + "noStepsConfiguredChooseAnotherWorkflow": "Nenhum passo configurado. Escolha outro fluxo de trabalho ou adicione passos nas Definições.", + "noTasks": "Nenhuma tarefa", + "openMenu": "Abrir menu", + "openMenuWithStatus": "{{description}} Abrir menu", + "openPreviewOnClick": "Abrir a pré-visualização ao clicar", + "overWipLimit": "Acima do limite de WIP", + "pipeline": "Pipeline", + "previewPanel": "Painel de pré-visualização", + "previousStep": "Passo anterior", + "queuedForStep": "Em fila para {{step}}", + "repository": "Repositório", + "searchPlaceholder": "Pesquisar...", + "searchSection": "Pesquisar", + "searchTasks": "Pesquisar tarefas", + "searchTasksPlaceholder": "Pesquisar tarefas...", + "selectRepository": "Selecionar repositório", + "selectTask": "Selecionar a tarefa {{title}}", + "selectWorkflow": "Selecionar fluxo de trabalho", + "sendToWorkflow": "Enviar para o fluxo de trabalho", + "sentryIssue": "Issue do Sentry", + "sessionCount_one": "{{count}} sessão", + "sessionCount_other": "{{count}} sessões", + "showArchived": "Mostrar arquivadas", + "showTaskDetails": "Mostrar os detalhes da tarefa", + "sort": "Ordenar", + "step": "Passo", + "subtaskOf": "Subtarefa de", + "taskList": "Lista de tarefas", + "tasksOverWipLimit": "Tarefas em {{label}}, acima do limite de WIP", + "theseOptionsAffectThisTaskList": "Estas opções afetam apenas esta lista de tarefas.", + "utilities": "Utilitários", + "view": "Vista", + "whenEnabledClickingATaskOpens": "Quando ativado, clicar numa tarefa abre o painel de pré-visualização. Quando desativado, clicar navega diretamente para a sessão.", + "wipTaskCount": "Tarefas em {{label}}", + "workflow": "Fluxo de trabalho", + "workflowStepFallback": "passo do fluxo de trabalho {{stepId}}" +} diff --git a/apps/web/src/locales/pt-pt/linear.json b/apps/web/src/locales/pt-pt/linear.json new file mode 100644 index 0000000000..559f481747 --- /dev/null +++ b/apps/web/src/locales/pt-pt/linear.json @@ -0,0 +1,174 @@ +{ + "actions": "Ações", + "active": "Ativa", + "agentProfile": "Perfil de agente", + "allTeams": "Todas as equipas", + "anApiKeyIsRequired": "É obrigatória uma chave de API.", + "any": "(qualquer)", + "anyAssignee": "Qualquer responsável", + "anyTeam": "(qualquer equipa)", + "apiKey": "Chave de API", + "assignedToMe": "Atribuídas a mim", + "assignee": "Responsável", + "assigneeHelp": "Filtrar por quem tem a issue atribuída.", + "availablePlaceholders": "Marcadores disponíveis:", + "checkFailed": "A verificação falhou: {{error}}", + "checkNow": "Verificar agora", + "chooseATeam": "Escolher uma equipa", + "configurationRemoved": "Configuração do Linear removida", + "configurationSaved": "Configuração do Linear guardada", + "connectedAs": "Ligado como {{name}}", + "connectedAsWithOrg": "Ligado como {{name}} ({{org}})", + "create": "Criar", + "createFailed": "Não foi possível criar: {{error}}", + "createLinearWatcher": "Criar vigilância do Linear", + "createPersonalApiKeyAt": "Crie uma chave de API pessoal em", + "creator": "Criador", + "creatorHelp": "Corresponder às issues criadas por um utilizador.", + "defaultTeamOptional": "Equipa pré-definida (opcional)", + "delete": "Eliminar", + "deleteFailed": "Não foi possível eliminar: {{error}}", + "deleteThisLinearWatcher": "Eliminar esta vigilância do Linear?", + "description": "Descrição", + "details": "Detalhes", + "dispatchOrder": "Ordem de despacho", + "dispatchOrderHelp": "Quando o limite de tarefas em curso é atingido, as issues são despachadas por esta ordem para que as mais importantes sejam executadas primeiro.", + "editLinearWatcher": "Editar a vigilância do Linear", + "enable": "Ativar", + "enabled": "Ativada", + "enabledHelp": "Pausar ou retomar a sondagem.", + "eng123OrPasteIssueUrl": "ENG-123 ou cole o URL da issue", + "enterAPositiveIntegerOrBlank": "Introduza um número inteiro positivo ou deixe em branco.", + "estimateMax": "Estimativa máxima", + "estimateMaxHelp": "Limite superior em pontos (opcional).", + "estimateMaxPlaceholder": "ex.: 5", + "estimateMin": "Estimativa mínima", + "estimateMinHelp": "Limite inferior em pontos (opcional).", + "estimateMinPlaceholder": "ex.: 1", + "executorProfile": "Perfil de executor", + "failedToLoadConfig": "Não foi possível carregar a configuração do Linear: {{error}}", + "fallbackIssue": "Issue do Linear", + "fallsBackToStepDefault": "Opcional — recorre à pré-definição do passo.", + "filter": "Filtro", + "foundNewIssues_one": "Encontrada {{count}} nova issue — as tarefas aparecem dentro de instantes.", + "foundNewIssues_other": "Encontradas {{count}} novas issues — as tarefas aparecem dentro de instantes.", + "import": "Importar", + "importFromLinear": "Importar do Linear", + "importFromLinearIssueUrlOr": "Importar a partir do URL ou identificador de uma issue do Linear", + "importLinearIssue": "Importar issue do Linear", + "integrationDisabled": "A integração com o Linear está desativada.", + "interval": "Intervalo", + "intervalMinutes_one": "{{count}}m", + "intervalMinutes_other": "{{count}}m", + "labels": "Etiquetas", + "labelsHelp": "Clique para alternar. Corresponde a QUALQUER uma das etiquetas selecionadas.", + "labelsHelpNoTeam": "Escolha uma equipa para selecionar etiquetas específicas.", + "lastPolled": "Última sondagem", + "linearIntegration": "Integração com o Linear", + "linearIntegrationDescription": "Ligue esta área de trabalho ao Linear com uma chave de API pessoal. As credenciais são guardadas encriptadas no servidor, para a área de trabalho selecionada.", + "linearWatcher": "Vigilância do Linear", + "linearWatchers": "Vigilâncias do Linear", + "linearWatchersDescription": "Sondar um filtro do Linear e criar automaticamente uma tarefa do Kandev para cada nova issue correspondente.", + "loading": "A carregar...", + "loadingEllipsis": "A carregar…", + "loadingIssue": "A carregar a issue…", + "loadingIssues": "A carregar as issues…", + "loadingLabels": "A carregar as etiquetas…", + "loadingStates": "A carregar os estados…", + "loadingTeams": "A carregar as equipas…", + "maxInflightTasks": "Máximo de tarefas em curso", + "maxInflightTasksHelp": "Limite de tarefas em aberto criadas por esta vigilância. Deixe em branco para não ter limite. As novas correspondências são adiadas para a sondagem seguinte quando o limite é atingido.", + "me": "Eu", + "never": "Nunca", + "newWatcher": "Nova vigilância", + "noCap": "(sem limite)", + "noDefault": "Sem pré-definição", + "noDescription": "Sem descrição.", + "noIssuesMatchYourFilters": "Nenhuma issue corresponde aos seus filtros.", + "noLabelsAvailableForThisTeam": "Não há etiquetas disponíveis para esta equipa.", + "noLinearWatchersConfiguredCreateOne": "Não há vigilâncias do Linear configuradas. Crie uma para criar tarefas automaticamente a partir de issues filtradas.", + "noNewIssuesMatched": "Nenhuma nova issue correspondeu.", + "noResults": "Sem resultados", + "notConfiguredNotice": "O Linear não está configurado. <2>Configure o Linear para ver aqui as suas issues.", + "noWorkflowStatesAvailable": "Não há estados de fluxo de trabalho disponíveis.", + "openInLinear": "Abrir no Linear", + "openIssueDetails": "Abrir os detalhes da issue", + "openLinearIssue": "Abrir a issue do Linear", + "page": "Página", + "pasteALinearIssueUrlOr": "Cole o URL ou o identificador de uma issue do Linear (ENG-123)", + "pasteAnApiKeyToTest": "Cole uma chave de API para testar a ligação", + "pause": "Pausar", + "paused": "Em pausa", + "pickATeamFirst": "Escolha primeiro uma equipa", + "placeholderAssigneeDisplayName": "Nome do responsável", + "placeholderCreatorDisplayName": "Nome de quem criou a issue", + "placeholderIssueDescription": "Corpo da descrição da issue", + "placeholderIssueIdentifier": "Identificador da issue", + "placeholderIssueTitle": "Título da issue", + "placeholderIssueUrl": "URL da issue do Linear", + "placeholderPriorityLabel": "Etiqueta de prioridade", + "placeholderTeamKey": "Chave da equipa", + "placeholderWorkflowStateName": "Nome do estado do fluxo de trabalho", + "pollIntervalHelp": "Com que frequência a pesquisa é repetida. Mínimo 60s, máximo 3600s.", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "priority": "Prioridade", + "priorityHelp": "Clique para alternar. Corresponde às issues em QUALQUER uma das prioridades selecionadas.", + "priorityHigh": "Alta", + "priorityLow": "Baixa", + "priorityMedium": "Média", + "priorityNone": "Sem prioridade", + "priorityUrgent": "Urgente", + "promptFieldHelp": "O prompt enviado ao agente por cada nova issue. Escreva {{token}} para inserir marcadores.", + "query": "Consulta", + "queryHelp": "Correspondência de texto livre no título e na descrição (opcional).", + "queryPlaceholder": "bug de autenticação", + "reEnableItInSettings": "Volte a ativá-la nas definições", + "refresh": "Atualizar", + "removeConfiguration": "Remover configuração", + "removeLinearConfigurationConfirm": "Remover a configuração do Linear?", + "resetCompleteDeletedTasks_one": "Reposição concluída — {{count}} tarefa eliminada; a próxima sondagem volta a importar as correspondências.", + "resetCompleteDeletedTasks_other": "Reposição concluída — {{count}} tarefas eliminadas; a próxima sondagem volta a importar as correspondências.", + "resetCompleteNoTasksDeleted": "Reposição concluída — a próxima sondagem volta a importar as correspondências.", + "resetFailed": "Não foi possível repor: {{error}}", + "resetWatch": "Repor a vigilância", + "savedLeaveBlank": "(guardada — deixe em branco para manter o valor atual)", + "saveFailed": "Não foi possível guardar: {{error}}", + "saving": "A guardar…", + "searchByIdTitleOrDescription": "Pesquisar por ID, título ou descrição", + "selectWorkflow": "Selecionar fluxo de trabalho", + "selectWorkspace": "Selecionar área de trabalho", + "sortCreatedAsc": "Criação (mais antigas primeiro)", + "sortCreatedDesc": "Criação (mais recentes primeiro)", + "sortDefault": "Pré-definida (ordem do Linear)", + "sortPriorityAsc": "Prioridade (baixa → alta)", + "sortPriorityDesc": "Prioridade (alta → baixa)", + "sortUpdatedAsc": "Atualização (menos recentes primeiro)", + "sortUpdatedDesc": "Atualização (mais recentes primeiro)", + "startTask": "Iniciar tarefa", + "states": "Estados", + "statesHelp": "Clique nos estados para alternar. Se estiver vazio, corresponde a todos os estados da equipa.", + "statesHelpNoTeam": "Escolha uma equipa para selecionar estados de fluxo de trabalho específicos.", + "taskPrompt": "Prompt da tarefa", + "team": "Equipa", + "teamHelp": "Restringir as correspondências a uma equipa.", + "testConnection": "Testar a ligação", + "testFailed": "Falhou: {{error}}", + "testing": "A testar…", + "unassigned": "Sem responsável", + "unknownAccount": "Conta desconhecida", + "unknownError": "Erro desconhecido", + "update": "Atualizar", + "updatedAgo": "· atualizada {{time}}", + "updatedTime": "Atualizada {{time}}", + "updateFailed": "Não foi possível atualizar: {{error}}", + "watchDialogDescription": "Sonde o Linear com um filtro estruturado e crie automaticamente uma tarefa do Kandev para cada nova issue correspondente. Opcionalmente, associe um repositório para que cada tarefa seja executada sobre essa base de código, ou deixe por definir para executar sem repositório.", + "watcherCreated": "Vigilância criada", + "watcherDeleted": "Vigilância eliminada", + "watcherUpdated": "Vigilância atualizada", + "workflow": "Fluxo de trabalho", + "workflowHelp": "As tarefas são criadas neste fluxo de trabalho.", + "workflowStep": "Passo do fluxo de trabalho", + "workflowStepHelp": "Passo inicial das novas tarefas.", + "workspaceHelp": "As tarefas criadas por esta vigilância vão para a área de trabalho selecionada.", + "yourLinearApiKeyIsInvalid": "A sua chave de API do Linear é inválida ou foi revogada. Volte a ligar para ver esta issue." +} diff --git a/apps/web/src/locales/pt-pt/lsp.json b/apps/web/src/locales/pt-pt/lsp.json new file mode 100644 index 0000000000..3c6459e77e --- /dev/null +++ b/apps/web/src/locales/pt-pt/lsp.json @@ -0,0 +1,78 @@ +{ + "activeWorkItems_one": "{{count}} item de trabalho ativo", + "activeWorkItems_other": "{{count}} itens de trabalho ativos", + "applicationStatusBar": "Barra de estado da aplicação", + "applicationStatusBarDescription": "Mostra o estado do LSP na barra de estado reordenável da aplicação. Se essa barra estiver desativada ou se estiver ativo um esquema orientado ao toque, é usada a barra de ferramentas do editor.", + "autoInstallUnsupported": "A instalação automática não está disponível neste anfitrião de tarefas", + "chooseStatusLocation": "Escolha onde aparecem os detalhes de arranque, indexação e ligação do LSP.", + "closeLanguageServerStatus": "Fechar o estado do servidor de linguagem", + "connected": "Ligado", + "connecting": "A ligar", + "connection": "Ligação", + "connectionAndProjectAnalysis": "Ligação e análise do projeto", + "connectionClosed": "Ligação fechada", + "crossFileDefinitionsMayBeIncomplete": "As definições e referências entre ficheiros podem estar incompletas enquanto este trabalho estiver ativo.", + "crossFileFeaturesAfterInitialization": "As funcionalidades entre ficheiros ficam disponíveis depois de concluída a inicialização.", + "crossFileFeaturesUnavailable": "As funcionalidades entre ficheiros permanecem indisponíveis até a inicialização terminar.", + "editorToolbar": "Barra de ferramentas do editor", + "editorToolbarDescription": "Mostra o estado do LSP junto às ações do editor do ficheiro ativo.", + "elapsed": "Decorrido {{elapsed}}", + "elapsedDurationParts": "{{major}} {{minor}}", + "elapsedHours_one": "{{value}} h", + "elapsedHours_other": "{{value}} h", + "elapsedMinutes_one": "{{value}} min", + "elapsedMinutes_other": "{{value}} min", + "elapsedSeconds_one": "{{value}} s", + "elapsedSeconds_other": "{{value}} s", + "enableAutoInstall": "Ative a instalação automática em Definições → Editores.", + "error": "Erro", + "initializationLongRunning": "A inicialização está a demorar mais do que o habitual", + "installFailed": "A instalação falhou", + "installKotlinLsp": "Instale o kotlin-lsp no anfitrião da tarefa e depois reinicie a tarefa.", + "installLanguageServerManually": "Instale manualmente o servidor de linguagem no anfitrião da tarefa e tente novamente.", + "installingLanguageServer": "A instalar o servidor de linguagem", + "kotlinInitializationGuidance": "O LSP de Kotlin pode estar a importar o projeto Gradle. As funcionalidades entre ficheiros permanecem indisponíveis até a inicialização terminar.", + "languageServer": "Servidor de linguagem", + "languageServerConnection": "Servidor de linguagem: {{summary}}", + "languageServerDescription": "Servidor de linguagem de {{language}}: {{summary}}", + "languageServerError": "Erro do LSP", + "languageServerExited": "o servidor de linguagem terminou", + "languageServerFailedToStart": "Não foi possível iniciar o servidor de linguagem", + "languageServerIsOff": "O servidor de linguagem está desligado", + "languageServerNotFound": "Servidor de linguagem não encontrado", + "languageServerOpenStatus": "Servidor de linguagem: {{summary}}. Abrir estado", + "languageServerStatus": "Estado do servidor de linguagem", + "languageServerUnavailable": "Servidor de linguagem indisponível", + "noActiveWorkspace": "Nenhuma área de trabalho ativa", + "noBackgroundWorkReported": "Nenhum trabalho em segundo plano reportado", + "noBackgroundWorkReportedDescription": "O servidor de linguagem não reportou análise do projeto em curso. Os resultados entre ficheiros podem ainda estar a aquecer.", + "noPercentage": "O servidor não forneceu uma percentagem.", + "off": "Desligado", + "openStatus": "{{description}}. Abrir estado", + "progressAppearsDuringInitialization": "O progresso do projeto aparece quando começa a inicialização do servidor de linguagem.", + "progressPercentage": "{{title}}: {{percentage}}%", + "progressUnavailable": "Progresso do projeto indisponível", + "progressUnavailableDescription": "Tente novamente a ligação para receber o progresso do projeto.", + "progressWillClear": "O progresso do projeto será limpo quando o servidor de linguagem parar.", + "projectAnalysis": "Análise do projeto", + "reportedWorkDisclaimer": "Isto confirma apenas o item de trabalho reportado, não a indexação completa do projeto.", + "retryLanguageServer": "Repetir o servidor de linguagem", + "serverProcessStarted": "Processo do servidor iniciado", + "serverStillInitializing": "O processo do servidor continua em execução enquanto o Kandev aguarda a inicialização do LSP.", + "serverWorkFinished": "Trabalho reportado pelo servidor concluído", + "startLanguageServer": "Iniciar o servidor de linguagem", + "startServerForProgress": "Inicie o servidor de linguagem para receber o progresso do projeto.", + "startingLanguageServer": "A iniciar o servidor de linguagem", + "statusLocation": "Localização do estado", + "statusLocationAria": "Localização do estado do LSP", + "stopLanguageServer": "Parar o servidor de linguagem", + "stopping": "A parar", + "stoppingLanguageServer": "A parar o servidor de linguagem", + "taskExecutorUnsupported": "Os servidores de linguagem não são suportados por este executor de tarefas", + "thisMayTakeAMoment": "Isto pode demorar um momento...", + "tooManyLanguageServers": "Estão ativos demasiados servidores de linguagem", + "unavailable": "Indisponível", + "waitingForInitializeResponse": "A aguardar que o servidor de linguagem responda ao pedido de inicialização do LSP.", + "waitingForLanguageServer": "A aguardar o servidor de linguagem", + "webSocketError": "Erro de WebSocket" +} diff --git a/apps/web/src/locales/pt-pt/plugins.json b/apps/web/src/locales/pt-pt/plugins.json new file mode 100644 index 0000000000..b0eb51de5f --- /dev/null +++ b/apps/web/src/locales/pt-pt/plugins.json @@ -0,0 +1,117 @@ +{ + "add": "Adicionar", + "allCategories": "Todas as categorias", + "autoUpdate": "Atualização automática", + "autoUpdateDescription": "Consulta o marketplace periodicamente e instala versões mais recentes dos plugins ativos. Aplica-se a todos os plugins, salvo se for substituído por plugin em baixo.", + "autoUpdateFor": "Atualização automática de {{name}}", + "autoUpdateTitle": "Atualizar automaticamente os plugins", + "byAuthor": "de {{author}}", + "cancel": "Cancelar", + "category": "Categoria", + "confirmUninstall": "Confirmar a desinstalação", + "disable": "Desativar", + "dropzoneHint": "Arraste e largue aqui um pacote {{extension}} ou clique para procurar", + "enable": "Ativar", + "failedToAddSource": "Não foi possível adicionar a origem", + "failedToDisable": "Não foi possível desativar {{name}}", + "failedToEnable": "Não foi possível ativar {{name}}", + "failedToInstallPlugin": "Não foi possível instalar o plugin", + "failedToLoadMarketplace": "Não foi possível carregar o marketplace", + "failedToLoadPlugins": "Não foi possível carregar os plugins", + "failedToLoadSettings": "Não foi possível carregar as definições do plugin", + "failedToRemoveSource": "Não foi possível remover a origem", + "failedToSaveSettings": "Não foi possível guardar as definições do plugin", + "failedToSetAutoUpdateFor": "Não foi possível alterar a atualização automática de {{name}}", + "failedToSyncPlugins": "Não foi possível sincronizar os plugins", + "failedToUninstall": "Não foi possível desinstalar {{name}}", + "failedToUpdateAutoUpdate": "Não foi possível alterar a definição de atualização automática", + "failedToUpdateSource": "Não foi possível atualizar a origem", + "fromUrl": "A partir de um URL", + "hideRaw": "Ocultar o original", + "install": "Instalar", + "installPlugin": "Instalar plugin", + "installPluginDescription": "Instale um pacote de plugin a partir de um URL ou carregue diretamente um ficheiro {{extension}}.", + "installed": "Instalado", + "installedPlugins": "Plugins instalados", + "installing": "A instalar…", + "loadingMarketplace": "A carregar o marketplace…", + "loadingPlugins": "A carregar os plugins...", + "loadingSelectedUtilityAgent": "A carregar o agente utilitário selecionado...", + "loadingSettings": "A carregar as definições...", + "loadingUtilityAgents": "A carregar os agentes utilitários...", + "manifest": "Manifesto", + "manifestApiVersion": "Versão da API", + "manifestAuthor": "Autor", + "manifestCapabilities": "Capacidades", + "manifestId": "ID", + "manifestInstalled": "Instalado", + "manifestSigned": "Assinado", + "manifestVersion": "Versão", + "manifestWebhooks": "Webhooks", + "marketplaceSources": "Origens do marketplace", + "marketplaceSourcesDescription": "Adicione um registo de equipa ou empresarial para explorar os seus plugins juntamente com o catálogo oficial. Cada origem disponibiliza um documento {{document}}.", + "no": "não", + "noDeclaredSettings": "Este plugin não declara quaisquer definições (sem <1>config_schema no manifesto).", + "noInstalledPluginWithId": "Não há nenhum plugin instalado com o id <1>{{id}}.", + "noPluginsAvailable": "Ainda não há plugins disponíveis. Volte em breve ou adicione uma origem de marketplace com os seus.", + "noPluginsMatchSearch": "Nenhum plugin corresponde à sua pesquisa. Experimente limpar os filtros.", + "noPluginsYet": "Ainda não há plugins. Instale um a partir do separador Explorar ou carregue um pacote.", + "notSet": "Não definido", + "override": "substituição", + "packageUrl": "URL do pacote", + "pluginInstalled": "{{name}} instalado", + "pluginPageFailedToLoad": "Não foi possível carregar esta página de plugin.", + "pluginsAvailable_one": "{{count}} plugin disponível", + "pluginsAvailable_other": "{{count}} plugins disponíveis", + "refresh": "Atualizar", + "removeSource": "Remover {{name}}", + "repo": "Repo", + "requiredFields": "Obrigatórios: {{fields}}", + "reset": "Repor", + "resetAutoUpdateFor": "Repor a atualização automática de {{name}} para a pré-definição", + "savingRestartsPlugin": "Ao guardar, o plugin é reiniciado para que as novas definições entrem em vigor.", + "searchPlugins": "Pesquisar plugins…", + "selectAUtilityAgent": "Selecione um agente utilitário...", + "selectPlaceholder": "Selecionar...", + "selectedUtilityAgentUnavailable": "Agente utilitário selecionado indisponível", + "settings": "Definições", + "settingsDescription": "Explore o marketplace e instale, ative, desative e desinstale plugins do Kandev.", + "settingsSaved": "Definições do plugin guardadas", + "settingsSavedReloadFailed": "As definições foram guardadas, mas não foi possível recarregá-las — atualize para confirmar.", + "sortMostStars": "Mais estrelas", + "sortName": "Nome", + "sortRecentlyUpdated": "Atualizados recentemente", + "sourceNamePlaceholder": "Nome da origem (ex.: Acme Interno)", + "sourceOfficial": "Oficial", + "sourceUnreachable": "Inacessível", + "sourceUnreachableDetail": "<0>{{name}} está inacessível{{detail}} — os seus plugins estão ocultos.", + "sources": "Origens", + "statusActive": "Ativo", + "statusDisabled": "Desativado", + "statusError": "Erro", + "statusRegistered": "Registado", + "statusUninstalled": "Desinstalado", + "sync": "Sincronizar", + "syncInstalled_one": "{{count}} instalado", + "syncInstalled_other": "{{count}} instalados", + "syncMissing_one": "{{count}} em falta", + "syncMissing_other": "{{count}} em falta", + "syncSideloaded_one": "{{count}} instalado manualmente", + "syncSideloaded_other": "{{count}} instalados manualmente", + "syncSummary": "Sincronização: {{parts}}", + "syncUpToDate": "Está tudo atualizado", + "tabBrowse": "Explorar", + "tabInstalled": "Instalados", + "thisPlugin": "este plugin", + "uninstall": "Desinstalar", + "uninstallConfirm": "Isto remove permanentemente <2>{{name}} e revoga a respetiva chave de API. Esta ação não pode ser anulada.", + "uninstallPlugin": "Desinstalar plugin", + "unsigned": "sem assinatura", + "update": "Atualizar", + "updateToVersion": "Atualizar para a v{{version}}", + "updating": "A atualizar…", + "uploadFile": "Carregar ficheiro", + "utilityAgentsUnavailable": "Agentes utilitários indisponíveis", + "viewRaw": "Ver o original", + "yes": "sim" +} diff --git a/apps/web/src/locales/pt-pt/review.json b/apps/web/src/locales/pt-pt/review.json new file mode 100644 index 0000000000..d124d9983e --- /dev/null +++ b/apps/web/src/locales/pt-pt/review.json @@ -0,0 +1,82 @@ +{ + "acrossFileCount_one": "em {{count}} ficheiro", + "acrossFileCount_other": "em {{count}} ficheiros", + "actionsFor": "Ações para {{filePath}}", + "autoMarkReviewedOnScroll": "Marcar como revisto automaticamente ao deslocar", + "changedSection": "Secção alterada {{index}}", + "closeReview": "Fechar a revisão", + "collapseFile": "Recolher {{path}}", + "collapseUnchanged": "Recolher as inalteradas", + "commentSent": "Comentário enviado", + "copyDiff": "Copiar o diff", + "diffLoading": "A carregar o diff...", + "diffSkipBinary": "Ficheiro binário — sem diff possível", + "diffSkipBudgetExceeded": "Diff ignorado — demasiados ficheiros alterados", + "diffSkipTooLarge": "Ficheiro demasiado grande para gerar o diff (>10 MB)", + "diffSkipTruncated": "Diff truncado (>256 KB)", + "diffTruncated": "Diff truncado — a mostrar os primeiros 256 KB", + "discardWalkthrough": "Descartar o passo a passo", + "discardWalkthroughDescription": "Isto remove o passo a passo guardado desta tarefa. O agente pode criar um novo mais tarde.", + "discardWalkthroughTitle": "Descartar o passo a passo?", + "editFile": "Editar ficheiro", + "expandAll": "Expandir tudo", + "expandFile": "Expandir {{path}}", + "expandUnchangedLines": "Expandir as linhas inalteradas", + "failedToDiscardWalkthrough": "Não foi possível descartar o passo a passo", + "failedToSendComment": "Não foi possível enviar o comentário", + "filesReviewed": "{{reviewedCount}} de {{totalCount}} ficheiros revistos", + "filterChangedFiles": "Filtrar os ficheiros alterados", + "findingCount_one": "{{count}} deteção", + "findingCount_other": "{{count}} deteções", + "fixComments": "Corrigir comentários", + "goToFindings_one": "Ir para {{count}} deteção da revisão", + "goToFindings_other": "Ir para {{count}} deteções da revisão", + "loadingChangedFiles": "A carregar os ficheiros alterados...", + "loadingPRChanges": "A carregar as alterações de {{repo}} #{{prNumber}}…", + "markdownPreviewPartialNotice": "A mostrar os fragmentos de Markdown alterados. O conteúdo inalterado não está incluído neste diff.", + "moreActionsFor": "Mais ações para {{filePath}}", + "new": "novo", + "newWalkthrough": "Novo passo a passo", + "noChangesToReview": "Não há alterações para rever", + "noChangesToReviewYet": "Ainda não há alterações para rever.", + "noCommentsToFixYet": "Ainda não há comentários para corrigir.", + "noFilesMatchTheFilter": "Nenhum ficheiro corresponde ao filtro", + "noOpenFindings": "Não há deteções em aberto.", + "noTextualDiffAdded": "O ficheiro adicionado não tem diff textual", + "noTextualDiffDeleted": "O ficheiro eliminado não tem diff textual", + "noTextualDiffModified": "Não há diff textual disponível", + "noTextualDiffMoved": "Ficheiro movido; sem alterações textuais", + "noTextualDiffMovedFrom": "Movido de {{oldPath}}; sem alterações textuais", + "noTextualDiffUntracked": "O ficheiro não controlado não tem diff textual", + "old": "antigo", + "openFindingCount_one": "{{count}} deteção em aberto", + "openFindingCount_other": "{{count}} deteções em aberto", + "pendingCommentCount_one": "{{count}} comentário de revisão pendente", + "pendingCommentCount_other": "{{count}} comentários de revisão pendentes", + "pleaseTryAgain": "Tente novamente.", + "previewMarkdown": "Pré-visualizar o markdown", + "queuedForTheAgent": "Em fila para o agente.", + "resizeFileList": "Redimensionar a lista de ficheiros", + "retry": "Tentar novamente", + "revertChanges": "Reverter alterações", + "reviewAgentUnavailableNotice": "Não há nenhum agente com capacidade de inferência configurado para a revisão. <2>Definições → Agentes utilitários", + "reviewChanges": "Rever alterações", + "reviewChangesTitle": "Rever alterações", + "reviewInProgress": "Revisão em curso", + "reviewPullRequest": "Rever o pull request", + "reviewPullRequestFor": "Rever o pull request {{repo}} #{{prNumber}}", + "reviewTheseChangesWithAnAgent": "Rever estas alterações com um agente", + "sentToTheAgent": "Enviado ao agente.", + "showDiff": "Mostrar o diff", + "staleChanged": "alterado", + "switchToSplitView": "Mudar para a vista dividida", + "switchToUnifiedView": "Mudar para a vista unificada", + "theReviewFailed": "A revisão falhou", + "toggleWordWrap": "Alternar a quebra de linha", + "view": "Ver", + "walkMeThroughTheseChanges": "Explicar estas alterações passo a passo", + "walkMeThroughTheseReviewChanges": "Explicar passo a passo estas alterações da revisão", + "walkthrough": "Passo a passo", + "walkthroughDiscarded": "Passo a passo descartado", + "wrapLongLines": "Quebrar as linhas longas" +} diff --git a/apps/web/src/locales/pt-pt/sentry.json b/apps/web/src/locales/pt-pt/sentry.json new file mode 100644 index 0000000000..5732c4fc8f --- /dev/null +++ b/apps/web/src/locales/pt-pt/sentry.json @@ -0,0 +1,176 @@ +{ + "actions": "Ações", + "active": "Ativa", + "addInstance": "Adicionar instância", + "agentProfile": "Perfil de agente", + "allProjects": "Todos os projetos", + "any": "(qualquer)", + "authToken": "Token de autenticação", + "availablePlaceholders": "Marcadores disponíveis:", + "browseSentryIssues": "Explorar as issues do Sentry", + "cantDeleteInstanceInUse_one": "Não é possível eliminar \"{{name}}\": {{count}} vigilância continua associada. Reatribua ou remova primeiro essas vigilâncias.", + "cantDeleteInstanceInUse_other": "Não é possível eliminar \"{{name}}\": {{count}} vigilâncias continuam associadas. Reatribua ou remova primeiro essas vigilâncias.", + "checkFailed": "A verificação falhou: {{error}}", + "checkNow": "Verificar agora", + "connectedAs": "Ligado como {{name}}", + "create": "Criar", + "createFailed": "Não foi possível criar: {{error}}", + "createSentryWatcher": "Criar vigilância do Sentry", + "delete": "Eliminar", + "deleteFailed": "Não foi possível eliminar: {{error}}", + "deleteInstanceAria": "Eliminar a instância do Sentry {{name}}", + "deleteThisSentryWatcher": "Eliminar esta vigilância do Sentry?", + "edit": "Editar", + "editInstanceAria": "Editar a instância do Sentry {{name}}", + "editSentryWatcher": "Editar a vigilância do Sentry", + "enable": "Ativar", + "enabled": "Ativada", + "enabledHelp": "Pausar ou retomar a sondagem.", + "enterAPositiveIntegerOrBlank": "Introduza um número inteiro positivo ou deixe em branco.", + "enterNameAndTokenBeforeSaving": "Introduza um nome de instância e um token de autenticação antes de guardar.", + "environment": "Ambiente", + "environmentHelp": "Opcional — restringir a um ambiente.", + "eventsCount_one": "eventos {{count}}", + "eventsCount_other": "eventos {{count}}", + "executorProfile": "Perfil de executor", + "failedToLoadInstances": "Não foi possível carregar as instâncias do Sentry: {{error}}", + "fallsBackToStepDefault": "Opcional — recorre à pré-definição do passo.", + "filter": "Filtro", + "foundNewIssues_one": "Encontrada {{count}} nova issue — as tarefas aparecem dentro de instantes.", + "foundNewIssues_other": "Encontradas {{count}} novas issues — as tarefas aparecem dentro de instantes.", + "grantReadAccess": "Conceda acesso de leitura a estes âmbitos:", + "instance": "Instância", + "instanceNameTaken": "Já existe nesta área de trabalho uma instância com o nome \"{{name}}\".", + "instanceRemoved": "Instância do Sentry removida", + "instanceSaved": "Instância do Sentry guardada", + "instanceUnavailable": "(indisponível)", + "instanceUrl": "URL da instância", + "instanceUrlHelp": "URL base da sua instância do Sentry. Mantenha {{defaultUrl}} para o Sentry SaaS ou aponte para uma instalação própria (ex.: {{exampleUrl}}).", + "instances": "Instâncias", + "interval": "Intervalo", + "intervalMinutes_one": "{{count}}m", + "intervalMinutes_other": "{{count}}m", + "lastPolled": "Última sondagem", + "lastSeen": "Vista pela última vez", + "level": "Nível", + "levelDebug": "depuração", + "levelError": "erro", + "levelFatal": "fatal", + "levelInfo": "informação", + "levelWarning": "aviso", + "levels": "Níveis", + "levelsHelp": "Clique para alternar. Corresponde às issues em QUALQUER um dos níveis selecionados.", + "loadMore": "Carregar mais", + "loadingEllipsis": "A carregar…", + "maxInflightTasks": "Máximo de tarefas em curso", + "maxInflightTasksHelp": "Limite de tarefas em aberto criadas por esta vigilância. Deixe em branco para não ter limite. As novas correspondências são adiadas para a sondagem seguinte quando o limite é atingido.", + "name": "Nome", + "nameHelp": "Uma etiqueta para esta instância. Tem de ser única dentro da área de trabalho.", + "namePlaceholder": "Produção, Instalação própria, …", + "never": "Nunca", + "newInstance": "Nova instância", + "newWatcher": "Nova vigilância", + "noCap": "(sem limite)", + "noHealthySentryInstanceCheckThe": "Não há nenhuma instância do Sentry saudável — verifique as definições da integração.", + "noInstancesInWorkspace": "Não há instâncias do Sentry nesta área de trabalho", + "noInstancesYet": "Ainda não há instâncias do Sentry. Adicione uma para ligar esta área de trabalho.", + "noIssuesYetRunASearch": "Ainda não há issues. Faça uma pesquisa para começar.", + "noNewIssuesMatched": "Nenhuma nova issue correspondeu.", + "noOrganizationsAvailable": "Não há organizações disponíveis", + "noProjectsAvailable": "Não há projetos disponíveis", + "noProjectsAvailableSentence": "Não há projetos disponíveis.", + "noSentryInstancesConfiguredForThis": "Não há instâncias do Sentry configuradas para esta área de trabalho.", + "noWatchersConfigured": "Não há vigilâncias do Sentry configuradas. Crie uma para criar tarefas automaticamente a partir de issues filtradas.", + "orgSlugRequired": "O slug da organização é obrigatório", + "organization": "Organização", + "organizationSlug": "Slug da organização", + "organizationSlugHelp": "A organização do Sentry a sondar.", + "pasteAnAuthTokenToTest": "Cole um token de autenticação para testar a ligação", + "pause": "Pausar", + "paused": "Em pausa", + "period": "Período", + "placeholderAssigneeDisplayName": "Nome do responsável", + "placeholderCulprit": "Origem (função ou ficheiro)", + "placeholderEventCount": "Total de eventos", + "placeholderFirstSeen": "Quando a issue foi vista pela primeira vez", + "placeholderIssueLevel": "Nível da issue", + "placeholderIssueStatus": "Estado da issue", + "placeholderIssueTitle": "Título da issue", + "placeholderIssueUrl": "Ligação permanente da issue do Sentry", + "placeholderLastSeen": "Quando a issue foi vista pela última vez", + "placeholderProjectSlug": "Slug do projeto do Sentry", + "placeholderShortId": "ID curto do Sentry", + "placeholderUserCount": "Utilizadores únicos afetados", + "pollIntervalHelp": "Com que frequência a pesquisa é repetida. Mínimo 60s, máximo 3600s.", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "production": "production", + "project": "Projeto", + "projectSlug": "Slug do projeto", + "projectSlugHelp": "O(s) projeto(s) do Sentry a sondar. Selecione um ou mais.", + "projectsSelected_one": "{{count}} projeto selecionado", + "projectsSelected_other": "{{count}} projetos selecionados", + "promptFieldHelp": "O prompt enviado ao agente por cada nova issue. Escreva {{token}} para inserir marcadores.", + "query": "Consulta", + "queryExample": "ex.: {{query}}", + "queryHelp": "Consulta de pesquisa em texto livre do Sentry (opcional).", + "removeInstanceConfirm": "Remover a instância do Sentry \"{{name}}\"?", + "requiredTokenScopes": "Âmbitos obrigatórios do token", + "resetCompleteDeletedTasks_one": "Reposição concluída — {{count}} tarefa eliminada; a próxima sondagem volta a importar as correspondências.", + "resetCompleteDeletedTasks_other": "Reposição concluída — {{count}} tarefas eliminadas; a próxima sondagem volta a importar as correspondências.", + "resetCompleteNoTasksDeleted": "Reposição concluída — a próxima sondagem volta a importar as correspondências.", + "resetFailed": "Não foi possível repor: {{error}}", + "resetWatch": "Repor a vigilância", + "saveFailed": "Não foi possível guardar: {{error}}", + "savedLeaveBlank": "(guardado — deixe em branco para manter o valor atual)", + "saving": "A guardar…", + "scopeEventRead": "Issue e evento — explorar issues e executar vigilâncias", + "scopeOrgRead": "Organização — resolver a organização e listar issues", + "scopeProjectRead": "Projeto — listar projetos e delimitar pesquisas", + "searchProjects": "Pesquisar projetos...", + "selectASentryInstanceToBrowse": "Selecione uma instância do Sentry para explorar as suas issues.", + "selectAnInstance": "Selecionar uma instância", + "selectAnInstanceToBrowse": "Selecione uma instância para explorar", + "selectInstanceToSearch": "Selecione uma instância do Sentry para pesquisar", + "selectOrganization": "Selecionar organização", + "selectProjects": "Selecionar projetos", + "selectWorkflow": "Selecionar fluxo de trabalho", + "selectWorkspace": "Selecionar área de trabalho", + "sentryInstance": "Instância do Sentry", + "sentryInstanceHelp": "A instância do Sentry sondada por esta vigilância. Não pode ser alterada depois de criada.", + "sentryIntegration": "Integração com o Sentry", + "sentryIntegrationDescription": "Ligue esta área de trabalho ao Sentry. Adicione uma instância com nome para cada organização do Sentry ou anfitrião próprio; as credenciais são guardadas encriptadas no servidor.", + "sentryWatcher": "Vigilância do Sentry", + "sentryWatchers": "Vigilâncias do Sentry", + "sentryWatchersDescription": "Sondar um filtro do Sentry e criar automaticamente uma tarefa do Kandev para cada nova issue correspondente.", + "statsPeriod": "Período das estatísticas", + "statsPeriodHelp": "Até quando recuar na procura de issues correspondentes.", + "statsPeriodLast14Days": "Últimos 14 dias", + "statsPeriodLast24Hours": "Últimas 24 horas", + "statsPeriodLast30Days": "Últimos 30 dias", + "statsPeriodLast7Days": "Últimos 7 dias", + "statsPeriodLastHour": "Última hora", + "statusIgnored": "ignorada", + "statusResolved": "resolvida", + "statusUnresolved": "não resolvida", + "statuses": "Estados", + "statusesHelp": "Clique para alternar. Corresponde às issues em QUALQUER um dos estados selecionados.", + "taskPrompt": "Prompt da tarefa", + "testConnection": "Testar a ligação", + "testFailed": "Falhou: {{error}}", + "testing": "A testar...", + "update": "Atualizar", + "updateFailed": "Não foi possível atualizar: {{error}}", + "useStepDefault": "(usar a pré-definição do passo)", + "usersCount_one": "utilizadores {{count}}", + "usersCount_other": "utilizadores {{count}}", + "watchDialogDescription": "Sonde o Sentry com um filtro estruturado e crie automaticamente uma tarefa do Kandev para cada nova issue correspondente. Opcionalmente, associe um repositório para que cada tarefa seja executada sobre essa base de código, ou deixe por definir para executar sem repositório.", + "watcherCreated": "Vigilância criada", + "watcherDeleted": "Vigilância eliminada", + "watcherUpdated": "Vigilância atualizada", + "workflow": "Fluxo de trabalho", + "workflowHelp": "As tarefas são criadas neste fluxo de trabalho.", + "workflowStep": "Passo do fluxo de trabalho", + "workflowStepHelp": "Passo inicial das novas tarefas.", + "workspaceHelp": "As tarefas criadas por esta vigilância vão para a área de trabalho selecionada.", + "yourSentryAuthTokenIsInvalid": "O seu token de autenticação do Sentry é inválido ou foi revogado. Volte a ligar para ver esta issue." +} diff --git a/apps/web/src/locales/pt-pt/settings.json b/apps/web/src/locales/pt-pt/settings.json new file mode 100644 index 0000000000..b09afcf427 --- /dev/null +++ b/apps/web/src/locales/pt-pt/settings.json @@ -0,0 +1,695 @@ +{ + "aSecretNameAndValueAreRequired": "São obrigatórios um nome e um valor para o segredo.", + "aSecretNameIsRequired": "É obrigatório um nome para o segredo.", + "aboutAffectedKandevMcpTools": "Sobre as ferramentas MCP do Kandev afetadas", + "actionsFor": "Ações para {{target}}", + "activeKandevSpritesSpritesAreDestroyed": "Sprites ativos do Kandev. Os sprites são destruídos quando os agentes param.", + "activeSessions": "Sessões ativas", + "activeSprites_one": "{{count}} sprite ativo.", + "activeSprites_other": "{{count}} sprites ativos.", + "addAMissingToolTabBeside": "Adicionar um separador de ferramenta em falta junto à divisão selecionada.", + "addAppriseProvider": "Adicionar fornecedor Apprise", + "addCustomEditor": "Adicionar editor personalizado", + "addEditor": "Adicionar editor", + "addPanel": "Adicionar painel", + "addProvider": "Adicionar fornecedor", + "addSecret": "Adicionar segredo", + "addTheTabToTheSelected": "Adicionar o separador {{panel}} à divisão selecionada.", + "affectedKandevMcpTool": "Ferramenta MCP do Kandev afetada", + "agent": "Agente", + "agentGeneratedTaskTitles": "Títulos de tarefa gerados pelo agente", + "agentGeneratedTaskTitlesDescription": "Quando está ativado, os formulários de nova tarefa e de subtarefa ocultam o campo manual de título e exigem um prompt. O Kandev mostra de imediato um título provisório com as primeiras seis palavras do prompt e depois pede ao agente que o substitua por um título conciso, com cerca de três palavras. Se o agente não conseguir mudar o nome da tarefa, o título provisório continua disponível para edição. As tarefas existentes e editadas mantêm o seu campo de título normal.", + "agentGeneratedTaskTitlesDisabledHint": "Desativado por pré-definição; guarde esta definição antes de abrir uma janela de criação.", + "apiTokenIsConfigured": "O token de API está configurado.", + "appearance": "Aspeto", + "appriseNotInstalled": "O Apprise ainda não está instalado. Pode adicioná-lo mais tarde para ativar as notificações remotas. <2>Ver as instruções de instalação.", + "appriseProvider": "Fornecedor Apprise", + "appriseServiceUrls": "URL(s) do serviço", + "appriseUrlRequired": "É obrigatório pelo menos um URL de serviço Apprise.", + "archiveConfirmation": "Confirmação de arquivo", + "arrangeSplit": "Organizar a divisão", + "autoInstallIfNotFound": "Instalar automaticamente se não for encontrado", + "autoStart": "Arranque automático", + "autoStartLanguageServer": "Iniciar automaticamente o servidor de linguagem de {{language}}", + "autoStartLanguageServersWhenOpening": "Inicia automaticamente os servidores de linguagem ao abrir ficheiros, para obter diagnósticos, informação ao passar o rato e ir para a definição. Também pode ligar/desligar cada servidor por ficheiro. Os servidores de linguagem correm nos editores de ficheiros para computador; o visualizador de ficheiros móvel não os inicia.", + "builtIn": "Incorporado", + "builtInBrowserPanel": "Painel de navegador incorporado", + "cancel": "Cancelar", + "changelogNotificationsDescription": "Controlar a notificação de notas de versão na barra superior", + "changelogPageDescription": "Veja todas as versões e faça a gestão das preferências de notificação", + "changelogReleaseHistory": "Histórico de versões", + "changelogReleaseHistoryDescription": "Todas as versões e as respetivas notas", + "changelogResetSeenDescription": "Limpa a última versão vista para que a notificação da barra superior volte a aparecer", + "changelogResetSeenLabel": "Repor as versões vistas", + "changelogTopbarDescription": "Quando está ativado, aparece um ícone de brilho na barra superior quando é lançada uma nova versão", + "changelogTopbarLabel": "Mostrar notificação de novas versões", + "changelogTopbarTitle": "Notificação de versões na barra superior", + "changesPanel": "Painel de alterações", + "changesPanelLayout": "Esquema do painel de alterações", + "changesTheLanguageOfTheKandev": "Altera o idioma da interface do Kandev. Aplica-se de imediato e fica memorizado neste dispositivo. Os títulos das tarefas, o chat e outros conteúdos que criar não são traduzidos.", + "chatInput": "Campo de chat", + "chatInputAndCommandShortcuts": "Campo de chat e atalhos de comandos", + "chooseAMonospaceFontForThe": "Escolha um tipo de letra monoespaçado para o terminal. As Nerd Fonts incluem ícones para ferramentas de CLI.", + "chooseTheLanguageUsedAcrossThe": "Escolha o idioma usado em toda a interface do Kandev", + "chooseWhatOpensWhenKandevStarts": "Escolha o que abre quando o Kandev arranca ou quando visita a sua página inicial simples", + "chooseWhichTranscriptNavigationControls": "Escolha que controlos de navegação da transcrição aparecem, incluindo a barra de prompt fixa exclusiva do computador", + "clearSettingsSearch": "Limpar a pesquisa nas definições", + "clearShortcut": "Limpar o atalho", + "clickAShortcutToRecordA": "Clique num atalho para gravar uma nova combinação de teclas.", + "clickAUrlInTheTerminal": "Clique num URL no terminal para o abrir.", + "cmdCtrlEnterToSend": "Cmd/Ctrl+Enter para enviar", + "collectExecutionEnvironmentMetrics": "Recolher métricas do ambiente de execução", + "colorTheme": "Tema de cores", + "command": "Comando", + "completeTheRequiredEditorFieldsBefore": "Preencha os campos obrigatórios do editor antes de guardar.", + "configChatAgentDescription": "Escolha o perfil de agente a usar no Chat de configuração. Este agente pode gerir os seus fluxos de trabalho, perfis de agente e configuração MCP.", + "configChatAgentNoDefault": "Sem pré-definição", + "configChatAgentPlaceholder": "Escolha um perfil de agente...", + "configChatAgentTitle": "Agente do Chat de configuração", + "configureArchiveSafeguardsAndDefaultsFor": "Configure as salvaguardas de arquivo e as pré-definições das tarefas criadas por agentes", + "configureBackendAndExecutionResourceSampling": "Configure a amostragem de recursos do backend e da execução", + "configureChatInputBehavior": "Configure o comportamento do campo de chat", + "configureSpritesApiToken": "Configure uma variável de ambiente <1>{{envVar}} no perfil de executor, a referenciar um segredo com o seu token de API do Sprites.dev.", + "configureTerminalAppearanceAndBehavior": "Configure o aspeto e o comportamento do terminal", + "configureTheIncludedCodeEditorAnd": "Configure o editor de código incluído e os editores externos", + "configureTheInitialDesktopTaskWorkbench": "Configure a bancada de trabalho inicial das tarefas no computador.", + "confirmBeforeArchivingTasks": "Confirmar antes de arquivar tarefas", + "connectKandevToThirdPartyServices": "Ligue o Kandev a serviços de terceiros. O âmbito da ligação e as definições disponíveis são mostrados na página de cada integração.", + "connected": "Ligado", + "connection": "Ligação", + "connectionLostDescription": "Ligação perdida há pelo menos 10 segundos. As atualizações em direto podem estar desatualizadas.", + "connectionTestFailed": "O teste de ligação falhou", + "connectionTestPassed": "O teste de ligação foi bem-sucedido", + "connectionUnstableDescription": "Ligação instável. A voltar a ligar ao Kandev.", + "continueEditing": "Continuar a editar", + "couldnTSave": "<0> Não foi possível guardar", + "couldnTSave2": "Não foi possível guardar", + "cpu": "CPU %", + "cpuTemp": "Temp. da CPU", + "createANewEditableLayoutBased": "Criar um novo esquema editável com base no Pré-definido.", + "createANewSplitOfThe": "Criar uma nova divisão {{direction}} da divisão selecionada.", + "createASeparateCustomCopyOf": "Criar uma cópia personalizada separada do esquema selecionado.", + "custom": "Personalizado", + "customEditorType": "Personalizado", + "customEditors": "Editores personalizados", + "customEllipsis": "Personalizado...", + "customFontExample": "ex.: \"O Meu Tipo de Letra\"", + "customizeHowChangedFilesAreDisplayed": "Personalize como os ficheiros alterados são apresentados", + "customizeHowTheApplicationLooks": "Personalize o aspeto da aplicação", + "customizeKeyboardShortcutsForTheCommand": "Personalize os atalhos de teclado do painel de comandos", + "customized": "Personalizado", + "dark": "Escuro", + "decreaseHeight": "Diminuir a altura", + "decreaseWidth": "Diminuir a largura", + "default": "Pré-definido", + "defaultMenloMonaco": "Pré-definido (Menlo / Monaco)", + "defaults": "Pré-definições:", + "delete": "Eliminar", + "deleteLayoutProfile": "Eliminar o perfil de esquema", + "deleteLayoutProfileNamed": "Eliminar {{name}}?", + "deleteSecret": "Eliminar segredo", + "deleteThisCustomLayoutAfterConfirmation": "Eliminar este esquema personalizado após confirmação.", + "desktopNotifications": "Notificações no computador", + "desktopNotificationsDescription": "Notificar este dispositivo quando ocorrer um turno de agente, uma pergunta ou um evento do Office selecionados.", + "desktopOnlyWhileYouScrollPast": "Apenas no computador. Enquanto se desloca para além do seu último prompt, fixa uma cópia reduzida no topo da transcrição, com um botão para expandir.", + "destroyAll": "Destruir tudo", + "diagnosticACPNoSessions": "A transferência de ACP está disponível no modo de depuração, mas esta conta não tem sessões elegíveis para incluir.", + "diagnosticACPSelectionLimit": "Selecione no máximo dez sessões ACP.", + "diagnosticACPSelectionRequired": "Selecione pelo menos uma sessão ACP elegível.", + "diagnosticACPWarning": "As mensagens de depuração ACP podem conter prompts, respostas, chamadas de ferramentas, conteúdos de ficheiros, dados MCP, valores derivados do ambiente e segredos. Reveja este ZIP com atenção antes de o partilhar.", + "diagnosticBackendEvents": "Os registos do backend incluem eventos de arranque, de ciclo de vida, de API, de executor e de erro escritos pelo Kandev.", + "diagnosticBundleCancel": "Cancelar", + "diagnosticBundleCreate": "Criar pacote", + "diagnosticBundleDescription": "O Kandev pede aos separadores do navegador ligados o histórico limitado de consola dos últimos três dias, combina-o com os ficheiros de registo retidos do backend e transfere um único ZIP.", + "diagnosticBundleFailed": "O pacote de diagnóstico falhou.", + "diagnosticBundlePrepareError": "Não foi possível preparar o pacote de diagnóstico.", + "diagnosticBundleTitle": "Registos de diagnóstico do frontend + backend", + "diagnosticBusy": "Os diagnósticos estão ocupados. Tente novamente dentro de {{seconds}} segundos.", + "diagnosticClearACPSelection": "Limpar a seleção de ACP", + "diagnosticCollectingFrontendLogs": "A recolher os registos do frontend…", + "diagnosticCustomize": "Personalizar o pacote", + "diagnosticCustomizerDescription": "Escolha as evidências a incluir. Os registos do backend e do frontend estão selecionados por pré-definição e nada é guardado como preferência.", + "diagnosticCustomizerTitle": "Personalizar o pacote de diagnóstico", + "diagnosticFrontendEvents": "Os registos do frontend incluem erros e avisos da consola do navegador e relatórios de diagnóstico deste perfil de navegador.", + "diagnosticIncidentalText": "O texto acessório já escrito numa entrada de registo não é automaticamente ocultado. Reveja o ZIP antes de o partilhar.", + "diagnosticNoMessages": "Os pacotes padrão não incluem transcrições de chat, mensagens de sessão nem mensagens de agente.", + "diagnosticOpenTask": "Abrir a tarefa {{title}} num novo separador", + "diagnosticPartialZipDownloading": "Está a ser transferido um ZIP parcial: {{warnings}}", + "diagnosticPartialZipUnavailable": "Está a ser transferido um ZIP de diagnóstico parcial; alguns registos do frontend não estavam disponíveis.", + "diagnosticPreparingZip": "A preparar o ZIP…", + "diagnosticReviewBeforeSharing": "Reveja antes de partilhar", + "diagnosticReviewDescription": "Este ZIP combina até três dias de registos do backend com eventos de consola do frontend retidos localmente nos navegadores ligados. Pode conter URLs, argumentos de consola, pilhas de chamadas, caminhos, metadados de execução e erros visíveis para o utilizador.", + "diagnosticSelectAllACPSessions": "Selecionar todas as sessões ACP", + "diagnosticSelectSessions": "Selecionar sessões ACP", + "diagnosticSelectedSessions_one": "{{count}} sessão selecionada", + "diagnosticSelectedSessions_other": "{{count}} sessões selecionadas", + "diagnosticSessionReachable": "Acessível", + "diagnosticSessionRetained": "Retida no anfitrião", + "diagnosticSessionUnavailable": "Indisponível", + "diagnosticSessionsDescription_one": "Escolha até {{count}} sessão elegível. As sessões indisponíveis não podem ser recolhidas.", + "diagnosticSessionsDescription_other": "Escolha até {{count}} sessões elegíveis. As sessões indisponíveis não podem ser recolhidas.", + "diagnosticSessionsLoading": "A carregar as sessões elegíveis…", + "diagnosticSourceACP": "Mensagens de depuração ACP", + "diagnosticSourceACPDescription": "Tramas do protocolo do agente, em bruto e normalizadas, das sessões selecionadas.", + "diagnosticSourceBackend": "Registos do backend", + "diagnosticSourceBackendDescription": "Até três dias de ficheiros de registo retidos do backend do Kandev.", + "diagnosticSourceFrontend": "Registos do frontend", + "diagnosticSourceFrontendDescription": "Eventos de consola limitados dos separadores do navegador ligados.", + "diagnosticSourceRequired": "Selecione pelo menos uma fonte de evidências.", + "diagnosticSourceRuntime": "Índice de execução", + "diagnosticSourceRuntimeDescription": "Estado das sessões e metadados do executor da lista permitida; sem mensagens nem prompts.", + "diagnosticSourcesTitle": "Fontes de evidências", + "diagnosticZipDownloading": "O seu ZIP de diagnóstico está a ser transferido.", + "discardAndLeave": "Descartar e sair", + "discarding": "A descartar...", + "disconnected": "Desligado", + "discoveryAliasesAgentTaskProfile": "perfil de tarefa MCP,pré-definição de tarefa de agente", + "discoveryAliasesArchiveConfirmation": "aviso de arquivo,confirmar arquivo", + "discoveryAliasesColorTheme": "tema,modo claro,modo escuro,aspeto", + "discoveryAliasesDesktopNotifications": "alertas no computador,notificações do sistema", + "discoveryAliasesDisplayLanguage": "locale,tradução,idioma da interface", + "discoveryAliasesExternalMcpEndpoints": "URL MCP,ponto final HTTP,ponto final SSE", + "discoveryAliasesFileEditor": "servidores de linguagem,LSP,editor pré-definido", + "discoveryAliasesKeyboardShortcuts": "teclas de atalho,atalhos de teclado,comandos de teclado", + "discoveryAliasesLayoutProfiles": "esquema da área de trabalho,painéis,bancada de tarefas", + "discoveryAliasesNotificationSound": "áudio de notificação,sino,som de alerta", + "discoveryAliasesPreferredShell": "shell,zsh,bash,shell do terminal", + "discoveryAliasesResourceMetrics": "métricas,CPU,memória,disco,barra de estado", + "discoveryAliasesStartupPage": "página inicial,página de arranque,página de lançamento", + "discoveryAliasesSubmitShortcut": "tecla de envio,enter para enviar,command enter", + "discoveryAliasesTerminalFont": "família de letra,tipo de letra,monoespaçado", + "discoveryAliasesTerminalFontSize": "tamanho do texto,texto do terminal", + "discoveryAliasesTerminalLinks": "URLs,abrir ligações,navegador", + "discoveryAliasesTranscriptNavigation": "barra de prompt fixa,ir para o prompt,deslocamento automático da transcrição", + "discoveryAliasesUtilityActions": "geração de títulos,nomes de branch,mensagem de commit,descrição de PR", + "discoveryAliasesUtilityDefaultModel": "modelo utilitário,modelo de inferência,modelo de IA pré-definido", + "discoveryAliasesVoiceBehavior": "idioma da voz,premir para falar,envio automático,ativação por voz", + "discoveryAliasesVoiceEnable": "entrada de voz,microfone,entrada por fala", + "discoveryAliasesVoiceEngine": "reconhecimento de fala,transcrição,Whisper Web", + "discoveryAliasesVoiceShortcut": "atalho de voz,atalho do microfone,atalho premir para falar", + "discoveryVoiceShortcut": "Atalho de entrada de voz", + "disk": "Disco %", + "diskPath": "Caminho do disco", + "displayChangedFilesAsAFlat": "Apresentar os ficheiros alterados como uma lista simples com caminhos completos ou como uma árvore de pastas.", + "displayLanguage": "Idioma de apresentação", + "done": "Concluído", + "duplicate": "Duplicar", + "duplicateLayout": "Duplicar o esquema", + "edit": "Editar", + "editEditor": "Editar {{name}}", + "editSecret": "Editar segredo", + "editorIntegrationsAndDefaults": "Integrações e pré-definições do editor", + "editorName": "Nome do editor", + "editorType": "Tipo de editor", + "editors": "Editores", + "enableDesktopNotifications": "Ativar as notificações no computador", + "enableNotificationSound": "Ativar o som de notificação", + "enterAShellPathOrCommand": "Introduza um caminho de shell ou um comando disponível no ambiente do agente.", + "enterToSend": "Enter para enviar", + "externalMcpAvailableTools": "Ferramentas disponíveis", + "externalMcpCategoryCount_one": "{{count}} categoria", + "externalMcpCategoryCount_other": "{{count}} categorias", + "externalMcpConfigPathOrCli": "{{path}} — ou execute o comando de CLI abaixo", + "externalMcpCopied": "Copiado", + "externalMcpCopyToClipboard": "Copiar para a área de transferência", + "externalMcpCopyUrl": "Copiar o URL", + "externalMcpEndpoints": "Pontos finais", + "externalMcpEndpointsDescription": "Disponíveis no mesmo anfitrião e porta do Kandev. Use {{localhostHost}} para agentes na mesma máquina, ou o URL acessível do Kandev para clientes em LAN, VPN e proxy inverso.", + "externalMcpGroupAgentProfiles": "Perfis de agente e configuração MCP", + "externalMcpGroupAgentProfilesDescription": "Gerir a configuração de servidores MCP ao nível do perfil.", + "externalMcpGroupAgents": "Agentes", + "externalMcpGroupAgentsDescription": "Inspecionar e configurar o catálogo de agentes.", + "externalMcpGroupExecutors": "Executores", + "externalMcpGroupExecutorsDescription": "Criar, ler, atualizar e eliminar perfis de executor (Docker, autónomo, Sprites...).", + "externalMcpGroupTaskCreation": "Criação de tarefas", + "externalMcpGroupTaskCreationDescription": "Criar novas tarefas de topo ou subtarefas a partir de agentes externos.", + "externalMcpGroupTasks": "Tarefas", + "externalMcpGroupTasksDescription": "Listar, mover, arquivar e atualizar o estado das tarefas.", + "externalMcpGroupWorkflowSteps": "Passos do fluxo de trabalho (colunas)", + "externalMcpGroupWorkflowStepsDescription": "Gerir as colunas que compõem um fluxo de trabalho.", + "externalMcpGroupWorkspaces": "Áreas de trabalho e fluxos de trabalho", + "externalMcpGroupWorkspacesDescription": "Descobrir áreas de trabalho e criar, ler, atualizar e eliminar fluxos de trabalho.", + "externalMcpIntro": "Use isto se quiser gerir o Kandev a partir de agentes de programação que correm <2>fora do Kandev (por exemplo, Claude Code, Cursor ou Codex no seu anfitrião), ou a partir de <4>agentes em passagem direta que correm dentro do Kandev.", + "externalMcpIntroPassthrough": "Os agentes lançados dentro do Kandev no seu modo normal já têm o MCP do Kandev ligado automaticamente, sem configuração necessária.", + "externalMcpOneLiner": "Comando único (escreve em {{path}})", + "externalMcpOpenCodePaths": "{{projectPath}} (projeto) ou {{globalPath}} (global)", + "externalMcpSnippets": "Excertos de configuração", + "externalMcpSnippetsDescription": "Cole isto na configuração MCP global do seu agente.", + "externalMcpSse": "Server-Sent Events (SSE)", + "externalMcpSseHint": "Transporte de compatibilidade para clientes MCP mais antigos.", + "externalMcpStreamableHttp": "Streamable HTTP", + "externalMcpStreamableHttpHint": "Recomendado para o Claude Code, o Cursor e o Codex.", + "externalMcpToolArchiveTask": "Arquivar uma tarefa.", + "externalMcpToolCount_one": "{{count}} ferramenta", + "externalMcpToolCount_other": "{{count}} ferramentas", + "externalMcpToolCreateAgentProfile": "Criar um novo perfil de agente (modelo, aprovação automática).", + "externalMcpToolCreateExecutorProfile": "Criar um perfil com configuração e scripts de preparação/limpeza.", + "externalMcpToolCreateTask": "Criar uma tarefa de topo ou uma subtarefa sob um {{parentIdParam}} explícito.", + "externalMcpToolCreateWorkflow": "Criar um fluxo de trabalho.", + "externalMcpToolCreateWorkflowStep": "Adicionar uma nova coluna com prompt, cor e ganchos de eventos.", + "externalMcpToolDeleteAgentProfile": "Eliminar um perfil de agente.", + "externalMcpToolDeleteExecutorProfile": "Eliminar um perfil de executor.", + "externalMcpToolDeleteTask": "Eliminar permanentemente uma tarefa.", + "externalMcpToolDeleteWorkflow": "Eliminar um fluxo de trabalho e todos os seus passos (destrutivo).", + "externalMcpToolDeleteWorkflowStep": "Eliminar um passo (destrutivo).", + "externalMcpToolGetMcpConfig": "Ler o mapa de servidores MCP de um perfil.", + "externalMcpToolListAgentProfiles": "Listar os perfis de um agente.", + "externalMcpToolListAgents": "Listar os agentes configurados e os respetivos perfis.", + "externalMcpToolListExecutorProfiles": "Listar os perfis de um executor.", + "externalMcpToolListExecutors": "Listar todos os executores.", + "externalMcpToolListTasks": "Listar as tarefas de um fluxo de trabalho.", + "externalMcpToolListWorkflowSteps": "Listar todos os passos de um fluxo de trabalho.", + "externalMcpToolListWorkflows": "Listar os fluxos de trabalho de uma área de trabalho.", + "externalMcpToolListWorkspaces": "Listar todas as áreas de trabalho.", + "externalMcpToolMoveTask": "Mover uma tarefa para outro passo ou posição.", + "externalMcpToolReorderWorkflowSteps": "Definir a lista ordenada completa de IDs de passos.", + "externalMcpToolUpdateAgent": "Alternar o suporte a MCP ou definir o caminho da configuração.", + "externalMcpToolUpdateAgentProfile": "Atualizar o nome, o modelo ou a aprovação automática.", + "externalMcpToolUpdateExecutorProfile": "Atualizar um perfil de executor.", + "externalMcpToolUpdateMcpConfig": "Substituir o mapa de servidores MCP de um perfil.", + "externalMcpToolUpdateTaskState": "Definir o estado da tarefa: {{states}}.", + "externalMcpToolUpdateWorkflow": "Mudar o nome ou atualizar um fluxo de trabalho.", + "externalMcpToolUpdateWorkflowStep": "Editar as definições ou os eventos de um passo.", + "externalMcpToolsSummary": "{{tools}} em {{categories}} — expanda para pré-visualizar o que os agentes externos podem fazer.", + "externalProviders": "Fornecedores externos", + "externalProvidersDescription": "Configure fornecedores externos para as notificações remotas.", + "failedToConnectToBackend": "Não foi possível ligar ao backend", + "failedToSaveLayoutProfiles": "Não foi possível guardar os perfis de esquema", + "fileEditor": "Editor de ficheiros", + "fileListView": "Vista da lista de ficheiros", + "fixInvalidLspServerConfigurationBefore": "Corrija a configuração inválida do servidor LSP antes de guardar.", + "flatList": "Lista simples", + "fontFamily": "Tipo de letra", + "fontSize": "Tamanho da letra", + "frequencySeconds": "Frequência (segundos)", + "general": "Geral", + "health": "Saúde", + "home": "Início", + "hostedUrl": "URL alojado", + "icons": "Ícones", + "increaseHeight": "Aumentar a altura", + "increaseWidth": "Aumentar a largura", + "inferenceAgentAuthRequired": "Inicie sessão em {{name}} para carregar os modelos.", + "inferenceAgentNoModels": "{{name}} não anunciou modelos.", + "inferenceAgentNotConfigured": "{{name}} não está configurado para inferência.", + "inferenceAgentNotInstalled": "A CLI do {{name}} não está instalada nesta máquina.", + "inferenceAgentProbeFailed": "A sondagem de {{name}} falhou.", + "inferenceAgentProbing": "A configurar {{name}}…", + "inferenceAgentRefresh": "Atualizar", + "inferenceAgentRefreshing": "A atualizar…", + "inferenceAgentThisAgent": "este agente", + "inferenceAgentUnavailable": "{{name}} já não está disponível.", + "installed": "Instalado", + "integrationDescriptionAzureDevops": "Itens de trabalho do Azure Boards e pull requests do Azure Repos.", + "integrationDescriptionGithub": "Filas de revisão de PRs, vigilâncias de issues e credenciais OAuth.", + "integrationDescriptionGitlab": "Criação de merge requests, respostas em discussões e anfitriões autogeridos.", + "integrationDescriptionJira": "Credenciais do Atlassian Cloud e vigilâncias de issues por JQL.", + "integrationDescriptionLinear": "Chave de API pessoal e pré-definições da equipa.", + "integrationDescriptionSentry": "Token de autenticação, pré-definições de organização/projeto e exploração de issues.", + "integrationDescriptionSlack": "Credenciais de sessão do navegador e agente de triagem {{trigger}}.", + "invalidJson": "JSON inválido", + "keyboardShortcuts": "Atalhos de teclado", + "language": "Idioma", + "languageServers": "Servidores de linguagem", + "lastVisitedTask": "Última tarefa visitada", + "layout": "Esquema", + "layoutDirectionAbove": "Acima", + "layoutDirectionAboveInline": "acima", + "layoutDirectionBelow": "Abaixo", + "layoutDirectionBelowInline": "abaixo", + "layoutDirectionLeft": "Esquerda", + "layoutDirectionLeftInline": "à esquerda", + "layoutDirectionOfTarget": "{{direction}} de {{target}}", + "layoutDirectionRight": "Direita", + "layoutDirectionRightInline": "à direita", + "layoutEditorForProfile": "Editor de {{name}}", + "layoutProfile": "perfil de esquema", + "layoutProfileCopyName": "Cópia de {{name}}", + "layoutProfileName": "Nome do perfil de esquema", + "layoutProfileNamesMustNotBe": "Os nomes dos perfis de esquema não podem estar vazios", + "layoutProfiles": "Perfis de esquema", + "layoutProfilesWereNotSaved": "Os perfis de esquema não foram guardados", + "layouts": "Esquemas", + "ligatures": "Ligaduras", + "light": "Claro", + "loading": "A carregar...", + "loadingSecrets": "A carregar os segredos...", + "logsPageDescription": "Crie um ZIP de diagnóstico com os registos do frontend e do backend.", + "logsPageTitle": "Registos", + "lspConfigCustomBadge": "personalizado", + "lspInstallHintGo": "Executa \"{{command}}\". Requer que o Go esteja instalado.", + "lspInstallHintKotlin": "Instale {{binary}} manualmente no {{path}} do anfitrião da tarefa. Nas tarefas com Docker local, instale-o dentro do contentor da tarefa.", + "lspInstallHintPython": "Instala {{package}} através de {{manager}} em {{dir}}", + "lspInstallHintRust": "Transfere o binário {{binary}} das versões do GitHub para {{dir}}", + "lspInstallHintTypescript": "Instala {{server}} e {{runtime}} através de {{manager}} em {{dir}}", + "lspLanguageExperimental": "{{language}} (experimental)", + "makeTheOriginalDefaultLayoutThe": "Tornar o esquema Pré-definido original o esquema inicial das novas tarefas.", + "makeTheSelectedSplit40Pixels": "Tornar a divisão selecionada 40 píxeis mais estreita.", + "makeTheSelectedSplit40Pixels2": "Tornar a divisão selecionada 40 píxeis mais larga.", + "makeTheSelectedSplit40Pixels3": "Tornar a divisão selecionada 40 píxeis mais baixa.", + "makeTheSelectedSplit40Pixels4": "Tornar a divisão selecionada 40 píxeis mais alta.", + "makesAgentctlValuesAvailableToPlugins": "Disponibiliza os valores do agentctl a plugins e outros consumidores. A barra de estado incorporada continua limitada ao anfitrião.", + "manageApiKeysAndCredentialsSecrets": "Faça a gestão das chaves de API e das credenciais. Os segredos são guardados encriptados e injetados nos ambientes dos agentes através das variáveis de ambiente do perfil de executor.", + "globalScope": "Global", + "workspaceScope": "Área de trabalho", + "workspaceSecretsDescription": "Faça a gestão dos segredos disponíveis para os repositórios desta área de trabalho. Os perfis de agente e de executor partilhados só podem usar segredos Globais.", + "revealSecretNamed": "Revelar o segredo {{name}}", + "hideSecretNamed": "Ocultar o segredo {{name}}", + "editSecretNamed": "Editar o segredo {{name}}", + "deleteSecretNamed": "Eliminar o segredo {{name}}", + "manageSpritesDevRemoteSandboxIntegration": "Faça a gestão da integração de sandboxes remotas do Sprites.dev para executar agentes em ambientes isolados na nuvem.", + "manualInstallRequired": "É necessária instalação manual", + "markMessagesThatArrivedWhileA": "Marca as mensagens que chegaram enquanto a tarefa esteve fora de vista. Tem efeito imediato.", + "mcpAffectedToolsHelp": "<0>create_task_kandev cria uma tarefa separada. <3>spawn_session_kandev adiciona uma sessão à tarefa atual, pelo que não usa esta preferência.", + "mcpCreateTaskScope": "<0>create_task_kandev cria novas tarefas e subtarefas. Esta definição aplica-se apenas quando a chamada omite <4>agent_profile_id.", + "mcpSpawnSessionScope": "<0>spawn_session_kandev e as tarefas que criar não são afetados. Um perfil explicitamente selecionado prevalece sempre.", + "mcpTaskDefaultsAndArchiveSafeguards": "Pré-definições de tarefas MCP, salvaguardas de arquivo e preferências de transcrição", + "mcpTaskProfileCurrentTask": "Perfil da tarefa atual", + "mcpTaskProfileCurrentTaskDescription": "A nova tarefa usa o mesmo perfil da tarefa que a criou. Escolha esta opção quando o trabalho de seguimento precisar do mesmo modelo e da mesma configuração de agente. Isto pode reutilizar um perfil mais dispendioso.", + "mcpTaskProfileWorkspaceDefault": "Perfil pré-definido da área de trabalho", + "mcpTaskProfileWorkspaceDefaultDescription": "A nova tarefa usa o perfil do seu fluxo de trabalho, se estiver definido; caso contrário, usa o perfil pré-definido da área de trabalho que recebe a tarefa. Escolha esta opção para manter as tarefas criadas por agentes no modelo habitual da sua área de trabalho e evitar reutilizar acidentalmente um perfil dispendioso.", + "memory": "Memória %", + "mergeThisSplitIntoTheSplit": "Fundir esta divisão na divisão que contém {{target}}.", + "mergeWithTarget": "Fundir com {{target}}", + "messageSubmitKey": "Tecla de envio de mensagens", + "metrics": "Métricas", + "model": "Modelo", + "moveTabLeft": "Mover o separador para a esquerda", + "moveTabRight": "Mover o separador para a direita", + "moveTabToSplit": "Mover o separador para uma divisão", + "moveThisSplitOf": "Mover esta divisão {{direction}} de {{target}}.", + "moveThisTabIntoANewSplit": "Mover este separador para uma nova divisão ao lado da atual.", + "moveThisTabIntoAnotherExisting": "Mover este separador para outra divisão existente.", + "moveThisTabIntoTheSplit": "Mover este separador para a divisão que contém {{target}}.", + "moveThisTabOnePositionLeft": "Mover este separador uma posição para a esquerda dentro da sua divisão.", + "moveThisTabOnePositionRight": "Mover este separador uma posição para a direita dentro da sua divisão.", + "mustBeAJsonObject": "Tem de ser um objeto JSON", + "name": "Nome", + "nameEGOpenaiProductionKey": "Nome (ex.: Chave de produção da OpenAI)", + "nerdFonts": "Nerd Fonts", + "new": "Novo", + "newBrowserTab": "Novo separador do navegador", + "newCustomEditor": "Novo editor personalizado", + "newLayout": "Novo esquema", + "newSecret": "Novo segredo", + "newTaskSessionsWillUseThis": "As novas sessões de tarefa usam esta shell. As sessões existentes mantêm a shell atual.", + "noActiveSprites": "Não há sprites ativos.", + "noAppriseProviders": "Ainda não há fornecedores Apprise configurados.", + "noCustomEditorsYet": "Ainda não há editores personalizados.", + "noCustomProfiles": "Sem perfis personalizados", + "noEditorFound": "Nenhum editor encontrado.", + "noMatchingSettings": "Nenhuma definição corresponde", + "noProvidersConfiguredYet": "Ainda não há fornecedores configurados.", + "noSecretsYetAddYourFirst": "Ainda não há segredos. Adicione o seu primeiro segredo para começar.", + "notConfigured": "Não configurado", + "notInstalled": "Não instalado", + "notificationEventClarificationRequested": "O agente precisa de uma resposta", + "notificationEventClarificationRequestedDescription": "Notificar quando o agente lhe fizer explicitamente uma pergunta.", + "notificationEventOfficeInboxItem": "Item da caixa de entrada do Office", + "notificationEventOfficeInboxItemDescription": "Notificar quando um novo item da caixa de entrada precisar da sua atenção.", + "notificationEventToggle": "{{event}} para {{name}}", + "notificationEventTurnFinished": "Turno do agente concluído", + "notificationEventTurnFinishedDescription": "Notificar após cada turno do agente concluído.", + "notificationEventUpdateAvailable": "Atualização do Kandev disponível", + "notificationEventUpdateAvailableDescription": "Notificar quando estiver disponível uma versão mais recente do Kandev.", + "notificationEvents": "Eventos de notificação", + "notificationEventsDescription": "Selecione que fornecedores devem receber cada tipo de notificação.", + "notificationPermissionCheckFailed": "O Kandev não conseguiu verificar a permissão de notificações. Tente novamente e depois verifique as definições de notificações do navegador ou do sistema operativo.", + "notificationPermissionEnable": "Ativar", + "notificationPermissionEnabled": "Ativadas", + "notificationPermissionRetry": "Tentar novamente", + "notificationSound": "Som de notificação", + "notificationSoundDescription": "Reproduzir um som neste dispositivo quando ocorrer um turno de agente, uma pergunta ou um evento do Office selecionados.", + "notificationSoundSelect": "Som de notificação", + "notificationType": "Tipo de notificação", + "notifications": "Notificações", + "notificationsBlockedInBrowser": "As notificações estão bloqueadas no seu navegador. Ative-as nas definições do site e depois clique em Atualizar.", + "notificationsBlockedInOs": "As notificações estão bloqueadas nas definições de notificações de aplicações do seu sistema operativo. Ative-as aí e depois clique em Atualizar.", + "notificationsDescription": "Configure os fornecedores e escolha que eventos o devem alertar.", + "notificationsNotShowingHint": "Se não vir notificações, verifique as definições do seu sistema operativo e permita este navegador.", + "notificationsUnsupported": "Este navegador não suporta notificações no computador.", + "notifyWhenThisEventOccurs": "Notificar quando este evento ocorrer.", + "openKandevTo": "Abrir o Kandev em", + "openLinksIn": "Abrir as ligações em", + "openSettingsMenu": "Abrir o menu de definições", + "openSettingsMenuWithConnectionIssue": "{{description}} Abrir o menu de definições", + "opensAVsCodeRemoteSsh": "Abre um URL de VS Code Remote SSH usando o esquema (exemplo: {{example}}).", + "optionalScheme": "esquema opcional ({{schemes}})", + "optionalUsername": "nome de utilizador opcional", + "overrideSettingsSentToEachLanguage": "Substituir as definições enviadas a cada servidor de linguagem através de <2>{{method}}. Formato JSON.", + "password": "Palavra-passe", + "pickTheDefaultShellForTask": "Escolha a shell pré-definida das sessões de tarefa", + "pluginShortcuts": "Atalhos de plugins", + "preferredShell": "Shell preferida", + "pressAKeyCombo": "Prima uma combinação de teclas...", + "pressCmdCtrlEnterToSend": "Prima Cmd/Ctrl+Enter para enviar mensagens. Prima Enter para mudar de linha.", + "pressEnterToSendMessagesPress": "Prima Enter para enviar mensagens. Prima Shift+Enter para mudar de linha.", + "previewSound": "Pré-visualizar o som", + "profileForTasksCreatedByAgents": "Perfil das tarefas criadas por agentes", + "programming": "Programação", + "promptAdd": "Adicionar prompt", + "promptContentPlaceholder": "Conteúdo do prompt", + "promptCreateFailed": "Não foi possível criar o prompt", + "promptDelete": "Eliminar prompt", + "promptDeleteDescription": "Isto remove permanentemente <2>{{name}}. Esta ação não pode ser anulada.", + "promptDeleteFailed": "Não foi possível eliminar o prompt", + "promptDeleteThisPrompt": "este prompt", + "promptMentionHelp": "Use <1>{{token}} no campo de chat para inserir o conteúdo de um prompt. Os prompts são associados pelo nome e expandidos no local.", + "promptNamePlaceholder": "Nome do prompt", + "promptSaveFailed": "Não foi possível guardar o prompt", + "promptsCustomHeading": "Prompts personalizados", + "promptsEmpty": "Ainda não há prompts. Adicione o seu primeiro prompt para começar.", + "promptsInvalidReason": "O nome e o conteúdo do prompt são obrigatórios.", + "promptsLoading": "A carregar os prompts…", + "promptsPageDescription": "Crie excertos de prompt reutilizáveis para o campo de chat.", + "providerName": "Nome do fornecedor", + "providersAndNotificationEvents": "Fornecedores e eventos de notificação", + "pxRange": "px (8-24)", + "refreshNotificationPermission": "Atualizar a permissão de notificações", + "refreshPermissionStatus": "Atualizar o estado da permissão", + "remove": "Remover", + "removePanel": "Remover painel", + "removeThisTabFromTheSaved": "Remover este separador do esquema guardado.", + "removesTheHostMarkerAndProgress": "Remove o marcador de anfitrião e as barras de progresso, mantendo os ícones e os valores das métricas.", + "reset": "Repor", + "resetBuiltInLayout": "Repor o esquema incorporado", + "resetClearShortcut": "Repor (limpar o atalho)", + "resetToDefault": "Repor a pré-definição", + "resizeRepositionOrMergeTheSelected": "Redimensionar, reposicionar ou fundir a divisão selecionada.", + "resourceMetrics": "Métricas de recursos", + "restoreTheOriginalBuiltInLayout": "Restaurar o esquema incorporado original e descartar a sua substituição.", + "resumeTheMostRecentlyOpenedTask": "Retomar a tarefa aberta mais recentemente nesta área de trabalho, neste dispositivo.", + "retrySave": "Repetir a gravação", + "runningSprites": "Sprites em execução", + "sameShortcutAs": "Mesmo atalho que: {{shortcuts}}", + "saveAndLeave": "Guardar e sair", + "saveChanges": "Guardar alterações", + "saveChangesBeforeLeaving": "Guardar as alterações antes de sair?", + "saved": "Guardado", + "saving": "A guardar...", + "savingChanges": "A guardar as alterações", + "searchEditors": "Pesquisar editores...", + "searchSettings": "Pesquisar nas definições", + "secretValue": "Valor do segredo", + "secrets": "Segredos", + "security": "Segurança", + "selectADefaultEditor": "Selecione um editor pré-definido", + "selectAShell": "Selecione uma shell", + "sendTestNotification": "Enviar notificação de teste", + "sendTestNotificationFor": "Enviar notificação de teste para {{name}}", + "serverConfiguration": "Configuração do servidor", + "setTheFontSizeForThe": "Defina o tamanho da letra do terminal. A pré-definição é 13px.", + "settings": "Definições", + "settingsSearchResults_one": "{{count}} definição correspondente", + "settingsSearchResults_other": "{{count}} definições correspondentes", + "shellOptionsUnavailable": "Opções de shell indisponíveis", + "shellTerminalFontsAndLinkBehavior": "Shell, tipos de letra do terminal e comportamento das ligações", + "showAnchoredPromptBar": "Mostrar a barra de prompt fixa", + "showCleanupDetailsAndSubtaskOptions": "Mostrar os detalhes da limpeza e as opções de subtarefas antes de iniciar um arquivo.", + "showHostMetricsInStatusBar": "Mostrar as métricas do anfitrião na barra de estado", + "showNewDividerInTranscripts": "Mostrar o separador Novas nas transcrições", + "showScrollToLastPrompt": "Mostrar o botão para ir ao último prompt", + "showScrollToStart": "Mostrar o botão para ir ao início", + "showTheControlThatJumpsTo": "Mostrar o controlo que salta para o início da transcrição.", + "showTheJumpControlAfterYour": "Mostrar o controlo de salto depois de o seu último prompt subir acima da transcrição.", + "showThePerSessionButtonThat": "Mostrar o botão, por sessão, que liga ou desliga temporariamente o deslocamento automático da transcrição. Ocultá-lo não altera a pré-definição: as novas transcrições continuam a deslocar-se automaticamente.", + "showTranscriptAutoScrollControl": "Mostrar o controlo de deslocamento automático da transcrição", + "showsKandevHostValuesOnlyCollection": "Mostra apenas os valores do anfitrião do Kandev. A recolha começa enquanto um cliente os apresenta.", + "simplifiedMetrics": "Métricas simplificadas", + "sleepInhibitionActive": "Ativo enquanto uma tarefa está a arrancar ou em execução.", + "sleepInhibitionAdminOnly": "Só os administradores podem alterar esta definição, que abrange toda a instalação.", + "sleepInhibitionAvailable": "Disponível; não há nenhum pedido ativo.", + "sleepInhibitionCaveat": "As implementações em contentores, Kubernetes, executores remotos e sempre ativas costumam deixar isto desativado. Não mantém o ecrã ligado nem anula uma ação de suspensão explícita do utilizador.", + "sleepInhibitionDescription": "Manter o anfitrião do backend do Kandev disponível enquanto uma tarefa está a arrancar ou em execução.", + "sleepInhibitionInfoLabel": "Como funciona a prevenção da suspensão do anfitrião", + "sleepInhibitionInfoLinux": "No Linux, é pedido ao systemd-logind através de D-Bus com <0>{{method}}. O Kandev mantém aberto o ficheiro devolvido até não restar nenhuma tarefa em curso.", + "sleepInhibitionInfoMacos": "No macOS, é executado <0>{{command}}. A opção <1>{{idleOption}} impede a suspensão do sistema por inatividade. A opção <2>{{waitOption}} termina o assistente quando o backend sai.", + "sleepInhibitionInfoRelease": "O pedido não mantém o ecrã ligado nem anula uma ação de suspensão explícita do utilizador.", + "sleepInhibitionInfoTitle": "Como o Kandev impede a suspensão do anfitrião", + "sleepInhibitionInfoTrigger": "O backend mantém um pedido de prevenção de suspensão enquanto houver alguma tarefa a arrancar ou em execução.", + "sleepInhibitionInfoWindows": "No Windows, é chamada <0>{{api}} com flags de suspensão do sistema. O Kandev limpa o pedido quando não resta nenhuma tarefa em curso.", + "sleepInhibitionLoadFailed": "Não foi possível carregar as definições de suspensão do anfitrião.", + "sleepInhibitionLoading": "A carregar as definições de suspensão do anfitrião…", + "sleepInhibitionRequestFailed": "O pedido de suspensão do anfitrião falhou; as tarefas continuam normalmente.", + "sleepInhibitionRetry": "Tentar novamente carregar as definições de suspensão do anfitrião", + "sleepInhibitionSaveFailed": "Não foi possível guardar as definições de suspensão do anfitrião.", + "sleepInhibitionServiceUnavailable": "O serviço de suspensão do anfitrião não está disponível.", + "sleepInhibitionStatusLabel": "Estado da suspensão do anfitrião", + "sleepInhibitionSwitchHint": "Desligado por pré-definição. Isto pode consumir mais bateria ou energia e afeta apenas o anfitrião do backend.", + "sleepInhibitionSwitchLabel": "Impedir a suspensão do sistema por inatividade", + "sleepInhibitionTitle": "Impedir a suspensão do anfitrião enquanto há tarefas em execução", + "sleepInhibitionUnsupported": "Indisponível nesta plataforma de backend.", + "soundPresetChime": "Chime", + "soundPresetDing": "Ding", + "soundPresetPlim": "Plim", + "soundPresetPop": "Pop", + "splitTab": "Dividir o separador", + "spriteHealthCold": "Frio", + "spriteHealthFailed": "Falhou", + "spriteHealthHealthy": "Saudável", + "spriteHealthRunning": "Em execução", + "spriteHealthStarting": "A iniciar", + "spriteHealthStopped": "Parado", + "spriteHealthStopping": "A parar", + "spriteHealthUnhealthy": "Não saudável", + "spriteHealthUnknown": "Desconhecido", + "sprites": "Sprites", + "spritesDevProvidesEphemeralCloudSandboxes": "O Sprites.dev disponibiliza sandboxes efémeras na nuvem para executar agentes remotamente.", + "startOnYourSavedKanbanPipelineOrList": "Começar na sua vista Kanban, Pipeline ou Lista guardada.", + "startupPage": "Página de arranque", + "statusWithConnectionIssue": "Estado. {{description}}", + "submitShortcut": "Atalho de envio", + "supportedEditors": "Editores suportados", + "supportsPlaceholders": "Aceita os marcadores: {{placeholders}}", + "systemDefault": "Pré-definição do sistema", + "systemLoad1Min": "Carga do sistema (1 min)", + "taskActions": "Ações da tarefa", + "taskOverview": "Visão geral da tarefa", + "taskWorkbenchLayoutProfilesAndDefaults": "Perfis de esquema e pré-definições da bancada de tarefas", + "terminal": "Terminal", + "terminalFont": "Tipo de letra do terminal", + "terminalFontSize": "Tamanho da letra do terminal", + "terminalFontSizeMustBeA": "O tamanho da letra do terminal tem de ser um número entre 8 e 24.", + "terminalLinks": "Ligações no terminal", + "testConnection": "Testar a ligação", + "testNotificationBody": "Se consegue ler isto, as notificações do navegador estão a funcionar.", + "testNotificationTitle": "Notificação de teste", + "theBuiltInDefaultLayoutWill": "O esquema Pré-definido incorporado passa a ser a pré-definição.", + "themeMetricsAndChangesPanelPreferences": "Tema, página de arranque, métricas e preferências do painel de alterações", + "thisAppliesWhenKandevStarts": "Isto aplica-se quando o Kandev arranca ou quando abre a sua página inicial simples. O Início, o Voltar e a navegação pelos fluxos de trabalho abrem sempre a visão geral da tarefa.", + "thisLayoutIsUsedAsThe": "Este esquema é usado como esquema inicial das novas tarefas.", + "thisPageHasUnsavedChangesSave": "Esta página tem alterações por guardar. Guarde-as, descarte-as ou continue a editar.", + "thisProfileWillBeRemovedWhen": "Este perfil será removido quando guardar.", + "thisSecret": "este segredo", + "thisWillPermanentlyRemoveSecret": "Isto remove permanentemente <2>{{name}}. Esta ação não pode ser anulada.", + "tokens": "Tokens", + "transcriptNavigation": "Navegação na transcrição", + "tree": "Árvore", + "unableToConnect": "Não foi possível estabelecer ligação.", + "unavailable": "Indisponível", + "unbound": "Sem atribuição", + "unreadMessages": "Mensagens não lidas", + "untitledLayout": "Esquema sem título", + "updateChannel": "Canal de atualizações", + "updateChannelDescription": "Escolha que versões este serviço gerido verifica e aplica.", + "updateChannelLatestNightly": "Nightly mais recente", + "updateChannelLatestRelease": "Versão mais recente", + "updateChannelNightly": "Nightly", + "updateChannelNightlyDescription": "Compilações de pré-lançamento a partir de main, através de npm, para toda a instalação. Aplicar usa exatamente a versão apresentada.", + "updateChannelRequiresManagedService": "As atualizações Nightly exigem um serviço de utilizador npm ou npx gerido pelo Kandev.", + "updateChannelRequiresNpmInstallation": "As atualizações Nightly só estão disponíveis em instalações npm ou npx.", + "updateChannelRequiresServiceMetadata": "As atualizações Nightly exigem metadados de serviço do Kandev válidos.", + "updateChannelRequiresUserService": "As atualizações Nightly só estão disponíveis em serviços de utilizador.", + "updateChannelSaveFailed": "Não foi possível guardar o canal de atualizações. Tente novamente.", + "updateChannelSavingNotice": "A guardar a mudança de canal antes de procurar ou aplicar uma atualização.", + "updateChannelSettingsUnavailable": "As definições do canal de atualizações não estão disponíveis.", + "updateChannelStable": "Estável", + "updateChannelStableDescription": "Versões assinadas no GitHub. Recomendado para a maioria dos utilizadores.", + "updateChannelUnavailable": "O canal de atualizações Nightly não está disponível nesta instalação.", + "updateChannelUnsavedNotice": "Guarde as alterações de canal antes de procurar ou aplicar uma atualização.", + "updateChannelUnsupportedServiceManager": "Este gestor de serviços não suporta atualizações nightly.", + "uptime": "Tempo ativo", + "useAgentForNewTaskTitles": "Usar o agente para os títulos das novas tarefas", + "useAsDefault": "Usar como pré-definição", + "useBuiltInDefault": "Usar o Pré-definido incorporado", + "useThisLayoutAsTheStarting": "Usar este esquema como esquema inicial das novas tarefas.", + "useThisSettingWhenAnAgent": "Use esta definição quando um agente chamar uma ferramenta MCP do Kandev que cria uma tarefa. Se a chamada não escolher um perfil, o Kandev tem de atribuir um perfil de agente à nova tarefa. Esse perfil controla o agente, o modelo e a configuração da tarefa.", + "usefulWhenKandevIsSelfHosted": "Útil quando o Kandev está alojado por si num servidor remoto e quer uma vista leve dos recursos da máquina a partir da barra de estado global ou da gaveta de Estado no telemóvel.", + "utilityActionsTitle": "Ações", + "utilityAddCustomAgent": "Adicionar", + "utilityAgentDescriptionLabel": "Descrição", + "utilityAgentDescriptionPlaceholder": "Breve descrição do que este agente faz", + "utilityAgentDialogCreate": "Criar agente", + "utilityAgentDialogCreateTitle": "Criar agente utilitário", + "utilityAgentDialogEditTitle": "Editar agente utilitário", + "utilityAgentDialogSave": "Guardar alterações", + "utilityAgentNamePlaceholder": "ex.: commit-message", + "utilityAgentPromptHint": "Escreva <1>{{sigil}} para ver as variáveis disponíveis com preenchimento automático", + "utilityAgentPromptTemplate": "Modelo de prompt", + "utilityAgents": "Agentes utilitários", + "utilityAgentsPageDescription": "Assistentes de IA de utilização única para commits, PRs e prompts.", + "utilityCustomAgentsDescription": "Crie os seus próprios agentes utilitários com prompts personalizados.", + "utilityCustomAgentsEmpty": "Não há agentes utilitários personalizados.", + "utilityCustomAgentsTitle": "Agentes utilitários personalizados", + "utilityDefaultModelAriaLabel": "Definições do modelo utilitário pré-definido", + "utilityDefaultModelDescription": "Selecione o modelo pré-definido usado por todas as ações utilitárias incorporadas.", + "utilityDefaultModelTitle": "Modelo pré-definido dos agentes utilitários", + "utilityDefaultWithModel": "Pré-definido ({{model}})", + "utilityModelNotConfigured": "Não configurado", + "utilitySelectAgent": "Selecionar agente...", + "utilitySelectModel": "Selecionar modelo...", + "viewAvailableSettings": "Ver as definições disponíveis", + "visualEditorUnavailable": "Editor visual indisponível", + "voiceActivation": "Ativação", + "voiceActivationHold": "Manter premido para falar", + "voiceActivationToggle": "Clicar para iniciar / parar", + "voiceAutoSend": "Enviar automaticamente após a transcrição", + "voiceAutoSendDescription": "Submeter a mensagem assim que a transcrição for inserida.", + "voiceBehavior": "Comportamento", + "voiceEnableDescription": "Quando está desligado, o botão de voz fica totalmente oculto e não corre nenhum código relacionado com voz. As definições abaixo são preservadas e voltam a ser aplicadas quando o reativar.", + "voiceEnableLabel": "Mostrar o botão de microfone no compositor de chat", + "voiceEnableTitle": "Ativar a entrada de voz", + "voiceEngineAuto": "Automático", + "voiceEngineAutoDescription": "Usar o melhor motor disponível neste navegador.", + "voiceEngineBadgeLocal": "Local", + "voiceEngineBadgeServer": "Servidor", + "voiceEngineTitle": "Motor de transcrição", + "voiceEngineUnsupported": "Não suportado neste navegador.", + "voiceEngineWebSpeech": "Web Speech (no navegador)", + "voiceEngineWebSpeechDescription": "Gratuito, instantâneo, usa o reconhecimento de fala incorporado do seu navegador.", + "voiceEngineWhisperServer": "Whisper Server (OpenAI)", + "voiceEngineWhisperServerDescription": "Envia o áudio para o backend, que o reencaminha para a API Whisper da OpenAI. Requer uma chave de API configurada no servidor.", + "voiceEngineWhisperWeb": "Whisper Web (privado, no navegador)", + "voiceEngineWhisperWebDescription": "Executa o OpenAI Whisper inteiramente neste dispositivo. A primeira utilização transfere o modelo (40–240 MB).", + "voiceLanguageAuto": "Detetar automaticamente (idioma do navegador)", + "voiceLanguageDeDe": "Alemão", + "voiceLanguageEnGb": "Inglês (Reino Unido)", + "voiceLanguageEnUs": "Inglês (Estados Unidos)", + "voiceLanguageEsEs": "Espanhol (Espanha)", + "voiceLanguageEsMx": "Espanhol (México)", + "voiceLanguageFrFr": "Francês", + "voiceLanguageHint": "A qualidade do reconhecimento baixa muito quando o idioma não corresponde ao que está a falar.", + "voiceLanguageItIt": "Italiano", + "voiceLanguageJaJp": "Japonês", + "voiceLanguagePtBr": "Português (Brasil)", + "voiceLanguagePtPt": "Português (Portugal)", + "voiceLanguageZhCn": "Chinês (simplificado)", + "voiceLanguagesGroup": "Idiomas", + "voiceMode": "Modo de voz", + "voiceModePageDescription": "Configure como funciona a entrada de voz no compositor de chat.", + "voiceShortcutHint": "Clique no atalho para gravar uma nova combinação de teclas. Todos os atalhos de teclado também podem ser editados nas Definições gerais.", + "voiceShortcutTitle": "Atalho de {{shortcut}}", + "voiceUnavailableInsecure": "As APIs de microfone exigem {{secureScheme}} ou {{localhostHost}}. Parece estar numa origem {{insecureScheme}} insegura — carregue esta página em {{secureScheme}} (ou {{localhostUrl}}) para ativar a entrada de voz.", + "voiceUnavailableTitle": "A entrada de voz não está disponível neste navegador.", + "voiceUnavailableUnsupported": "O seu navegador não expõe a Web Speech API nem o MediaRecorder. Experimente o Chrome, o Edge ou o Safari 14.5+.", + "voiceWhisperBase": "Base", + "voiceWhisperBaseHint": "Pré-definição equilibrada", + "voiceWhisperModelHint": "O modelo é transferido na primeira utilização e fica em cache no seu navegador. Mudar de modelo desencadeia outra transferência da próxima vez que gravar.", + "voiceWhisperModelTitle": "Modelo do Whisper Web", + "voiceWhisperSmall": "Small", + "voiceWhisperSmallHint": "Melhor precisão, carregamento mais lento", + "voiceWhisperTiny": "Tiny", + "voiceWhisperTinyHint": "Mais rápido, menor precisão", + "vsCodeRemoteSsh": "VS Code Remote SSH", + "whenEnabledInstallYourProjectS": "Quando está ativado, instale as dependências do seu projeto (por exemplo, <2>{{command}} através dos scripts de configuração do repositório) para evitar erros de tipos por falta de dependências." +} diff --git a/apps/web/src/locales/pt-pt/sidebar.json b/apps/web/src/locales/pt-pt/sidebar.json new file mode 100644 index 0000000000..6c91c1d3ef --- /dev/null +++ b/apps/web/src/locales/pt-pt/sidebar.json @@ -0,0 +1,94 @@ +{ + "account": "Conta", + "archivedLoadFailed": "Não foi possível carregar as tarefas arquivadas", + "retry": "Tentar novamente", + "activeWorkspaceBadge": "Ativa", + "activity": "Atividade", + "addAgent": "Adicionar agente", + "addProject": "Adicionar projeto", + "addWorkspace": "Adicionar área de trabalho", + "agentTopology": "Topologia de agentes", + "apiTokens": "Tokens de API", + "applicationStatus": "Estado da aplicação", + "applicationStatusItems": "Itens do estado da aplicação", + "closeSettings": "Fechar as definições", + "collapseGroup": "Recolher {{label}}", + "collapseSidebar": "Recolher a barra lateral", + "connected": "Ligado", + "connectedToKandev": "Ligado ao Kandev", + "connecting": "A ligar", + "connectingToKandev": "A ligar ao Kandev", + "connection": "Ligação", + "connectionError": "Erro de ligação", + "connectionErrorDetail": "Erro de ligação: {{error}}", + "connectionLost": "Ligação perdida", + "connectionLostDescription": "Ligação perdida há pelo menos 10 segundos. As atualizações em direto podem estar desatualizadas.", + "connectionUnavailable": "Ligação indisponível", + "connectionUnstable": "Ligação instável", + "connectionUnstableDescription": "Ligação instável. A voltar a ligar ao Kandev.", + "costs": "Custos", + "enabledBadge": "Ativado", + "expandGroup": "Expandir {{label}}", + "expandSidebar": "Expandir a barra lateral", + "filtersAndSort": "Filtros e ordenação", + "home": "Início", + "improveKandev": "Melhorar o Kandev", + "inbox": "Caixa de entrada", + "kanban": "Kanban", + "kandevHome": "Início do Kandev", + "logOut": "Terminar sessão", + "maxViews_one": "máx. {{count}}", + "maxViews_other": "máx. {{count}}", + "newKanbanWorkspace": "Nova área de trabalho kanban", + "newOfficeWorkspace": "Nova área de trabalho de escritório", + "newTask": "Nova tarefa", + "newView": "Nova vista", + "newViewUnavailable": "Nova vista indisponível. {{reason}}", + "noAgentsYet": "Ainda não há agentes", + "noProjectsYet": "Ainda não há projetos", + "noTasksYet": "Ainda não há tarefas.", + "noWorkspaces": "Nenhuma área de trabalho", + "office": "Escritório", + "offline": "Sem ligação", + "openStatus": "Abrir estado", + "pausedBadge": "em pausa", + "preferences": "Preferências", + "profileAndPassword": "Perfil e palavra-passe", + "projects": "Projetos", + "quickChat": "Chat rápido", + "quickTerminal": "Terminal rápido", + "quickChatTerminals": "Terminais", + "quickChatNewAgent": "Novo agente", + "quickChatNewTerminal": "Novo terminal", + "quickChatClose": "Fechar o chat rápido", + "quickChatTerminalTab_one": "Terminal {{count}}", + "quickChatTerminalTab_other": "Terminal {{count}}", + "quickChatCloseTerminal_one": "Fechar o Terminal {{count}}", + "quickChatCloseTerminal_other": "Fechar o Terminal {{count}}", + "quickChatTerminalError": "Erro do terminal: {{error}}", + "quickChatTerminalUnknownError": "Não foi possível iniciar o terminal.", + "quickChatTerminalConnecting": "A ligar ao terminal…", + "quickChatTerminalExited": "O terminal terminou.", + "quickChatTerminalExitedWithCode": "O terminal terminou com o código {{code}}.", + "quickChatAdd": "Adicionar ou mudar de separador", + "reconnecting": "A voltar a ligar", + "reconnectingToKandev": "A voltar a ligar ao Kandev", + "repositories": "Repositórios", + "resizeSidebar": "Redimensionar a barra lateral", + "routines": "Rotinas", + "routing": "Encaminhamento", + "runErrors_one": "{{count}} erro", + "runErrors_other": "{{count}} erros", + "saveDiscardFirst": "Guarde/descarte primeiro", + "skills": "Competências", + "stats": "Estatísticas", + "switchWorkspace": "Mudar de área de trabalho", + "tasks": "Tarefas", + "toggleTheme": "Alternar o tema", + "unsavedFilterChanges": "Alterações de filtro por guardar", + "viewAll": "Todas", + "viewLabel": "Vista: {{name}}", + "whatsNew": "Novidades", + "work": "Trabalho", + "workspaceFallback": "Área de trabalho" +} diff --git a/apps/web/src/locales/pt-pt/slack.json b/apps/web/src/locales/pt-pt/slack.json new file mode 100644 index 0000000000..424ea2d335 --- /dev/null +++ b/apps/web/src/locales/pt-pt/slack.json @@ -0,0 +1,39 @@ +{ + "agentDisabled": "{{agent}} — desativado", + "agentNotConfigured": "{{agent}} — não configurado", + "agentUsesDefaultModel": "{{name}} (usa o modelo pré-definido)", + "agentWithModel": "{{name}} ({{model}})", + "chooseUtilityAgent": "Escolher um agente utilitário", + "commandPrefix": "Prefixo de comando", + "commandPrefixHelp": "As mensagens que escrever no Slack começadas por este prefixo tornam-se tarefas do Kandev. Pré-definição:", + "configurationRemoved": "Configuração do Slack removida", + "configurationSaved": "Configuração do Slack guardada", + "connectedAs": "Ligado como {{name}}", + "connectedAsWithTeam": "Ligado como {{name}} ({{team}})", + "cookieValue": "Valor do cookie {{cookie}}", + "createUtilityAgentFirst": "Crie um em Definições → Agentes utilitários", + "credentialsHelp": "Abra o Slack no seu navegador e copie o valor do cookie `{{cookie}}` e o token `{{prefix}}` do armazenamento local. Ambos são obrigatórios.", + "deleteFailed": "Não foi possível eliminar: {{error}}", + "failedToLoadConfig": "Não foi possível carregar a configuração do Slack: {{error}}", + "integrationDescription": "Capture tópicos do Slack como tarefas na área de trabalho selecionada. Escreva {{example}} em qualquer tópico a que tenha acesso e o agente utilitário configurado cria a tarefa.", + "integrationTitle": "Integração com o Slack", + "loadingEllipsis": "A carregar…", + "pasteCredentialsToTest": "Cole um token e um cookie para testar a ligação", + "pollingInterval": "Intervalo de sondagem (segundos)", + "pollingIntervalHelp": "Com que frequência o Slack é consultado à procura de novas mensagens <1>{{prefix}}. Menor = mais reativo, maior = menos chamadas à API do Slack. Intervalo: {{min}}–{{max}}s. Pré-definição: {{fallback}}s.", + "promptTokensHelp": "Os prompts personalizados podem referir <1>{{tokens}}. Quando pelo menos um é usado, o seu modelo assume o prompt completo; caso contrário, o prompt de sistema pré-definido de triagem do Slack é acrescentado automaticamente no início.", + "removeConfiguration": "Remover configuração", + "removeConfigurationConfirm": "Remover a configuração do Slack?", + "removing": "A remover...", + "saveFailed": "Não foi possível guardar: {{error}}", + "savedLeaveBlank": "(guardado — deixe em branco para manter)", + "secretsRequired": "São obrigatórios um token de sessão e um cookie.", + "sessionToken": "Token de sessão ({{prefix}}…)", + "testConnection": "Testar a ligação", + "testFailed": "Falhou: {{error}}", + "testing": "A testar...", + "triageAgent": "Agente de triagem", + "triageAgentHelp": "O agente utilitário que interpreta cada mensagem do Slack e cria a tarefa do Kandev. É executado com as ferramentas MCP do Kandev ligadas ({{tools}}), pelo que escolhe a área de trabalho + fluxo de trabalho + repositório de destino a partir do contexto. Os agentes incorporados usam o seu modelo pré-definido em <4>Definições → Agentes utilitários.", + "triageAgentRequired": "É obrigatório indicar um agente de triagem.", + "unsupportedAuthWarning": "<0>Autenticação por sessão do navegador (não suportada): o Slack roda os cookies de sessão com frequência, pelo que poderá ter de voltar a ligar quando a autenticação expirar. As instalações de bot e o OAuth de utilizador estão no roteiro." +} diff --git a/apps/web/src/locales/pt-pt/stats.json b/apps/web/src/locales/pt-pt/stats.json new file mode 100644 index 0000000000..2f8990cda0 --- /dev/null +++ b/apps/web/src/locales/pt-pt/stats.json @@ -0,0 +1,83 @@ +{ + "activity": "Atividade", + "activityRange": "Atividade ({{range}})", + "averages": "Médias", + "avgPerTask": "{{duration}} em média por tarefa", + "bestMonth": "Melhor mês", + "bestWeekday": "Melhor dia da semana", + "bestYear": "Melhor ano", + "bucket": "Intervalo", + "bucketDay": "Dia", + "bucketMonth": "Mês", + "bucketWeek": "Semana", + "completedCount_one": "{{count}} concluída", + "completedCount_other": "{{count}} concluídas", + "completedTasksOverTime": "Tarefas concluídas ao longo do tempo", + "completion": "Conclusão", + "completionRate": "Taxa de conclusão", + "copied": "Copiado", + "copyStats": "Copiar estatísticas", + "durationSpan": "período {{duration}}", + "errorLoadingStats": "Erro ao carregar as estatísticas: {{error}}", + "filesChangedCount_one": "{{count}} ficheiro alterado", + "filesChangedCount_other": "{{count}} ficheiros alterados", + "gitActivity": "Atividade do Git", + "inProgressCount_one": "{{count}} em curso", + "inProgressCount_other": "{{count}} em curso", + "less": "Menos", + "longestTasks": "Tarefas mais longas", + "meanDurationOfCompletedTurnsExcluding": "Duração média dos turnos concluídos, excluindo turnos <1s, >=1h ou sem mensagens", + "meanMessageCountPerTurnSame": "Número médio de mensagens por turno, com as mesmas exclusões da duração do turno", + "messagesPerTask": "Mensagens por tarefa", + "messagesPerTurn": "Mensagens por turno", + "more": "Mais", + "mostCommits": "Mais commits", + "mostProductive": "Mais produtivo", + "mostTasks": "Mais tarefas", + "mostTime": "Mais tempo", + "noAgentUsageDataYet": "Ainda não há dados de utilização de agentes.", + "noCompletedTaskDataYet": "Ainda não há dados de tarefas concluídas.", + "noCompletedTasksYet": "Ainda não há tarefas concluídas.", + "noDataYet": "Ainda não há dados.", + "noGitActivityYet": "Ainda não há atividade do Git.", + "noRepositoryStatsYet": "Ainda não há estatísticas de repositórios.", + "overview": "Visão geral", + "quickestTasks": "Tarefas mais rápidas", + "rangeAllTime": "Desde sempre", + "rangeLastMonth": "Último mês", + "rangeLastWeek": "Última semana", + "rankedByActiveDuration": "Ordenadas pela duração ativa", + "repoLeaders": "Repositórios em destaque", + "repoMessagesCount_one": "{{count}} msg", + "repoMessagesCount_other": "{{count}} msgs", + "repoSessionsCount_one": "{{count}} sessão", + "repoSessionsCount_other": "{{count}} sessões", + "repoTasksCount_one": "{{count}} tarefa", + "repoTasksCount_other": "{{count}} tarefas", + "repoTurnsCount_one": "{{count}} turno", + "repoTurnsCount_other": "{{count}} turnos", + "repositoryActivity": "Atividade dos repositórios", + "selectAWorkspaceToViewStatistics": "Selecione uma área de trabalho para ver as estatísticas.", + "sessions": "Sessões", + "signal": "Sinal", + "statistics": "Estatísticas", + "tasks": "Tarefas", + "telemetry": "Telemetria", + "timeSpent": "Tempo despendido", + "toolCalls": "Chamadas de ferramentas", + "toolShare": "Quota de ferramentas", + "topAgents": "Principais agentes", + "topByMessages": "Principais por mensagens", + "topByTurns": "Principais por turnos", + "topRepositories": "Principais repositórios", + "totalMessages": "Total de mensagens", + "totalTurns": "Total de turnos", + "turnDuration": "Duração do turno", + "turnsMessagesCount": "{{turns}} turnos, {{messages}} mensagens", + "turnsMessagesMiddot": "{{turns}} turnos · {{messages}} mensagens", + "turnsMessagesPerSession": "{{turns}} turnos · {{messages}} mensagens por sessão", + "turnsPerTask": "Turnos por tarefa", + "userMsgs": "Msgs do utilizador", + "userShare": "Quota do utilizador", + "workload": "Carga de trabalho" +} diff --git a/apps/web/src/locales/pt-pt/system.json b/apps/web/src/locales/pt-pt/system.json new file mode 100644 index 0000000000..345b365db9 --- /dev/null +++ b/apps/web/src/locales/pt-pt/system.json @@ -0,0 +1,453 @@ +{ + "aboutArch": "Arquitetura", + "aboutBuildTime": "Data de compilação", + "aboutCommit": "Commit", + "aboutDocumentation": "Documentação", + "aboutGoVersion": "Versão do Go", + "aboutLoading": "A carregar...", + "aboutOs": "SO", + "aboutPageDescription": "Versão, metadados de compilação e ligações.", + "aboutReportIssue": "Comunicar um problema", + "aboutTitle": "Acerca do kandev", + "aboutVersion": "Versão", + "actionDone": "Concluído", + "actionFailed": "Falhou", + "actionRunning": "Em execução...", + "backupsColumnActions": "Ações", + "backupsColumnCreated": "Criada", + "backupsColumnKind": "Tipo", + "backupsColumnName": "Nome", + "backupsColumnSize": "Tamanho", + "backupsCreate": "Criar instantâneo", + "backupsCreateFailed": "Não foi possível criar o instantâneo", + "backupsCreateTimeout": "A criação do instantâneo não terminou em {{seconds}}s", + "backupsCreating": "A criar...", + "backupsDeleteFailed": "Não foi possível eliminar", + "backupsDeleteLabel": "Eliminar {{name}}", + "backupsDownloadLabel": "Transferir {{name}}", + "backupsEmpty": "Ainda não há cópias de segurança. Os instantâneos criados automaticamente na atualização de versão ou manualmente através do botão acima aparecem aqui.", + "backupsHelp": "Uma cópia de segurança é uma cópia integral da base de dados do Kandev (tarefas, sessões, definições). O Kandev cria uma automaticamente antes de cada atualização de versão, para que possa reverter se algo correr mal. Também pode criar uma manualmente antes de operações arriscadas, como a reposição de fábrica.", + "backupsKindAuto": "automática", + "backupsKindManual": "manual", + "backupsLoading": "A carregar as cópias de segurança...", + "backupsPageDescription": "Instantâneos de {{command}} guardados em {{path}}.", + "backupsRestoreLabel": "Restaurar {{name}}", + "backupsRetention_one": "Só a cópia de segurança mais recente é mantida em disco.", + "backupsRetention_other": "Só as {{count}} cópias de segurança mais recentes são mantidas em disco.", + "backupsTitle": "Cópias de segurança", + "changelogEmpty": "Não há entradas no registo de alterações.", + "changelogViewOnGitHub": "Ver no GitHub", + "close": "Fechar", + "createUserDescription": "Cria uma conta diretamente com uma palavra-passe definida por si. Prefira uma ligação de convite quando o utilizador deve escolher a sua própria palavra-passe.", + "createUserDisplayName": "Nome a apresentar", + "createUserEmail": "E-mail", + "createUserFailed": "Não foi possível criar o utilizador.", + "createUserPassword": "Palavra-passe", + "createUserRole": "Função", + "createUserSubmit": "Criar utilizador", + "createUserSubmitting": "A criar...", + "createUserTitle": "Adicionar um utilizador", + "databaseDriver": "Driver", + "databaseFactoryReset": "Reposição de fábrica", + "databaseFactoryResetHelp": "Apaga TODOS os dados do Kandev: tarefas, sessões, definições, repositórios e worktrees. Não é possível anular. É feita primeiro uma cópia de segurança, mas restaurá-la exige usar a página Cópias de segurança depois da reposição. Use isto apenas se quiser recomeçar do zero.", + "databaseLastBackup": "Última cópia de segurança", + "databaseLoading": "A carregar as estatísticas da base de dados...", + "databaseMaintenanceUnavailable": "As ações de manutenção do SQLite não estão disponíveis para {{driver}}.", + "databaseNever": "Nunca", + "databaseOptimize": "Otimizar", + "databaseOptimizeHelp": "Pede à base de dados que atualize os índices internos para que as consultas comuns se mantenham rápidas. Execute depois de eliminar muitos dados ou se a aplicação parecer lenta. Rápido e seguro - nenhum dado é alterado.", + "databasePageDescription": "Driver da base de dados, tamanho e controlos de manutenção disponíveis.", + "databasePath": "Caminho", + "databaseRunOptimize": "Executar a otimização", + "databaseRunVacuum": "Executar o vacuum", + "databaseSchemaVersion": "Versão do esquema", + "databaseSize": "Tamanho", + "databaseSizeLong": "Tamanho da base de dados", + "databaseTitle": "Base de dados", + "databaseVacuum": "Vacuum", + "databaseVacuumHelp": "Recupera o espaço não usado dentro do ficheiro da base de dados. O ficheiro pode crescer ao longo do tempo à medida que elimina tarefas ou sessões; o vacuum volta a compactá-lo. É seguro executá-lo a qualquer momento - não altera dados. Use-o de vez em quando se o tamanho da base de dados parecer elevado.", + "databaseWal": "WAL", + "databaseWalHelp": "Write-Ahead Log. O SQLite escreve primeiro as novas alterações neste ficheiro complementar e integra-as na base de dados principal ao longo do tempo. Um tamanho de WAL diferente de zero é normal - cresce temporariamente sob carga e volta a diminuir nos checkpoints. Executar o vacuum repõe-no.", + "databaseWhatIs": "O que é {{label}}?", + "desktopUpdateFailed": "A atualização da aplicação de ambiente de trabalho falhou", + "diskCalculating": "A calcular...", + "diskColumnPath": "Caminho", + "diskColumnSize": "Tamanho", + "diskComputedAt": "Calculado em {{at}}", + "diskOpen": "Abrir", + "diskRefresh": "Atualizar", + "diskRefreshed": "Atualizado", + "diskRefreshHelp": "Percorre todos os diretórios dentro da pasta de dados e soma os tamanhos dos ficheiros. Os resultados ficam em cache durante algumas horas; clique para calcular já valores novos. Pode demorar alguns segundos em áreas de trabalho grandes.", + "diskRefreshing": "A atualizar...", + "diskRowBackups": "Cópias de segurança", + "diskRowDataDir": "Diretório de dados", + "diskRowQuickChat": "Chat rápido", + "diskRowRepos": "Repositórios", + "diskRowSessions": "Sessões", + "diskRowTasks": "Tarefas", + "diskRowWorktrees": "Worktrees", + "diskTotal": "Total", + "diskUnmeasuredDirs": "Não foi possível medir alguns diretórios:", + "diskUsageTitle": "Utilização do disco", + "dismiss": "Dispensar", + "factoryResetCompleteBody": "Os dados do Kandev foram apagados. Feche e reabra a aplicação para começar de novo - o backend em execução mantém ligações à base de dados agora vazia e não reconstrói as suas caches enquanto não reiniciar. O instantâneo anterior à reposição está disponível na página Cópias de segurança, caso precise de reverter.", + "factoryResetCompleteTitle": "Reposição de fábrica concluída", + "factoryResetFailed": "Não foi possível repor", + "factoryResetPlaceholder": "Escreva {{token}} para confirmar", + "factoryResetRequestFailed": "O pedido de reposição falhou", + "factoryResetSnapshot": "É criado automaticamente um instantâneo em <1>{{path}} antes de a limpeza ser executada, para que possa restaurar a partir da página Cópias de segurança se mudar de ideias.", + "factoryResetTitle": "Reposição de fábrica", + "factoryResetTypeToConfirm": "Escreva <1>{{token}} para ativar o botão de confirmação. Depois de a limpeza terminar, ser-lhe-á pedido que feche e reabra o Kandev - o backend não reinicia automaticamente.", + "factoryResetWipes": "Isto apaga toda a instalação do kandev: base de dados, worktrees, clones de repositórios, sessões, tarefas e sessões de chat rápido.", + "factoryResetWiping": "A apagar os dados...", + "featureToggleDebug": "Depuração", + "featureToggleEnv": "Ambiente: {{envVar}}", + "featureToggleEnvControlled": "Controlado pelo ambiente de arranque", + "featureToggleExperimental": "Experimental", + "featureTogglePendingRestart": "Reinício pendente", + "featureToggleRequiresRestart": "Requer reinício", + "featureTogglesLoadError": "Não foi possível carregar os interruptores de funcionalidades.", + "featureTogglesLoadFailed": "Não foi possível carregar os interruptores de funcionalidades", + "featureTogglesLoading": "A carregar os interruptores de funcionalidades...", + "featureToggleSource": "Origem: {{source}}", + "featureToggleSourceDefault": "Pré-definição", + "featureToggleSourceEnv": "Ambiente", + "featureToggleSourceOverride": "Substituição guardada", + "featureTogglesPageDescription": "Faça a gestão dos interruptores de funcionalidades e de diagnóstico do Kandev.", + "featureTogglesRetry": "Tentar novamente", + "featureTogglesSaved": "Interruptores de funcionalidades guardados", + "featureToggleSwitchLabel": "Alternar {{label}}", + "featureToggleUseDefault": "Usar a pré-definição", + "healthAllPass": "Todas as verificações do sistema passam.", + "healthHealthy": "Saudável", + "healthIssue": "Problema", + "healthIssueCount_one": "{{count}} problema", + "healthIssueCount_other": "{{count}} problemas", + "healthLoading": "A carregar as verificações de saúde...", + "healthPassing": "A passar", + "healthSeverityError": "Erro", + "healthSeverityInfo": "Informação", + "healthSeverityWarning": "Aviso", + "healthSystemChecks": "Verificações do sistema", + "healthTitle": "Saúde", + "healthWhatsMonitored": "O que é monitorizado", + "inviteCopied": "Ligação de convite copiada", + "inviteCopy": "Copiar a ligação de convite", + "inviteCreate": "Criar ligação de convite", + "inviteCreating": "A criar...", + "inviteDescription": "Gera uma ligação de convite de utilização única. Deixe o e-mail em branco para criar uma ligação que qualquer pessoa pode usar para se registar com a função selecionada; defina um e-mail para associar o convite a esse endereço.", + "inviteDone": "Concluído", + "inviteEmailOptional": "E-mail (opcional)", + "inviteFailed": "Não foi possível criar o convite.", + "inviteReadyDescription": "Partilhe esta ligação com a pessoa convidada. É mostrada apenas uma vez — copie-a agora.", + "inviteReadyTitle": "Ligação de convite pronta", + "inviteTitle": "Convidar um utilizador", + "inviteUrlLabel": "Ligação de convite", + "jobStateDone": "Concluído", + "jobStateFailed": "Falhou", + "jobStateQueued": "Em fila", + "jobStateRunning": "Em execução", + "licensesCount": "{{visible}} de {{total}}", + "licensesEmpty": "Nenhuma entrada corresponde ao filtro.", + "licensesFilterPlaceholder": "Filtrar por nome, licença ou ecossistema...", + "licensesPageDescription": "Licenças de código aberto de todas as dependências npm e Go distribuídas com o kandev.", + "licensesSource": "origem", + "licensesStaleWarning": "As entradas de licenças Go foram reaproveitadas do manifesto no repositório porque a geração falhou. Volte a gerar as licenças quando o go-licenses estiver operacional para atualizar os dados das dependências Go.", + "licensesTitle": "Licenças de terceiros", + "licensesToggleLabel": "Mostrar o texto da licença de {{name}}", + "messageQueueAdminOnly": "Só os administradores podem alterar esta definição.", + "messageQueueConfigured": "Configurado:", + "messageQueueDescription": "Controle quantas mensagens pendentes cada sessão pode ter antes de o novo trabalho ser rejeitado.", + "messageQueueEffective": "Efetivo:", + "messageQueueEffectiveHelp": "O valor efetivo é usado nas novas admissões a partir de agora. As entradas já em fila não são removidas quando este valor é reduzido.", + "messageQueueEnvironmentLockTitle": "Gerido pelo ambiente", + "messageQueueEnvironmentLocked": "{{variable}} substitui a definição guardada. Altere o valor no ambiente e reinicie o Kandev para o voltar a editar aqui.", + "messageQueueLimitDescription": "Este limite aplica-se de imediato às mensagens recém-admitidas. Reduzi-lo nunca remove mensagens já em espera e as tentativas de entrega aceites mantêm-se seguras.", + "messageQueueLimitTitle": "Limite da fila por sessão", + "messageQueueLoadFailed": "Não foi possível carregar as definições da fila de mensagens.", + "messageQueueLoading": "A carregar as definições da fila de mensagens…", + "messageQueueMaximumLabel": "Máximo de mensagens por sessão", + "messageQueueRetry": "Tentar novamente", + "messageQueueSaveFailed": "Não foi possível guardar as definições da fila de mensagens.", + "messageQueueSourceDefault": "Pré-definição", + "messageQueueSourceEnvironment": "Ambiente", + "messageQueueSourceSetting": "Definição guardada", + "messageQueueTitle": "Fila de mensagens", + "messageQueueUnlimited": "Ilimitado", + "messageQueueUnlimitedHelp": "Defina 0 para ilimitado. Um número inteiro positivo rejeita novas mensagens depois de esse número estar pendente numa sessão.", + "messageQueueValidation": "Introduza um número inteiro igual ou superior a 0.", + "navAbout": "Acerca", + "navBackups": "Cópias de segurança", + "navDatabase": "Base de dados", + "navFeatureToggles": "Interruptores de funcionalidades", + "navLicenses": "Licenças", + "navLogs": "Registos", + "navStorage": "Armazenamento", + "navUpdates": "Atualizações", + "navUsers": "Utilizadores", + "reloadPage": "Recarregar a página", + "restartAction": "Reiniciar", + "restartManualHint": "Reinicie-o a partir do seu terminal ou gestor de serviços quando for conveniente.", + "restartPendingChanges": "As alterações guardadas aos interruptores serão aplicadas no próximo arranque do Kandev.", + "restartPhaseDoneBody": "O backend está novamente em execução. Recarregue a página para voltar a ligar com o estado mais recente dos interruptores de funcionalidades.", + "restartPhaseDoneTitle": "Kandev reiniciado", + "restartPhaseErrorBody": "Não foi possível concluir o reinício.", + "restartPhaseErrorTitle": "O reinício falhou", + "restartPhaseRestartingBody": "O Kandev está a parar e a arrancar de novo. Esta página deteta automaticamente o novo processo.", + "restartPhaseRestartingTitle": "A reiniciar o Kandev", + "restartPhaseStartingBody": "A preparar o pedido de reinício ao supervisor local.", + "restartPhaseStartingTitle": "A pedir o reinício", + "restartRequired": "É necessário reiniciar", + "restartStartFailed": "Não foi possível reiniciar o Kandev", + "restartSupportDetails": "Detalhes do suporte a reinício", + "restartSupportedHelp": "O reinício a partir desta página está disponível quando o Kandev corre sob um supervisor local suportado.", + "restartTimedOut": "O reinício está a demorar mais do que o esperado. Atualize para ver o estado atual.", + "restartUnsupportedHelp": "O reinício automático não está disponível em pré-visualizações de implementação, execuções em terminal não geridas ou modos de arranque sem supervisor de reinício.", + "restoreAction": "Restaurar", + "restoreBody": "Restaurar <1>{{name}} por cima da base de dados atual. Depois de a cópia preparada estar no lugar, ser-lhe-á pedido que feche e reabra o Kandev para que os novos dados sejam carregados de raiz - o backend não reinicia automaticamente.", + "restoreCompleteBody": "<0>{{name}} foi escrito por cima da base de dados atual. Feche e reabra o Kandev para carregar os dados restaurados - o backend em execução mantém ligações à versão anterior e continuará a devolver dados desatualizados até reiniciar.", + "restoreCompleteTitle": "Restauro concluído", + "restoreFailed": "Não foi possível restaurar", + "restorePlaceholder": "Escreva {{token}} para confirmar", + "restoreRequestFailed": "O pedido de restauro falhou", + "restoreTitle": "Restaurar instantâneo", + "restoreTypeToConfirm": "Escreva <1>{{token}} para ativar o botão de confirmação.", + "restoreWriting": "A escrever o instantâneo por cima da base de dados em uso...", + "selfUpdateDone": "Atualizado para a {{version}}.", + "selfUpdateDoneUnknown": "Atualizado para a versão mais recente.", + "selfUpdateFailed": "A atualização falhou.", + "selfUpdateHelperFailed": "O assistente de atualização não conseguiu arrancar. Verifique os registos do serviço.", + "selfUpdateInstalling": "A transferir e a instalar a {{version}}…", + "selfUpdateInstallingUnknown": "A transferir e a instalar a nova versão…", + "selfUpdateKeepOpen": "Mantenha esta página aberta. Será atualizada automaticamente quando a atualização terminar.", + "selfUpdateRestarting": "A reiniciar o Kandev — isto pode demorar até um minuto.", + "selfUpdateStartFailed": "Não foi possível iniciar a atualização", + "selfUpdateStarting": "A iniciar a atualização para a {{version}}…", + "selfUpdateStartingUnknown": "A iniciar a atualização para a nova versão…", + "selfUpdateTimedOut": "A atualização está a demorar mais do que o esperado. Atualize para ver a versão atual.", + "settingsRouteNotPorted": "Esta rota de definições é tratada pela shell da SPA, mas a sua página de cliente dedicada ainda está a ser migrada: <1>{{pathname}}", + "statusPageDescription": "Verificações de saúde, utilização do disco e resumo da versão.", + "storageAcknowledgeDaemon": "Reconhecer o daemon", + "storageAcknowledgeDedicatedFirst": "Reconheça primeiro um daemon do Docker dedicado.", + "storageActionFailed": "A ação de armazenamento falhou", + "storageActionPending": "Aguarde que a ação de armazenamento atual termine.", + "storageActionsDescription": "Analise para obter um retrato só de leitura ou execute as regras de limpeza ativadas quando quiser recuperar espaço de imediato.", + "storageActionsTitle": "Recuperar espaço em disco com segurança", + "storageAdoptCache": "Adotar a cache", + "storageAdoptDialogDescription": "O Kandev passa a poder rodar e colocar em quarentena a cache existente em {{path}}. Este caminho tem de ser absoluto e estar no mesmo sistema de ficheiros da reciclagem do Kandev.", + "storageAdoptDialogFallbackPath": "o caminho selecionado", + "storageAdoptDialogTitle": "Adotar uma cache de compilação do Go externa", + "storageAdoptionPending": "Aguarde que a adoção da cache do Go termine.", + "storageAnalysisComplete": "Análise concluída", + "storageAnalysisDescription": "Uma decomposição só de leitura da utilização atual e do espaço recuperável. Execute a Análise de vez em quando para atualizar estas estimativas; nunca elimina nem move nada.", + "storageAnalysisFailed": "A análise falhou", + "storageAnalysisRunning": "A análise do armazenamento ainda está em curso.", + "storageAnalysisTitle": "Análise do armazenamento", + "storageAnalyze": "Analisar", + "storageAnalyzing": "A analisar...", + "storageBuildCacheKeepHelp": "O Docker mantém aproximadamente esta quantidade de cache de compilação ao limpar os registos elegíveis. Um valor maior preserva mais camadas de compilação reutilizáveis, mas recupera menos espaço em disco.", + "storageBuildCacheKeepLabel": "Cache de compilação a reter (GB)", + "storageBuildCacheUnusedHelp": "Só são elegíveis os registos de cache de compilação mais antigos do que este limiar de tempo sem utilização. Aumentá-lo protege durante mais tempo as camadas de compilação recentes.", + "storageBuildCacheUnusedLabel": "A cache de compilação tem de estar sem utilização há (horas)", + "storageBusyForceHint": "Executar a limpeza mesmo assim pode perturbar este trabalho ativo.", + "storageBusyIntro": "A limpeza pode perturbar o seguinte trabalho:", + "storageBusyTitle": "A limpeza do armazenamento encontrou trabalho ativo do Kandev", + "storageCheckIntervalHelp": "Com que frequência o Kandev verifica se há manutenção agendada em falta. Uma verificação que encontre o Kandev ocupado é ignorada e repetida no intervalo seguinte.", + "storageCheckIntervalLabel": "Verificar a cada (horas)", + "storageCleanContainersAria": "Limpar os contentores do Kandev", + "storageCleanDockerBuildCacheAria": "Limpar a cache de compilação do Docker", + "storageCleanGoCache": "Limpar a cache do Go", + "storageCleaning": "A limpar...", + "storageCleanOrphanWorkspacesAria": "Limpar as áreas de trabalho de tarefas órfãs", + "storageCleanUnusedImagesAria": "Limpar as imagens Docker não utilizadas", + "storageCleanupComplete": "Limpeza concluída", + "storageCleanupFailed": "A limpeza falhou", + "storageCleanupRunning": "A limpeza do armazenamento ainda está em curso.", + "storageClearEligible": "Limpar os elegíveis", + "storageClearEligibleDialogTitle": "Limpar a quarentena elegível", + "storageContainersDescription": "Remove os contentores parados e não utilizados criados e etiquetados pelo Kandev.", + "storageContainersHelp": "Só são considerados os contentores parados e etiquetados como geridos pelo Kandev, e o inventário tem de confirmar que já não são necessários. Os contentores em execução e os contentores Docker alheios nunca são removidos por esta opção.", + "storageDedicatedDaemon": "Daemon do Docker dedicado", + "storageDedicatedDaemonDescription": "Confirme que não há cargas de trabalho alheias a partilhar este daemon do Docker.", + "storageDedicatedDaemonHelp": "A propriedade da cache de compilação e das imagens não pode ser atribuída de forma fiável ao Kandev. Este reconhecimento desbloqueia a limpeza a nível de todo o daemon e só deve ser ativado quando o daemon do Docker configurado for usado exclusivamente pelo Kandev. O Kandev nunca faz uma limpeza global de volumes.", + "storageDedicatedDialogDescription": "A limpeza da cache de compilação e das imagens não utilizadas afeta todo o daemon configurado, incluindo recursos criados fora do Kandev. Reconheça apenas um daemon dedicado a esta instalação.", + "storageDedicatedDialogTitle": "Usar este daemon do Docker dedicado", + "storageDefaultDockerHost": "Anfitrião Docker pré-definido", + "storageDelete": "Eliminar", + "storageDeleteDialogDescription": "Isto não pode ser anulado. O Kandev remove permanentemente {{path}}.", + "storageDeleteDialogFallbackPath": "a entrada de quarentena selecionada", + "storageDeleteDialogTitle": "Eliminar permanentemente os dados em quarentena", + "storageDeletePermanently": "Eliminar permanentemente", + "storageDeletionComplete": "Eliminação concluída", + "storageDescription": "Reveja a utilização do disco e recupere espaço das áreas de trabalho, caches e recursos Docker do Kandev sempre que a sua instalação precisar.", + "storageDockerBuildCache": "Cache de compilação do Docker", + "storageDockerBuildCacheDescription": "Remove a cache de compilação antiga, retendo a quantidade configurada.", + "storageDockerBuildCacheHelp": "Usa os filtros de idade e de armazenamento do Docker para remover cache de compilação antiga. Não executa o docker system prune, não remove volumes globalmente e mantém-se desativado até o reconhecimento de daemon dedicado ser confirmado.", + "storageDockerDescription": "Limpeza opcional a nível de todo o daemon. Ative-a apenas quando este daemon do Docker for dedicado ao Kandev.", + "storageDockerImageLayers": "Camadas de imagens Docker", + "storageDockerTitle": "Limpeza do Docker", + "storageDockerUnavailable": "O Docker não está disponível no anfitrião configurado.", + "storageDockerUnavailableBadge": "Docker indisponível", + "storageDockerUnavailableNotice": "O Docker não está disponível; as opções de limpeza do Docker não podem ser executadas neste anfitrião.", + "storageDockerUnmeasured": "Não foi possível medir a utilização do Docker", + "storageEligibleNow": "Elegível agora", + "storageEnableGoCacheFirst": "Ative primeiro a cache do Go gerida.", + "storageEnableManagedGoCacheAria": "Ativar a cache do Go gerida", + "storageEnterCachePathFirst": "Introduza primeiro um caminho de cache absoluto.", + "storageExternalGoCache": "Cache do Go externa", + "storageExternalGoCacheDescription": "Opcionalmente, permita que o Kandev mantenha uma cache existente do anfitrião fora do seu caminho gerido.", + "storageExternalGoCacheHelp": "A adoção dá ao Kandev permissão explícita para rodar esta cache existente. O Kandev nunca limpa uma cache pré-definida do utilizador nem outro caminho, exceto se adotar exatamente esse caminho absoluto e confirmar o acesso destrutivo.", + "storageForceClearAll": "Forçar a limpeza total", + "storageForceClearDescription": "Isto tenta remover permanentemente e de imediato todos os itens em quarentena e não pode ser anulado nas entradas que forem bem-sucedidas. As entradas falhadas podem permanecer visíveis e voltar a ser tentadas.", + "storageForceClearDialogTitle": "Forçar a limpeza total da quarentena", + "storageGoBuildCache": "Cache de compilação do Go", + "storageGoCacheBelowLimit": "A cache de compilação do Go está abaixo do limite de tamanho configurado.", + "storageGoCacheMaxHelp": "Isto é um gatilho de limpeza, não uma quota rígida. A cache pode ultrapassar este tamanho enquanto há tarefas ativas. A manutenção move a cache detida para quarentena e recria uma cache vazia depois de o limite ser excedido.", + "storageGoCacheMaxLabel": "Tamanho máximo da cache (GB)", + "storageGoCacheNotOwned": "Só é possível limpar uma cache de compilação do Go detida pelo Kandev.", + "storageGoCacheSectionDescription": "Usar e reduzir uma cache detida pelo Kandev para as novas execuções locais no anfitrião.", + "storageHistoryEmpty": "Ainda não há execuções de manutenção do armazenamento.", + "storageHistoryLoading": "A carregar o histórico de manutenção…", + "storageIdleHelp": "A limpeza agendada só começa depois de nenhuma tarefa, comando de shell, teste, configuração, limpeza ou construção de imagem usar recursos geridos durante este período. O Executar agora não espera por este temporizador, mas continua a recusar-se a correr enquanto houver recursos ativos.", + "storageIdleLabel": "Exigir inatividade durante (minutos)", + "storageKandevContainers": "Contentores do Kandev", + "storageLastAnalyzed": "Última análise {{time}}", + "storageLoadingData": "A carregar os dados de armazenamento…", + "storageMaintenanceHistory": "Histórico de manutenção", + "storageManagedContainerCount_one": "{{count}} contentor gerido", + "storageManagedContainerCount_other": "{{count}} contentores geridos", + "storageManagedGoCache": "Cache do Go gerida", + "storageManagedGoCacheDescription": "As novas execuções locais no anfitrião usam {{path}}.", + "storageManagedGoCacheHelp": "Quando está ativada, o Kandev dá aos novos processos de tarefas locais uma cache de compilação do Go dedicada e pode rodá-la durante a manutenção quando exceder o máximo. Desativar isto deixa de usar a cache gerida nas novas execuções, mas não a elimina.", + "storageMoreInformationAbout": "Mais informações sobre {{label}}", + "storageNoEligibleEntries": "Ainda não há entradas de quarentena elegíveis.", + "storageOrphanGraceHelp": "Uma área de trabalho tem de estar sem utilização durante pelo menos este período antes de poder ser classificada como órfã. Aumentar este valor mantém as áreas de trabalho antigas durante mais tempo antes de entrarem em quarentena.", + "storageOrphanGraceLabel": "Esperar antes de considerar órfã (horas)", + "storageOrphanWorkspaces": "Áreas de trabalho de tarefas órfãs", + "storageOrphanWorkspacesDescription": "Move para quarentena as áreas de trabalho confirmadas como órfãs.", + "storageOrphanWorkspacesHelp": "O Kandev só seleciona a área de trabalho de uma tarefa depois de o inventário confirmar que nenhuma tarefa, ambiente, sessão ou worktree protegido ativo a usa. A área de trabalho é primeiro movida para quarentena, onde pode ser restaurada antes da eliminação definitiva.", + "storagePolicyDescription": "Escolha o que o Kandev pode recuperar automaticamente e os limites de segurança que tem de respeitar.", + "storagePolicyLoadingBlock": "Aguarde que as definições de armazenamento acabem de carregar.", + "storagePolicyTitle": "Política de manutenção", + "storageProtectedUntil": "Protegido até <1>{{deadline}}", + "storagePurgeEligibleCount_one": "Isto remove permanentemente {{count}} item elegível.", + "storagePurgeEligibleCount_other": "Isto remove permanentemente {{count}} itens elegíveis.", + "storagePurgeProtectedCount_one": "{{count}} item protegido permanece até ao seu prazo de retenção.", + "storagePurgeProtectedCount_other": "{{count}} itens protegidos permanecem até aos seus prazos de retenção.", + "storageQuarantineCardDescription": "A limpeza move para aqui os dados recuperáveis em vez de os eliminar de imediato. Restaure um item se ainda precisar dele, ou elimine-o permanentemente quando tiver a certeza.", + "storageQuarantineCleanupRunning": "Ainda está em curso uma limpeza da quarentena.", + "storageQuarantinedResources": "Recursos em quarentena", + "storageQuarantineEligibleCount_one": "{{count}} elegível agora", + "storageQuarantineEligibleCount_other": "{{count}} elegíveis agora", + "storageQuarantineEmpty": "Não há recursos em quarentena restauráveis.", + "storageQuarantineHeading": "Quarentena", + "storageQuarantineHelp": "A quarentena é a área de retenção recuperável do Kandev. As áreas de trabalho de tarefas órfãs e as caches do Go rodadas são movidas para aqui antes da eliminação. Pode restaurar um item durante o período de retenção; depois do prazo, uma execução de manutenção posterior pode eliminá-lo permanentemente.", + "storageQuarantineLoading": "A carregar a quarentena…", + "storageQuarantineMovedAside_one": "{{count}} item posto de parte para recuperação antes da eliminação definitiva", + "storageQuarantineMovedAside_other": "{{count}} itens postos de parte para recuperação antes da eliminação definitiva", + "storageQuarantineProtectedCount_one": "{{count}} protegido", + "storageQuarantineProtectedCount_other": "{{count}} protegidos", + "storageQuarantineRetentionHelp": "A limpeza começa por mover as áreas de trabalho órfãs e as caches do Go rodadas para a área de reciclagem do Kandev, em vez de as eliminar de imediato. Durante este período de retenção pode restaurar um item. Depois do prazo, uma execução de manutenção posterior pode eliminá-lo permanentemente.", + "storageQuarantineRetentionLabel": "Manter os itens em quarentena durante (horas)", + "storageQuarantineSafetyDescription": "Manter os recursos recuperáveis durante um período de tolerância antes da eliminação definitiva.", + "storageQuarantineSafetyTitle": "Segurança da quarentena", + "storageQuarantineScheduleOff": "A limpeza automática da quarentena está desligada. Execute a manutenção manualmente ou use uma ação de quarentena quando estiver pronto.", + "storageQuarantineScheduleOn_one": "As entradas elegíveis são removidas pela primeira execução de manutenção bem-sucedida após o respetivo prazo (a cada {{count}} hora, quando a condição de inatividade o permitir).", + "storageQuarantineScheduleOn_other": "As entradas elegíveis são removidas pela primeira execução de manutenção bem-sucedida após o respetivo prazo (a cada {{count}} horas, quando a condição de inatividade o permitir).", + "storageQuarantineTotal": "Total em quarentena: {{size}}", + "storageQuarantineUnmeasured": "Não foi possível medir a utilização da quarentena", + "storageRefreshFailed": "Atualizar os dados de armazenamento: {{message}}", + "storageResourceTypeGoCache": "cache do Go", + "storageResourceTypeTaskWorkspace": "área de trabalho da tarefa", + "storageRestore": "Restaurar", + "storageRetentionEnds": "A retenção termina {{deadline}}.", + "storageRunAnyway": "Executar mesmo assim", + "storageRunNow": "Executar agora", + "storageScheduleDescription": "Controla quando a manutenção automática pode começar. As ações manuais continuam disponíveis quando o agendamento está desligado.", + "storageScheduledMaintenance": "Manutenção agendada", + "storageScheduledMaintenanceDescription": "Recuperar periodicamente espaço em disco usando as regras de recursos ativadas.", + "storageScheduledMaintenanceHelp": "Quando está ativada, o Kandev verifica esta política no intervalo configurado e só começa depois de o Kandev ter estado inativo durante o período exigido. Desligá-la não desativa a Análise nem o Executar agora.", + "storageScheduleTitle": "Agendamento", + "storageSectionUnavailable": "Não foi possível carregar esta secção de armazenamento", + "storageTaskWorkspaces": "Áreas de trabalho de tarefas", + "storageTitle": "Armazenamento", + "storageToastAnalysisStarted": "Análise do armazenamento iniciada", + "storageToastCacheAdopted": "Cache de compilação do Go adotada", + "storageToastDeletionStarted": "Eliminação definitiva iniciada", + "storageToastEligiblePurgeStarted": "Limpeza da quarentena elegível iniciada", + "storageToastForcedPurgeStarted": "Limpeza forçada da quarentena iniciada", + "storageToastMaintenanceStarted": "Manutenção do armazenamento iniciada", + "storageToastPolicySaved": "Política de armazenamento guardada", + "storageToastQuarantineRestored": "Recurso em quarentena restaurado", + "storageTotalCounted": "Total contabilizado: {{size}}", + "storageTotalPartial": "Medição parcial", + "storageTrashPath": "Reciclagem: {{path}}", + "storageTypeToConfirm": "Escreva <1>{{phrase}} para continuar.", + "storageTypeToConfirmAria": "Escreva {{phrase}} para confirmar", + "storageUnavailableValue": "Indisponível", + "storageUnusedDockerImages": "Imagens Docker não utilizadas", + "storageUnusedImagesDescription": "Remove imagens antigas que nenhum contentor usa.", + "storageUnusedImagesDetail": "Não usadas por nenhum contentor e mais antigas do que a idade configurada", + "storageUnusedImagesHelp": "Remove uma imagem apenas quando nenhum contentor, em execução ou parado, a referencia e ela é mais antiga do que a idade configurada. Isto abrange todo o daemon e, por isso, exige o reconhecimento de daemon dedicado.", + "storageUnusedImagesHoursHelp": "Uma imagem tem de estar sem utilização por qualquer contentor e ser mais antiga do que esta idade antes de o Kandev a poder remover. Aumentar o valor mantém as imagens antigas disponíveis durante mais tempo.", + "storageUnusedImagesHoursLabel": "A imagem tem de estar sem utilização há (horas)", + "storageUserGoBuildCache": "Cache de compilação do Go do utilizador", + "storageWorkspacesDescription": "Recupere recursos que o Kandev consegue identificar com segurança como já não estando em uso.", + "storageWorkspacesDetail": "{{reclaimable}} recuperáveis após o período de tolerância · {{active}} ativas", + "storageWorkspacesTitle": "Áreas de trabalho e contentores", + "uiStateHelp": "Limpa as preferências de esquema e de interface guardadas no seu navegador (tamanhos dos painéis, tarefas afixadas, grupos expandidos, etc.). Use isto se a aplicação parecer avariada, se os painéis estiverem bloqueados ou se o esquema parecer errado. As suas tarefas, sessões e dados do servidor não são afetados - apenas o estado da interface de cada navegador. A página é recarregada após a reposição.", + "uiStateReset": "Repor", + "uiStateResetLabel": "Repor o esquema do navegador", + "uiStateTitle": "Estado da interface", + "updateAvailable": "Atualização disponível", + "updatesApply": "Aplicar a atualização", + "updatesApplyConfirmDesktop": "O Kandev instala a {{version}} e reinicia a aplicação de ambiente de trabalho.", + "updatesApplyConfirmService": "O Kandev atualiza para a {{version}}, reinstala o serviço do utilizador e reinicia-o.", + "updatesApplyConfirmTitle": "Aplicar a atualização?", + "updatesCheckNow": "Verificar agora", + "updatesCurrentVersion": "Versão atual", + "updatesDownloading": "A transferir a atualização ({{downloaded}} bytes)...", + "updatesDownloadingOfTotal": "A transferir a atualização ({{downloaded}} de {{total}} bytes)...", + "updatesInstalling": "A instalar a atualização...", + "updatesLastChecked": "Última verificação {{at}}", + "updatesLatestRelease": "Versão mais recente", + "updatesNever": "nunca", + "updatesNotificationsHint": "As preferências de notificação são geridas em <2>Notificações.", + "updatesPageDescription": "Versão atual vs. mais recente, mais o registo de alterações completo do kandev.", + "updatesReleaseNotes": "Notas da versão", + "updatesRetryAfter_one": "Já verificado. Tente novamente dentro de {{count}}s.", + "updatesRetryAfter_other": "Já verificado. Tente novamente dentro de {{count}}s.", + "updatesTitle": "Atualizações", + "updatesUpToDate": "O Kandev está atualizado.", + "usersAddUser": "Adicionar utilizador", + "usersColumnActions": "Ações", + "usersColumnEmail": "E-mail", + "usersColumnName": "Nome", + "usersColumnRole": "Função", + "usersColumnStatus": "Estado", + "usersConfirm": "Confirmar", + "usersConfirmDisable": "Desativar {{email}}? A sessão será terminada em todo o lado.", + "usersConfirmEnable": "Reativar {{email}}?", + "usersConfirmRoleChange": "Mudar {{email}} para {{role}}?", + "usersDisable": "Desativar", + "usersEmpty": "Ainda não há utilizadores.", + "usersEnable": "Ativar", + "usersInviteLink": "Ligação de convite", + "usersLastAdminGuard": "Esta instalação tem de manter pelo menos um administrador ativo.", + "usersLoadFailed": "Não foi possível carregar os utilizadores.", + "usersLoading": "A carregar os utilizadores...", + "usersMakeAdmin": "Tornar administrador", + "usersMakeMember": "Tornar membro", + "usersPageDescription": "Faça a gestão das contas, funções e ligações de convite desta instância.", + "usersRoleAdmin": "administrador", + "usersRoleMember": "membro", + "usersStatusActive": "ativo", + "usersStatusDisabled": "desativado", + "usersTakesEffectImmediately": "{{email}} — isto tem efeito imediato.", + "usersTitle": "Utilizadores", + "usersUpdateFailed": "Não foi possível atualizar o utilizador", + "versionCurrent": "Atual", + "versionLatest": "Mais recente", + "versionTitle": "Versão", + "versionViewUpdates": "Ver as atualizações" +} diff --git a/apps/web/src/locales/pt-pt/task.json b/apps/web/src/locales/pt-pt/task.json new file mode 100644 index 0000000000..1b566b7a15 --- /dev/null +++ b/apps/web/src/locales/pt-pt/task.json @@ -0,0 +1,785 @@ +{ + "aboutContextWindowSource": "Sobre a origem da janela de contexto", + "activeBadge": "ATIVA", + "activeSessionRepositoryTapToSwitch": "Sessão ativa: {{agentLabel}}. Repositório: {{repositoryLabel}}. Toque para mudar.", + "activeSessionTapToSwitch": "Sessão ativa: {{agentLabel}}. Toque para mudar.", + "activeSharesForThisSession": "Partilhas ativas desta sessão", + "activeTerminalTapToSwitch": "Terminal ativo: {{label}}. Toque para mudar.", + "activity": "Atividade", + "add": "Adicionar", + "addAComment": "Adicionar um comentário...", + "addAnOptionalComment": "Adicionar um comentário opcional", + "addApprover": "+ Adicionar aprovador", + "addAtLeastOneSource": "Adicione pelo menos uma fonte.", + "addBlocker": "+ Adicionar bloqueio", + "addDetailsAboutThisChange": "Adicione detalhes sobre esta alteração...", + "addFolder": "Adicionar pasta", + "addLabel": "Adicionar etiqueta", + "addLabels": "+ Adicionar etiquetas", + "addMore": "Adicionar mais", + "addRepository": "Adicionar repositório", + "addReviewer": "+ Adicionar revisor", + "addShort": "+ Adicionar", + "addSubIssue": "Adicionar subissue", + "addToWorkspace": "Adicionar à área de trabalho", + "addYourCommentOrInstruction": "Adicione o seu comentário ou instrução...", + "adding": "A adicionar…", + "advanced": "Avançado", + "afterDuration": " após {{duration}}", + "agent": "Agente", + "agentBootFailedToResume": "Não foi possível retomar o agente {{agentName}}", + "agentBootFailedToStart": "Não foi possível iniciar o agente {{agentName}}", + "agentBootResumed": "Agente {{agentName}} retomado", + "agentBootResuming": "A retomar o agente {{agentName}}", + "agentBootStarted": "Agente {{agentName}} iniciado", + "agentBootStarting": "A iniciar o agente {{agentName}}", + "agentCount_one": "{{count}} agente", + "agentCount_other": "{{count}} agentes", + "agentFallbackName": "agente", + "agentHasEncounteredAnError": "O agente encontrou um erro", + "agentImage": "Imagem do agente", + "agentIsRunning": "O agente está em execução", + "agentIsStarting": "O agente está a arrancar", + "agentOutput": "Saída do agente", + "agentPlan": "Plano do agente", + "agentProfileNoLongerExists": "O perfil de agente já não existe", + "agentRunning": "agente em execução", + "allChangesTitle": "Todas as alterações", + "alwaysAllow": "Permitir sempre", + "anErrorOccurred": "Ocorreu um erro", + "anUnexpectedErrorOccurred": "Ocorreu um erro inesperado", + "andMoreFilesTruncated": "...e mais ficheiros (truncado)", + "annotationArea": "Área", + "annotationAreaSized": "Área {{w}}x{{h}}", + "annotationCount_one": "{{count}} anotação", + "annotationCount_other": "{{count}} anotações", + "annotationPin": "Marcador", + "answer": "resposta", + "anyoneWithThisLinkCanView": "Qualquer pessoa com esta ligação pode ver esta conversa. Reveja a pré-visualização com atenção antes de publicar — depois de publicado, o retrato é carregado para o GitHub Gist na sua conta.", + "approve": "Aprovar", + "approveThisAction": "Aprovar esta ação?", + "approved": "Aprovada", + "approvedLowercase": "aprovada", + "approvedThisTask": "{{who}} aprovou esta tarefa", + "approvedVerb": "Aprovou", + "approvers": "Aprovadores", + "archive": "Arquivar", + "askToMakeChanges": "Peça alterações, @mencione ficheiros", + "askToMakeChangesWithCommands": "Peça alterações, @mencione ficheiros, execute /comandos", + "assignee": "Responsável", + "attachFiles": "Anexar ficheiros", + "attachment": "Anexo", + "attachmentIndexed": "Anexo {{index}}", + "attachmentIsTooLarge": "O anexo é demasiado grande", + "attachmentLimitReached": "Limite de anexos atingido", + "attachmentPreview": "Pré-visualização do anexo", + "attachmentSizeKb": "({{size}} KB)", + "attachmentsCanTotalUpTo": "Os anexos podem totalizar até {{bytes}}.", + "authenticationRequiredLogInBeforeResuming": "É necessária autenticação; inicie sessão antes de retomar", + "authenticationRequiredPleaseLogInVia": "É necessária autenticação — inicie sessão através do terminal", + "awaitingApprovalFromAgents_one": "A aguardar a aprovação de {{count}} agente", + "awaitingApprovalFromAgents_other": "A aguardar a aprovação de {{count}} agentes", + "awaitingUserResponse": "A aguardar a resposta do utilizador (pending_id={{pendingId}})", + "back": "Voltar", + "background": "segundo plano", + "backgroundWorkIsRunning": "Há trabalho em segundo plano em execução", + "baseBranch": "Branch de base", + "blocked": "Bloqueada", + "blocking": "A bloquear", + "branchIsNoLongerAvailable": "O branch já não está disponível", + "buildingPreview": "A construir a pré-visualização…", + "byAuthor": "por {{author}}", + "cachedInput": "Entrada em cache", + "cancelAgent": "Cancelar o agente", + "cancelLeavesWorkspaceUnchangedDetail": "<0>Cancelar deixa a área de trabalho inalterada. Se continuar, o lote é tudo-ou-nada: se alguma fonte falhar, nenhuma das novas fontes é anexada.", + "cancelTree": "Cancelar a árvore", + "cancelled": "Cancelada", + "cancelledTree": "Cancelada (árvore)", + "cancelling": "A cancelar...", + "cannotMarkDoneAwaitingApprovalFrom": "Não é possível marcar como concluída: a aguardar a aprovação de {{names}}", + "cannotMarkDoneAwaitingApprovals": "Não é possível marcar como concluída: a aguardar aprovações", + "changes": "Alterações", + "chat": "Chat", + "chooseFromSavedOrDiscoveredRepositories": "Escolha entre repositórios guardados ou descobertos.", + "chooseLocalFolder": "Escolher uma pasta local", + "chooseLocalGitRepository": "Escolher um repositório Git local", + "chooseRepositoriesOrFoldersToMake": "Escolha os repositórios ou pastas a disponibilizar nesta tarefa.", + "cleanup": "Limpeza", + "clearAllAnnotations": "Limpar todas as anotações", + "cloneFromAProviderOrGit": "Clonar a partir de um fornecedor ou de um URL Git.", + "close": "Fechar", + "close2": "Fechar {{label}}", + "codeLanguagePlain": "Simples", + "collapse": "Recolher", + "collapseLastPrompt": "Recolher o último prompt", + "collapsePlan": "Recolher o plano", + "collapseToolbar": "Recolher a barra de ferramentas", + "command": "Comando", + "commandCopied": "Comando copiado", + "commandFailed": "O comando falhou", + "commandOutputUnavailable": "Saída do comando indisponível.", + "commandRunning": "Comando em execução", + "commandSucceeded": "O comando foi bem-sucedido", + "comment": "Comentar", + "commentCmdShiftC": "Comentar (Cmd+Shift+C)", + "commentOnAgentResponse": "Comentar a resposta do agente", + "commentOnSelection": "Comentar a seleção", + "commentsOnFiles_one": "{{count}} comentário em {{files}}", + "commentsOnFiles_other": "{{count}} comentários em {{files}}", + "commit": "Commit", + "commitChanges": "Fazer commit das alterações", + "commitChangesTitle": "Fazer commit das alterações", + "committed": "Com commit", + "committingEllipsis": "A fazer commit...", + "completed": "Concluída", + "completedSuccessfully": "{{operationName}} concluída com êxito", + "contentMarkdownSupported": "Conteúdo (aceita markdown)", + "context": "Contexto", + "contextFieldLabel": "contexto", + "contextWindow": "Janela de contexto", + "contextWindowUsed": "Janela de contexto: {{percent}}% usada", + "control": "Control", + "controlC": "Control C", + "controlD": "Control D", + "copied": "Copiado!", + "copied2": "Copiado", + "copy": "Copiar", + "copyAnnotations": "Copiar as anotações", + "copyAnnotationsToClipboard": "Copiar as anotações para a área de transferência", + "copyCommand": "Copiar o comando", + "copyIdentifier": "Copiar o identificador", + "copyMessage": "Copiar a mensagem", + "copyMessageToClipboard": "Copiar a mensagem para a área de transferência", + "copyPath": "Copiar o caminho", + "copyToClipboard": "Copiar para a área de transferência", + "couldNotAddSources": "Não foi possível adicionar as fontes. As suas entradas continuam aqui para tentar novamente.", + "create": "Criar", + "createAsDraft": "Criar como rascunho", + "createChangeRequest": "Criar {{shortName}}", + "createChangeRequestLong": "Criar {{longName}}", + "createFailed": "Não foi possível criar o {{shortName}}", + "created": "Criada", + "created2": "{{longName}} criado", + "createdBy": "Criada por", + "createdSuccessfully": "{{longName}} criado com êxito", + "creatingEllipsis": "A criar...", + "creatingFrom": "A criar o {{shortName}} a partir de <4>{{displayBranch}}", + "creatingFromTo": "A criar o {{shortName}} a partir de <4>{{displayBranch}} para <7>{{baseBranch}}", + "ctrl": "Ctrl", + "customPrompt": "Prompt personalizado", + "customPromptNamed": "Prompt personalizado: {{name}}", + "cwd": "cwd:", + "delete": "Eliminar", + "deleteComment": "Eliminar comentário", + "deleteSession": "Eliminar a sessão?", + "deny": "Negar", + "describeWhatNeedsToChange": "Descreva o que precisa de ser alterado", + "describeYourChanges": "Descreva as suas alterações...", + "description": "descrição", + "description2": "Descrição", + "details": "Detalhes", + "diff": "Diff", + "diffSideNew": "novo", + "diffSideOld": "antigo", + "discard": "Descartar", + "dismiss": "Dispensar", + "displayNameOptional": "Nome a apresentar (opcional)", + "documentCount_one": "{{count}} documento", + "documentCount_other": "{{count}} documentos", + "documentDeleted": "Documento eliminado", + "documentSaved": "Documento guardado", + "documents": "Documentos", + "done": "Concluída", + "downloadingModelPercent": "A transferir {{modelLabel}}… {{pct}}%", + "downloadingPercent": "A transferir {{modelLabel}}, {{pct}} por cento", + "draftCreated": "Rascunho de {{longName}} criado", + "duration": "duração", + "durationValue": "Duração: {{duration}}", + "earlierUpdates_one": "Atualizações anteriores ({{count}})", + "earlierUpdates_other": "Atualizações anteriores ({{count}})", + "editComment": "Editar comentário", + "empty": "(vazio)", + "enhancedPromptInserted": "Prompt melhorado inserido.", + "enterCommitMessage": "Introduza a mensagem de commit...", + "enterInspectMode": "Entrar no modo de inspeção", + "enterMessageContent": "Introduza o conteúdo da mensagem...", + "environmentSetupFailed": "A configuração do ambiente falhou", + "error": "Erro", + "errorData": "Dados do erro", + "executorEnvironmentIsUnavailable": "O ambiente do executor não está disponível.", + "exitCodeShell": "Código de saída {{exitCode}}", + "exitCodeUnavailable": "Código de saída indisponível", + "exitCodeValue": "Código de saída: {{exitCode}}", + "exitInspectMode": "Sair do modo de inspeção", + "expandLastPrompt": "Expandir o último prompt", + "expandPlan": "Expandir o plano", + "expired": "Expirada", + "failed": "Falhou", + "failed2": "{{operationName}} falhou", + "failedToArchiveTask": "Não foi possível arquivar a tarefa", + "failedToDeleteDocument": "Não foi possível eliminar o documento", + "failedToLoad": "Não foi possível carregar {{modelLabel}}", + "failedToLoadDocuments": "Não foi possível carregar os documentos", + "failedToLoadPreview": "Não foi possível carregar a pré-visualização.", + "failedToPublishShare": "Não foi possível publicar a partilha.", + "failedToRead": "Não foi possível ler {{name}}", + "failedToRenameTask": "Não foi possível mudar o nome da tarefa", + "failedToRevokeShare": "Não foi possível revogar a partilha.", + "failedToSaveDocument": "Não foi possível guardar o documento", + "failedToSendComment": "Não foi possível enviar o comentário", + "failedToUpload": "Não foi possível carregar {{name}}", + "file": "Ficheiro", + "fileChangesTitle": "Alterações de ficheiros", + "fileCountLabel_one": "{{count}} ficheiro", + "fileCountLabel_other": "{{count}} ficheiros", + "files": "Ficheiros", + "filesChanged_one": "<0>{{count}} ficheiro alterado", + "filesChanged_other": "<0>{{count}} ficheiros alterados", + "filterDimensionArchived": "Arquivada", + "filterDimensionExecutorType": "Tipo de executor", + "filterDimensionHasDiff": "Tem diff", + "filterDimensionHasPr": "Tem PR", + "filterDimensionIssueWatch": "Vigilância de issues", + "filterDimensionPrReview": "Revisão de PR", + "filterDimensionRepository": "Repositório", + "filterDimensionState": "Estado", + "filterDimensionTitle": "Título", + "filterDimensionWorkflow": "Fluxo de trabalho", + "filterDimensionWorkflowStep": "Passo do fluxo de trabalho", + "filterOpContains": "contém", + "filterOpDoesNotContain": "não contém", + "filterOpHide": "Ocultar", + "filterOpIn": "em", + "filterOpIs": "é", + "filterOpIsNot": "não é", + "filterOpNotIn": "não em", + "filterOpShow": "Mostrar", + "filterStateBacklog": "Backlog", + "filterStateInProgress": "Em curso", + "filterStateReview": "Revisão", + "filterTitlePlaceholder": "Subcadeia...", + "filters": "Filtros", + "fixTheMarkedSources": "Corrija as fontes assinaladas antes de as adicionar.", + "folder": "Pasta", + "folderDisplayName": "Nome a apresentar da pasta", + "forcePush": "Forçar push", + "fromAgent": "Do agente", + "fromAgentInTask": "Do agente na tarefa <1>“{{fullTitle}}”", + "fromBranch": "de {{branch}}", + "fromSessionInTask": "Da sessão <1>“{{sessionName}}” na tarefa <3>“{{fullTitle}}”", + "fromTask": "De {{title}}", + "fullImpactDetails": "Detalhes completos do impacto", + "fullSize": "Tamanho real {{alt}}", + "gitActions": "Ações do Git", + "goToNextMessage": "Ir para a mensagem seguinte", + "goToPreviousMessage": "Ir para a mensagem anterior", + "groupBy": "Agrupar por", + "groupExecutorType": "Tipo de executor", + "groupNone": "Nenhum", + "groupRepository": "Repositório", + "groupState": "Estado", + "groupStatusRateLimited": "Temporariamente limitado por taxa", + "groupStatusTimeout": "A pesquisa excedeu o tempo limite", + "groupStatusUnauthorized": "É necessário iniciar sessão", + "groupStatusUnsupportedScope": "Indisponível nesta área de trabalho", + "groupStatusUpstreamError": "Fornecedor indisponível", + "groupWorkflow": "Fluxo de trabalho", + "groupWorkflowStep": "Passo do fluxo de trabalho", + "hiddenMessagesInPreview_one": "… mais {{count}} mensagem oculta nesta pré-visualização (continua incluída na partilha) …", + "hiddenMessagesInPreview_other": "… mais {{count}} mensagens ocultas nesta pré-visualização (continuam incluídas na partilha) …", + "hideCommandOutput": "Ocultar a saída do comando", + "hideErrorDetails": "Ocultar os detalhes do erro: {{displayLabel}}", + "hidePreviousAgentError": "Ocultar o erro anterior do agente", + "hideRightPanel": "Ocultar o painel direito", + "hideSidebar": "Ocultar a barra lateral", + "image": "Imagem", + "imagePreview": "Pré-visualização da imagem", + "imageWithSize": "Imagem ({{bytes}})", + "implement": "Implementar", + "implementInFreshAgent": "Implementar num agente novo", + "implementThePlanInThisSession": "Implementar o plano nesta sessão", + "includeThePlanAsContext": "Incluir o plano como contexto", + "inputTokens": "Tokens de entrada", + "inspectClickToPinOrDrag": "Inspeção: clique para fixar ou arraste para selecionar uma área da pré-visualização", + "inspectingClickToPin": "A inspecionar - clique para fixar, arraste para selecionar uma área, Esc para sair", + "isTheMaximumFileSizeIs": "{{name}} tem {{size}}. O tamanho máximo de ficheiro é {{maxSize}}.", + "kandevAskUserQuestion": "Kandev: Perguntar ao utilizador", + "kandevCreateTask": "Kandev: Criar tarefa", + "kandevCreateTaskPlan": "Kandev: Criar plano da tarefa", + "kandevDeleteTaskPlan": "Kandev: Eliminar plano da tarefa", + "kandevGetTaskConversation": "Kandev: Obter conversa da tarefa", + "kandevGetTaskDocument": "Kandev: Obter documento da tarefa", + "kandevGetTaskPlan": "Kandev: Obter plano da tarefa", + "kandevListAgents": "Kandev: Listar agentes", + "kandevListExecutorProfiles": "Kandev: Listar perfis de executor", + "kandevListRelatedTasks": "Kandev: Listar tarefas relacionadas", + "kandevListTaskDocuments": "Kandev: Listar documentos da tarefa", + "kandevListTasks": "Kandev: Listar tarefas", + "kandevListWorkflowSteps": "Kandev: Listar passos do fluxo de trabalho", + "kandevListWorkflows": "Kandev: Listar fluxos de trabalho", + "kandevListWorkspaces": "Kandev: Listar áreas de trabalho", + "kandevMessageTask": "Kandev: Enviar mensagem à tarefa", + "kandevMoveTask": "Kandev: Mover tarefa", + "kandevUpdateTask": "Kandev: Atualizar tarefa", + "kandevUpdateTaskPlan": "Kandev: Atualizar plano da tarefa", + "kandevWriteTaskDocument": "Kandev: Escrever documento da tarefa", + "keyAndContentAreRequired": "A chave e o conteúdo são obrigatórios", + "keyArrowDown": "Seta para baixo", + "keyArrowLeft": "Seta para a esquerda", + "keyArrowRight": "Seta para a direita", + "keyArrowUp": "Seta para cima", + "keyDash": "Traço", + "keyEGPlanNotes": "Chave (ex.: plano, notas)", + "keyEnd": "End", + "keyEscape": "Escape", + "keyHome": "Home", + "keyPageDown": "Page Down", + "keyPageUp": "Page Up", + "keyPipe": "Barra vertical", + "keySlash": "Barra", + "keyTab": "Tab", + "keyTilde": "Til", + "keyUnderscore": "Sublinhado", + "labelAlreadyExists": "A etiqueta já existe", + "labelColor": "Cor da etiqueta", + "labelName": "nome da etiqueta", + "labels": "Etiquetas", + "liveUpdateConsequenceSessionAndProcesses": "<0>Sessão e processos: o agente e os processos da área de trabalho em execução continuam enquanto o Kandev volta a analisar a área de trabalho. A tarefa, a sessão, o estado da tarefa, as mensagens, o plano, as fontes anexadas, o modelo e o modo mantêm-se.", + "liveUpdateConsequenceWorkspace": "<0>Área de trabalho: os repositórios são clonados como entradas de topo com nome na atual área de trabalho remota. O diretório de trabalho do agente não muda e os ficheiros existentes e as alterações do Git não são movidos nem descartados.", + "loadOlderMessages": "Carregar mensagens mais antigas", + "loading": "A carregar...", + "loadingCommandOutput": "A carregar a saída do comando...", + "loadingConversation": "A carregar a conversa...", + "loadingOlder": "a carregar mais antigas…", + "loadingOlderMessages": "A carregar mensagens mais antigas...", + "loadingSessions": "A carregar as sessões…", + "localGitRepository": "Repositório Git local", + "loginRequired": "É necessário iniciar sessão", + "markAsFavorite": "Marcar como favorita", + "markMessageAsFavorite": "Marcar a mensagem como favorita", + "mcpConnectionStatus": "Estado da ligação MCP", + "mcpPolicyLabel": "mcp:", + "mcpServers": "Servidores MCP", + "mentionTasksFilesPrompts": "Mencionar tarefas, ficheiros, prompts", + "merge": "Merge", + "messageCount_one": "{{count}} mensagem", + "messageCount_other": "{{count}} mensagens", + "messageMetadata": "Metadados da mensagem", + "messageMetadataTitle": "Metadados da mensagem", + "messageNotSent": "Mensagem não enviada", + "messageSendStatusUnknown": "Estado do envio da mensagem desconhecido", + "messageTime": "Hora da mensagem", + "model": "modelo", + "monitor": "Monitorizar", + "monitorCommand": "Monitorizar: {{command}}", + "moreActions": "Mais ações", + "moreImplementOptions": "Mais opções de implementação", + "moreNotShown_one": "+ mais {{count}} não mostrado", + "moreNotShown_other": "+ mais {{count}} não mostrados", + "moreToolbarActions": "Mais ações da barra de ferramentas", + "moveTaskToTheNextWorkflow": "Mover a tarefa para o passo seguinte do fluxo de trabalho", + "needsInput": "Precisa de resposta", + "new": "Nova", + "newDocument": "Novo documento", + "newMessages": "Novas mensagens", + "newSession": "Nova sessão", + "newSubTask": "Nova subtarefa", + "newTerminal": "Novo terminal", + "newView": "Nova vista", + "newViewName": "Nome da nova vista", + "newViewUnavailable": "Nova vista indisponível. {{newViewDisabledReason}}", + "newline": "⇧↵ nova linha", + "next": "Seguinte", + "nextMessage": "Mensagem seguinte", + "nextQuestion": "Pergunta seguinte", + "noActiveSession": "Nenhuma sessão ativa", + "noActiveTask": "Nenhuma tarefa ativa", + "noActivityYet": "Ainda não há atividade", + "noAgentsFound": "Nenhum agente encontrado.", + "noAssignee": "Sem responsável", + "noChangesToCommit": "Não há alterações para commit", + "noCommandOutput": "Sem saída do comando.", + "noCommandOutputYet": "Ainda não há saída do comando.", + "noCommentsYet": "Ainda não há comentários", + "noContent": "Sem conteúdo", + "noDecisionYet": "Ainda não há decisão", + "noDocumentsFound": "Nenhum documento encontrado.", + "noDocumentsYet": "Ainda não há documentos.", + "noItemsFound": "Nenhum item encontrado.", + "noLabelsYet": "Ainda não há etiquetas", + "noMatches": "Sem correspondências", + "noMessagesFound": "Nenhuma mensagem encontrada.", + "noMessagesYetStartTheConversation": "Ainda não há mensagens. Comece a conversa!", + "noOptions": "Sem opções", + "noOptions2": "Sem opções.", + "noParent": "Sem tarefa-mãe", + "noPlan": "sem plano", + "noPlanFound": "Nenhum plano encontrado.", + "noProfilesFound": "Nenhum perfil encontrado.", + "noProject": "Sem projeto", + "noProjectsFound": "Nenhum projeto encontrado.", + "noQuestionsFound": "Nenhuma pergunta encontrada.", + "noRelatedTasksFound": "Nenhuma tarefa relacionada encontrada.", + "noResultsFound": "Nenhum resultado encontrado", + "noSessionsYetLaunchOneTo": "Ainda não há sessões. Lance uma para começar.", + "noStepsFound": "Nenhum passo encontrado.", + "noSubIssues": "Sem subissues", + "noTaskSelected": "Nenhuma tarefa selecionada", + "noTasksFound": "Nenhuma tarefa encontrada.", + "noTerminalsYet": "Ainda não há terminais.", + "noWorkItemsFound": "Nenhum item de trabalho encontrado", + "noWorkflowsFound": "Nenhum fluxo de trabalho encontrado.", + "noWorkspacesFound": "Nenhuma área de trabalho encontrada.", + "none": "Nenhum", + "ontoBranch": "sobre {{branch}}", + "openEntityReference": "Abrir {{label}}: {{title}}", + "openFile": "Abrir ficheiro", + "openImage": "Abrir {{alt}}", + "openInAdvancedView": "Abrir na vista avançada", + "openMarkdownPreview": "Abrir a pré-visualização de markdown", + "openPlanDetails": "Abrir os detalhes do plano", + "openSidebarFilters": "Abrir os filtros da barra lateral", + "openSourceTask": "Abrir a tarefa de origem {{fullTitle}}", + "openTaskSwitcher": "Abrir o seletor de tarefas", + "openTerminal": "Abrir terminal", + "openTheBottomTerminalAndPaste": "Abra o terminal inferior e cole este comando", + "option": "opção {{index}}", + "orTypeACustomAnswer": "Ou escreva uma resposta personalizada…", + "output": "Saída", + "outputTokens": "Tokens de saída", + "outputTruncated": "Saída truncada", + "parent": "Tarefa-mãe", + "pastedImageCouldnTBeAttached": "Não foi possível anexar a imagem colada", + "pauseTree": "Pausar a árvore", + "paused": "Em pausa", + "pendingApproval": "Aprovação pendente", + "permissionRequested": "Permissão pedida", + "plan": "Plano", + "planIsEmpty": "O plano está vazio", + "planMode": "Modo de plano", + "position": "Posição {{positionLabel}}", + "preparingWorkspace": "A preparar a área de trabalho...", + "pressEnterToUpdateYourAnswer": "Prima Enter para atualizar a sua resposta…", + "pressEscToCancelCmdEnter": "Prima Esc para cancelar, Cmd+Enter para guardar", + "previousAgentError": "Erro anterior do agente", + "previousMessage": "Mensagem anterior", + "previousQuestion": "Pergunta anterior", + "priority": "Prioridade", + "priorityCritical": "Crítica", + "priorityHigh": "Alta", + "priorityLow": "Baixa", + "priorityMedium": "Média", + "profileCount_one": "{{count}} perfil", + "profileCount_other": "{{count}} perfis", + "progress": "Progresso", + "project": "Projeto", + "prompt": "Prompt", + "promptFieldLabel": "prompt", + "providerPrivateContextThatKandevDid": "O contexto privado do fornecedor que o Kandev não registou pode não transitar. Os terminais abertos, os servidores de desenvolvimento e outros processos da área de trabalho param, incluindo o servidor do editor da tarefa.", + "providerUnavailable": "Fornecedor indisponível", + "publishARedactedSnapshotOfThis": "Publique um retrato censurado desta tarefa concluída como um GitHub Gist secreto na sua conta.", + "publishToGithubGist": "Publicar no GitHub Gist", + "publishedAnyoneWithThisLinkCan": "Publicado. Qualquer pessoa com esta ligação pode ver a conversa.", + "publishing": "A publicar…", + "pull": "Pull", + "push": "Push", + "questionCount_one": "{{count}} pergunta", + "questionCount_other": "{{count}} perguntas", + "questionOfTotal": "Pergunta {{index}} de {{total}}", + "questionOfTotalAnswered": "Pergunta {{index}} de {{total}} (respondida)", + "queueMoreInstructions": "Colocar mais instruções em fila...", + "queued": "Em fila", + "ranCommands_one": "· executou {{count}} comando", + "ranCommands_other": "· executou {{count}} comandos", + "rebase": "Rebase", + "redactedRules": "Censurado: {{rules}}", + "referenceWorkItems": "Referenciar itens de trabalho", + "rejected": "Rejeitada", + "relatedBlockedBy": "Bloqueada por", + "relatedBlockers": "Bloqueios", + "relatedChildren": "Subtarefas", + "relatedParents": "Tarefas-mãe", + "relatedSiblings": "Tarefas irmãs", + "relatedTaskCount_one": "{{count}} tarefa relacionada", + "relatedTaskCount_other": "{{count}} tarefas relacionadas", + "remoteRepository": "Repositório remoto", + "remove": "Remover", + "remove2": "Remover {{name}}", + "remove3": "Remover {{identifier}}", + "removeAnnotation": "Remover a anotação {{number}}", + "removeFile": "Remover ficheiro", + "removeFilter": "Remover filtro", + "removeFromFavorites": "Remover dos favoritos", + "removeImage": "Remover imagem", + "removeLabeled": "Remover {{label}}", + "removeMessageFromFavorites": "Remover a mensagem dos favoritos", + "removeSource": "Remover fonte", + "rename": "Mudar o nome", + "repeatedTerminalCommandsHidden_one": "{{count}} comando de terminal idêntico repetido oculto", + "repeatedTerminalCommandsHidden_other": "{{count}} comandos de terminal idênticos repetidos ocultos", + "repeatedTerminalCommandsShown_one": "{{count}} comando de terminal idêntico repetido mostrado", + "repeatedTerminalCommandsShown_other": "{{count}} comandos de terminal idênticos repetidos mostrados", + "repositoriesAreAddedAsTopLevel": "Os repositórios são adicionados como entradas de topo na atual área de trabalho remota. O diretório de trabalho do agente não muda.", + "requestChanges": "Solicitar alterações", + "requestedChanges": "solicitou alterações", + "requestedChangesPlain": "{{who}} solicitou alterações", + "requestedChangesVerb": "Solicitou alterações", + "requestedChangesWithComment": "{{who}} solicitou alterações: '{{comment}}'", + "requestingMicrophone": "A pedir acesso ao microfone…", + "requestingMicrophonePermission": "A pedir permissão de microfone", + "resetAgentContext": "Repor o contexto do agente?", + "resetAgentContextClearsConversationHistory": "Repor o contexto do agente — limpa o histórico da conversa, preserva a área de trabalho", + "resetContext": "Repor o contexto", + "resetting": "A repor...", + "resize": "Redimensionar", + "restart": "Reiniciar", + "restartConsequenceRunningProcesses": "<0>Processos em execução: os terminais abertos, os servidores de desenvolvimento e outros processos da área de trabalho param. Isto inclui o servidor do editor da tarefa. Guarde o trabalho por guardar e reabra ou reinicie esses processos depois de as fontes serem anexadas.", + "restartConsequenceSessionContext": "<0>Contexto da sessão: o Kandev reinicia o agente inativo preservando a tarefa, a sessão, o estado da tarefa, as mensagens, o plano, as fontes anexadas e o modelo e modo selecionados. Os fornecedores que suportam retomar entre diretórios mantêm a sua sessão nativa. Os restantes iniciam uma nova sessão e recebem a conversa registada pelo Kandev com o prompt seguinte. O contexto privado do fornecedor que o Kandev não registou pode não transitar.", + "restartConsequenceWorkspace": "<0>Área de trabalho: a raiz da tarefa passa a ser o diretório de trabalho do agente. Numa tarefa com um único repositório, isto sobe o CWD um nível e mostra cada fonte como uma entrada de topo com nome. Os ficheiros existentes e as alterações do Git não são movidos nem descartados.", + "restarting": "A reiniciar...", + "restoreTree": "Restaurar a árvore", + "resume": "Retomar", + "resumeSession": "Retomar a sessão", + "resumeTree": "Retomar a árvore", + "retry": "Tentar novamente", + "retryChangeRequest": "Repetir o {{shortName}}", + "reverseISearch": "(reverse-i-search)", + "review": "Revisão", + "reviewComments": "Comentários da revisão", + "reviewCommentsTitle": "Comentários da revisão", + "reviewTheseChangesBeforeAddingSources": "Reveja estas alterações antes de adicionar fontes. A tarefa tem de permanecer inativa até a operação terminar.", + "reviewers": "Revisores", + "revoke": "Revogar", + "revokeShare": "Revogar a partilha", + "revoking": "A revogar…", + "roleApprover": "Aprovador", + "roleReviewer": "Revisor", + "run": "Executar", + "runCommand": "Executar o comando /{{name}}", + "runInTerminal": "Executar no terminal", + "running": "em execução", + "saveAs": "Guardar como:", + "saveAs2": "Guardar como…", + "saveOrDiscardBeforeNewView": "Guarde ou descarte as alterações antes de criar uma nova vista.", + "savedAndLocalGitRepositoriesMust": "Os repositórios Git guardados e locais têm de ter uma origem clonável para este executor. As pastas locais não estão disponíveis.", + "saving": "A guardar...", + "scriptExecutionMetadataUnavailable": "Execução de script (metadados indisponíveis)", + "scrollToActiveSession": "Ir para a sessão ativa", + "scrollToLastPrompt": "Ir para o último prompt", + "scrollToStartOfTranscript": "Ir para o início da transcrição", + "searchAgents": "Pesquisar agentes...", + "searchEllipsis": "Pesquisar…", + "searchEllipsis2": "Pesquisar...", + "searchFilesAndPrompts": "Pesquisar ficheiros e prompts...", + "searchProjects": "Pesquisar projetos...", + "searchTasks": "Pesquisar tarefas...", + "searching": "A pesquisar…", + "searchingWorkItems": "A pesquisar itens de trabalho…", + "selectFilesAndPromptsToInclude": "· Selecione os ficheiros e prompts a incluir", + "selectValue": "Selecionar valor", + "selectValues": "Selecionar valores", + "selected": "Selecionada", + "send": "Enviar", + "sendAnswer": "Enviar resposta", + "sendComment": "Enviar comentário", + "senderWithSession": "{{base}} · {{sessionName}}", + "sentAsNewMessage": "· enviada como nova mensagem", + "session": "sessão", + "sessionActions": "Ações da sessão", + "sessionContext": "Contexto da sessão", + "sessionCount_one": "{{count}} sessão", + "sessionCount_other": "{{count}} sessões", + "sessionFallbackLabel": "Sessão", + "sessions": "Sessões", + "setAsPrimary": "Definir como principal", + "setup": "Configuração", + "share": "Partilhar", + "shareThisTask": "Partilhar esta tarefa", + "shareThisTaskConversationAsA": "Partilhar a conversa desta tarefa como uma ligação pública", + "shift": "Shift", + "showCommandOutput": "Mostrar a saída do comando", + "showDetails": "Mostrar detalhes", + "showErrorDetails": "Mostrar os detalhes do erro: {{displayLabel}}", + "showFormatted": "Mostrar formatado", + "showFormattedMessage": "Mostrar a mensagem formatada", + "showFullTimestamp": "Mostrar a data e hora completas: {{absoluteTime}}", + "showMcpConnectionStatus": "Mostrar o estado da ligação MCP", + "showMessageMetadata": "Mostrar os metadados da mensagem", + "showOlderSessions_one": "Mostrar {{count}} sessão mais antiga", + "showOlderSessions_other": "Mostrar {{count}} sessões mais antigas", + "showRawText": "Mostrar o texto em bruto", + "showRightPanel": "Mostrar o painel direito", + "showSidebar": "Mostrar a barra lateral", + "sidebarFilters": "Filtros da barra lateral", + "skipAllQuestions": "Ignorar todas as perguntas", + "skipped": "Ignorada", + "snapshotMessageCount_one": "{{count}} mensagem", + "snapshotMessageCount_other": "{{count}} mensagens", + "someone": "Alguém", + "sort": "Ordenar", + "sortCreated": "Criação", + "sortCustom": "Personalizada", + "sortDirection": "Sentido da ordenação {{direction}}", + "sortStatus": "Estado", + "sortTitle": "Título", + "sortUpdated": "Atualização", + "source": "Fonte", + "sourceChangesTitle": "Alterações de {{source}}", + "stageAllChangesBeforeCommitting": "Preparar todas as alterações antes de fazer commit", + "stageApproval": "Aprovação", + "stageImplement": "Implementar", + "stageReview": "Revisão", + "stageShip": "Entregar", + "start": "iniciar", + "startAgent": "Iniciar o agente", + "startFreshSession": "Iniciar uma sessão nova", + "startVoiceInput": "Iniciar a entrada de voz", + "started": "Iniciada", + "starting": "A iniciar...", + "startingAgent": "A iniciar {{agentLabel}}", + "startingEllipsis": "A iniciar…", + "startingTerminal": "A iniciar o terminal…", + "startsANewSessionWithA": "Inicia uma nova sessão com uma janela de contexto limpa", + "state": "estado", + "status": "Estado", + "statusBacklog": "Backlog", + "statusBlocked": "Bloqueada", + "statusCancelled": "Cancelada", + "statusChangedFromTo": "Estado alterado de <1>{{from}} para <3>{{to}}", + "statusDone": "Concluída", + "statusInProgress": "Em curso", + "statusInReview": "Em revisão", + "statusTodo": "Por fazer", + "stepCount_one": "{{count}} passo", + "stepCount_other": "{{count}} passos", + "stepFieldLabel": "passo", + "stepNumber": "Passo {{index}}", + "stop": "Parar", + "stopRecording": "Parar a gravação", + "stopVoiceInput": "Parar a entrada de voz", + "stoppedWithAnError": "parou com um erro", + "subIssues": "Subissues", + "subTasks": "Subtarefas", + "submit": "Submeter", + "submitAnswers": "Submeter respostas", + "submitUnavailable": "Submissão indisponível", + "submitting": "A submeter…", + "successful": "{{operationName}} bem-sucedida", + "switchSidebarView": "Mudar a vista da barra lateral: {{name}}", + "system": "Sistema", + "systemSender": "Sistema", + "taskCount_one": "{{count}} tarefa", + "taskCount_other": "{{count}} tarefas", + "taskDetails": "Detalhes da tarefa", + "taskOverview": "Visão geral da tarefa", + "taskTreeCancelled": "Árvore de tarefas cancelada", + "taskTreePaused": "Árvore de tarefas em pausa", + "taskTreeRestored": "Árvore de tarefas restaurada", + "taskTreeResumed": "Árvore de tarefas retomada", + "tasks": "Tarefas", + "tasksAffected_one": "{{count}} tarefa afetada", + "tasksAffected_other": "{{count}} tarefas afetadas", + "terminal": "Terminal", + "terminalCount_one": "{{count}} terminal", + "terminalCount_other": "{{count}} terminais", + "terminalUnavailableNoActiveSession": "Terminal indisponível — não há sessão ativa.", + "terminals": "Terminais", + "theAgentAndRunningWorkspaceProcesses": "O agente e os processos da área de trabalho em execução continuam. Os ficheiros existentes, as alterações do Git e o contexto registado da tarefa e da sessão mantêm-se.", + "theAgentHasMovedOn": "O agente já avançou. A sua resposta será enviada como uma nova mensagem.", + "theAgentStoppedWithAnError": "O agente parou com um erro. Retome para repetir a mesma conversa ou inicie uma sessão nova.", + "theBrowserDidnTProvideImage": "O navegador não forneceu os dados da imagem. Guarde a imagem e anexe antes o ficheiro.", + "theConnectionDroppedOrTimedOut": "A ligação caiu ou excedeu o tempo limite. Atualize a tarefa para confirmar se a operação foi concluída.", + "theIdleAgentRestartsAtThe": "O agente inativo reinicia na raiz da tarefa. Os ficheiros existentes, as alterações do Git, o histórico da tarefa e da sessão, as mensagens, o plano, as fontes anexadas, o modelo e o modo mantêm-se.", + "thinking": "A pensar", + "thisConversationHasNoShareableContent": "Esta conversa não tem conteúdo partilhável.", + "thisIsTheOnlySessionFor": "Esta é a única sessão desta tarefa.", + "thisIsThePrimarySessionAnother": "Esta é a sessão principal. Outra sessão será definida como principal.", + "thisRepositoryMustHaveACloneable": "Este repositório tem de ter uma origem clonável; o Kandev verifica-a antes de o adicionar.", + "thisRestartsTheTaskWorkspace": "Isto reinicia a área de trabalho da tarefa", + "thisTask": "esta tarefa", + "thisTaskPointsToBranch": "Esta tarefa aponta para <1>{{branch}}, mas esse branch não foi encontrado no repositório remoto. Pode ter sido integrado ou eliminado.", + "thisUpdatesTheLiveTaskWorkspace": "Isto atualiza a área de trabalho da tarefa em uso", + "thisWillClearTheAgentS": "Isto limpa o histórico da conversa do agente e inicia um contexto novo. A sua área de trabalho, os ficheiros e o estado do Git são preservados.", + "thisWillPermanentlyDeleteTheConversation": "Isto elimina permanentemente o histórico da conversa desta sessão.", + "timedOutAgentMovedOn": "Tempo esgotado (o agente avançou)", + "title": "título", + "title2": "Título do {{longName}}", + "title3": "Título do {{longName}}...", + "titleOptional": "Título (opcional)", + "toFocus": "para focar", + "todos": "Tarefas por fazer", + "todosCompleted": "{{completed}}/{{total}} concluídas", + "tokenCount_one": "{{formatted}} token", + "tokenCount_other": "{{formatted}} tokens", + "tokens": "tokens", + "tool": "ferramenta", + "toolCallCount_one": "{{count}} chamada de ferramenta", + "toolCallCount_other": "{{count}} chamadas de ferramentas", + "toolCount_one": "{{count}} ferramenta", + "toolCount_other": "{{count}} ferramentas", + "tools": "ferramentas", + "transcribing": "A transcrever…", + "transcribingVoiceInput": "A transcrever a entrada de voz", + "treeActionFailed": "A ação sobre a árvore falhou", + "treeCost": "Custo da árvore", + "treeTasks": "Tarefas da árvore", + "truncated": "truncado", + "truncatedParen": "(truncado)", + "tryAgain": "Tente novamente", + "turnForDuration": "durante {{duration}}", + "turnMessageCount_one": "· {{count}} mensagem", + "turnMessageCount_other": "· {{count}} mensagens", + "turnWorked": "trabalhou", + "turnWorking": "a trabalhar", + "typeToSearch": "Escreva para pesquisar...", + "typeToSearchPreviousMessages": "Escreva para pesquisar nas mensagens anteriores...", + "typeToSearchWorkItems": "Escreva para pesquisar itens de trabalho", + "uncommitted": "Sem commit", + "unknown": "Desconhecido", + "unnamed": "(sem nome)", + "unpinWillBeRemovedAfterSend": "Desafixar (será removido após o envio)", + "untitled": "(sem título)", + "update": "Atualizar", + "updated": "Atualizada", + "updatedTodos": "Tarefas por fazer atualizadas", + "updating": "A atualizar…", + "uploaded": "{{name}} carregado", + "useAnExistingCheckoutOnThis": "Usar um checkout existente nesta máquina.", + "usesTheCurrentCheckoutKandevDoes": "Usa o checkout atual. O Kandev não muda o branch do seu repositório local.", + "value": "Valor", + "viaSession": "através da sessão", + "view": "Vista:", + "viewLimitReached_one": "Pode guardar até {{count}} vista.", + "viewLimitReached_other": "Pode guardar até {{count}} vistas.", + "viewName": "Nome da vista", + "voiceInput": "Entrada de voz", + "voiceInputNeedsHttps": "A entrada de voz precisa de HTTPS. Abra este site em https:// (ou http://localhost) — a maioria dos navegadores móveis bloqueia as APIs de microfone em origens inseguras.", + "voiceInputUnavailable": "Entrada de voz indisponível", + "voiceInputUnavailableHere": "A entrada de voz não está disponível aqui.", + "voiceInputUnavailableTapForDetails": "Entrada de voz indisponível — toque para ver os detalhes", + "voiceInputUnsupportedBrowser": "A entrada de voz não é suportada neste navegador. Experimente o Chrome, o Edge ou o Safari 14.5+.", + "voiceTooltipHold": "{{tooltip}} (manter premido)", + "waitForActiveTurnToFinish": "Aguarde que o turno ativo ou a chamada de ferramenta terminem antes de adicionar fontes.", + "waitForTaskSourcesToLoad": "Aguarde que as fontes da tarefa acabem de carregar antes de adicionar fontes.", + "walkthrough": "Passo a passo: {{title}}", + "workedRanCommands_one": "Trabalhou -- executou {{count}} comando", + "workedRanCommands_other": "Trabalhou -- executou {{count}} comandos", + "workflow": "fluxo de trabalho", + "workflowCount_one": "{{count}} fluxo de trabalho", + "workflowCount_other": "{{count}} fluxos de trabalho", + "workflowLabel": "Fluxo de trabalho: {{label}}", + "workflowSender": "Fluxo de trabalho", + "workflowStepMessageFrom": "Mensagem do passo do fluxo de trabalho de {{label}}", + "working": "A trabalhar...", + "working3": "A trabalhar", + "working4": "A trabalhar…", + "workingInBackground": "A trabalhar em segundo plano", + "workspaceCount_one": "{{count}} área de trabalho", + "workspaceCount_other": "{{count}} áreas de trabalho", + "workspaceRepository": "Repositório da área de trabalho", + "wouldCreateABlockerCycle": "Criaria um ciclo de bloqueios: {{cycle}}", + "writeYourChangesHere": "Escreva aqui as suas alterações", + "you": "Eu", + "youCanAttachUpToFiles": "Pode anexar até {{maxFiles}} ficheiros.", + "yourReviewIsRequestedOnThis": "A sua revisão foi pedida nesta tarefa." +} diff --git a/apps/web/src/locales/pt-pt/tasks.json b/apps/web/src/locales/pt-pt/tasks.json new file mode 100644 index 0000000000..cdb7293b80 --- /dev/null +++ b/apps/web/src/locales/pt-pt/tasks.json @@ -0,0 +1,44 @@ +{ + "approvalRequired": "Aprovação necessária", + "archive": "Arquivar", + "archived": "Arquivada", + "archiveTask": "Arquivar tarefa", + "changesRequested": "Alterações solicitadas", + "columnStep": "Passo", + "columnTask": "Tarefa", + "columnUpdated": "Atualizada", + "columnWorkflow": "Fluxo de trabalho", + "delete": "Eliminar", + "deleteTask": "Eliminar tarefa", + "goToFirstPage": "Ir para a primeira página", + "goToLastPage": "Ir para a última página", + "goToNextPage": "Ir para a página seguinte", + "goToPreviousPage": "Ir para a página anterior", + "group": "Agrupar", + "groupByNone": "Nenhum", + "groupByRepository": "Repositório", + "groupByState": "Estado", + "groupByWorkflow": "Fluxo de trabalho", + "loading": "A carregar...", + "loadingTasks": "A carregar as tarefas...", + "noRepository": "Sem repositório", + "noTasksFound": "Nenhuma tarefa encontrada.", + "noWorkflow": "Sem fluxo de trabalho", + "openInAdvancedView": "Abrir na vista avançada", + "openInOfficeView": "Abrir na vista de escritório", + "rowsPerPage": "Linhas por página", + "showArchived": "Mostrar arquivadas", + "showingRange_one": "A mostrar {{start}} a {{end}} de {{count}} resultado", + "showingRange_other": "A mostrar {{start}} a {{end}} de {{count}} resultados", + "simpleViewForKanbanTasksShows": "A vista simples das tarefas do kanban mostra o chat que já está nos painéis. Para a experiência completa ao estilo Linear (comentários, propriedades, cronologia de atividade), abra esta tarefa na vista de escritório.", + "simpleViewShowsTheChatThat": "A vista simples mostra o chat que já está nos painéis. Use {{simpleQuery}} para voltar ao esquema avançado.", + "sort": "Ordenar", + "sortCreatedNewest": "Criadas mais recentes", + "sortCreatedOldest": "Criadas mais antigas", + "sortTitleAZ": "Título A-Z", + "sortTitleZA": "Título Z-A", + "sortUpdatedNewest": "Atualizadas mais recentes", + "sortUpdatedOldest": "Atualizadas mais antigas", + "unarchive": "Desarquivar", + "unarchiveTask": "Desarquivar tarefa" +} diff --git a/apps/web/src/locales/pt-pt/workflows.json b/apps/web/src/locales/pt-pt/workflows.json new file mode 100644 index 0000000000..cbf5156bc9 --- /dev/null +++ b/apps/web/src/locales/pt-pt/workflows.json @@ -0,0 +1,242 @@ +{ + "aConfiguredRepository": "um repositório configurado", + "addCondition": "Adicionar condição", + "adding": "A adicionar...", + "addWorkflow": "Adicionar fluxo de trabalho", + "agentProfile": "Perfil de agente", + "agentProfileHelp": "Perfil de agente pré-definido para as tarefas deste fluxo de trabalho. Quando definido, o seletor de agente fica bloqueado na janela de criação de tarefas.", + "allowManualMove": "Permitir movimentação manual", + "allowManualMoveHelp": "Permitir arrastar tarefas para este passo no quadro.", + "applyAnyway": "Aplicar mesmo assim", + "autoArchive": "Arquivar automaticamente", + "autoArchiveAfter": "após", + "autoArchiveHelp": "Arquiva automaticamente as tarefas depois de estarem neste passo durante um determinado número de horas. Útil no último passo de um fluxo de trabalho (por exemplo, Concluído) para manter o quadro limpo.", + "autoArchiveHours": "horas", + "automaticWorkflowCycle": "Ciclo automático do fluxo de trabalho", + "autoStartAgent": "Iniciar o agente automaticamente", + "autoStartAgentHelp": "Inicia automaticamente o agente quando uma tarefa entra neste passo.", + "autoSync": "Sincronização automática", + "autoSyncOff": "sincronização automática desligada", + "autoTransition": "Transição automática", + "childrenCompletedHelp": "Use isto num passo de tarefa-mãe. Quando todas as subtarefas diretas ativas estiverem CONCLUÍDAS, FALHADAS ou CANCELADAS, o Kandev executa esta transição uma vez. As subtarefas arquivadas e efémeras são ignoradas. As subtarefas de segundo nível não contam aqui e nada é executado se a tarefa-mãe não tiver subtarefas.", + "childrenCompletedHelpAria": "Como funcionam as transições por conclusão de subtarefas", + "chooseAgentFamily": "Escolher a família de agentes", + "chooseModelAndSessionSettings": "Escolher o modelo e as definições de sessão", + "close": "Fechar", + "color": "Cor", + "colorBlue": "Azul", + "colorCyan": "Ciano", + "colorGray": "Cinzento", + "colorGreen": "Verde", + "colorIndigo": "Índigo", + "colorOrange": "Laranja", + "colorPurple": "Roxo", + "colorRed": "Vermelho", + "colorYellow": "Amarelo", + "configureOriginalSessionOptions": "Configurar as opções originais", + "configureOriginalSessionOptionsDescription": "Alterar o separador de conversa existente apenas quando a sua família de agentes inicial corresponder a uma regra.", + "confirmWorkflowCycle": "Confirmar o ciclo do fluxo de trabalho", + "confirmWorkflowCycleDescription": "Reveja a repetição da execução do agente antes de continuar.", + "copied": "Copiado", + "copy": "Copiar", + "createAnyway": "Criar mesmo assim", + "customAgentProfile": "Perfil de agente personalizado", + "customTemplate": "Personalizado", + "customTemplateDescription": "Crie de raiz o seu próprio fluxo de trabalho com agentes.", + "cycle": "Ciclo", + "delete": "Eliminar", + "deleteAndArchiveTasks": "Eliminar e arquivar tarefas", + "deleteStep": "Eliminar passo", + "deleteStepAffectsTasks_one": "Eliminar {{stepName}} também afeta a sua {{count}} tarefa.", + "deleteStepAffectsTasks_other": "Eliminar {{stepName}} também afeta as suas {{count}} tarefas.", + "deleteStepAndTasks": "Eliminar passo e tarefas", + "deleteStepDialogTitle": "Eliminar passo", + "deleteStepNoTasks": "Isto elimina permanentemente o passo {{stepName}} do fluxo de trabalho.", + "deleteStepWithMigration_one": "{{stepName}} tem {{count}} tarefa. Escolha para onde migrá-la ou elimine o passo e as suas tarefas.", + "deleteStepWithMigration_other": "{{stepName}} tem {{count}} tarefas. Escolha para onde migrá-las ou elimine o passo e as suas tarefas.", + "deleteWorkflow": "Eliminar fluxo de trabalho", + "deleteWorkflowDialogTitle": "Eliminar fluxo de trabalho", + "deleteWorkflowNoTasks": "Isto elimina permanentemente o fluxo de trabalho e todos os seus passos.", + "deleteWorkflowWithTasks_one": "Este fluxo de trabalho tem {{count}} tarefa. Escolha para onde migrá-la ou elimine o fluxo de trabalho e arquive as tarefas.", + "deleteWorkflowWithTasks_other": "Este fluxo de trabalho tem {{count}} tarefas. Escolha para onde migrá-las ou elimine o fluxo de trabalho e arquive as tarefas.", + "directoryLine": "Diretório {{path}}", + "disablePlanMode": "Desativar o modo de plano", + "disablePlanModeOnComplete": "Desativar o modo de plano ao concluir", + "disablePlanModeOnCompleteHelp": "Desliga o modo de plano depois de o agente terminar um turno, mesmo que a tarefa permaneça neste passo.", + "disablePlanModeOnExitHelp": "Mantém o modo de plano ligado em todos os turnos deste passo e desliga-o apenas quando a tarefa passa para outro passo.", + "doNothing": "Não fazer nada", + "doNothingWaitForUser": "Não fazer nada (aguardar o utilizador)", + "everySeconds_one": "a cada {{count}}s", + "everySeconds_other": "a cada {{count}}s", + "export": "Exportar", + "exportAll": "Exportar tudo", + "exportWorkflowsTitle": "Exportar fluxos de trabalho", + "exportWorkflowTitle": "Exportar fluxo de trabalho", + "failedToAddWorkflowStep": "Não foi possível adicionar o passo do fluxo de trabalho", + "failedToCheckWorkflowStepTasks": "Não foi possível verificar as tarefas do passo do fluxo de trabalho", + "failedToCheckWorkflowTasks": "Não foi possível verificar as tarefas do fluxo de trabalho", + "failedToDeleteStep": "Não foi possível eliminar o passo", + "failedToDeleteWorkflow": "Não foi possível eliminar o fluxo de trabalho", + "failedToExportWorkflow": "Não foi possível exportar o fluxo de trabalho", + "failedToExportWorkflows": "Não foi possível exportar os fluxos de trabalho", + "failedToImportWorkflows": "Não foi possível importar os fluxos de trabalho", + "failedToLoadSyncConfig": "Não foi possível carregar a configuração de sincronização de fluxos de trabalho: {{error}}", + "failedToLoadWorkflowSteps": "Não foi possível carregar os passos do fluxo de trabalho", + "failedToMigrateTasks": "Não foi possível migrar as tarefas", + "failedToSaveWorkflowChanges": "Não foi possível guardar as alterações do fluxo de trabalho", + "failedToUpdateWorkflowStep": "Não foi possível atualizar o passo do fluxo de trabalho", + "githubSync": "Sincronização com o GitHub", + "githubSyncDescription": "Sincroniza automaticamente as definições de fluxos de trabalho de um repositório do GitHub para esta área de trabalho.", + "hopNumber": "Salto {{index}}", + "import": "Importar", + "importCompleteTitle": "Importação concluída", + "importCreated": "Criados: {{names}}", + "importing": "A importar...", + "importSkipped": "Ignorados (já existem): {{names}}", + "importWorkflowsTitle": "Importar fluxos de trabalho", + "invalidYaml": "YAML inválido", + "keepCurrent": "Manter o atual", + "lastAttempt": "última tentativa {{when}}", + "lastSynced": "última sincronização {{when}}", + "loadingWorkflowSteps": "A carregar os passos do fluxo de trabalho...", + "manageWorkflowsForThisWorkspace": "Faça a gestão dos fluxos de trabalho desta área de trabalho.", + "migrateAndDelete": "Migrar e eliminar", + "migrateAndDeleteStep": "Migrar e eliminar o passo", + "migrating": "A migrar...", + "moreInformation": "Mais informações", + "moveToNextStep": "Passar ao passo seguinte", + "moveToPreviousStep": "Voltar ao passo anterior", + "moveToSpecificStep": "Passar para um passo específico", + "name": "Nome", + "noFeederStep": "Sem passo alimentador", + "noneUseTaskDefault": "Nenhum (usar a pré-definição da tarefa)", + "noProfileOverride": "Sem substituição de perfil", + "notARecognizedGitHubLink": "Não é uma ligação reconhecida de um repositório do GitHub.", + "notSyncedYet": "ainda não sincronizado — use Sincronizar agora", + "onExit": "À saída", + "onExitActions": "Ações à saída", + "onExitHelp": "É executado ao sair deste passo (antes de entrar no passo seguinte).", + "onTurnCompleteHelp": "É executado depois de o agente terminar um turno. Use para fazer avançar as tarefas pela pipeline automaticamente.", + "onTurnCompleteLabel": "Ao concluir o turno", + "onTurnCompleteTrigger": "Ao concluir o turno", + "onTurnStartHelp": "É executado quando um utilizador envia uma mensagem. Use em ciclos de revisão (por exemplo, voltar a Em curso quando há feedback).", + "onTurnStartLabel": "Ao iniciar o turno", + "onTurnStartTrigger": "Ao iniciar o turno", + "onUserMessage": "Na mensagem do utilizador", + "orPasteYaml": "Ou cole o YAML", + "overrideAgentProfileHelp": "Substitui o perfil de agente neste passo. Um perfil diferente cria uma nova sessão com contexto novo ao entrar neste passo.", + "overrideOriginalSessionOptions": "Substituir as opções da sessão original", + "overrideOriginalSessionOptionsHelp": "Mantém o separador de conversa original alterando as definições de sessão para este passo. Por exemplo, começar com o modelo 5.6 Sol e mudar para o 5.6 Luna no trabalho de implementação.", + "pasteGitHubLinkHint": "Cole uma ligação do GitHub — as ligações /tree/… trazem também o branch e o diretório.", + "planMode": "Modo de plano", + "planModeHelp": "O agente propõe um plano em vez de fazer alterações diretamente.", + "pollDisabledHint": "As sincronizações só são executadas quando carrega em Sincronizar agora.", + "pollEnabledHint": "Verifica o repositório neste intervalo (mínimo 60s).", + "pollIntervalSeconds": "Intervalo de sondagem (segundos)", + "potentialRepeatedAgentRun": "Possível repetição da execução do agente", + "promptSourceStepPrompt": "Voltar a entrar em \"{{stepName}}\" envia o prompt do passo em vez da descrição da tarefa.", + "promptSourceStepPromptWithTaskDescription": "Voltar a entrar em \"{{stepName}}\" envia o prompt do passo já processado, incluindo a descrição da tarefa.", + "promptSourceTaskDescription": "\"{{stepName}}\" não tem prompt de passo, pelo que voltar a entrar envia a descrição da tarefa.", + "pullFrom": "Puxar de", + "pullFromHelp": "Passo alimentador opcional do qual puxar trabalho em fila quando este passo tiver capacidade.", + "readOnlyManagedBySync": "Só de leitura — gerido pela sincronização de fluxos de trabalho", + "remove": "Remover", + "removeAgentCondition": "Remover a condição de agente {{index}}", + "removeConditionalSessionConfigBeforeProfile": "Remova a configuração de sessão condicional antes de escolher um perfil de agente fixo para este passo.", + "removeSyncConfirm": "Remover a configuração de sincronização de fluxos de trabalho? Isto não elimina os fluxos de trabalho já sincronizados.", + "repositoryLink": "Ligação do repositório", + "repositoryRoot": "(raiz do repositório)", + "resetAgentContext": "Repor o contexto do agente", + "resetAgentContextHelp": "Reinicia o agente com um contexto de conversa novo ao entrar neste passo. Útil em passos de revisão que precisam de uma perspetiva imparcial.", + "resetAgentContextHelpWithProfile": "Não é necessário — mudar de perfil de agente já cria uma nova sessão com contexto novo.", + "restoreOriginal": "Restaurar o original", + "retryPartialSaveBeforeLeaving": "Repita a gravação parcial do fluxo de trabalho antes de sair", + "returnToWorkflow": "Voltar ao fluxo de trabalho", + "runCompletionActionsWhenTurnCancelled": "Executar as ações de conclusão quando um turno é cancelado", + "runCompletionActionsWhenTurnCancelledHelp": "Aplica-se apenas quando um utilizador cancela explicitamente um turno. As ações de entrada do passo de destino podem iniciar imediatamente outro turno do agente.", + "save": "Guardar", + "saveBeforeExporting": "Guarde o fluxo de trabalho antes de exportar.", + "saveFailed": "Não foi possível guardar: {{error}}", + "saveWorkflowsBeforeOrdering": "Guarde os fluxos de trabalho antes de os ordenar", + "saving": "A guardar...", + "seconds": "segundos", + "selectAction": "Selecionar ação", + "selectedStepFallback": "selecionado", + "selectStep": "Selecionar passo", + "selectWorkflow": "Selecionar fluxo de trabalho", + "sessionConfigCarryForwardWarning": "As definições de passos anteriores do fluxo de trabalho podem transitar para este passo, porque o separador de conversa original é reutilizado.", + "sessionConfigCarryForwardWarningMessage": "As definições alteradas em {{stepName}} podem transitar para este passo em {{agentName}}. Escolha manter, restaurar o original ou definir novos valores.", + "sessionConfigEmptyRules": "Adicione uma condição para escolher que agente inicial recebe as definições.", + "sessionConfigFixedProfileWarning": "Remova a substituição de perfil fixo antes de configurar a sessão original. Os dois comportamentos são mutuamente exclusivos.", + "sessionConfigKeep": "Manter", + "sessionConfigModelOptionsUnavailable": "As opções de modelo não estão disponíveis para este agente. Atualize as capacidades do agente antes de guardar esta condição.", + "sessionConfigRestore": "Restaurar", + "sessionConfigRulesHelp": "As regras aplicam-se à primeira sessão de agente da tarefa. Nunca criam nem trocam separadores de conversa.", + "sessionConfigSetNew": "Definir novos", + "setSettings": "Definir as definições", + "settingsForAgent": "Definições de {{agent}}", + "showInCommandPanel": "Mostrar no painel de comandos", + "showInCommandPanelHelp": "Mostra as tarefas deste passo ao abrir o painel de comandos (Cmd+K). Útil para esconder do acesso rápido os passos de backlog ou de concluído.", + "startStep": "Passo inicial", + "startStepHelp": "As novas tarefas começam neste passo. Só um passo por fluxo de trabalho pode ser o passo inicial.", + "stepIsPartOfReplayCycle": "{{stepName}} faz parte de um ciclo de repetição", + "stepNamePlaceholder": "Nome do passo", + "stepPrompt": "Prompt do passo", + "stepPromptHelp": "Instruções personalizadas para o agente neste passo. Use {{taskPrompt}} para incluir a descrição da tarefa.", + "stepPromptPlaceholderExample": "Implementar a autenticação de utilizadores com OAuth2", + "stepPromptPlaceholderTaskPrompt": "A descrição original da tarefa indicada pelo utilizador", + "stepPromptUsageHint": "Escreva {{open}} para ver os marcadores ({{taskPrompt}} insere a descrição da tarefa) ou @ para referenciar um prompt guardado pelo nome — o seu conteúdo é anexado como contexto oculto e editar o prompt guardado atualiza todos os passos que o referenciam. Nota: {{taskPrompt}} só é expandido no próprio prompt do passo, não dentro de um prompt guardado referenciado.", + "syncCompletedWithWarnings": "Sincronização concluída com avisos", + "syncConfigSaved": "Configuração de sincronização de fluxos de trabalho guardada", + "syncDirectoryHelp": "O diretório deve conter ficheiros de exportação de fluxos de trabalho ({{extensions}}) no formato {{format}} — o mesmo formato produzido pela exportação de fluxos de trabalho.", + "synced": "Sincronizado", + "syncedBadgeTooltip": "Só de leitura - gerido pela sincronização de fluxos de trabalho a partir de {{source}}. Edite-o ou remova-o no repositório sincronizado.", + "syncedReadOnlyReason": "Gerido pela sincronização de fluxos de trabalho — edite-o ou remova-o no repositório sincronizado", + "syncFailed": "A sincronização falhou", + "syncFailedWithError": "A sincronização falhou: {{error}}", + "syncingFromRepository": "A sincronizar a partir de <1>{{repository}}", + "syncNow": "Sincronizar agora", + "syncRemoved": "Sincronização de fluxos de trabalho removida — os fluxos sincronizados voltam a ser editáveis", + "syncRemoveFailed": "Não foi possível eliminar: {{error}}", + "syncResolvedTarget": "A sincronizar {{owner}}/{{repo}} @ {{branch}} — diretório {{directory}}.", + "targetStep": "Passo de destino", + "targetWorkflow": "Fluxo de trabalho de destino", + "template": "Modelo", + "templateCodeReview": "Revisão de código", + "templatePlan": "Plano", + "templates": "Modelos:", + "templateSecurityAudit": "Auditoria de segurança", + "transitionAuto": "auto", + "transitionBack": "back", + "transitionGoto": "goto", + "transitionManual": "manual", + "transitions": "Transições", + "unsavedStepChangesDiscarded": "As alterações não guardadas do passo serão descartadas.", + "unsavedWorkflowChangesDiscarded": "As alterações não guardadas do fluxo de trabalho serão descartadas.", + "update": "Atualizar", + "uploadYamlFile": "Carregar ficheiro YAML", + "userActionRequired": "É necessária uma ação do utilizador", + "waitForAgentCompletionSignal": "Aguardar o sinal de conclusão do agente", + "waitForAgentCompletionSignalHelp": "Só avança automaticamente depois de o agente chamar {{tool}}. Caso contrário, o fim do turno é tratado como conclusão.", + "waitingForFirstSync": "a aguardar a primeira sincronização…", + "waitingForRetry": "A aguardar que a alteração falhada seja repetida.", + "whenAgentIs": "Quando o agente for", + "whenChildTasksComplete": "Quando as subtarefas ficarem concluídas", + "wipLimit": "Limite de WIP", + "wipLimitHelp": "Máximo de tarefas admitidas (ativas) neste passo. O excedente permanece visível numa fila. Use 0 para ilimitado.", + "wipLimitsNote": "O WIP limita o trabalho ativo, não a visibilidade. O excedente permanece no quadro até haver capacidade; se um alimentador selecionado também estiver cheio, a criação de novas tarefas é rejeitada.", + "workflowCycleBlocked": "Ciclo do fluxo de trabalho bloqueado", + "workflowCycleBlockedDescription": "Altere os passos do fluxo de trabalho para remover o ciclo automático antes de continuar.", + "workflowCycleBlockingBody": "Este percurso volta a entrar em \"{{stepName}}\" e pode iniciar o agente novamente sem outra ação do utilizador.", + "workflowCycleReplayPathFor": "Percurso de repetição de {{stepName}}", + "workflowCycleWarningBody": "Este percurso pode voltar a entrar em \"{{stepName}}\" e iniciar novamente o agente após uma ação do utilizador.", + "workflowDetails": "Detalhes do fluxo de trabalho", + "workflowName": "Nome do fluxo de trabalho", + "workflowNameIsRequired": "O nome do fluxo de trabalho é obrigatório", + "workflowNamePlaceholder": "Fluxo de trabalho do meu projeto", + "workflows": "Fluxos de trabalho", + "workflowsSectionDescription": "Crie pipelines autónomas com transições automáticas ou fluxos de trabalho manuais em que é o utilizador a mover as tarefas", + "workflowSteps": "Passos do fluxo de trabalho", + "workflowSyncCompleted": "Sincronização de fluxos de trabalho concluída", + "workspaceSettings": "Definições da área de trabalho" +} diff --git a/apps/web/src/locales/pt-pt/workspaces.json b/apps/web/src/locales/pt-pt/workspaces.json new file mode 100644 index 0000000000..15ed459006 --- /dev/null +++ b/apps/web/src/locales/pt-pt/workspaces.json @@ -0,0 +1,123 @@ +{ + "addLocalRepository": "Adicionar repositório local", + "addScript": "Adicionar script", + "addWorkspace": "Adicionar área de trabalho", + "alwaysPullBeforeWorktree": "Fazer sempre pull antes de criar um novo worktree", + "backToWorkspaces": "Voltar às áreas de trabalho", + "branchTemplateIssueKey": "Nome alternativo de ticket. Use o nome que ler melhor no seu modelo.", + "branchTemplateLiteralPrefix": "Escreva os prefixos literais diretamente, por exemplo <0>{{example}}.", + "branchTemplatePlaceholders": "Marcadores do modelo de branch", + "branchTemplateSuffix": "Sufixo aleatório curto. Opcional, mas recomendado para evitar colisões de nomes de branch. Exemplo: {{example}}.", + "branchTemplateTaskId": "UUID da tarefa do Kandev, sanitizado para nomes de branch. Exemplo: {{example}}.", + "branchTemplateTicket": "Primeiro o identificador da tarefa; caso contrário, metadados do Jira, do Linear, de uma issue do GitHub ou de um PR do GitHub. Exemplos: {{example}}.", + "branchTemplateTitle": "Título da tarefa sanitizado para ASCII minúsculo, separado por hífenes, máx. 20 caracteres. Exemplo: {{example}}.", + "branchTemplateTitleFull": "A mesma sanitização do título, mas com máx. 80 caracteres. Exemplo: {{example}}.", + "buildScriptChip": "script de build", + "checking": "A verificar...", + "cleanupScript": "Script de limpeza", + "cleanupScriptChip": "script de limpeza", + "cleanupScriptHelp": "É executado quando a tarefa é concluída, para limpar a área de trabalho.", + "close": "Fechar", + "closeRepositoryEditor": "Fechar o editor de repositórios", + "confirmDelete": "Confirmar a eliminação", + "copyFiles": "Copiar ficheiros", + "copyFilesHelp": "Caminhos ignorados pelo Git copiados para os novos worktrees. Acrescente <0>{{symlink}} a uma entrada para a ligar ao repositório principal. Use <1>{{escapedSymlink}} para um nome de ficheiro literal terminado em <2>{{symlink}}.", + "copyFilesPathsResolved": "Os caminhos são resolvidos relativamente à raiz do repositório e semeados em cada novo worktree, preservando a sua localização relativa. Os ficheiros já existentes no worktree não são substituídos.", + "copyFilesPatternBraces": "<0>{{braces}} alternância com chavetas, ex.: <1>{{example}}", + "copyFilesPatternGlobstar": "<0>{{globstar}} corresponde a qualquer número de diretórios, ex.: <1>{{example}}", + "copyFilesPatternLiteral": "<0>{{pattern}} ficheiro ou diretório literal (os diretórios são copiados recursivamente)", + "copyFilesPatternWildcards": "<0>{{star}}, <1>{{question}}, <2>{{charClass}} caracteres universais de um só segmento", + "copyFilesRemoteFallback": "Os executores remotos copiam o conteúdo dos ficheiros em vez de criarem ligações simbólicas.", + "copyFilesSizeLimit": "Os ficheiros com mais de {{limit}} são ignorados ao copiar para executores remotos. Os worktrees locais copiam-nos sem limite de tamanho.", + "customScriptsLabel": "Scripts personalizados", + "customScripts_one": "{{count}} script personalizado", + "customScripts_other": "{{count}} scripts personalizados", + "defaultAgentProfile": "Perfil de agente pré-definido", + "defaultExecutor": "Executor pré-definido", + "delete": "Eliminar", + "deleteRepository": "Eliminar repositório", + "deleteRepositoryConfirm": "Isto remove o repositório e os seus scripts. Esta ação não pode ser anulada.", + "deleteRepositoryTitle": "Eliminar repositório", + "deleteRepositoryActiveSessions_one": "Este repositório é usado por {{count}} sessão de agente ativa. Pare-a ou termine-a antes de eliminar o repositório.", + "deleteRepositoryActiveSessions_other": "Este repositório é usado por {{count}} sessões de agente ativas. Pare-as ou termine-as antes de eliminar o repositório.", + "deleteThisWorkspace": "Eliminar esta área de trabalho", + "deleteWorkspace": "Eliminar área de trabalho", + "devScript": "Script de dev", + "devScriptChip": "script de dev", + "devScriptHelp": "Usado para iniciar o servidor de dev da pré-visualização deste repositório. Use <0>{{port}} para atribuição automática da porta.", + "discoverRepositoryDescription": "Selecione um repositório descoberto ou indique um caminho absoluto para validar.", + "discoveredRepositories": "Repositórios descobertos", + "edit": "Editar", + "environmentSecrets": "Segredos de ambiente", + "environmentSecretsDescription": "Associe segredos guardados a chaves de ambiente para as tarefas que usam este repositório. Os valores dos segredos nunca são mostrados aqui.", + "environmentSecretKey": "Chave de ambiente", + "environmentSecretKeyPlaceholder": "NPM_TOKEN", + "environmentSecretValue": "Segredo guardado", + "selectEnvironmentSecret": "Selecione um segredo", + "missingSecretReference": "Referência de segredo em falta", + "noEnvironmentSecrets": "Não há segredos de ambiente configurados.", + "noAvailableEnvironmentSecrets": "Não há segredos Globais nem da Área de trabalho disponíveis.", + "addEnvironmentSecret": "Adicionar segredo de ambiente", + "removeEnvironmentSecret": "Remover o segredo de ambiente {{key}}", + "environmentSecretKeyInvalid": "Use uma chave de ambiente POSIX válida.", + "environmentSecretKeyDuplicate": "Cada chave de ambiente só pode ser associada uma vez.", + "environmentSecretKeyReserved": "Esta chave de ambiente está reservada pelo Kandev.", + "environmentSecretRequired": "Selecione um segredo guardado para cada chave de ambiente.", + "globalSecretScope": "Global", + "workspaceSecretScope": "Área de trabalho", + "failedToCheckRepositorySessions": "Não foi possível verificar as sessões do repositório", + "failedToCreateWorkspace": "Não foi possível criar a área de trabalho", + "failedToDeleteRepository": "Não foi possível eliminar o repositório", + "failedToDeleteWorkspace": "Não foi possível eliminar a área de trabalho", + "failedToDiscoverRepositories": "Não foi possível descobrir repositórios", + "failedToSaveRepository": "Não foi possível guardar o repositório", + "failedToSaveWorkspace": "Não foi possível guardar a área de trabalho", + "filterRepositories": "Filtrar repositórios...", + "invalidRepositoryPath": "Caminho de repositório inválido", + "localPath": "Caminho local", + "localPathNotSet": "Caminho local por definir", + "manageRepositoriesConnected": "Faça a gestão dos repositórios ligados a esta área de trabalho.", + "manageWorkspaceDetails": "Faça a gestão dos detalhes da área de trabalho e salte para fluxos de trabalho ou repositórios.", + "manageYourWorkspacesAndWorkflows": "Faça a gestão das suas áreas de trabalho e fluxos de trabalho", + "manualPath": "Caminho manual", + "name": "Nome", + "noAgentProfilesAvailable": "Não há perfis de agente disponíveis", + "noCustomScripts": "Sem scripts personalizados", + "noDefault": "Sem pré-definição", + "noExecutorsAvailable": "Não há executores disponíveis", + "noRepositoriesFound": "Nenhum repositório encontrado.", + "noScriptsYet": "Ainda não há scripts.", + "noWorkspacesConfigured": "Não há áreas de trabalho configuradas. Adicione a sua primeira área de trabalho para começar.", + "patternSyntax": "Sintaxe dos padrões", + "remoteRepository": "Repositório remoto", + "repositories": "Repositórios", + "repositoriesInThisWorkspace": "Repositórios nesta área de trabalho", + "repository": "Repositório", + "repositoryName": "Nome do repositório", + "scanningRepositories": "A analisar os repositórios...", + "scriptName": "Nome do script", + "selectDefaultAgentProfile": "Selecionar o perfil de agente pré-definido", + "selectDefaultExecutor": "Selecionar o executor pré-definido", + "setupScript": "Script de configuração", + "setupScriptHelp": "É executado quando o repositório é clonado ou quando é criado um worktree do Git.", + "sourceLocal": "Local", + "sourceRemote": "Remoto", + "supportedPatterns": "Padrões suportados:", + "thisActionCannotBeUndone": "Esta ação não pode ser anulada.", + "typeWorkspaceNameToConfirm": "Escreva o nome da área de trabalho <0>{{name}} para confirmar a eliminação. Esta ação não pode ser anulada.", + "untitledRepository": "Repositório sem título", + "useRepository": "Usar repositório", + "validGitRepository": "Repositório Git válido", + "validate": "Validar", + "workflows": "Fluxos de trabalho", + "workflowsManagedInThisWorkspace": "Fluxos de trabalho geridos nesta área de trabalho", + "workspaceLinks": "Ligações da área de trabalho", + "workspaceName": "Nome da área de trabalho", + "workspaceNameIsRequired": "O nome da área de trabalho é obrigatório.", + "workspaceNamePlaceholder": "A minha área de trabalho", + "workspaceNotFound": "Área de trabalho não encontrada", + "workspaceSettings": "Definições da área de trabalho", + "workspaceSettingsLink": "Definições da área de trabalho", + "worktreeBranchTemplate": "Modelo de branch do worktree", + "worktreeSync": "Sincronização de worktree" +} diff --git a/docs/i18n.md b/docs/i18n.md index 4e20ae2f96..a3c076c33c 100644 --- a/docs/i18n.md +++ b/docs/i18n.md @@ -2,8 +2,8 @@ Kandev's web UI is internationalized with [i18next](https://www.i18next.com) + [react-i18next](https://react.i18next.com). English is the source locale, -Simplified Chinese (`zh-cn`) is the second shipped human locale, and a generated -**pseudo-locale** is used for QA. Requirements live in +European Portuguese (`pt-pt`) and Simplified Chinese (`zh-cn`) are the shipped +human locales, and a generated **pseudo-locale** is used for QA. Requirements live in [`docs/specs/platform/i18n.md`](specs/platform/i18n.md). The migration is **in progress, one directory per PR**. The runtime, the gates,