From 4e47c52aed6e4f8049d8a871400eabdc361a3c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 22 Oct 2026 14:50:28 +0200 Subject: [PATCH] fix(i18n): match the pt-BR wording and placeholders to the English source 38 strings used other placeholders than English: {when} for {date}, {provider} for {name}, a {unit} English dropped since, and the integration-card, document-archive and Apple Health freshness lines lost {since}, {list}, {relative} or {time} altogether, so the reader saw a label where the sentence belonged. Most of those lines had been translated from the key name ("Plano limitado", "Erros do provedor") rather than from the English text; the whole of those sections is translated from the source now, along with the Dawarich, glucose reference, setup, re-confirmation and connector-token lines that had the same problem, and the 19 strings whose English changed after the translation was drafted. The Telegram help documented "tomado ", but the bot only accepts "taken "; it now shows the command the bot understands. --- messages/pt-BR.json | 324 ++++++++++++++++++++++---------------------- 1 file changed, 162 insertions(+), 162 deletions(-) diff --git a/messages/pt-BR.json b/messages/pt-BR.json index d05b0d6cc..6f1caae3e 100644 --- a/messages/pt-BR.json +++ b/messages/pt-BR.json @@ -844,7 +844,7 @@ "nextPage": "Próxima página", "dailyTotalCaption": "({count} amostras)", "openMetricInsights": "Abrir insights de {type}", - "sleepNapCaption": "+{count} soneca(s)", + "sleepNapCaption": "incl. {count} soneca(s)", "sleepAwakeningsCaption": "{count} despertar(es)", "expandDay": "Mostrar amostras deste dia", "collapseDay": "Ocultar amostras deste dia", @@ -3143,11 +3143,11 @@ "last30days": "{days} dias", "last90days": "{days} dias", "lastYear": "{months} meses", - "allTime": "Tudo" + "allTime": "{months} meses em detalhe, todos os exames" }, "detailDays": "O Coach não lê nada mais antigo que {days} dias, em nenhuma resposta.", "detailMonths": "O Coach não lê nada mais antigo que {months} meses, em nenhuma resposta.", - "detailAll": "Tudo que você registrou: {dailyMonths} meses em detalhe diário, leituras mais antigas como valores mensais até {years} anos atrás, resultados laboratoriais dos últimos {labMonths} meses.", + "detailAll": "Tudo o que você registrou: {dailyMonths} meses em detalhe diário, leituras mais antigas como valores mensais até {years} anos atrás, e todos os resultados de exames, os mais antigos resumidos por ano.", "note": "Seu perfil, medicamentos atuais, uma doença em curso e consultas futuras permanecem visíveis; resumos que precisam de mais histórico são encurtados ou omitidos. Respostas que o Coach deu antes em conversas mais antigas ainda podem citar valores antigos." }, "showConversations": "Mostrar conversas", @@ -4219,8 +4219,8 @@ "metricNextDayRecovery": "Recuperação no dia seguinte", "metricNextDayRestingHr": "Frequência cardíaca em repouso no dia seguinte", "metricNextDayHrv": "Variabilidade da frequência cardíaca no dia seguinte", - "detailSameDay": "Média de {withAvg} {unit} nos {withDays} dias em que você marcou isto vs {withoutAvg} {unit} sem isso.", - "detailNextDay": "Média de {withAvg} {unit} no dia após os {withDays} dias em que você marcou isto vs {withoutAvg} {unit} nos demais." + "detailSameDay": "Média de {withAvg} nos {withDays} dias em que você marcou isto vs {withoutAvg} sem isso.", + "detailNextDay": "Média de {withAvg} no dia seguinte aos {withDays} dias em que você marcou isto vs {withoutAvg} nos demais." }, "factorCrosstab": { "title": "Seus fatores classificados e seus sinais vitais", @@ -4232,8 +4232,8 @@ "metricHrv": "Variabilidade da frequência cardíaca", "metricWeight": "Peso", "metricBloodPressureSys": "Sistólica", - "detail": "Média de {lowAvg} {unit} nos {lowDays} dias em que você classificou {factor} como baixo vs {highAvg} {unit} nos dias em que o classificou como alto.", - "detailInverse": "Média de {lowAvg} {unit} nos seus {lowDays} dias piores de {factor} vs {highAvg} {unit} nos seus melhores." + "detail": "Média de {lowAvg} nos {lowDays} dias em que você classificou {factor} como baixo vs {highAvg} nos dias em que o classificou como alto.", + "detailInverse": "Média de {lowAvg} nos seus {lowDays} dias piores de {factor} vs {highAvg} nos seus melhores." }, "discovery": { "title": "O que se destaca", @@ -4651,7 +4651,7 @@ "description": "Quão bem seu corpo se recuperou: os sinais de recuperação, tensão e carga que seu wearable registra durante a noite.", "scoreCrossLink": "Ver a pontuação composta de recuperação", "emptyTitle": "Ainda não há dados de recuperação", - "empty": "Nada para grafar aqui ainda. Esta página mostra as leituras de recarga, tensão e carga que WHOOP e Polar registram, e o nível de resiliência da Oura. A prontidão da Oura aparece como sua pontuação de recuperação, vinculada acima.", + "empty": "Esta página se preenche com as leituras de recarga, tensão e carga do WHOOP ou da Polar e com o nível de resiliência da Oura.", "block": { "ansChargeExplainer": "Quão carregado seu sistema nervoso autônomo está para o dia seguinte, uma leitura de recarga extraída dos seus sinais noturnos de coração e respiração.", "dayStrainExplainer": "A carga cardiovascular de corpo inteiro do dia na escala de tensão do seu dispositivo. Leia-a contra a sua recuperação, não como uma meta por si só.", @@ -5396,7 +5396,7 @@ "unavailableTitle": "Indisponível neste registro compartilhado", "unavailableDescription": "Esta área de configurações está intencionalmente indisponível ao visualizar o registro de outra pessoa.", "integrationStatusDescription": "Status de conexão deste registro gerenciado.", - "integrationStatusDetail": "Um perfil gerenciado mostra os serviços conectados apenas como status. Conectar, reconectar, sincronizar e desconectar não estão disponíveis para responsáveis.", + "integrationStatusDetail": "Os serviços que você conecta aqui enviam os dados para o registro de {name}, não para o seu. Sem um app de provedor próprio, o perfil usa o seu.", "integrationStatusDocs": "Como funciona o compartilhamento" }, "sections": { @@ -5425,8 +5425,8 @@ } }, "layout": { - "title": "Layout", - "backToHub": "Voltar ao Layout", + "title": "Organização", + "backToHub": "Voltar para Organização", "dashboard": { "title": "Painel", "description": "Layout e ordem dos blocos." @@ -5435,7 +5435,7 @@ "title": "Insights", "description": "Seções de visão geral e ordem das pílulas de navegação." }, - "subtitle": "Escolha o que o painel, os insights e os módulos de acompanhamento exibem, e em qual ordem.", + "subtitle": "Escolha a ordem e a visualização do seu painel, dos insights e das listas de acompanhamento.", "medications": { "title": "Medicamentos", "description": "Visualização em lista e ordem manual." @@ -6201,7 +6201,7 @@ "resetConfirmBody": "A cadeia volta a Codex → OpenAI → Anthropic → Local → OpenAI administrativo. Suas credenciais salvas não são alteradas." }, "activeProviderHeading": "Provedor ativo", - "activeProviderLabel": "Provedor principal", + "activeProviderLabel": "Configurar um provedor", "providerSelect": { "codex": "Conta do ChatGPT (Codex)", "openai": "OpenAI (sua chave de API)", @@ -6408,7 +6408,7 @@ }, "coachNote": "No Coach, aplica-se a profundidade de pensamento definida nas configurações do Coach." }, - "providerCardDescription": "O provedor que o HealthLog consulta primeiro, além da chave e do modelo dele.", + "providerCardDescription": "Configure a chave e o modelo de cada provedor; a ordem abaixo decide qual deles o HealthLog consulta primeiro.", "runtimeTitle": "Verificar e atualizar", "usage": { "title": "Uso da IA", @@ -6954,7 +6954,7 @@ "cross_user": "A resposta pertence a uma solicitação de outra conta. Reinicie a conexão a partir da sua própria conta.", "nocode": "A Polar não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da Polar.", "nocreds": "A Polar não está configurada neste servidor. Peça ao administrador para adicionar as credenciais OAuth da Polar.", - "token": "A troca de token com a Polar falhou.", + "token": "A troca de token com a Polar falhou. Inicie a conexão novamente.", "rate_limited": "Tentativas de conexão demais. Espere um momento e tente novamente.", "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." }, @@ -6983,7 +6983,7 @@ "cross_user": "A resposta pertence a uma solicitação de outra conta. Reinicie a conexão a partir da sua própria conta.", "nocode": "A Oura não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da Oura.", "nocreds": "A Oura não está configurada neste servidor. Peça ao administrador para adicionar as credenciais OAuth da Oura.", - "token": "A troca de token com a Oura falhou.", + "token": "A troca de token com a Oura falhou. Inicie a conexão novamente.", "rate_limited": "Tentativas de conexão demais. Espere um momento e tente novamente.", "issuer": "A resposta de login não veio do próprio servidor de autorização da Oura, então a conexão foi interrompida por sua segurança. Inicie a conexão novamente. Se isso continuar acontecendo, avise o administrador.", "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." @@ -7169,11 +7169,11 @@ "connectionLastUsed": "Último uso", "connectionNeverUsed": "Nunca usado", "connectionRevoke": "Desconectar", - "connectionRevokeDescription": "Desconecta este assistente e revoga o token dele.", + "connectionRevokeDescription": "Isso encerra o acesso do assistente imediatamente e impede que ele seja renovado. Para reconectar, ele precisará ser autorizado de novo.", "connectionRevokeFailed": "Não foi possível desconectar o assistente.", - "connectionsDetail": "Assistentes que você autorizou aparecem aqui.", - "tokensDetail": "Tokens que você gerou aparecem aqui.", - "tokenNamePlaceholder": "Nome, ex.: Claude" + "connectionsDetail": "Revogar uma conexão encerra o acesso dela imediatamente, inclusive a capacidade de se renovar.", + "tokensDetail": "O token é exibido uma única vez.", + "tokenNamePlaceholder": "Nome, ex.: Claude Desktop" }, "strava": "Strava", "stravaDescription": "Conecte sua conta Strava para sincronizar treinos, distância, ritmo e mais.", @@ -7200,110 +7200,110 @@ "cross_user": "A resposta pertence a uma solicitação de outra conta. Reinicie a conexão a partir da sua própria conta.", "nocode": "O Strava não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Strava.", "nocreds": "O Strava não está configurado. Adicione suas credenciais OAuth do Strava acima e tente novamente.", - "token": "A troca de token com o Strava falhou.", + "token": "A troca de token com o Strava falhou. Inicie a conexão novamente.", "rate_limited": "Tentativas de conexão demais. Espere um momento e tente novamente.", "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." }, "appleHealth": { "title": "Apple Health", - "description": "Sincronize dados do Apple Health no HealthLog.", + "description": "A sincronização ao vivo vem do app HealthLog para iOS, não de uma conexão web ou OAuth.", "status": { - "unavailable": "Indisponível neste dispositivo." + "unavailable": "Status do Apple Health indisponível" }, - "setupTitle": "Configurar Apple Health", - "permissionStep": "Permita que o HealthLog leia os dados de saúde no iPhone.", - "backgroundStep": "Ative a sincronização em segundo plano para manter os dados atualizados.", - "importNote": "Você também pode importar uma exportação do Apple Health em Configurações › Exportar e importar.", - "importAction": "Importar exportação", + "setupTitle": "Ativar a sincronização ao vivo", + "permissionStep": "No app HealthLog para iOS, abra Configurações → Apple Health e permita as categorias de saúde que você quer compartilhar.", + "backgroundStep": "Mantenha a Atualização em 2º Plano ativada. O app sincroniza os dados novos automaticamente em primeiro plano e quando o iOS concede tempo em segundo plano.", + "importNote": "Precisa de um histórico mais antigo ou não pode usar o app para iOS? O envio do XML/ZIP do Apple Health é uma alternativa avulsa e não ativa a sincronização ao vivo.", + "importAction": "Abrir a importação avulsa", "progress": { "title": "Progresso da sincronização", - "receivedLabel": "Recebido", - "oldestLabel": "Mais antigo", - "flowing": "Dados chegando", - "waiting": "Aguardando dados" + "receivedLabel": "Registros recebidos", + "oldestLabel": "Leitura mais antiga alcançada", + "flowing": "Dados chegaram na última hora. O app do iPhone ainda está enviando.", + "waiting": "Aguardando o app do iPhone enviar mais dados. O envio continua quando o app está aberto ou quando o iOS concede tempo em segundo plano. Um período sem dados durante a primeira grande carga de histórico é normal, não um erro." }, "delivery": { - "title": "Entrega de dados", - "lastTriggerLabel": "Último gatilho", + "title": "Entrega", + "lastTriggerLabel": "A última sincronização chegou", "lastBackgroundLabel": "Última sincronização em segundo plano", - "backgroundNever": "Nunca", - "noSyncYet": "Nenhuma sincronização ainda", + "backgroundNever": "Nunca: todas as sincronizações até agora chegaram com o app aberto", + "noSyncYet": "Nenhuma sincronização chegou ainda, então não há nada para mostrar aqui.", "trigger": { - "foreground": "Em primeiro plano", - "background": "Em segundo plano", - "push": "Push", - "unknown": "Desconhecido", - "manual": "Manual" + "foreground": "com o app aberto", + "background": "em segundo plano", + "push": "ao ser acordado por um push", + "unknown": "origem não informada pelo app", + "manual": "por Sincronizar tudo" } }, "freshness": { - "title": "Dados recebidos", - "lastReceived": "Último recebido", - "lastNewValue": "Último novo valor", - "lastBackground": "Última sincronização em segundo plano", - "never": "Nunca", - "lastBackfill": "Último preenchimento retroativo" + "title": "Por tipo de dado", + "lastReceived": "Último recebimento {relative}", + "lastNewValue": "Último valor novo {relative}", + "lastBackground": "Último em segundo plano {relative}", + "never": "Ainda não recebido", + "lastBackfill": "Histórico em dia {relative}" } }, "garminInfo": { "title": "Garmin", - "body": "Conecte sua conta Garmin para sincronizar treinos, sono e mais.", - "docsLink": "Documentação do Garmin" + "body": "O Garmin não tem conexão direta aqui. Conecte pelo Apple Health (iOS) ou pelo Google Health Connect (Android). As pontuações próprias da Garmin (Body Battery, Training Load, HRV Status, VO₂ máx.) não são compartilhadas pela Garmin com nenhuma das duas plataformas.", + "docsLink": "Ler o guia" }, "glucoseReference": { - "title": "Referência de glicose", - "description": "Defina uma referência de glicose para insights.", - "enable": "Ativar referência de glicose", - "explainer": "A referência ajuda a contextualizar suas leituras de glicose.", - "disclaimer": "Apenas associação, nunca conselho médico.", - "error": "Não foi possível salvar a referência de glicose." + "title": "Faixa de referência da glicose", + "description": "Com qual faixa as suas leituras de glicose são comparadas.", + "enable": "Usar a faixa de meta para diabetes", + "explainer": "Desligado, as leituras são comparadas com a faixa de referência geral para pessoas sem diabetes. Ligado, são comparadas com a faixa de meta glicêmica mais estreita dos Standards of Care da ADA, e o Coach passa a basear nessa faixa os comentários sobre glicose. Suas próprias metas personalizadas abaixo continuam tendo prioridade.", + "disclaimer": "Isto seleciona uma faixa de referência. Não é um diagnóstico, nunca é deduzido de uma leitura, e o app não toma nenhuma ação clínica com base nisso. Quais metas se aplicam a você é uma pergunta para o seu profissional de saúde.", + "error": "Não foi possível salvar a configuração." }, "dangerZoneDetail": "Isso exclui permanentemente tudo no seu registro.", "deleteAccountCardDetail": "Isso exclui sua conta, chaves de acesso, log de auditoria e sessões.", "passkeyStepUpRequired": "Confirme com seu segundo fator ou uma chave de acesso para adicionar uma nova chave de acesso.", "setup": { "title": "Configuração", - "description": "Conclua a configuração inicial do HealthLog.", + "description": "As perguntas que decidem o que o HealthLog mostra primeiro, e o checklist de primeiros passos no painel.", "setUpAgain": "Configurar novamente", - "showChecklist": "Mostrar checklist", - "checklistShown": "Checklist exibido", - "checklistNothingHidden": "Nada oculto no checklist" + "showChecklist": "Mostrar o checklist novamente", + "checklistShown": "O checklist voltou ao painel.", + "checklistNothingHidden": "O checklist não estava oculto; ele aparece no painel." }, "documentSources": { - "title": "Fontes de documentos", - "description": "Conecte fontes de documentos ao HealthLog.", - "explainer": "Fontes de documentos alimentam o cofre do HealthLog.", - "systemLabel": "Sistema", + "title": "Arquivos de documentos", + "description": "Pesquise no Paperless-ngx ou no Papra a partir do HealthLog e importe os documentos que você escolher.", + "explainer": "Um botão de importação aparece onde quer que você vincule documentos: em uma consulta, uma vacina e uma condição, e em Documentos. O HealthLog guarda a própria cópia criptografada de cada documento que você importa, e consulta o seu arquivo só quando você pesquisa ou importa.", + "systemLabel": "Arquivo", "statusConnected": "Conectado", "statusNotConnected": "Não conectado", - "connectedSince": "Conectado desde {when}", - "originRemoved": "Origem removida", - "baseUrl": "URL base", - "allowedOrigins": "Origens permitidas", + "connectedSince": "Conectado, última verificação em {date}", + "originRemoved": "Este endereço não está mais na lista de arquivos permitidos do servidor. Fale com o administrador ou salve outro endereço.", + "baseUrl": "Endereço", + "allowedOrigins": "Permitidos neste servidor: {origins}", "organizationId": "ID da organização", - "organizationHelp": "Opcional, para instâncias multiusuário.", - "token": "Token", - "tokenSaved": "Token salvo", - "tokenHelpPaperless": "Cole um token de API do Paperless-ngx.", - "tokenHelpPapra": "Cole um token de API do Papra.", - "save": "Salvar", - "saving": "Salvando…", - "saved": "Salvo", + "organizationHelp": "A parte depois de /organizations/ na barra de endereço do Papra. IDs de organização do Papra têm o formato org_ seguido de 24 letras e dígitos.", + "token": "Token de API", + "tokenSaved": "Salvo para este endereço. Deixe em branco para mantê-lo.", + "tokenHelpPaperless": "No Paperless-ngx: My Profile, API token.", + "tokenHelpPapra": "No Papra: uma chave de API com documents:read e tags:read.", + "save": "Salvar e testar", + "saving": "Testando…", + "saved": "Conectado. O arquivo respondeu.", "test": "Testar", - "testOk": "OK: {provider}", + "testOk": "O arquivo respondeu em {latency} ms.", "disconnect": "Desconectar", - "disconnectTitle": "Desconectar {provider}?", - "disconnectDescription": "A conexão com {provider} será desconectada. Os dados já importados permanecem.", - "unavailableExplainer": "Esta fonte de documentos não está disponível agora.", - "moduleOffExplainer": "O módulo Documentos está desativado para esta conta.", - "tokenNewAddress": "Novo endereço para o token" + "disconnectTitle": "Desconectar {name}?", + "disconnectDescription": "O HealthLog esquece o endereço e o token. Os documentos que você já importou continuam no HealthLog.", + "unavailableExplainer": "Este servidor não permite mais arquivos de documentos, então a conexão abaixo não pode ser usada. Você ainda pode removê-la.", + "moduleOffExplainer": "Os documentos estão desativados, então a conexão abaixo não é usada. Você ainda pode removê-la.", + "tokenNewAddress": "Um endereço novo precisa do token de API de novo." }, "emailChangePassword": "Digite sua senha atual para alterar o endereço de e-mail.", "reproof": { - "description": "Digite sua senha atual para confirmar que é você.", - "descriptionChange": "Digite sua senha atual para alterar o endereço de e-mail.", - "signInAgain": "Entre novamente para confirmar.", - "failed": "Essa senha não está correta." + "description": "Isto compartilha ou exporta os seus dados de saúde. Confirme que é você para continuar.", + "descriptionChange": "Isto altera algo que só você deveria poder alterar. Confirme que é você para continuar.", + "signInAgain": "Entre novamente e tente mais uma vez. Sua conta não tem senha nem chave de acesso para confirmar aqui.", + "failed": "Não deu certo. Confira o que você digitou e tente de novo." }, "passwordTitle": "Senha", "tokenNameLabel": "Nome do token", @@ -7313,111 +7313,111 @@ }, "integrationCard": { "state": { - "ok": "OK", + "ok": "Funcionando", "limited": "Limitado", - "degraded": "Degradado", + "degraded": "Atrasado", "actionRequired": "Ação necessária" }, "reason": { - "dataArriving": "Dados chegando", - "dataArrivingHistory": "Dados chegando, histórico em andamento", - "firstSyncPending": "Primeira sincronização pendente", - "planLimited": "Plano limitado", - "permissionLimited": "Permissões limitadas", - "providerErrors": "Erros do provedor", - "providerErrorsNoSince": "Erros do provedor, sem data", - "syncStalled": "Sincronização parada", - "syncStalledNoSince": "Sincronização parada, sem data", - "noNewData": "Nenhum dado novo", - "noNewDataNoSince": "Nenhum dado novo, sem data", - "noNewDataApple": "Nenhum dado novo do Apple Health", - "noNewDataAppleNoSince": "Nenhum dado novo do Apple Health, sem data", - "unexpectedSilence": "Silêncio inesperado", - "unexpectedSilenceNoSince": "Silêncio inesperado, sem data", - "reauthRequired": "Reautenticação necessária", - "pausedAfterErrors": "Pausado após erros", - "pausedAfterErrorsNoSince": "Pausado após erros, sem data" + "dataArriving": "Os dados estão chegando.", + "dataArrivingHistory": "Os dados estão chegando. O histórico mais antigo está sendo carregado em segundo plano.", + "firstSyncPending": "Conectado. A primeira sincronização acontece em breve.", + "planLimited": "Os dados estão chegando. Seu plano {provider} não inclui {list}.", + "permissionLimited": "Os dados estão chegando. Falta permissão para {list}.", + "providerErrors": "{provider} não responde de forma confiável desde {since}. O HealthLog continua tentando; não há nada a fazer do seu lado.", + "providerErrorsNoSince": "{provider} não está respondendo de forma confiável agora. O HealthLog continua tentando; não há nada a fazer do seu lado.", + "syncStalled": "O HealthLog não sincroniza desde {since}. O problema está no servidor, não no seu dispositivo.", + "syncStalledNoSince": "O HealthLog não está sincronizando agora. O problema está no servidor, não no seu dispositivo.", + "noNewData": "Nenhum dado novo desde {since}.", + "noNewDataNoSince": "Nenhum dado novo há algum tempo.", + "noNewDataApple": "Nenhum dado novo desde {since}. Abra o HealthLog no seu iPhone uma vez.", + "noNewDataAppleNoSince": "Nenhum dado novo há algum tempo. Abra o HealthLog no seu iPhone uma vez.", + "unexpectedSilence": "Nada chegou desde {since}, embora {provider} costume enviar dados todos os dias.", + "unexpectedSilenceNoSince": "Nada está chegando, embora {provider} costume enviar dados todos os dias.", + "reauthRequired": "A conexão com {provider} expirou. Reconecte para continuar recebendo dados.", + "pausedAfterErrors": "{provider} está pausado após falhar desde {since}.", + "pausedAfterErrorsNoSince": "{provider} está pausado após falhas repetidas." }, "when": { - "today": "hoje", - "yesterday": "ontem", - "date": "em {date}" + "today": "hoje, {time}", + "yesterday": "ontem, {time}", + "date": "{date}, {time}" }, "items": { - "activity": "Atividade", - "sleep": "Sono" + "activity": "atividade", + "sleep": "sono" }, - "moreValuesOne": "+ {count} valor", - "moreValuesFew": "+ {count} valores", - "moreValuesOther": "+ {count} valores", - "notConnected": "Não conectado", + "moreValuesOne": "mais {count}", + "moreValuesFew": "mais {count}", + "moreValuesOther": "mais {count}", + "notConnected": "Não conectado.", "lastData": "Últimos dados: {when}", - "lastDataNone": "Nenhum dado ainda", + "lastDataNone": "Últimos dados: nenhum ainda", "reconnect": "Reconectar", "resume": "Retomar", - "menuLabel": "Abrir menu da integração", + "menuLabel": "Mais ações para {provider}", "menu": { - "credentials": "Credenciais", - "address": "Endereço" + "credentials": "Alterar credenciais", + "address": "Alterar endereço e token" }, "syncing": "Sincronizando…", "details": { - "title": "Detalhes", - "none": "Nenhum detalhe ainda", + "title": "Detalhes para um relatório de erro", + "none": "nenhum", "state": "Estado", - "since": "Desde", + "since": "desde", "lastSync": "Última sincronização", "lastData": "Últimos dados", - "failingParts": "Partes com falha", + "failingParts": "partes com falha", "recentCalls": "Chamadas recentes", "unavailable": "Indisponível", - "unavailableList": "Lista indisponível", - "causePlan": "Causa: plano", - "causePermission": "Causa: permissões", - "failureStreak": "Sequência de falhas", - "copyFailed": "Não foi possível copiar" + "unavailableList": "Indisponível: {list}", + "causePlan": "plano", + "causePermission": "permissão", + "failureStreak": "Falhas seguidas: {count} de {threshold}", + "copyFailed": "Não foi possível copiar. Selecione o texto e copie manualmente." }, "historyEnds": {} }, "dawarich": "Dawarich", - "dawarichTag": "Localização", - "dawarichDescription": "Conecte seu próprio site Dawarich para sincronizar o histórico de localização.", - "dawarichUrl": "URL do Dawarich", + "dawarichTag": "Movimento", + "dawarichDescription": "Conecte a sua instância do Dawarich para trazer a distância diária, o tempo fora de casa e os dias de viagem.", + "dawarichUrl": "Endereço do Dawarich", "dawarichApiKey": "Chave de API", - "dawarichApiKeyHelp": "Cole uma chave de API das ferramentas administrativas do seu Dawarich.", + "dawarichApiKeyHelp": "Você a encontra no Dawarich em Account. O HealthLog a usa só para ler valores diários, nunca coordenadas ou nomes de lugares.", "dawarichConnect": "Conectar", "dawarichUpdate": "Salvar alterações", - "dawarichConnected": "Dawarich conectado.", - "dawarichSync": "Sincronizar agora", - "dawarichSyncQueued": "Sincronização na fila.", - "dawarichSyncAlreadyQueued": "Uma sincronização já está na fila.", + "dawarichConnected": "Dawarich conectado. Os últimos 30 dias estão sendo carregados agora.", + "dawarichSync": "Buscar agora", + "dawarichSyncQueued": "Os últimos sete dias serão buscados em breve.", + "dawarichSyncAlreadyQueued": "Uma busca já está a caminho.", "dawarichDisconnect": "Desconectar", "dawarichDisconnectTitle": "Desconectar o Dawarich?", - "dawarichDisconnectDescription": "As sincronizações futuras param. Os dados já importados permanecem.", - "dawarichDisconnectDelete": "Também excluir dados", - "dawarichDisconnectDeleteTitle": "Excluir dados do Dawarich?", - "dawarichDisconnectDeleteDescription": "Os dados de localização importados do Dawarich serão excluídos permanentemente.", - "dawarichHomePlaceSet": "Local de casa definido.", - "dawarichHomePlaceMissing": "Nenhum local de casa definido ainda.", - "dawarichHomeCountryIs": "País de casa: {country}.", - "dawarichHomeCountryMissing": "Nenhum país de casa definido ainda.", - "dawarichDaysStored": "{count} dias de localização armazenados.", - "dawarichHomePlace": "Local de casa", - "dawarichHomePlaceChoose": "Escolher local de casa", - "dawarichHomePlaceChange": "Alterar local de casa", - "dawarichHomeCountry": "País de casa", - "dawarichHomeCountryHelp": "Ajuda a contextualizar viagens e clima.", + "dawarichDisconnectDescription": "As próximas buscas param. Os dias já armazenados permanecem.", + "dawarichDisconnectDelete": "Desconectar e excluir os dias", + "dawarichDisconnectDeleteTitle": "Desconectar e excluir todos os dias?", + "dawarichDisconnectDeleteDescription": "A conexão e todos os dias de movimento armazenados são removidos. Isso não pode ser desfeito.", + "dawarichHomePlaceSet": "A casa está definida.", + "dawarichHomePlaceMissing": "Defina a sua casa para que o tempo fora de casa possa ser medido.", + "dawarichHomeCountryIs": "País de residência: {country}.", + "dawarichHomeCountryMissing": "Ainda não há país de residência, então não há dias de viagem.", + "dawarichDaysStored": "Dias armazenados: {count}", + "dawarichHomePlace": "Casa", + "dawarichHomePlaceChoose": "Escolha um lugar do Dawarich", + "dawarichHomePlaceChange": "Escolher casa", + "dawarichHomeCountry": "País de residência", + "dawarichHomeCountryHelp": "Código de país com duas letras, como BR. Se ficar em branco, conta o país onde você passou mais dias no último ano.", "dawarichHomeSave": "Salvar", - "dawarichHomeSaved": "Local de casa salvo", + "dawarichHomeSaved": "Salvo.", "dawarichErrors": { - "invalid": "Configuração inválida.", - "privateOrigin": "Origem privada exige aprovação da administração.", - "credentials": "Credenciais rejeitadas.", - "unreachable": "Não foi possível alcançar o Dawarich.", + "invalid": "Esse endereço não funciona. Use o endereço da instância sem credenciais.", + "privateOrigin": "Esta instância está em uma rede privada. Peça ao operador do servidor para aprová-la.", + "credentials": "O Dawarich não aceitou a chave de API.", + "unreachable": "Não foi possível alcançar o Dawarich. Confira o endereço e se a instância está em execução.", "rateLimited": "Solicitações demais. Espere um momento e tente novamente.", - "homePlaceUnknown": "Local de casa desconhecido.", - "notConnected": "Não conectado.", - "generic": "Erro desconhecido ao conectar." + "homePlaceUnknown": "A instância do Dawarich não conhece mais este lugar.", + "notConnected": "O Dawarich não está conectado.", + "generic": "Não deu certo. Tente de novo." }, "fitbitRetirement": {}, "moduleState": {} @@ -8962,7 +8962,7 @@ "askMedicationName": "Especifique um medicamento, por exemplo tomado Ramipril.", "medicationNotFoundExact": "Medicamento não encontrado. Envie o nome exatamente como está no HealthLog.", "helpHeader": "Comandos disponíveis:", - "helpBody": "/help: mostrar esta ajuda\n/add: registrar uma dose\n/start: iniciar o bot\n\nComandos de texto:\ntomado <nome>: confirmar uma dose\n\nBotões nos lembretes:\n• Tomado: confirmar dose\n• 🕐 1h / 🕐 3h: adiar lembrete\n• ⏭ Pular: pular dose\n• ✓ Confirmar: confirmar uma dose perdida", + "helpBody": "/help: mostrar esta ajuda\n/add: registrar uma tomada\n/start: iniciar o bot\n\nComandos de texto:\ntaken <nome>: confirmar uma tomada\n\nBotões nos lembretes:\n• Tomado: confirmar a tomada\n• 🕐 1h / 🕐 3h: adiar o lembrete\n• ⏭ Pular: pular a tomada\n• ✓ Confirmar: confirmar uma tomada perdida", "measureValuePrompt": "Responda com o valor para registrá-lo (opcional).", "buttonMeasureValue": "Valor…", "measureValueSaved": "Leitura salva.", @@ -9127,9 +9127,9 @@ "insights": { "headline": { "title": "Seu ciclo e seu corpo", - "restingHeartRate": "Seu pulso em repouso fica cerca de {delta} {unit} {dir} na fase lútea do que na folicular.", - "heartRateVariability": "Sua variabilidade da frequência cardíaca fica cerca de {delta} {unit} {dir} na fase lútea do que na folicular.", - "generic": "Seu {metric} fica cerca de {delta} {unit} {dir} na fase lútea do que na folicular.", + "restingHeartRate": "Seu pulso em repouso fica cerca de {delta} {dir} na fase lútea do que na folicular.", + "heartRateVariability": "Sua variabilidade da frequência cardíaca fica cerca de {delta} {dir} na fase lútea do que na folicular.", + "generic": "Seu {metric} fica cerca de {delta} {dir} na fase lútea do que na folicular.", "dirHigher": "mais alto", "dirLower": "mais baixo", "empty": "Ainda não há ciclos e leituras suficientes para revelar um padrão de fase. Continue registrando; isso se preenche conforme seu histórico cresce." @@ -9137,7 +9137,7 @@ "crosstab": { "description": "Como cada medição se compara entre suas fases lútea e folicular, nos seus próprios dados.", "pairLabel": "{metric}: lútea vs folicular", - "detail": "Lútea {lutealAvg} {unit} ({lutealDays} dias) vs folicular {follicularAvg} {unit} ({follicularDays} dias).", + "detail": "Lútea {lutealAvg} ({lutealDays} dias) vs folicular {follicularAvg} ({follicularDays} dias).", "metricRestingHeartRate": "Pulso em repouso", "metricHrv": "Variabilidade da frequência cardíaca", "metricSleepDuration": "Duração do sono",