From 1619b2406a62024547eb444e97535edd1093744f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 22 Oct 2026 14:41:17 +0200 Subject: [PATCH] fix(i18n): reshape the Brazilian Portuguese catalogue onto the English key structure The pt-BR bundle carried 420 top-level sections that duplicated the nested settings and onboarding keys (1,835 strings, of which 538 differed from the nested copy), wrapped thresholds, gettingStarted and trendHints in one-element arrays, and kept 48 keys English no longer has. Rebuild it in en.json's order and shape: unwrap the arrays, drop the stray top-level duplicates in favour of the nested copies (which match the terminology of the rest of the catalogue), and drop keys English does not have. No wording changes. --- messages/pt-BR.json | 15260 ++++++++++++++++++------------------------ 1 file changed, 6487 insertions(+), 8773 deletions(-) diff --git a/messages/pt-BR.json b/messages/pt-BR.json index 7e2604c3c..d05b0d6cc 100644 --- a/messages/pt-BR.json +++ b/messages/pt-BR.json @@ -397,7 +397,25 @@ "lifeSittingValue": "{hours} horas, autorrelatado", "lifeWork": "Trabalho", "lifeNightWork": "trabalho noturno", - "lifeExposures": "exposições: {list}" + "lifeExposures": "exposições: {list}", + "workouts": {}, + "medicationEffect": {} + }, + "errorBoundary": { + "title": "Algo deu errado", + "description": "Ocorreu um erro inesperado. Você pode tentar novamente, copiar os detalhes técnicos ou abrir um relatório de bug." + }, + "notFound": { + "title": "Esta página não existe.", + "backToDashboard": "Voltar ao painel" + }, + "offlineBanner": { + "message": "Sem conexão: as alterações não podem ser salvas até você voltar a ficar online.", + "saveFailed": "Não foi possível salvar, você está offline. Tente novamente quando voltar a ficar online.", + "showingCached": "Mostrando seus últimos dados sincronizados." + }, + "demoBanner": { + "message": "Modo demonstração: as alterações não são salvas." }, "nav": { "dashboard": "Painel", @@ -731,2608 +749,1888 @@ "quickAddSymptom": "Registrar sintoma", "todayCardVisible": "Mostrar o cartão principal" }, - "errorBoundary": { - "title": "Algo deu errado", - "description": "Ocorreu um erro inesperado. Você pode tentar novamente, copiar os detalhes técnicos ou abrir um relatório de bug." + "measurements": { + "title": "Medições", + "subtitle": "Registre leituras e navegue pelo histórico completo.", + "addMeasurement": "Adicionar", + "editMeasurement": "Editar medição", + "type": "Tipo", + "value": "Valor", + "date": "Data", + "source": "Fonte", + "notes": "Notas", + "typeWeight": "Peso", + "typeBloodPressure": "Pressão arterial", + "typeBpSys": "Sistólica", + "typeBpDia": "Diastólica", + "typePulse": "Pulso", + "typeBodyFat": "Gordura corporal", + "typeSleep": "Sono", + "typeSteps": "Passos", + "typeBloodGlucose": "Glicemia", + "typeTotalBodyWater": "Água corporal total", + "typeBoneMass": "Massa óssea", + "typeOxygenSaturation": "Saturação de oxigênio", + "typeHeartRateVariability": "Variabilidade da frequência cardíaca", + "typeRestingHeartRate": "Frequência cardíaca em repouso", + "typeActiveEnergyBurned": "Energia ativa", + "typeFlightsClimbed": "Andares subidos", + "typeWalkingRunningDistance": "Distância caminhada + corrida", + "typeVo2Max": "VO2 máx", + "typeBodyTemperature": "Temperatura corporal", + "typeFatFreeMass": "Massa livre de gordura", + "typeFatMass": "Massa de gordura", + "typeMuscleMass": "Massa muscular", + "typeSkinTemperature": "Temperatura da pele", + "typePulseWaveVelocity": "Velocidade de onda de pulso", + "typeVascularAge": "Idade vascular", + "typeVisceralFat": "Gordura visceral", + "typeAudioExposureEnv": "Exposição sonora (ambiente)", + "typeAudioExposureHeadphone": "Exposição sonora (fones)", + "typeTimeInDaylight": "Tempo sob luz do dia", + "typeWalkingSteadiness": "Estabilidade ao caminhar", + "typeAudioExposureEvent": "Evento de escuta alta", + "typeRespiratoryRate": "Frequência respiratória", + "typeBodyMassIndex": "Índice de massa corporal", + "typeLeanBodyMass": "Massa corporal magra", + "typeWalkingHeartRateAverage": "Frequência cardíaca ao caminhar (média)", + "typeWalkingAsymmetry": "Assimetria ao caminhar", + "typeWalkingDoubleSupport": "Apoio duplo ao caminhar", + "typeWalkingStepLength": "Comprimento do passo ao caminhar", + "typeWalkingSpeed": "Velocidade ao caminhar", + "glucoseContext": "Contexto", + "glucoseContextFasting": "Jejum (≥8h sem comida)", + "glucoseContextPostprandial": "Pós-refeição (2h depois de comer)", + "glucoseContextRandom": "Aleatória / casual", + "glucoseContextBedtime": "Antes de dormir", + "unitHours": "horas", + "unitSteps": "passos", + "sourceManual": "Manual", + "sourceWithings": "Withings", + "sourceImport": "Importação", + "sourceAppleHealth": "Apple Health", + "systolicLabel": "Sistólica (mmHg)", + "diastolicLabel": "Diastólica (mmHg)", + "pulseLabel": "Pulso (bpm)", + "valueWithUnit": "Valor ({unit})", + "timestamp": "Hora", + "timestampBackdateHint": "Ajuste a data e hora para registrar uma leitura passada.", + "notesPlaceholder": "ex.: depois de uma refeição", + "formReset": "Redefinir formulário", + "saveError": "Erro ao salvar", + "duplicateTimestamp": "Já existe uma medição deste tipo no horário selecionado.", + "serverOwnedSource": "Valores de uma fonte conectada não podem ser editados, mas o horário e a nota permanecem editáveis.", + "deleteError": "Erro ao excluir", + "deletedToast": "Medição excluída", + "restoredToast": "Medição restaurada", + "restoreError": "Falha ao restaurar", + "invalidValue": "Insira um valor válido.", + "invalidTimestamp": "Selecione um horário válido.", + "loginRequired": "Entre para ver as medições.", + "allTypes": "Todos os tipos", + "measurementCount": "{count} medições", + "emptyTitle": "Nenhuma medição ainda", + "emptyDescription": "Registre seu peso, pressão arterial, pulso ou outros sinais vitais para começar a acompanhar tendências.", + "emptyFilteredTitle": "Nenhuma medição corresponde a este filtro", + "emptyFilteredDescription": "Tente um tipo diferente ou limpe o filtro para ver todas as medições.", + "emptyAddFirst": "Adicionar sua primeira medição", + "emptyResetFilter": "Mostrar todos os tipos", + "comment": "Comentário", + "actions": "Ações", + "deleteConfirmTitle": "Excluir medição?", + "deleteConfirmDescription": "Esta medição será excluída. Você pode desfazer isso por um curto momento depois.", + "pageInfo": "Página {page} de {total}", + "previousPage": "Página anterior", + "nextPage": "Próxima página", + "dailyTotalCaption": "({count} amostras)", + "openMetricInsights": "Abrir insights de {type}", + "sleepNapCaption": "+{count} soneca(s)", + "sleepAwakeningsCaption": "{count} despertar(es)", + "expandDay": "Mostrar amostras deste dia", + "collapseDay": "Ocultar amostras deste dia", + "loadError": "Não foi possível carregar as medições.", + "typeCardioRecovery": "Recuperação cardiovascular", + "typeWristTemperature": "Temperatura do pulso", + "typeFallCount": "Quedas", + "typeSixMinuteWalkDistance": "Distância de caminhada de seis minutos", + "typeStairAscentSpeed": "Velocidade de subida de escadas", + "typeStairDescentSpeed": "Velocidade de descida de escadas", + "typeBreathingDisturbances": "Distúrbios respiratórios do sono", + "typeIrregularRhythmNotification": "Notificação de ritmo irregular", + "typeHighHeartRateEvent": "Notificação de frequência cardíaca alta", + "typeLowHeartRateEvent": "Notificação de frequência cardíaca baixa", + "typeWalkingSteadinessEvent": "Alerta de estabilidade ao caminhar", + "typeBreathingDisturbanceEvent": "Distúrbio respiratório", + "typeRecoveryScore": "Pontuação de recuperação", + "typeStressScore": "Pontuação de estresse", + "typeStrainScore": "Pontuação de esforço", + "typeHrvRmssd": "VFC (RMSSD)", + "typeDayStrain": "Esforço do dia", + "typeWorkoutStrain": "Esforço do treino", + "typeSleepPerformance": "Desempenho do sono", + "typeSleepEfficiency": "Eficiência do sono", + "typeSleepConsistency": "Consistência do sono", + "typeSleepNeed": "Necessidade de sono", + "typeEnergyExpenditureKj": "Gasto energético", + "typeAverageHeartRate": "Frequência cardíaca média", + "typeMaxHeartRate": "Frequência cardíaca máxima", + "typeSleepDisturbanceCount": "Distúrbios do sono", + "typeAnsCharge": "Carga do SNA", + "typeCardioLoad": "Carga cardiovascular", + "typeSleepScore": "Pontuação do sono", + "typeBodyTemperatureDeviation": "Desvio da temperatura corporal", + "typeResilience": "Resiliência", + "sourceComputed": "Calculado", + "sourceWhoop": "WHOOP", + "sourceFitbit": "Fitbit", + "sourceNightscout": "Nightscout", + "sourcePolar": "Polar", + "sourceOura": "Oura", + "sourceTelegram": "Telegram", + "sourceMcp": "MCP", + "sourceGoogleHealth": "Google Health", + "sourceStrava": "Strava", + "sourceExternal": "Dispositivo externo", + "bulkDeleteSuccess": "{count} medições excluídas", + "bulkDeleteSuccessOne": "Medição excluída", + "bulkDeleteError": "Erro ao excluir as medições selecionadas", + "bulkDeleteConfirmTitle": "Excluir {count} medições?", + "bulkDeleteConfirmTitleOne": "Excluir esta medição?", + "bulkDeleteConfirmBody": "As {count} medições selecionadas serão excluídas. Você pode desfazer isso por um curto momento depois.", + "bulkDeleteConfirmBodyOne": "A medição selecionada será excluída. Você pode desfazer isso por um curto momento depois.", + "typePhq9Score": "Pontuação PHQ-9", + "typeGad7Score": "Pontuação GAD-7", + "typeGripStrength": "Força de preensão", + "typePainNrs": "Dor (0–10)", + "typeWaistCircumference": "Circunferência da cintura", + "typeWaistToHeight": "Relação cintura-altura", + "unitScore": "pts", + "unitRatio": "razão", + "unitRating": "avaliação", + "typeWho5Score": "Pontuação WHO-5", + "typeSciScore": "Pontuação SCI", + "durationReadAs": "Lida como {duration}", + "durationHoursMinutes": "{hours} h {minutes} min", + "durationHoursOnly": "{hours} h", + "durationMinutesOnly": "{minutes} min", + "durationInvalid": "Insira uma duração como 7,5, 7:30 ou 7h 30m.", + "durationTooLong": "Uma entrada não pode durar mais de 24 horas.", + "sourceHealthConnect": "Health Connect" }, - "notFound": { - "title": "Esta página não existe.", - "backToDashboard": "Voltar ao painel" - }, - "offlineBanner": { - "message": "Sem conexão: as alterações não podem ser salvas até você voltar a ficar online.", - "saveFailed": "Não foi possível salvar, você está offline. Tente novamente quando voltar a ficar online.", - "showingCached": "Mostrando seus últimos dados sincronizados." - }, - "demoBanner": { - "message": "Modo demonstração: as alterações não são salvas." - }, - "oauthCallbackPreflightItem": "{provider}: o endereço de callback {configuredOrigin} difere do endereço deste app {currentOrigin}.", - "shell": { - "sectionsNav": "Seções de configurações", - "groups": { - "account": "Conta", - "yourData": "Seus dados", - "display": "Exibição", - "healthProfile": "Perfil de saúde", - "ai": "IA", - "connectivity": "Conectividade", - "system": "Sistema" + "metricCatalog": { + "title": "O que o HealthLog pode acompanhar", + "description": "Cada domínio de métrica que o HealthLog suporta, tenha você dados para ele ou não, e o que os forneceria.", + "statusPresent": "Acompanhado", + "statusAbsent": "Ainda não acompanhado", + "statusModuleOff": "Desligado", + "loadError": "Não foi possível carregar seu status de acompanhamento.", + "connectCta": "Conectar uma fonte", + "viewCta": "Ver", + "ecg": { + "source": "Tiras de ECG de derivação única de um relógio compatível (Withings ScanWatch hoje), sincronizadas automaticamente." }, - "back": "Voltar", - "skip": "Pular", - "next": "Continuar", - "stepOf": "Etapa {current} de {total}", - "stepsLabel": "Etapas de configuração" + "watchdog": { + "title": "Triagem automática", + "description": "O HealthLog também observa silenciosamente em segundo plano: notificações de ritmo irregular e distúrbio respiratório de um relógio conectado, alertas de desvio de baseline do estado de saúde e mudanças notáveis entre seus dois painéis laboratoriais mais recentes. Ele exibe um cartão apenas quando algo se destaca. Com pelo menos uma dessas fontes conectada, nenhum cartão aparecendo é um bom sinal, não um recurso faltando; com nenhuma conectada ainda, simplesmente não há nada sendo observado." + } }, - "sharedRecord": { - "managedSettings": { - "saveError": "Não foi possível salvar. Tente novamente.", - "validationError": "Verifique suas entradas.", - "profile": { - "title": "Perfil", - "displayName": "Nome de exibição", - "height": "Altura (cm)", - "dateOfBirth": "Data de nascimento", - "gender": "Gênero", - "notSpecified": "Não especificado", - "male": "Masculino", - "female": "Feminino", - "other": "Outro", - "locale": "Idioma", - "systemDefault": "Padrão do sistema", - "timezone": "Fuso horário", - "units": "Unidades", - "metric": "Métrico", - "imperial": "Imperial", - "timeFormat": "Formato de hora", - "automatic": "Automático", - "hour12": "12 horas", - "hour24": "24 horas", - "dateFormat": "Formato de data", - "dateDmy": "Dia / mês / ano", - "dateMdy": "Mês / dia / ano", - "dateYmd": "Ano / mês / dia" + "mood": { + "title": "Humor", + "subtitle": "Acompanhamento de humor e entradas", + "mentalWellbeingLink": "Fazer um check-in de bem-estar mental", + "addEntry": "Adicionar", + "editEntry": "Editar entrada", + "moodLevel": "Humor", + "heroQuestion": "Como você está?", + "factorYes": "Sim", + "factorNo": "Não", + "factorRatingOption": "{label}: {value} de {max}", + "tags": "Tags", + "tagsPlaceholder": "ex.: Exercício, Trabalho, Família", + "tagsHelp": "Separadas por vírgula", + "timestamp": "Hora", + "date": "Data", + "source": "Fonte", + "levelSuperGut": "Incrível", + "levelGut": "Bom", + "levelOkay": "Ok", + "levelSchlecht": "Ruim", + "levelLausig": "Péssimo", + "sourceMoodlog": "moodLog", + "allMoods": "Todos os humores", + "entryCount": "{count} entradas", + "emptyTitle": "Nenhuma entrada de humor ainda", + "emptyDescription": "Registre como você se sente hoje para identificar padrões ao longo do tempo.", + "emptyFilteredTitle": "Nenhuma entrada de humor corresponde a este filtro", + "emptyFilteredDescription": "Tente um nível de humor diferente ou limpe o filtro para ver todas as entradas.", + "emptyAddFirst": "Registrar seu primeiro humor", + "emptyResetFilter": "Mostrar todos os humores", + "actions": "Ações", + "formReset": "Redefinir formulário", + "noteCharCount": "{count}/{max}", + "formResetConfirmTitle": "Redefinir este formulário?", + "formResetConfirmBody": "Isso limpa o humor, as tags e a nota que você inseriu. Não pode ser desfeito.", + "formResetConfirmAction": "Redefinir", + "saveError": "Erro ao salvar", + "tagsNotSaved": "Salvo. Tags que não estão mais disponíveis foram deixadas de fora.", + "deleteError": "Erro ao excluir", + "deletedToast": "Entrada excluída", + "restoredToast": "Entrada restaurada", + "restoreError": "Falha ao restaurar", + "invalidTimestamp": "Selecione um horário válido.", + "deleteConfirmTitle": "Excluir entrada?", + "deleteConfirmDescription": "Esta entrada de humor será excluída. Você pode desfazer isso por um curto momento depois.", + "pageInfo": "Página {page} de {total}", + "previousPage": "Página anterior", + "nextPage": "Próxima página", + "loginRequired": "Entre para ver as entradas de humor.", + "note": "Nota", + "noteCollapse": "Recolher nota", + "noteExpand": "Mostrar nota completa", + "notePlaceholder": "Adicione uma nota sobre como você está se sentindo…", + "tagPicker": "Tags", + "tagCategory": { + "feelings": "Sentimentos", + "sleep": "Sono", + "health": "Saúde", + "social": "Social", + "work": "Trabalho", + "hobbies": "Hobbies", + "factors": "Fatores", + "custom": "Personalizado" + }, + "tag": { + "happy": "feliz", + "excited": "animado", + "grateful": "grato", + "relaxed": "relaxado", + "content": "satisfeito", + "tired": "cansado", + "unsure": "inseguro", + "bored": "entediado", + "tense": "tenso", + "angry": "bravo", + "stressed": "estressado", + "sad": "triste", + "sleptWell": "dormiu bem", + "sleptOk": "dormiu ok", + "sleptPoorly": "dormiu mal", + "earlyNight": "noite cedo", + "workedOut": "treinou", + "ateWell": "comeu bem", + "hydrated": "hidratado", + "walked": "caminhou", + "alcohol": "álcool", + "caffeine": "cafeína", + "nicotine": "nicotina", + "family": "família", + "friends": "amigos", + "party": "festa", + "alone": "sozinho", + "productive": "produtivo", + "overtime": "hora extra", + "dayOff": "dia de folga", + "travel": "viagem", + "sickDay": "dia de doença", + "movies": "filmes", + "reading": "leitura", + "gaming": "jogos", + "music": "música", + "outdoors": "ar livre", + "fastFood": "comida rápida", + "noSweets": "sem doces", + "bigMeal": "refeição grande", + "factorWork": "trabalho", + "factorSocial": "social", + "factorSleepQuality": "qualidade do sono", + "factorStress": "estresse", + "factorConflict": "conflito", + "factorFamily": "família", + "factorSadness": "tristeza", + "praise": "elogio" + }, + "sourceManual": "Manual", + "sourceWeb": "Web", + "sourceTelegram": "Telegram", + "sourceDaylio": "Daylio", + "bulkDeleteSuccess": "{count} entradas excluídas", + "bulkDeleteSuccessOne": "Entrada excluída", + "bulkDeleteError": "Erro ao excluir as entradas selecionadas", + "bulkDeleteConfirmTitle": "Excluir {count} entradas?", + "bulkDeleteConfirmTitleOne": "Excluir esta entrada?", + "bulkDeleteConfirmBody": "As {count} entradas de humor selecionadas serão excluídas. Você pode desfazer isso por um curto momento depois.", + "bulkDeleteConfirmBodyOne": "A entrada de humor selecionada será excluída. Você pode desfazer isso por um curto momento depois.", + "customize": "Personalizar tags de humor", + "addTagInline": "Adicionar tag", + "manage": { + "groupsTitle": "Grupos", + "groupsDescription": "Crie seus próprios grupos e defina a ordem em que o seletor os exibe.", + "newGroup": "Novo grupo", + "groupLabel": "Nome do grupo", + "groupIcon": "Ícone", + "groupCreated": "Grupo criado", + "groupRenamed": "Grupo salvo", + "groupDeleteTitle": "Excluir grupo?", + "groupDeleteBody": "As tags deste grupo voltam ao seu grupo original. Nenhuma entrada é excluída.", + "groupDeleted": "Grupo excluído", + "groupEmpty": "Nenhum grupo próprio ainda.", + "groupLimitReached": "Limite de grupos atingido", + "tagsTitle": "Tags", + "tagsDescription": "Oculte, reorganize, mova ou edite as tags que o seletor exibe.", + "newTag": "Nova tag", + "tagLabel": "Nome da tag", + "tagIcon": "Ícone", + "tagGroup": "Grupo", + "usageCount": "{count} entradas", + "hideTag": "Ocultar tag", + "showTag": "Mostrar tag", + "moveToGroup": "Mover para grupo", + "archive": "Arquivar", + "restore": "Restaurar", + "archivedTitle": "Tags arquivadas", + "archivedDescription": "Tags arquivadas permanecem em suas entradas passadas. Elas só desaparecem do seletor.", + "archivedEmpty": "Nada arquivado.", + "purgeTitle": "Excluir tag permanentemente?", + "purgeBody": "Isso remove a tag de {count} entradas passadas. Não pode ser desfeito.", + "purgeAction": "Excluir permanentemente", + "purged": "Tag excluída", + "tagLimitReached": "Limite de tags atingido", + "iconPickerTitle": "Escolher um ícone", + "iconSearchPlaceholder": "Buscar ícones…", + "iconSearchEmpty": "Nenhum ícone corresponde.", + "iconSearchClear": "Limpar busca", + "orderSave": "Salvar ordem", + "orderSaved": "Ordem salva", + "moveUp": "Mover para cima", + "moveDown": "Mover para baixo", + "iconGroupEmotions": "Emoções", + "iconGroupActivities": "Atividades", + "iconGroupHealth": "Saúde", + "iconGroupFood": "Comida e bebida", + "iconGroupWeather": "Clima", + "iconGroupPlaces": "Lugares", + "iconGroupMisc": "Outro" + }, + "sectionMoreTags": "Mais tags", + "sectionNoteDetails": "Nota e detalhes", + "quickTagsHelp": "Suas tags frequentes, um toque", + "quickTagsExpand": "Mais", + "loadError": "Não foi possível carregar suas entradas de humor.", + "sectionLevelA": "Estado de espírito", + "sectionLevelAHelp": "Opcional. Qualquer coisa que você deixar em branco permanece vazia.", + "dimensionNotAnswered": "não registrado", + "dimensionClear": "limpar", + "dimensionValueText": "{value} de {max}: {low} a {high}", + "dimension": { + "a1": { + "label": "Humor", + "low": "muito desagradável", + "high": "muito agradável" }, - "modules": { - "title": "Módulos" + "a2": { + "label": "Estresse", + "low": "completamente relaxado", + "high": "extremamente sobrecarregado" + }, + "a3": { + "label": "Energia", + "low": "esgotado", + "high": "cheio de energia" + }, + "a4": { + "label": "Conexão", + "low": "isolado", + "high": "compreendido e apoiado" + }, + "a5": { + "label": "Estabilidade", + "low": "completamente sobrecarregado", + "high": "totalmente capaz de agir" + } + }, + "context": { + "section": { + "work": "Trabalho", + "contacts": "Contato", + "leisure": "Tempo livre", + "events": "Evento" + }, + "field": { + "workStatus": "Dia de trabalho", + "workMinutes": "Tempo trabalhado", + "overtimeMinutes": "Hora extra", + "workLoad": "Carga de trabalho", + "workSatisfaction": "Satisfação com o trabalho", + "contactCircles": "Com quem foi o contato", + "contactForm": "Forma de contato", + "contactExtent": "Quanto tempo durou", + "contactQuality": "Qualidade do contato", + "contactSupport": "Apoio sentido", + "leisureCategories": "Em que o tempo livre foi gasto", + "leisureMinutes": "Tempo para si", + "leisureJoy": "Prazer", + "leisureRecovery": "Recuperação", + "eventType": "O que aconteceu", + "eventValence": "Como foi recebido", + "eventAt": "Quando", + "notes": "Nota" + }, + "workStatus": { + "off": "Não trabalhando", + "partial": "Parte do dia", + "regular": "Um dia regular", + "overtime": "Mais que o usual" + }, + "contactCircles": { + "partner": "Parceiro(a)", + "child": "Filho(a)", + "family": "Família", + "friends": "Amigos", + "colleagues": "Colegas", + "acquaintances": "Conhecidos", + "professional": "Apoio profissional", + "other": "Outros" + }, + "contactForm": { + "inPerson": "Pessoalmente", + "phone": "Telefone", + "video": "Videochamada", + "written": "Escrito" + }, + "contactExtent": { + "brief": "Breve", + "medium": "Médio", + "extended": "Estendido" + }, + "leisureCategories": { + "film": "Filme ou série", + "reading": "Leitura", + "gaming": "Jogos", + "music": "Música", + "creative": "Algo criativo", + "outing": "Sair", + "garden": "Jardim", + "cooking": "Cozinhar", + "timeWithChild": "Tempo com a criança", + "relaxation": "Descanso", + "other": "Outra coisa" + }, + "eventType": { + "goodNews": "Boas notícias", + "badNews": "Más notícias", + "success": "Algo deu certo", + "disappointment": "Uma decepção", + "conflict": "Um conflito", + "appointment": "Um compromisso", + "familyEvent": "Uma ocasião familiar", + "change": "Uma mudança", + "unexpected": "Algo inesperado" + }, + "rating": { + "workLoad": { + "low": "sem pressão", + "high": "sob muita pressão" + }, + "workSatisfaction": { + "low": "não satisfeito de forma alguma", + "high": "muito satisfeito" + }, + "contactQuality": { + "low": "não me fez bem", + "high": "me fez muito bem" + }, + "contactSupport": { + "low": "não apoiado", + "high": "bem apoiado" + }, + "leisureJoy": { + "low": "sem prazer", + "high": "muito prazer" + }, + "leisureRecovery": { + "low": "não restaurador", + "high": "muito restaurador" + }, + "eventValence": { + "low": "claramente ruim", + "high": "claramente bom" + } + } + }, + "dayContext": { + "minutesPlaceholder": "Minutos", + "contactsHelp": "Quantas pessoas eram não diz nada sobre o dia. O que conta é como o contato se sentiu.", + "notePlaceholder": "Qualquer outra coisa que pertença a este dia", + "notRecorded": "não registrado", + "linkedTitle": "Dos seus outros módulos", + "linkedHelp": "Lido de onde é mantido. Mude lá e muda aqui.", + "linkedSleep": "Dormindo", + "linkedInBed": "Na cama", + "linkedSteps": "Passos", + "linkedActiveEnergy": "Energia ativa", + "linkedRestingHeartRate": "Frequência cardíaca em repouso", + "linkedHrv": "Variabilidade da frequência cardíaca", + "bodyLogged": "Registrado no diário de doenças: {count} sintomas", + "bodyNotLogged": "Nada registrado no diário de doenças para este dia", + "openIllness": "Abrir" + }, + "sourceNotification": "Notificação" + }, + "medications": { + "title": "Medicamentos", + "subtitle": "Medicamentos, cronogramas e doses", + "loginRequired": "Entre para gerenciar medicamentos.", + "addMedication": "Adicionar", + "firstMedication": "Adicionar primeiro medicamento", + "addChoice": { + "logIntake": "Registrar uma dose", + "newMedication": "Novo medicamento" + }, + "takeAllDue": { + "button": "Tomar todos os previstos", + "dialogTitle": "Tomar medicamentos previstos", + "dialogDescription": "Estes medicamentos estão previstos agora. Confirme para registrar todos como tomados.", + "confirm": "Tomar todos ({count})", + "successToast": "{count} doses registradas", + "partialToast": "{taken} registradas, {failed} falharam. Tente novamente", + "failedToast": "Nenhuma dose registrada. Tente novamente" + }, + "logIntake": { + "dialogTitle": "Registrar uma dose", + "dialogDescription": "Registre uma dose contra um medicamento existente. Você pode retrodatá-la para uma data e hora passadas.", + "medicationLabel": "Medicamento", + "slotLabel": "Horário do cronograma", + "slotNone": "Sem horário específico", + "doseLabel": "Dose", + "doseHint": "Pré-preenchida com a dose do medicamento ou horário. Edite-a para registrar uma dose diferente apenas para esta dose.", + "takenAtLabel": "Data e hora", + "takenAtHint": "Padrão é agora; escolha uma data e hora anteriores para registrar uma dose passada.", + "skippedLabel": "Registrada como pulada", + "noMedications": "Adicione um medicamento primeiro, então você pode registrar doses contra ele.", + "cancel": "Cancelar", + "submit": "Registrar dose", + "slotError": "O horário selecionado não pôde ser correspondido a um horário. Escolha outro horário ou “Sem horário específico”." + }, + "emptyTitle": "Nenhum medicamento ainda", + "emptyDescription": "Adicione medicamentos, doses e janelas de lembrete para acompanhar a adesão.", + "loadFailed": "Não foi possível carregar os medicamentos", + "retryLoad": "Tentar novamente", + "inactive": "Pausado", + "intakeHistory": "Histórico de doses", + "openDetailPage": "Abrir página de detalhes do medicamento", + "compliance": "Adesão", + "importIntakes": "Importar doses", + "importDescription": "Cole um array JSON com dados de doses. Formato esperado:", + "importUploadFile": "Enviar arquivo JSON", + "importPaste": "Cole o JSON aqui…", + "importSelected": "Selecionado: {name}", + "importFileLoaded": "Arquivo \"{name}\" carregado", + "importInvalidJson": "O arquivo não contém JSON válido", + "importNoArray": "Nenhum array encontrado", + "importFailed": "Falha na importação", + "importInvalidFormat": "Formato JSON inválido", + "requestExample": "Exemplo de solicitação", + "categoryBloodPressure": "Pressão arterial", + "categoryVitamin": "Vitaminas", + "categoryThyroid": "Tireoide", + "categoryHormone": "Hormônios", + "categorySupplement": "Suplemento", + "categoryPainRelief": "Alívio da dor", + "categoryAllergy": "Alergia", + "categoryDigestive": "Gastrointestinal", + "categorySkin": "Cuidados com a pele", + "categorySleepAid": "Auxílio para dormir", + "categoryDiabetes": "Diabetes", + "categoryAntibiotic": "Antibiótico", + "categoryMentalHealth": "Saúde mental", + "categoryOther": "Outro", + "daysSun": "Dom", + "daysMon": "Seg", + "daysTue": "Ter", + "daysWed": "Qua", + "daysThu": "Qui", + "daysFri": "Sex", + "daysSat": "Sáb", + "back": "Voltar", + "today": "Hoje", + "yesterday": "Ontem", + "tomorrow": "Amanhã", + "asNeededMarker": "Conforme necessário", + "recordOnlyBadge": "Apenas registro", + "courseEndedBadge": "Encerrado", + "trackIntake": { + "title": "Acompanhamento de doses", + "label": "Acompanhar doses", + "helperOn": "As doses ficam previstas neste cronograma, com lembretes e adesão.", + "helperOff": "Mantido como registro: nada fica previsto, sem lembretes, sem adesão.", + "enabledToast": "Acompanhamento de doses ligado", + "disabledToast": "Acompanhamento de doses desligado", + "toggleFailed": "Não foi possível alterar o acompanhamento de doses." + }, + "autoMarkTaken": { + "label": "Registrar doses automaticamente", + "helper": "O HealthLog registra cada dose programada como tomada no horário dela. Você ainda pode alterar ou pular uma dose manualmente. Nenhum lembrete é enviado.", + "cardHint": "Registrada automaticamente", + "enabledToast": "As doses agora são registradas automaticamente", + "disabledToast": "As doses não são mais registradas automaticamente", + "toggleFailed": "Não foi possível alterar o registro automático." + }, + "withoutNotification": "Sem notificação", + "pausedSince": "Pausado desde", + "takeNow": "Tomar agora", + "lastDoseYesterday": "Última dose ontem", + "lastDoseDaysAgo": "Última dose há {count} dias", + "overdue": "Atrasado", + "veryOverdue": "Muito atrasado", + "complianceWindow": "Adesão ({days} dias)", + "complianceUnavailable": "A adesão não pôde ser carregada", + "complianceNotApplicable": "Adesão não aplicável", + "complianceNotApplicableReason": "Nenhum cronograma local está armazenado no HealthLog.", + "complianceInfo": "Parcela das doses esperadas que você registrou. Cronogramas semanais contam semana por semana.", + "complianceInfoLabel": "O que significa adesão?", + "lastIntake": "Última dose:", + "nextIntake": "Próxima dose:", + "nextIntakeOverdue": "Atrasada desde {time}, ainda pode ser tomada", + "dayStreak": "dias seguidos", + "dayStreakOne": "dia seguido", + "cycleDueToday": "Previsto para hoje", + "cycleNoClosedCycles": "Nenhum ciclo de doses fechado ainda", + "taken": "Tomada", + "skipped": "Pulada", + "intakeToastTaken": "{name} registrada como tomada", + "intakeToastSkipped": "{name} pulada", + "intakeToastFailed": "Não foi possível registrar {name}. Tente novamente", + "intakeUndo": "Desfazer", + "intakeUndone": "Entrada revertida", + "intakeUndoFailed": "Não foi possível desfazer. Abra o histórico para corrigir", + "glp1LastInjection": "{label}", + "glp1NextInjectionDays": "{label} (em {days} dias)", + "glp1NextInjectionToday": "hoje", + "glp1NextInjectionTomorrow": "amanhã", + "glp1RotationSuggested": "Próximo recomendado: {site}", + "glp1LogSideEffect": "Registrar efeito colateral", + "sideEffects": { + "section": "Efeitos colaterais", + "addCta": "Registrar", + "sheetTitle": "Registrar um efeito colateral", + "categoryLabel": "Categoria", + "entryLabel": "Sintoma", + "severityLabel": "Gravidade", + "severity": { + "mild": "Leve", + "moderate": "Moderado", + "significant": "Significativo", + "severe": "Grave", + "verySevere": "Muito grave" + }, + "notesLabel": "Notas (opcional)", + "notesPlaceholder": "Qualquer coisa que valha lembrar, máx. 280 caracteres", + "submitCta": "Salvar", + "cancelCta": "Cancelar", + "emptyState": "Nenhum efeito colateral registrado ainda. Acompanhar pode ajudar seu médico e revelar padrões ao longo do tempo.", + "recentTitle": "Últimos 30 dias", + "loading": "Carregando…", + "loadMore": "Carregar mais", + "deleteCta": "Excluir", + "deleteError": "Não foi possível excluir a entrada", + "errorSeverity": "A gravidade deve estar entre 1 e 5", + "errorEntry": "Escolha um sintoma", + "categories": { + "gi": "Gastrointestinais", + "metabolic": "Metabólicos", + "injectionSite": "Local de injeção", + "cognitive": "Cognitivos", + "glp1Specific": "Específicos de GLP-1" + }, + "entries": { + "nausea": "Náusea", + "vomiting": "Vômito", + "diarrhea": "Diarreia", + "constipation": "Constipação", + "abdominalPain": "Dor abdominal", + "hypoglycemiaSymptoms": "Sintomas de glicemia baixa", + "dehydration": "Desidratação", + "anorexia": "Diminuição do apetite", + "electrolyteFatigue": "Fadiga por desequilíbrio de eletrólitos", + "injectionRedness": "Vermelhidão no local de injeção", + "injectionSwelling": "Inchaço no local de injeção", + "injectionBruising": "Hematoma no local de injeção", + "injectionInduration": "Endurecimento no local de injeção", + "brainFog": "Névoa mental", + "dizziness": "Tontura", + "lowMood": "Humor baixo", + "lowEnergy": "Pouca energia", + "earlySatiety": "Saciedade precoce", + "gastroparesisLike": "Esvaziamento gástrico lento", + "dysgeusia": "Alteração do paladar", + "gallbladderDiscomfort": "Desconforto na vesícula" + }, + "deleteConfirmTitle": "Excluir esta entrada?", + "deleteConfirmBody": "Esta entrada de efeito colateral será removida permanentemente." + }, + "scheduling": { + "naturalLanguage": { + "title": "Descreva seu medicamento", + "description": "Escreva o medicamento com suas próprias palavras e preencheremos o formulário para você.", + "placeholder": "ex.: Mounjaro 5 mg semanalmente na quarta-feira de manhã começando na próxima segunda", + "submit": "Extrair", + "submitBusy": "Extraindo…", + "cancel": "Cancelar", + "examples": { + "label": "Tente um destes exemplos", + "weekly": "Mounjaro 5 mg semanalmente na quarta-feira de manhã", + "daily": "Ibuprofeno 200 mg todos os dias, 3 vezes ao dia", + "rolling": "Metotrexato 7,5 mg a cada 7 dias a partir da última injeção" + }, + "error": { + "empty": "Digite uma descrição primeiro.", + "tooLong": "Mantenha a descrição abaixo de 2000 caracteres.", + "rateLimit": "Solicitações demais. Espere um momento e tente novamente.", + "noProvider": "Nenhum provedor de IA configurado. Configure um nas Configurações.", + "budget": "Orçamento diário de IA atingido. Tente novamente amanhã.", + "network": "Não foi possível alcançar o provedor de IA. Tente novamente.", + "consent": "Ler sua descrição com IA precisa do seu consentimento primeiro.", + "unavailable": "Ler descrições com IA não está disponível aqui agora." + } + }, + "cadence": { + "section": "Cadência", + "label": "Com que frequência", + "kind": { + "daily": "Todos os dias", + "weekdays": "Certos dias da semana", + "everyNWeeks": "A cada N semanas em certos dias", + "monthly": "Mensalmente em um dia específico", + "everyNMonths": "A cada N meses em um dia específico", + "yearly": "Uma vez por ano", + "rolling": "A cada N dias a partir da última dose (flexível)", + "rollingExplainer": "Conta a partir da sua última dose registrada; pausa se você pular uma dose.", + "oneShot": "Dose única" + }, + "weekdays": { + "label": "Dias da semana", + "short": { + "mo": "Seg", + "tu": "Ter", + "we": "Qua", + "th": "Qui", + "fr": "Sex", + "sa": "Sáb", + "su": "Dom" + }, + "long": { + "mo": "Segunda-feira", + "tu": "Terça-feira", + "we": "Quarta-feira", + "th": "Quinta-feira", + "fr": "Sexta-feira", + "sa": "Sábado", + "su": "Domingo" + } + }, + "intervalWeeks": { + "suffix": "semanas" + }, + "dayOfMonth": { + "label": "Dia" + }, + "intervalMonths": { + "suffix": "meses", + "dayOnLabel": "no dia" + }, + "yearly": { + "date": { + "label": "Data" + } + }, + "rollingDays": { + "suffix": "dias" + } + }, + "timesOfDay": { + "section": "Horários do dia", + "label": "Horários do dia", + "empty": { + "cta": "Adicione o primeiro horário." + }, + "add": "Adicionar horário", + "remove": "Remover", + "presets": { + "morning": "Manhã", + "noon": "Meio-dia", + "evening": "Noite", + "night": "Madrugada" + }, + "max": { + "reached": "Máximo atingido. Remova um horário antes de adicionar outro." + } + }, + "courseWindow": { + "section": "Janela do curso", + "startsOn": { + "label": "Começa em" + }, + "endsOn": { + "label": "Termina em" + }, + "noEndDate": "Sem data de fim", + "oneShotCaption": "(dose única)", + "invalidRange": "A data de fim deve ser no ou após a data de início." + } + }, + "wizard": { + "header": { + "stepOf": "Etapa {current} de {total}", + "createTitle": "Novo medicamento", + "editTitle": "Editar {name}" + }, + "nav": { + "back": "Voltar", + "next": "Próximo", + "save": "Salvar", + "saveEdit": "Salvar alterações", + "nextHint": "Próximo: {step}", + "reviewHint": "Próximo: Salvar", + "jumpFirst": "Ir para a primeira etapa", + "jumpLast": "Ir para revisão e salvar" + }, + "nl": { + "button": "Descrever" + }, + "steps": { + "step1": { + "title": "Como o medicamento se chama?", + "subline": "Exatamente como aparece na caixa.", + "label": "Nome", + "placeholder": "ex.: Ramipril", + "short": "Nome" + }, + "step2": { + "title": "Que tipo de medicamento é?", + "subline": "Usamos isso para os modelos e análises corretos.", + "short": "Tipo" + }, + "step3": { + "title": "Qual é a dose?", + "subline": "Um comprimido, uma inalação, uma gota, dependendo da forma.", + "amountLabel": "Quantidade", + "amountPlaceholder": "ex.: 5", + "unitLabel": "Unidade", + "unit": { + "mg": "mg", + "ml": "ml", + "iu": "UI", + "mcg": "µg", + "g": "g", + "tablets": "comprimido(s)", + "capsules": "cápsula(s)", + "drops": "gotas", + "puffs": "inalação", + "sprays": "spray", + "pieces": "unidades", + "other": "outro" + }, + "deliveryFormLabel": "Via", + "deliveryForm": { + "ORAL": "Oral", + "INJECTION": "Injeção", + "OTHER": "Outra" + }, + "dosesPerUnitLabel": "Doses por unidade", + "dosesPerUnitPlaceholder": "ex.: 4", + "dosesPerUnitHint": "Doses por caneta/frasco. Deixe em branco para não acompanhar estoque.", + "short": "Dose", + "unitsPerDoseLabel": "Unidades por dose", + "unitsPerDoseHint": "ex.: 2 comprimidos de 2 mg para uma dose de 4 mg, ou ½ comprimido para uma dose dividida" + }, + "step4": { + "title": "Por quanto período você está tomando?", + "subline": "Uma data de início é suficiente para hoje. Você pode adicionar uma data de fim depois.", + "short": "Quando" + }, + "step5": { + "title": "Com que frequência você dose?", + "subline": "Escolha a cadência. Os detalhes vêm na próxima etapa.", + "short": "Cadência" + }, + "step6": { + "title": "Como isso fica em detalhes?", + "subline": "Defina dias da semana, intervalos ou o dia do mês.", + "intervalWeeks": { + "label": "A cada", + "suffix": "semanas" + }, + "dayOfMonth": { + "label": "No", + "suffix": "dia do mês" + }, + "rollingDays": { + "label": "A cada", + "suffix": "dias a partir da última dose" + }, + "short": "Detalhe" + }, + "step7": { + "title": "Quando você dose?", + "subline": "Um ou mais horários do dia. Os lembretes seguem esta lista.", + "presetsLabel": "Predefinições de horário", + "presets": { + "morning": "Manhã", + "noon": "Meio-dia", + "evening": "Noite", + "night": "Madrugada" + }, + "overrideHint": "Opcional: defina uma dose ou contagem de unidades diferente apenas para este horário. Deixe em branco para usar o padrão do medicamento.", + "doseOverrideLabel": "Dose para este horário (opcional)", + "doseOverridePlaceholder": "ex.: meio comprimido", + "unitsOverrideLabel": "Unidades consumidas neste horário", + "unitsOverrideInherit": "Padrão", + "short": "Horários" + }, + "step8": { + "title": "Tudo pronto. O HealthLog deve lembrar você?", + "subline": "Revise tudo abaixo antes de salvar.", + "remindersLabel": "Lembretes ligados", + "remindersDescription": "Push, Telegram ou ntfy, conforme suas configurações.", + "noChannelHint": "Os lembretes precisam de um canal de notificação, e nenhum está ativo agora.", + "noChannelHintLink": "Configurar notificações", + "short": "Concluído" + } + }, + "classRow": { + "bloodPressure": "Pressão arterial", + "diabetes": "Diabetes", + "hormone": "Hormônios", + "glp1": "Injeção de GLP-1", + "painRelief": "Dor", + "allergy": "Alergia", + "vitamin": "Vitaminas", + "supplement": "Suplemento", + "antibiotic": "Antibiótico", + "mentalHealth": "Saúde mental", + "thyroid": "Tireoide", + "digestive": "Gastrointestinais", + "skin": "Cuidados com a pele", + "sleepAid": "Auxílio para dormir", + "other": "Outro" + }, + "cadence": { + "daily": { + "label": "Diário", + "description": "Todos os dias no mesmo horário." + }, + "weekdays": { + "label": "Dias da semana específicos", + "description": "Ex.: segunda, quarta, sexta." + }, + "everyNWeeks": { + "label": "A cada poucas semanas", + "description": "Ex.: a cada 2 semanas nas quintas (GLP-1, biológicos)." + }, + "monthly": { + "label": "Mensal", + "description": "Em um dia fixo de cada mês (ex.: sempre o dia 1)." + }, + "rolling": { + "label": "Flexível a partir da última dose", + "description": "Deixe a próxima dose aberta. Quando você tocar 'tomada', o contador recomeça daquele momento." + }, + "oneShot": { + "label": "Dose única", + "description": "Uma administração, ex.: uma vacina ou um curso de antibiótico." + }, + "asNeeded": { + "label": "Conforme necessário", + "description": "Sem plano fixo. Registre uma dose sempre que precisar (ex.: alívio da dor)." + } + }, + "summary": { + "title": "Resumo", + "cadence": { + "daily": "Todos os dias", + "weekdays": "Nos dias da semana selecionados", + "biweekly": "A cada duas semanas", + "monthly": "Mensalmente", + "quarterly": "A cada três meses", + "yearly": "Uma vez por ano", + "rolling": "A cada {n} dias a partir da sua última dose", + "oneShot": "Uma dose única", + "asNeeded": "Conforme necessário", + "everyNWeeks": "A cada {n} semanas", + "everyNMonths": "A cada {n} meses" + }, + "weekdaysDetail": ", em {days}", + "dayOfMonthDetail": ", no dia {day}.", + "times": "às {times}", + "startsOn": "Começa: {date}", + "endsOn": "Termina: {date}", + "noEndDate": "Sem data de fim" + }, + "compose": { + "scheduleIndex": "Cronograma {n} de {total}", + "list": { + "add": "Adicionar outro cronograma", + "edit": "Editar", + "remove": "Remover", + "removeDisabled": "É necessário pelo menos um cronograma." + } + }, + "errors": { + "submitFailed": "Não foi possível salvar o medicamento. Tente novamente." + } + }, + "doseStrength": { + "title": "Força da dose ao longo do tempo", + "axisLabel": "Dose registrada ({unit})", + "tooltipLabel": "Dose", + "currentDose": "Dose atual: {dose} {unit}", + "noCurrentDose": "Nenhuma dose registrada ainda.", + "empty": "Nenhum histórico de titulação ainda. Registre uma mudança de dose para ver a curva de força." + }, + "titration": { + "title": "Plano de titulação", + "empty": "Nenhum passo de escalada de dose registrado ainda. Adicione mudanças de dose datadas para plotar o plano.", + "youAreHere": "Você está aqui", + "doseStep": "{dose} {unit}", + "plannedFor": "Planejado para {date}" + }, + "injectionSiteBodyOutlineAriaLabel": "Contorno do corpo", + "injectionSitePickerAriaLabel": "Seletor de local de injeção", + "injectionSiteRecommendedAriaLabel": "{site}: próximo local recomendado", + "injectionSiteLegendAriaLabel": "Legenda de marcadores", + "injectionSiteLegendRecommended": "Próximo local recomendado", + "injectionSiteLegendLastUsed": "Último local usado", + "siteAbdomenLeft": "Abdômen, inferior esquerdo", + "siteAbdomenRight": "Abdômen, inferior direito", + "siteAbdomenUpperLeft": "Abdômen, superior esquerdo", + "siteAbdomenUpperRight": "Abdômen, superior direito", + "siteThighLeft": "Coxa esquerda", + "siteThighRight": "Coxa direita", + "siteUpperArmLeft": "Braço esquerdo", + "siteUpperArmRight": "Braço direito", + "sideEffectTagsHelp": "Toque em uma tag para adicioná-la às tags da sua entrada de humor.", + "sideEffectTagNausea": "náusea", + "sideEffectTagConstipation": "constipação", + "sideEffectTagDiarrhea": "diarreia", + "sideEffectTagFatigue": "fadiga", + "sideEffectTagAppetiteLoss": "perda-de-apetite", + "sideEffectTagHeartburn": "azia", + "sideEffectTagHeadache": "dor-de-cabeça", + "phaseConfig": "Fases de lembrete", + "phaseConfigDescription": "Configure o tempo dos lembretes.", + "phaseGreen": "Verde", + "phaseYellow": "Amarelo", + "phaseOrange": "Laranja", + "phaseRed": "Vermelho", + "phaseMinutes": "Min", + "phasePercent": "%", + "phaseResetDefaults": "Redefinir para padrões", + "phaseSaved": "Fases de lembrete salvas", + "sourceWeb": "Web", + "sourceApi": "Aplicativo iOS", + "sourceReminder": "Lembrete", + "sourceImport": "Importação", + "sourceAppleHealth": "Apple Health", + "intakeSourceVia": "via {origin}", + "intakeRecordedAutomatically": "Registrada automaticamente", + "intakeHistoryEmptyTitle": "Nenhuma dose registrada ainda", + "intakeHistoryEmptyDescription": "Registre uma dose na página de doses diárias para começar a construir o histórico.", + "intakeHistoryEmptyAction": "Abrir doses diárias", + "intakeHistoryColTaken": "Tomada", + "intakeHistoryColScheduled": "Programada", + "intakeHistoryColStatus": "Status", + "intakeHistoryColSource": "Fonte", + "intakeHistoryStatusTaken": "Tomada", + "intakeHistoryStatusSkipped": "Pulada", + "intakeHistorySortByTaken": "Ordenar por horário da dose", + "intakeHistorySortByScheduled": "Ordenar por horário programado", + "intakeHistoryPageInfo": "Página {page} de {total}, {count} entradas", + "intakeHistoryPrev": "Anterior", + "intakeHistoryNext": "Próxima", + "glp1": { + "drug": { + "tirzepatide": { + "name": "Tirzepatida" + }, + "semaglutide": { + "name": "Semaglutida" + }, + "liraglutide": { + "name": "Liraglutida" + }, + "dulaglutide": { + "name": "Dulaglutida" + }, + "exenatide": { + "name": "Exenatida" + } + } + }, + "researchMode": { + "chart": { + "title": "Nível estimado do medicamento", + "axisLabel": "Nível estimado (relativo)", + "emptyState": "Nenhum evento de dose ainda.", + "emptyStateCta": "Registre uma dose para ver o nível estimado tomar forma.", + "estimateNote": "Estimativa educacional a partir da farmacocinética populacional publicada pela EMA. Não é uma medição.", + "unknownDrug": "{name} não está no catálogo de GLP-1 aprovado pela EMA, então o HealthLog não pode renderizar uma curva de PK populacional para ele." + } + }, + "detail": { + "status": { + "active": "Ativo", + "paused": "Pausado", + "ended": "Encerrado" + }, + "cadence": { + "oneShotOn": "Dose única em {date}.", + "oneShotPending": "Dose única pendente.", + "asNeeded": "Conforme necessário, sem plano fixo." + }, + "intake": { + "title": "Histórico de doses", + "importButton": "Importar", + "rowActions": { + "openMenu": "Abrir ações da linha", + "edit": "Editar", + "delete": "Excluir" + }, + "selection": { + "rowToggleLabel": "Selecionar linha" + }, + "bulkDelete": { + "selectionCount": "{count} entradas selecionadas", + "deleteButton": "Excluir seleção", + "cancelButton": "Cancelar", + "confirmTitle": "Excluir as entradas selecionadas?", + "confirmBody": "{count} entradas serão removidas permanentemente. O medicamento em si permanece.", + "confirmAction": "Excluir", + "toast": "Seleção excluída", + "failed": "Não foi possível excluir a seleção." + }, + "edit": { + "dialogTitle": "Editar dose", + "takenAtLabel": "Tomada em", + "scheduledForHint": "Programada: {dateTime}", + "farFromScheduledWarning": "Isso está longe do horário programado. Verifique a data.", + "skippedLabel": "Pulada", + "save": "Salvar", + "cancel": "Cancelar", + "savedToast": "Dose atualizada", + "failed": "Não foi possível atualizar a dose." + }, + "deleteRow": { + "confirmTitle": "Excluir esta dose?", + "confirmBody": "A entrada é removida permanentemente.", + "confirmAction": "Excluir", + "toast": "Dose excluída", + "failed": "Não foi possível excluir a dose." + }, + "viewRecent90": "Últimos 90 dias", + "viewAll": "Histórico completo", + "viewToggleLabel": "Faixa do histórico" + }, + "verlauf": { + "loading": "Carregando histórico…", + "loadError": "Não foi possível carregar o histórico.", + "empty": "Nenhuma dose neste período ainda.", + "summaryEmpty": "Nenhuma dose para pontuar ainda.", + "adherenceLabel": "Adesão", + "adherenceBarLabel": "{onTime} no horário, {late} atrasadas, {missed} perdidas", + "add": "Entrada", + "markTaken": "Tomada", + "markSkipped": "Pulada", + "rowActionsLabel": "Ações para {time}", + "markAsTaken": "Marcar como tomada", + "markAsSkipped": "Marcar como pulada", + "adHocTag": "fora do cronograma", + "takenDetail": "prevista {planned}, tomada {taken}", + "doseTaken": "Dose: {dose}", + "status": { + "taken_on_time": "no horário", + "taken_late": "atrasada", + "skipped": "pulada", + "missed": "perdida", + "upcoming": "prevista", + "ad_hoc": "fora do cronograma" + }, + "addDialog": { + "title": "Adicionar dose", + "description": "Registre uma dose, incluindo uma retrodatada ou fora do cronograma.", + "takenAtLabel": "Tomada em", + "skippedLabel": "Pulada", + "nudgeHint": "Perto do horário {slot}. Ao salvar, perguntamos se deve atribuí-la.", + "cancel": "Cancelar", + "submit": "Salvar" + }, + "nudge": { + "title": "Atribuir a este horário?", + "body": "Esta dose cai logo fora da janela {slot}. Atribua a esse horário ou mantenha-a como uma entrada fora do cronograma?", + "keepAdHoc": "Fora do cronograma", + "pin": "Atribuir" + }, + "pin": { + "action": "Atribuir ao horário {time}", + "release": "Liberar atribuição", + "pinnedTag": "atribuída", + "pinnedToast": "Dose atribuída ao horário", + "unpinnedToast": "Atribuição liberada", + "dueContext": "estava prevista: {time} ({delta})", + "confirmTitle": "Atribuir ao horário {time}?", + "confirmBody": "A dose conta para este horário exatamente como contaria se tivesse sido registrada lá: no horário ou atrasada dependendo de quando foi tomada, então a taxa nunca é favorecida. Você pode liberar a atribuição a qualquer momento.", + "confirmCancel": "Cancelar", + "confirmAction": "Atribuir" + } }, "notifications": { "title": "Notificações", - "moodReminder": "Ativar lembrete de humor", - "reminderHour": "Horário do lembrete de humor", - "lowStockRunwayDays": "Dias de estoque baixo", - "reorderLeadDays": "Dias de antecedência para reposição" + "switchLabel": "Enviar um lembrete quando esta dose estiver prevista", + "helperOn": "Os lembretes estão ligados.", + "helperOff": "Os lembretes estão desligados.", + "enabledToast": "Lembretes ligados", + "disabledToast": "Lembretes desligados", + "toggleFailed": "Não foi possível alterar a configuração de lembrete.", + "clientManagedChip": "Gerenciado pelo iPhone", + "clientManagedHint": "Seu iPhone gerencia os lembretes deste medicamento." }, - "thresholds": { - "title": "Metas", - "metric": "Métrica", - "minimum": "Mínimo", - "maximum": "Máximo" - }, - "coach": { - "title": "Coach", - "disable": "Desativar Coach", - "tone": "Tom", - "warm": "Acolhedor", - "neutral": "Neutro", - "concise": "Conciso", - "verbosity": "Nível de detalhe", - "brief": "Breve", - "default": "Padrão", - "detailed": "Detalhado", - "excludedMetrics": "Métricas excluídas", - "dataClusters": "Grupos de dados", - "customClusters": "Usar uma seleção personalizada de grupos", - "metrics": { - "bp": "Pressão arterial", - "weight": "Peso", - "pulse": "Pulso", - "mood": "Humor", - "compliance": "Adesão à medicação", - "hrv": "Variabilidade da frequência cardíaca", - "sleep": "Sono", - "restingHr": "Frequência cardíaca em repouso", - "steps": "Passos", - "medications": "Medicações", - "anthropometrics": "Medidas corporais" + "settings": { + "title": "Configurações", + "phases": { + "openButton": "Configurar fases", + "requiresCourseWindow": "As fases ficam disponíveis quando uma janela de curso é definida." }, - "clusters": { - "cardio": "Saúde cardiovascular", - "body": "Composição corporal", - "activity": "Atividade", - "workouts": "Treinos", - "sleep": "Sono", - "mood": "Humor", - "glucose": "Glicose", - "medication": "Medicação", - "mobility": "Mobilidade", - "environment": "Ambiente" + "grace": { + "label": "Janela de lembrete", + "appliesToAllNote": "Aplica-se a todos os cronogramas deste medicamento.", + "unit": "minutos", + "saved": "Janela de lembrete salva", + "failed": "Não foi possível salvar a janela de lembrete." + }, + "codes": { + "label": "Códigos clínicos (ATC / RxNorm)", + "note": "Opcional. Usado na exportação do registro de saúde FHIR. Os códigos são tomados exatamente como inseridos, nunca adivinhados.", + "atcLabel": "ATC", + "rxNormLabel": "RxNorm", + "saved": "Códigos clínicos salvos", + "failed": "Não foi possível salvar os códigos clínicos." } }, - "insights": { - "title": "Insights", - "sections": "Seções do resumo", - "tiles": "Blocos de navegação", - "order": "Ordem", - "unknownItem": "Insight indisponível", - "sectionLabels": { - "wellnessScores": "Pontuações de bem-estar", - "dailyBriefing": "Resumo diário", - "vitals": "Sinais vitais", - "trends": "Tendências", - "periodReview": "Revisão do período", - "cycleSummary": "Resumo do ciclo", - "signals": "Sinais", - "rhythmEvents": "Eventos de ritmo", - "healthStatus": "Estado de saúde", - "breathing": "Respiração", - "labsChanges": "Mudanças em exames", - "ecg": "ECG" - } - } - }, - "unavailableTitle": "Indisponível neste registro compartilhado", - "unavailableDescription": "Esta área de Configurações fica 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.", - "integrationStatusDocs": "Como funciona o compartilhamento" - }, - "sections": { - "account": { - "title": "Conta", - "subtitle": "Seu perfil, identidade e detalhes de login." - }, - "integrations": { - "title": "Integrações", - "subtitle": "Conecte e gerencie suas fontes de dados e dispositivos.", - "connectionsHeading": "Conexões", - "channelsHeading": "Canais de entrega", - "channelsDescription": "Onde lembretes e alertas são entregues.", - "matrixLink": "Notificações por canal" - }, - "notifications": { - "title": "Notificações", - "subtitle": "Escolha quais lembretes você recebe e onde são entregues.", - "remindersHeading": "Lembretes", - "matrixLink": "Notificações por canal", - "channelsLink": "Canais de entrega", - "displayHeading": "No seu celular" - }, - "layout": { - "title": "Layout", - "backToHub": "Voltar ao Layout", - "dashboard": { - "title": "Painel", - "description": "Layout e ordem dos blocos." - }, - "insights": { - "title": "Insights", - "description": "Seções do resumo e ordem dos chips de navegação." - }, - "subtitle": "Escolha o que seu painel, insights e módulos de acompanhamento mostram, e em qual ordem.", - "medications": { - "title": "Medicações", - "description": "Visualização em lista e ordem manual." - }, - "labs": { - "title": "Exames", - "description": "Visualização, ordenação e ordem manual." - }, - "illness": { - "title": "Diário de doenças", - "description": "Visualização em lista e ordem dos episódios." - }, - "vorsorge": { - "title": "Checkups", - "description": "Visualização em lista e ordem dos lembretes." - }, - "mood": { - "title": "Tags de humor", - "description": "Grupos, tags e tags arquivadas para o seletor de humor." - }, - "documents": { - "title": "Documentos", - "description": "Visualização e organização por mês." - } - }, - "dashboard": { - "subtitle": "Organize os blocos do seu painel." - }, - "thresholds": { - "title": "Metas", - "subtitle": "Defina suas faixas-alvo pessoais por métrica." - }, - "sources": { - "title": "Prioridade de fontes", - "integrationsHint": "Conecte ou desconecte fontes de dados na página de Integrações.", - "integrationsHintLink": "Abrir integrações", - "cardTitle": "Classificação por métrica", - "help": "Quando várias fontes entregam o mesmo valor no mesmo dia, a fonte no topo conta como canônica.", - "resetDefaults": "Redefinir para o padrão", - "resetDefaultsTitle": "Redefinir a ordem das fontes?", - "resetDefaultsBody": "Todas as hierarquias que você organizou voltam à ordem padrão, para todas as métricas e tipos de dispositivo de uma vez. Isso é salvo imediatamente e não pode ser recuperado.", - "resetDefaultsConfirm": "Redefinir ordem", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "saveSuccess": "Prioridade de fontes salva", - "saveError": "Falha ao salvar a prioridade de fontes.", - "resetSuccess": "Prioridade de fontes redefinida para o padrão", - "perMetricToggle": "Substituições por métrica ({count})", - "perMetricHelp": "Métricas que você personalizou fora da hierarquia padrão. Use esta lista para reverter qualquer métrica individual ao padrão constante sem tocar nas demais.", - "perMetricEmpty": "Nenhuma substituição por métrica definida. Toda métrica usa a hierarquia global acima.", - "resetMetric": "Redefinir", - "deviceTypeToggle": "Prioridade por tipo de dispositivo ({count})", - "deviceTypeHelp": "Dentro de uma fonte, qual dispositivo prevalece. Quando um Apple Watch e um iPhone registram passos, o tipo de dispositivo mais bem classificado conta como a leitura canônica.", - "deviceTypeDefault": "Hierarquia padrão de tipos de dispositivo", - "resetDeviceTypes": "Redefinir tipos de dispositivo", - "metrics": { - "steps": "Passos", - "activeEnergy": "Energia ativa", - "walkingRunningDistance": "Distância caminhada + corrida", - "flightsClimbed": "Andares subidos", - "sleep": "Sono", - "weight": "Peso", - "bloodPressure": "Pressão arterial", - "pulse": "Pulso", - "bodyFat": "Gordura corporal", - "bodyTemperature": "Temperatura corporal", - "spo2": "Saturação de oxigênio", - "hrv": "Variabilidade da frequência cardíaca", - "restingHeartRate": "Frequência cardíaca em repouso", - "vo2Max": "VO2 máx", - "skinTemperature": "Temperatura da pele", - "respiratoryRate": "Frequência respiratória", - "recovery": "Recuperação", - "stress": "Estresse", - "sleepDebt": "Débito de sono", - "hrvRmssd": "VFC (RMSSD)" - }, - "sourceLabels": { - "WITHINGS": "Withings", - "APPLE_HEALTH": "Apple Health", - "MANUAL": "Entrada manual", - "IMPORT": "Importação", - "WHOOP": "WHOOP", - "FITBIT": "Fitbit", - "COMPUTED": "Calculado", - "NIGHTSCOUT": "Nightscout", - "POLAR": "Polar", - "OURA": "Oura", - "TELEGRAM": "Telegram", - "MCP": "MCP", - "GOOGLE_HEALTH": "Google Health", - "STRAVA": "Strava", - "EXTERNAL": "Dispositivo externo", - "HEALTH_CONNECT": "Health Connect" - }, - "deviceLabels": { - "watch": "Relógio", - "band": "Pulseira", - "ring": "Anel", - "phone": "Celular", - "scale": "Balança", - "other": "Outro", - "unknown": "Desconhecido" - }, - "subtitle": "Decida qual fonte prevalece quando duas reportam a mesma métrica.", - "nutrients": { - "title": "Ingestão de nutrientes sincronizada", - "description": "Totais diários nos últimos {days} dias: o que o Apple Health sincronizou mais os suplementos que você tomou.", - "empty": "Nenhum dado de nutrientes foi sincronizado ainda.", - "latest": "{amount} {unit} em {date}", - "daysWithData": "{count} de {days} dias", - "moduleHint": "A sincronização é controlada pelo módulo Ingestão de nutrientes.", - "moduleHintLink": "Gerenciar módulos", - "detail": "Somente leitura: o app de origem é dono dos números." - }, - "helpDetail": "As demais permanecem armazenadas para auditoria. Apenas fontes que você conectou ou das quais possui dados são listadas.", - "noneInUse": "Nenhuma fonte para classificar ainda. Conecte uma em Integrações ou registre um valor." - }, - "ai": { - "title": "Provedor de IA", - "subtitle": "Escolha seu provedor de IA e use sua própria chave." - }, - "api": { - "title": "API e tokens", - "subtitle": "Gerencie endpoints de API e tokens de acesso." - }, - "advanced": { - "title": "Avançado", - "subtitle": "Redefinição de dados e exclusão da conta." - }, - "export": { - "title": "Exportar e importar", - "otherOptionsHeading": "Outras opções de exportação", - "downloadFailed": "Não foi possível baixar a exportação. Tente novamente.", - "actions": { - "download": "Baixar" - }, - "filters": { - "since": "De", - "until": "Até" - }, - "cards": { - "measurementsCsv": { - "title": "Medições", - "description": "Peso, pressão arterial, pulso, glicose e todas as outras medições como valores separados por vírgula." + "zone": { + "title": "Gerenciar e zona de perigo", + "pause": { + "title": "Pausar", + "helper": "Pause os lembretes até ligá-los novamente. O histórico permanece intacto.", + "pausedToast": "Lembretes pausados", + "resumedToast": "Lembretes retomados", + "failed": "Não foi possível alterar o estado de pausa." }, - "medicationsCsv": { - "title": "Medicações", - "description": "Sua lista de medicações com dosagem, horários e, opcionalmente, o histórico completo de doses.", - "includeIntake": "Incluir histórico de doses" + "end": { + "title": "Encerrar medicamento", + "helper": "Pare os lembretes e marque o medicamento como encerrado. O histórico permanece visível.", + "button": "Encerrar", + "dialogTitle": "Encerrar {name}? Os lembretes param, o histórico permanece visível", + "dialogBody": "Sem mais lembretes. As entradas antigas permanecem na linha do tempo.", + "toast": "Medicamento encerrado", + "failed": "Não foi possível encerrar o medicamento." }, - "moodCsv": { - "title": "Humor", - "description": "Registros diários de humor com pontuação, tags e horários." + "purge": { + "title": "Excluir histórico", + "helper": "{count} eventos de dose estão armazenados para este medicamento.", + "button": "Excluir histórico", + "dialogTitle": "Realmente excluir o histórico?", + "dialogBody": "As {count} doses serão removidas permanentemente. O medicamento em si permanece.", + "toast": "Histórico excluído", + "failed": "Não foi possível excluir o histórico." }, - "fullBackup": { - "title": "Backup completo", - "description": "Todo o seu registro em um único arquivo JSON.", - "scopeNote": "Metadados de documentos e o resumo gerado por IA, se existir, são incluídos como texto simples; arquivos originais de documentos e dados de GPS/amostras de treinos não. Baixe esses separadamente do cofre ou da exportação de treinos.", - "encryptToggle": "Criptografar com senha", - "passphrasePlaceholder": "Frase-senha (mín. 12 caracteres)", - "passphraseHelp": "Deriva a chave do arquivo com Argon2id e sela com AES-256-GCM. Salve o arquivo com extensão .hlx.", - "noRecoveryWarning": "Não há recuperação. Se você perder esta frase-senha, o arquivo não poderá ser aberto. Guarde-a em local seguro.", - "detail": "Mesmo formato do backup automático semanal. Alguns tipos de registro ainda não são incluídos; o manifesto do arquivo lista o que está nele.", - "contents": "Suas medições, medicações, humor, ciclo, exames, episódios de doença, alergias, histórico familiar, nutrientes, treinos, perfil de saúde e métricas personalizadas em um único arquivo JSON." + "delete": { + "title": "Excluir medicamento", + "helper": "Remove o medicamento e todos os registros relacionados.", + "button": "Excluir", + "dialogTitle": "Excluir {name}?", + "dialogBody": "O medicamento, seus cronogramas, histórico de doses, tokens de API, configuração de fases e lembretes serão removidos permanentemente.", + "toast": "Medicamento excluído", + "failed": "Não foi possível excluir o medicamento." } }, - "import": { - "heading": "Importar", - "description": "Traga dados para o HealthLog a partir de uma exportação do Apple Health, um arquivo JSON ou um CSV. As importações ignoram linhas que já existem, então executá-las novamente é seguro.", - "charCount": "{used} / {max} caracteres", - "appleHealth": { - "title": "Apple Health", - "description": "Envie o export.zip do app Saúde no iPhone (Perfil → Exportar Todos os Dados de Saúde).", - "dropLabel": "Arraste o export.zip para cá", - "dropHint": "ou clique para escolher um arquivo", - "fileInputLabel": "Escolha um arquivo export.zip do Apple Health", - "choose": "Escolher arquivo", - "idempotencyNote": "Reenviar o mesmo arquivo mescla os dados e não cria duplicatas. Arquivos grandes são processados em segundo plano.", - "uploading": "Enviando…", - "uploadFailed": "Falha no envio. Tente novamente.", - "rateLimited": "Muitos envios. Aguarde um momento e tente novamente.", - "tooLarge": "Esse arquivo é muito grande (limite de 1,5 GB).", - "failed": "A importação falhou.", - "failureInterrupted": "A importação foi interrompida antes de terminar, geralmente por reinício do servidor ou por falta de memória. Seus dados estão seguros; envie a exportação novamente para tentar de novo.", - "failureInsufficientMemory": "O limite de memória do servidor é muito baixo para um arquivo deste tamanho. Peça a quem administra o servidor para aumentar o limite de heap do Node.js (NODE_OPTIONS=--max-old-space-size) e envie a exportação novamente.", - "rowsImported": "{count} linhas importadas até agora", - "doneSummary": "Concluído: {imported} de {read} registros importados, {skipped} registros clínicos ignorados.", - "doneNothing": "Nada foi importado desse arquivo: 0 de {read} registros chegaram.", - "writtenByHealthLogOne": "{count} registro que o próprio HealthLog gravou no Apple Health foi deixado de fora, porque já está nos seus dados.", - "writtenByHealthLogOther": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", - "writtenByHealthLogFew": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", - "ecgResult": "ECGs: {discovered} descobertos, {imported} importados, {updated} atualizados, {skipped} ignorados, {failed} falhas. Falhas de ECG não descartam registros suportados importados do export.xml.", - "estimateWarning": "Totais cumulativos de {count} dia(s) foram estimados a partir da maior fonte de exportação. As estatísticas nativas do Apple Health permanecem autoritativas.", - "phase": { - "queued": "Na fila…", - "unpacking": "Descompactando o arquivo…", - "parsing": "Lendo a exportação…", - "upserting": "Importando registros…" + "phases": { + "modeLabel": "Modo {phase}", + "saveFailed": "Não foi possível salvar as fases de lembrete." + }, + "api": { + "caption": "Endpoint para \"{name}\"", + "copyUrl": "Copiar URL", + "urlCopied": "URL copiada", + "mintToken": "Gerar token", + "mintAnotherToken": "Gerar outro token", + "mintFailed": "Não foi possível gerar um token.", + "copyFailed": "Não foi possível copiar.", + "tokenCopied": "Token copiado", + "copyToken": "Copiar token", + "mintedHint": "Copie este token agora. Ele é exibido apenas uma vez." + }, + "advanced": { + "dataPortability": { + "import": { + "title": "Importar doses", + "helper": "Carregue doses passadas de um arquivo JSON ou JSON colado.", + "button": "Importar JSON" }, - "skipUnsupported": "{count} amostras ignoradas: tipos de dados que o HealthLog não importa.", - "skipRefused": "{count} amostras não puderam ser gravadas (ilegíveis, fora do intervalo ou falha ao salvar).", - "skipBreakdown": "Mostrar detalhamento ({count} tipos)", - "skipBreakdownMore": "+ {count} tipos a mais", - "cycleSummary": "{samples} amostras de ciclo mescladas em {days} registros diários.", - "cycleModuleOff": "{count} amostras de ciclo ignoradas porque o acompanhamento do ciclo está desativado nesta conta.", - "cycleDaysFailed": "{count} dias de ciclo não puderam ser gravados: {reason}" - }, - "json": { - "title": "Arquivo JSON", - "description": "Cole JSON ou envie um arquivo .json com medições e registros de humor.", - "pasteLabel": "Cole o JSON", - "fileInputLabel": "Escolha um arquivo JSON para importar", - "schemaHint": "Dois arrays: measurements e moodEntries.", - "docsLink": "Veja o esquema e um exemplo.", - "uploadFile": "Enviar arquivo", - "downloadExample": "Baixar exemplo", - "import": "Importar", - "invalidJson": "Isso não é um JSON válido. Verifique a sintaxe e tente novamente.", - "invalidPayload": "Os dados não correspondem ao esquema de importação.", - "rateLimited": "Muitas importações nesta hora (limite de 5). Tente novamente mais tarde.", - "failed": "A importação falhou. Tente novamente.", - "readFailed": "Não foi possível ler esse arquivo.", - "resultSummary": "Importadas {measurements} medições e {moods} registros de humor, {skipped} ignorados.", - "resultSuccess": "Importadas {measurements} medições e {moods} registros de humor", - "resultNothing": "Nada foi importado. Todos os {skipped} registros foram ignorados.", - "resultEmpty": "Esse arquivo não continha medições nem registros de humor." - }, - "csv": { - "title": "Arquivo CSV", - "description": "Importe medições de uma planilha ou exportação de medidor.", - "pasteLabel": "Cole o CSV", - "fileInputLabel": "Escolha um arquivo CSV para importar", - "schemaHint": "Colunas: type, value, unit, measuredAt (com fuso horário) e opcionais glucoseContext, notes, externalId.", - "docsLink": "Veja o esquema de colunas e um exemplo.", - "uploadFile": "Enviar arquivo", - "downloadExample": "Baixar exemplo", - "preview": "Pré-visualizar", - "import": "Importar", - "empty": "Adicione pelo menos uma linha CSV antes de importar.", - "rateLimited": "Muitas importações nesta hora (limite de 5). Tente novamente mais tarde.", - "tooLarge": "Esse arquivo é muito grande (limite de 16 MB).", - "invalidPayload": "O CSV não pôde ser interpretado. Verifique a linha de cabeçalho e tente novamente.", - "failed": "A importação falhou. Tente novamente.", - "readFailed": "Não foi possível ler esse arquivo.", - "previewSummary": "Pré-visualização: {inserted} seriam importados, {skipped} ignorados.", - "resultSummary": "Importados {inserted} novos e atualizados {updated}, {skipped} ignorados.", - "rowError": "Linha {line}: {reason}", - "resultSuccess": "Importados {inserted} novos e atualizados {updated}", - "resultNothing": "Nada foi importado. Todas as {skipped} linhas foram ignoradas.", - "resultEmpty": "Esse arquivo tem cabeçalho, mas nenhuma linha de dados.", - "previewSuccess": "Pré-visualização: {inserted} seriam importados", - "previewNothing": "Pré-visualização: nada seria importado. Todas as {skipped} linhas seriam ignoradas.", - "skipGroupOne": "{count} linha ignorada: {reason}", - "skipGroupFew": "{count} linhas ignoradas: {reason}", - "skipGroupOther": "{count} linhas ignoradas: {reason}", - "skipDetails": "Mostrar todas as linhas ignoradas", - "reasonUnknownType": "tipo de medição desconhecido", - "reasonInvalidValue": "o valor não é um número", - "reasonValueOutOfRange": "valor fora do intervalo plausível", - "reasonUnknownUnit": "unidade não reconhecida para este tipo", - "reasonMissingTimezoneOffset": "o horário não tem fuso horário", - "reasonInvalidTimestamp": "não foi possível ler o horário", - "reasonImplausibleTimestamp": "horário no futuro ou anterior a 1900", - "reasonUnexpectedGlucoseContext": "contexto de glicose definido em uma linha que não é glicemia", - "reasonInvalidGlucoseContext": "o contexto de glicose não é um dos valores permitidos", - "reasonNotesTooLong": "a observação é muito longa", - "reasonExternalIdTooLong": "o ID externo é muito longo", - "reasonUnstableExternalId": "o ID externo não é estável entre exportações", - "reasonDuplicate": "já importado", - "reasonUnknown": "ignorado", - "detail": "Uma linha por medição." - }, - "doseHistory": { - "title": "Histórico de doses de medicação", - "description": "Um histórico de doses exportado de outro aplicativo de medicação, lido como vier.", - "pasteLabel": "Cole a exportação", - "fileInputLabel": "Escolha um arquivo de histórico de doses", - "uploadFile": "Escolher arquivo", - "preview": "Pré-visualizar", - "import": "Importar", - "empty": "Cole a exportação ou escolha um arquivo primeiro.", - "readFailed": "Não foi possível ler esse arquivo.", - "rateLimited": "Máximo de 5 importações por hora. Tente novamente mais tarde.", - "tooLarge": "Esse arquivo ultrapassa o limite de 16 MB.", - "inProgress": "Uma importação de histórico de doses já está em andamento. Aguarde a conclusão.", - "workerUnavailable": "O trabalhador em segundo plano não está disponível, então nada foi importado.", - "failed": "A importação falhou. Nada foi gravado.", - "columnsHeading": "O que cada coluna faz", - "jsonOnly": "Somente JSON", - "previewLine": "{rows} linhas lidas, {queued} seriam importadas, {refused} recusadas", - "submittedLine": "{rows} linhas lidas, {queued} na fila para importação", - "unmatched": "Nenhuma medicação no registro corresponde a: {names}", - "ambiguous": "Corresponde a mais de uma medicação: {names}", - "mirrored": "Espelhada de outro app, então nenhuma dose pode ser adicionada: {names}", - "unknownColumns": "Colunas para as quais o importador não tem regra, deixadas sem leitura: {names}", - "codingsNotRead": "Linhas com um valor Codings que não foi lido: {count}", - "archivedRowsPresent": "Linhas marcadas como pertencentes a medicações arquivadas: {count}. Essa marcação não as ignora nem as reativa; o resultado final informa o que foi adicionado.", - "verdict": { - "honoured": "usado", - "reported": "informado", - "ignored": "não lido" - }, - "column": { - "date": "O horário em que a dose foi realmente tomada. O fuso UTC é lido exatamente como escrito.", - "scheduledDate": "O horário ao qual a dose pertencia, mantido separado do momento em que foi tomada. Vazio significa que a dose não pertencia a nenhum horário.", - "medication": "Correspondido a uma medicação já existente no seu registro. Nada é criado a partir do arquivo.", - "nickname": "Tentado como segundo nome quando o primeiro não corresponde a nada.", - "dosage": "Registrado na dose apenas quando difere da quantidade programada.", - "scheduledDosage": "Comparado à quantidade real para decidir se a dose desviou. Nunca armazenado por si só.", - "unit": "Escrito junto à quantidade, soletrado como o arquivo escreve. \"count\" significa múltiplos da dose configurada.", - "status": "\"Taken\" vira uma dose e \"Skipped\" um pulo deliberado. Qualquer outro valor não registra decisão e a linha é recusada.", - "archived": "Contado e informado de volta. Uma dose que aconteceu não é desfeita por arquivar a medicação depois.", - "codings": "O CSV não documenta uma codificação para esta coluna, então ela é deixada como está em vez de adivinhada. Células preenchidas são contadas.", - "form": "Descreve a medicação, não a dose.", - "start": "A data em que você começou a medicação, não o horário desta dose.", - "end": "A data em que você parou a medicação, não o horário desta dose." - }, - "fatal": { - "emptyFile": "Esse arquivo não contém linhas.", - "missingColumns": "Esse arquivo está sem uma coluna de que o importador precisa: Date, Medication ou Status.", - "unreadableJson": "Esse arquivo não é um JSON válido.", - "jsonNotAnArray": "Esse JSON não contém uma lista de doses.", - "jsonNoIntakeTime": "A exportação JSON registra quando a dose era devida, mas não quando foi tomada, e um horário programado não será gravado como se fosse a tomada. Exporte o CSV, que carrega ambos.", - "tooManyRows": "Esse arquivo contém mais linhas do que uma importação consegue aceitar. Divida-o e importe as partes." - }, - "detail": "Um arquivo cobre todas as medicações nele." - }, - "healthConnect": { - "title": "Exportação do Health Connect", - "description": "Importe o arquivo ZIP que o app Health Connect no Android gera quando você exporta seus dados.", - "choose": "Escolher arquivo ZIP", - "uploading": "Enviando…", - "uploadFailed": "Falha no envio. Tente novamente.", - "tooLarge": "O arquivo é maior do que este servidor aceita.", - "doneSummary": "{count} valores importados.", - "failed": "A importação falhou: {reason}", - "phase": { - "queued": "Aguardando início", - "unpacking": "Descompactando o arquivo", - "parsing": "Lendo os registros", - "upserting": "Salvando os valores", - "done": "Concluído", - "failed": "Falhou" - }, - "steps": { - "export": "No seu celular Android, abra o Health Connect, vá em Gerenciar dados, depois Exportar e importar, e inicie uma exportação.", - "cloud": "O Health Connect salva a exportação apenas em um app de armazenamento em nuvem, como Google Drive, Dropbox ou Nextcloud, nunca no próprio celular. Escolha um lá.", - "upload": "Baixe o arquivo ZIP dessa nuvem para este dispositivo e envie-o aqui." - }, - "dropLabel": "Arraste o ZIP do Health Connect para cá", - "dropHint": "ou clique para escolhê-lo. Até 1 GB.", - "fileInputLabel": "Arquivo ZIP de exportação do Health Connect", - "privacyNote": "O arquivo é excluído do servidor assim que a importação termina. Registros de apps que você já conecta diretamente, como Withings ou Fitbit, são deixados de fora para nada chegar duplicado. Enviar o mesmo arquivo novamente não muda nada.", - "rateLimited": "Muitos envios em pouco tempo. Aguarde um minuto e tente novamente.", - "busy": "Uma importação já está em andamento para sua conta. Aguarde até terminar.", - "rowsSoFar": "{count} valores salvos até agora", - "doneNothing": "A importação terminou, mas não havia nada novo para adicionar.", - "workouts": "Treinos", - "leftOutConnected": "{count} registros de apps que você já conecta diretamente foram deixados de fora.", - "nutrientsModuleOff": "Totais de água e nutrientes não foram importados porque o módulo Nutrientes está desativado.", - "cycleModuleOff": "Dados do período não foram importados porque o acompanhamento do ciclo está desativado.", - "failure": { - "unsupportedVersion": "Esta exportação do Health Connect é antiga demais para ser lida. Atualize o Health Connect no celular e exporte novamente.", - "notHealthConnect": "Este arquivo não é uma exportação do Health Connect. Escolha o arquivo ZIP que o Health Connect salvou.", - "unsafeSchema": "Este arquivo não tem a estrutura de uma exportação do Health Connect e não foi lido.", - "tooLarge": "A exportação é maior do que este servidor aceita.", - "stagingMissing": "O arquivo enviado não estava mais no servidor. Envie-o novamente.", - "interrupted": "A importação foi interrompida por um reinício do servidor. Envie o arquivo novamente." + "export": { + "title": "Exportar medicamento", + "helper": "Baixe este medicamento como um arquivo CSV.", + "includeIntake": "Incluir histórico de doses", + "button": "Exportar CSV" } } }, - "subtitle": "Exporte seus dados ou importe de um backup." - }, - "about": { - "title": "Sobre este app", - "subtitle": "Versão, licença e links do projeto." - }, - "sharing": { - "title": "Compartilhamento", - "subtitle": "Compartilhe acesso somente leitura aos seus dados." - }, - "insights": { - "subtitle": "Organize suas seções do resumo e a ordem dos chips." - }, - "medications": { - "subtitle": "Gerencie a visualização e a ordem da sua lista de medicações." - }, - "mood": { - "subtitle": "Organize suas tags de humor, grupos e ordem do seletor." - }, - "labs": { - "subtitle": "Gerencie a visualização, a ordem e os biomarcadores." - }, - "illness": { - "subtitle": "Gerencie a visualização e a ordem dos episódios." - }, - "vorsorge": { - "subtitle": "Gerencie a visualização, a ordem e os lembretes individuais." - }, - "modules": { - "title": "Módulos", - "saved": "Salvo", - "error": "Não foi possível salvar. Tente novamente.", - "toggleable": { - "title": "O que você acompanha", - "description": "Módulos desativados saem da navegação, dos blocos e dos insights, enquanto seus dados permanecem intactos." + "header": { + "historyLabel": "Ver histórico de doses" }, - "manageIn": "Gerenciar em {section}", - "operatorDisabled": "Desativado no servidor", - "subtitle": "Escolha quais áreas de acompanhamento o HealthLog mostra pelo app." - }, - "gesundheitsakte": { - "title": "Registro de saúde", - "subtitle": "Exporte um registro de saúde completo, pronto para o clínico." - }, - "coach": { - "title": "Coach", - "subtitle": "Ajuste o Coach, seus lembretes proativos e sua memória." - }, - "security": { - "title": "Segurança", - "subtitle": "Autenticação de dois fatores, códigos de recuperação e chaves de acesso." - }, - "privacy": { - "title": "Dados e privacidade", - "subtitle": "Seus dados, retenção, criptografia e segurança da conta em um só lugar." - }, - "mcp": { - "title": "Conector MCP", - "subtitle": "Conecte um assistente externo aos seus próprios dados de saúde." - }, - "anamnesis": { - "title": "Histórico médico", - "subtitle": "Seu histórico médico, estilo de vida, detalhes de emergência e o que a IA pode ler." - }, - "environment": { - "title": "Local e clima", - "subtitle": "Clima, luz do dia e contexto de localização.", - "disabledHint": "Ative o módulo Ambiente para definir um local de casa e puxar clima e luz do dia diários.", - "searchPlaceholder": "Buscar uma cidade", - "search": "Buscar", - "searchError": "Não foi possível buscar esse lugar.", - "use": "Usar", - "select": "Selecionar", - "saveError": "Não foi possível salvar sua alteração.", - "homeSaved": "Local de casa salvo", - "travelAdded": "Período de localização adicionado.", - "travelRemoved": "Período de localização removido.", - "backfillQueued": "Preenchimento retroativo na fila.", - "backfillError": "Não foi possível iniciar o preenchimento retroativo.", - "startDate": "Data de início", - "endDate": "Data de término", - "storedDays": "{count} dias de clima armazenados.", - "home": { - "title": "Local de casa", - "description": "Um local aproximado, no nível de cidade, nunca um rastro preciso. Clima e luz do dia são buscados para este lugar nos dias em que nenhum período de localização se aplica, a partir da data em que você o definiu.", - "current": "Atual: {label}", - "none": "Nenhum local de casa definido ainda.", - "since": "Clima acompanhado desde {date}. Dias anteriores permanecem vazios até você adicionar um período de localização." + "history": { + "plannedSuffix": "prevista" }, - "travel": { - "title": "Períodos de localização", - "description": "Adicione um lugar e um intervalo de datas, como uma viagem ou um trecho do histórico anterior. O período substitui sua casa pelos dias que cobre, então o clima corresponde a onde você realmente estava. É assim que você corrige o passado.", - "none": "Nenhum período de localização ainda.", - "add": "Adicionar {label}", - "remove": "Remover período de localização", - "removeConfirmTitle": "Remover esta viagem?", - "removeConfirmBody": "As medições feitas durante ela permanecem no seu registro; apenas o registro da viagem sai.", - "range": "{start} a {end}", - "suggestionsIntro": "O Dawarich encontrou dias no exterior que nenhum período cobre ainda.", - "suggestionUse": "Usar", - "suggestionDismiss": "Descartar sugestão" + "tabs": { + "uebersicht": "Visão geral", + "zeitplan": "Cronograma", + "bestand": "Estoque", + "verlauf": "Histórico", + "injektion": "Injeção", + "erweitert": "Avançado", + "wirkung": "Efeito" }, - "backfill": { - "title": "Preencher dias anteriores", - "description": "Busque e armazene o clima de um intervalo de datas anterior para que dias mais antigos entrem nas correlações. O início usa por padrão a data de vigência da sua casa; para alcançar mais atrás, adicione primeiro um período de localização para esse intervalo.", - "run": "Preencher" + "shell": { + "loadFailed": "Este medicamento não pôde ser carregado.", + "tablistLabel": "Seções de detalhes do medicamento" }, - "noResults": "Nenhum lugar correspondente encontrado.", - "fetchFailedOne": "A última atualização de clima em segundo plano falhou ({when}).", - "fetchFailedFew": "As últimas {count} atualizações de clima em segundo plano falharam, a mais recente em {when}.", - "fetchFailedOther": "As últimas {count} atualizações de clima em segundo plano falharam, a mais recente em {when}.", - "airQuality": { - "title": "Qualidade do ar e pólen", - "description": "Qualidade do ar, pólen e UV diários para sua localização, do modelo CAMS via Open-Meteo.", - "toggle": "Incluir qualidade do ar e pólen", - "operatorDisabled": "A qualidade do ar está desativada neste servidor.", - "coverage": "{count} dias com dados de qualidade do ar", - "pollenEuropeOnly": "Os dados de pólen cobrem apenas a Europa.", - "historyProgress": "Preenchendo qualidade do ar: {done} de {total} dias", - "historyComplete": "A qualidade do ar está preenchida para todo dia anterior com registros que a fonte cobre ({total} dias). Dias mais antigos permanecem vazios.", - "attribution": "Fontes de dados e licenças", - "saveError": "Não foi possível salvar a configuração.", - "latest": "Dia mais recente ({date})", - "modelNote": "Valores externos modelados para sua área, não sua exposição pessoal." - } - }, - "score": { - "title": "Pontuação de saúde", - "subtitle": "Escolha quais pilares contam para sua pontuação.", - "card": { - "title": "O que conta para sua pontuação", - "description": "Todo pilar que você registra conta, a menos que você diga o contrário aqui." + "uebersicht": { + "statusTitle": "Status", + "nextDoseLabel": "Próxima dose", + "nextDoseNone": "Nenhuma dose prevista.", + "nextDoseAsNeeded": "Conforme necessário, sem dose planejada.", + "nextDoseNotTracked": "Não acompanhado, mantido como registro.", + "pausedHint": "Pausado: sem lembretes.", + "reminderLabel": "Lembrete", + "reminderOn": "Ligado", + "reminderOff": "Desligado", + "supplyLabel": "Estoque", + "supplyRunway": "Dura cerca de {days} dias a mais", + "jumpToZeitplan": "Abrir cronograma", + "jumpToVerlauf": "Abrir histórico", + "jumpToBestand": "Abrir estoque", + "complianceTitle": "Adesão", + "complianceEmpty": "Nenhum dado de adesão ainda." }, - "threeAxes": "Registrar, exibir e contar são três coisas separadas. Esta página muda apenas a última. Um pilar que você desativa aqui continua sendo registrado e continuando a aparecer em todo o resto do HealthLog; ele apenas deixa de mover o número.", - "recommendation": "Três áreas de saúde é a recomendação, não uma exigência: uma seleção com pelo menos um pilar pode ser salva. Uma pontuação mais enxuta é calculada da mesma forma e diz no cartão quantas áreas a sustentam.", - "axis": { - "countsFor": "Contar {pillar} para a pontuação" - }, - "state": { - "counting": "Contando para sua pontuação", - "waiting": "Selecionado, aguardando dados", - "crisis": "A orientação de segurança é exibida em vez de uma pontuação. Sua seleção está correta.", - "readFailed": "Este pilar não pôde ser lido na última execução." - }, - "presets": { - "label": "Começar de", - "all": "Todos os pilares", - "current": "Sua seleção salva" - }, - "save": "Salvar", - "saved": "Salvo", - "error": "Não foi possível salvar. Tente novamente.", - "loadFailed": "Não foi possível carregar sua seleção.", - "eligibilityFailed": "Não foi possível verificar quais pilares têm dados atualmente. Os interruptores abaixo ainda funcionam.", - "omitted": "{count} pilares não estão listados porque seu acompanhamento está desativado. Reative um módulo e seu pilar volta.", - "omittedLink": "Abrir módulos", - "refusal": { - "empty": "Uma pontuação de saúde precisa de pelo menos uma área de saúde para pontuar. Mantenha uma selecionada; a pontuação dirá de quais áreas ela é construída." - }, - "notice": { - "upgrade": { - "title": "O que conta agora é sua escolha", - "body": "Quais pilares contavam para sua Pontuação de Saúde antes seguia os módulos que você tinha ativado. Agora é uma escolha separada, e esta página é onde você a faz. Seu número não mudou quando isso chegou: ele ainda conta exatamente o que contava antes." - }, - "changed": { - "title": "Você mudou o que conta", - "body": "Desde {date} sua pontuação é calculada a partir de um conjunto diferente de pilares. Dias anteriores foram calculados com o conjunto antigo, então os dois não são comparados e a mudança semanal permanece pausada até a janela de comparação ficar livre da mudança. O histórico de cada pilar corre direto através dela.", - "bodyUndated": "Sua pontuação é calculada a partir de um conjunto diferente de pilares do que antes. Dias anteriores à mudança foram calculados com o conjunto antigo, então os dois não são comparados e a mudança semanal permanece pausada até a janela de comparação ficar livre da mudança. O histórico de cada pilar corre direto através dela." - }, - "composition": { - "title": "O que conta mudou por conta própria", - "left": "Deixaram de contar para sua pontuação: {pillars}. O número mudou por esse motivo, não porque sua saúde mudou.", - "joined": "Agora contam para sua pontuação: {pillars}." - }, - "dismiss": "Entendi", - "dismissError": "Não foi possível salvar isso. Tente novamente." - } - }, - "access": { - "title": "Acesso compartilhado", - "subtitle": "Quem pode abrir seu registro de saúde, e de quem você pode abrir." - } - }, - "profile": "Perfil", - "language": "Idioma", - "languageDescription": "Escolha o idioma de exibição do aplicativo.", - "timeFormat": { - "title": "Formato de hora", - "description": "Controla se os horários aparecem no relógio de 24 horas ou de 12 horas (AM/PM).", - "auto": "Automático (idioma)", - "h24": "24 horas", - "h12": "12 horas (AM/PM)", - "saved": "Formato de hora salvo", - "saveError": "Falha ao salvar o formato de hora." - }, - "dateFormat": { - "title": "Formato de data", - "description": "Controla a ordem de dia, mês e ano quando as datas são exibidas.", - "auto": "Automático (idioma)", - "dmy": "DD.MM.AAAA", - "mdy": "MM/DD/AAAA", - "ymd": "AAAA-MM-DD", - "saved": "Formato de data salvo", - "saveError": "Falha ao salvar o formato de data." - }, - "username": "Nome de usuário", - "height": "Altura (cm)", - "heightFtIn": "Altura (pés, pol)", - "dateOfBirth": "Data de nascimento", - "dateOfBirthHint": "Usada para cálculos automáticos de metas de pressão arterial.", - "gender": "Gênero", - "genderNone": "Não especificado", - "genderMale": "Masculino", - "genderFemale": "Feminino", - "genderHint": "Usado para valores-alvo específicos por gênero.", - "timezone": "Fuso horário", - "timezoneHint": "Usado para rótulos dos eixos dos gráficos, horários de lembretes, datas de exportação e contexto do Coach. Os dados armazenados não mudam.", - "timezoneInvalid": "Não é um fuso horário IANA válido.", - "profileSaved": "Perfil salvo", - "profilePartiallySaved": "Perfil salvo, mas {field} não pôde ser atualizado.", - "profileNothingSaved": "Nada foi salvo. Corrija {field} e tente novamente.", - "profileRejection": { - "tooBig": "Esse valor está acima do intervalo que este campo aceita.", - "tooSmall": "Esse valor está abaixo do intervalo que este campo aceita.", - "invalidValue": "Não é uma das respostas que este campo aceita.", - "invalidFormat": "Não está escrito em uma forma que este campo consiga ler.", - "invalidType": "Esse valor não chegou em uma forma que este campo consiga armazenar.", - "rateLimited": "Alterado com muita frequência. Aguarde um pouco e tente novamente.", - "other": "Este valor não foi aceito. Verifique-o e tente novamente.", - "reproofRequired": "Digite sua senha atual para alterar o endereço de e-mail.", - "reproofFailed": "Essa senha não está correta, então o endereço de e-mail não foi alterado.", - "secondFactorRequired": "Confirme com seu segundo fator ou uma chave de acesso para alterar o endereço de e-mail." - }, - "avatar": { - "title": "Foto do perfil", - "description": "Envie uma foto armazenada no seu próprio servidor. Ela aparece pelo app no lugar de um serviço externo de avatar.", - "upload": "Enviar foto", - "replace": "Substituir foto", - "remove": "Remover", - "removeTitle": "Remover a foto do perfil?", - "removeBody": "A imagem é excluída do seu servidor e suas iniciais tomam seu lugar. Você precisaria do arquivo original para enviá-la novamente.", - "removeConfirm": "Remover foto", - "hint": "JPEG, PNG ou WebP. Até 2 MB e 2048×2048 pixels.", - "uploaded": "Foto do perfil atualizada", - "removed": "Foto do perfil removida", - "invalidType": "Tipo de imagem não suportado. Use JPEG, PNG ou WebP.", - "tooLarge": "A imagem excede o limite de 2 MB.", - "error": "Não foi possível atualizar a foto do perfil. Tente novamente." - }, - "changePassword": "Alterar senha", - "changePasswordDescription": "Substitua sua senha atual por uma nova.", - "currentPassword": "Senha atual", - "newPassword": "Nova senha", - "confirmNewPassword": "Confirme a nova senha", - "passwordMismatch": "As novas senhas não coincidem", - "passwordUpdated": "Senha atualizada com sucesso", - "passkeys": "Chaves de acesso", - "passkeysDescription": "Chaves de acesso permitem login seguro sem senha.", - "passkeyReauth": { - "title": "Confirme que é você", - "description": "Verifique um método de login existente antes de adicionar uma nova chave de acesso.", - "methodLabel": "Método de verificação", - "methods": { - "password": "Senha", - "totp": "Código do autenticador", - "passkey": "Chave de acesso", - "webauthn": "Chave de segurança" - }, - "currentPassword": "Senha atual", - "authenticatorCode": "Código do autenticador", - "authenticatorPlaceholder": "Código de 6 dígitos do autenticador", - "verifyAndAdd": "Verificar e adicionar", - "factorDescription": "Verifique um método de login existente antes de adicionar um segundo fator.", - "verifyAndContinue": "Verificar e continuar" - }, - "passkeyName": "Nome", - "noPasskeys": "Nenhuma chave de acesso registrada.", - "addPasskey": "Adicionar chave de acesso", - "passkeyRegistrationFailed": "Falha ao registrar a chave de acesso", - "passkeyRegistrationCancelled": "Registro da chave de acesso cancelado", - "passkeyNotSupported": "Seu navegador ou dispositivo ainda não suporta chaves de acesso. Tente outro navegador ou dispositivo.", - "passkeyAlreadyRegistered": "Este dispositivo já está registrado como chave de acesso para sua conta.", - "passkeySecurityBlocked": "Seu navegador bloqueou a solicitação da chave de acesso por motivos de segurança. Certifique-se de estar em uma origem HTTPS confiável e tente novamente.", - "passkeyTimeout": "O prompt da chave de acesso expirou. Tente novamente.", - "passkeyUnknownError": "Falha ao registrar a chave de acesso: {message}", - "deletePasskey": "Excluir chave de acesso?", - "deletePasskeyDescription": "A chave de acesso será excluída permanentemente.", - "singleDevice": "Dispositivo único", - "multiDevice": "Multidispositivo", - "backedUp": "com backup", - "telegram": { - "errorInvalidAction": "Ação inválida.", - "errorMedicationNotFound": "Medicamento não encontrado.", - "errorMedicationInactive": "Medicamento não encontrado ou inativo.", - "errorUnknownAction": "Ação desconhecida.", - "snoozeOneHour": "1 hora", - "snoozeThreeHours": "3 horas", - "snoozedFor": "{name} adiado por {duration}.", - "skipped": "{name} pulado.", - "alreadyRecorded": "{name} já foi registrado.", - "recordedAsTaken": "{name} registrado como tomado.", - "confirmed": "{name} confirmado.", - "genericConfirmed": "Confirmado.", - "cancelled": "Cancelado.", - "moodLogged": "Registrado: {score}/5", - "moodNotePrompt": "Adicione uma nota curta (opcional).", - "moodNoteSaved": "Nota salva.", - "moodNoteExpired": "Esse prompt expirou.", - "remindLater": "Lembrete adiado por {duration}.", - "measurementDone": "Marcado como concluído.", - "measurementNotFound": "Lembrete não encontrado.", - "buttonMoodNote": "Nota…", - "buttonLater": "Mais tarde", - "buttonDone": "Concluído", - "noActiveMedications": "Nenhum medicamento ativo encontrado.", - "whichMedication": "Qual medicamento você tomou?", - "cancelButton": "Cancelar", - "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", - "measureValuePrompt": "Responda com o valor para registrá-lo (opcional).", - "buttonMeasureValue": "Valor…", - "measureValueSaved": "Leitura salva.", - "measureValueInvalid": "Responda com um número para registrar uma leitura.", - "measureValueOutOfRange": "Esse valor está fora da faixa plausível.", - "measureValueExpired": "Esse prompt expirou." - }, - "telegramDescription": "Lembretes de medicação via bot.", - "botToken": "Token do bot", - "chatId": "ID do chat", - "enableNotifications": "Ativar notificações", - "telegramStep1": "Crie um bot via @BotFather no Telegram e copie o token.", - "telegramStep2": "Envie /start ao seu bot para ativar o chat.", - "telegramStep3": "Encontre seu ID de chat via @userinfobot ou na API do Bot.", - "ntfy": "ntfy", - "ntfyDescription": "Notificações via ntfy (auto-hospedado ou ntfy.sh).", - "ntfyEnable": "Ativar ntfy", - "ntfyServer": "URL do servidor", - "ntfyTopic": "Tópico", - "ntfyAuthToken": "Token de autenticação (opcional)", - "ntfyAuthTokenHint": "Necessário apenas para tópicos privados com controle de acesso.", - "webhook": "Webhook", - "webhookDescription": "Envie notificações POST para qualquer URL: Discord, Slack, Gotify, Home Assistant, n8n ou qualquer relay que aceite JSON.", - "webhookEnable": "Ativar webhook", - "webhookUrl": "URL do webhook", - "webhookUrlHint": "A URL completa para onde enviar o POST. Um endereço em rede privada precisa de aprovação do operador do servidor.", - "webhookHeaderName": "Nome do cabeçalho (opcional)", - "webhookHeaderValue": "Valor do cabeçalho (opcional)", - "webhookFormat": "Formato do payload", - "webhookFormatGeneric": "JSON genérico", - "webhookFormatGenericHint": "Cole uma URL de webhook do Discord ou Slack como está. Home Assistant e n8n leem os campos title, message, eventType e priority.", - "webhookFormatGotify": "Gotify", - "webhookFormatGotifyHint": "Use a URL terminada em /message e coloque o token do aplicativo no cabeçalho X-Gotify-Key.", - "email": "E-mail", - "emailDescription": "Receba alertas e lembretes por e-mail.", - "emailEnable": "Ativar e-mail", - "emailRecipient": "Endereço do destinatário", - "webPush": "Push do navegador", - "webPushDescription": "Receba notificações diretamente no navegador, mesmo quando o HealthLog não estiver aberto.", - "webPushNotSupported": "Seu navegador não suporta notificações push.", - "webPushDenied": "As notificações push estão bloqueadas. Permita-as nas configurações do navegador.", - "webPushNotConfigured": "O Web Push não está configurado no servidor.", - "webPushSubscribe": "Ativar push", - "webPushUnsubscribe": "Desativar push", - "webPushSubscribed": "Notificações push ativadas!", - "webPushUnsubscribed": "Notificações push desativadas.", - "webPushSubscribeFailed": "Falha na ativação", - "codexConnected": "ChatGPT conectado com sucesso! Os insights estão ativos.", - "codexDisconnected": "Conexão com o ChatGPT removida.", - "codexConnectionFailed": "Falha na conexão com o ChatGPT. Tente novamente.", - "rawData": "Enviar histórico detalhado", - "rawDataOnDescription": "Além dos resumos, o provedor recebe médias das suas medições: por dia nos últimos 90 dias, por semana no ano anterior e por mês até 5 anos, cada uma com sua data e número de medições. Medições individuais, seu nome e seu e-mail não são enviados.", - "rawDataOffDescription": "Apenas resumos são enviados: o valor mais recente, médias, tendências, mínimo e máximo em janelas fixas. Nenhuma série de medições.", - "rawDataWarning": "O histórico detalhado está ativado: cada análise também envia médias diárias dos últimos 90 dias, semanais do ano anterior e mensais até 5 anos.", - "regenerateInsights": "Regenerar relatórios", - "regenerateSuccess": "Relatórios regenerados com sucesso", - "regenerateRateLimit": "Aguarde: você atingiu o limite por hora de análises.", - "lastGeneratedAt": "Última geração", - "ai": { - "chatgptConnectedBadge": "ChatGPT conectado", - "adminAiActiveBadge": "Provedor do administrador ativo", - "connectionExpiredBadge": "Conexão expirada", - "connectedSince": "Conectado desde {when}.", - "deviceCodeHeading": "Conclua a conexão em chatgpt.com", - "deviceCodeStep1": "Abra este link em qualquer dispositivo:", - "deviceCodeStep2": "Digite este código de uso único:", - "deviceCodeStep3": "Aprove a conexão. Esta página atualiza automaticamente.", - "deviceCodeCopy": "copiar", - "deviceCodeWaiting": "Aguardando aprovação…", - "deviceCodeCancel": "Cancelar", - "oauthNotConfigured": "O OAuth do ChatGPT não está configurado nesta instância. Use sua própria chave de API abaixo.", - "modelLabel": "Modelo", - "modelOptionDefault": "— Padrão —", - "modelOptionCustom": "Personalizado…", - "customModelLabel": "Nome do modelo personalizado", - "anthropicKeyLabel": "Chave de API da Anthropic", - "baseUrlLabel": "URL base", - "localKeyLabel": "Chave de API (opcional)", - "localDescription": "Qualquer endpoint compatível com OpenAI funciona aqui: um modelo local (Ollama, LM Studio) ou um gateway como LiteLLM, OpenRouter ou vLLM. A URL base termina com /v1; a chave de API é opcional.", - "savedPreview": "(salvo {preview})", - "savedShort": "(salvo)", - "saveCta": "Salvar", - "saved": "Salvo", - "errorGeneric": "Erro", - "providerChain": { - "types": { - "codex": "ChatGPT (Codex)", - "openai": "OpenAI (sua chave)", - "anthropic": "Anthropic (Claude)", - "local": "Modelo local", - "openai-compatible": "Gateway compatível com OpenAI", - "admin-openai": "OpenAI do administrador" - }, - "title": "Cadeia de fallback", - "description": "Se o provedor ativo falhar, o HealthLog tenta o próximo habilitado nesta ordem.", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "removeFromChain": "Remover da cadeia", - "addProvider": "Adicionar provedor", - "addNoneAvailable": "Todos os provedores já estão na cadeia", - "saveOrder": "Salvar ordem da cadeia", - "saved": "Cadeia salva", - "saveFailed": "Falha ao salvar a cadeia", - "resetDefaults": "Redefinir para o padrão", - "resetConfirmTitle": "Redefinir a cadeia para o padrão?", - "resetConfirmBody": "A cadeia volta para ChatGPT (Codex) → OpenAI → Anthropic → Local → OpenAI do administrador. Suas credenciais salvas não são tocadas." - }, - "activeProviderHeading": "Provedor ativo", - "activeProviderLabel": "Provedor principal", - "providerSelect": { - "codex": "Conta ChatGPT (Codex)", - "openai": "OpenAI (sua chave de API)", - "anthropic": "Anthropic (Claude)", - "local": "Modelo local (compatível com OpenAI)", - "openai-compatible": "Gateway compatível com OpenAI", - "admin-openai": "OpenAI fornecido pelo administrador" - }, - "compat": { - "description": "Um provedor de primeira classe para qualquer endpoint que fale a API OpenAI /v1/chat/completions: LiteLLM, OpenRouter, vLLM ou outro gateway. A URL base termina com /v1, a chave de API é opcional e o modelo é o que seu gateway roteia. Sua chave OpenAI nunca chega a este endpoint; este provedor tem a própria.", - "keyLabel": "Chave de API (opcional)", - "modelHint": "O nome do modelo que seu gateway espera. Em branco, usa o modelo salvo para seus outros provedores; sem nenhum definido, este provedor é ignorado." - }, - "openai": { - "modelSelect": "Modelo", - "modelOptionCustom": "Slug personalizado…", - "modelCustomLabel": "Slug do modelo personalizado", - "modelCustomPlaceholder": "gpt-5", - "baseUrlLabel": "URL base (avançado)", - "baseUrlPlaceholder": "https://api.openai.com/v1", - "baseUrlHelp": "Substitua apenas ao usar um gateway compatível com OpenAI. Deixe em branco para a própria OpenAI.", - "showAdvanced": "Mostrar avançado", - "hideAdvanced": "Ocultar avançado", - "apiKey": "Chave de API", - "apiKeyPlaceholder": "sk-…" - }, - "codex": { - "statusConnected": "Conectado", - "statusDisconnected": "Não conectado", - "statusExpired": "Conexão expirada", - "connectButton": "Conectar com ChatGPT", - "disconnectButton": "Desconectar", - "disconnectTitle": "Desconectar ChatGPT?", - "disconnectBody": "O login armazenado é descartado junto com o texto de insight em cache. Reconectar significa fazer login novamente pelo fluxo de código do dispositivo.", - "disconnectConfirm": "Desconectar", - "modelSlugLabel": "Slug do modelo", - "modelSlugBody": "O Codex usa o modelo para o qual sua assinatura ChatGPT roteia. A variável de ambiente CODEX_MODEL permite que a operação substitua isso na instância.", - "lastInsight": "Último insight: {when}" - }, - "adminOpenai": { - "title": "OpenAI do administrador", - "body": "Chave OpenAI fornecida pelo operador, usada como último fallback quando nenhum provedor pessoal está configurado. Nada para configurar aqui.", - "notConfigured": "O operador não configurou uma chave OpenAI compartilhada nesta instância." - }, - "testProvider": "Testar provedor ativo", - "testSuccess": "OK: {provider} ({model})", - "testFailedShort": "Teste falhou: {message}", - "testUnexpectedResponse": "Falha na conexão com o provedor de IA: resposta inesperada do servidor.", - "testReasonCredentials": "O provedor rejeitou as credenciais. Autentique-se novamente nas configurações de IA.", - "testReasonRateLimited": "O provedor limitou a taxa da solicitação. Tente novamente em breve.", - "testReasonServerError": "O provedor de IA retornou um erro de servidor.", - "testReasonBadRequest": "O provedor rejeitou a solicitação (HTTP {status}). O endpoint respondeu, então é um problema de formato da solicitação ou de nome do modelo, não de conectividade.", - "testReasonUnreachable": "Não foi possível alcançar o provedor de IA.", - "panelTitle": "Veja como ficam os insights", - "panelIntro": "O Coach, o resumo diário e as leituras por métrica transformam seus números em linguagem simples. Aqui está o formato, antes de você conectar qualquer coisa.", - "showSample": "Ver um resumo de exemplo", - "sampleTitle": "Resumo diário", - "sampleTag": "Exemplo", - "sampleAriaLabel": "Resumo diário de exemplo", - "sampleBody": "Peso caiu 1,2 kg em duas semanas. Pulso em repouso estável em 58 bpm. Pressão arterial dentro da faixa em 6 de 7 dias; a única leitura alta veio depois de um jantar tardio e salgado.", - "sampleCaption": "Apenas exemplo, não são seus próprios dados. É assim que um resumo fica quando os insights estão ativados.", - "ladderTitle": "Três formas de ativar", - "ladderLocalTitle": "Modelo local: as solicitações de IA ficam na sua rede", - "ladderLocalBody": "Aponte o HealthLog para Ollama ou LM Studio na sua própria máquina. Gratuito e totalmente privado, o padrão tranquilo.", - "ladderByokTitle": "Traga sua própria chave", - "ladderByokBody": "Use sua própria chave OpenAI ou Anthropic. Roda na sua conta e cobrança, e o nível de API mantém seus dados fora do treinamento por padrão.", - "ladderOauthTitle": "Entrar com uma assinatura", - "ladderOauthBody": "Conecte uma conta ChatGPT. Sem custo por token, mas os termos do nível consumidor podem usar conteúdo para treinamento, então é uma escolha deliberada, nunca o padrão para seus dados de saúde.", - "keylessLine": "O HealthLog é totalmente útil sem IA. Seus blocos, gráficos, tendências e exportações funcionam. A IA apenas adiciona a leitura em linguagem simples por cima.", - "setupCta": "Configurar (cerca de um minuto)", - "sharedKeyNote": "Esta instância já fornece um provedor de IA compartilhado, então os insights funcionam para você agora, sem configuração.", - "offer": { - "title": "Esta instância pode escrever seu resumo em linguagem simples.", - "body": "O operador fornece um provedor que funcionou pela última vez nas últimas 24 horas. Um toque ativa a leitura em linguagem simples; seus dados vão para esse único provedor e para mais ninguém.", - "cta": "Ativar linguagem simples", - "granted": "Ativado. O primeiro resumo aparece no seu painel.", - "error": "Não funcionou ao ativar. Tente novamente em um momento." - }, - "unavailable": { - "title": "O provedor desta instância não está respondendo agora.", - "body": "O HealthLog é totalmente útil sem a leitura em linguagem simples. Você pode adicionar um provedor próprio mais tarde nas Configurações." - } - }, - "withings": "Withings", - "withingsDescription": "Conecte sua balança e monitor de pressão arterial Withings para sincronizar peso, composição corporal e pressão arterial automaticamente.", - "withingsCredentials": "Credenciais de API", - "withingsClientId": "Client ID", - "withingsClientSecret": "Client Secret", - "withingsCredentialsSaved": "Credenciais salvas", - "withingsCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "withingsCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "withingsSaveCredentials": "Salvar", - "configured": "Configurado", - "withingsSync": "Sincronizar agora", - "withingsFullSync": "Sincronizar todos os dados", - "withingsFullSyncTitle": "Sincronização completa?", - "withingsFullSyncDescription": "Todos os dados Withings disponíveis serão totalmente sincronizados. Isso pode levar algum tempo, dependendo do seu histórico.", - "withingsSyncResult": "{count} medições sincronizadas", - "syncOutcome": { - "empty": "Nada novo para importar. Tudo está atualizado.", - "failed": "Nada foi salvo. A próxima execução tenta novamente.", - "partial": "{count} medições sincronizadas. Alguns dados não puderam ser salvos; a próxima execução tenta novamente." - }, - "withingsFullSyncResult": "{count} medições totalmente sincronizadas", - "withingsSyncFailed": "Falha na sincronização", - "withingsOauthConnected": "Withings conectado. A primeira sincronização começa em segundo plano.", - "withingsOauthFailed": "Falha na conexão com o Withings", - "withingsOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "replay": "Este link de confirmação já foi usado. Inicie a conexão novamente.", - "state": "A resposta do Withings não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou. Inicie a conexão novamente e conclua a aprovação em poucos minutos.", - "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 Withings não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Withings.", - "nocreds": "Nenhuma credencial de API do Withings está armazenada. Salve primeiro o client ID e o client secret, depois conecte novamente.", - "token": "A troca de token com o Withings falhou. Verifique o client ID e o client secret e tente novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "withingsSynchronize": "Sincronizar", - "withingsDisconnect": "Desconectar", - "withingsDisconnectTitle": "Desconectar Withings?", - "withingsDisconnectDescription": "A conexão com o Withings será desfeita. Os dados sincronizados anteriormente serão preservados.", - "withingsConnect": "Conectar com Withings", - "withingsNoCredentials": "Digite suas credenciais de API acima para conectar o Withings.", - "whoop": "WHOOP", - "whoopDescription": "Conecte sua pulseira WHOOP para sincronizar recuperação, sono, strain e treinos direto no HealthLog.", - "whoopCredentials": "Credenciais de API", - "whoopClientId": "Client ID", - "whoopClientSecret": "Client Secret", - "whoopCredentialsSaved": "Credenciais salvas", - "whoopCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "whoopCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "whoopSaveCredentials": "Salvar", - "whoopSync": "Sincronizar agora", - "whoopFullSync": "Sincronizar todos os dados", - "whoopFullSyncTitle": "Sincronização completa?", - "whoopFullSyncDescription": "Todo o histórico WHOOP disponível será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "whoopSyncResult": "{count} medições sincronizadas", - "whoopSyncFailed": "Falha na sincronização", - "whoopSynchronize": "Sincronizar", - "whoopDisconnect": "Desconectar", - "whoopDisconnectTitle": "Desconectar WHOOP?", - "whoopDisconnectDescription": "A conexão com o WHOOP será desfeita. Os dados sincronizados anteriormente serão preservados.", - "whoopConnect": "Conectar com WHOOP", - "whoopNoCredentials": "Digite suas credenciais de API acima para conectar o WHOOP.", - "whoopOauthConnected": "WHOOP conectado. A primeira sincronização começa em segundo plano.", - "whoopOauthFailed": "Falha na conexão com o WHOOP", - "whoopOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do WHOOP não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 WHOOP não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do WHOOP.", - "nocreds": "O WHOOP não está configurado. Adicione suas credenciais OAuth do WHOOP acima e tente novamente.", - "token": "A troca de token com o WHOOP falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "fitbit": "Fitbit", - "fitbitTag": "Fitbit e Pixel", - "fitbitDescription": "Conecte o Fitbit para sincronizar os sinais vitais do seu Fitbit e Pixel Watch: peso, frequência cardíaca e mais.", - "fitbitExperimentalBadge": "Experimental", - "fitbitCredentials": "Credenciais de API", - "fitbitClientId": "Client ID", - "fitbitClientSecret": "Client Secret", - "fitbitCredentialsSaved": "Credenciais salvas", - "fitbitCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "fitbitCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "fitbitSaveCredentials": "Salvar", - "fitbitSync": "Sincronizar agora", - "fitbitFullSync": "Sincronizar todos os dados", - "fitbitFullSyncTitle": "Sincronização completa?", - "fitbitFullSyncDescription": "Todo o histórico Fitbit disponível será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "fitbitSyncResult": "{count} medições sincronizadas", - "fitbitSyncFailed": "Falha na sincronização", - "fitbitSynchronize": "Sincronizar", - "fitbitDisconnect": "Desconectar", - "fitbitDisconnectTitle": "Desconectar Fitbit?", - "fitbitDisconnectDescription": "A conexão com o Fitbit será desfeita. Os dados sincronizados anteriormente serão preservados.", - "fitbitConnect": "Conectar com Fitbit", - "fitbitNoCredentials": "Digite suas credenciais de API acima para conectar o Fitbit.", - "fitbitOauthConnected": "Fitbit conectado. A primeira sincronização começa em segundo plano.", - "fitbitOauthFailed": "Falha na conexão com o Fitbit", - "googleHealth": "Google Health", - "googleHealthTag": "Fitbit e Pixel", - "googleHealthBetaBadge": "Beta", - "googleHealthDescription": "Conecte Fitbit, Pixel Watch e Fitbit Air pela sua conta Google: peso, frequência cardíaca, sono e atividade. Isso substitui a conexão clássica do Fitbit, que o Google descontinua em setembro de 2026.", - "googleHealthCredentials": "Credenciais de API", - "googleHealthClientId": "Client ID", - "googleHealthClientSecret": "Client Secret", - "googleHealthCredentialsSaved": "Credenciais salvas", - "googleHealthCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "googleHealthCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "googleHealthSaveCredentials": "Salvar", - "googleHealthSync": "Sincronizar agora", - "googleHealthSyncCheckStatus": "Atualizar status", - "googleHealthFullSync": "Sincronizar todos os dados", - "googleHealthFullSyncTitle": "Sincronização completa?", - "googleHealthFullSyncDescription": "Todo o histórico do Google Health disponível será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "googleHealthSyncResult": "{count} medições sincronizadas", - "googleHealthSyncFailed": "Falha na sincronização", - "googleHealthSyncInProgress": "Sincronização em andamento: {count} medições salvas, {completed} de {total} áreas processadas.", - "googleHealthResourceFailuresTitle": "Estas áreas ainda precisam de atenção:", - "googleHealthResource": { - "workout": "Treinos", - "sleep": "Sono", - "boundedMetrics": "Medições de saúde", - "activity": "Atividade", - "heartRate": "Frequência cardíaca", - "other": "Outros dados" - }, - "googleHealthReason": { - "collectionFailed": "O Google não pôde fornecer estes dados. Tente sincronizar novamente mais tarde.", - "tokenFailed": "A conexão expirou. Reconecte o Google Health.", - "upsertFailed": "Os dados não puderam ser salvos. Tente sincronizar novamente.", - "rollupFailed": "Os dados foram capturados, mas o resumo ainda não foi atualizado. Tente novamente mais tarde.", - "pageLimit": "Apenas parte do histórico disponível foi processada. Outra sincronização continuará.", - "generic": "Esta área não foi totalmente sincronizada. Tente novamente." - }, - "googleHealthSynchronize": "Sincronizar", - "googleHealthDisconnect": "Desconectar", - "googleHealthDisconnectTitle": "Desconectar Google Health?", - "googleHealthDisconnectDescription": "A conexão com o Google Health será desfeita. Os dados sincronizados anteriormente serão preservados.", - "googleHealthConnect": "Conectar com Google", - "googleHealthNoCredentials": "Digite suas credenciais de API acima para conectar o Google Health.", - "googleHealthOauthConnected": "Google Health conectado. A primeira sincronização começa em segundo plano.", - "googleHealthOauthFailed": "Falha na conexão com o Google Health", - "googleHealthOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Google não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 Google não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Google.", - "nocreds": "O Google Health não está configurado. Adicione suas credenciais OAuth do Google acima e tente novamente.", - "token": "A troca de token com o Google falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "fitbitOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Fitbit não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 Fitbit não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Fitbit.", - "nocreds": "O Fitbit não está configurado. Adicione suas credenciais OAuth do Fitbit acima e tente novamente.", - "token": "A troca de token com o Fitbit falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "integrations": { - "withings": { - "plan": { - "link": "Sobre os planos da API Withings", - "items": { - "spo2": "SpO2", - "vascularAge": "idade vascular", - "pulseWaveVelocity": "velocidade da onda de pulso", - "vo2Max": "VO2 máx", - "visceralFat": "gordura visceral", - "skinTemperature": "temperatura da pele", - "ecg": "ECG e FA", - "sleepScore": "pontuação de sono", - "sleepHrv": "VFC noturna", - "sleepHeartRate": "frequência cardíaca noturna", - "sleepRespiratoryRate": "frequência respiratória noturna", - "sleepSpo2": "SpO2 noturna", - "bodyTemperature": "temperatura corporal", - "bodyFat": "gordura corporal", - "fatMass": "massa de gordura", - "fatFreeMass": "massa livre de gordura", - "muscleMass": "massa muscular", - "bodyWater": "água corporal", - "boneMass": "massa óssea", - "heartRate": "frequência cardíaca", - "bloodPressure": "pressão arterial", - "weight": "peso" - } - } - }, - "oura": { - "scope": { - "items": { - "vo2max": "VO2 máx", - "cardio_age": "idade cardiovascular", - "resilience": "resiliência" - } - } - } - }, - "integrationPill": { - "connected": "Conectado", - "errorReconnect": "Erro: reconectar", - "warningServerError": "Sincronização falhando", - "failureCount": "{count}/{threshold}", - "parkedReconnect": "Pausado: reconectar", - "notConnected": "Não conectado", - "justNow": "agora mesmo", - "minutesAgo": "{count} min atrás", - "hoursAgo": "{count} h atrás", - "daysAgo": "{count} d atrás", - "resumeSuccess": "Integração retomada", - "resumeError": "Falha ao reconectar", - "stale": "Conectado, sem dados recentes", - "stalled": "Sincronização parada", - "pendingSetup": "Aguardando primeiros dados" - }, - "integrationFreshness": { - "title": "Dados recebidos", - "summary": "{count} tipos de dados, mais recente {relative}", - "quiet": "{count} em silêncio", - "workouts": "Treinos", - "medicationDoses": "Doses de medicação" - }, - "integrationFallback": { - "description": "Configurado nesta conta sem um cartão de configurações próprio." - }, - "withingsViewData": "Ver suas medições", - "whoopViewData": "Ver sua recuperação", - "fitbitViewData": "Ver seu sono", - "googleHealthViewData": "Ver seus passos", - "apiTokens": "Tokens de API", - "apiTokensDescription": "Revise e revogue tokens para medições, treinos, documentos e ingestão de medicação.", - "measurementsToken": { - "title": "Tokens de medição", - "description": "Gere um token para que uma balança, uma ponte de relógio ou sua automação residencial possa adicionar medições.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novas medições ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. As medições são marcadas como vindas de um dispositivo externo, para você diferenciá-las depois, e você ainda pode corrigi-las você mesmo.", - "createFailed": "Não foi possível criar o token. Tente novamente.", - "namePlaceholder": "Nome, ex.: Home Assistant" - }, - "workoutsToken": { - "title": "Tokens de treino", - "description": "Gere um token para que uma ponte de relógio ou um script de sincronização possa adicionar seus treinos.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novos treinos ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. Os treinos que adiciona são marcados como vindos de um dispositivo externo e, quando seu celular registrou a mesma sessão, você vê a cópia do celular.", - "createFailed": "Não foi possível criar o token. Tente novamente.", - "namePlaceholder": "Nome, ex.: Garmin" - }, - "documentsToken": { - "title": "Tokens de documento", - "description": "Gere um token para que Paperless-ngx, Papra ou o script de importação possa adicionar documentos ao seu cofre.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novos documentos ao seu próprio cofre. Não pode listar, abrir, baixar, alterar ou excluir nada, nem criar outro token. O que ele recebe de volta é se um arquivo foi armazenado, não como você o arquivou.", - "createFailed": "Não foi possível criar o token. Tente novamente.", - "namePlaceholder": "Nome, ex.: Paperless-ngx" - }, - "tokenMintMovedDescription": "Os tokens são emitidos onde se aplicam: acima para medições, treinos e documentos, ou no endpoint de API próprio de uma medicação para aquela medicação.", - "tokenCreated": "Token criado. Copie-o agora! Não será exibido novamente.", - "tokenCopy": "Copiar token", - "tokenCopied": "Token copiado para a área de transferência", - "tokenCopyFailed": "Não foi possível copiar o token", - "tokenRevokeFailed": "Não foi possível revogar o token. Tente novamente.", - "tokenRevoke": "Revogar token?", - "tokenRevokeAction": "Revogar token", - "tokenRevokeDescription": "O token será desativado permanentemente. Aplicativos que o usam perderão acesso.", - "tokenRevoked": "Revogado", - "tokenExpired": "Expirado", - "tokenActive": "Ativo", - "activeTokensTitle": "Tokens ativos", - "revokedTokensTitle": "Tokens revogados ({count})", - "tokenTableName": "Nome", - "tokenTablePermissions": "Permissões", - "tokenTableStatus": "Status", - "tokenTableCreated": "Criado", - "tokenTableLastUsed": "Último uso", - "tokenTableActions": "Ações", - "noActiveTokens": "Nenhum token ativo disponível.", - "tokenNeverUsed": "Nunca", - "apiEndpointsTitle": "Endpoints de API", - "apiEndpointsDescription": "Visão geral dos endpoints externos atualmente disponíveis para ingestão baseada em token.", - "apiEndpointMethod": "Método", - "apiEndpointPath": "Caminho", - "apiEndpointAuth": "Autenticação", - "apiEndpointExample": "Exemplo de corpo", - "dangerZone": "Excluir todos os dados", - "dangerZoneDescription": "Apaga todo o seu registro de saúde e todas as conexões de integração.", - "dangerZoneConfirm": "Excluir todos os dados?", - "dangerZoneConfirmDescription": "Isso exclui permanentemente tudo no seu registro: medições, medicações, registros de humor, resultados de exames, entradas de ciclo, documentos, conversas de IA e todas as conexões de integração, junto com tudo derivado deles e tudo que você excluiu antes. Links de compartilhamento que você deu a um médico param de funcionar imediatamente. Sua conta permanece, junto com as credenciais de login e configurações de exibição como idioma, fuso horário e unidades. Isso não pode ser desfeito.", - "dangerZoneSuccess": "Seu registro de saúde foi excluído. Sua conta e login permanecem inalterados.", - "dangerZoneDeleteFailed": "Falha na exclusão", - "finalDelete": "Excluir permanentemente", - "deleteAccountCardTitle": "Excluir conta inteiramente", - "deleteAccountCardDescription": "Exclui sua conta junto com chaves de acesso, log de auditoria e sessões.", - "deleteAccountCta": "Excluir conta", - "deleteAccountConfirmTitle": "Excluir conta permanentemente?", - "deleteAccountConfirmDescription": "Sua conta, todos os dados de saúde, chaves de acesso, sessões e registros de auditoria serão excluídos permanentemente. Você será desconectado imediatamente depois.", - "deleteAccountSuccess": "Conta excluída. Desconectando você.", - "deleteAccountFailed": "Não foi possível excluir a conta", - "deleteAccountFinal": "Excluir permanentemente", - "saved": "Salvo", - "savingError": "Erro ao salvar", - "about": { - "version": "Versão do app", - "gitSha": "Build", - "builtAtLabel": "Compilado", - "license": "Licença", - "repository": "Código-fonte", - "changelog": "Changelog", - "docs": "Documentação", - "credits": "Créditos e atribuições de dados", - "linksHeading": "Fontes e documentação", - "newerAvailable": "Versão mais nova: {tag}", - "support": { - "title": "Suporte", - "description": "Um resumo para um relatório de bug, sem seu nome, e-mail ou valores de saúde.", - "copy": "Copiar informações de suporte", - "copied": "Copiado", - "copyFailed": "Não foi possível montar as informações de suporte." - } - }, - "testConnection": { - "test": "Testar conexão", - "saveFirst": "Salve suas alterações primeiro. O teste usa as configurações salvas.", - "testing": "Testando…", - "ok": "Conectado (latência {latency} ms)", - "errors": { - "credentials_rejected": "Credenciais rejeitadas. Verifique seu token", - "rate_limited": "Taxa limitada pelo upstream", - "timeout": "A solicitação expirou", - "upstream_error": "O upstream retornou um erro", - "upstream_rejected": "A outra ponta recusou a mensagem", - "connection_failed": "Falha na conexão", - "not_configured": "Não configurado", - "url_not_public": "A URL não é um endpoint público", - "private_origin_not_approved": "Destino em rede privada. O operador precisa listar esta origem em NOTIFICATION_PRIVATE_ORIGINS", - "private_origin_not_grantable": "Este endereço é link-local, um endereço de metadados ou não especificado; nenhuma concessão do operador pode abri-lo. Use o endereço em que o relay escuta", - "url_invalid": "URL inválida", - "redirected": "O endpoint redireciona. Verifique a URL", - "endpoint_not_found": "Endpoint não encontrado na URL", - "credentials_unreadable": "As credenciais não podem ser descriptografadas", - "upstream_invalid_json": "O upstream enviou JSON inválido", - "vapid_not_configured": "Web Push não configurado (chaves VAPID ausentes)", - "rate_limited_self": "Muitas solicitações de teste", - "generic": "Teste falhou" - } - }, - "notificationStatus": { - "title": "Status de entrega", - "description": "Estado de cada canal; \"Desativado automaticamente\" significa que as tentativas pararam após erros permanentes.", - "emptyDescription": "Configure um canal em Configurações › Integrações › Canais de entrega.", - "stateActive": "Ativo", - "stateAutoDisabled": "Desativado automaticamente", - "stateSendingPaused": "Envio pausado", - "stateManuallyDisabled": "Desativado", - "lastSuccess": "Último envio bem-sucedido", - "lastFailure": "Última falha", - "consecutiveFailures": "Falhas consecutivas", - "disabledReason": "Motivo", - "nextRetry": "Próxima tentativa", - "reEnable": "Reativar", - "sendTest": "Enviar teste", - "emptyTitle": "Nenhum canal configurado ainda" - }, - "identity": { - "description": "Detalhes opcionais para a exportação do registro de saúde (capa do PDF + exportação FHIR). Todos os campos são opcionais.", - "fullName": "Nome completo", - "fullNamePlaceholder": "ex.: Maria Silva", - "insurer": "Operadora de saúde", - "insurerPlaceholder": "ex.: Unimed", - "insuranceNumber": "Número do convênio", - "insuranceNumberHint": "10 caracteres: uma letra + nove dígitos (ex.: A123456780)." - }, - "healthRecord": { - "title": "Exportar registro de saúde", - "description": "Um registro completo para o seu médico: como PDF, como FHIR, ou ambos.", - "format": "Formato", - "format_pdf": "PDF", - "format_fhir": "Estruturado (FHIR)", - "format_package": "Pacote: PDF + FHIR", - "range": "Período", - "range90": "Últimos 90 dias", - "range180": "Últimos 6 meses", - "range365": "Últimos 12 meses", - "practiceName": "Clínica (opcional)", - "practiceNamePlaceholder": "ex.: Dr. Silva", - "includedData": "Dados incluídos", - "includeCharts": "Incluir gráficos de tendência (somente PDF)", - "fhirNote": "A saída estruturada segue o padrão FHIR R4.", - "generate": "Gerar", - "documentsLink": "Documentos deste período", - "range30": "Últimos 30 dias", - "rangeCustom": "Período personalizado", - "rangeCustomStart": "De", - "rangeCustomEnd": "Até", - "errorGeneric": "Não foi possível gerar a exportação. Tente novamente.", - "errorRateLimit": "Você atingiu o limite de exportação desta hora.", - "errorModuleDisabled": "A exportação do registro de saúde está desativada para esta conta.", - "visitOffer": "Uma consulta está chegando em {when}: {what}.", - "visitOfferApply": "Relatar até então" - }, - "globalExcludedInjectionSitesLabel": "Locais de injeção globalmente excluídos", - "globalExcludedInjectionSitesHint": "Nunca oferecidos e rejeitados ao registrar uma dose, mesmo que uma medicação os prefira.", - "sharing": { - "createTitle": "Novo link de compartilhamento", - "createDescription": "O link é somente leitura e tem prazo.", - "label": "Rótulo", - "labelPlaceholder": "ex.: Dr. Silva, check-up anual", - "range": "Dias de histórico", - "rangeHint": "Até onde a janela compartilhada alcança.", - "expiry": "Expira em (dias)", - "expiryHint": "No máximo {max} dias.", - "expiryInvalid": "A expiração deve estar entre 1 e {max} dias.", - "create": "Criar link", - "tokenCreated": "Link de compartilhamento criado", - "copied": "Copiado para a área de transferência", - "activeTitle": "Links ativos", - "noActive": "Nenhum link de compartilhamento ativo.", - "created": "Criado", - "expires": "Expira", - "accessCount": "Visualizações", - "revoke": "Revogar", - "revokeDescription": "Revogue este link imediatamente. Qualquer pessoa que o tenha perde acesso na hora. Isso não pode ser desfeito.", - "statusActive": "Ativo", - "statusRevoked": "Revogado", - "statusExpired": "Expirado", - "inactiveTitle": "Revogados e expirados ({count})", - "shownOnce": "Exibido apenas uma vez. Capture o código QR e a frase-senha agora; nenhum dos dois pode ser recuperado depois.", - "qrAlt": "Código QR contendo o link de compartilhamento e a frase-senha", - "linkLabel": "Link", - "passphraseLabel": "Frase-senha", - "passphraseHint": "O destinatário precisa do link e desta frase-senha. O código QR carrega ambos.", - "copyLink": "Copiar link", - "copyPassphrase": "Copiar frase-senha", - "protected": "Frase-senha", - "attachTitle": "Anexar documentos", - "attachButton": "Escolher documentos", - "attachCount": "{count} de {max} selecionados", - "attachFrozen": "O conjunto de documentos fica fixo depois que você cria o link. Documentos não podem ser adicionados ou removidos depois.", - "attachRemove": "Remover {title}", - "exifNote": "Metadados de câmera (EXIF/GPS) são removidos de imagens JPEG, PNG e WebP ao compartilhar. PDF, TIFF, HEIC e arquivos Office passam inalterados.", - "documentCount": "Documentos anexados: {count}", - "qrScanTitle": "Escaneie para abrir em outro dispositivo", - "qrScanHint": "Aponte a câmera de um celular para o código para abrir o registro compartilhado. A frase-senha já está incluída.", - "pickerTitle": "Anexar documentos", - "pickerDescription": "Busque no seu cofre e selecione documentos para compartilhar. Até {max}.", - "pickerSearch": "Buscar documentos", - "pickerEmpty": "Nenhum documento encontrado.", - "pickerDone": "Concluído", - "pickerSelectedCount": "{count} de {max} selecionados", - "pickerMaxReached": "Você atingiu o máximo de {max} documentos.", - "scopeTitle": "O que este link contém", - "scopeInsuranceExcluded": "Detalhes do convênio nunca são compartilhados por um link.", - "statusNeedsReselect": "Escolha o conteúdo novamente", - "reselectReason": "Este link serviu a um escopo que nunca foi escolhido, então foi fechado. Crie um novo e escolha o que ele deve conter.", - "reselectAction": "Criar uma substituição", - "createDetail": "O token é exibido uma vez na criação. Guarde-o então; não pode ser recuperado.", - "activeDescription": "Links que você compartilhou, quando expiram e com que frequência foram abertos." - }, - "genderOther": "Outro", - "nightscout": "Nightscout", - "nightscoutTag": "CGM", - "nightscoutDescription": "Conecte seu próprio site Nightscout para sincronizar leituras contínuas de glicose no painel de glicose.", - "nightscoutViewData": "Ver sua glicose", - "nightscoutUrl": "URL do Nightscout", - "nightscoutUrlSavedPlaceholder": "Salvo. Digite uma nova URL para substituir", - "nightscoutToken": "Token de API", - "nightscoutTokenOptional": "Opcional para um site público", - "nightscoutTokenSavedPlaceholder": "Salvo. Digite um novo token para substituir", - "nightscoutTokenHelp": "Cole um token de acesso das ferramentas de administração do seu Nightscout. Deixe vazio se seu site é publicamente legível.", - "nightscoutPrivateOperatorTitle": "Acesso privado ao Nightscout requer aprovação do operador do servidor.", - "nightscoutPrivateOperatorDescription": "Peça ao operador do servidor para aprovar esta origem exata do Nightscout.", - "nightscoutConnect": "Conectar", - "nightscoutUpdate": "Salvar alterações", - "nightscoutConnected": "Nightscout conectado.", - "nightscoutConnectFailed": "Não foi possível conectar ao Nightscout.", - "nightscoutSync": "Sincronizar agora", - "nightscoutSyncResult": "{count} medições sincronizadas", - "nightscoutSyncFailed": "Falha na sincronização", - "nightscoutDisconnect": "Desconectar", - "nightscoutDisconnectTitle": "Desconectar Nightscout?", - "nightscoutDisconnectDescription": "As sincronizações futuras param. As leituras de glicose já importadas permanecem no seu histórico.", - "polar": "Polar", - "polarDescription": "Conecte sua conta Polar para sincronizar recuperação Nightly Recharge, estágios de sono, atividade diária e sessões de treino.", - "polarViewData": "Ver seu sono e recuperação", - "polarCredentials": "Credenciais de API", - "polarClientId": "Client ID", - "polarClientSecret": "Client Secret", - "polarCredentialsSaved": "Credenciais salvas", - "polarCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "polarSaveCredentials": "Salvar", - "polarUnavailable": "O Polar não está configurado neste servidor. Adicione suas próprias credenciais OAuth do Polar acima, ou peça ao administrador para configurar o app compartilhado.", - "polarConnect": "Conectar Polar", - "polarSync": "Sincronizar agora", - "polarSyncResult": "{count} medições sincronizadas", - "polarSyncFailed": "Falha na sincronização", - "polarDisconnect": "Desconectar", - "polarDisconnectTitle": "Desconectar Polar?", - "polarDisconnectDescription": "As sincronizações futuras param. As medições já importadas permanecem no seu histórico.", - "polarOauthConnected": "Polar conectado. A primeira sincronização começa em segundo plano.", - "polarOauthFailed": "Falha na conexão com o Polar", - "polarOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Polar não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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 Polar não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Polar.", - "nocreds": "O Polar não está configurado neste servidor. Peça ao administrador para adicionar as credenciais OAuth do Polar.", - "token": "A troca de token com o Polar falhou. Inicie a conexão novamente.", - "rate_limited": "Muitas tentativas de conexão. Aguarde um momento e tente novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "oura": "Oura", - "ouraDescription": "Conecte sua conta Oura para sincronizar prontidão, estágios de sono, variabilidade da frequência cardíaca e atividade diária.", - "ouraViewData": "Ver seu sono e recuperação", - "ouraCredentials": "Credenciais de API", - "ouraClientId": "Client ID", - "ouraClientSecret": "Client Secret", - "ouraCredentialsSaved": "Credenciais salvas", - "ouraCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "ouraSaveCredentials": "Salvar", - "ouraUnavailable": "O Oura não está configurado neste servidor. Adicione suas próprias credenciais OAuth do Oura acima, ou peça ao administrador para configurar o app compartilhado.", - "ouraConnect": "Conectar Oura", - "ouraSync": "Sincronizar agora", - "ouraSyncResult": "{count} medições sincronizadas", - "ouraSyncFailed": "Falha na sincronização", - "ouraDisconnect": "Desconectar", - "ouraDisconnectTitle": "Desconectar Oura?", - "ouraDisconnectDescription": "As sincronizações futuras param. As medições já importadas permanecem no seu histórico.", - "ouraOauthConnected": "Oura conectado. A primeira sincronização começa em segundo plano.", - "ouraOauthFailed": "Falha na conexão com o Oura", - "ouraOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Oura não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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 Oura não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Oura.", - "nocreds": "O Oura não está configurado neste servidor. Peça ao administrador para adicionar as credenciais OAuth do Oura.", - "token": "A troca de token com o Oura falhou. Inicie a conexão novamente.", - "rate_limited": "Muitas tentativas de conexão. Aguarde um momento e tente novamente.", - "issuer": "A resposta de login não veio do próprio servidor de autorização do Oura, então a conexão foi interrompida por sua segurança. Inicie a conexão novamente. Se isso continuar acontecendo, avise seu administrador.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "integrationSetupGuide": "Guia de configuração", - "coach": { - "reminderSuggestion": { - "title": "Definir um lembrete?", - "accept": "Definir lembrete", - "dismiss": "Agora não", - "stop": "Eu meço o suficiente", - "accepted": "Lembrete definido", - "dismissed": "Ok, não sugerirei isso novamente", - "stopped": "Entendi, pararei de sugerir lembretes", - "failed": "Não foi possível configurar isso. Tente novamente", - "cadence": { - "weightDaily": "Pese-se diariamente, por volta do mesmo horário", - "bp722": "Meça sua pressão arterial duas vezes ao dia por uma semana", - "glucoseStructured": "Teste sua glicose em um cronograma diário estruturado" - } - }, - "suggestedAction": { - "apply": "Adicionar", - "dismiss": "Agora não", - "applied": "Adicionado", - "dismissed": "Dispensado", - "failed": "Não foi possível adicionar isso. Tente novamente", - "checkup": { - "title": "Adicionar um lembrete de check-in?" - }, - "note": { - "title": "Salvar um lembrete?" - }, - "interval": { - "yearly": "Todo ano", - "halfYearly": "A cada seis meses", - "quarterly": "A cada três meses", - "monthly": "Todo mês" - } - }, - "settings": { - "reminderSuggestionsLabel": "Sugestões de cadência", - "reminderSuggestionsDescription": "Deixe o Coach oferecer ocasionalmente um lembrete baseado em evidências para medir uma métrica com mais regularidade." - }, - "plans": { - "title": "Planos", - "pageDescription": "Planos do tipo \\\"se… então…\\\" acordados nas suas conversas com o Coach. Confirme uma proposta para torná-la parte da memória do Coach.", - "readOnlyNote": "O Coach não está disponível agora, mas você ainda pode ler e excluir seus planos.", - "proposalTitle": "Proposta de plano", - "ifThen": "Se {cue}, então {action}.", - "targetPrefix": "Alvo: {target}", - "reviewPrefix": "Check-in: {when}", - "accept": "Aceitar plano", - "decline": "Recusar", - "accepted": "Plano aceito. O Coach o terá em mente.", - "declined": "Proposta recusada.", - "failed": "Isso não funcionou. Tente novamente.", - "markMet": "Meta atingida", - "abandon": "Encerrar plano", - "remove": "Remover", - "removeTitle": "Remover este plano?", - "removeBody": "O plano e como foi desaparecem do seu histórico. Não há como trazê-los de volta.", - "removeConfirm": "Remover plano", - "empty": "Nenhum plano ainda. Quando você se compromete com uma intenção concreta se-então em uma conversa, o Coach a propõe aqui para confirmação.", - "groupProposed": "Sugestões", - "groupActive": "Ativos", - "groupPast": "Concluídos", - "status": { - "proposed": "Proposto", - "active": "Ativo", - "met": "Atingido", - "abandoned": "Encerrado", - "review_due": "Check-in previsto", - "reviewed": "Revisado" - } - }, - "refusal": { - "outOfScope": "Posso ajudar apenas com as métricas de saúde no seu registro: medições, medicamentos, humor, tendências. Não posso responder perguntas fora desse escopo.", - "promptInjection": "Percebi uma redação que tenta sobrepor minhas instruções. Sou o Coach do HealthLog e só resumo seus próprios dados de saúde. Reformule sua pergunta nesses termos.", - "conversationPoisoned": "Uma mensagem anterior nesta conversa contém uma redação que sobrepõe minhas instruções. Inicie uma nova conversa." - }, - "noRecordedData": "Não tenho leituras registradas sobre o que você perguntou, então não há nada de que eu possa tirar um número. Quando registrar algumas, pergunte novamente e eu trabalharei com seus próprios números.", - "step": { - "read": "Verificando: {domain}", - "readWindow": "Verificando: {domain}, {window}", - "snapshot": "Lendo o resumo do seu registro", - "showResult": "Abrindo uma tabela anterior", - "reuse": "Usando a tabela de antes", - "headerActive": "{label}…", - "listLabel": "O que o Coach examinou", - "toggleShow": "Mostrar o que o Coach examinou", - "toggleHide": "Ocultar o que o Coach examinou", - "announceDone": "Concluído: {label}", - "readingsOne": "1 leitura", - "readingsFew": "{count} leituras", - "readingsOther": "{count} leituras", - "rowsOne": "1 linha", - "rowsFew": "{count} linhas", - "rowsOther": "{count} linhas", - "metricsOne": "1 métrica", - "metricsFew": "{count} métricas", - "metricsOther": "{count} métricas", - "reason": { - "noData": "sem leituras", - "outsideWindow": "sem leituras nesta janela", - "moduleDisabled": "desligado", - "retrievalFailed": "não pôde ser lido", - "invalidArguments": "solicitação não compreendida" - }, - "domain": { - "labs": "Resultados laboratoriais", - "illness": "Doença e recuperação", - "cycle": "Ciclo", - "correlations": "Conexões entre métricas", - "snapshot": "Resumo do registro", - "environment": "Clima e ar", - "day": "Um dia" - }, - "window": { - "last7days": "últimos 7 dias", - "last30days": "últimos 30 dias", - "last90days": "últimos 90 dias", - "lastYear": "últimos 12 meses", - "allTime": "todo o tempo" - }, - "period": { - "current": "este período", - "previous": "o período anterior", - "yearAgo": "um ano antes" - }, - "granularity": { - "day": "por dia", - "week": "por semana", - "month": "por mês" - } - }, - "result": { - "title": { - "byDay": "{metric} por dia", - "byWeek": "{metric} por semana", - "byMonth": "{metric} por mês", - "previousPeriod": "{metric}, o período anterior", - "yearAgo": "{metric}, um ano antes", - "workoutsBySport": "Treinos por esporte", - "labsLatest": "Últimos resultados laboratoriais", - "sleepByNight": "Sono por noite", - "complianceByDay": "Adesão a medicamentos por dia", - "distribution": "{metric}: com que frequência cada faixa apareceu" - }, - "column": { - "day": "Dia", - "week": "Semana", - "month": "Mês", - "night": "Noite", - "sport": "Esporte", - "sessions": "Sessões", - "analyte": "Teste", - "value": "Valor", - "unit": "Unidade", - "date": "Data", - "referenceRange": "Faixa de referência", - "systolic": "Sistólica", - "diastolic": "Diastólica", - "mean": "Média", - "total": "Total", - "min": "Mínimo", - "max": "Máximo", - "readings": "Leituras", - "rate": "Adesão", - "duration": "Duração", - "range": "Faixa", - "count": "Vezes" - }, - "other": "Outro", - "noReading": "sem leitura", - "showAll": "Mostrar tudo ({count})", - "showFewer": "Mostrar menos", - "copyMenu": "Copiar tabela", - "copyForSpreadsheet": "Copiar para planilha", - "copyAsText": "Copiar como texto", - "copied": "Copiado", - "copyFailed": "Não foi possível copiar a tabela", - "viewLabel": "Visualização", - "viewChart": "Gráfico", - "viewTable": "Tabela", - "chartSummary": "{title}, exibido como gráfico. A visualização em tabela lista cada valor.", - "dataUsed": "Dados usados ({count})", - "truncated": "Mostrando as {shown} linhas mais recentes de {total}", - "withheld": { - "moduleDisabled": "Esta tabela está oculta porque seu módulo está desligado.", - "unavailable": "Esta tabela não pôde ser carregada." - }, - "loading": "Carregando tabela…", - "loadFailed": "Não foi possível carregar as tabelas.", - "reusedFrom": "De uma resposta anterior ({date})", - "reusedFromUndated": "De uma resposta anterior", - "histogramBin": "{from}–{to} {unit}" - }, - "method": { - "label": "Como isso foi calculado", - "entry": "{domain}, {window}: {detail}", - "entryNoWindow": "{domain}: {detail}", - "reused": "de uma resposta anterior", - "readingsOne": "1 leitura", - "readingsFew": "{count} leituras", - "readingsOther": "{count} leituras", - "aggregation": { - "mean": "média", - "median": "mediana", - "latest": "leitura mais recente", - "sum": "total", - "count": "contagem", - "rate": "taxa" - }, - "averages": { - "day": "médias diárias", - "week": "médias semanais", - "month": "médias mensais" - }, - "totals": { - "day": "totais diários", - "week": "totais semanais", - "month": "totais mensais" - }, - "absent": { - "noData": "sem leituras", - "outsideWindow": "sem leituras nesta janela", - "moduleDisabled": "desligado" - } - }, - "followUp": { - "groupLabel": "Acompanhamentos sugeridos", - "widenWindow": "Ver um período anterior mais amplo", - "previousPeriod": "Comparar com o período anterior", - "yearAgo": "Comparar com um ano antes", - "asChart": "Mostrar como gráfico", - "asTable": "Mostrar como tabela", - "relatedMetric": "Ver também: {metric}", - "continue": "Continuar olhando", - "settingLabel": "Sugerir perguntas de acompanhamento", - "settingHint": "Mostrar até três sugestões de acompanhamento sob a última resposta do Coach.", - "changeAssumption": "Em vez disso: {value}" - }, - "clarify": { - "cardLabel": "O Coach tem uma pergunta", - "choicesLabel": "Respostas possíveis", - "freeTextHint": "Você também pode digitar sua própria resposta.", - "contextHint": "Digite sua resposta abaixo.", - "window": { - "last7days": "Últimos 7 dias", - "last30days": "Últimos 30 dias", - "last90days": "Últimos 90 dias", - "lastYear": "Últimos 12 meses", - "allTime": "Todo o tempo" - }, - "comparison": { - "baseline90d": "Comparar com meus 90 dias usuais" - }, - "anchor": { - "illness": "Desde a doença de {date}" - } - }, - "reuse": { - "caption": "Aqui estão os mesmos números da minha última resposta, inalterados." - } - }, - "integrationRedirectGuide": { - "intro": "Isto conecta pelo seu próprio app de desenvolvedor {provider}, cerca de 5 minutos para configurar:", - "step1": "Crie um app no portal de desenvolvedores do {provider}.", - "step2": "Defina a URL de redirecionamento/callback para:", - "step3": "Cole o client ID e o client secret que ele fornece acima." - }, - "security": { - "sessionsTitle": "Sessões ativas", - "sessionsDescription": "Dispositivos e navegadores atualmente conectados à sua conta.", - "sessionsLoadError": "Não foi possível carregar as sessões ativas.", - "sessionsEmpty": "Nenhuma sessão ativa.", - "currentSession": "Este dispositivo", - "lastActive": "Última atividade {time}", - "unknownLocation": "Local desconhecido", - "revokeSession": "Sair", - "revokeError": "Não foi possível concluir a solicitação. Tente novamente.", - "signOutEverywhere": "Sair em todos os outros lugares", - "signOutEverywhereDone": "Desconectadas {count} outras sessões", - "activityTitle": "Atividade de segurança", - "activityDescription": "Logins recentes, alterações de segurança e exportações de dados na sua conta.", - "activityEmpty": "Nenhuma atividade de segurança ainda.", - "activityLoadError": "Não foi possível carregar a atividade de segurança.", - "action": { - "newDevice": "Login em novo dispositivo", - "loginFailed": "Login falhou", - "login": "Login", - "passwordChange": "Senha alterada", - "mfa": "Alteração de dois fatores", - "sessionRevoke": "Sessão encerrada", - "token": "Alteração de token de API", - "accountDelete": "Conta excluída", - "dataClear": "Dados redefinidos", - "export": "Exportação de dados", - "other": "Evento de segurança" - }, - "active": "Ativo", - "inactive": "Inativo", - "stepUpRequired": "Por sua segurança, faça login novamente para alterar seu segundo fator.", - "useRecoveryCode": "Usar um código de recuperação", - "useAuthenticator": "Usar seu app autenticador", - "totp": { - "title": "App autenticador", - "description": "Use um código baseado em tempo de um app autenticador como seu segundo fator.", - "setUp": "Configurar", - "step1": "Escaneie o código QR com seu app autenticador, ou digite o segredo manualmente.", - "step2": "Digite o código de 6 dígitos que o app mostra para confirmar.", - "qrAlt": "Código QR para configuração do app autenticador", - "qrUnavailable": "Código QR indisponível", - "manualEntry": "Ou digite este segredo manualmente", - "enterCode": "Digite o código de 6 dígitos", - "verify": "Verificar", - "setupFailed": "Não foi possível iniciar a configuração. Tente novamente.", - "invalidCode": "Esse código não é válido. Tente novamente.", - "disable": "Desativar", - "disableTitle": "Desativar autenticação de dois fatores", - "disableConfirm": "Digite um código atual para desligar seu segundo fator. Isso também exclui seus códigos de recuperação.", - "currentCode": "Código atual", - "disableFailed": "Não foi possível desativar o segundo fator." - }, - "recovery": { - "saveNow": "Salve estes códigos de recuperação agora", - "saveNowHint": "Cada código funciona uma vez. São exibidos apenas desta vez. Guarde-os em local seguro. Se você perder seu autenticador, um código de recuperação é a única forma de voltar.", - "download": "Baixar", - "remainingOne": "{count} código de recuperação restante.", - "remainingOther": "{count} códigos de recuperação restantes.", - "regenerate": "Regenerar códigos", - "regenFailed": "Não foi possível regenerar os códigos de recuperação.", - "savedIt": "Eu os salvei", - "regenerateTitle": "Regenerar códigos de recuperação?", - "regenerateConfirm": "Isso substitui seus códigos de recuperação atuais. Seus códigos existentes param de funcionar imediatamente, e um novo conjunto é exibido apenas uma vez." - }, - "keys": { - "title": "Chaves de segurança", - "description": "Registre uma chave de segurança de hardware ou plataforma como segundo fator.", - "empty": "Nenhuma chave de segurança registrada ainda.", - "add": "Adicionar chave de segurança", - "addFailed": "Não foi possível registrar a chave de segurança.", - "rename": "Renomear", - "renameFailed": "Não foi possível renomear a chave de segurança.", - "remove": "Remover chave de segurança", - "removeFailed": "Não foi possível remover a chave de segurança.", - "removeConfirm": "Esta chave de segurança deixará de funcionar como segundo fator.", - "lastUsed": "Último uso {date}", - "neverUsed": "Nunca usado", - "added": "adicionada {date}", - "nameLabel": "Nome da chave de segurança" - }, - "passkeyNudge": { - "title": "Adicione uma chave de acesso para login mais rápido", - "body": "Chaves de acesso permitem entrar com sua digital, rosto ou PIN do dispositivo, sem senha para lembrar." - }, - "trustedDevices": { - "title": "Dispositivos confiáveis", - "description": "Navegadores que você escolheu confiar pulam o segundo fator por 30 dias. A senha ainda é exigida. Revogue qualquer um que não reconheça.", - "loadError": "Não foi possível carregar os dispositivos confiáveis.", - "revokeError": "Não foi possível revogar o dispositivo. Tente novamente.", - "revoke": "Revogar", - "revokeAll": "Esquecer todos os dispositivos", - "revokeAllDone": "Esquecidos {count} dispositivos confiáveis", - "unnamed": "Dispositivo desconhecido", - "current": "Este dispositivo", - "expires": "Confiável até {date}", - "revokeConfirmTitle": "Parar de confiar neste dispositivo?", - "revokeConfirmBody": "Ele pedirá seu segundo fator novamente na próxima vez que você entrar por ele.", - "revokeAllConfirmTitle": "Parar de confiar em todos os dispositivos?", - "revokeAllConfirmBody": "Todo dispositivo pedirá seu segundo fator novamente na próxima vez que você entrar por ele, incluindo este." - }, - "revokeSessionConfirmTitle": "Desconectar este dispositivo?", - "revokeSessionConfirmBody": "{device} precisará entrar novamente. Nada gravado nele é afetado.", - "signOutEverywhereConfirmTitle": "Desconectar todos os outros dispositivos?", - "signOutEverywhereConfirmBody": "Todo outro dispositivo, todo assistente de IA conectado e todo token de API precisarão entrar ou ser configurados novamente. Este dispositivo permanece conectado. Nada que você gravou é afetado.", - "signOutEverywhereShareLinks": "Também encerrar os links de compartilhamento com médicos", - "signOutEverywhereInvites": "Convites ao seu registro que ninguém aceitou ainda são retirados. Pessoas que já aceitaram mantêm o acesso; você pode encerrá-lo depois.", - "signOutEverywhereInvitesDone": "Retirados {count} convites que ninguém havia aceitado.", - "grantsKeptTitle": "Estas pessoas ainda podem ver seu registro", - "grantsKeptBody": "Sair não encerra o acesso que você deu a alguém. Encerre-o aqui se você não o deu, ou não quer mais que a pessoa o tenha." - }, - "privacy": { - "encryption": { - "title": "Criptografado em repouso", - "summary": "Seus dados sensíveis são criptografados em repouso com {algorithm} em {columns} campos em {models} tipos de registro.", - "statement": "Seus dados sensíveis são criptografados em repouso com AES-256-GCM." - }, - "stored": { - "title": "O que é armazenado", - "measurements": "Medições: peso, pressão arterial, pulso e todo outro valor que você ou um dispositivo registram", - "integrations": "Tokens de integração (criptografados)", - "security": "Conta e atividade de segurança (sessões, log de login)", - "profile": "Seu perfil, histórico médico e detalhes do registro de saúde", - "modules": "Registros de cada módulo: {list}" - }, - "retention": { - "title": "Retenção", - "description": "Por quanto tempo registros com prazo são mantidos antes da limpeza automática.", - "coach": "Conversas do Coach: mantidas por {days} dias", - "audit": "Log de atividade de segurança: mantido por {days} dias", - "delivery": "Log de entrega de notificações: mantido por {days} dias", - "unavailable": "Os detalhes de retenção estão indisponíveis agora." - }, - "export": { - "title": "Baixar meus dados", - "description": "Seus registros como CSV ou JSON, ou um registro de saúde completo para o seu médico.", - "openExport": "Exportar e backup", - "openHealthRecord": "Registro de saúde" - }, - "delete": { - "title": "Excluir ou redefinir", - "description": "Remova sua conta inteiramente, ou apague seus registros de saúde mantendo a conta.", - "backupLag": "A exclusão remove seus dados imediatamente. Se este servidor mantém backups criptografados fora do host, as cópias dos seus dados são excluídas desse armazenamento logo depois, ou na próxima execução noturna se o armazenamento estiver inacessível.", - "openAdvanced": "Excluir ou redefinir" - }, - "posture": { - "title": "Postura de privacidade", - "description": "Controle quanto dos seus dados é compartilhado com recursos de IA.", - "openAi": "Modo de privacidade da IA" - } - }, - "mcp": { - "enableTitle": "Endpoint MCP remoto", - "enableDescription": "Permita que um assistente compatível com MCP (Claude.ai, ChatGPT) leia seus dados de saúde por um token com escopo.", - "enableToggleLabel": "Ativar o endpoint MCP", - "endpointLabel": "URL do conector", - "connectDescription": "Cole esta URL na configuração de conector personalizado do seu assistente, depois autorize com o token abaixo ou faça login quando solicitado.", - "tokensTitle": "Tokens do conector", - "tokensDescription": "Gere um token para conectar um assistente, somente leitura a menos que você permita registro abaixo.", - "scopeNote": "Novos tokens só podem ler seus próprios registros. O acesso de escrita (health:write) é concedido por token com o interruptor abaixo. Um token nunca alcança funções administrativas.", - "writeScopeToggleLabel": "Permitir registro (health:write)", - "writeScopeNote": "Adiciona o escopo health:write para que o assistente possa registrar novas medições e registros de humor na sua conta. Toda gravação é confirmada primeiro. O token ainda não pode excluir ou editar registros existentes, alterar medicações, nem alcançar funções REST ou administrativas. Deixe desativado para acesso somente leitura.", - "connectionsTitle": "Assistentes conectados", - "connectionsDescription": "Assistentes que você autorizou pelo fluxo de login.", - "noConnections": "Nenhum assistente conectado.", - "connectionConnected": "Conectado", - "connectionLastUsed": "Último uso", - "connectionNeverUsed": "Nunca usado", - "connectionRevoke": "Desconectar", - "connectionRevokeDescription": "Isso encerra o acesso do assistente imediatamente e impede sua renovação. Ele precisará ser reautorizado para reconectar.", - "connectionRevokeFailed": "Não foi possível desconectar o assistente.", - "connectionsDetail": "Revogar uma conexão encerra seu acesso imediatamente, incluindo a capacidade de renovar.", - "tokensDetail": "O token é exibido uma vez.", - "tokenNamePlaceholder": "Nome, ex.: Claude Desktop" - }, - "strava": "Strava", - "stravaDescription": "Conecte sua conta Strava para sincronizar suas atividades no seu histórico de treinos.", - "stravaViewData": "Ver seus treinos", - "stravaCredentials": "Credenciais de API", - "stravaClientId": "Client ID", - "stravaClientSecret": "Client Secret", - "stravaCredentialsSaved": "Credenciais salvas", - "stravaCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "stravaSaveCredentials": "Salvar", - "stravaUnavailable": "O Strava não está configurado neste servidor. Adicione suas próprias credenciais de API do Strava acima, ou peça ao administrador para configurar o app compartilhado.", - "stravaConnect": "Conectar Strava", - "stravaSync": "Sincronizar agora", - "stravaSyncResult": "{count} medições sincronizadas", - "stravaSyncFailed": "Falha na sincronização", - "stravaDisconnect": "Desconectar", - "stravaDisconnectTitle": "Desconectar Strava?", - "stravaDisconnectDescription": "As sincronizações futuras param. As atividades já importadas permanecem no seu histórico.", - "stravaOauthConnected": "Strava conectado. A primeira sincronização começa em segundo plano.", - "stravaOauthFailed": "Falha na conexão com o Strava", - "stravaOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Strava não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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 neste servidor. Peça ao administrador para adicionar as credenciais de API do Strava.", - "token": "A troca de token com o Strava falhou. Inicie a conexão novamente.", - "rate_limited": "Muitas tentativas de conexão. Aguarde um momento e tente novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "appleHealth": { - "title": "Apple Health", - "description": "A sincronização em tempo real vem do app HealthLog para iOS, não de uma conexão web ou OAuth.", - "status": { - "unavailable": "Status do Apple Health indisponível" - }, - "setupTitle": "Ativar sincronização em tempo real", - "permissionStep": "No app HealthLog para iOS, abra Configurações → Apple Health e permita as categorias de saúde que deseja compartilhar.", - "backgroundStep": "Mantenha a Atualização de App em Segundo Plano ativada. O app sincroniza novos dados automaticamente em primeiro plano e quando o iOS concede tempo em segundo plano.", - "importNote": "Precisa de histórico antigo ou não consegue usar o app iOS? O envio de XML/ZIP do Apple Health é um fallback de uso único e não ativa a sincronização em tempo real.", - "importAction": "Abrir importação de uso único", - "progress": { - "title": "Progresso da sincronização", - "receivedLabel": "Registros recebidos", - "oldestLabel": "Leitura mais antiga alcançada", - "flowing": "Dados chegaram na última hora. O app do iPhone ainda está entregando.", - "waiting": "Aguardando o app do iPhone enviar mais dados. A entrega continua quando o app está aberto ou quando o iOS concede tempo em segundo plano. Um intervalo silencioso durante o primeiro grande preenchimento é normal, não um erro." - }, - "delivery": { - "title": "Entrega", - "lastTriggerLabel": "Última sincronização chegou", - "lastBackgroundLabel": "Última sincronização em segundo plano", - "backgroundNever": "Nunca: toda sincronização até agora chegou com o app aberto", - "noSyncYet": "Nenhuma sincronização chegou ainda, então não há nada a relatar aqui.", - "trigger": { - "foreground": "com o app aberto", - "background": "em segundo plano", - "push": "de um despertar por push", - "unknown": "gatilho não informado pelo app", - "manual": "de Sincronizar tudo" - } - }, - "freshness": { - "title": "Por tipo de dado", - "lastReceived": "Último recebido {relative}", - "lastNewValue": "Último novo valor {relative}", - "lastBackground": "Último em segundo plano {relative}", - "never": "Ainda não recebido", - "lastBackfill": "Histórico atualizado {relative}" - } - }, - "garminInfo": { - "title": "Garmin", - "body": "O Garmin não tem conexão direta aqui. Conecte via Apple Health (iOS) ou Google Health Connect (Android). As pontuações proprietárias do Garmin (Body Battery, Carga de Treino, Status de VFC, VO2 máx) não são compartilhadas pelo Garmin com nenhuma das plataformas.", - "docsLink": "Ler o guia" - }, - "glucoseReference": { - "title": "Faixa de referência de glicose", - "description": "Contra qual faixa suas leituras de glicemia são avaliadas.", - "enable": "Usar a faixa de meta para diabetes", - "explainer": "Desativado, as leituras são avaliadas contra a faixa geral de referência não diabética. Ativado, são avaliadas contra a faixa mais rigorosa de meta glicêmica das Diretrizes de Cuidado da ADA, e o Coach fundamenta suas observações de glicose nessa faixa. Suas próprias metas substitutas abaixo ainda prevalecem.", - "disclaimer": "Isso seleciona uma faixa de referência. Não é um diagnóstico, nunca é inferido de uma leitura, e o app não toma nenhuma ação clínica por isso. Quais metas se aplicam a você é uma questão para seu clínico.", - "error": "Não foi possível salvar a configuração." - }, - "dangerZoneDetail": "Sua conta e as credenciais de login permanecem.", - "deleteAccountCardDetail": "Isso não pode ser desfeito.", - "passkeyStepUpRequired": "Por sua segurança, faça login novamente antes de remover uma chave de acesso.", - "setup": { - "title": "Configuração", - "description": "As perguntas que decidem o que o HealthLog mostra primeiro, e a checklist de primeiros passos no painel.", - "setUpAgain": "Configurar novamente", - "showChecklist": "Mostrar a checklist novamente", - "checklistShown": "A checklist voltou ao painel.", - "checklistNothingHidden": "A checklist não estava oculta; ela abre no painel." - }, - "documentSources": { - "title": "Arquivos de documentos", - "description": "Busque Paperless-ngx ou Papra no HealthLog e importe os documentos que escolher.", - "explainer": "Um botão de importação aparece onde você vincula documentos: em uma consulta, uma vacinação e uma condição, e em Documentos. O HealthLog mantém sua própria cópia criptografada de cada documento que você importa, e consulta seu arquivo apenas quando você busca ou importa.", - "systemLabel": "Arquivo", - "statusConnected": "Conectado", - "statusNotConnected": "Não conectado", - "connectedSince": "Conectado, verificado pela última vez em {date}", - "originRemoved": "Este endereço não está mais na lista de arquivos permitidos do servidor. Peça ao administrador, ou salve outro endereço.", - "baseUrl": "Endereço", - "allowedOrigins": "Permitidos neste servidor: {origins}", - "organizationId": "ID da organização", - "organizationHelp": "A parte depois de /organizations/ na barra de endereço do Papra. IDs de organização do Papra parecem com org_ seguido de 24 letras e dígitos.", - "token": "Token de API", - "tokenSaved": "Salvo para este endereço. Deixe vazio para mantê-lo.", - "tokenHelpPaperless": "No Paperless-ngx: Meu Perfil, Token de API.", - "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": "O arquivo respondeu em {latency} ms.", - "disconnect": "Desconectar", - "disconnectTitle": "Desconectar {name}?", - "disconnectDescription": "O HealthLog esquece o endereço e o token. Documentos que você já importou permanecem 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": "Documentos estão desativados, então a conexão abaixo não é usada. Você ainda pode removê-la.", - "tokenNewAddress": "Um novo endereço precisa do token de API novamente." - }, - "emailChangePassword": "Senha atual (necessária para alterar o endereço de e-mail)", - "reproof": { - "description": "Isso compartilha ou exporta seus dados de saúde. Confirme que é você para continuar.", - "descriptionChange": "Isso 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 ou chave de acesso para confirmar aqui.", - "failed": "Isso não funcionou. Verifique o que digitou e tente novamente." - }, - "passwordTitle": "Senha", - "tokenNameLabel": "Nome do token", - "displayCard": { - "title": "Exibição", - "description": "Idioma, unidades e formatos, salvos assim que você os altera." - }, - "integrationCard": { - "state": { - "ok": "Funcionando", - "limited": "Limitado", - "degraded": "Atrasado", - "actionRequired": "Ação necessária" - }, - "reason": { - "dataArriving": "Os dados estão chegando.", - "dataArrivingHistory": "Os dados estão chegando. O histórico mais antigo está carregando em segundo plano.", - "firstSyncPending": "Conectado. A primeira sincronização roda 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 respondeu de forma confiável desde {since}. O HealthLog continua tentando; nada a fazer do seu lado.", - "providerErrorsNoSince": "{provider} não está respondendo de forma confiável agora. O HealthLog continua tentando; nada a fazer do seu lado.", - "syncStalled": "O HealthLog não sincroniza desde {since}. Isso é do servidor, não do seu dispositivo.", - "syncStalledNoSince": "O HealthLog não está sincronizando agora. Isso é do servidor, não do seu dispositivo.", - "noNewData": "Nenhum dado novo desde {since}.", - "noNewDataNoSince": "Nenhum dado novo há um tempo.", - "noNewDataApple": "Nenhum dado novo desde {since}. Abra o HealthLog no seu iPhone uma vez.", - "noNewDataAppleNoSince": "Nenhum dado novo há um tempo. Abra o HealthLog no seu iPhone uma vez.", - "unexpectedSilence": "Nada chegou desde {since}, embora {provider} normalmente entregue diariamente.", - "unexpectedSilenceNoSince": "Nada está chegando, embora {provider} normalmente entregue diariamente.", - "reauthRequired": "A conexão com {provider} expirou. Reconecte para manter os dados chegando.", - "pausedAfterErrors": "{provider} está pausado após falhas desde {since}.", - "pausedAfterErrorsNoSince": "{provider} está pausado após falhas repetidas." - }, - "when": { - "today": "hoje, {time}", - "yesterday": "ontem, {time}", - "date": "{date}, {time}" - }, - "items": { - "activity": "atividade", - "sleep": "sono" - }, - "moreValuesOne": "{count} a mais", - "moreValuesFew": "{count} a mais", - "moreValuesOther": "{count} a mais", - "notConnected": "Não conectado.", - "lastData": "Últimos dados: {when}", - "lastDataNone": "Últimos dados: nenhum ainda", - "reconnect": "Reconectar", - "resume": "Retomar", - "menuLabel": "Mais ações para {provider}", - "menu": { - "credentials": "Alterar credenciais", - "address": "Alterar endereço e token" - }, - "syncing": "Sincronizando…", - "details": { - "title": "Detalhes para um relatório de bug", - "none": "nenhum", - "state": "Estado", - "since": "desde", - "lastSync": "Última sincronização", - "lastData": "Últimos dados", - "failingParts": "partes falhando", - "recentCalls": "Chamadas recentes", - "unavailable": "Indisponível", - "unavailableList": "Indisponível: {list}", - "causePlan": "plano", - "causePermission": "permissão", - "failureStreak": "Sequência de falhas: {count} de {threshold}", - "copyFailed": "Não foi possível copiar. Selecione o texto e copie manualmente." - } - }, - "dawarich": "Dawarich", - "dawarichTag": "Movimento", - "dawarichDescription": "Conecte sua instância Dawarich para trazer distância diária, tempo fora de casa e dias de viagem.", - "dawarichUrl": "Endereço do Dawarich", - "dawarichApiKey": "Chave de API", - "dawarichApiKeyHelp": "Você a encontra no Dawarich em Conta. O HealthLog a usa apenas para ler valores diários, nunca coordenadas ou nomes de lugares.", - "dawarichConnect": "Conectar", - "dawarichUpdate": "Salvar alterações", - "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 Dawarich?", - "dawarichDisconnectDescription": "As buscas futuras param. Os dias já armazenados permanecem.", - "dawarichDisconnectDelete": "Desconectar e excluir 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 sua casa para que o tempo fora de casa possa ser medido.", - "dawarichHomeCountryIs": "País de casa: {country}.", - "dawarichHomeCountryMissing": "Ainda não há país de casa, 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 casa", - "dawarichHomeCountryHelp": "Código de país de duas letras, como BR. Deixe vazio e o país em que você passou mais dias no último ano conta.", - "dawarichHomeSave": "Salvar", - "dawarichHomeSaved": "Salvo.", - "dawarichErrors": { - "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 é possível alcançar o Dawarich. Verifique o endereço e se a instância está em execução.", - "rateLimited": "Muitas tentativas. Aguarde um momento e tente novamente.", - "homePlaceUnknown": "A instância Dawarich não conhece mais este lugar.", - "notConnected": "O Dawarich não está conectado.", - "generic": "Isso não funcionou. Tente novamente." - }, - "errorGeneric": "Algo deu errado ao concluir a configuração. Tente novamente.", - "tour": { - "stepOf": "Etapa {current} de {total}", - "next": "Avançar", - "back": "Voltar", - "skip": "Pular tour", - "done": "Entendi", - "steps": { - "dashboardOverview": { - "title": "Seu painel", - "body": "O painel reúne todos os módulos em um só lugar. Pressione e segure um bloco para reordená-lo ou ocultá-lo (Configurações → Layout do painel). Cada bloco só é tão informativo quanto os dados por trás dele, e os módulos a seguir os preenchem." - }, - "quickAdd": { - "title": "Registrado em segundos", - "body": "Use \"+ Adicionar\" para registrar qualquer medição em segundos: peso, pressão arterial, pulso, glicose. Recurso oculto: retrodate medições que esqueceu de inserir. Tudo que você registra aqui alimenta tendências, a pontuação de saúde e os insights de IA." - }, - "measurements": { - "title": "Medições e faixas-alvo", - "body": "Medições mostra o histórico e a faixa-alvo de cada métrica. Recurso oculto: defina uma faixa-alvo por valor para que desvios se destaquem em cor. Essas séries são a base para as correlações do Coach e o relatório médico." - }, - "medications": { - "title": "Medicações e doses", - "body": "Medicações gerencia horários, doses, estoque e titulação. Oculto: planos recorrentes (RRULE/contínuos) e avisos de estoque baixo. Sua taxa de doses alimenta o pilar de adesão no painel e o contexto da IA." - }, - "labs": { - "title": "Exames", - "body": "Exames captura biomarcadores com faixas de referência: hemograma, colesterol, HbA1c. Recurso: importação e exportação FHIR. Valores de exames fora da faixa reaparecem como evidência nos insights e no relatório médico." - }, - "illness": { - "title": "Diário de doenças", - "body": "O diário de doenças registra episódios agudos e diagnósticos crônicos com suas crises. Oculto: correlacione um episódio com suas medições, e o Modo Descanso pausa lembretes. É assim que o Coach entende por que os valores mudam por um tempo." - }, - "vorsorge": { - "title": "Checkups", - "body": "Checkups lembram você de exames e vacinas no próprio intervalo. Dica: \"Concluído\" pode criar uma medição ou resultado de exame diretamente. Itens pendentes aparecem como lembretes e no relatório médico." - }, - "cycle": { - "title": "Ciclo", - "body": "O acompanhamento do ciclo registra fases e sintomas. Oculto: compare sintomas com humor e sono. O ciclo dá contexto para oscilações que de outra forma pareceriam inexplicáveis." - }, - "mood": { - "title": "Humor", - "body": "Humor registra como você se sente mais tags em dois segundos. Recurso: suas próprias tags. Tendências de humor se correlacionam com sono, medicações e ciclo, e o Coach identifica os padrões." - }, - "insights": { - "title": "Insights", - "body": "Insights é o coração disso: análise dinâmica baseada em evidências em vez de dicas genéricas. Cada afirmação aponta para seus dados reais. Oculto: o layout é personalizável. Insights reúne tudo que os módulos acima fornecem." - }, - "coach": { - "title": "Coach", - "body": "O Coach responde perguntas sobre seus dados em diálogo, usando seu histórico, medicações e exames como contexto. Escolha seu provedor de IA (sua própria chave ou local). Ele não recalcula nada; lê os mesmos números do painel." - }, - "integrations": { - "title": "Integrações", - "body": "Integrações sincronizam Withings, WHOOP, Polar, Oura e Apple Health automaticamente. Peso, sono e recuperação são preenchidos sem digitação manual e alimentam os insights e o Coach por sua vez." - }, - "export": { - "title": "Relatório médico", - "body": "O relatório médico reúne medições, medicações, exames e checkups como PDF ou FHIR para a consulta. É aqui que todos os módulos convergem: um relatório completo só vem de dados bem mantidos." - }, - "achievements": { - "title": "Conquistas", - "body": "Conquistas recompensam a consistência: sequências e marcos. Um pequeno ciclo de motivação que facilita manter o hábito." - }, - "wrapUp": { - "title": "Esse é o tour", - "body": "Este tour roda uma vez e não reabre sozinho. Tudo que ele cobriu permanece, e você pode ativar ou desativar recursos a qualquer momento em Configurações → Módulos." - } - } - }, - "baseline": { - "title": "Um pouco sobre você", - "body": "Quatro campos opcionais refinam faixas-alvo, IMC e lembretes. Você pode ajustar qualquer um deles depois nas Configurações.", - "displayNameLabel": "Nome de exibição", - "displayNamePlaceholder": "Como o HealthLog deve se dirigir a você?", - "displayNameHint": "Exibido na saudação do painel e nos relatórios.", - "heightLabel": "Altura (cm)", - "heightLabelFtIn": "Altura (pés, pol)", - "genderLabel": "Gênero", - "genderNone": "Prefiro não dizer", - "genderMale": "Masculino", - "genderFemale": "Feminino", - "genderOther": "Outro", - "dateOfBirthLabel": "Data de nascimento", - "dateOfBirthHint": "Usada apenas para análises conscientes da idade." - }, - "done": { - "title": "Tudo pronto", - "body": "Boas-vindas. Seu painel está pronto.", - "returnCta": "Abrir painel", - "learning": "Alguns insights (glicose, ritmo do sono, tendências de pressão arterial, ciclo) ficam mais precisos na primeira ou segunda semana, conforme seus dados se acumulam. Blocos vazios agora significam apenas que ainda estamos aprendendo sua linha de base.", - "connectCta": "Conectar um dispositivo", - "logCta": "Registrar sua primeira medição", - "importCta": "Importar histórico existente", - "modulesCta": "Escolher seus módulos" - }, - "welcomeBack": { - "title": "Bem-vindo de volta", - "cta": "Abrir painel" - }, - "disclaimer": { - "acknowledge": "Entendo: o HealthLog é uma ferramenta privada de acompanhamento, não uma avaliação clínica ou diagnóstico. Se eu estiver preocupado, falarei com meu médico, não com este app.", - "learnMore": "Saiba mais" - }, - "anamnesis": { - "title": "Sobre sua saúde (opcional)", - "subtitle": "Um pouco de contexto para o HealthLog ler seus números de forma mais justa.", - "intro": "Compartilhe o quanto quiser. Todos os campos são opcionais e você pode editá-los a qualquer momento nas Configurações.", - "conditionsLabel": "Condições em andamento", - "conditionsPlaceholder": "ex.: pressão alta, diabetes tipo 2", - "conditionsHint": "Ajuda o HealthLog a contextualizar suas medições em vez de sinalizar o esperado.", - "allergiesLabel": "Alergias ou intolerâncias", - "allergiesPlaceholder": "ex.: penicilina, lactose", - "privacyNote": "Armazenado criptografado e usado apenas para dar a você melhor contexto. Não pedimos suas medicações aqui. Adicione-as a qualquer momento na página Medicações." - }, - "steps": { - "who": "Para quem é este registro", - "areas": "O que acompanhar", - "medication": "Medicação", - "sources": "De onde vêm as medições", - "visit": "Consulta médica", - "units": "Unidades", - "confirm": "Confirmar", - "first-result": "Primeiro resultado", - "done": "Concluído" - }, - "flow": { - "welcome": { - "title": "Bem-vindo ao HealthLog", - "body": "Cinco perguntas curtas decidem o que o HealthLog mostra primeiro. Leva cerca de dois minutos.", - "changeLater": "Nada é definitivo: toda escolha pode ser alterada depois nas Configurações.", - "setUp": "Configurar", - "skip": "Pular por agora", - "againBody": "Sua configuração está concluída. Responda as perguntas novamente para mudar o que o HealthLog mostra primeiro, ou vá ao painel.", - "setUpAgain": "Configurar novamente" - }, - "who": { - "title": "Para quem é este registro?", - "body": "As respostas a seguir se aplicam a este registro.", - "options": { - "me": "Eu", - "someone-else": "Alguém que eu cuido", - "both": "Ambos" - }, - "hints": { - "someone-else": "Uma criança ou um pai/mãe, por exemplo. O perfil é criado no final.", - "both": "Configure seu próprio registro agora; o perfil da outra pessoa é oferecido no final." - } - }, - "areas": { - "title": "O que você quer acompanhar?", - "body": "Escolha quantos quiser. Eles decidem quais módulos são ativados e o que o painel mostra primeiro.", - "options": { - "blood-pressure": "Pressão arterial", - "weight-body": "Peso e corpo", - "glucose": "Glicemia", - "sleep": "Sono e recuperação", - "mood": "Humor e bem-estar mental", - "cycle": "Ciclo", - "activity": "Atividade e treinos", - "labs": "Resultados de exames", - "illness": "Doenças e sintomas" - } - }, - "medication": { - "title": "Você toma medicação em horário fixo?", - "body": "Um horário ativa o módulo de medicação e os lembretes.", - "options": { - "yes": "Sim", - "no": "Não", - "sometimes": "Às vezes" - } - }, - "sources": { - "title": "De onde vêm suas medições hoje?", - "body": "Escolha quantos quiser. Uma conexão é oferecida no final; nenhuma é obrigatória.", - "options": { - "manual": "Eu digito", - "apple-health": "Apple Health no meu iPhone", - "withings": "Withings", - "oura": "Oura", - "whoop": "WHOOP", - "polar": "Polar", - "fitbit": "Fitbit", - "strava": "Strava", - "nightscout": "Nightscout", - "file": "Um arquivo que eu já tenho" - }, - "hints": { - "apple-health": "Sincronizado pelo app iOS, ou importado de uma exportação.", - "file": "Importado nas Configurações quando você terminar aqui." - } - }, - "visit": { - "title": "Há uma consulta médica chegando?", - "body": "Uma consulta ativa o relatório médico e adiciona prepará-la à sua checklist.", - "options": { - "within-a-month": "Sim, dentro de um mês", - "later": "Mais tarde", - "no": "Não" - } - }, - "units": { - "title": "Quais unidades você usa?", - "body": "As medições são armazenadas uma vez e exibidas na unidade que você escolher. Você pode mudar depois nas Configurações.", - "glucoseLegend": "Glicemia", - "weightLegend": "Peso e altura", - "options": { - "metric": "kg e cm", - "imperial": "lb e pés/pol" - } - }, - "confirm": { - "title": "Aqui está o que suas respostas ativam", - "body": "Uma olhada e o HealthLog está configurado. Nada aqui é definitivo.", - "modulesTitle": "Módulos", - "switchedOn": "Ativados: {modules}.", - "nothingExtra": "Suas respostas não ativam módulo extra; as medições principais sempre estão lá.", - "alwaysOn": "Sempre ativos: {modules}, e as medições principais (peso, pressão arterial, pulso).", - "everythingElse": "Todo o resto fica a um clique de distância em", - "modulesLink": "Configurações, Módulos", - "switchesOff": "Fora da navegação: {modules}. Você pode reativar qualquer um deles em Configurações, Módulos.", - "glucoseUnit": "Glicemia", - "unitPreference": "Unidades", - "language": "Idioma", - "timezone": "Fuso horário", - "changeInSettings": "Mude estes em Configurações, Conta", - "cta": "Confirmar e continuar", - "managedTitle": "A pessoa que você cuida", - "managedBody": "O registro dela não tem login próprio; você cuida dele pela sua conta. É necessário um segundo fator ou uma chave de acesso na sua conta para criá-lo.", - "managedCreate": "Criar o perfil e concluir", - "managedLater": "Você também pode criá-lo depois em Configurações, Acesso compartilhado.", - "finishWithoutProfile": "Concluir sem o perfil" - }, - "first-result": { - "connect-source": { - "title": "Conectar {target}", - "body": "Uma conexão, escolhida a partir das suas respostas. As medições então chegam sozinhas.", - "howTo": "A conexão com {target} é feita na página de integrações. Volte aqui depois; esta tela percebe quando está concluída.", - "cta": "Conectar {target}", - "checking": "Verificando a conexão.", - "waiting": "Ainda não conectado.", - "openSettings": "Abrir Configurações → Integrações", - "noDate": "desconhecido", - "needsCredentials": { - "title": "Esta instância ainda não tem um app {target} registrado.", - "detail": "Digite suas próprias credenciais em Configurações → Integrações, então a conexão pode começar." - }, + "bestand": { + "title": "Estoque", + "summary": "{remaining} de {total} doses restantes", + "itemsTitle": "Embalagens e recipientes", + "doses": "{remaining} / {total} doses", + "unknown": "Desconhecido", "state": { - "pending_first_sync": { - "title": "{target} está conectado.", - "detail": "A primeira sincronização está em andamento. As medições aparecem no painel conforme chegam." - }, - "fresh": { - "title": "{target} já está conectado.", - "detail": "Última leitura {when}. Nada mais a fazer aqui." - }, - "stale": { - "title": "{target} está conectado, mas nada está chegando agora.", - "detail": "Última leitura {when}. A conexão em si está bem." - }, - "stalled": { - "title": "{target} está conectado, mas parou de sincronizar.", - "detail": "Última tentativa {when}. Verifique a conexão em Configurações → Integrações." - }, - "failing": { - "title": "{target} está conectado, mas a sincronização continua falhando.", - "detail": "Nada chegou desde {when}. Verifique a conexão em Configurações → Integrações." - }, - "reauth_required": { - "title": "A conexão com {target} precisa ser renovada.", - "detail": "Entre mais uma vez e as leituras continuam." - }, - "parked": { - "title": "A conexão com {target} está pausada.", - "detail": "Verifique a conexão em Configurações → Integrações." - } + "ACTIVE": "Não aberta", + "IN_USE": "Em uso", + "EXPIRED": "Expirada", + "USED_UP": "Esgotada" + }, + "empty": "Nenhum estoque registrado.", + "emptyHelper": "Registre uma embalagem ou recipiente para acompanhar o estoque restante e a duração.", + "emptyCta": "Registrar uma embalagem", + "addButton": "Registrar", + "lowStockLinkOn": "Notificação de estoque baixo: abaixo de {days} dias", + "lowStockLinkOff": "Notificação de estoque baixo: desligada", + "addTitle": "Registrar uma embalagem ou recipiente", + "addDescription": "Registre um novo estoque com sua contagem de unidades; a data de validade é opcional.", + "addQuantityLabel": "Quantidade (unidades)", + "addQuantityHelper": "1–1000 unidades por embalagem ou recipiente.", + "addExpiryLabel": "Data de validade (opcional)", + "addSubmit": "Registrar", + "addSuccess": "Estoque registrado", + "addFailed": "O estoque não pôde ser registrado.", + "adjustButton": "Ajustar", + "adjustTitle": "Corrigir recipiente", + "adjustDescription": "Defina as unidades restantes e corrija as datas impressas ou registradas para este recipiente. 0 unidades marca como esgotado.", + "adjustQuantityLabel": "Unidades restantes", + "adjustHelper": "Capacidade: {total} unidades.", + "adjustSubmit": "Salvar", + "adjustSuccess": "Estoque atualizado", + "adjustFailed": "O estoque não pôde ser atualizado.", + "deleteTitle": "Excluir recipiente?", + "deleteDescription": "Remove permanentemente esta embalagem ou recipiente do estoque. As doses registradas permanecem inalteradas.", + "deleteSuccess": "Entrada de estoque excluída", + "deleteFailed": "A entrada de estoque não pôde ser excluída.", + "containerTypeLabel": "Tipo de recipiente", + "containerType": { + "PEN": "Caneta", + "AMPOULE": "Ampola", + "BLISTER": "Cartela de comprimidos", + "INHALER": "Inalador", + "BOTTLE": "Frasco", + "OTHER": "Outro" + }, + "unitsDetail": "{remaining} / {total} unidades", + "quantityModeDoses": "Doses", + "quantityModeUnits": "Unidades", + "quantityInUnits": "= {units} unidades", + "quantityInDoses": "≈ {doses} doses", + "quantityUnderOneDose": "< 1 dose", + "expiredSuffix": "+ {units} unidades expiradas", + "packagingTitle": "Embalagem e dose", + "packagingUnitsPerDose": "1 dose = {units} unidades", + "packagingDefaultPack": "Tamanho padrão da embalagem: {units} unidades", + "packagingNoDefaultPack": "Nenhum tamanho padrão de embalagem definido", + "packagingEdit": "Editar", + "packagingDescription": "Defina quantas unidades uma dose consome e quão grande uma nova embalagem costuma ser, ex.: após uma troca de fabricante com uma cartela de tamanho diferente.", + "packagingUnitsPerDoseLabel": "Unidades por dose", + "packagingUnitsPerDoseHelper": "Ex.: dois comprimidos de 2 mg para uma dose de 4 mg, ou 1,5 para um e meio (acima de 0, até 100). As doses já registradas permanecem inalteradas.", + "packagingDefaultPackLabel": "Tamanho padrão da embalagem (unidades)", + "packagingDefaultPackHelper": "Pré-preenche a quantidade ao registrar novas embalagens (1–1000). Deixe em branco se nenhum se aplica.", + "packagingSuccess": "Detalhes de embalagem salvos", + "packagingFailed": "Falha ao salvar", + "addManufacturerLabel": "Fabricante", + "addDoseStrengthLabel": "Força", + "addDoseStrengthHint": "Como impresso no recipiente, ex.: 5 mg/0,5 ml.", + "openedOn": "Aberta em {date}", + "expiresOn": "Expira em {date}", + "summaryAllExpired": "Nenhum estoque utilizável: {units} unidades marcadas como expiradas", + "editExpiryLabel": "Data de validade impressa", + "editExpiryHelper": "A data impressa na caixa. Deixe em branco se nenhuma estiver registrada.", + "editOpenedLabel": "Aberta em", + "editOpenedHelper": "Deixe em branco se o recipiente ainda estiver selado.", + "editOpenedHelperClock": "Uma caneta ou ampola expira 30 dias depois de aberta. Deixe em branco se ainda estiver selada." + }, + "erweitert": { + "group": { + "lifecycle": "Ciclo de vida", + "externalApi": "API externa", + "data": "Dados", + "danger": "Zona de perigo" + }, + "editor": { + "title": "Editar medicamento no editor", + "helper": "Altere nome, classe de tratamento, frequência e cronogramas no editor passo a passo.", + "button": "Abrir editor" } }, - "add-medication": { - "title": "Adicione sua primeira medicação", - "body": "Nome, dose e horário; o lembrete segue o horário que você definir.", - "howTo": "A medicação é adicionada em poucos passos. Você pode adicionar mais depois na página Medicações.", - "cta": "Adicionar uma medicação", - "done": "{name} foi adicionada.", - "doneUnnamed": "Sua primeira medicação foi adicionada.", - "nextDose": "Próxima dose: {when}.", - "reminders": "Os lembretes seguem o horário que você definiu.", - "recordOnly": "Mantida como registro: sem lembretes, nada fica pendente.", - "asNeeded": "Conforme necessário: sem lembretes, registre uma dose quando tomá-la." - }, - "log-reading": { - "title": "Insira uma medição: {target}", - "body": "Uma medição coloca o primeiro valor no seu painel. A tendência se desenha a partir da quinta.", - "done": "Sua primeira medição está no bloco dela.", - "doneElsewhere": "Sua primeira entrada para {target} foi registrada.", - "elsewhere": "{target} tem uma página própria. Abra-a, faça a primeira entrada, depois volte e marque como concluída.", - "open": "Abrir {target}", - "markDone": "Eu fiz a entrada" + "zeitplan": { + "title": "Cronograma", + "timesTitle": "Horários das doses", + "timesNote": "Ajuste o horário e a janela de pontualidade de cada dose. A frequência (diária, semanal…) é editada no editor em Avançado.", + "scheduleLabel": "Cronograma {index}", + "fullEditNote": "Frequência, classe de tratamento e janela do curso são editadas no editor em Avançado → Ciclo de vida.", + "graceEcho": "Janela de lembrete: {minutes} minutos", + "reminderTitle": "Lembrete", + "manageChannels": "Gerenciar canais de notificação", + "history": { + "title": "Histórico do plano", + "currentSince": "Plano atual desde {date}", + "noTimes": "Sem horários fixos", + "manualChip": "Adicionado manualmente", + "showErasOne": "Mostrar 1 era anterior", + "showErasOther": "Mostrar {count} eras anteriores", + "hideEras": "Ocultar eras anteriores", + "addEra": "Adicionar era anterior", + "addEraTitle": "Adicionar era anterior", + "addEraDescription": "Registre os horários em que este medicamento costumava ser tomado, por exemplo antes de você ajustá-lo aqui.", + "editAria": "Editar era", + "editEraTitle": "Editar era", + "editEraDescription": "Ajuste os horários das doses e a faixa de datas desta era.", + "archivedEditHint": "Esta era foi registrada automaticamente. Sua alteração corrige o histórico registrado; o original é mantido internamente como registro.", + "updatedToast": "Era atualizada", + "updateError": "Não foi possível atualizar a era. Ela não deve sobrepor outras eras e deve terminar antes do plano atual.", + "timesLabel": "Horários das doses", + "fromLabel": "De", + "untilLabel": "Até", + "untilHint": "\"Até\" é o dia em que o plano seguinte assumiu (exclusivo).", + "validationTimes": "Adicione pelo menos um horário.", + "validationRangeMissing": "Defina as datas de início e fim.", + "validationRangeOrder": "A data de início deve ser anterior à data de fim.", + "cancel": "Cancelar", + "submit": "Salvar era", + "createdToast": "Era anterior salva", + "createError": "Não foi possível salvar a era. Ela não deve sobrepor eras existentes e deve terminar antes do plano atual.", + "deletedToast": "Era excluída", + "deleteError": "Não foi possível excluir a era", + "deleteAria": "Excluir era", + "deleteConfirmTitle": "Excluir era?", + "deleteConfirmBody": "O histórico e a adesão deste período serão calculados novamente contra o plano atual.", + "deleteConfirmAction": "Excluir", + "loadError": "Não foi possível carregar o histórico do plano" + }, + "save": "Salvar cronograma", + "saved": "Cronograma salvo", + "failed": "Não foi possível salvar o cronograma", + "window": { + "intro": "Para cada dose, defina quando uma dose ainda conta como no horário: um horário preciso (±1h) ou sua própria janela, como 07:00–09:00.", + "explicitToggle": "Janela personalizada", + "startLabel": "Início da janela", + "endLabel": "Fim da janela", + "onTimeBand": "No horário: {start}–{end}", + "lateUntil": "atrasada até {time}", + "lateDays": "atrasada até {days} dias depois", + "orderError": "O início deve ser antes do fim.", + "noTimes": "Nenhum horário de dose definido ainda." + } } }, - "done": { - "tourCta": "Fazer um tour rápido", - "openRecord": "Abrir o registro de {name}", - "createProfile": "Criar o perfil da pessoa que você cuida" + "logInjectionSiteTitle": "Registrar local de injeção", + "logInjectionSiteDescription": "Onde você injetou {name}? Opcional: você pode pular isso.", + "logInjectionSiteSkip": "Pular", + "logInjectionSiteConfirm": "Salvar local", + "logInjectionSiteNoneAvailable": "Nenhum local de injeção disponível. Todos os locais estão excluídos nas suas configurações.", + "logInjectionSiteSaveFailed": "Não foi possível salvar o local de injeção. Tente novamente.", + "perSlotUnits": "{units} por dose", + "trackInjectionSitesToggle": "Acompanhar locais de injeção", + "trackInjectionSitesHint": "Depois que uma dose é tomada, pergunte qual local foi usado e sugira a próxima rotação.", + "allowedSitesLabel": "Locais permitidos", + "allowedSitesHint": "Deixe todos selecionados para nenhuma restrição. Locais que você excluiu globalmente nunca são oferecidos.", + "viewToggleLabel": "Visualização", + "viewToggleHint": "Escolha se seus medicamentos aparecem como cartões ou como uma tabela.", + "viewCards": "Visualização em cartões", + "viewTable": "Visualização em tabela", + "viewSaveFailed": "A visualização não pôde ser salva", + "tableCaption": "Medicamentos em uma tabela com status, próxima dose, adesão e estoque", + "tableColName": "Nome", + "tableColStatus": "Status", + "tableColNextDose": "Próxima dose", + "tableColCompliance": "Adesão", + "tableColStock": "Estoque", + "tableColActions": "Ações", + "tableSortBy": "Ordenar por {column}", + "tableComplianceDays": "{days} d", + "tableStockDoseOne": "1 dose", + "tableStockDoses": "{count} doses", + "tableStockRunway": "≈ {days} dias restantes", + "cardLowStockRunway": "Estoque: ≈ {days} dias", + "takeActionFor": "Tomar {name}", + "skipActionFor": "Pular {name}", + "reorderDescription": "Defina a ordem dos seus medicamentos tanto na visualização em cartões quanto na tabela.", + "reorderSaved": "Ordem salva", + "reorderSaveFailed": "A ordem não pôde ser salva", + "customize": "Personalizar medicamentos", + "efficacy": { + "title": "Efeito", + "intro": "Como as medições que este medicamento deve influenciar se moveram por volta do momento em que você começou. Mostra o que se alinha no tempo (uma associação, não uma causa) e nunca conselho sobre seu tratamento ou dose.", + "notEligible": "Não há resultado para relacionar este medicamento.", + "startFallback": "Nenhuma data de início definida, então a comparação usa sua primeira leitura registrada como ponto de referência.", + "noStart": "Defina uma data de início para este medicamento para comparar as leituras antes e depois de começar.", + "disclaimer": "Apenas associação: estes números mostram o que mudou no mesmo período, não que o medicamento causou a mudança. Discuta qualquer decisão sobre seu tratamento com seu médico.", + "primaryBadge": "Alvo principal", + "noSeries": "Nenhuma leitura registrada para este alvo ainda.", + "startMarker": "Início", + "adherenceLane": "Adesão", + "typicalRange": "Faixa típica", + "levelShift": "Uma mudança de nível foi detectada por volta de {date}.", + "plateau": { + "title": "Platô de peso na dose atual", + "evidence": "O peso mudou {delta} {unit} nos últimos {window} dias ({readings} leituras), {days} dias em {dose}." + }, + "retarget": { + "label": "Não é a medição certa?", + "placeholder": "Acompanhar contra…", + "apply": "Aplicar", + "reset": "Redefinir para padrão", + "error": "Não foi possível salvar essa alteração. Tente novamente." + }, + "beforeAfter": { + "summary": "Ø {before} antes → Ø {after} desde, uma mudança de {delta}.", + "counts": "Baseado em {beforeCount} leituras antes e {afterCount} desde.", + "needBefore": "Leituras insuficientes antes do início ainda. Cerca de {weeks} semanas são necessárias antes e depois para comparar.", + "needAfter": "Leituras insuficientes desde o início ainda. Cerca de {weeks} semanas são necessárias antes e depois para comparar.", + "needStart": "Defina uma data de início para comparar as leituras antes e depois de começar.", + "needData": "Leituras insuficientes ainda. Cerca de {weeks} semanas são necessárias antes e depois do início para comparar." + }, + "insights": { + "title": "Efeito do medicamento", + "subtitle": "O que se alinha com as medições que seus medicamentos visam: apenas associação, nunca um veredito.", + "link": "Abrir a visualização de efeito", + "empty": "Dados insuficientes ainda para relacionar seus medicamentos às medições alvo." + }, + "scaleAbsolute": "Absoluto", + "scalePercentSinceStart": "% desde o início", + "scaleToggleLabel": "Escala do gráfico", + "segmented": {} + }, + "import": { + "resultSuccess": "{imported} doses importadas", + "resultPartial": "{imported} importadas, {skipped} puladas.", + "resultNothing": "Nada foi importado: todas as {skipped} entradas foram puladas.", + "resultAlreadyRecorded": "{recorded} doses já estão registradas. Nada novo foi adicionado.", + "resultEmpty": "Esse arquivo não continha doses.", + "showSkipDetails": "Mostrar linhas puladas ({count})", + "skipDetailLine": "Linha {line}: {reason}", + "skipDetailsOmitted": "{count} linhas puladas a mais não são exibidas.", + "skipGroupOne": "{count} entrada pulada: {reason}", + "skipGroupFew": "{count} entradas puladas: {reason}", + "skipGroupOther": "{count} entradas puladas: {reason}", + "reasonDuplicateInFile": "outra entrada no mesmo arquivo tem a mesma data e hora", + "reasonAlreadyRecorded": "uma dose já está registrada para essa data e hora", + "reasonUnknown": "motivo não registrado", + "reasonMedicationNotFound": "nenhum medicamento registrado corresponde ao nome no arquivo", + "reasonMedicationAmbiguous": "o nome no arquivo corresponde a mais de um medicamento registrado", + "reasonMedicationIsMirrored": "o medicamento é uma cópia somente leitura da lista de outro aplicativo", + "reasonStatusUnknown": "o status no arquivo não é um que o formato define", + "reasonMissingTimestamp": "a linha não indica horário", + "reasonMissingOffset": "o horário não traz offset UTC, então o instante é desconhecido", + "reasonUnreadableTimestamp": "o horário não está no formato que a exportação documenta", + "reasonImplausibleTimestamp": "o horário não indica um instante real ou está no futuro", + "reasonMissingMedication": "a linha não indica medicamento", + "reasonUnreadableDosage": "a dosagem não é um número", + "reasonUnreadableRow": "a linha tem menos colunas que o cabeçalho", + "reasonStatusNoDoseInformation": "o arquivo não registra nada sobre essa dose; ninguém respondeu e nada foi registrado", + "reasonStatusReminderEvent": "a linha trata de um lembrete adiado, o que não diz nada sobre a dose", + "reasonStatusNotificationNotSent": "a linha registra que nenhuma notificação foi enviada, o que se refere ao aplicativo, não à dose" + }, + "unitsPerDoseField": { + "other": "Outro…", + "inputLabel": "Unidades por dose, outro valor", + "placeholder": "ex.: 1,5 ou 1 1/2", + "invalid": "Insira um número acima de 0 e até 100, por exemplo 1,5 ou 1 1/2.", + "preview": "Conta como {value} por dose" + }, + "category": { + "custom": { + "add": "Nova categoria", + "label": "Nome da categoria", + "labelPlaceholder": "ex.: Kit de viagem", + "create": "Adicionar", + "limitReached": "Você atingiu o limite de 20 categorias próprias.", + "saveFailed": "Isso não salvou. Tente novamente.", + "bpGateNote": "Os insights de pressão arterial contam apenas medicamentos na categoria integrada Pressão arterial.", + "manage": "Gerenciar categorias", + "manageDescription": "Suas categorias próprias, exibidas ao lado das integradas.", + "hidden": "Ocultas", + "count": "{count} medicamentos", + "rename": "Renomear", + "hide": "Ocultar do seletor", + "show": "Mostrar no seletor", + "delete": "Excluir", + "deleteTitle": "Excluir esta categoria?", + "deleteBody": "{count} medicamentos arquivados nela mudam para Outro. Os medicamentos em si permanecem.", + "movedToOther": "Categoria excluída. {count} medicamentos mudaram para Outro." + }, + "filter": { + "label": "Categoria", + "all": "Todas as categorias" + } + }, + "course": { + "endedOn": "Último curso terminou em {date}", + "nth": "Curso {n}", + "startNew": "Iniciar um novo curso", + "editTitle": "Editar curso", + "startsOn": "Primeiro dia", + "endsOn": "Último dia (opcional)", + "note": "Nota (opcional)", + "notePlaceholder": "ex.: a gripe em março", + "title": "Cursos", + "helper": "Quando você tomou. As doses são esperadas apenas dentro de um curso.", + "none": "Tomado continuamente, sem cursos separados.", + "range": "{start} a {end}", + "since": "Desde {start}", + "meta": "Curso {n}, {status}, {taken} doses tomadas", + "status": { + "current": "em andamento", + "upcoming": "previsto", + "ended": "encerrado" + }, + "delete": "Excluir curso", + "deleteTitle": "Excluir este curso?", + "deleteBody": "As datas vão; as doses que você registrou permanecem no histórico.", + "deleteLastConfirm": "Este é o único curso. Sem ele, o medicamento conta como tomado continuamente desde que você o adicionou. As doses registradas permanecem.", + "error": { + "overlap": "Este curso compartilha dias com outro.", + "currentOpen": "Encerre o curso em andamento antes de adicionar um depois dele.", + "oneShot": "Um medicamento de dose única tem um único curso.", + "invalidRange": "O último dia não pode ser antes do primeiro.", + "generic": "Isso não salvou. Tente novamente." + } + }, + "composition": { + "title": "Composição", + "empty": "Adicione o que um comprimido ou cápsula contém para contar cada dose tomada nos seus micronutrientes.", + "perUnitNote": "Por comprimido ou cápsula; cada dose tomada adiciona isso aos micronutrientes do dia.", + "add": "Adicionar", + "edit": "Editar", + "rowHelper": "O que um comprimido ou cápsula contém, para seus micronutrientes.", + "sheetTitle": "O que uma unidade contém", + "sheetDescription": "Insira as quantidades por comprimido ou cápsula conforme o rótulo as indica.", + "nutrientLabel": "Nutriente", + "amountLabel": "Quantidade", + "unitLabel": "Unidade", + "choose": "Escolha um nutriente", + "addRow": "Adicionar um nutriente", + "removeRow": "Remover {name}", + "editorEmpty": "Nenhum nutriente ainda. Adicione um por linha do rótulo.", + "labelPhoto": "Ler de uma foto do rótulo", + "labelReading": "Lendo o rótulo…", + "labelWaiting": "Ainda aguardando o worker em segundo plano pegar isso.", + "labelReviewNote": "Verifique cada linha contra o rótulo antes de salvar.", + "lowConfidence": "Esta linha foi difícil de ler; verifique-a contra o rótulo.", + "unmatchedTitle": "Linhas sem nutriente correspondente, para inserir manualmente se necessário:", + "servingNote": "O rótulo indica: {note}. As quantidades são exibidas por unidade única.", + "labelError": "O rótulo não pôde ser lido", + "saveError": "A composição não pôde ser salva", + "catalogError": "A lista de nutrientes não pôde ser carregada", + "invalidRow": "Escolha um nutriente e insira uma quantidade acima de zero em cada linha." } }, + "charts": { + "loadingLabel": "Carregando gráfico…", + "loadingSlowHint": "Calculando análises. Isso pode levar um momento.", + "weight": "Peso", + "bloodPressure": "Pressão arterial", + "pulse": "Pulso", + "bodyFat": "Gordura corporal", + "sleep": "Sono", + "steps": "Passos", + "hrv": "VFC", + "restingHeartRate": "Frequência cardíaca em repouso", + "activeEnergy": "Energia ativa", + "flights": "Andares subidos", + "distance": "Distância caminhada + corrida", + "vo2Max": "VO2 máx", + "bodyTemperature": "Temperatura corporal", + "noData": "Nenhum dado na faixa de tempo selecionada", + "bucketWeekly": "Média semanal", + "bucketMonthly": "Média mensal", + "bucketWeeklyDaily": "Média diária por semana", + "bucketMonthlyDaily": "Média diária por mês", + "days7Label": "7d", + "days7Title": "Últimos 7 dias", + "days30Label": "30d", + "daysNLabel": "{days}d", + "days30Title": "Últimos 30 dias", + "days90Label": "90d", + "days90Title": "Últimos 90 dias", + "daysAllLabel": "Tudo", + "daysAllTitle": "Todo o tempo", + "systolic": "Sistólica", + "diastolic": "Diastólica", + "bodyWater": "Água corporal", + "boneMass": "Massa óssea", + "spo2": "SpO2", + "movingAverage7d": "Tendência de 7 dias", + "avg7dShort": "7d", + "avg30dShort": "30d", + "trend7dShort": "Tendência de 7 dias", + "trend": "Tendência", + "perWeek": "/semana", + "totalDelta": "Total", + "colorGreen": "Verde:", + "colorOrange": "Laranja:", + "colorRed": "Vermelho:", + "mood": "Humor", + "moodScore": "Pontuação de humor", + "weekdays": { + "mon": "Seg", + "wed": "Qua", + "fri": "Sex", + "sun": "Dom" + }, + "months": { + "jan": "Jan", + "feb": "Fev", + "mar": "Mar", + "apr": "Abr", + "may": "Mai", + "jun": "Jun", + "jul": "Jul", + "aug": "Ago", + "sep": "Set", + "oct": "Out", + "nov": "Nov", + "dec": "Dez" + }, + "heatmapOnTime": "no horário", + "heatmapLate": "atrasado", + "heatmapVeryLate": "muito atrasado", + "legendOnTime": "No horário", + "legendLate": "Atrasado", + "legendVeryLate": "Muito atrasado", + "legendMissed": "Perdido", + "emptyStateTitle": "Adicione mais medições para ver tendências", + "emptyStateDescription": "Registre pelo menos 3 entradas para desbloquear a linha de tendência.", + "needMoreDistinctDaysTitle": "Mais dias distintos necessários", + "needMoreDistinctDaysDescription": "Registre em mais dias para desbloquear a linha de tendência.", + "noDataInRangeTitle": "Nenhum dado nesta faixa", + "noDataInRangeDescription": "Nenhuma medição cai dentro da faixa selecionada. Mude a faixa ou registre uma nova medição.", + "errorTitle": "Não foi possível carregar os dados", + "loadErrorTitle": "O gráfico não pôde ser carregado", + "loadErrorReload": "Recarregar", + "sparseDataCaption": "Mais dias preencherão a tendência.", + "tooltipHourlyMean": "{metric} (média das horas)", + "dataTable": { + "toggle": "Pontos de dados ({count})", + "columnDate": "Data", + "noValue": "Sem valor", + "captionDay": "Uma linha por dia de {metric}, os mesmos pontos que o gráfico desenha.", + "captionWeek": "Uma linha por semana de {metric}, a média dos dias daquela semana, os mesmos pontos que o gráfico desenha.", + "captionMonth": "Uma linha por mês de {metric}, a média dos dias daquele mês, os mesmos pontos que o gráfico desenha.", + "hourlyMeanNote": "{metric} é a média de cada dia, com cada hora contando uma vez, então um treino não pesa mais que o resto do dia." + }, + "personalBaseline": "Seu normal", + "deltaVsBaseline": "{delta} vs. seu normal", + "deltaUnchanged": "corresponde ao seu normal", + "deltaVsTarget": "{delta} vs. alvo", + "weekdaysFull": { + "mon": "Segunda-feira", + "tue": "Terça-feira", + "wed": "Quarta-feira", + "thu": "Quinta-feira", + "fri": "Sexta-feira", + "sat": "Sábado", + "sun": "Domingo" + }, + "rangeBand": "Faixa", + "a11y": { + "summary": "Gráfico de {metric}. Faixa {min} a {max}, mais recente {latest}, tendência {trend}.", + "noData": "Gráfico de {metric}. Nenhum dado disponível.", + "trendUp": "subindo", + "trendDown": "caindo", + "trendFlat": "estável", + "scatterSummary": "Gráfico de correlação, {count} pontos plotando {xLabel} contra {yLabel}.", + "scatterNoData": "Gráfico de correlação de {xLabel} contra {yLabel}. Nenhum dado disponível.", + "moodHeatmap": "Mapa de calor de humor de {start} a {end}, {days} dias registrados.", + "moodHeatmapEmpty": "Mapa de calor de humor, nenhum dia registrado ainda.", + "complianceHeatmap": "Mapa de calor de adesão a medicamentos de {start} a {end}, {days} dias ativos.", + "complianceHeatmapEmpty": "Mapa de calor de adesão a medicamentos, nenhum dia ativo ainda." + }, + "medicationsEmptyAction": "Adicionar um medicamento" + }, + "chart": { + "overlay": { + "controls": { + "title": "Sobreposições do gráfico", + "trendIndicator": "Tendência de 7 dias", + "trendArrow": "Seta de tendência", + "targetRange": "Faixa alvo", + "comparisonBaseline": "Comparação", + "comparisonUnavailable": "Ainda sem dados do período anterior", + "tooltip": { + "openSettings": "Configurações de sobreposição do gráfico" + } + } + } + }, + "comparison": { + "baseline": { + "none": "Nenhuma", + "lastMonth": "Mês passado", + "lastYear": "Ano passado" + }, + "captionLastMonth": "vs. mês passado", + "captionLastYear": "vs. ano passado", + "deltaVs": { + "lastMonth": "{delta} vs. mês passado", + "lastYear": "{delta} vs. ano passado" + }, + "tooltipPrior": "Período anterior", + "unavailable": { + "lastMonth": "Comparação indisponível: ainda sem dados do mês passado", + "lastYear": "Comparação indisponível: ainda sem dados do ano passado" + }, + "notAvailableForCompliance": "Comparação N/A para adesão" + }, "insights": { "pattern": { "dismiss": "Dispensar", @@ -3406,7 +2704,8 @@ "high": "Maior {behaviour} no dia e no dia anterior tende a vir com {direction} {outcome} nos seus dados. É um padrão para observar, não uma causa.", "moderate": "Maior {behaviour} no dia e no dia anterior parece vir com {direction} {outcome} nos seus dados, com base nas evidências até agora. É um padrão para observar, não uma causa.", "faint": "Maior {behaviour} no dia e no dia anterior mostra uma leve indicação, se houver, de {direction} {outcome} nos seus dados. É pequeno demais para se apoiar e nunca é uma causa." - } + }, + "dailyOvernight": {} }, "noAnalysisYet": "Ainda sem avaliação.", "assessmentPreparing": "Preparando sua avaliação…", @@ -3962,11 +3261,11 @@ "provider": "Responde com", "modelManaged": "O modelo deste provedor é definido nas configurações de IA.", "noProvider": "Nenhum provedor disponível", + "allSettings": "Todas as configurações de IA", + "operatorCodex": "ChatGPT (compartilhado pelo operador)", "saving": "Salvando…", "saveFailed": "Essa mudança não pôde ser salva.", - "allSettings": "Todas as configurações de IA", "providerNotActive": "{provider} não pôde assumir: não tem login ou chave funcionando. Configure-o nas configurações de IA.", - "operatorCodex": "ChatGPT (compartilhado pelo operador)", "operatorManaged": "O operador do seu servidor gerencia esta conexão. Assim que um dos seus próprios provedores for configurado, ele responde primeiro." }, "answer": { @@ -4505,7 +3804,8 @@ "editTitle": "Editar treino", "editAction": "Editar", "updated": "Treino atualizado" - } + }, + "load": {} }, "bloodGlucose": { "title": "Glicose no Sangue", @@ -4919,11 +4219,6 @@ "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", - "unitHours": "h", - "unitKcal": "kcal", - "unitScore": "pts", - "unitBpm": "bpm", - "unitMs": "ms", "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." }, @@ -4937,13 +4232,6 @@ "metricHrv": "Variabilidade da frequência cardíaca", "metricWeight": "Peso", "metricBloodPressureSys": "Sistólica", - "unitHours": "h", - "unitScore": "pts", - "unitSteps": "passos", - "unitBpm": "bpm", - "unitMs": "ms", - "unitKg": "kg", - "unitMmHg": "mmHg", "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." }, @@ -4958,7 +4246,8 @@ "outcomeDown": "Maior humor tende a vir com menor {factor} no dia seguinte nos seus dados.", "stat": "{n} dias pareados, r = {r}, q = {q}", "statLabel": "Como isto foi calculado", - "explainerLabel": "Como isto foi calculado" + "explainerLabel": "Como isto foi calculado", + "channel": {} }, "inTargetTitle": "Na sua faixa", "dimensions": { @@ -5094,7 +4383,8 @@ "consistency": "Consistência", "timing": "Horário", "composition": "Composição" - } + }, + "gap": {} }, "READINESS": { "title": "Prontidão", @@ -5560,88 +4850,2578 @@ "seam": "A linha quebra onde o que conta para a pontuação mudou." } }, - "thresholds": [ - { - "defaultLabel": "Padrão", - "overrideToggleLabel": "Faixa personalizada", - "resetAction": "Redefinir para o padrão", - "resetAllAction": "Redefinir tudo para o padrão", - "resetAllTitle": "Redefinir todas as faixas personalizadas?", - "resetAllBody": "Todas as métricas voltam para a sua faixa padrão. Os valores que você definiu não são armazenados em nenhum outro lugar e não podem ser recuperados.", - "resetAllConfirm": "Redefinir tudo", - "resetTitle": "Redefinir esta faixa?", - "resetBody": "A métrica volta para a sua faixa padrão. Os valores que você definiu não são armazenados em nenhum outro lugar e não podem ser recuperados.", - "resetConfirm": "Redefinir faixa", - "minLabel": "Mín", - "maxLabel": "Máx", - "unitSuffix": "({unit})", - "outOfBoundsHint": "Faixa permitida: {min}–{max} {unit}", - "overrideWarning": "Substituir com valores fora das faixas de diretrizes pode produzir metas não saudáveis. Faça isso apenas com orientação médica.", - "saveSuccess": "Limites atualizados", - "saveError": "Não foi possível salvar os limites", - "resetSuccess": "Redefinido para o padrão", - "sourceOverride": "Substituição do usuário", - "metricWeight": "Peso", - "metricBpSys": "Pressão arterial (sistólica)", - "metricBpDia": "Pressão arterial (diastólica)", - "metricPulse": "Pulso em repouso", - "metricBodyFat": "Gordura corporal", - "metricSleep": "Duração do sono", - "metricSteps": "Passos diários", - "metricGlucoseFasting": "Glicose (em jejum)", - "metricGlucosePostprandial": "Glicose (após refeição)", - "metricGlucoseRandom": "Glicose (aleatória)", - "metricGlucoseBedtime": "Glicose (hora de dormir)", - "metricBodyWater": "Água corporal", - "metricBoneMass": "Massa óssea", - "metricOxygenSaturation": "Saturação de oxigênio (SpO₂)", - "unsetExplanation": "Sem substituição, usando o padrão calculado.", - "cardTitle": "Faixas por métrica" - } - ], - "gettingStarted": [ - { - "title": "Primeiros passos", - "subtitle": "Ganhos rápidos para aproveitar ao máximo o HealthLog.", - "progress": "{done} de {total} concluídos", - "dismissAll": "Ocultar checklist", - "dismissTooltip": "Ocultar este item", - "items": { - "profileTitle": "Configure seu perfil", - "profileDescription": "Altura, data de nascimento e gênero desbloqueiam metas personalizadas.", - "profileCta": "Abrir perfil", - "measurementTitle": "Registre sua primeira medição", - "measurementDescription": "Uma leitura desbloqueia o cartão; a tendência em si começa a ser traçada a partir da sua 5ª leitura.", - "measurementCta": "Adicionar medição", - "medicationTitle": "Adicione um medicamento", - "medicationDescription": "Acompanhe a adesão e receba lembretes bem quando você precisar deles.", - "medicationCta": "Adicionar medicamento", - "dataSourceTitle": "Conecte uma fonte de dados (opcional)", - "dataSourceDescription": "Sincronize automaticamente peso, pressão arterial, sono e mais de Withings, WHOOP, Oura, Polar, Nightscout, Fitbit ou Apple Health.", - "dataSourceCta": "Conectar", - "notificationsTitle": "Configure notificações", - "notificationsDescription": "Escolha como o HealthLog deve lembrá-lo: Telegram, ntfy ou Web Push.", - "notificationsCta": "Abrir notificações", - "insightsTitle": "Ative insights (opcional)", - "insightsDescription": "Adicione um modelo local ou sua própria chave de IA para desbloquear o resumo diário e o Coach.", - "insightsCta": "Ativar insights", - "visitTitle": "Prepare-se para a consulta", - "visitDescription": "Coloque a consulta no calendário; o relatório médico reúne o que levar.", - "visitCta": "Abrir consultas", - "dataSourceNamedTitle": "Conectar {source}", - "managedProfileTitle": "Crie o perfil que você cuida", - "managedProfileDescription": "Suas respostas foram dadas para o registro de outra pessoa; ele é criado em Acesso compartilhado.", - "managedProfileCta": "Criar o perfil" + "thresholds": { + "defaultLabel": "Padrão", + "overrideToggleLabel": "Faixa personalizada", + "resetAction": "Redefinir para o padrão", + "resetAllAction": "Redefinir tudo para o padrão", + "resetAllTitle": "Redefinir todas as faixas personalizadas?", + "resetAllBody": "Todas as métricas voltam para a sua faixa padrão. Os valores que você definiu não são armazenados em nenhum outro lugar e não podem ser recuperados.", + "resetAllConfirm": "Redefinir tudo", + "resetTitle": "Redefinir esta faixa?", + "resetBody": "A métrica volta para a sua faixa padrão. Os valores que você definiu não são armazenados em nenhum outro lugar e não podem ser recuperados.", + "resetConfirm": "Redefinir faixa", + "minLabel": "Mín", + "maxLabel": "Máx", + "unitSuffix": "({unit})", + "outOfBoundsHint": "Faixa permitida: {min}–{max} {unit}", + "overrideWarning": "Substituir com valores fora das faixas de diretrizes pode produzir metas não saudáveis. Faça isso apenas com orientação médica.", + "saveSuccess": "Limites atualizados", + "saveError": "Não foi possível salvar os limites", + "resetSuccess": "Redefinido para o padrão", + "sourceOverride": "Substituição do usuário", + "metricWeight": "Peso", + "metricBpSys": "Pressão arterial (sistólica)", + "metricBpDia": "Pressão arterial (diastólica)", + "metricPulse": "Pulso em repouso", + "metricBodyFat": "Gordura corporal", + "metricSleep": "Duração do sono", + "metricSteps": "Passos diários", + "metricGlucoseFasting": "Glicose (em jejum)", + "metricGlucosePostprandial": "Glicose (após refeição)", + "metricGlucoseRandom": "Glicose (aleatória)", + "metricGlucoseBedtime": "Glicose (hora de dormir)", + "metricBodyWater": "Água corporal", + "metricBoneMass": "Massa óssea", + "metricOxygenSaturation": "Saturação de oxigênio (SpO₂)", + "unsetExplanation": "Sem substituição, usando o padrão calculado.", + "cardTitle": "Faixas por métrica" + }, + "onboarding": { + "errorGeneric": "Algo deu errado ao concluir a configuração. Tente novamente.", + "tour": { + "stepOf": "Etapa {current} de {total}", + "next": "Próximo", + "back": "Voltar", + "skip": "Pular tour", + "done": "Entendi", + "steps": { + "dashboardOverview": { + "title": "Seu painel", + "body": "O painel reúne todos os módulos de relance. Pressione longamente um bloco para reordenar ou ocultá-lo (Configurações → Layout do painel). Cada bloco só é tão informativo quanto os dados por trás dele, e os módulos à frente os preenchem." + }, + "quickAdd": { + "title": "Registrado em segundos", + "body": "Use “+ Adicionar” para registrar qualquer leitura em segundos: peso, pressão arterial, pulso, glicose. Força oculta: retrodate leituras que esqueceu de inserir. Tudo que registra aqui alimenta tendências, a pontuação de saúde e os insights de IA." + }, + "measurements": { + "title": "Leituras e faixas alvo", + "body": "Medições mostra o histórico e a faixa alvo de cada métrica. Joia oculta: defina uma faixa alvo por valor para que desvios se destaquem em cor. Essas séries são a base para as correlações do Coach e o relatório médico." + }, + "medications": { + "title": "Medicamentos e doses", + "body": "Medicamentos gerencia cronogramas, doses, estoque e titulação. Ocultos: planos recorrentes sincronizados de outros aplicativos (regras RRULE) e alertas de estoque baixo. Sua taxa de doses registradas alimenta o pilar de adesão no painel e o contexto da IA." + }, + "labs": { + "title": "Valores laboratoriais", + "body": "Exames captura biomarcadores com faixas de referência: hemograma, colesterol, HbA1c. Força: importação e exportação FHIR. Valores laboratoriais fora da faixa ressurgem como evidência nos insights e no relatório médico." + }, + "illness": { + "title": "Diário de doenças", + "body": "O diário de doenças registra episódios agudos e diagnósticos crônicos com seus surtos. Oculto: correlacione um episódio com suas leituras e o Modo de Repouso que pausa lembretes. É assim que o Coach entende por que os valores oscilam por um tempo." + }, + "vorsorge": { + "title": "Checks", + "body": "Checks lembram você de triagens e vacinas no seu próprio intervalo. Dica: “Concluído” pode criar uma leitura ou resultado laboratorial diretamente. Itens previstos aparecem como lembretes e no relatório médico." + }, + "cycle": { + "title": "Ciclo", + "body": "O acompanhamento do ciclo registra fases e sintomas. Oculto: compare sintomas com humor e sono. O ciclo dá contexto para oscilações que de outra forma pareceriam inexplicáveis." + }, + "mood": { + "title": "Humor", + "body": "Humor captura como você se sente mais tags em dois segundos. Força: suas próprias tags. Tendências de humor se correlacionam com sono, medicamentos e ciclo, e o Coach identifica os padrões." + }, + "insights": { + "title": "Insights", + "body": "Insights é o coração disso: análise dinâmica baseada em evidências em vez de dicas genéricas. Cada afirmação aponta para seus dados reais. Oculto: o layout é personalizável. Insights reúne tudo que os módulos acima fornecem." + }, + "coach": { + "title": "Coach", + "body": "O Coach responde perguntas sobre seus dados em diálogo, usando seu histórico, medicamentos e valores laboratoriais como contexto. Escolha seu provedor de IA você mesmo (sua própria chave ou local). Ele não recalcula nada; lê os mesmos números que o painel." + }, + "integrations": { + "title": "Integrações", + "body": "Integrações sincronizam Withings, WHOOP, Polar, Oura e Apple Health automaticamente. Peso, sono e recuperação se preenchem sem digitação manual e alimentam os insights e o Coach por sua vez." + }, + "export": { + "title": "Relatório médico", + "body": "O relatório médico reúne leituras, medicamentos, valores laboratoriais e checks em PDF ou FHIR para a consulta. É aqui que todos os módulos convergem: um relatório completo só vem de dados bem mantidos." + }, + "achievements": { + "title": "Conquistas", + "body": "Conquistas recompensam consistência: sequências e marcos. Um pequeno ciclo de motivação que facilita manter o hábito." + }, + "wrapUp": { + "title": "Esse é o tour", + "body": "Este passo a passo roda uma vez e não reabre sozinho. Tudo que cobriu permanece, e você pode ligar ou desligar recursos a qualquer momento em Configurações → Módulos." + } + } + }, + "shell": { + "back": "Voltar", + "skip": "Pular", + "next": "Continuar", + "stepOf": "Etapa {current} de {total}", + "stepsLabel": "Etapas de configuração" + }, + "baseline": { + "title": "Um pouco sobre você", + "body": "Quatro campos opcionais refinam faixas alvo, IMC e lembretes. Você pode ajustar qualquer um deles depois nas Configurações.", + "displayNameLabel": "Nome de exibição", + "displayNamePlaceholder": "Como o HealthLog deve se dirigir a você?", + "displayNameHint": "Exibido na saudação do painel e em relatórios.", + "heightLabel": "Altura (cm)", + "heightLabelFtIn": "Altura (ft, in)", + "genderLabel": "Gênero", + "genderNone": "Prefiro não dizer", + "genderMale": "Masculino", + "genderFemale": "Feminino", + "genderOther": "Outro", + "dateOfBirthLabel": "Data de nascimento", + "dateOfBirthHint": "Usado apenas para análises conscientes da idade." + }, + "done": { + "title": "Você está pronto", + "body": "Bem-vindo a bordo. Seu painel está pronto.", + "returnCta": "Abrir painel", + "learning": "Alguns insights (glicose, ritmo do sono, tendências de pressão arterial, ciclo) se refinam na primeira ou segunda semana conforme seus dados se acumulam. Blocos vazios agora só significam que ainda estamos aprendendo seu baseline.", + "connectCta": "Conectar um dispositivo", + "logCta": "Registrar sua primeira medição", + "importCta": "Importar histórico existente", + "modulesCta": "Escolher seus módulos" + }, + "welcomeBack": { + "title": "Bem-vindo de volta", + "cta": "Abrir painel" + }, + "disclaimer": { + "acknowledge": "Entendo: o HealthLog é uma ferramenta privada de acompanhamento, não uma avaliação clínica ou diagnóstico. Se eu estiver preocupado, falarei com meu médico, não com este aplicativo.", + "learnMore": "Saiba mais" + }, + "anamnesis": { + "title": "Sobre sua saúde (opcional)", + "subtitle": "Um pouco de contexto para o HealthLog ler seus números com mais justiça.", + "intro": "Compartilhe tanto ou pouco quanto quiser. Cada campo é opcional e você pode editá-lo a qualquer momento nas Configurações.", + "conditionsLabel": "Condições em curso", + "conditionsPlaceholder": "ex.: pressão alta, diabetes tipo 2", + "conditionsHint": "Ajuda o HealthLog a enquadrar suas leituras em contexto em vez de sinalizar o esperado.", + "allergiesLabel": "Alergias ou intolerâncias", + "allergiesPlaceholder": "ex.: penicilina, lactose", + "privacyNote": "Armazenado criptografado e usado apenas para dar melhor contexto. Não pedimos seus medicamentos aqui. Adicione-os a qualquer momento na página Medicamentos." + }, + "ai": { + "panelTitle": "Veja como os insights ficam", + "panelIntro": "Coach, o briefing diário e as leituras por métrica transformam seus próprios números em linguagem simples. Aqui está a forma disso, antes de conectar qualquer coisa.", + "showSample": "Ver um briefing de exemplo", + "sampleTitle": "Briefing Diário", + "sampleTag": "Exemplo", + "sampleAriaLabel": "Exemplo de briefing diário", + "sampleBody": "Peso caiu 1,2 kg em duas semanas. Pulso em repouso estável em 58 bpm. Pressão arterial na faixa em 6 de 7 dias; a única leitura alta seguiu um jantar tardio e salgado.", + "sampleCaption": "Apenas exemplo, não seus próprios dados. É assim que um briefing lê quando os insights estão ligados.", + "ladderTitle": "Três formas de ligar", + "ladderLocalTitle": "Modelo local: solicitações de IA permanecem na sua rede", + "ladderLocalBody": "Aponte o HealthLog para Ollama ou LM Studio na sua própria máquina. Gratuito e totalmente privado, o padrão tranquilo.", + "ladderByokTitle": "Traga sua própria chave", + "ladderByokBody": "Use sua própria chave OpenAI ou Anthropic. Roda sob sua conta e cobrança, e o nível de API mantém seus dados fora de treinamento por padrão.", + "ladderOauthTitle": "Entre com uma assinatura", + "ladderOauthBody": "Conecte uma conta ChatGPT. Sem custo por token, mas os termos do nível consumidor podem usar conteúdo para treinamento, então é uma escolha deliberada, nunca o padrão para seus dados de saúde.", + "keylessLine": "O HealthLog é totalmente útil sem IA. Seus blocos, gráficos, tendências e exportações funcionam. A IA só adiciona a leitura em linguagem simples por cima.", + "setupCta": "Configurar (cerca de um minuto)", + "sharedKeyNote": "Esta instância já fornece um provedor de IA compartilhado, então os insights funcionam para você agora, sem configuração.", + "offer": { + "title": "Esta instância pode escrever seu resumo em linguagem simples.", + "body": "O operador fornece um provedor que funcionou pela última vez nas últimas 24 horas. Um toque liga a leitura em linguagem simples; seus dados vão para esse único provedor e para ninguém mais.", + "cta": "Ligar linguagem simples", + "granted": "Ligado. O primeiro resumo aparece no seu painel.", + "error": "Ligar não funcionou. Tente novamente em instantes." + }, + "unavailable": { + "title": "O provedor desta instância não está respondendo agora.", + "body": "O HealthLog é totalmente útil sem a leitura em linguagem simples. Você pode adicionar um provedor próprio mais tarde nas Configurações." + } + }, + "steps": { + "who": "Para quem é este registro", + "areas": "Em que prestar atenção", + "medication": "Medicamento", + "sources": "De onde vêm as leituras", + "visit": "Consulta médica", + "units": "Unidades", + "confirm": "Confirmar", + "first-result": "Primeiro resultado", + "done": "Concluído" + }, + "flow": { + "welcome": { + "title": "Bem-vindo ao HealthLog", + "body": "Cinco perguntas curtas decidem o que o HealthLog mostra primeiro. Leva cerca de dois minutos.", + "changeLater": "Nada é definitivo: cada escolha pode ser alterada depois nas Configurações.", + "setUp": "Configurar", + "skip": "Pular por agora", + "againBody": "Sua configuração está concluída. Responda às perguntas novamente para mudar o que o HealthLog mostra primeiro, ou vá ao painel.", + "setUpAgain": "Configurar novamente" + }, + "who": { + "title": "Para quem é este registro?", + "body": "As respostas a seguir se aplicam a este registro.", + "options": { + "me": "Eu", + "someone-else": "Alguém de quem cuido", + "both": "Ambos" + }, + "hints": { + "someone-else": "Uma criança ou um pai, por exemplo. O perfil dela é criado no fim.", + "both": "Configure seu próprio registro agora; o perfil da outra pessoa é oferecido no fim." + } + }, + "areas": { + "title": "Em que quer prestar atenção?", + "body": "Escolha quantos quiser. Eles decidem quais módulos estão ligados e o que o painel mostra primeiro.", + "options": { + "blood-pressure": "Pressão arterial", + "weight-body": "Peso e corpo", + "glucose": "Glicemia", + "sleep": "Sono e recuperação", + "mood": "Humor e bem-estar mental", + "cycle": "Ciclo", + "activity": "Atividade e treinos", + "labs": "Resultados laboratoriais", + "illness": "Doenças e sintomas" + } + }, + "medication": { + "title": "Você toma medicamentos em um cronograma?", + "body": "Um cronograma liga o módulo de medicamentos e os lembretes.", + "options": { + "yes": "Sim", + "no": "Não", + "sometimes": "Às vezes" + } + }, + "sources": { + "title": "De onde vêm suas leituras hoje?", + "body": "Escolha quantos quiser. Uma conexão é oferecida no fim; nenhuma é obrigatória.", + "options": { + "manual": "Eu digito", + "apple-health": "Apple Health no meu iPhone", + "withings": "Withings", + "oura": "Oura", + "whoop": "WHOOP", + "polar": "Polar", + "fitbit": "Fitbit", + "strava": "Strava", + "nightscout": "Nightscout", + "file": "Um arquivo que já tenho" + }, + "hints": { + "apple-health": "Sincronizado pelo aplicativo iOS ou importado de uma exportação.", + "file": "Importado nas Configurações quando terminar aqui." + } + }, + "visit": { + "title": "Há uma consulta médica se aproximando?", + "body": "Uma consulta liga o relatório médico e adiciona preparar-se para ela à sua lista.", + "options": { + "within-a-month": "Sim, dentro de um mês", + "later": "Mais tarde", + "no": "Não" + } + }, + "units": { + "title": "Quais unidades você usa?", + "body": "As leituras são armazenadas uma vez e exibidas na unidade que você escolher. Pode mudar depois nas Configurações.", + "glucoseLegend": "Glicemia", + "weightLegend": "Peso e altura", + "options": { + "metric": "kg e cm", + "imperial": "lb e ft/in" + } + }, + "confirm": { + "title": "Aqui está o que suas respostas ligam", + "body": "Uma olhada e o HealthLog está configurado. Nada aqui é definitivo.", + "modulesTitle": "Módulos", + "switchedOn": "Ligados: {modules}.", + "nothingExtra": "Suas respostas não ligam nenhum módulo extra; as leituras centrais estão sempre lá.", + "alwaysOn": "Sempre ligados: {modules} e as leituras centrais (peso, pressão arterial, pulso).", + "everythingElse": "Todo o resto fica a um clique de distância em", + "modulesLink": "Configurações, Módulos", + "switchesOff": "Fora da navegação: {modules}. Você pode ligar qualquer um deles novamente em Configurações, Módulos.", + "glucoseUnit": "Glicemia", + "unitPreference": "Unidades", + "language": "Idioma", + "timezone": "Fuso horário", + "changeInSettings": "Mude em Configurações, Conta", + "cta": "Confirmar e continuar", + "managedTitle": "A pessoa de quem você cuida", + "managedBody": "O registro dela não tem login próprio; você cuida dele pela sua conta. É necessário um segundo fator ou chave de acesso na sua conta para criá-lo.", + "managedCreate": "Criar o perfil e concluir", + "managedLater": "Você também pode criá-lo depois em Configurações, Acesso compartilhado.", + "finishWithoutProfile": "Concluir sem o perfil" + }, + "first-result": { + "connect-source": { + "title": "Conectar {target}", + "body": "Uma conexão, escolhida a partir das suas respostas. As leituras então chegam sozinhas.", + "howTo": "A conexão com {target} é feita na página de integrações. Volte aqui depois; esta tela percebe quando está concluída.", + "cta": "Conectar {target}", + "checking": "Verificando a conexão.", + "waiting": "Ainda não conectado.", + "openSettings": "Abrir Configurações → Integrações", + "noDate": "desconhecido", + "needsCredentials": { + "title": "Esta instância ainda não tem um aplicativo {target} registrado.", + "detail": "Insira suas próprias credenciais em Configurações → Integrações, então a conexão pode começar." + }, + "state": { + "pending_first_sync": { + "title": "{target} está conectado.", + "detail": "A primeira sincronização está em andamento. As leituras aparecem no painel conforme chegam." + }, + "fresh": { + "title": "{target} já está conectado.", + "detail": "Última leitura {when}. Nada a fazer aqui." + }, + "stale": { + "title": "{target} está conectado, mas nada está chegando agora.", + "detail": "Última leitura {when}. A conexão em si está boa." + }, + "stalled": { + "title": "{target} está conectado, mas parou de sincronizar.", + "detail": "Última tentativa {when}. Verifique a conexão em Configurações → Integrações." + }, + "failing": { + "title": "{target} está conectado, mas a sincronização continua falhando.", + "detail": "Nada chegou desde {when}. Verifique a conexão em Configurações → Integrações." + }, + "reauth_required": { + "title": "A conexão com {target} precisa ser renovada.", + "detail": "Entre mais uma vez e as leituras continuam." + }, + "parked": { + "title": "A conexão com {target} está pausada.", + "detail": "Verifique a conexão em Configurações → Integrações." + } + } + }, + "add-medication": { + "title": "Adicionar seu primeiro medicamento", + "body": "Nome, dose e cronograma; o lembrete segue o cronograma que você definir.", + "howTo": "O medicamento é adicionado em alguns passos curtos. Você pode adicionar mais depois na página de medicamentos.", + "cta": "Adicionar um medicamento", + "done": "{name} foi adicionado.", + "doneUnnamed": "Seu primeiro medicamento foi adicionado.", + "nextDose": "Próxima dose: {when}.", + "reminders": "Os lembretes seguem o cronograma que você definir.", + "recordOnly": "Mantido como registro: sem lembretes, nada fica previsto.", + "asNeeded": "Conforme necessário: sem lembretes, registre uma dose quando tomar." + }, + "log-reading": { + "title": "Insira uma leitura: {target}", + "body": "Uma leitura coloca o primeiro valor no seu painel. A tendência se desenha a partir da quinta.", + "done": "Sua primeira leitura está no bloco dela.", + "doneElsewhere": "Sua primeira entrada para {target} está registrada.", + "elsewhere": "{target} tem sua própria página. Abra-a, faça a primeira entrada, depois volte e marque como concluída.", + "open": "Abrir {target}", + "markDone": "Eu fiz a entrada" + } + }, + "done": { + "tourCta": "Fazer um tour curto", + "openRecord": "Abrir o registro de {name}", + "createProfile": "Criar o perfil da pessoa de quem você cuida" } } - ], - "trendHints": [ - { - "title": "Primeira tendência após 5 leituras", - "remainingOne": "Falta 1 leitura.", - "remainingMany": "Faltam {count} leituras." + }, + "gettingStarted": { + "title": "Primeiros passos", + "subtitle": "Ganhos rápidos para aproveitar ao máximo o HealthLog.", + "progress": "{done} de {total} concluídos", + "dismissAll": "Ocultar checklist", + "dismissTooltip": "Ocultar este item", + "items": { + "profileTitle": "Configure seu perfil", + "profileDescription": "Altura, data de nascimento e gênero desbloqueiam metas personalizadas.", + "profileCta": "Abrir perfil", + "measurementTitle": "Registre sua primeira medição", + "measurementDescription": "Uma leitura desbloqueia o cartão; a tendência em si começa a ser traçada a partir da sua 5ª leitura.", + "measurementCta": "Adicionar medição", + "medicationTitle": "Adicione um medicamento", + "medicationDescription": "Acompanhe a adesão e receba lembretes bem quando você precisar deles.", + "medicationCta": "Adicionar medicamento", + "dataSourceTitle": "Conecte uma fonte de dados (opcional)", + "dataSourceDescription": "Sincronize automaticamente peso, pressão arterial, sono e mais de Withings, WHOOP, Oura, Polar, Nightscout, Fitbit ou Apple Health.", + "dataSourceCta": "Conectar", + "notificationsTitle": "Configure notificações", + "notificationsDescription": "Escolha como o HealthLog deve lembrá-lo: Telegram, ntfy ou Web Push.", + "notificationsCta": "Abrir notificações", + "insightsTitle": "Ative insights (opcional)", + "insightsDescription": "Adicione um modelo local ou sua própria chave de IA para desbloquear o resumo diário e o Coach.", + "insightsCta": "Ativar insights", + "visitTitle": "Prepare-se para a consulta", + "visitDescription": "Coloque a consulta no calendário; o relatório médico reúne o que levar.", + "visitCta": "Abrir consultas", + "dataSourceNamedTitle": "Conectar {source}", + "managedProfileTitle": "Crie o perfil que você cuida", + "managedProfileDescription": "Suas respostas foram dadas para o registro de outra pessoa; ele é criado em Acesso compartilhado.", + "managedProfileCta": "Criar o perfil" } - ], + }, + "trendHints": { + "title": "Primeira tendência após 5 leituras", + "remainingOne": "Falta 1 leitura.", + "remainingMany": "Faltam {count} leituras." + }, + "settings": { + "oauthCallbackPreflightItem": "{provider}: o endereço de callback {configuredOrigin} difere do endereço deste aplicativo {currentOrigin}.", + "shell": { + "sectionsNav": "Seções de configurações", + "groups": { + "account": "Conta", + "yourData": "Seus dados", + "healthProfile": "Perfil de saúde", + "ai": "IA", + "connectivity": "Conectividade", + "system": "Sistema" + } + }, + "sharedRecord": { + "managedSettings": { + "saveError": "Não foi possível salvar. Tente novamente.", + "validationError": "Verifique suas entradas.", + "profile": { + "title": "Perfil", + "displayName": "Nome de exibição", + "height": "Altura (cm)", + "dateOfBirth": "Data de nascimento", + "gender": "Gênero", + "notSpecified": "Não especificado", + "male": "Masculino", + "female": "Feminino", + "other": "Outro", + "locale": "Localidade", + "systemDefault": "Padrão do sistema", + "timezone": "Fuso horário", + "units": "Unidades", + "metric": "Métrico", + "imperial": "Imperial", + "timeFormat": "Formato de hora", + "automatic": "Automático", + "hour12": "12 horas", + "hour24": "24 horas", + "dateFormat": "Formato de data", + "dateDmy": "Dia / mês / ano", + "dateMdy": "Mês / dia / ano", + "dateYmd": "Ano / mês / dia" + }, + "modules": { + "title": "Módulos" + }, + "notifications": { + "title": "Notificações", + "moodReminder": "Ativar lembrete de humor", + "reminderHour": "Horário do lembrete de humor", + "lowStockRunwayDays": "Dias de estoque baixo", + "reorderLeadDays": "Dias de antecedência para repedido" + }, + "thresholds": { + "title": "Metas", + "metric": "Métrica", + "minimum": "Mínimo", + "maximum": "Máximo" + }, + "coach": { + "title": "Coach", + "disable": "Desativar Coach", + "tone": "Tom", + "warm": "Acolhedor", + "neutral": "Neutro", + "concise": "Conciso", + "verbosity": "Verbosidade", + "brief": "Breve", + "default": "Padrão", + "detailed": "Detalhado", + "excludedMetrics": "Métricas excluídas", + "dataClusters": "Grupos de dados", + "customClusters": "Usar uma seleção personalizada de grupos", + "metrics": { + "bp": "Pressão arterial", + "weight": "Peso", + "pulse": "Pulso", + "mood": "Humor", + "compliance": "Adesão a medicamentos", + "hrv": "Variabilidade da frequência cardíaca", + "sleep": "Sono", + "restingHr": "Frequência cardíaca em repouso", + "steps": "Passos", + "medications": "Medicamentos", + "anthropometrics": "Medidas corporais" + }, + "clusters": { + "cardio": "Saúde cardiovascular", + "body": "Composição corporal", + "activity": "Atividade", + "workouts": "Treinos", + "sleep": "Sono", + "mood": "Humor", + "glucose": "Glicose", + "medication": "Medicamento", + "mobility": "Mobilidade", + "environment": "Ambiente" + } + }, + "insights": { + "title": "Insights", + "sections": "Seções de visão geral", + "tiles": "Blocos de navegação", + "order": "Ordem", + "unknownItem": "Insight indisponível", + "sectionLabels": { + "wellnessScores": "Pontuações de bem-estar", + "dailyBriefing": "Resumo diário", + "vitals": "Sinais vitais", + "trends": "Tendências", + "periodReview": "Revisão do período", + "cycleSummary": "Resumo do ciclo", + "signals": "Sinais", + "rhythmEvents": "Eventos de ritmo", + "healthStatus": "Estado de saúde", + "breathing": "Respiração", + "labsChanges": "Alterações em exames", + "ecg": "ECG" + } + } + }, + "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.", + "integrationStatusDocs": "Como funciona o compartilhamento" + }, + "sections": { + "account": { + "title": "Conta", + "subtitle": "Seu perfil, identidade e dados de login." + }, + "integrations": { + "title": "Integrações", + "subtitle": "Conecte e gerencie suas fontes de dados e dispositivos.", + "connectionsHeading": "Conexões", + "channelsHeading": "Canais de entrega", + "channelsDescription": "Onde lembretes e alertas são entregues.", + "matrixLink": "Notificações por canal" + }, + "notifications": { + "title": "Notificações", + "subtitle": "Escolha quais lembretes você recebe e onde eles são entregues.", + "remindersHeading": "Lembretes", + "matrixLink": "Notificações por canal", + "channelsLink": "Canais de entrega", + "displayHeading": "No seu celular", + "elsewhere": { + "doses": {}, + "cycle": {} + } + }, + "layout": { + "title": "Layout", + "backToHub": "Voltar ao Layout", + "dashboard": { + "title": "Painel", + "description": "Layout e ordem dos blocos." + }, + "insights": { + "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.", + "medications": { + "title": "Medicamentos", + "description": "Visualização em lista e ordem manual." + }, + "labs": { + "title": "Exames", + "description": "Visualização, ordenação e ordem manual." + }, + "illness": { + "title": "Diário de doenças", + "description": "Visualização em lista e ordem dos episódios." + }, + "vorsorge": { + "title": "Check-ups", + "description": "Visualização em lista e ordem dos lembretes." + }, + "documents": { + "title": "Documentos", + "description": "Visualização e disposição por mês." + } + }, + "dashboard": { + "subtitle": "Organize os blocos do seu painel." + }, + "thresholds": { + "title": "Metas", + "subtitle": "Defina suas faixas-alvo pessoais por métrica." + }, + "sources": { + "title": "Prioridade de fontes", + "integrationsHint": "Conecte ou desconecte fontes de dados na página de Integrações.", + "integrationsHintLink": "Abrir integrações", + "cardTitle": "Classificação por métrica", + "help": "Quando várias fontes entregam o mesmo valor no mesmo dia, a fonte mais bem classificada conta como canônica.", + "resetDefaults": "Redefinir para padrões", + "resetDefaultsTitle": "Redefinir a ordem das fontes?", + "resetDefaultsBody": "Toda hierarquia que você organizou volta à ordem padrão, para todas as métricas e tipos de dispositivo de uma vez. Isso é salvo imediatamente e não pode ser desfeito.", + "resetDefaultsConfirm": "Redefinir ordem", + "moveUp": "Mover para cima", + "moveDown": "Mover para baixo", + "saveSuccess": "Prioridade de fontes salva", + "saveError": "Falha ao salvar a prioridade de fontes.", + "resetSuccess": "Prioridade de fontes redefinida para padrões", + "perMetricToggle": "Substituições por métrica ({count})", + "perMetricHelp": "Métricas que você personalizou fora da hierarquia padrão. Use esta lista para reverter qualquer métrica individual ao padrão fixo sem afetar as demais.", + "perMetricEmpty": "Nenhuma substituição por métrica definida. Todas as métricas usam a hierarquia global acima.", + "resetMetric": "Redefinir", + "deviceTypeToggle": "Prioridade por tipo de dispositivo ({count})", + "deviceTypeHelp": "Dentro de uma fonte, qual dispositivo prevalece. Quando um Apple Watch e um iPhone registram passos, o tipo de dispositivo mais bem classificado conta como a leitura canônica.", + "deviceTypeDefault": "Hierarquia padrão por tipo de dispositivo", + "resetDeviceTypes": "Redefinir tipos de dispositivo", + "metrics": { + "steps": "Passos", + "activeEnergy": "Energia ativa", + "walkingRunningDistance": "Distância caminhada + corrida", + "flightsClimbed": "Andares subidos", + "sleep": "Sono", + "weight": "Peso", + "bloodPressure": "Pressão arterial", + "pulse": "Pulso", + "bodyFat": "Gordura corporal", + "bodyTemperature": "Temperatura corporal", + "spo2": "Saturação de oxigênio", + "hrv": "Variabilidade da frequência cardíaca", + "restingHeartRate": "Frequência cardíaca em repouso", + "vo2Max": "VO2 máx", + "skinTemperature": "Temperatura da pele", + "respiratoryRate": "Frequência respiratória", + "recovery": "Recuperação", + "stress": "Estresse", + "sleepDebt": "Déficit de sono", + "hrvRmssd": "VFC (RMSSD)" + }, + "sourceLabels": { + "WITHINGS": "Withings", + "APPLE_HEALTH": "Apple Health", + "MANUAL": "Entrada manual", + "IMPORT": "Importação", + "WHOOP": "WHOOP", + "FITBIT": "Fitbit", + "COMPUTED": "Calculado", + "NIGHTSCOUT": "Nightscout", + "POLAR": "Polar", + "OURA": "Oura", + "TELEGRAM": "Telegram", + "MCP": "MCP", + "GOOGLE_HEALTH": "Google Health", + "STRAVA": "Strava", + "EXTERNAL": "Dispositivo externo", + "HEALTH_CONNECT": "Health Connect" + }, + "deviceLabels": { + "watch": "Relógio", + "band": "Pulseira", + "ring": "Anel", + "phone": "Celular", + "scale": "Balança", + "other": "Outro", + "unknown": "Desconhecido" + }, + "subtitle": "Decida qual fonte prevalece quando duas informam a mesma métrica.", + "nutrients": { + "title": "Ingestão de nutrientes sincronizada", + "description": "Totais diários nos últimos {days} dias: o que o Apple Health sincronizou mais os suplementos que você tomou.", + "empty": "Nenhum dado de nutrientes foi sincronizado ainda.", + "latest": "{amount} {unit} em {date}", + "daysWithData": "{count} de {days} dias", + "moduleHint": "A sincronização é controlada pelo módulo Ingestão de nutrientes.", + "moduleHintLink": "Gerenciar módulos", + "detail": "Somente leitura: o aplicativo de origem é o dono dos números." + }, + "helpDetail": "As demais permanecem armazenadas para fins de auditoria. Apenas as fontes que você conectou ou das quais há dados são listadas.", + "noneInUse": "Nenhuma fonte para classificar ainda. Conecte uma em Integrações ou registre um valor." + }, + "ai": { + "title": "Provedor de IA", + "subtitle": "Escolha seu provedor de IA e use sua própria chave." + }, + "api": { + "title": "API e tokens", + "subtitle": "Gerencie endpoints de API e tokens de acesso." + }, + "advanced": { + "title": "Avançado", + "subtitle": "Redefinição de dados e exclusão da conta." + }, + "export": { + "title": "Exportar e importar", + "otherOptionsHeading": "Outras opções de exportação", + "downloadFailed": "Não foi possível baixar a exportação. Tente novamente.", + "actions": { + "download": "Baixar" + }, + "filters": { + "since": "De", + "until": "Até" + }, + "cards": { + "measurementsCsv": { + "title": "Medições", + "description": "Peso, pressão arterial, pulso, glicose e todas as outras medições em valores separados por vírgula." + }, + "medicationsCsv": { + "title": "Medicamentos", + "description": "Sua lista de medicamentos com dosagem, cronogramas e (opcionalmente) o histórico completo de doses.", + "includeIntake": "Incluir histórico de doses" + }, + "moodCsv": { + "title": "Humor", + "description": "Registros diários de humor com pontuação, tags e horários." + }, + "fullBackup": { + "title": "Backup completo", + "description": "Todo o seu registro em um único arquivo JSON.", + "scopeNote": "Os metadados dos documentos e o resumo gerado por IA, se houver, são incluídos como texto simples; os arquivos originais dos documentos e os dados de GPS/amostras dos treinos não. Baixe esses itens separadamente no cofre ou na exportação de treinos.", + "encryptToggle": "Criptografar com uma frase-senha", + "passphrasePlaceholder": "Frase-senha (mín. 12 caracteres)", + "passphraseHelp": "Deriva a chave do arquivo com Argon2id e a sela com AES-256-GCM. Salve o arquivo com a extensão .hlx.", + "noRecoveryWarning": "Não há recuperação. Se você perder esta frase-senha, o arquivo não poderá ser aberto. Guarde-a em um lugar seguro.", + "detail": "Mesmo formato do backup automático semanal. Alguns tipos de registro ainda não são incluídos; o manifesto do arquivo indica o que está nele.", + "contents": "Suas medições, medicamentos, humor, ciclo, exames, episódios de doença, alergias, histórico familiar, nutrientes, treinos, perfil de saúde e métricas personalizadas em um único arquivo JSON." + } + }, + "import": { + "heading": "Importar", + "description": "Traga dados para o HealthLog de uma exportação do Apple Health, um arquivo JSON ou um CSV. As importações pulam linhas que já existem, então executar novamente é seguro.", + "charCount": "{used} / {max} caracteres", + "appleHealth": { + "title": "Apple Health", + "description": "Envie o export.zip do aplicativo Saúde no iPhone (Perfil → Exportar Todos os Dados de Saúde).", + "dropLabel": "Arraste o export.zip para cá", + "dropHint": "ou clique para escolher um arquivo", + "fileInputLabel": "Escolha um arquivo export.zip do Apple Health", + "choose": "Escolher arquivo", + "idempotencyNote": "Reenviar o mesmo arquivo o mescla e não cria duplicatas. Arquivos grandes são processados em segundo plano.", + "uploading": "Enviando…", + "uploadFailed": "Falha no envio. Tente novamente.", + "rateLimited": "Envios demais. Espere um momento e tente novamente.", + "tooLarge": "Esse arquivo é grande demais (limite de 1,5 GB).", + "failed": "A importação falhou.", + "failureInterrupted": "A importação foi interrompida antes de terminar, geralmente por uma reinicialização do servidor ou por falta de memória. Seus dados estão seguros; envie a exportação novamente para tentar de novo.", + "failureInsufficientMemory": "O limite de memória do servidor é baixo demais para um arquivo desse tamanho. Peça a quem administra o servidor para aumentar o limite de heap do Node.js (NODE_OPTIONS=--max-old-space-size) e envie a exportação novamente.", + "rowsImported": "{count} linhas importadas até agora", + "doneSummary": "Concluído: {imported} de {read} registros importados, {skipped} registros clínicos pulados.", + "doneNothing": "Nada foi importado desse arquivo: 0 de {read} registros foram processados.", + "writtenByHealthLogOne": "{count} registro que o próprio HealthLog gravou no Apple Health foi deixado de fora, porque já está nos seus dados.", + "writtenByHealthLogOther": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", + "writtenByHealthLogFew": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", + "ecgResult": "ECGs: {discovered} descobertos, {imported} importados, {updated} atualizados, {skipped} pulados, {failed} falharam. Falhas de ECG não descartam registros compatíveis importados do export.xml.", + "estimateWarning": "Os totais acumulados de {count} dia(s) foram estimados a partir da maior fonte de exportação. As estatísticas nativas do Apple Health continuam sendo a referência.", + "phase": { + "queued": "Na fila…", + "unpacking": "Descompactando o arquivo…", + "parsing": "Lendo a exportação…", + "upserting": "Importando registros…" + }, + "skipUnsupported": "{count} amostras puladas: tipos de dados que o HealthLog não importa.", + "skipRefused": "{count} amostras não puderam ser gravadas (ilegíveis, fora da faixa ou falha ao salvar).", + "skipBreakdown": "Mostrar detalhamento ({count} tipos)", + "skipBreakdownMore": "+ {count} tipos a mais", + "cycleSummary": "{samples} amostras de ciclo mescladas em {days} registros diários.", + "cycleModuleOff": "{count} amostras de ciclo puladas porque o acompanhamento do ciclo está desligado para esta conta.", + "cycleDaysFailed": "{count} dias de ciclo não puderam ser gravados: {reason}" + }, + "json": { + "title": "Arquivo JSON", + "description": "Cole um JSON ou envie um arquivo .json com medições e registros de humor.", + "pasteLabel": "Cole o JSON", + "fileInputLabel": "Escolha um arquivo JSON para importar", + "schemaHint": "Dois arrays: measurements e moodEntries.", + "docsLink": "Veja o esquema e um exemplo.", + "uploadFile": "Enviar arquivo", + "downloadExample": "Baixar exemplo", + "import": "Importar", + "invalidJson": "Isso não é um JSON válido. Verifique a sintaxe e tente novamente.", + "invalidPayload": "Os dados não correspondem ao esquema de importação.", + "rateLimited": "Importações demais nesta hora (limite de 5). Tente novamente mais tarde.", + "failed": "A importação falhou. Tente novamente.", + "readFailed": "Não foi possível ler esse arquivo.", + "resultSummary": "Importadas {measurements} medições e {moods} registros de humor, {skipped} pulados.", + "resultSuccess": "Importadas {measurements} medições e {moods} registros de humor", + "resultNothing": "Nada foi importado. Todas as {skipped} entradas foram puladas.", + "resultEmpty": "Esse arquivo não continha medições nem registros de humor." + }, + "csv": { + "title": "Arquivo CSV", + "description": "Importe medições de uma planilha ou da exportação de um medidor.", + "pasteLabel": "Cole o CSV", + "fileInputLabel": "Escolha um arquivo CSV para importar", + "schemaHint": "Colunas: type, value, unit, measuredAt (com offset de fuso horário) e, opcionalmente, glucoseContext, notes, externalId.", + "docsLink": "Veja o esquema de colunas e um exemplo.", + "uploadFile": "Enviar arquivo", + "downloadExample": "Baixar exemplo", + "preview": "Pré-visualizar", + "import": "Importar", + "empty": "Adicione pelo menos uma linha de CSV antes de importar.", + "rateLimited": "Importações demais nesta hora (limite de 5). Tente novamente mais tarde.", + "tooLarge": "Esse arquivo é grande demais (limite de 16 MB).", + "invalidPayload": "O CSV não pôde ser interpretado. Verifique a linha de cabeçalho e tente novamente.", + "failed": "A importação falhou. Tente novamente.", + "readFailed": "Não foi possível ler esse arquivo.", + "previewSummary": "Pré-visualização: {inserted} seriam importados, {skipped} pulados.", + "resultSummary": "Importados {inserted} novos e atualizados {updated}, {skipped} pulados.", + "rowError": "Linha {line}: {reason}", + "resultSuccess": "Importados {inserted} novos e atualizados {updated}", + "resultNothing": "Nada foi importado. Todas as {skipped} linhas foram puladas.", + "resultEmpty": "Esse arquivo tem cabeçalho, mas nenhuma linha de dados.", + "previewSuccess": "Pré-visualização: {inserted} seriam importados", + "previewNothing": "Pré-visualização: nada seria importado. Todas as {skipped} linhas seriam puladas.", + "skipGroupOne": "{count} linha pulada: {reason}", + "skipGroupFew": "{count} linhas puladas: {reason}", + "skipGroupOther": "{count} linhas puladas: {reason}", + "skipDetails": "Mostrar todas as linhas puladas", + "reasonUnknownType": "tipo de medição desconhecido", + "reasonInvalidValue": "o valor não é um número", + "reasonValueOutOfRange": "valor fora da faixa plausível", + "reasonUnknownUnit": "unidade não reconhecida para este tipo", + "reasonMissingTimezoneOffset": "o horário não tem offset de fuso horário", + "reasonInvalidTimestamp": "o horário não pôde ser lido", + "reasonImplausibleTimestamp": "o horário está no futuro ou antes de 1900", + "reasonUnexpectedGlucoseContext": "contexto de glicose definido em uma linha que não é glicemia", + "reasonInvalidGlucoseContext": "o contexto de glicose não é um dos valores permitidos", + "reasonNotesTooLong": "a nota é longa demais", + "reasonExternalIdTooLong": "o ID externo é longo demais", + "reasonUnstableExternalId": "o ID externo não é estável entre exportações", + "reasonDuplicate": "já importado", + "reasonUnknown": "pulada", + "detail": "Uma linha por leitura." + }, + "doseHistory": { + "title": "Histórico de doses de medicamentos", + "description": "Um histórico de doses exportado de outro aplicativo de medicamentos, lido como vem.", + "pasteLabel": "Cole a exportação", + "fileInputLabel": "Escolha um arquivo de exportação de histórico de doses", + "uploadFile": "Escolher arquivo", + "preview": "Pré-visualizar", + "import": "Importar", + "empty": "Cole a exportação ou escolha um arquivo primeiro.", + "readFailed": "Não foi possível ler esse arquivo.", + "rateLimited": "Máximo de 5 importações por hora. Tente novamente mais tarde.", + "tooLarge": "Esse arquivo excede o limite de 16 MB.", + "inProgress": "Uma importação de histórico de doses já está em andamento. Espere ela terminar.", + "workerUnavailable": "O worker em segundo plano não está disponível, então nada foi importado.", + "failed": "A importação falhou. Nada foi gravado.", + "columnsHeading": "O que cada coluna faz", + "jsonOnly": "Somente JSON", + "previewLine": "{rows} linhas lidas, {queued} seriam importadas, {refused} recusadas", + "submittedLine": "{rows} linhas lidas, {queued} na fila para importação", + "unmatched": "Nenhum medicamento registrado corresponde a: {names}", + "ambiguous": "Corresponde a mais de um medicamento: {names}", + "mirrored": "Espelhado de outro aplicativo, então nenhuma dose pode ser adicionada: {names}", + "unknownColumns": "Colunas para as quais o importador não tem regra, deixadas sem leitura: {names}", + "codingsNotRead": "Linhas com um valor Codings que não foi lido: {count}", + "archivedRowsPresent": "Linhas marcadas como pertencentes a medicamentos arquivados: {count}. Essa flag não as pula nem as reativa; o resultado final indica o que foi adicionado.", + "verdict": { + "honoured": "usada", + "reported": "informada", + "ignored": "não lida" + }, + "column": { + "date": "O horário em que a dose foi realmente tomada. O offset UTC é lido exatamente como escrito.", + "scheduledDate": "O horário do cronograma ao qual a dose pertencia, mantido separado do horário em que foi tomada. Vazio significa que a dose não pertencia a nenhum horário.", + "medication": "Correspondido a um medicamento já registrado. Nada é criado a partir do arquivo.", + "nickname": "Tentado como um segundo nome quando o primeiro não corresponde a nada.", + "dosage": "Registrada na dose apenas quando difere da quantidade programada.", + "scheduledDosage": "Comparada à quantidade real para decidir se a dose desviou. Nunca armazenada por si só.", + "unit": "Escrita junto com a quantidade, grafada como o arquivo a grafia. \"count\" significa múltiplos da dose configurada.", + "status": "\"Taken\" vira uma dose e \"Skipped\", uma pulada deliberadamente. Qualquer outro valor não registra decisão e a linha é recusada.", + "archived": "Contada e informada de volta. Uma dose que aconteceu não é desfeita por arquivar o medicamento depois.", + "codings": "O CSV não documenta uma codificação para esta coluna, então ela é deixada como está em vez de ser adivinhada. Células preenchidas são contadas.", + "form": "Descreve o medicamento, não a dose.", + "start": "A data em que você começou o medicamento, não o horário desta dose.", + "end": "A data em que você parou o medicamento, não o horário desta dose." + }, + "fatal": { + "emptyFile": "Esse arquivo não contém linhas.", + "missingColumns": "Esse arquivo não tem uma coluna de que o importador precisa: Date, Medication ou Status.", + "unreadableJson": "Esse arquivo não é um JSON válido.", + "jsonNotAnArray": "Esse JSON não contém uma lista de doses.", + "jsonNoIntakeTime": "A exportação JSON registra quando a dose estava prevista, mas não quando foi tomada, e um horário programado não será gravado como se fosse a dose. Exporte o CSV em vez disso, que traz ambos.", + "tooManyRows": "Esse arquivo tem mais linhas do que uma importação consegue processar. Divida-o e importe as partes." + }, + "detail": "Um arquivo cobre todos os medicamentos nele contidos." + }, + "healthConnect": { + "title": "Exportação do Health Connect", + "description": "Importe o arquivo ZIP que o aplicativo Health Connect no Android gera quando você exporta seus dados.", + "choose": "Escolher arquivo ZIP", + "uploading": "Enviando…", + "uploadFailed": "Falha no envio. Tente novamente.", + "tooLarge": "O arquivo é maior do que este servidor aceita.", + "doneSummary": "{count} valores importados.", + "failed": "A importação falhou: {reason}", + "phase": { + "queued": "Aguardando início", + "unpacking": "Descompactando o arquivo", + "parsing": "Lendo os registros", + "upserting": "Salvando os valores", + "done": "Concluído", + "failed": "Falhou" + }, + "steps": { + "export": "No seu celular Android, abra o Health Connect, vá em Gerenciar dados, depois em Exportar e importar, e inicie uma exportação.", + "cloud": "O Health Connect só salva a exportação em um aplicativo de armazenamento em nuvem, como Google Drive, Dropbox ou Nextcloud, nunca no próprio celular. Escolha um lá.", + "upload": "Baixe o arquivo ZIP dessa nuvem para este dispositivo e envie-o aqui." + }, + "dropLabel": "Arraste o ZIP do Health Connect para cá", + "dropHint": "ou clique para escolhê-lo. Até 1 GB.", + "fileInputLabel": "Arquivo ZIP de exportação do Health Connect", + "privacyNote": "O arquivo é excluído do servidor assim que a importação termina. Registros de aplicativos que você já conecta diretamente, como Withings ou Fitbit, são deixados de fora para que nada chegue duplicado. Enviar o mesmo arquivo novamente não muda nada.", + "rateLimited": "Envios demais em pouco tempo. Espere um minuto e tente novamente.", + "busy": "Uma importação já está em andamento para sua conta. Espere ela terminar.", + "rowsSoFar": "{count} valores salvos até agora", + "doneNothing": "A importação terminou, mas não havia nada novo para adicionar.", + "workouts": "Treinos", + "leftOutConnected": "{count} registros de aplicativos que você já conecta diretamente foram deixados de fora.", + "nutrientsModuleOff": "Os totais de água e nutrientes não foram importados porque o módulo Nutrientes está desligado.", + "cycleModuleOff": "Os dados do período não foram importados porque o acompanhamento do ciclo está desligado.", + "failure": { + "unsupportedVersion": "Esta exportação do Health Connect é antiga demais para ser lida. Atualize o Health Connect no celular e exporte novamente.", + "notHealthConnect": "Este arquivo não é uma exportação do Health Connect. Escolha o arquivo ZIP que o Health Connect salvou.", + "unsafeSchema": "Este arquivo não tem a estrutura de uma exportação do Health Connect e não foi lido.", + "tooLarge": "A exportação é maior do que este servidor aceita.", + "stagingMissing": "O arquivo enviado não estava mais no servidor. Envie-o novamente.", + "interrupted": "A importação foi interrompida por uma reinicialização do servidor. Envie o arquivo novamente." + } + } + }, + "subtitle": "Exporte seus dados ou importe de um backup." + }, + "about": { + "title": "Sobre este aplicativo", + "subtitle": "Versão, licença e links do projeto." + }, + "sharing": { + "title": "Compartilhamento", + "subtitle": "Compartilhe acesso somente leitura aos seus dados." + }, + "insights": { + "subtitle": "Organize suas seções de visão geral e a ordem das tags." + }, + "medications": { + "subtitle": "Gerencie a visualização e a ordem da sua lista de medicamentos." + }, + "mood": { + "subtitle": "Organize suas tags de humor, grupos e a ordem do seletor." + }, + "labs": { + "subtitle": "Gerencie a visualização, a ordem de classificação e os biomarcadores." + }, + "illness": { + "subtitle": "Gerencie a visualização e a ordem dos episódios." + }, + "vorsorge": { + "subtitle": "Gerencie a visualização, a ordem e os lembretes individuais." + }, + "modules": { + "title": "Módulos", + "saved": "Salvo", + "error": "Não foi possível salvar. Tente novamente.", + "toggleable": { + "title": "O que você acompanha", + "description": "Módulos desativados saem da navegação, dos blocos e dos insights, enquanto seus dados permanecem intactos." + }, + "manageIn": "Gerenciar em {section}", + "operatorDisabled": "Desativado em todo o servidor", + "subtitle": "Escolha quais áreas de acompanhamento o HealthLog exibe em todo o aplicativo.", + "pages": { + "medications": {}, + "mood": {}, + "labs": {} + } + }, + "gesundheitsakte": { + "title": "Registro de saúde", + "subtitle": "Exporte um registro de saúde completo, pronto para o clínico." + }, + "coach": { + "title": "Coach", + "subtitle": "Ajuste o Coach, seus lembretes proativos e sua memória." + }, + "security": { + "title": "Segurança", + "subtitle": "Autenticação de dois fatores, códigos de recuperação e chaves de acesso." + }, + "privacy": { + "title": "Dados e privacidade", + "subtitle": "Seus dados, retenção, criptografia e segurança da conta em um só lugar." + }, + "mcp": { + "title": "Conector MCP", + "subtitle": "Conecte um assistente externo aos seus próprios dados de saúde." + }, + "anamnesis": { + "title": "Histórico médico", + "subtitle": "Seu histórico médico, estilo de vida, detalhes de emergência e o que a IA pode ler." + }, + "environment": { + "title": "Local e clima", + "subtitle": "Clima, luz do dia e contexto de localização.", + "disabledHint": "Ative o módulo Ambiente para definir uma localização de casa e receber clima e luz do dia diários.", + "searchPlaceholder": "Procure uma cidade", + "search": "Buscar", + "searchError": "Não foi possível buscar esse lugar.", + "use": "Usar", + "select": "Selecionar", + "saveError": "Não foi possível salvar sua alteração.", + "homeSaved": "Localização de casa salva", + "travelAdded": "Período de localização adicionado.", + "travelRemoved": "Período de localização removido.", + "backfillQueued": "Preenchimento retroativo na fila.", + "backfillError": "Não foi possível iniciar o preenchimento retroativo.", + "startDate": "Data de início", + "endDate": "Data de fim", + "storedDays": "{count} dias de clima armazenados.", + "home": { + "title": "Localização de casa", + "description": "Uma localização aproximada, no nível de cidade, nunca um rastro preciso. O clima e a luz do dia são buscados para este lugar nos dias em que nenhum período de localização se aplica, a partir da data em que você o definiu.", + "current": "Atual: {label}", + "none": "Nenhuma localização de casa definida ainda.", + "since": "Clima acompanhado a partir de {date}. Dias anteriores permanecem vazios até você adicionar um período de localização." + }, + "travel": { + "title": "Períodos de localização", + "description": "Adicione um lugar e uma faixa de datas, como uma viagem ou um trecho do histórico anterior. O período substitui sua casa nos dias que cobre, para que o clima corresponda a onde você realmente estava. É assim que você corrige o passado.", + "none": "Nenhum período de localização ainda.", + "add": "Adicionar {label}", + "remove": "Remover período de localização", + "removeConfirmTitle": "Remover esta viagem?", + "removeConfirmBody": "As leituras feitas durante ela permanecem no seu registro; apenas a entrada da viagem é removida.", + "range": "{start} a {end}", + "suggestionsIntro": "O Dawarich encontrou dias no exterior que nenhum período cobre ainda.", + "suggestionUse": "Usar", + "suggestionDismiss": "Descartar sugestão" + }, + "backfill": { + "title": "Preencher dias passados", + "description": "Busque e armazene o clima de uma faixa de datas passada para que dias mais antigos entrem nas correlações. O início usa por padrão a data efetiva da sua casa; para ir mais longe, adicione primeiro um período de localização para essa faixa.", + "run": "Preencher" + }, + "noResults": "Nenhum lugar correspondente encontrado.", + "fetchFailedOne": "A última atualização de clima em segundo plano falhou ({when}).", + "fetchFailedFew": "As últimas {count} atualizações de clima em segundo plano falharam, mais recentemente em {when}.", + "fetchFailedOther": "As últimas {count} atualizações de clima em segundo plano falharam, mais recentemente em {when}.", + "airQuality": { + "title": "Qualidade do ar e pólen", + "description": "Qualidade do ar, pólen e UV diários para sua localização, do modelo CAMS via Open-Meteo.", + "toggle": "Incluir qualidade do ar e pólen", + "operatorDisabled": "A qualidade do ar está desativada neste servidor.", + "coverage": "{count} dias com dados de qualidade do ar", + "pollenEuropeOnly": "Os dados de pólen cobrem apenas a Europa.", + "historyProgress": "Preenchendo qualidade do ar retroativamente: {done} de {total} dias", + "historyComplete": "A qualidade do ar está preenchida para todos os dias anteriores com registros que a fonte cobre ({total} dias). Dias mais antigos permanecem vazios.", + "attribution": "Fontes de dados e licenças", + "saveError": "A configuração não pôde ser salva.", + "latest": "Dia mais recente ({date})", + "modelNote": "Valores externos modelados para sua área, não sua exposição pessoal." + } + }, + "score": { + "title": "Pontuação de saúde", + "subtitle": "Escolha quais pilares contam para sua pontuação.", + "card": { + "title": "O que conta para sua pontuação", + "description": "Todo pilar que você registra conta, a menos que você diga o contrário aqui." + }, + "threeAxes": "Registrar, exibir e contar são três coisas separadas. Esta página muda apenas a última. Um pilar que você desativa aqui continua sendo registrado e continua aparecendo em todo o restante do HealthLog; ele apenas deixa de mover o número.", + "recommendation": "Três áreas de saúde são a recomendação, não uma exigência: uma seleção com pelo menos um pilar é salva. Uma pontuação mais enxuta é calculada da mesma forma e indica no cartão quantas áreas ela usa.", + "axis": { + "countsFor": "Contar {pillar} para a pontuação" + }, + "state": { + "counting": "Contando para sua pontuação", + "waiting": "Selecionado, aguardando dados", + "crisis": "Orientações de segurança são exibidas em vez de uma pontuação. Sua seleção está correta.", + "readFailed": "Este pilar não pôde ser lido na última execução." + }, + "presets": { + "label": "Começar de", + "all": "Todos os pilares", + "current": "Sua seleção salva" + }, + "save": "Salvar", + "saved": "Salvo", + "error": "Não foi possível salvar. Tente novamente.", + "loadFailed": "Não foi possível carregar sua seleção.", + "eligibilityFailed": "Não foi possível verificar quais pilares têm dados no momento. As chaves abaixo continuam funcionando.", + "omitted": "{count} pilares não são listados porque seu acompanhamento está desligado. Reative um módulo e seu pilar volta.", + "omittedLink": "Abrir módulos", + "refusal": { + "empty": "Uma pontuação de saúde precisa de pelo menos uma área de saúde para pontuar. Mantenha uma selecionada; a pontuação indicará de quais áreas ela é composta." + }, + "notice": { + "upgrade": { + "title": "O que conta agora é você quem escolhe", + "body": "Quais pilares contavam para sua Pontuação de Saúde costumavam seguir os módulos que você tinha ativado. Agora é uma escolha separada, e esta página é onde você a faz. Seu número não mudou quando isso chegou: ele continua contando exatamente o que contava antes." + }, + "changed": { + "title": "Você mudou o que conta", + "body": "Desde {date} sua pontuação é calculada a partir de um conjunto diferente de pilares. Os dias anteriores foram calculados com o conjunto antigo, então os dois não são comparados e a variação semanal permanece pausada até que a janela de comparação esteja livre da mudança. O histórico de cada pilar corre direto pela mudança.", + "bodyUndated": "Sua pontuação é calculada a partir de um conjunto diferente de pilares do que era antes. Os dias anteriores à mudança foram calculados com o conjunto antigo, então os dois não são comparados e a variação semanal permanece pausada até que a janela de comparação esteja livre da mudança. O histórico de cada pilar corre direto pela mudança." + }, + "composition": { + "title": "O que conta mudou por conta própria", + "left": "Deixou de contar para sua pontuação: {pillars}. O número mudou por esse motivo, não porque sua saúde mudou.", + "joined": "Agora conta para sua pontuação: {pillars}." + }, + "dismiss": "Entendi", + "dismissError": "Não foi possível salvar isso. Tente novamente." + } + }, + "access": { + "title": "Acesso compartilhado", + "subtitle": "Quem pode abrir seu registro de saúde e de quem você pode abrir." + } + }, + "profile": "Perfil", + "language": "Idioma", + "languageDescription": "Escolha o idioma de exibição do aplicativo.", + "timeFormat": { + "title": "Formato de hora", + "description": "Controla se os horários são exibidos no relógio de 24 horas ou de 12 horas (AM/PM).", + "auto": "Automático (idioma)", + "h24": "24 horas", + "h12": "12 horas (AM/PM)", + "saved": "Formato de hora salvo", + "saveError": "Falha ao salvar o formato de hora." + }, + "dateFormat": { + "title": "Formato de data", + "description": "Controla a ordem de dia, mês e ano quando as datas são exibidas.", + "auto": "Automático (idioma)", + "dmy": "DD.MM.AAAA", + "mdy": "MM/DD/AAAA", + "ymd": "AAAA-MM-DD", + "saved": "Formato de data salvo", + "saveError": "Falha ao salvar o formato de data." + }, + "username": "Nome de usuário", + "height": "Altura (cm)", + "heightFtIn": "Altura (pés, polegadas)", + "dateOfBirth": "Data de nascimento", + "dateOfBirthHint": "Usada para cálculos automáticos de metas de pressão arterial.", + "gender": "Gênero", + "genderNone": "Não especificado", + "genderMale": "Masculino", + "genderFemale": "Feminino", + "genderHint": "Usado para valores-alvo específicos por gênero.", + "timezone": "Fuso horário", + "timezoneHint": "Usado nos rótulos dos eixos dos gráficos, horários de lembrete, horários de exportação e contexto do Coach. Os dados armazenados não mudam.", + "timezoneInvalid": "Não é um fuso horário IANA válido.", + "profileSaved": "Perfil salvo", + "profilePartiallySaved": "Perfil salvo, mas {field} não pôde ser atualizado.", + "profileNothingSaved": "Nada foi salvo. Corrija {field} e tente novamente.", + "profileRejection": { + "tooBig": "Esse valor está acima da faixa que este campo aceita.", + "tooSmall": "Esse valor está abaixo da faixa que este campo aceita.", + "invalidValue": "Não é uma das respostas que este campo aceita.", + "invalidFormat": "Não está escrito em um formato que este campo consiga ler.", + "invalidType": "Esse valor não chegou em um formato que este campo consiga armazenar.", + "rateLimited": "Alterado com muita frequência. Espere um pouco e tente novamente.", + "other": "Esse valor não foi aceito. Verifique-o e tente novamente.", + "reproofRequired": "Digite sua senha atual para alterar o endereço de e-mail.", + "reproofFailed": "Essa senha não está correta, então o endereço de e-mail não foi alterado.", + "secondFactorRequired": "Confirme com seu segundo fator ou uma chave de acesso para alterar o endereço de e-mail." + }, + "avatar": { + "title": "Foto do perfil", + "description": "Envie uma foto armazenada no seu próprio servidor. Ela aparece em todo o aplicativo no lugar de um serviço externo de avatar.", + "upload": "Enviar foto", + "replace": "Substituir foto", + "remove": "Remover", + "removeTitle": "Remover a foto do perfil?", + "removeBody": "A imagem é excluída do seu servidor e suas iniciais tomam seu lugar. Você precisaria do arquivo original para enviá-la novamente.", + "removeConfirm": "Remover foto", + "hint": "JPEG, PNG ou WebP. Até 2 MB e 2048×2048 pixels.", + "uploaded": "Foto do perfil atualizada", + "removed": "Foto do perfil removida", + "invalidType": "Tipo de imagem não compatível. Use JPEG, PNG ou WebP.", + "tooLarge": "A imagem excede o limite de 2 MB.", + "error": "Não foi possível atualizar a foto do perfil. Tente novamente." + }, + "changePassword": "Alterar senha", + "changePasswordDescription": "Substitua sua senha atual por uma nova.", + "currentPassword": "Senha atual", + "newPassword": "Nova senha", + "confirmNewPassword": "Confirmar nova senha", + "passwordMismatch": "As novas senhas não coincidem", + "passwordUpdated": "Senha atualizada com sucesso", + "passkeys": "Chaves de acesso", + "passkeysDescription": "As chaves de acesso permitem entrar com segurança sem senha.", + "passkeyReauth": { + "title": "Confirme que é você", + "description": "Verifique um método de entrada existente antes de adicionar uma nova chave de acesso.", + "methodLabel": "Método de verificação", + "methods": { + "password": "Senha", + "totp": "Código do autenticador", + "passkey": "Chave de acesso", + "webauthn": "Chave de segurança" + }, + "currentPassword": "Senha atual", + "authenticatorCode": "Código do autenticador", + "authenticatorPlaceholder": "Código do autenticador de 6 dígitos", + "verifyAndAdd": "Verificar e adicionar", + "factorDescription": "Verifique um método de entrada existente antes de adicionar um segundo fator.", + "verifyAndContinue": "Verificar e continuar" + }, + "passkeyName": "Nome", + "noPasskeys": "Nenhuma chave de acesso registrada.", + "addPasskey": "Adicionar chave de acesso", + "passkeyRegistrationFailed": "Falha ao registrar a chave de acesso", + "passkeyRegistrationCancelled": "Registro da chave de acesso cancelado", + "passkeyNotSupported": "Seu navegador ou dispositivo ainda não oferece suporte a chaves de acesso. Tente outro navegador ou dispositivo.", + "passkeyAlreadyRegistered": "Este dispositivo já está registrado como uma chave de acesso para sua conta.", + "passkeySecurityBlocked": "Seu navegador bloqueou a solicitação de chave de acesso por motivos de segurança. Certifique-se de estar em uma origem HTTPS confiável e tente novamente.", + "passkeyTimeout": "O tempo da solicitação de chave de acesso expirou. Tente novamente.", + "passkeyUnknownError": "Falha ao registrar a chave de acesso: {message}", + "deletePasskey": "Excluir chave de acesso?", + "deletePasskeyDescription": "A chave de acesso será excluída permanentemente.", + "singleDevice": "Dispositivo único", + "multiDevice": "Multidispositivo", + "backedUp": "com backup", + "telegram": "Telegram", + "telegramDescription": "Lembretes de medicamentos via bot.", + "botToken": "Token do bot", + "chatId": "ID do chat", + "enableNotifications": "Ativar notificações", + "telegramStep1": "Crie um bot via @BotFather no Telegram e copie o token.", + "telegramStep2": "Envie /start ao seu bot para ativar o chat.", + "telegramStep3": "Encontre seu ID de chat via @userinfobot ou pela API de bots.", + "ntfy": "ntfy", + "ntfyDescription": "Notificações via ntfy (auto-hospedado ou ntfy.sh).", + "ntfyEnable": "Ativar ntfy", + "ntfyServer": "URL do servidor", + "ntfyTopic": "Tópico", + "ntfyAuthToken": "Token de autenticação (opcional)", + "ntfyAuthTokenHint": "Necessário apenas para tópicos privados com controle de acesso.", + "webhook": "Webhook", + "webhookDescription": "Envie notificações por POST para qualquer URL: Discord, Slack, Gotify, Home Assistant, n8n ou qualquer relay que aceite JSON.", + "webhookEnable": "Ativar webhook", + "webhookUrl": "URL do webhook", + "webhookUrlHint": "A URL completa para onde enviar o POST. Um endereço em rede privada precisa de aprovação do administrador do servidor.", + "webhookHeaderName": "Nome do cabeçalho (opcional)", + "webhookHeaderValue": "Valor do cabeçalho (opcional)", + "webhookFormat": "Formato do payload", + "webhookFormatGeneric": "JSON genérico", + "webhookFormatGenericHint": "Cole uma URL de webhook do Discord ou Slack como está. O Home Assistant e o n8n leem os campos title, message, eventType e priority.", + "webhookFormatGotify": "Gotify", + "webhookFormatGotifyHint": "Use a URL que termina em /message e coloque o token do aplicativo no cabeçalho X-Gotify-Key.", + "email": "E-mail", + "emailDescription": "Receba alertas e lembretes por e-mail.", + "emailEnable": "Ativar e-mail", + "emailRecipient": "Endereço do destinatário", + "webPush": "Push do navegador", + "webPushDescription": "Receba notificações diretamente no navegador, mesmo quando o HealthLog não estiver aberto.", + "webPushNotSupported": "Seu navegador não oferece suporte a notificações push.", + "webPushDenied": "As notificações push estão bloqueadas. Permita-as nas configurações do navegador.", + "webPushNotConfigured": "O Web Push não está configurado no servidor.", + "webPushSubscribe": "Ativar push", + "webPushUnsubscribe": "Desativar push", + "webPushSubscribed": "Notificações push ativadas!", + "webPushUnsubscribed": "Notificações push desativadas.", + "webPushSubscribeFailed": "Falha na ativação", + "codexConnected": "ChatGPT conectado com sucesso! Os insights agora estão ativos.", + "codexDisconnected": "Conexão com o ChatGPT removida.", + "codexConnectionFailed": "Falha na conexão com o ChatGPT. Tente novamente.", + "rawData": "Enviar histórico detalhado", + "rawDataOnDescription": "Além dos resumos, o provedor recebe médias das suas leituras: por dia nos últimos 90 dias, por semana no ano anterior e por mês até 5 anos atrás, cada uma com sua data e número de leituras. Leituras individuais, seu nome e seu e-mail não são enviados.", + "rawDataOffDescription": "Apenas resumos são enviados: o valor mais recente, médias, tendências, mínimo e máximo em janelas fixas. Nenhuma série de leituras.", + "rawDataWarning": "O histórico detalhado está ligado: cada análise também envia médias diárias dos últimos 90 dias, semanais do ano anterior e mensais até 5 anos atrás.", + "regenerateInsights": "Gerar relatórios novamente", + "regenerateSuccess": "Relatórios gerados novamente com sucesso", + "regenerateRateLimit": "Espere: você atingiu o limite horário de análises.", + "lastGeneratedAt": "Última geração", + "ai": { + "chatgptConnectedBadge": "ChatGPT conectado", + "adminAiActiveBadge": "Provedor administrativo ativo", + "connectionExpiredBadge": "Conexão expirada", + "connectedSince": "Conectado desde {when}.", + "deviceCodeHeading": "Conclua a conexão em chatgpt.com", + "deviceCodeStep1": "Abra este link em qualquer dispositivo:", + "deviceCodeStep2": "Digite este código de uso único:", + "deviceCodeStep3": "Aprove a conexão. Esta página se atualiza automaticamente.", + "deviceCodeCopy": "copiar", + "deviceCodeWaiting": "Aguardando aprovação…", + "deviceCodeCancel": "Cancelar", + "oauthNotConfigured": "O OAuth do ChatGPT não está configurado nesta instância. Use sua própria chave de API abaixo em vez disso.", + "modelLabel": "Modelo", + "modelOptionDefault": "— Padrão —", + "modelOptionCustom": "Personalizado…", + "customModelLabel": "Nome do modelo personalizado", + "anthropicKeyLabel": "Chave de API da Anthropic", + "baseUrlLabel": "URL base", + "localKeyLabel": "Chave de API (opcional)", + "localDescription": "Qualquer endpoint compatível com OpenAI funciona aqui: um modelo local (Ollama, LM Studio) ou um gateway como LiteLLM, OpenRouter ou vLLM. A URL base termina com /v1; a chave de API é opcional.", + "savedPreview": "(salvo {preview})", + "savedShort": "(salvo)", + "saveCta": "Salvar", + "saved": "Salvo", + "errorGeneric": "Erro", + "providerChain": { + "types": { + "codex": "ChatGPT (Codex)", + "openai": "OpenAI (sua chave)", + "anthropic": "Anthropic (Claude)", + "local": "Modelo local", + "openai-compatible": "Gateway compatível com OpenAI", + "admin-openai": "OpenAI administrativo" + }, + "title": "Cadeia de fallback", + "description": "Se o provedor ativo falhar, o HealthLog tenta o próximo habilitado nesta ordem.", + "moveUp": "Mover para cima", + "moveDown": "Mover para baixo", + "removeFromChain": "Remover da cadeia", + "addProvider": "Adicionar provedor", + "addNoneAvailable": "Todos os provedores já estão na cadeia", + "saveOrder": "Salvar ordem da cadeia", + "saved": "Cadeia salva", + "saveFailed": "Falha ao salvar a cadeia", + "resetDefaults": "Redefinir para padrões", + "resetConfirmTitle": "Redefinir a cadeia para padrões?", + "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", + "providerSelect": { + "codex": "Conta do ChatGPT (Codex)", + "openai": "OpenAI (sua chave de API)", + "anthropic": "Anthropic (Claude)", + "local": "Modelo local (compatível com OpenAI)", + "openai-compatible": "Gateway compatível com OpenAI", + "admin-openai": "OpenAI fornecido pela administração" + }, + "compat": { + "description": "Um provedor de primeira classe para qualquer endpoint que fale a API /v1/chat/completions da OpenAI: LiteLLM, OpenRouter, vLLM ou outro gateway. A URL base termina com /v1, a chave de API é opcional e o modelo é o que seu gateway roteia. Sua chave da OpenAI nunca chega a este endpoint; este provedor tem a própria.", + "keyLabel": "Chave de API (opcional)", + "modelHint": "O nome do modelo que seu gateway espera. Em branco, o modelo salvo para seus outros provedores é usado; sem nenhum definido, este provedor é ignorado." + }, + "openai": { + "modelSelect": "Modelo", + "modelOptionCustom": "Slug personalizado…", + "modelCustomLabel": "Slug do modelo personalizado", + "modelCustomPlaceholder": "gpt-5", + "baseUrlLabel": "URL base (avançado)", + "baseUrlPlaceholder": "https://api.openai.com/v1", + "baseUrlHelp": "Substitua apenas se estiver usando um gateway compatível com OpenAI. Deixe em branco para a própria OpenAI.", + "showAdvanced": "Mostrar avançado", + "hideAdvanced": "Ocultar avançado", + "apiKey": "Chave de API", + "apiKeyPlaceholder": "sk-…" + }, + "codex": { + "statusConnected": "Conectado", + "statusDisconnected": "Não conectado", + "statusExpired": "Conexão expirada", + "connectButton": "Conectar com o ChatGPT", + "disconnectButton": "Desconectar", + "disconnectTitle": "Desconectar o ChatGPT?", + "disconnectBody": "O login armazenado é descartado junto com o texto de insights em cache. Reconectar significa entrar novamente pelo fluxo de código do dispositivo.", + "disconnectConfirm": "Desconectar", + "modelSlugLabel": "Slug do modelo", + "modelSlugBody": "O Codex usa o modelo para o qual sua assinatura do ChatGPT roteia. A variável de ambiente CODEX_MODEL permite à operação substituir isso na instância.", + "lastInsight": "Último insight: {when}" + }, + "adminOpenai": { + "title": "OpenAI administrativo", + "body": "Chave da OpenAI fornecida pela administração, usada como último fallback quando nenhum provedor pessoal está configurado. Nada para configurar aqui.", + "notConfigured": "A administração não configurou uma chave compartilhada da OpenAI nesta instância." + }, + "testProvider": "Testar provedor ativo", + "testSuccess": "OK: {provider} ({model})", + "testFailedShort": "Teste falhou: {message}", + "testUnexpectedResponse": "Falha na conexão com o provedor de IA: resposta inesperada do servidor.", + "testReasonCredentials": "O provedor rejeitou as credenciais. Autentique-se novamente nas configurações de IA.", + "testReasonRateLimited": "O provedor limitou a taxa da solicitação. Tente novamente em breve.", + "testReasonServerError": "O provedor de IA retornou um erro de servidor.", + "testReasonBadRequest": "O provedor rejeitou a solicitação (HTTP {status}). O endpoint respondeu, então é um problema de formato da solicitação ou de nome do modelo, não de conectividade.", + "testReasonUnreachable": "Não foi possível alcançar o provedor de IA.", + "coachMemory": { + "title": "O que o Coach lembra", + "description": "Fatos duradouros que você contou ao Coach.", + "empty": "O Coach ainda não armazenou nenhum fato. Conforme você conversa, ele lembra detalhes duradouros que você compartilha (seus objetivos, condições, preferências), e você pode limpá-los aqui a qualquer momento.", + "learnedPrefix": "aprendido em {when}", + "categoryPreference": "Preferências", + "categoryCondition": "Condições", + "categoryGoal": "Objetivos", + "categoryConstraint": "Restrições", + "categoryContext": "Contexto", + "forgetAria": "Esquecer este fato", + "forgetTitle": "Esquecer este fato?", + "forgetBody": "O Coach deixa de usá-lo a partir da próxima mensagem. Não há como trazer um fato esquecido de volta.", + "forgetConfirm": "Esquecer", + "forgetAll": "Esquecer tudo", + "forgetAllConfirmTitle": "Esquecer tudo que o Coach lembra?", + "forgetAllConfirmBody": "Isso remove todos os fatos armazenados. O Coach começará do zero na próxima conversa. Não é possível desfazer.", + "forgetAllConfirmAction": "Esquecer tudo", + "cancel": "Cancelar", + "summaryNote": "O Coach também pode manter um resumo curto e contínuo de cada conversa. Não há controle por item para isso; excluir uma conversa remove o resumo dela.", + "loadError": "Não foi possível carregar o que o Coach lembra.", + "forgotToast": "Fato esquecido.", + "forgotError": "Não foi possível esquecer esse fato. Tente novamente.", + "clearedToast": "{count} fatos armazenados esquecidos.", + "clearError": "Não foi possível limpar os fatos armazenados. Tente novamente.", + "detail": "Ele os usa para manter as respostas relevantes. Remova qualquer coisa que prefira que ele esqueça.", + "categoryMedication": "Medicamentos" + }, + "coachReminders": { + "title": "Seus lembretes", + "description": "Coisas que você pediu ao Coach para lembrar mais tarde.", + "empty": "Nenhum lembrete ainda. Peça ao Coach para lembrá-lo de algo e ele aparecerá aqui.", + "loadError": "Não foi possível carregar seus lembretes.", + "dueHeading": "Previstos agora", + "allHeading": "Salvos", + "duePrefix": "previsto para {when}", + "confirm": "Manter", + "markDone": "Concluído", + "dismiss": "Descartar", + "deleteAria": "Excluir este lembrete", + "note": "Os lembretes são armazenados criptografados. Exclua um a qualquer momento e ele sai do que o Coach consegue ver.", + "status": { + "proposed": "Sugerido", + "active": "Salvo", + "due": "Previsto", + "surfaced": "Exibido", + "done": "Concluído", + "dismissed": "Descartado" + }, + "deleteConfirmTitle": "Excluir este lembrete?", + "deleteConfirmBody": "Ele deixa de ser exibido. Qualquer coisa que você já tenha registrado não é afetada.", + "deleteConfirmAction": "Excluir", + "detail": "Os previstos aparecem aqui e no Coach.", + "readOnlyNote": "O Coach não está disponível agora, mas você ainda pode ler e excluir seus lembretes." + }, + "aboutMe": { + "title": "Sobre mim", + "description": "Contexto pessoal que o Coach e o resumo diário leem junto com seus dados.", + "placeholder": "Ex.: trabalho em turnos, dieta vegetariana, lesão no joelho, treinando para uma meia maratona…", + "charCount": "{used} / {max} caracteres", + "clear": "Limpar", + "clearTitle": "Limpar a nota sobre mim?", + "clearBody": "Isso remove apenas a nota de texto livre. Suas alergias e intolerâncias permanecem exatamente como estão.", + "clearConfirm": "Limpar nota", + "save": "Salvar", + "savedToast": "Nota sobre mim salva", + "clearedToast": "Nota sobre mim limpa.", + "saveError": "Não foi possível salvar. Tente novamente.", + "loadError": "A nota não pôde ser carregada.", + "hint": "Passada ao Coach e ao resumo diário como contexto adicional. Deixe em branco para não enviar nada.", + "profileHint": "Idade e gênero vêm do seu perfil e são incluídos automaticamente.", + "freeTextLabel": "Sobre mim (texto livre)", + "conditionsPlaceholder": "Ex.: hipertensão, diabetes tipo 2…", + "allergiesPlaceholder": "Ex.: intolerância à lactose, alergia à penicilina…", + "focusPlaceholder": "Ex.: acompanhar minha pressão arterial, me motivar a me movimentar mais…", + "questionsTitle": "O Coach tem perguntas de acompanhamento", + "questionsOpenCoach": "Responda-as no Coach" + }, + "responseTimeoutHeading": "Tempo limite de resposta", + "responseTimeoutBody": "Quanto tempo esperar pela resposta da IA antes de desistir. Aumente para um modelo local ou auto-hospedado que precisa de tempo para carregar na primeira solicitação. Em branco, uma resposta pode levar {seconds} s; o resumo diário permite até {briefingSeconds} s.", + "responseTimeoutLabel": "Tempo limite de resposta (segundos)", + "responseTimeoutPlaceholder": "Padrão ({seconds} s)", + "responseTimeoutInvalid": "Digite um número entre 10 e 600 segundos.", + "autoRead": { + "title": "Ler documentos automaticamente com IA", + "subLabel": "Seu provedor de IA lê e indexa cada novo documento sem um toque por documento.", + "honesty": "Quando ligado, cada documento que você envia é enviado ao seu provedor de IA configurado para ser lido, descrito e indexado para busca, sem confirmação por documento. Ativar também alcança o passado: documentos que você já enviou e que ainda não têm resumo também são enviados, até 200 por vez que você ativar. Isso acontece no servidor e o conteúdo dos documentos sai desta máquina para aquele provedor. Se o seu provedor configurado for uma conexão por assinatura (uma conta de IA conectada, em vez de uma chave de API), as próprias configurações de dados daquele provedor se aplicam: provedores por assinatura podem usar o conteúdo para melhorar seus modelos, e nenhum acordo de processamento de dados os cobre. Documentos lidos por um modelo local auto-hospedado nunca saem do seu servidor. Desligado por padrão; ative apenas se aceitar essa troca para seus documentos.", + "confirm": "Entendi, ativar", + "cancel": "Cancelar", + "restingFrugal": "Pausado no nível de uso frugal da IA: documentos são lidos apenas quando você pede." + }, + "centralCodex": { + "title": "Usar o acesso compartilhado de IA do servidor", + "subLabel": "Envie solicitações de IA pela conexão compartilhada do servidor, com seus próprios provedores como fallback.", + "honesty": "O acesso compartilhado é uma única conta de IA conectada que a administração conectou para todos neste servidor, não a sua própria chave. As solicitações que você faz por ela são usadas para treinamento pelo provedor por padrão e nenhum acordo de processamento de dados as cobre; os limites horários e semanais da conta são compartilhados com todos os outros usuários que optaram por participar; e seus próprios provedores configurados ainda são tentados primeiro. Ative apenas se aceitar essa troca.", + "confirm": "Entendi, usar conexão", + "cancel": "Cancelar" + }, + "consent": { + "title": "Consentimento de IA", + "activeSince": "Concedido em {date}: seus dados de saúde podem ser enviados ao provedor configurado para os recursos de IA.", + "withdraw": "Retirar consentimento", + "confirmBody": "A menos que outro consentimento que você concedeu ainda os cubra, isto para imediatamente: o Coach e os Insights onde usam o acesso de IA que este servidor fornece, e a leitura de documentos com um modelo online. Com sua própria chave ou um modelo local, o Coach e os Insights continuam funcionando. A menos que outro consentimento ainda cubra os Insights, as notas que um modelo escreveu para você são excluídas: notas de status, o resumo diário, resumos de período escritos pelo modelo, linhas de chegada e notas de treino. Suas conversas com o Coach, o que ele lembrou, seus planos e os resumos dos seus documentos permanecem, e você mesmo pode lê-los ou excluí-los.", + "confirmWithdraw": "Retirar", + "grantError": "O consentimento não pôde ser salvo. Tente novamente.", + "error": "A retirada não pôde ser salva. Tente novamente.", + "documentReading": { + "title": "Consentimento para leitura de documentos", + "activeSince": "Concedido em {date}: documentos, exames digitalizados e textos de medicamentos podem ir ao seu serviço de IA para leitura.", + "confirmBody": "Documentos, exames digitalizados e descrições de medicamentos não são mais enviados para leitura. Nada que você já tem é excluído." + }, + "activeSinceNamed": "Concedido em {date}: seus dados de saúde podem ir para {providers} para os recursos de IA.", + "activeUndated": "Concedido: seus dados de saúde podem ser enviados ao provedor configurado para os recursos de IA.", + "request": { + "title": "Seu acordo antes de a IA começar", + "body": "A IA neste servidor roda em um serviço fornecido pela administração: {providers}. Nada dos seus registros vai para lá até você concordar.", + "data": "Depois que você concordar, o HealthLog envia ao serviço o que os recursos de IA precisam: leituras como peso, pressão arterial, pulso, sono e atividade; seus medicamentos; humor; valores de exames e registros do ciclo, se você os mantiver; o que você escreve no perfil e ao Coach; e documentos que você escolher ter lidos. O serviço os usa para escrever seu resumo diário, as notas sobre suas leituras e as respostas do Coach.", + "withdrawHint": "Você pode retirar seu acordo a qualquer momento em Configurações, IA. Nada mais é enviado a partir desse momento.", + "agree": "Concordar", + "dismiss": "Agora não" + } + }, + "operatorOff": { + "allTitle": "A IA está desativada neste servidor", + "allBody": "Quem administra este servidor desativou a IA. O HealthLog continua funcionando com todos os seus dados; os recursos que precisam de IA simplesmente não são exibidos.", + "someTitle": "Alguns recursos de IA estão desativados neste servidor", + "someBody": "Quem administra este servidor desativou: {switches}. Todo o resto, incluindo todos os seus dados, funciona normalmente.", + "testRefused": "A IA está desativada neste servidor, então não há nada para testar.", + "autoRead": "A leitura de documentos com IA está desativada neste servidor." + }, + "coachConversations": { + "title": "Conversas do Coach", + "description": "Abra uma conversa para lê-la ou exclua-a.", + "more": "Mostrar mais", + "openAll": "Abrir todas as conversas" + }, + "coachPlans": { + "title": "Planos do Coach", + "description": "Os planos que você combinou com o Coach, para ler ou remover.", + "open": "Abrir planos" + }, + "reasoning": { + "label": "Raciocínio", + "hint": "Modelos de raciocínio, como Gemma ou Qwen, pensam antes de responder. Desligado deixa todo o orçamento de resposta para a resposta em si.", + "options": { + "default": "Padrão", + "none": "Desligado", + "low": "Baixo", + "medium": "Médio", + "high": "Alto" + }, + "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.", + "runtimeTitle": "Verificar e atualizar", + "usage": { + "title": "Uso da IA", + "description": "Quanto trabalho de IA roda em segundo plano para você, enquanto o Coach permanece igual em todos os níveis.", + "levels": { + "frugal": { + "label": "Frugal", + "hint": "Os blocos atualizam no máximo uma vez por dia após uma sincronização; resumo diário curto; documentos são lidos apenas quando você pede." + }, + "standard": { + "label": "Padrão", + "hint": "Os blocos atualizam a cada poucas horas após uma sincronização; resumo diário completo." + }, + "full": { + "label": "Completo", + "hint": "Os blocos atualizam até a cada hora após novos dados, como antes desta configuração existir." + } + }, + "limited": "Limitado pela administração do servidor.", + "estimate": "cerca de {tokens} tokens por dia, estimado", + "measured": "Medido: {tokens} tokens por dia nos últimos {days} dias, incluindo o Coach. Os valores por nível são estimativas.", + "noEstimate": "Uma estimativa por nível aparece após três dias de uso da IA.", + "capped": "Você escolheu {choice}, que o servidor não permite no momento, então {level} se aplica. Sua escolha é mantida.", + "followsDefault": "Você segue o padrão do servidor ({level}).", + "useDefault": "Usar o padrão do servidor ({level})", + "saveError": "O nível não pôde ser salvo. Tente novamente." + }, + "removeKey": {} + }, + "dashboard": { + "units": { + "title": "Unidades", + "description": "Escolha como distâncias e velocidades são exibidas nos gráficos e blocos.", + "metric": "Métrico", + "imperial": "Imperial", + "saved": "Preferência de unidade salva", + "saveError": "Não foi possível salvar sua preferência de unidade." + }, + "glucoseUnit": { + "title": "Glicemia", + "description": "Em qual unidade as leituras de glicemia são exibidas. As leituras são armazenadas da mesma forma em ambos os casos.", + "saved": "Unidade de glicose salva", + "saveError": "Não foi possível salvar sua unidade de glicose." + } + }, + "withings": "Withings", + "withingsDescription": "Conecte sua balança e monitor de pressão arterial Withings para sincronizar peso, composição corporal e pressão arterial automaticamente.", + "withingsCredentials": "Credenciais de API", + "withingsClientId": "ID do cliente", + "withingsClientSecret": "Segredo do cliente", + "withingsCredentialsSaved": "Credenciais salvas", + "withingsCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "withingsCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", + "withingsSaveCredentials": "Salvar", + "configured": "Configurado", + "withingsSync": "Sincronizar agora", + "withingsFullSync": "Sincronizar todos os dados", + "withingsFullSyncTitle": "Sincronização completa?", + "withingsFullSyncDescription": "Todos os dados disponíveis da Withings serão totalmente sincronizados. Isso pode levar algum tempo, dependendo do seu histórico.", + "withingsSyncResult": "{count} medições sincronizadas", + "syncOutcome": { + "empty": "Nada novo para importar. Tudo está atualizado.", + "failed": "Nada foi salvo. A próxima execução tenta novamente.", + "partial": "{count} medições sincronizadas. Alguns dados não puderam ser salvos; a próxima execução tenta novamente." + }, + "withingsFullSyncResult": "{count} medições totalmente sincronizadas", + "withingsSyncFailed": "Falha na sincronização", + "withingsOauthConnected": "Withings conectado. A primeira sincronização começa em segundo plano.", + "withingsOauthFailed": "Falha na conexão com a Withings", + "withingsOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "replay": "Este link de confirmação já foi usado. Inicie a conexão novamente.", + "state": "A resposta da Withings não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "expired": "A solicitação de conexão expirou. Inicie a conexão novamente e conclua a aprovação em poucos minutos.", + "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 Withings não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da Withings.", + "nocreds": "Nenhuma credencial de API da Withings está armazenada. Salve o ID do cliente e o segredo do cliente primeiro, depois conecte novamente.", + "token": "A troca de token com a Withings falhou. Verifique o ID do cliente e o segredo do cliente e tente novamente.", + "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." + }, + "withingsSynchronize": "Sincronizar", + "withingsDisconnect": "Desconectar", + "withingsDisconnectTitle": "Desconectar a Withings?", + "withingsDisconnectDescription": "A conexão com a Withings será desconectada. Os dados sincronizados anteriormente serão preservados.", + "withingsConnect": "Conectar com a Withings", + "withingsNoCredentials": "Digite suas credenciais de API acima para conectar a Withings.", + "whoop": "WHOOP", + "whoopDescription": "Conecte sua pulseira WHOOP para sincronizar recuperação, sono, esforço e treinos diretamente no HealthLog.", + "whoopCredentials": "Credenciais de API", + "whoopClientId": "ID do cliente", + "whoopClientSecret": "Segredo do cliente", + "whoopCredentialsSaved": "Credenciais salvas", + "whoopCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "whoopCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", + "whoopSaveCredentials": "Salvar", + "whoopSync": "Sincronizar agora", + "whoopFullSync": "Sincronizar todos os dados", + "whoopFullSyncTitle": "Sincronização completa?", + "whoopFullSyncDescription": "Todo o histórico disponível da WHOOP será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", + "whoopSyncResult": "{count} medições sincronizadas", + "whoopSyncFailed": "Falha na sincronização", + "whoopSynchronize": "Sincronizar", + "whoopDisconnect": "Desconectar", + "whoopDisconnectTitle": "Desconectar a WHOOP?", + "whoopDisconnectDescription": "A conexão com a WHOOP será desconectada. Os dados sincronizados anteriormente serão preservados.", + "whoopConnect": "Conectar com a WHOOP", + "whoopNoCredentials": "Digite suas credenciais de API acima para conectar a WHOOP.", + "whoopOauthConnected": "WHOOP conectado. A primeira sincronização começa em segundo plano.", + "whoopOauthFailed": "Falha na conexão com a WHOOP", + "whoopOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta da WHOOP não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", + "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 WHOOP não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da WHOOP.", + "nocreds": "A WHOOP não está configurada. Adicione suas credenciais OAuth da WHOOP acima e tente novamente.", + "token": "A troca de token com a WHOOP falhou. Inicie a conexão novamente.", + "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." + }, + "fitbit": "Fitbit", + "fitbitTag": "Fitbit e Pixel", + "fitbitDescription": "Conecte o Fitbit para sincronizar seus sinais vitais do Fitbit e do Pixel Watch: peso, frequência cardíaca e mais.", + "fitbitExperimentalBadge": "Experimental", + "fitbitCredentials": "Credenciais de API", + "fitbitClientId": "ID do cliente", + "fitbitClientSecret": "Segredo do cliente", + "fitbitCredentialsSaved": "Credenciais salvas", + "fitbitCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "fitbitCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", + "fitbitSaveCredentials": "Salvar", + "fitbitSync": "Sincronizar agora", + "fitbitFullSync": "Sincronizar todos os dados", + "fitbitFullSyncTitle": "Sincronização completa?", + "fitbitFullSyncDescription": "Todo o histórico disponível do Fitbit será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", + "fitbitSyncResult": "{count} medições sincronizadas", + "fitbitSyncFailed": "Falha na sincronização", + "fitbitSynchronize": "Sincronizar", + "fitbitDisconnect": "Desconectar", + "fitbitDisconnectTitle": "Desconectar o Fitbit?", + "fitbitDisconnectDescription": "A conexão com o Fitbit será desconectada. Os dados sincronizados anteriormente serão preservados.", + "fitbitConnect": "Conectar com o Fitbit", + "fitbitNoCredentials": "Digite suas credenciais de API acima para conectar o Fitbit.", + "fitbitOauthConnected": "Fitbit conectado. A primeira sincronização começa em segundo plano.", + "fitbitOauthFailed": "Falha na conexão com o Fitbit", + "googleHealth": "Google Health", + "googleHealthTag": "Fitbit e Pixel", + "googleHealthBetaBadge": "Beta", + "googleHealthDescription": "Conecte Fitbit, Pixel Watch e Fitbit Air pela sua conta Google: peso, frequência cardíaca, sono e atividade. Isso substitui a conexão clássica com o Fitbit, que o Google descontinua em setembro de 2026.", + "googleHealthCredentials": "Credenciais de API", + "googleHealthClientId": "ID do cliente", + "googleHealthClientSecret": "Segredo do cliente", + "googleHealthCredentialsSaved": "Credenciais salvas", + "googleHealthCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "googleHealthCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", + "googleHealthSaveCredentials": "Salvar", + "googleHealthSync": "Sincronizar agora", + "googleHealthSyncCheckStatus": "Atualizar status", + "googleHealthFullSync": "Sincronizar todos os dados", + "googleHealthFullSyncTitle": "Sincronização completa?", + "googleHealthFullSyncDescription": "Todo o histórico disponível do Google Health será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", + "googleHealthSyncResult": "{count} medições sincronizadas", + "googleHealthSyncFailed": "Falha na sincronização", + "googleHealthSyncInProgress": "Sincronização em andamento: {count} medições salvas, {completed} de {total} áreas processadas.", + "googleHealthResourceFailuresTitle": "Estas áreas ainda precisam de atenção:", + "googleHealthResource": { + "workout": "Treinos", + "sleep": "Sono", + "boundedMetrics": "Medições de saúde", + "activity": "Atividade", + "heartRate": "Frequência cardíaca", + "other": "Outros dados" + }, + "googleHealthReason": { + "collectionFailed": "O Google não pôde fornecer esses dados. Tente sincronizar novamente mais tarde.", + "tokenFailed": "A conexão expirou. Reconecte o Google Health.", + "upsertFailed": "Os dados não puderam ser salvos. Tente sincronizar novamente.", + "rollupFailed": "Os dados foram capturados, mas o resumo ainda não foi atualizado. Tente novamente mais tarde.", + "pageLimit": "Apenas parte do histórico disponível foi processada. Outra sincronização continuará.", + "generic": "Esta área não foi totalmente sincronizada. Tente novamente." + }, + "googleHealthSynchronize": "Sincronizar", + "googleHealthDisconnect": "Desconectar", + "googleHealthDisconnectTitle": "Desconectar o Google Health?", + "googleHealthDisconnectDescription": "A conexão com o Google Health será desconectada. Os dados sincronizados anteriormente serão preservados.", + "googleHealthConnect": "Conectar com o Google", + "googleHealthNoCredentials": "Digite suas credenciais de API acima para conectar o Google Health.", + "googleHealthOauthConnected": "Google Health conectado. A primeira sincronização começa em segundo plano.", + "googleHealthOauthFailed": "Falha na conexão com o Google Health", + "googleHealthOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta do Google não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", + "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 Google não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Google.", + "nocreds": "O Google Health não está configurado. Adicione suas credenciais OAuth do Google acima e tente novamente.", + "token": "A troca de token com o Google falhou. Inicie a conexão novamente.", + "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." + }, + "fitbitOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta do Fitbit não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", + "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 Fitbit não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Fitbit.", + "nocreds": "O Fitbit não está configurado. Adicione suas credenciais OAuth do Fitbit acima e tente novamente.", + "token": "A troca de token com o Fitbit falhou. Inicie a conexão novamente.", + "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." + }, + "integrations": { + "withings": { + "plan": { + "link": "Sobre os planos de API da Withings", + "items": { + "spo2": "SpO2", + "vascularAge": "idade vascular", + "pulseWaveVelocity": "velocidade da onda de pulso", + "vo2Max": "VO2 máx", + "visceralFat": "gordura visceral", + "skinTemperature": "temperatura da pele", + "ecg": "ECG e fibrilação atrial", + "sleepScore": "pontuação de sono", + "sleepHrv": "VFC durante a noite", + "sleepHeartRate": "frequência cardíaca durante a noite", + "sleepRespiratoryRate": "frequência respiratória durante a noite", + "sleepSpo2": "SpO2 durante a noite", + "bodyTemperature": "temperatura corporal", + "bodyFat": "gordura corporal", + "fatMass": "massa de gordura", + "fatFreeMass": "massa livre de gordura", + "muscleMass": "massa muscular", + "bodyWater": "água corporal", + "boneMass": "massa óssea", + "heartRate": "frequência cardíaca", + "bloodPressure": "pressão arterial", + "weight": "peso" + } + } + }, + "oura": { + "scope": { + "items": { + "vo2max": "VO2 máx", + "cardio_age": "idade cardiovascular", + "resilience": "resiliência" + } + } + } + }, + "integrationPill": { + "justNow": "agora mesmo", + "minutesAgo": "há {count} min", + "hoursAgo": "há {count} h", + "daysAgo": "há {count} d", + "resumeSuccess": "Integração retomada", + "resumeError": "Falha ao reconectar" + }, + "integrationFreshness": { + "title": "Dados recebidos", + "summary": "{count} tipos de dados, mais recente {relative}", + "quiet": "{count} sem atividade", + "workouts": "Treinos", + "medicationDoses": "Doses de medicamentos" + }, + "integrationFallback": { + "description": "Configurado nesta conta sem um cartão de configurações próprio." + }, + "withingsViewData": "Ver suas medições", + "whoopViewData": "Ver sua recuperação", + "fitbitViewData": "Ver seu sono", + "googleHealthViewData": "Ver seus passos", + "apiTokens": "Tokens de API", + "apiTokensDescription": "Revise e revogue tokens para medições, treinos, documentos e doses de medicamentos.", + "measurementsToken": { + "title": "Tokens de medição", + "description": "Gere um token para que uma balança, uma ponte de relógio ou sua automação residencial possa adicionar leituras.", + "detail": "O token é exibido uma vez.", + "scopeNote": "Ele só pode adicionar novas leituras ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. As leituras são marcadas como vindas de um dispositivo externo, para você distingui-las depois, e você ainda pode corrigi-las você mesmo.", + "createFailed": "O token não pôde ser criado. Tente novamente.", + "namePlaceholder": "Nome, ex.: Home Assistant" + }, + "workoutsToken": { + "title": "Tokens de treino", + "description": "Gere um token para que uma ponte de relógio ou um script de sincronização possa adicionar seus treinos.", + "detail": "O token é exibido uma vez.", + "scopeNote": "Ele só pode adicionar novos treinos ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. Os treinos que ele adiciona são marcados como vindos de um dispositivo externo e, quando seu celular registrou a mesma sessão, você vê a cópia do celular.", + "createFailed": "O token não pôde ser criado. Tente novamente.", + "namePlaceholder": "Nome, ex.: Garmin" + }, + "documentsToken": { + "title": "Tokens de documento", + "description": "Gere um token para que o Paperless-ngx, o Papra ou o script de importação possa adicionar documentos ao seu cofre.", + "detail": "O token é exibido uma vez.", + "scopeNote": "Ele só pode adicionar novos documentos ao seu próprio cofre. Não pode listar, abrir, baixar, alterar ou excluir nada, nem criar outro token. O que ele recebe de volta é se um arquivo foi armazenado, não como você o arquivou.", + "createFailed": "O token não pôde ser criado. Tente novamente.", + "namePlaceholder": "Nome, ex.: Paperless-ngx" + }, + "tokenMintMovedDescription": "Os tokens são emitidos onde se aplicam: acima para medições, treinos e documentos, ou no endpoint de API próprio de um medicamento, para aquele medicamento específico.", + "tokenCreated": "Token criado. Copie-o agora! Ele não será exibido novamente.", + "tokenCopy": "Copiar token", + "tokenCopied": "Token copiado para a área de transferência", + "tokenCopyFailed": "Não foi possível copiar o token", + "tokenRevokeFailed": "Não foi possível revogar o token. Tente novamente.", + "tokenRevoke": "Revogar token?", + "tokenRevokeAction": "Revogar token", + "tokenRevokeDescription": "O token será desativado permanentemente. Os aplicativos que o usam perderão acesso.", + "tokenRevoked": "Revogado", + "tokenExpired": "Expirado", + "tokenActive": "Ativo", + "activeTokensTitle": "Tokens ativos", + "revokedTokensTitle": "Tokens revogados ({count})", + "tokenTableName": "Nome", + "tokenTablePermissions": "Permissões", + "tokenTableStatus": "Status", + "tokenTableCreated": "Criado", + "tokenTableLastUsed": "Último uso", + "tokenTableActions": "Ações", + "noActiveTokens": "Nenhum token ativo disponível.", + "tokenNeverUsed": "Nunca", + "apiEndpointsTitle": "Endpoints de API", + "apiEndpointsDescription": "Visão geral dos endpoints externos disponíveis atualmente para ingestão baseada em tokens.", + "apiEndpointMethod": "Método", + "apiEndpointPath": "Caminho", + "apiEndpointAuth": "Autenticação", + "apiEndpointExample": "Exemplo de corpo", + "dangerZone": "Excluir todos os dados", + "dangerZoneDescription": "Apaga todo o seu registro de saúde e todas as conexões de integração.", + "dangerZoneConfirm": "Excluir todos os dados?", + "dangerZoneConfirmDescription": "Isso exclui permanentemente tudo no seu registro: medições, medicamentos, registros de humor, resultados de exames, registros de ciclo, documentos, conversas de IA e todas as conexões de integração, junto com tudo derivado deles e qualquer coisa que você tenha excluído antes. Os links de compartilhamento que você deu a um médico param de funcionar imediatamente. Sua conta permanece, junto com as credenciais que você usa para entrar e as configurações de exibição, como idioma, fuso horário e unidades. Não é possível desfazer.", + "dangerZoneSuccess": "Seu registro de saúde foi excluído. Sua conta e seu login permanecem inalterados.", + "dangerZoneDeleteFailed": "Falha na exclusão", + "finalDelete": "Excluir permanentemente", + "deleteAccountCardTitle": "Excluir conta por completo", + "deleteAccountCardDescription": "Exclui sua conta junto com chaves de acesso, log de auditoria e sessões.", + "deleteAccountCta": "Excluir conta", + "deleteAccountConfirmTitle": "Excluir conta permanentemente?", + "deleteAccountConfirmDescription": "Sua conta, todos os dados de saúde, chaves de acesso, sessões e registros de auditoria serão excluídos permanentemente. Você será desconectado imediatamente depois.", + "deleteAccountSuccess": "Conta excluída. Desconectando você.", + "deleteAccountFailed": "Não foi possível excluir a conta", + "deleteAccountFinal": "Excluir permanentemente", + "saved": "Salvo", + "savingError": "Erro ao salvar", + "about": { + "version": "Versão do aplicativo", + "gitSha": "Build", + "builtAtLabel": "Compilado em", + "license": "Licença", + "repository": "Código-fonte", + "changelog": "Changelog", + "docs": "Documentação", + "credits": "Créditos e atribuições de dados", + "linksHeading": "Fontes e documentação", + "newerAvailable": "Versão mais recente: {tag}", + "support": { + "title": "Suporte", + "description": "Um resumo para relatório de bug, sem seu nome, e-mail ou valores de saúde.", + "copy": "Copiar informações de suporte", + "copied": "Copiado", + "copyFailed": "Não foi possível montar as informações de suporte." + } + }, + "testConnection": { + "test": "Testar conexão", + "saveFirst": "Salve suas alterações primeiro. O teste usa as configurações salvas.", + "testing": "Testando…", + "ok": "Conectado (latência {latency} ms)", + "errors": { + "credentials_rejected": "Credenciais rejeitadas. Verifique seu token", + "rate_limited": "Taxa limitada pelo upstream", + "timeout": "A solicitação expirou", + "upstream_error": "O upstream retornou um erro", + "upstream_rejected": "O outro lado recusou a mensagem", + "connection_failed": "Falha na conexão", + "not_configured": "Não configurado", + "url_not_public": "A URL não é um endpoint público", + "private_origin_not_approved": "Destino em rede privada. A administração precisa listar esta origem em NOTIFICATION_PRIVATE_ORIGINS", + "private_origin_not_grantable": "Este endereço é link-local, de metadados ou não especificado; nenhuma autorização da administração pode abri-lo. Use o endereço em que o relay escuta", + "url_invalid": "URL inválida", + "redirected": "O endpoint redireciona. Verifique a URL", + "endpoint_not_found": "Endpoint não encontrado na URL", + "credentials_unreadable": "As credenciais não podem ser descriptografadas", + "upstream_invalid_json": "O upstream enviou um JSON inválido", + "vapid_not_configured": "Web Push não configurado (chaves VAPID ausentes)", + "rate_limited_self": "Solicitações de teste demais", + "generic": "Teste falhou" + } + }, + "notificationStatus": { + "title": "Status de entrega", + "description": "Estado de cada canal; “Desativado automaticamente” significa que as tentativas pararam após erros permanentes.", + "emptyDescription": "Configure um canal em Configurações › Integrações › Canais de entrega.", + "stateActive": "Ativo", + "stateAutoDisabled": "Desativado automaticamente", + "stateSendingPaused": "Envio pausado", + "stateManuallyDisabled": "Desativado", + "lastSuccess": "Último envio bem-sucedido", + "lastFailure": "Última falha", + "consecutiveFailures": "Falhas consecutivas", + "disabledReason": "Motivo", + "nextRetry": "Próxima tentativa", + "reEnable": "Reativar", + "sendTest": "Enviar teste", + "emptyTitle": "Nenhum canal configurado ainda" + }, + "identity": { + "description": "Detalhes opcionais para a exportação do registro de saúde (capa do PDF + exportação FHIR). Todos os campos são opcionais.", + "fullName": "Nome completo", + "fullNamePlaceholder": "ex.: Maria Silva", + "insurer": "Plano de saúde", + "insurerPlaceholder": "ex.: Unimed", + "insuranceNumber": "Número do plano (KVNR)", + "insuranceNumberHint": "10 caracteres: uma letra + nove dígitos (ex.: A123456780)." + }, + "healthRecord": { + "title": "Exportar registro de saúde", + "description": "Um registro completo para o seu médico: em PDF, em FHIR ou ambos.", + "format": "Formato", + "format_pdf": "PDF", + "format_fhir": "Estruturado (FHIR)", + "format_package": "Pacote: PDF + FHIR", + "range": "Período", + "range90": "Últimos 90 dias", + "range180": "Últimos 6 meses", + "range365": "Últimos 12 meses", + "practiceName": "Clínica (opcional)", + "practiceNamePlaceholder": "ex.: Dr. Silva", + "includedData": "Dados incluídos", + "includeCharts": "Incluir gráficos de tendência (somente PDF)", + "fhirNote": "A saída estruturada segue o padrão FHIR R4 (compatível com ePA).", + "generate": "Gerar", + "documentsLink": "Documentos deste período", + "range30": "Últimos 30 dias", + "rangeCustom": "Período personalizado", + "rangeCustomStart": "De", + "rangeCustomEnd": "Até", + "errorGeneric": "A exportação não pôde ser gerada. Tente novamente.", + "errorRateLimit": "Você atingiu o limite de exportações desta hora.", + "errorModuleDisabled": "A exportação do registro de saúde está desativada para esta conta.", + "visitOffer": "Uma consulta está prevista em {when}: {what}." + }, + "globalExcludedInjectionSitesLabel": "Locais de injeção excluídos globalmente", + "globalExcludedInjectionSitesHint": "Nunca oferecidos e rejeitados ao registrar uma dose, mesmo que um medicamento prefira-os.", + "sharing": { + "createTitle": "Novo link de compartilhamento", + "createDescription": "O link é somente leitura e tem prazo limitado.", + "label": "Rótulo", + "labelPlaceholder": "ex.: Dr. Silva, check-up anual", + "range": "Dias de histórico", + "rangeHint": "Até onde a janela compartilhada alcança.", + "expiry": "Expira em (dias)", + "expiryHint": "No máximo {max} dias.", + "expiryInvalid": "A validade deve estar entre 1 e {max} dias.", + "create": "Criar link", + "tokenCreated": "Link de compartilhamento criado", + "copied": "Copiado para a área de transferência", + "activeTitle": "Links ativos", + "noActive": "Nenhum link de compartilhamento ativo.", + "created": "Criado", + "expires": "Expira", + "accessCount": "Visualizações", + "revoke": "Revogar", + "revokeDescription": "Revogue este link imediatamente. Qualquer pessoa que o tenha perde acesso na hora. Não é possível desfazer.", + "statusActive": "Ativo", + "statusRevoked": "Revogado", + "statusExpired": "Expirado", + "inactiveTitle": "Revogados e expirados ({count})", + "shownOnce": "Exibido apenas uma vez. Capture o código QR e a frase-senha agora; nenhum dos dois pode ser recuperado depois.", + "qrAlt": "Código QR contendo o link de compartilhamento e a frase-senha", + "linkLabel": "Link", + "passphraseLabel": "Frase-senha", + "passphraseHint": "O destinatário precisa do link e desta frase-senha. O código QR contém ambos.", + "copyLink": "Copiar link", + "copyPassphrase": "Copiar frase-senha", + "protected": "Frase-senha", + "attachTitle": "Anexar documentos", + "attachButton": "Escolher documentos", + "attachCount": "{count} de {max} selecionados", + "attachFrozen": "O conjunto de documentos fica fixo quando você cria o link. Documentos não podem ser adicionados ou removidos depois.", + "attachRemove": "Remover {title}", + "exifNote": "Os metadados da câmera (EXIF/GPS) são removidos de imagens JPEG, PNG e WebP ao compartilhar. Arquivos PDF, TIFF, HEIC e Office passam inalterados.", + "documentCount": "Documentos anexados: {count}", + "qrScanTitle": "Escaneie para abrir em outro dispositivo", + "qrScanHint": "Aponte a câmera de um celular para o código para abrir o registro compartilhado. A frase-senha já está incluída.", + "pickerTitle": "Anexar documentos", + "pickerDescription": "Pesquise no seu cofre e selecione documentos para compartilhar. Até {max}.", + "pickerSearch": "Pesquisar documentos", + "pickerEmpty": "Nenhum documento encontrado.", + "pickerDone": "Concluído", + "pickerSelectedCount": "{count} de {max} selecionados", + "pickerMaxReached": "Você atingiu o máximo de {max} documentos.", + "scopeTitle": "O que este link contém", + "scopeInsuranceExcluded": "Os detalhes do plano nunca são compartilhados por um link.", + "statusNeedsReselect": "Escolha o conteúdo novamente", + "reselectReason": "Este link atendia a um escopo que nunca foi escolhido, então foi encerrado. Crie um novo e escolha o que ele deve conter.", + "reselectAction": "Criar um substituto", + "createDetail": "O token é exibido uma vez na criação. Guarde-o então; não pode ser recuperado.", + "activeDescription": "Links que você compartilhou, quando expiram e com que frequência foram abertos." + }, + "genderOther": "Outro", + "nightscout": "Nightscout", + "nightscoutTag": "MCG", + "nightscoutDescription": "Conecte seu próprio site Nightscout para sincronizar leituras contínuas de glicose no painel de glicose.", + "nightscoutViewData": "Ver sua glicose", + "nightscoutUrl": "URL do Nightscout", + "nightscoutUrlSavedPlaceholder": "Salvo. Digite uma nova URL para substituí-la", + "nightscoutToken": "Token de API", + "nightscoutTokenOptional": "Opcional para um site público", + "nightscoutTokenSavedPlaceholder": "Salvo. Digite um novo token para substituí-lo", + "nightscoutTokenHelp": "Cole um token de acesso das ferramentas administrativas do seu Nightscout. Deixe em branco se seu site for publicamente legível.", + "nightscoutPrivateOperatorTitle": "O acesso privado ao Nightscout exige aprovação da administração do servidor.", + "nightscoutPrivateOperatorDescription": "Peça ao administrador do servidor para aprovar esta origem exata do Nightscout.", + "nightscoutConnect": "Conectar", + "nightscoutUpdate": "Salvar alterações", + "nightscoutConnected": "Nightscout conectado.", + "nightscoutConnectFailed": "Não foi possível conectar ao Nightscout.", + "nightscoutSync": "Sincronizar agora", + "nightscoutSyncResult": "{count} medições sincronizadas", + "nightscoutSyncFailed": "Falha na sincronização", + "nightscoutDisconnect": "Desconectar", + "nightscoutDisconnectTitle": "Desconectar o Nightscout?", + "nightscoutDisconnectDescription": "As sincronizações futuras param. As leituras de glicose já importadas permanecem no seu histórico.", + "polar": "Polar", + "polarDescription": "Conecte sua conta Polar para sincronizar a recuperação Nightly Recharge, estágios de sono, atividade diária e sessões de treino.", + "polarViewData": "Ver seu sono e recuperação", + "polarCredentials": "Credenciais de API", + "polarClientId": "ID do cliente", + "polarClientSecret": "Segredo do cliente", + "polarCredentialsSaved": "Credenciais salvas", + "polarCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "polarSaveCredentials": "Salvar", + "polarUnavailable": "A Polar não está configurada neste servidor. Adicione suas próprias credenciais OAuth da Polar acima ou peça ao administrador para configurar o aplicativo compartilhado.", + "polarConnect": "Conectar a Polar", + "polarSync": "Sincronizar agora", + "polarSyncResult": "{count} medições sincronizadas", + "polarSyncFailed": "Falha na sincronização", + "polarDisconnect": "Desconectar", + "polarDisconnectTitle": "Desconectar a Polar?", + "polarDisconnectDescription": "As sincronizações futuras param. As leituras já importadas permanecem no seu histórico.", + "polarOauthConnected": "Polar conectada. A primeira sincronização começa em segundo plano.", + "polarOauthFailed": "Falha na conexão com a Polar", + "polarOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta da Polar não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "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.", + "rate_limited": "Tentativas de conexão demais. Espere um momento e tente novamente.", + "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." + }, + "oura": "Oura", + "ouraDescription": "Conecte sua conta Oura para sincronizar prontidão, estágios de sono, variabilidade da frequência cardíaca e atividade diária.", + "ouraViewData": "Ver seu sono e recuperação", + "ouraCredentials": "Credenciais de API", + "ouraClientId": "ID do cliente", + "ouraClientSecret": "Segredo do cliente", + "ouraCredentialsSaved": "Credenciais salvas", + "ouraCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "ouraSaveCredentials": "Salvar", + "ouraUnavailable": "A Oura não está configurada neste servidor. Adicione suas próprias credenciais OAuth da Oura acima ou peça ao administrador para configurar o aplicativo compartilhado.", + "ouraConnect": "Conectar a Oura", + "ouraSync": "Sincronizar agora", + "ouraSyncResult": "{count} medições sincronizadas", + "ouraSyncFailed": "Falha na sincronização", + "ouraDisconnect": "Desconectar", + "ouraDisconnectTitle": "Desconectar a Oura?", + "ouraDisconnectDescription": "As sincronizações futuras param. As leituras já importadas permanecem no seu histórico.", + "ouraOauthConnected": "Oura conectada. A primeira sincronização começa em segundo plano.", + "ouraOauthFailed": "Falha na conexão com a Oura", + "ouraOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta da Oura não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "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.", + "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." + }, + "integrationSetupGuide": "Guia de configuração", + "coach": { + "memory": { + "edit": "Editar", + "source": { + "user": "de você", + "coach": "do Coach" + } + }, + "state": {} + }, + "integrationRedirectGuide": { + "intro": "Esta conexão usa seu próprio aplicativo de desenvolvedor {provider}; leva cerca de 5 minutos para configurar:", + "step1": "Crie um aplicativo no portal de desenvolvedores {provider}.", + "step2": "Defina a URL de redirecionamento/callback dele para:", + "step3": "Cole o ID do cliente e o segredo do cliente que ele fornece acima." + }, + "security": { + "sessionsTitle": "Sessões ativas", + "sessionsDescription": "Dispositivos e navegadores atualmente conectados à sua conta.", + "sessionsLoadError": "As sessões ativas não puderam ser carregadas.", + "sessionsEmpty": "Nenhuma sessão ativa.", + "currentSession": "Este dispositivo", + "lastActive": "Última atividade em {time}", + "unknownLocation": "Local desconhecido", + "revokeSession": "Sair", + "revokeError": "Não foi possível concluir a solicitação. Tente novamente.", + "signOutEverywhere": "Sair em todos os outros lugares", + "signOutEverywhereDone": "Desconectadas {count} outra(s) sessão(ões)", + "activityTitle": "Atividade de segurança", + "activityDescription": "Entradas recentes, alterações de segurança e exportações de dados na sua conta.", + "activityEmpty": "Nenhuma atividade de segurança ainda.", + "activityLoadError": "A atividade de segurança não pôde ser carregada.", + "action": { + "newDevice": "Entrada em novo dispositivo", + "loginFailed": "Entrada falhou", + "login": "Entrada", + "passwordChange": "Senha alterada", + "mfa": "Alteração de dois fatores", + "sessionRevoke": "Sessão encerrada", + "token": "Alteração de token de API", + "accountDelete": "Conta excluída", + "dataClear": "Dados redefinidos", + "export": "Exportação de dados", + "other": "Evento de segurança" + }, + "active": "Ativo", + "inactive": "Inativo", + "stepUpRequired": "Pela sua segurança, entre novamente para alterar seu segundo fator.", + "useRecoveryCode": "Use um código de recuperação em vez disso", + "useAuthenticator": "Use seu aplicativo autenticador em vez disso", + "totp": { + "title": "Aplicativo autenticador", + "description": "Use um código baseado em tempo de um aplicativo autenticador como seu segundo fator.", + "setUp": "Configurar", + "step1": "Escaneie o código QR com seu aplicativo autenticador ou digite o segredo manualmente.", + "step2": "Digite o código de 6 dígitos que o aplicativo exibe para confirmar.", + "qrAlt": "Código QR para configuração do aplicativo autenticador", + "qrUnavailable": "Código QR indisponível", + "manualEntry": "Ou digite este segredo manualmente", + "enterCode": "Digite o código de 6 dígitos", + "verify": "Verificar", + "setupFailed": "Não foi possível iniciar a configuração. Tente novamente.", + "invalidCode": "Esse código não é válido. Tente novamente.", + "disable": "Desativar", + "disableTitle": "Desativar autenticação de dois fatores", + "disableConfirm": "Digite um código atual para desligar seu segundo fator. Isso também exclui seus códigos de recuperação.", + "currentCode": "Código atual", + "disableFailed": "Não foi possível desativar o segundo fator." + }, + "recovery": { + "saveNow": "Salve estes códigos de recuperação agora", + "saveNowHint": "Cada código funciona uma vez. Eles são exibidos apenas desta vez. Guarde-os em um lugar seguro. Se você perder seu autenticador, um código de recuperação é a única forma de voltar.", + "download": "Baixar", + "remainingOne": "{count} código de recuperação restante.", + "remainingOther": "{count} códigos de recuperação restantes.", + "regenerate": "Gerar códigos novamente", + "regenFailed": "Não foi possível gerar os códigos de recuperação novamente.", + "savedIt": "Eu os salvei", + "regenerateTitle": "Gerar códigos de recuperação novamente?", + "regenerateConfirm": "Isso substitui seus códigos de recuperação atuais. Seus códigos existentes param de funcionar imediatamente, e um novo conjunto é exibido apenas uma vez." + }, + "keys": { + "title": "Chaves de segurança", + "description": "Registre uma chave de segurança de hardware ou plataforma como segundo fator.", + "empty": "Nenhuma chave de segurança registrada ainda.", + "add": "Adicionar chave de segurança", + "addFailed": "Não foi possível registrar a chave de segurança.", + "rename": "Renomear", + "renameFailed": "Não foi possível renomear a chave de segurança.", + "remove": "Remover chave de segurança", + "removeFailed": "Não foi possível remover a chave de segurança.", + "removeConfirm": "Esta chave de segurança deixará de funcionar como segundo fator.", + "lastUsed": "Último uso em {date}", + "neverUsed": "Nunca usada", + "added": "adicionada em {date}", + "nameLabel": "Nome da chave de segurança" + }, + "passkeyNudge": { + "title": "Adicione uma chave de acesso para entrar mais rápido", + "body": "As chaves de acesso permitem entrar com sua digital, rosto ou PIN do dispositivo, sem senha para lembrar." + }, + "trustedDevices": { + "title": "Dispositivos confiáveis", + "description": "Navegadores que você escolheu confiar pulam o segundo fator por 30 dias. A senha ainda é exigida. Revogue qualquer um que não reconheça.", + "loadError": "Não foi possível carregar os dispositivos confiáveis.", + "revokeError": "Não foi possível revogar o dispositivo. Tente novamente.", + "revoke": "Revogar", + "revokeAll": "Esquecer todos os dispositivos", + "revokeAllDone": "{count} dispositivo(s) confiável(is) esquecido(s)", + "unnamed": "Dispositivo desconhecido", + "current": "Este dispositivo", + "expires": "Confiável até {date}", + "revokeConfirmTitle": "Parar de confiar neste dispositivo?", + "revokeConfirmBody": "Ele pedirá seu segundo fator novamente na próxima vez que você entrar por ele.", + "revokeAllConfirmTitle": "Parar de confiar em todos os dispositivos?", + "revokeAllConfirmBody": "Todos os dispositivos pedirão seu segundo fator novamente na próxima vez que você entrar por eles, incluindo este." + }, + "revokeSessionConfirmTitle": "Desconectar este dispositivo?", + "revokeSessionConfirmBody": "{device} precisará entrar novamente. Nada registrado nele é afetado.", + "signOutEverywhereConfirmTitle": "Desconectar todos os outros dispositivos?", + "signOutEverywhereConfirmBody": "Todos os outros dispositivos, todos os assistentes de IA conectados e todos os tokens de API precisarão entrar ou ser configurados novamente. Este dispositivo permanece conectado. Nada que você tenha registrado é afetado.", + "signOutEverywhereShareLinks": "Também encerrar os links de compartilhamento com médicos", + "signOutEverywhereInvites": "Convites para o seu registro que ninguém aceitou ainda são retirados. Pessoas que já aceitaram mantêm o acesso; você pode encerrá-lo depois.", + "signOutEverywhereInvitesDone": "Retirados {count} convite(s) que ninguém havia aceitado.", + "grantsKeptTitle": "Estas pessoas ainda podem ver seu registro", + "grantsKeptBody": "Sair não encerra o acesso que você deu a alguém. Encerre aqui se você não o deu ou não quer mais que a pessoa tenha." + }, + "privacy": { + "encryption": { + "title": "Criptografado em repouso", + "summary": "Seus dados sensíveis são criptografados em repouso com {algorithm} em {columns} campos em {models} tipos de registro.", + "statement": "Seus dados sensíveis são criptografados em repouso com AES-256-GCM." + }, + "stored": { + "title": "O que é armazenado", + "measurements": "Medições: peso, pressão arterial, pulso e todos os outros valores que você ou um dispositivo registram", + "integrations": "Tokens de integração (criptografados)", + "security": "Conta e atividade de segurança (sessões, log de entrada)", + "profile": "Seu perfil, histórico médico e detalhes do registro de saúde", + "modules": "Registros de cada módulo: {list}" + }, + "workoutRoutes": {}, + "retention": { + "title": "Retenção", + "description": "Por quanto tempo os registros com prazo são mantidos antes da limpeza automática.", + "coach": "Conversas do Coach: mantidas por {days} dias", + "audit": "Log de atividade de segurança: mantido por {days} dias", + "delivery": "Log de entrega de notificações: mantido por {days} dias", + "unavailable": "Os detalhes de retenção estão indisponíveis agora." + }, + "delete": { + "title": "Excluir ou redefinir", + "description": "Remova sua conta por completo ou apague seus registros de saúde mantendo a conta.", + "backupLag": "A exclusão remove seus dados imediatamente. Se este servidor mantiver backups criptografados fora do host, as cópias dos seus dados são excluídas desse armazenamento logo depois, ou na próxima execução noturna se o armazenamento estiver inacessível.", + "openAdvanced": "Excluir ou redefinir" + }, + "posture": { + "title": "Postura de privacidade", + "description": "Controle quanto dos seus dados é compartilhado com recursos de IA.", + "openAi": "Modo de privacidade da IA" + }, + "sessions": {} + }, + "mcp": { + "enableTitle": "Endpoint MCP remoto", + "enableDescription": "Permita que um assistente compatível com MCP (Claude.ai, ChatGPT) leia seus dados de saúde por um token com escopo.", + "endpointLabel": "URL do conector", + "connectDescription": "Cole esta URL na configuração de conector personalizado do seu assistente, depois autorize com o token abaixo ou entre quando solicitado.", + "tokensTitle": "Tokens do conector", + "tokensDescription": "Gere um token para conectar um assistente, somente leitura, a menos que você permita registro abaixo.", + "scopeNote": "Novos tokens só podem ler seus próprios registros. O acesso de escrita (health:write) é concedido por token com a chave abaixo. Um token nunca alcança funções administrativas.", + "writeScopeToggleLabel": "Permitir registro (health:write)", + "writeScopeNote": "Adiciona o escopo health:write para que o assistente possa registrar novas medições e registros de humor na sua conta. Cada escrita é confirmada primeiro. O token ainda não pode excluir ou editar entradas existentes, alterar medicamentos ou alcançar funções REST ou administrativas. Deixe desligado para acesso somente leitura.", + "connectionsTitle": "Assistentes conectados", + "connectionsDescription": "Assistentes que você autorizou pelo fluxo de entrada.", + "noConnections": "Nenhum assistente conectado.", + "connectionConnected": "Conectado", + "connectionLastUsed": "Último uso", + "connectionNeverUsed": "Nunca usado", + "connectionRevoke": "Desconectar", + "connectionRevokeDescription": "Desconecta este assistente e revoga o token dele.", + "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" + }, + "strava": "Strava", + "stravaDescription": "Conecte sua conta Strava para sincronizar treinos, distância, ritmo e mais.", + "stravaViewData": "Ver seus treinos", + "stravaCredentials": "Credenciais de API", + "stravaClientId": "ID do cliente", + "stravaClientSecret": "Segredo do cliente", + "stravaCredentialsSaved": "Credenciais salvas", + "stravaCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", + "stravaSaveCredentials": "Salvar", + "stravaUnavailable": "O Strava não está configurado neste servidor. Adicione suas próprias credenciais OAuth do Strava acima ou peça ao administrador para configurar o aplicativo compartilhado.", + "stravaConnect": "Conectar o Strava", + "stravaSync": "Sincronizar agora", + "stravaSyncResult": "{count} medições sincronizadas", + "stravaSyncFailed": "Falha na sincronização", + "stravaDisconnect": "Desconectar", + "stravaDisconnectTitle": "Desconectar o Strava?", + "stravaDisconnectDescription": "A conexão com o Strava será desconectada. Os dados sincronizados anteriormente serão preservados.", + "stravaOauthConnected": "Strava conectado. A primeira sincronização começa em segundo plano.", + "stravaOauthFailed": "Falha na conexão com o Strava", + "stravaOauthError": { + "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", + "state": "A resposta do Strava não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", + "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.", + "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.", + "status": { + "unavailable": "Indisponível neste dispositivo." + }, + "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", + "progress": { + "title": "Progresso da sincronização", + "receivedLabel": "Recebido", + "oldestLabel": "Mais antigo", + "flowing": "Dados chegando", + "waiting": "Aguardando dados" + }, + "delivery": { + "title": "Entrega de dados", + "lastTriggerLabel": "Último gatilho", + "lastBackgroundLabel": "Última sincronização em segundo plano", + "backgroundNever": "Nunca", + "noSyncYet": "Nenhuma sincronização ainda", + "trigger": { + "foreground": "Em primeiro plano", + "background": "Em segundo plano", + "push": "Push", + "unknown": "Desconhecido", + "manual": "Manual" + } + }, + "freshness": { + "title": "Dados recebidos", + "lastReceived": "Último recebido", + "lastNewValue": "Último novo valor", + "lastBackground": "Última sincronização em segundo plano", + "never": "Nunca", + "lastBackfill": "Último preenchimento retroativo" + } + }, + "garminInfo": { + "title": "Garmin", + "body": "Conecte sua conta Garmin para sincronizar treinos, sono e mais.", + "docsLink": "Documentação do Garmin" + }, + "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." + }, + "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.", + "setUpAgain": "Configurar novamente", + "showChecklist": "Mostrar checklist", + "checklistShown": "Checklist exibido", + "checklistNothingHidden": "Nada oculto no checklist" + }, + "documentSources": { + "title": "Fontes de documentos", + "description": "Conecte fontes de documentos ao HealthLog.", + "explainer": "Fontes de documentos alimentam o cofre do HealthLog.", + "systemLabel": "Sistema", + "statusConnected": "Conectado", + "statusNotConnected": "Não conectado", + "connectedSince": "Conectado desde {when}", + "originRemoved": "Origem removida", + "baseUrl": "URL base", + "allowedOrigins": "Origens permitidas", + "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", + "test": "Testar", + "testOk": "OK: {provider}", + "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" + }, + "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." + }, + "passwordTitle": "Senha", + "tokenNameLabel": "Nome do token", + "displayCard": { + "title": "Exibição", + "description": "Escolha como os dados são exibidos no HealthLog." + }, + "integrationCard": { + "state": { + "ok": "OK", + "limited": "Limitado", + "degraded": "Degradado", + "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" + }, + "when": { + "today": "hoje", + "yesterday": "ontem", + "date": "em {date}" + }, + "items": { + "activity": "Atividade", + "sleep": "Sono" + }, + "moreValuesOne": "+ {count} valor", + "moreValuesFew": "+ {count} valores", + "moreValuesOther": "+ {count} valores", + "notConnected": "Não conectado", + "lastData": "Últimos dados: {when}", + "lastDataNone": "Nenhum dado ainda", + "reconnect": "Reconectar", + "resume": "Retomar", + "menuLabel": "Abrir menu da integração", + "menu": { + "credentials": "Credenciais", + "address": "Endereço" + }, + "syncing": "Sincronizando…", + "details": { + "title": "Detalhes", + "none": "Nenhum detalhe ainda", + "state": "Estado", + "since": "Desde", + "lastSync": "Última sincronização", + "lastData": "Últimos dados", + "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" + }, + "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", + "dawarichApiKey": "Chave de API", + "dawarichApiKeyHelp": "Cole uma chave de API das ferramentas administrativas do seu Dawarich.", + "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.", + "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.", + "dawarichHomeSave": "Salvar", + "dawarichHomeSaved": "Local de casa 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.", + "rateLimited": "Solicitações demais. Espere um momento e tente novamente.", + "homePlaceUnknown": "Local de casa desconhecido.", + "notConnected": "Não conectado.", + "generic": "Erro desconhecido ao conectar." + }, + "fitbitRetirement": {}, + "moduleState": {} + }, "admin": { "title": "Administração", "subtitle": "Status do sistema, usuários e configurações", @@ -7028,7 +8808,8 @@ "detailedToast": "As notificações agora incluem números de saúde.", "genericToast": "As notificações não incluem mais números de saúde.", "saveError": "Não foi possível salvar. Tente novamente mais tarde." - } + }, + "checkupReminders": {} }, "i18n": { "maintainershipBanner": { @@ -7151,6 +8932,44 @@ "characters": "caracteres", "minLength": "É necessário pelo menos {count} caracteres." }, + "telegram": { + "errorInvalidAction": "Ação inválida.", + "errorMedicationNotFound": "Medicamento não encontrado.", + "errorMedicationInactive": "Medicamento não encontrado ou inativo.", + "errorUnknownAction": "Ação desconhecida.", + "snoozeOneHour": "1 hora", + "snoozeThreeHours": "3 horas", + "snoozedFor": "{name} adiado por {duration}.", + "skipped": "{name} pulado.", + "alreadyRecorded": "{name} já foi registrado.", + "recordedAsTaken": "{name} registrado como tomado.", + "confirmed": "{name} confirmado.", + "genericConfirmed": "Confirmado.", + "cancelled": "Cancelado.", + "moodLogged": "Registrado: {score}/5", + "moodNotePrompt": "Adicione uma nota curta (opcional).", + "moodNoteSaved": "Nota salva.", + "moodNoteExpired": "Esse prompt expirou.", + "remindLater": "Lembrete adiado por {duration}.", + "measurementDone": "Marcado como concluído.", + "measurementNotFound": "Lembrete não encontrado.", + "buttonMoodNote": "Nota…", + "buttonLater": "Mais tarde", + "buttonDone": "Concluído", + "noActiveMedications": "Nenhum medicamento ativo encontrado.", + "whichMedication": "Qual medicamento você tomou?", + "cancelButton": "Cancelar", + "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", + "measureValuePrompt": "Responda com o valor para registrá-lo (opcional).", + "buttonMeasureValue": "Valor…", + "measureValueSaved": "Leitura salva.", + "measureValueInvalid": "Responda com um número para registrar uma leitura.", + "measureValueOutOfRange": "Esse valor está fora da faixa plausível.", + "measureValueExpired": "Esse prompt expirou." + }, "medicationReminders": { "phaseGreenTitle": "🟢 Lembrete: {medName}", "phaseGreenMessage": "🟢 Lembrete:\n{medName} ({doseInfo}, {timeWindow})\nA janela fecha em {minutes} min.", @@ -7328,15 +9147,7 @@ "metricWristTemperature": "Temperatura noturna do pulso", "metricSkinTemperature": "Temperatura da pele", "metricBloodGlucose": "Glicemia", - "metricMood": "Humor", - "unitHours": "h", - "unitSteps": "passos", - "unitBpm": "bpm", - "unitMs": "ms", - "unitMood": "pts", - "confidenceLow": "Confiança baixa", - "confidenceMedium": "Confiança média", - "confidenceHigh": "Confiança alta" + "metricMood": "Humor" }, "title": "Insights do ciclo", "symptomPatternsTitle": "Padrões de sintomas por fase", @@ -7772,8 +9583,6 @@ "description": "Insira a leitura; o lembrete é marcado como concluído." }, "manage": { - "title": "Gerenciar lembretes", - "description": "Ative ou desative lembretes individuais.", "empty": "Nenhum lembrete para personalizar ainda." }, "dashboard": { @@ -8146,116 +9955,14 @@ "doneToastFew": "Mesclado em {name}, {count} leituras movidas", "doneToastOther": "Mesclado em {name}, {count} leituras movidas", "error": "Não foi possível mesclar os biomarcadores. Tente novamente." - } - }, - "aboutPage": { - "eyebrow": "Sobre", - "title": "Sobre o HealthLog", - "lastUpdated": "Última atualização: {date}", - "project": "Projeto", - "credits": "Créditos" - }, - "aiRuns": { - "backgroundDocument": "Lendo em segundo plano. Você pode sair desta página; o resultado é salvo junto com o documento.", - "backgroundScan": "Lendo em segundo plano. Com um modelo lento, isso pode levar alguns minutos.", - "waitingForWorker": "Aguardando o worker em segundo plano. Se isso não mudar, o worker do servidor pode não estar em execução.", - "errorWorkerUnavailable": "O worker em segundo plano não está disponível agora. Tente novamente em instantes, ou peça ao operador do servidor para verificá-lo.", - "errorTimedOut": "A leitura demorou mais do que o seu tempo de resposta de IA permite. Tente novamente, ou aumente o tempo de resposta nas configurações de IA." - }, - "bodySites": { - "title": "Locais do corpo", - "description": "Procedimentos e condições por onde no corpo eles ocorrem.", - "loadError": "Não foi possível carregar os locais do corpo.", - "emptyTitle": "Nenhum local do corpo registrado ainda", - "emptyDescription": "Adicione um local do corpo a um procedimento ou condição e ele aparece aqui.", - "sitesLabel": "Locais do corpo", - "sidesLabel": "Lado", - "allSides": "Todos os lados", - "pickPrompt": "Escolha um local para ver o que está arquivado lá.", - "noMatchTitle": "Nada registrado neste lado", - "visitsTitle": "Procedimentos e consultas", - "conditionsTitle": "Condições", - "hiddenDocument": "Um documento não compartilhado com você", - "hiddenLabResult": "Um resultado laboratorial não compartilhado com você", - "hiddenCondition": "Uma condição não compartilhada com você", - "hiddenVisit": "Uma consulta não compartilhada com você", - "linkedLabel": "Registros vinculados", - "conditionSince": "Desde {onset}", - "conditionDates": "{onset} a {resolved}" - }, - "chart": { - "overlay": { - "controls": { - "title": "Sobreposições do gráfico", - "trendIndicator": "Tendência de 7 dias", - "trendArrow": "Seta de tendência", - "targetRange": "Faixa alvo", - "comparisonBaseline": "Comparação", - "comparisonUnavailable": "Ainda sem dados do período anterior", - "tooltip": { - "openSettings": "Configurações de sobreposição do gráfico" - } + }, + "trend": { + "slope": {}, + "projection": { + "exits": {} } } }, - "checkups": { - "viewSwitchLabel": "Mostrar check-ups, consultas, procedimentos ou locais do corpo", - "tabVorsorge": "Check-ups", - "tabVisits": "Consultas", - "tabProcedures": "Procedimentos", - "tabBodySites": "Locais do corpo" - }, - "comparison": { - "baseline": { - "none": "Nenhuma", - "lastMonth": "Mês passado", - "lastYear": "Ano passado" - }, - "captionLastMonth": "vs. mês passado", - "captionLastYear": "vs. ano passado", - "deltaVs": { - "lastMonth": "{delta} vs. mês passado", - "lastYear": "{delta} vs. ano passado" - }, - "tooltipPrior": "Período anterior", - "unavailable": { - "lastMonth": "Comparação indisponível: ainda sem dados do mês passado", - "lastYear": "Comparação indisponível: ainda sem dados do ano passado" - }, - "notAvailableForCompliance": "Comparação N/A para adesão" - }, - "metricCatalog": { - "title": "O que o HealthLog pode acompanhar", - "description": "Cada domínio de métrica que o HealthLog suporta, tenha você dados para ele ou não, e o que os forneceria.", - "statusPresent": "Acompanhado", - "statusAbsent": "Ainda não acompanhado", - "statusModuleOff": "Desligado", - "loadError": "Não foi possível carregar seu status de acompanhamento.", - "connectCta": "Conectar uma fonte", - "viewCta": "Ver", - "ecg": { - "source": "Tiras de ECG de derivação única de um relógio compatível (Withings ScanWatch hoje), sincronizadas automaticamente." - }, - "watchdog": { - "title": "Triagem automática", - "description": "O HealthLog também observa silenciosamente em segundo plano: notificações de ritmo irregular e distúrbio respiratório de um relógio conectado, alertas de desvio de baseline do estado de saúde e mudanças notáveis entre seus dois painéis laboratoriais mais recentes. Ele exibe um cartão apenas quando algo se destaca. Com pelo menos uma dessas fontes conectada, nenhum cartão aparecendo é um bom sinal, não um recurso faltando; com nenhuma conectada ainda, simplesmente não há nada sendo observado." - } - }, - "moduleOff": { - "disabled": { - "description": "{module} está desligado para este registro, então suas páginas permanecem ocultas. Ligue-o novamente para trazê-las de volta.", - "title": "{module} está desligado" - }, - "notGranted": { - "description": "{module} está fora das seções compartilhadas com você. O que um registro compartilhado cobre é decidido pela pessoa que o possui.", - "title": "Não faz parte do acesso compartilhado" - }, - "unavailable": { - "description": "O operador desligou {module} para todas as contas neste servidor. Nenhuma configuração sua pode trazê-lo de volta.", - "title": "Indisponível neste servidor" - }, - "openModules": "Abrir Configurações, Módulos" - }, "modules": { "cycle": { "label": "Ciclo", @@ -8338,666 +10045,177 @@ "description": "Anos de relance: condições, medicamentos e consultas ao lado das suas leituras, mais seus próprios eventos de vida." } }, - "palette": { - "title": "Buscar", - "description": "Encontre uma página, configuração, módulo, ação ou entrada nos seus registros.", - "placeholder": "Buscar páginas, configurações, seus registros…", - "results": "Resultados", - "noResults": "Nada encontrado para “{query}”.", - "moduleOn": "Ligado", - "moduleOff": "Desligado", - "hintMove": "Mover", - "hintOpen": "Abrir", - "hintClose": "Fechar", - "groups": { - "recent": "Recentes", - "pages": "Páginas", - "insights": "Insights", - "settings": "Configurações", - "modules": "Módulos", - "actions": "Ações", - "records": "Nos seus registros" + "moduleOff": { + "disabled": { + "description": "{module} está desligado para este registro, então suas páginas permanecem ocultas. Ligue-o novamente para trazê-las de volta.", + "title": "{module} está desligado" }, - "actions": { - "capture": "Nova entrada", - "coach": "Perguntar ao Coach", - "backup": "Criar um backup", - "today": "Abrir hoje", - "shortcuts": "Mostrar atalhos de teclado" + "notGranted": { + "description": "{module} está fora das seções compartilhadas com você. O que um registro compartilhado cobre é decidido pela pessoa que o possui.", + "title": "Não faz parte do acesso compartilhado" }, - "records": { - "loading": "Pesquisando seus registros…", - "empty": "Nada nos seus registros para “{query}”.", - "error": "Não foi possível pesquisar seus registros. Tente novamente em instantes.", - "truncated": "Apenas as entradas mais recentes foram pesquisadas.", - "kind": { - "visit": "Consulta", - "condition": "Condição", - "document": "Documento", - "vaccination": "Vacina", - "lab": "Resultado laboratorial", - "medication": "Medicamento", - "symptom": "Sintoma", - "workout": "Treino", - "note": "Nota" - }, - "source": { - "mood": "Nota de humor", - "measurement": "Nota sobre uma leitura", - "illness": "Diário de doenças" - } - } + "unavailable": { + "description": "O operador desligou {module} para todas as contas neste servidor. Nenhuma configuração sua pode trazê-lo de volta.", + "title": "Indisponível neste servidor" + }, + "openModules": "Abrir Configurações, Módulos" }, - "practitioners": { - "title": "Clínicas e médicos", - "description": "Seu próprio catálogo de endereços: digite uma clínica uma vez, escolha em todo lugar.", - "linkLabel": "Catálogo de endereços", - "searchPlaceholder": "Buscar nome, clínica ou especialidade", - "loadError": "Não foi possível carregar o catálogo de endereços.", - "emptyTitle": "Nenhuma entrada ainda", - "emptyDescription": "Adicione uma clínica para poder escolhê-la ao registrar uma consulta.", - "noMatchTitle": "Nenhuma correspondência", - "noMatchDescription": "Nenhuma entrada corresponde a esta busca.", - "createTitle": "Adicionar entrada", - "editTitle": "Editar entrada", - "formDescription": "Apenas o nome é obrigatório.", - "name": "Nome", - "specialty": "Especialidade", - "practice": "Clínica", - "location": "Endereço", - "phone": "Telefone", - "note": "Nota", - "noteHint": "Armazenado criptografado.", - "saveFailed": "Não foi possível salvar a entrada.", - "deleteTitle": "Excluir esta entrada?", - "deleteDescription": "Suas consultas existentes permanecem e mantêm este nome.", - "deleteFailed": "Não foi possível excluir a entrada.", - "noSpecialtyGroup": "Sem especialidade" - }, - "safety": { - "floor": { - "bpHighTitle": "Pressão arterial muito alta", - "bpHighDoctor": "Duas leituras recentes foram {systolic}/{diastolic} mmHg ou mais. Descanse, verifique novamente em alguns minutos e entre em contato com seu médico o mais rápido possível se permanecer tão alta.", - "bpHighEmergency": "Duas leituras recentes foram {systolic}/{diastolic} mmHg ou mais e você anotou sintomas. Se você tiver dor no peito, falta de ar, fraqueza ou alterações na visão ou fala, ligue para os serviços de emergência agora.", - "bpLowTitle": "Pressão arterial baixa", - "bpLowDoctor": "Duas leituras recentes tiveram sistólica abaixo de {systolic} mmHg. Se você sentir tontura ou desmaio, sente-se ou deite-se, e entre em contato com seu médico se continuar.", - "bpLowEmergency": "Duas leituras recentes tiveram sistólica abaixo de {systolic} mmHg e você anotou sintomas. Se você se sentir prestes a desmaiar, confuso ou com pele fria e pegajosa, ligue para os serviços de emergência agora.", - "glucoseLowTitle": "Glicemia baixa", - "glucoseLowDoctor": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}). Tome carboidrato de ação rápida, verifique novamente em 15 minutos e entre em contato com seu médico se as baixas continuarem.", - "glucoseLowEmergency": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}) e você anotou sintomas. Trate agora com açúcar de ação rápida; se não puder, ou se sentir muito mal, ligue para os serviços de emergência.", - "glucoseLowSevereTitle": "Glicemia muito baixa", - "glucoseLowSevereDoctor": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}). Trate imediatamente com carboidrato de ação rápida, verifique novamente em 15 minutos e entre em contato com seu médico.", - "glucoseLowSevereEmergency": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}) e você anotou sintomas. Trate agora; se não conseguir manter comida no estômago ou se sentir muito mal, ligue para os serviços de emergência.", - "glucoseHighTitle": "Glicemia muito alta", - "glucoseHighDoctor": "Duas leituras recentes foram {value} {unit} ou mais. Verifique novamente, hidrate-se e entre em contato com seu médico o mais rápido possível se permanecer tão alta.", - "glucoseHighEmergency": "Duas leituras recentes foram {value} {unit} ou mais e você anotou sintomas. Se você tiver vômito, respiração rápida ou confusão, ligue para os serviços de emergência agora." - } - }, - "series": { - "reference": { - "targetUpper": "Seu alvo, limite superior", - "targetLower": "Seu alvo, limite inferior", - "clinicalUpper": "Limite clínico superior", - "clinicalLower": "Limite clínico inferior" - } - }, - "shortcuts": { - "title": "Atalhos de teclado", - "description": "Teclas que funcionam em qualquer lugar do aplicativo, exceto enquanto você digita em um campo.", - "menuEntry": "Atalhos de teclado", - "then": "então", - "search": "Buscar", - "help": "Mostrar esta lista", - "close": "Fechar um diálogo ou painel", - "previousDay": "Dia anterior", - "nextDay": "Próximo dia", - "toggleDay": "Abrir ou fechar o dia", - "dayHint": "Dia anterior e próximo funcionam enquanto um dia está aberto.", - "groups": { - "navigation": "Navegação", - "actions": "Ações", - "day": "Dia" - } - }, - "version": { - "updateAvailable": { - "title": "Uma nova versão está disponível", - "reload": "Recarregar", - "dismiss": "Dispensar" - } - }, - "environment": { - "fields": { - "tempMean": "Temperatura diária", - "tempMin": "Mínima noturna", - "sunshine": "Insolação", - "daylight": "Luz do dia", - "precip": "Precipitação", - "pressureMean": "Pressão barométrica", - "pressureDelta": "Variação de pressão", - "pm25": "Partículas finas (PM2,5)", - "pm10": "Partículas (PM10)", - "no2": "Dióxido de nitrogênio", - "ozone8h": "Ozônio (máxima de 8 horas)", - "europeanAqi": "Índice europeu de qualidade do ar", - "uvIndexMax": "Índice UV (máxima)", - "dustMax": "Poeira do Saara", - "pollenMax": "Pólen (mais alto)" + "vaccinations": { + "title": "Vacinas", + "subtitle": "Seu registro de imunização, dose por dose.", + "listLoadError": "Não foi possível carregar as vacinas.", + "series": { + "booster": "Reforço", + "ofTotal": "Dose {position} de {total}", + "doseN": "Dose {position}" }, - "chip": { - "day": "Clima em {date}", - "pollenHigh": "Pólen alto: {kinds}", - "hotNight": "Noite quente", - "veryPoorAir": "Ar muito ruim" - }, - "pollen": { - "alder": "amieiro", - "birch": "bétula", - "grass": "gramíneas", - "mugwort": "artemísia", - "olive": "oliveira", - "ragweed": "ambrosia" - }, - "movement": { - "awayFromHome": "Tempo fora de casa", - "distance": "Distância percorrida" - } - }, - "links": { - "picker": { - "add": "Adicionar", - "done": "Concluído", - "selectAll": "Selecionar tudo", - "searchPlaceholder": "Buscar", - "searchNoMatch": "Nenhuma correspondência", - "suggested": "Perto desta data", - "loadError": "Não foi possível carregar a lista.", - "removeNamed": "Remover {name}", - "removed": "Desvinculado {name}", - "linked": "Vinculado", - "loadNewer": "Carregar mais recentes", - "loadOlder": "Carregar mais antigos", - "period": { - "showing": "Mostrando {period}" - } - }, - "related": { - "title": "Relacionados", - "kind": { - "labResult": "Resultado laboratorial", - "encounter": "Consulta", - "document": "Documento", - "conditionEpisode": "Condição", - "medication": "Medicamento", - "vaccination": "Vacina" - }, - "via": { - "encounter": "por meio de uma consulta", - "efficacyTarget": "por meio do alvo de eficácia" - }, - "pick": { - "conditionEpisode": "Condições", - "document": "Documentos", - "encounter": "Consultas", - "medication": "Medicamentos", - "vaccination": "Vacinas" - }, - "nothingToOffer": "Nada para vincular ainda.", - "saveError": "Não foi possível salvar o vínculo." - } - }, - "lifeEvents": { - "title": "Evento de vida", - "add": "Evento de vida", - "privacy": "Título e nota são armazenados criptografados. Eles não vão para nenhuma IA.", - "emptyHint": "Uma mudança, um nascimento ou um novo emprego dá aos anos uma referência.", - "save": "Salvar", - "cancel": "Cancelar", - "delete": "Excluir evento de vida", - "saved": "Evento de vida salvo", - "deleted": "Evento de vida excluído", - "fields": { - "title": "O que aconteceu?", - "category": "Tipo", - "when": "Quando", - "precision": "Precisão", - "addEnd": "Data de fim, se foi um período", - "endDate": "Até", - "note": "Nota", - "optionalTag": "opcional", - "notePlaceholder": "Algo que você queira saber depois", - "removeEnd": "Remover data de fim" - }, - "category": { - "FAMILY": "Família", - "HOME": "Casa", - "WORK": "Trabalho", - "LOSS": "Perda", - "OTHER": "Outro" - }, - "precision": { - "DAY": "Dia", - "MONTH": "Mês", - "YEAR": "Ano" - }, - "edit": "Editar evento de vida", - "errors": { - "titleRequired": "Dê um nome ao evento.", - "titleTooLong": "No máximo 120 caracteres.", - "categoryRequired": "Escolha um tipo.", - "dateRequired": "Insira uma data válida.", - "endBeforeStart": "O fim é anterior ao início.", - "noteTooLong": "No máximo 2000 caracteres." - }, - "saveFailed": "Não foi possível salvar.", - "deleteFailed": "Não foi possível excluir.", - "deleteConfirm": { - "title": "Excluir este evento de vida?", - "body": "Seu título e nota serão apagados." - } - }, - "reportSelection": { - "leafAnamnesis": "Perfil de saúde", - "groupIdentity": "Dados pessoais", - "groupVitals": "Sinais vitais", - "groupCardio": "Coração e circulação", - "groupBody": "Medidas corporais", - "groupSleepRecovery": "Sono e recuperação", - "groupActivity": "Atividade", - "groupMobility": "Mobilidade e marcha", - "groupEnvironment": "Ambiente", - "groupGlucose": "Glicemia", - "groupLabs": "Resultados laboratoriais", - "groupMedications": "Medicamentos", - "groupHistory": "Condições e alergias", - "groupSensitive": "Dados sensíveis", - "leafPatientIdentity": "Nome, data de nascimento, gênero, altura", - "leafInsurance": "Operadora e número do seguro", - "leafGlucosePanel": "Painel de glicose (tempo na faixa, GMI, variabilidade)", - "leafLabResults": "Resultados laboratoriais", - "leafMedicationList": "Lista de medicamentos", - "leafMedicationAdministrations": "Cada dose registrada", - "leafMedicationCompliance": "Taxa de adesão", - "leafGlp1Therapy": "Terapia com GLP-1 (histórico de doses, efeitos colaterais)", - "leafAllergies": "Alergias e intolerâncias", - "leafIllnessEpisodes": "Episódios de doença", - "leafFamilyHistory": "Histórico familiar", - "leafMood": "Humor", - "leafCycle": "Ciclo menstrual", - "templateStandard": "Relatório médico padrão", - "applyStandard": "Aplicar {template}", - "standardHint": "Um clique preenche o que uma consulta geral costuma precisar. Cada entrada permanece editável.", - "groupCount": "{on}/{total}", - "groupDisclosure": "Mostrar as entradas em {group}", - "sensitiveHint": "Nada aqui é pré-selecionado. Escolha cada entrada você mesmo.", - "scopeNone": "Nada selecionado ainda. Escolha o que incluir, ou aplique o relatório padrão.", - "scopeCount": "{count} entradas de {groups} áreas", - "scopeSensitive": "incl. {names}", - "leafVisits": "Consultas", - "leafSurgicalHistory": "Histórico cirúrgico", - "leafImmunizations": "Imunizações", - "leafEmergency": "Informações de emergência (tipo sanguíneo, contatos, diretivas)" - }, - "nutrients": { - "names": { - "vitamin_a": "Vitamina A", - "thiamin": "Tiamina (B1)", - "riboflavin": "Riboflavina (B2)", - "niacin": "Niacina (B3)", - "pantothenic_acid": "Ácido pantotênico (B5)", - "vitamin_b6": "Vitamina B6", - "biotin": "Biotina (B7)", - "folate": "Folato (B9)", - "vitamin_b12": "Vitamina B12", - "vitamin_c": "Vitamina C", - "vitamin_d": "Vitamina D", - "vitamin_e": "Vitamina E", - "vitamin_k": "Vitamina K", - "calcium": "Cálcio", - "iron": "Ferro", - "magnesium": "Magnésio", - "phosphorus": "Fósforo", - "zinc": "Zinco", - "copper": "Cobre", - "manganese": "Manganês", - "selenium": "Selênio", - "chromium": "Cromo", - "molybdenum": "Molibdênio", - "iodine": "Iodo", - "water": "Água", - "caffeine": "Cafeína", - "dha": "DHA (ômega-3)", - "epa": "EPA (ômega-3)" - }, - "page": { - "title": "Ingestão de nutrientes", - "description": "Hidratação e ingestão de vitaminas/minerais sincronizadas do app de saúde do seu telefone, mais entradas manuais de água.", - "moduleOffDescription": "Ative o módulo de nutrientes para ver hidratação e ingestão de vitaminas/minerais aqui. A ingestão sincronizada passa a fazer parte do registro que o Coach pode ler.", - "moduleOffCta": "Ativar nutrientes", - "emptyTitle": "Nenhum dado de nutrientes ainda", - "emptyDescription": "Os dados chegam pela sincronização do app de saúde do seu telefone ou por uma entrada manual de água.", - "loadError": "Não foi possível carregar seus dados de nutrientes", - "lastAttemptTitle": "Uma sincronização chegou, mas nada pôde ser armazenado", - "lastAttemptAt": "Última tentativa: {date}", - "lastAttemptReason": { - "unitMismatch": "Os valores que chegaram não corresponderam às unidades que este aplicativo espera para esses nutrientes, então não puderam ser armazenados.", - "valueOutOfRange": "As quantidades que chegaram eram maiores do que este aplicativo pode plausivelmente armazenar, então não puderam ser salvas.", - "dayInvalid": "As entradas continham uma data que o servidor não pôde aceitar. Isso pode acontecer quando o relógio ou fuso horário do lado remetente está errado, então vale verificar.", - "upsertFailed": "Essas entradas chegaram ao servidor, mas um problema deste lado impediu que fossem salvas. Não há nada que você precise fazer.", - "unknown": "Essas entradas chegaram, mas não puderam ser armazenadas." - } - }, - "hydration": { - "referenceMeta": "Ingestão de referência {value} {unit}/dia (EFSA)" - }, - "caffeine": { - "ceilingMeta": "Limite de nível seguro {value} {unit}/dia (EFSA)" - }, - "micronutrients": { - "title": "Vitaminas e minerais", - "rowMeta": "{days} de {window} dias, ref. {value} {unit} (EFSA)", - "rowMetaNoRef": "{days} de {window} dias", - "footer": "{tracked} de {total} micronutrientes acompanhados têm dados nesta janela.", - "emptyTitle": "Nenhum dado de micronutriente sincronizado ainda", - "loadError": "Não foi possível carregar seus dados de nutrientes", - "sourcePart": "{source} {value} {unit}", - "aboveUpperLimit": "Acima do nível de ingestão superior tolerável para adultos de {value} {unit} por dia ({source}).", - "aboveUpperLimitSupplemental": "A parcela de suplementos está acima do nível de ingestão superior tolerável para adultos de {value} {unit} por dia para suplementos ({source}).", - "upperLimitForm": { - "retinol": "O nível cobre apenas vitamina A pré-formada (retinol): se a quantidade vier de betacaroteno, não se aplica.", - "folic_acid": "O nível cobre ácido fólico de suplementos e alimentos fortificados, não o folato de alimentos comuns.", - "magnesium_salts": "O nível cobre sais de magnésio facilmente dissociáveis em suplementos, não o magnésio dos alimentos.", - "alpha_tocopherol": "O nível é definido para alfa-tocoferol." - } - }, - "sparseNote": "Um número baixo aqui geralmente significa registro esparso, não deficiência. Os totais diários do Apple Health refletem o que seus aplicativos registraram, não a ingestão dietética total.", - "units": { - "IU": "UI" - }, - "sources": { - "APPLE_HEALTH": "Sincronizado", - "MANUAL": "Inserido", - "SUPPLEMENT": "Suplementos" - } - }, - "symptoms": { - "add": "Novo sintoma", - "nameLabel": "Nome", - "namePlaceholder": "ex.: Aura", - "iconLabel": "Ícone", - "icons": { - "Tag": "Etiqueta", - "Activity": "Atividade", - "Heart": "Coração", - "HeartPulse": "Batimento", - "Brain": "Cérebro", - "Zap": "Raio", - "Flame": "Chama", - "Snowflake": "Floco de neve", - "Droplet": "Gota", - "CircleDot": "Ponto", - "BatteryLow": "Bateria baixa", - "MoonStar": "Lua e estrela", - "PersonStanding": "Pessoa", - "Drama": "Máscaras", - "Frown": "Rosto franzido", - "Cookie": "Biscoito", - "Soup": "Sopa", - "Pill": "Comprimido", - "Thermometer": "Termômetro", - "Stethoscope": "Estetoscópio" - }, - "limitReached": "Você tem 8 sintomas. Oculte um para adicionar outro.", - "saveError": "Não foi possível salvar o sintoma. Tente novamente.", - "nameRequired": "Dê um nome ao sintoma.", - "unreadableLabel": "Sintoma ilegível", - "intensityPill": "{value}/10", - "entry": { - "sheetDescription": "Um dos seus sintomas, quão forte e quando.", - "symptom": "Sintoma", - "symptomRequired": "Escolha um sintoma.", - "intensity": "Intensidade", - "intensityRequired": "Defina quão forte foi.", - "intensityUnset": "Não definido", - "anchorLow": "Nenhum", - "anchorHigh": "O pior imaginável", - "intensityValueText": "{value} de {max} ({low} a {high})", - "when": "Quando", - "during": "Durante uma doença", - "duringNone": "Não vinculado", - "note": "Nota", - "notePlaceholder": "O que mais estava acontecendo?", - "reset": "Redefinir formulário", - "emptyHint": "Adicione seu primeiro sintoma, por exemplo aura ou dor de cabeça.", - "emptyHintNoManage": "Nenhum sintoma foi configurado para este registro ainda.", - "limitHint": "Até {limit} sintomas. Oculte um na página de doenças para adicionar outro." - }, - "section": { - "title": "Seus sintomas", - "log": "Registrar", - "loadError": "Não foi possível carregar seus sintomas.", - "summaryOne": "Uma vez em 30 dias, {max}/10, última {date}", - "summaryFew": "{count} vezes em 30 dias, até {max}/10, última {date}", - "summaryOther": "{count} vezes em 30 dias, até {max}/10, última {date}", - "summaryNoneRecent": "Não nos últimos 30 dias, última {date}", - "summaryNever": "Ainda não registrado", - "menuLabel": "Opções para {symptom}", - "eventMenuLabel": "Opções para esta entrada de {symptom}", - "hide": "Ocultar", - "show": "Mostrar novamente", - "deleteTitle": "Excluir sintoma?", - "deleteBody": "“{symptom}” e todas as suas entradas serão excluídos. Para manter o histórico, oculte-o em vez disso.", - "deleteEventTitle": "Excluir entrada?", - "deleteEventBody": "Esta entrada será excluída.", - "hiddenOne": "Ocultos (1)", - "hiddenFew": "Ocultos ({count})", - "hiddenOther": "Ocultos ({count})", - "recent": "Últimos 30 dias", - "recentEmpty": "Nada registrado nos últimos 30 dias.", - "editEventTitle": "Editar {symptom}", - "editSymptomTitle": "Editar sintoma" - }, - "episode": { - "title": "Sintomas registrados", - "during": "durante {illness}" - } - }, - "encounters": { - "kind": { - "routine": "Consulta de rotina", - "acute": "Consulta aguda", - "specialist": "Consulta com especialista", - "preventive": "Check preventivo", - "emergency": "Emergência", - "hospital": "Hospital", - "therapy": "Sessão de terapia", - "other": "Compromisso", - "procedure": "Procedimento ou cirurgia" - }, - "laterality": { - "left": "Esquerdo", - "right": "Direito", - "both": "Ambos os lados", - "none": "Não informado" - }, - "bodySiteWithSide": "{site} ({side})", - "sectionTitle": "Consultas", - "sectionDescription": "Consultas médicas e compromissos agendados em um só lugar.", - "add": "Consulta", - "loadError": "Não foi possível carregar as consultas.", - "emptyTitle": "Nenhuma consulta registrada ainda", - "emptyDescription": "Uma data é suficiente. Todo o resto é opcional.", - "upcomingHeading": "Próximas", - "pastHeading": "Passadas", - "createTitle": "Registrar uma consulta", - "editTitle": "Editar consulta", - "formDescription": "Apenas a data é obrigatória.", - "created": "Consulta salva", - "updated": "Consulta atualizada", - "saveFailed": "Não foi possível salvar a consulta.", - "checkupNotClosed": "Consulta salva. O check permanece aberto; seu acesso não cobre isso.", - "status": { - "planned": "Planejada", - "done": "Comparecida", - "cancelled": "Cancelada", - "noShow": "Perdida" - }, - "card": { - "documentCount": "documentos vinculados", - "labCount": "resultados laboratoriais vinculados", - "conditionCount": "condições vinculadas" + "row": { + "lot": "Lote {lot}" }, "form": { - "date": "Data e hora", - "dateDerivesStatusHint": "Uma data no futuro é um compromisso agendado.", - "status": "Status", + "date": "Data", + "catalogLabel": "Vacina", + "identityHint": "Escolha uma vacina da lista ou digite-a abaixo. Qualquer uma é suficiente.", + "catalogNone": "Escolha uma vacina", + "catalogSearch": "Buscar vacinas", + "catalogNoMatch": "Nenhuma entrada do catálogo encontrada", + "catalogClear": "Limpar seleção", + "freeTextLabel": "Texto livre", + "freeTextPlaceholder": "como escrito no registro", + "seriesToggle": "Adicionar detalhes da série", + "doseNumber": "Nº da dose", + "seriesDoses": "Doses na série", + "lot": "Número do lote", + "site": "Local da injeção", + "siteNone": "Não especificado", "practitioner": "Clínica ou médico", - "practitionerHint": "Opcional: você pode adicionar o nome depois.", - "practitionerNone": "Não especificado", - "practitionerSearch": "Buscar nome ou clínica", - "practitionerNoMatch": "Nenhuma entrada encontrada.", - "practitionerAdd": "Adicionar novo", - "practitionerClear": "Limpar seleção", - "kind": "Tipo", - "reason": "Motivo", - "outcome": "Resultado", - "outcomeReveal": "Adicionar um resultado", - "bodySite": "Local do corpo", - "bodySiteHint": "Por exemplo joelho ou vesícula.", - "laterality": "Lado", - "linkDocuments": "Documentos", - "linkLabResults": "Resultados laboratoriais", - "linkConditions": "Condições", - "linkNothingToOffer": "Nada aqui para vincular ainda." + "note": "Nota", + "linkDocuments": "Vincular um documento", + "linkNothingToOffer": "Nenhum documento ainda." + }, + "site": { + "LEFT_ARM": "Braço esquerdo", + "RIGHT_ARM": "Braço direito", + "LEFT_THIGH": "Coxa esquerda", + "RIGHT_THIGH": "Coxa direita", + "ORAL": "Oral", + "NASAL": "Nasal", + "OTHER": "Outro" + }, + "createTitle": "Registrar uma vacina", + "editTitle": "Editar vacina", + "formDescription": "Uma data e a vacina são suficientes; todo o resto é opcional.", + "created": "Vacina salva", + "updated": "Vacina atualizada", + "saveFailed": "Não foi possível salvar a vacina.", + "deleteTitle": "Excluir esta vacina?", + "deleteDescription": "A entrada é removida do seu registro. Um lembrete de reforço planejado permanece.", + "deleteFailed": "Não foi possível excluir a vacina.", + "info": { + "primarySeriesOne": "Série primária: {count} dose", + "primarySeriesFew": "Série primária: {count} doses", + "primarySeriesOther": "Série primária: {count} doses", + "yearly": "Vacinação anual", + "boosterYearsOne": "Reforço tipicamente a cada {count} ano", + "boosterYearsFew": "Reforço tipicamente a cada {count} anos", + "boosterYearsOther": "Reforço tipicamente a cada {count} anos", + "boosterMonthsOne": "Reforço tipicamente a cada {count} mês", + "boosterMonthsFew": "Reforço tipicamente a cada {count} meses", + "boosterMonthsOther": "Reforço tipicamente a cada {count} meses", + "standard60": "Vacinação padrão a partir dos 60 anos", + "sourceLabel": "Fonte: {source}", + "affordanceLabel": "Informações de cronograma" + }, + "booster": { + "title": "Planejar um reforço?", + "body": "Você pode definir um lembrete para o próximo reforço a partir desta dose. Altere o intervalo ou o rótulo, ou recuse.", + "interval": "Intervalo", + "label": "Rótulo", + "labelSuffix": "reforço", + "decline": "Agora não", + "confirm": "Definir lembrete", + "planned": "Reforço planejado", + "failed": "Não foi possível criar o lembrete.", + "everyYearsOne": "a cada {count} ano", + "everyYearsFew": "a cada {count} anos", + "everyYearsOther": "a cada {count} anos", + "everyMonthsOne": "a cada {count} mês", + "everyMonthsFew": "a cada {count} meses", + "everyMonthsOther": "a cada {count} meses" }, - "deleteTitle": "Excluir esta consulta?", - "deleteDescription": "A entrada é removida. Se a consulta estiver agendada, seu lembrete para junto com ela.", - "deleteFailed": "Não foi possível excluir a consulta.", "suggestion": { - "single": "Isso pertence a esta consulta?", - "choose": "A qual consulta isso pertence?" + "single": "Arquivar contra esta vacina?", + "choose": "A qual vacina esta digitalização pertence?", + "linked": "Vinculado à vacina", + "failed": "Falha ao vincular.", + "unnamed": "Vacina" }, - "episodeCard": { - "title": "Consultas sobre isso", - "emptyLine": "Nenhuma consulta vinculada a esta condição ainda.", - "add": "Adicionar uma consulta" + "empty": { + "title": "Nenhuma vacina registrada ainda", + "description": "Transcreva sua caderneta de vacinação linha por linha. Uma data e a vacina são suficientes." }, - "dashboard": { - "nextVisit": "Próximo compromisso: {what} em {when}" + "catalog": { + "tetanus": "Tétano", + "diphtheria": "Difteria", + "pertussis": "Coqueluche (pertussis)", + "polio": "Poliomielite", + "measles": "Sarampo", + "mumps": "Caxumba", + "rubella": "Rubéola", + "varicella": "Varicela (catapora)", + "hib": "Hib (Haemophilus influenzae b)", + "hepatitis-a": "Hepatite A", + "hepatitis-b": "Hepatite B", + "influenza": "Influenza (gripe)", + "pneumococcal": "Pneumococo", + "herpes-zoster": "Cobreiro (herpes zoster)", + "rsv": "VSR", + "covid-19": "COVID-19", + "fsme": "Encefalite transmitida por carrapato (TBE)", + "hpv": "HPV (papilomavírus humano)", + "meningococcal-acwy": "Meningococo ACWY", + "meningococcal-b": "Meningococo B", + "rotavirus": "Rotavírus", + "typhoid": "Febre tifoide", + "rabies": "Raiva", + "yellow-fever": "Febre amarela", + "japanese-encephalitis": "Encefalite japonesa", + "cholera": "Cólera", + "td": "Td (tétano, difteria)", + "tdap": "dTpa (tétano, difteria, coqueluche)", + "tdap-ipv": "dTpa-VPI (quádrupla)", + "dtap-ipv": "DTaP-VPI (infantil quádrupla)", + "hexavalent": "Sêxtupla (DTaP-VPI-Hib-HepB)", + "mmr": "Tríplice viral (sarampo, caxumba, rubéola)", + "mmrv": "Tétruple viral (sarampo, caxumba, rubéola, varicela)", + "hepa-hepb": "Hepatite A e B", + "hepa-typhoid": "Hepatite A e febre tifoide" }, - "procedures": { - "title": "Procedimentos e cirurgias", - "description": "Todo procedimento e cirurgia que você já fez, do mais recente ao mais antigo.", - "add": "Procedimento", - "searchLabel": "Filtrar por local do corpo", - "searchPlaceholder": "Por exemplo joelho", - "sitesLabel": "Locais do corpo", - "allSites": "Todos", - "count": "{shown} de {total}", - "emptyTitle": "Nenhum procedimento registrado ainda", - "emptyDescription": "Registre uma consulta do tipo Procedimento ou cirurgia, ou altere uma consulta existente para ele.", - "noMatchTitle": "Nada corresponde a este filtro", - "clearFilter": "Limpar filtro", - "loadError": "Não foi possível carregar os procedimentos." - } - }, - "day": { - "scoreOfMax": "de {max}", - "cycleDay": "Dia do ciclo {n}", - "cyclePhaseLine": { - "MENSTRUAL": "Dia do ciclo {n}, fase menstrual", - "FOLLICULAR": "Dia do ciclo {n}, fase folicular", - "OVULATORY": "Dia do ciclo {n}, fase ovulatória", - "LUTEAL": "Dia do ciclo {n}, fase lútea" + "renewal": { + "overdue": "Reforço atrasado desde {date}", + "dueSoon": "Reforço previsto para {date}", + "current": "Próximo reforço {date}" }, - "previousDay": "Dia anterior", - "nextDay": "Próximo dia", - "close": "Fechar dia", - "hidePanel": "Ocultar dia", - "showPanel": "Mostrar {date}", - "openDay": "Abrir dia", - "viewWholeDay": "Ver o dia inteiro", - "captureForDay": "Adicionar para este dia", - "empty": "Não há entradas para este dia.", - "notShared": "Algumas áreas não são compartilhadas com você.", - "inTimeline": "Na linha do tempo", - "askCoach": "Perguntar ao Coach sobre este dia", - "loadFailed": "Não foi possível carregar este dia.", - "dayOf": "Dia {n} de {m}", - "dayN": "Dia {n}", - "usualRange": "Normalmente {lo} a {hi}", - "groups": { - "scores": "Pontuações", - "running": "Em execução naquele dia", - "values": "Valores", - "happened": "O que aconteceu", - "movement": "Em movimento" - }, - "notable": { - "extremeHigh": "Maior valor diário desde {since}", - "extremeLow": "Menor valor diário desde {since}", - "firstValue": "Primeira leitura deste tipo", - "gap": "Sem leitura por {days} dias" - }, - "previousDayShortcut": "Dia anterior (Alt + seta esquerda)", - "nextDayShortcut": "Próximo dia (Alt + seta direita)", - "captureShort": "Registrar", - "inTimelineShort": "Linha do tempo", - "askCoachPrompt": "O que aconteceu em {date}?", - "coachChips": "Dias nesta resposta", - "description": "Tudo que seus registros contêm para este dia.", - "openDocument": "Abrir documento", - "previousReading": "Antes, {date}", - "sheetExpand": "Expandir para altura total", - "sheetShrink": "Reduzir", - "valuesLegend": "Ponto para este dia, barra para os 30 dias anteriores", - "valuesAllOne": "Todos os valores", - "valuesAllFew": "Todos os {count} valores", - "valuesAllOther": "Todos os {count} valores", - "valuesFewer": "Menos valores", - "countEntriesOne": "1 entrada", - "countEntriesFew": "{count} entradas", - "countEntriesOther": "{count} entradas", - "meanOfReadingsOne": "Média de 1 leitura", - "meanOfReadingsFew": "Média de {count} leituras", - "meanOfReadingsOther": "Média de {count} leituras", - "sinceLastVisit": { - "title": "Desde a última consulta em {date}", - "countOne": "1 entrada", - "countFew": "{count} entradas", - "countOther": "{count} entradas", - "allOne": "Mostrar tudo", - "allFew": "Mostrar tudo ({count})", - "allOther": "Mostrar tudo ({count})", - "fewer": "Mostrar menos", - "note": "Compilado das suas entradas, sem julgamento. Cada data abre o dia inteiro.", - "report": "Relatório médico de {date} até hoje" - }, - "travel": "Fora", - "event": { - "started": "{label} começou", - "ended": "{label} terminou", - "paused": "{label} pausou", - "resumed": "{label} retomou", - "illnessBegan": "{label} começou", - "illnessResolved": "{label} resolveu" - }, - "pickDate": "Escolher uma data", - "pickerTitle": "Ir para um dia", - "today": "Hoje", - "hasEntries": "tem entradas", - "dayNSince": "Dia {n}, desde {date}", - "sinceDate": "Desde {date}", - "movement": { - "total": "Distância", - "driving": "De carro", - "train": "De trem", - "places": "Lugares visitados", - "away": "Fora de casa", - "travel": "Dia de viagem", - "travelYes": "Sim", - "kilometres": "{value} km", - "miles": "{value} mi" + "custom": { + "title": "Vacinas próprias", + "add": "Adicionar vacina própria", + "name": "Nome", + "components": "Protege contra", + "seriesDoses": "Doses na série primária", + "boosterMonths": "Reforço a cada (meses)", + "saved": "Vacina salva", + "deleted": "Vacina removida", + "deleteConfirm": "Remover esta vacina? Doses já registradas mantêm seu nome.", + "saveFailed": "Não foi possível salvar a vacina.", + "nameTaken": "Você já tem uma vacina com este nome.", + "editTitle": "Editar vacina própria", + "description": "Uma vacina que o catálogo não lista, contada como qualquer entrada do catálogo.", + "componentsHint": "Escolha cada doença contra a qual protege.", + "boosterHint": "Deixe em branco se não houver reforço.", + "protectsAgainst": "Protege contra {list}.", + "deleteTitle": "Remover vacina própria?", + "sectionDescription": "Vacinas que você adicionou porque o catálogo não as lista.", + "catalogGroup": "Catálogo" } }, "illness": { @@ -9168,162 +10386,291 @@ }, "listLoadError": "Não foi possível carregar seus episódios." }, - "vaccinations": { - "title": "Vacinas", - "subtitle": "Seu registro de imunização, dose por dose.", - "listLoadError": "Não foi possível carregar as vacinas.", - "series": { - "booster": "Reforço", - "ofTotal": "Dose {position} de {total}", - "doseN": "Dose {position}" + "coach": { + "reminderSuggestion": { + "title": "Definir um lembrete?", + "accept": "Definir lembrete", + "dismiss": "Agora não", + "stop": "Eu meço o suficiente", + "accepted": "Lembrete definido", + "dismissed": "Ok, não sugerirei isso novamente", + "stopped": "Entendi, pararei de sugerir lembretes", + "failed": "Não foi possível configurar isso. Tente novamente", + "cadence": { + "weightDaily": "Pese-se diariamente, por volta do mesmo horário", + "bp722": "Meça sua pressão arterial duas vezes ao dia por uma semana", + "glucoseStructured": "Teste sua glicose em um cronograma diário estruturado" + } }, - "row": { - "lot": "Lote {lot}" + "suggestedAction": { + "apply": "Adicionar", + "dismiss": "Agora não", + "applied": "Adicionado", + "dismissed": "Dispensado", + "failed": "Não foi possível adicionar isso. Tente novamente", + "checkup": { + "title": "Adicionar um lembrete de check-in?" + }, + "note": { + "title": "Salvar um lembrete?" + }, + "interval": { + "yearly": "Todo ano", + "halfYearly": "A cada seis meses", + "quarterly": "A cada três meses", + "monthly": "Todo mês" + } }, - "form": { - "date": "Data", - "catalogLabel": "Vacina", - "identityHint": "Escolha uma vacina da lista ou digite-a abaixo. Qualquer uma é suficiente.", - "catalogNone": "Escolha uma vacina", - "catalogSearch": "Buscar vacinas", - "catalogNoMatch": "Nenhuma entrada do catálogo encontrada", - "catalogClear": "Limpar seleção", - "freeTextLabel": "Texto livre", - "freeTextPlaceholder": "como escrito no registro", - "seriesToggle": "Adicionar detalhes da série", - "doseNumber": "Nº da dose", - "seriesDoses": "Doses na série", - "lot": "Número do lote", - "site": "Local da injeção", - "siteNone": "Não especificado", - "practitioner": "Clínica ou médico", - "note": "Nota", - "linkDocuments": "Vincular um documento", - "linkNothingToOffer": "Nenhum documento ainda." + "settings": { + "reminderSuggestionsLabel": "Sugestões de cadência", + "reminderSuggestionsDescription": "Deixe o Coach oferecer ocasionalmente um lembrete baseado em evidências para medir uma métrica com mais regularidade." }, - "site": { - "LEFT_ARM": "Braço esquerdo", - "RIGHT_ARM": "Braço direito", - "LEFT_THIGH": "Coxa esquerda", - "RIGHT_THIGH": "Coxa direita", - "ORAL": "Oral", - "NASAL": "Nasal", - "OTHER": "Outro" + "plans": { + "title": "Planos", + "pageDescription": "Planos do tipo \\\"se… então…\\\" acordados nas suas conversas com o Coach. Confirme uma proposta para torná-la parte da memória do Coach.", + "readOnlyNote": "O Coach não está disponível agora, mas você ainda pode ler e excluir seus planos.", + "proposalTitle": "Proposta de plano", + "ifThen": "Se {cue}, então {action}.", + "targetPrefix": "Alvo: {target}", + "reviewPrefix": "Check-in: {when}", + "accept": "Aceitar plano", + "decline": "Recusar", + "accepted": "Plano aceito. O Coach o terá em mente.", + "declined": "Proposta recusada.", + "failed": "Isso não funcionou. Tente novamente.", + "markMet": "Meta atingida", + "abandon": "Encerrar plano", + "remove": "Remover", + "removeTitle": "Remover este plano?", + "removeBody": "O plano e como foi desaparecem do seu histórico. Não há como trazê-los de volta.", + "removeConfirm": "Remover plano", + "empty": "Nenhum plano ainda. Quando você se compromete com uma intenção concreta se-então em uma conversa, o Coach a propõe aqui para confirmação.", + "groupProposed": "Sugestões", + "groupActive": "Ativos", + "groupPast": "Concluídos", + "status": { + "proposed": "Proposto", + "active": "Ativo", + "met": "Atingido", + "abandoned": "Encerrado", + "review_due": "Check-in previsto", + "reviewed": "Revisado" + } }, - "createTitle": "Registrar uma vacina", - "editTitle": "Editar vacina", - "formDescription": "Uma data e a vacina são suficientes; todo o resto é opcional.", - "created": "Vacina salva", - "updated": "Vacina atualizada", - "saveFailed": "Não foi possível salvar a vacina.", - "deleteTitle": "Excluir esta vacina?", - "deleteDescription": "A entrada é removida do seu registro. Um lembrete de reforço planejado permanece.", - "deleteFailed": "Não foi possível excluir a vacina.", - "info": { - "primarySeriesOne": "Série primária: {count} dose", - "primarySeriesFew": "Série primária: {count} doses", - "primarySeriesOther": "Série primária: {count} doses", - "yearly": "Vacinação anual", - "boosterYearsOne": "Reforço tipicamente a cada {count} ano", - "boosterYearsFew": "Reforço tipicamente a cada {count} anos", - "boosterYearsOther": "Reforço tipicamente a cada {count} anos", - "boosterMonthsOne": "Reforço tipicamente a cada {count} mês", - "boosterMonthsFew": "Reforço tipicamente a cada {count} meses", - "boosterMonthsOther": "Reforço tipicamente a cada {count} meses", - "standard60": "Vacinação padrão a partir dos 60 anos", - "sourceLabel": "Fonte: {source}", - "affordanceLabel": "Informações de cronograma" + "refusal": { + "outOfScope": "Posso ajudar apenas com as métricas de saúde no seu registro: medições, medicamentos, humor, tendências. Não posso responder perguntas fora desse escopo.", + "promptInjection": "Percebi uma redação que tenta sobrepor minhas instruções. Sou o Coach do HealthLog e só resumo seus próprios dados de saúde. Reformule sua pergunta nesses termos.", + "conversationPoisoned": "Uma mensagem anterior nesta conversa contém uma redação que sobrepõe minhas instruções. Inicie uma nova conversa." }, - "booster": { - "title": "Planejar um reforço?", - "body": "Você pode definir um lembrete para o próximo reforço a partir desta dose. Altere o intervalo ou o rótulo, ou recuse.", - "interval": "Intervalo", - "label": "Rótulo", - "labelSuffix": "reforço", - "decline": "Agora não", - "confirm": "Definir lembrete", - "planned": "Reforço planejado", - "failed": "Não foi possível criar o lembrete.", - "everyYearsOne": "a cada {count} ano", - "everyYearsFew": "a cada {count} anos", - "everyYearsOther": "a cada {count} anos", - "everyMonthsOne": "a cada {count} mês", - "everyMonthsFew": "a cada {count} meses", - "everyMonthsOther": "a cada {count} meses" + "noRecordedData": "Não tenho leituras registradas sobre o que você perguntou, então não há nada de que eu possa tirar um número. Quando registrar algumas, pergunte novamente e eu trabalharei com seus próprios números.", + "step": { + "read": "Verificando: {domain}", + "readWindow": "Verificando: {domain}, {window}", + "snapshot": "Lendo o resumo do seu registro", + "showResult": "Abrindo uma tabela anterior", + "reuse": "Usando a tabela de antes", + "headerActive": "{label}…", + "listLabel": "O que o Coach examinou", + "toggleShow": "Mostrar o que o Coach examinou", + "toggleHide": "Ocultar o que o Coach examinou", + "announceDone": "Concluído: {label}", + "readingsOne": "1 leitura", + "readingsFew": "{count} leituras", + "readingsOther": "{count} leituras", + "rowsOne": "1 linha", + "rowsFew": "{count} linhas", + "rowsOther": "{count} linhas", + "metricsOne": "1 métrica", + "metricsFew": "{count} métricas", + "metricsOther": "{count} métricas", + "reason": { + "noData": "sem leituras", + "outsideWindow": "sem leituras nesta janela", + "moduleDisabled": "desligado", + "retrievalFailed": "não pôde ser lido", + "invalidArguments": "solicitação não compreendida" + }, + "domain": { + "labs": "Resultados laboratoriais", + "illness": "Doença e recuperação", + "cycle": "Ciclo", + "correlations": "Conexões entre métricas", + "snapshot": "Resumo do registro", + "environment": "Clima e ar", + "day": "Um dia" + }, + "window": { + "last7days": "últimos 7 dias", + "last30days": "últimos 30 dias", + "last90days": "últimos 90 dias", + "lastYear": "últimos 12 meses", + "allTime": "todo o tempo" + }, + "period": { + "current": "este período", + "previous": "o período anterior", + "yearAgo": "um ano antes" + }, + "granularity": { + "day": "por dia", + "week": "por semana", + "month": "por mês" + } }, - "suggestion": { - "single": "Arquivar contra esta vacina?", - "choose": "A qual vacina esta digitalização pertence?", - "linked": "Vinculado à vacina", - "failed": "Falha ao vincular.", - "unnamed": "Vacina" + "result": { + "title": { + "byDay": "{metric} por dia", + "byWeek": "{metric} por semana", + "byMonth": "{metric} por mês", + "previousPeriod": "{metric}, o período anterior", + "yearAgo": "{metric}, um ano antes", + "workoutsBySport": "Treinos por esporte", + "labsLatest": "Últimos resultados laboratoriais", + "sleepByNight": "Sono por noite", + "complianceByDay": "Adesão a medicamentos por dia", + "distribution": "{metric}: com que frequência cada faixa apareceu" + }, + "column": { + "day": "Dia", + "week": "Semana", + "month": "Mês", + "night": "Noite", + "sport": "Esporte", + "sessions": "Sessões", + "analyte": "Teste", + "value": "Valor", + "unit": "Unidade", + "date": "Data", + "referenceRange": "Faixa de referência", + "systolic": "Sistólica", + "diastolic": "Diastólica", + "mean": "Média", + "total": "Total", + "min": "Mínimo", + "max": "Máximo", + "readings": "Leituras", + "rate": "Adesão", + "duration": "Duração", + "range": "Faixa", + "count": "Vezes" + }, + "other": "Outro", + "noReading": "sem leitura", + "showAll": "Mostrar tudo ({count})", + "showFewer": "Mostrar menos", + "copyMenu": "Copiar tabela", + "copyForSpreadsheet": "Copiar para planilha", + "copyAsText": "Copiar como texto", + "copied": "Copiado", + "copyFailed": "Não foi possível copiar a tabela", + "viewLabel": "Visualização", + "viewChart": "Gráfico", + "viewTable": "Tabela", + "chartSummary": "{title}, exibido como gráfico. A visualização em tabela lista cada valor.", + "dataUsed": "Dados usados ({count})", + "truncated": "Mostrando as {shown} linhas mais recentes de {total}", + "withheld": { + "moduleDisabled": "Esta tabela está oculta porque seu módulo está desligado.", + "unavailable": "Esta tabela não pôde ser carregada." + }, + "loading": "Carregando tabela…", + "loadFailed": "Não foi possível carregar as tabelas.", + "reusedFrom": "De uma resposta anterior ({date})", + "reusedFromUndated": "De uma resposta anterior", + "histogramBin": "{from}–{to} {unit}" }, - "empty": { - "title": "Nenhuma vacina registrada ainda", - "description": "Transcreva sua caderneta de vacinação linha por linha. Uma data e a vacina são suficientes." + "method": { + "label": "Como isso foi calculado", + "entry": "{domain}, {window}: {detail}", + "entryNoWindow": "{domain}: {detail}", + "reused": "de uma resposta anterior", + "readingsOne": "1 leitura", + "readingsFew": "{count} leituras", + "readingsOther": "{count} leituras", + "aggregation": { + "mean": "média", + "median": "mediana", + "latest": "leitura mais recente", + "sum": "total", + "count": "contagem", + "rate": "taxa" + }, + "averages": { + "day": "médias diárias", + "week": "médias semanais", + "month": "médias mensais" + }, + "totals": { + "day": "totais diários", + "week": "totais semanais", + "month": "totais mensais" + }, + "absent": { + "noData": "sem leituras", + "outsideWindow": "sem leituras nesta janela", + "moduleDisabled": "desligado" + } }, - "catalog": { - "tetanus": "Tétano", - "diphtheria": "Difteria", - "pertussis": "Coqueluche (pertussis)", - "polio": "Poliomielite", - "measles": "Sarampo", - "mumps": "Caxumba", - "rubella": "Rubéola", - "varicella": "Varicela (catapora)", - "hib": "Hib (Haemophilus influenzae b)", - "hepatitis-a": "Hepatite A", - "hepatitis-b": "Hepatite B", - "influenza": "Influenza (gripe)", - "pneumococcal": "Pneumococo", - "herpes-zoster": "Cobreiro (herpes zoster)", - "rsv": "VSR", - "covid-19": "COVID-19", - "fsme": "Encefalite transmitida por carrapato (TBE)", - "hpv": "HPV (papilomavírus humano)", - "meningococcal-acwy": "Meningococo ACWY", - "meningococcal-b": "Meningococo B", - "rotavirus": "Rotavírus", - "typhoid": "Febre tifoide", - "rabies": "Raiva", - "yellow-fever": "Febre amarela", - "japanese-encephalitis": "Encefalite japonesa", - "cholera": "Cólera", - "td": "Td (tétano, difteria)", - "tdap": "dTpa (tétano, difteria, coqueluche)", - "tdap-ipv": "dTpa-VPI (quádrupla)", - "dtap-ipv": "DTaP-VPI (infantil quádrupla)", - "hexavalent": "Sêxtupla (DTaP-VPI-Hib-HepB)", - "mmr": "Tríplice viral (sarampo, caxumba, rubéola)", - "mmrv": "Tétruple viral (sarampo, caxumba, rubéola, varicela)", - "hepa-hepb": "Hepatite A e B", - "hepa-typhoid": "Hepatite A e febre tifoide" + "followUp": { + "groupLabel": "Acompanhamentos sugeridos", + "widenWindow": "Ver um período anterior mais amplo", + "previousPeriod": "Comparar com o período anterior", + "yearAgo": "Comparar com um ano antes", + "asChart": "Mostrar como gráfico", + "asTable": "Mostrar como tabela", + "relatedMetric": "Ver também: {metric}", + "continue": "Continuar olhando", + "settingLabel": "Sugerir perguntas de acompanhamento", + "settingHint": "Mostrar até três sugestões de acompanhamento sob a última resposta do Coach.", + "changeAssumption": "Em vez disso: {value}" }, - "renewal": { - "overdue": "Reforço atrasado desde {date}", - "dueSoon": "Reforço previsto para {date}", - "current": "Próximo reforço {date}" + "clarify": { + "cardLabel": "O Coach tem uma pergunta", + "choicesLabel": "Respostas possíveis", + "freeTextHint": "Você também pode digitar sua própria resposta.", + "contextHint": "Digite sua resposta abaixo.", + "window": { + "last7days": "Últimos 7 dias", + "last30days": "Últimos 30 dias", + "last90days": "Últimos 90 dias", + "lastYear": "Últimos 12 meses", + "allTime": "Todo o tempo" + }, + "comparison": { + "baseline90d": "Comparar com meus 90 dias usuais" + }, + "anchor": { + "illness": "Desde a doença de {date}" + } }, - "custom": { - "title": "Vacinas próprias", - "add": "Adicionar vacina própria", - "name": "Nome", - "components": "Protege contra", - "seriesDoses": "Doses na série primária", - "boosterMonths": "Reforço a cada (meses)", - "saved": "Vacina salva", - "deleted": "Vacina removida", - "deleteConfirm": "Remover esta vacina? Doses já registradas mantêm seu nome.", - "saveFailed": "Não foi possível salvar a vacina.", - "nameTaken": "Você já tem uma vacina com este nome.", - "editTitle": "Editar vacina própria", - "description": "Uma vacina que o catálogo não lista, contada como qualquer entrada do catálogo.", - "componentsHint": "Escolha cada doença contra a qual protege.", - "boosterHint": "Deixe em branco se não houver reforço.", - "protectsAgainst": "Protege contra {list}.", - "deleteTitle": "Remover vacina própria?", - "sectionDescription": "Vacinas que você adicionou porque o catálogo não as lista.", - "catalogGroup": "Catálogo" + "reuse": { + "caption": "Aqui estão os mesmos números da minha última resposta, inalterados." + } + }, + "safety": { + "floor": { + "bpHighTitle": "Pressão arterial muito alta", + "bpHighDoctor": "Duas leituras recentes foram {systolic}/{diastolic} mmHg ou mais. Descanse, verifique novamente em alguns minutos e entre em contato com seu médico o mais rápido possível se permanecer tão alta.", + "bpHighEmergency": "Duas leituras recentes foram {systolic}/{diastolic} mmHg ou mais e você anotou sintomas. Se você tiver dor no peito, falta de ar, fraqueza ou alterações na visão ou fala, ligue para os serviços de emergência agora.", + "bpLowTitle": "Pressão arterial baixa", + "bpLowDoctor": "Duas leituras recentes tiveram sistólica abaixo de {systolic} mmHg. Se você sentir tontura ou desmaio, sente-se ou deite-se, e entre em contato com seu médico se continuar.", + "bpLowEmergency": "Duas leituras recentes tiveram sistólica abaixo de {systolic} mmHg e você anotou sintomas. Se você se sentir prestes a desmaiar, confuso ou com pele fria e pegajosa, ligue para os serviços de emergência agora.", + "glucoseLowTitle": "Glicemia baixa", + "glucoseLowDoctor": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}). Tome carboidrato de ação rápida, verifique novamente em 15 minutos e entre em contato com seu médico se as baixas continuarem.", + "glucoseLowEmergency": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}) e você anotou sintomas. Trate agora com açúcar de ação rápida; se não puder, ou se sentir muito mal, ligue para os serviços de emergência.", + "glucoseLowSevereTitle": "Glicemia muito baixa", + "glucoseLowSevereDoctor": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}). Trate imediatamente com carboidrato de ação rápida, verifique novamente em 15 minutos e entre em contato com seu médico.", + "glucoseLowSevereEmergency": "Duas leituras recentes estiveram abaixo de {threshold} {unit} ({value} {unit}) e você anotou sintomas. Trate agora; se não conseguir manter comida no estômago ou se sentir muito mal, ligue para os serviços de emergência.", + "glucoseHighTitle": "Glicemia muito alta", + "glucoseHighDoctor": "Duas leituras recentes foram {value} {unit} ou mais. Verifique novamente, hidrate-se e entre em contato com seu médico o mais rápido possível se permanecer tão alta.", + "glucoseHighEmergency": "Duas leituras recentes foram {value} {unit} ou mais e você anotou sintomas. Se você tiver vômito, respiração rápida ou confusão, ligue para os serviços de emergência agora." + } + }, + "version": { + "updateAvailable": { + "title": "Uma nova versão está disponível", + "reload": "Recarregar", + "dismiss": "Dispensar" } }, "mentalHealth": { @@ -9554,1382 +10901,9 @@ "openDetail": "Mostrar detalhes", "historyLoadError": "Não foi possível carregar seu histórico de avaliações", "historyLoadErrorHint": "Isso não significa que você não tem resultados; a lista não pôde ser buscada. Tente novamente.", - "privacyNote": "Suas respostas são armazenadas criptografadas e nunca chegam ao AI Coach." - }, - "measurements": { - "title": "Medições", - "subtitle": "Registre leituras e navegue pelo histórico completo.", - "addMeasurement": "Adicionar", - "editMeasurement": "Editar medição", - "type": "Tipo", - "value": "Valor", - "date": "Data", - "source": "Fonte", - "notes": "Notas", - "typeWeight": "Peso", - "typeBloodPressure": "Pressão arterial", - "typeBpSys": "Sistólica", - "typeBpDia": "Diastólica", - "typePulse": "Pulso", - "typeBodyFat": "Gordura corporal", - "typeSleep": "Sono", - "typeSteps": "Passos", - "typeBloodGlucose": "Glicemia", - "typeTotalBodyWater": "Água corporal total", - "typeBoneMass": "Massa óssea", - "typeOxygenSaturation": "Saturação de oxigênio", - "typeHeartRateVariability": "Variabilidade da frequência cardíaca", - "typeRestingHeartRate": "Frequência cardíaca em repouso", - "typeActiveEnergyBurned": "Energia ativa", - "typeFlightsClimbed": "Andares subidos", - "typeWalkingRunningDistance": "Distância caminhada + corrida", - "typeVo2Max": "VO2 máx", - "typeBodyTemperature": "Temperatura corporal", - "typeFatFreeMass": "Massa livre de gordura", - "typeFatMass": "Massa de gordura", - "typeMuscleMass": "Massa muscular", - "typeSkinTemperature": "Temperatura da pele", - "typePulseWaveVelocity": "Velocidade de onda de pulso", - "typeVascularAge": "Idade vascular", - "typeVisceralFat": "Gordura visceral", - "typeAudioExposureEnv": "Exposição sonora (ambiente)", - "typeAudioExposureHeadphone": "Exposição sonora (fones)", - "typeTimeInDaylight": "Tempo sob luz do dia", - "typeWalkingSteadiness": "Estabilidade ao caminhar", - "typeAudioExposureEvent": "Evento de escuta alta", - "typeRespiratoryRate": "Frequência respiratória", - "typeBodyMassIndex": "Índice de massa corporal", - "typeLeanBodyMass": "Massa corporal magra", - "typeWalkingHeartRateAverage": "Frequência cardíaca ao caminhar (média)", - "typeWalkingAsymmetry": "Assimetria ao caminhar", - "typeWalkingDoubleSupport": "Apoio duplo ao caminhar", - "typeWalkingStepLength": "Comprimento do passo ao caminhar", - "typeWalkingSpeed": "Velocidade ao caminhar", - "glucoseContext": "Contexto", - "glucoseContextFasting": "Jejum (≥8h sem comida)", - "glucoseContextPostprandial": "Pós-refeição (2h depois de comer)", - "glucoseContextRandom": "Aleatória / casual", - "glucoseContextBedtime": "Antes de dormir", - "unitHours": "horas", - "unitSteps": "passos", - "sourceManual": "Manual", - "sourceWithings": "Withings", - "sourceImport": "Importação", - "sourceAppleHealth": "Apple Health", - "systolicLabel": "Sistólica (mmHg)", - "diastolicLabel": "Diastólica (mmHg)", - "pulseLabel": "Pulso (bpm)", - "valueWithUnit": "Valor ({unit})", - "timestamp": "Hora", - "timestampBackdateHint": "Ajuste a data e hora para registrar uma leitura passada.", - "notesPlaceholder": "ex.: depois de uma refeição", - "formReset": "Redefinir formulário", - "saveError": "Erro ao salvar", - "duplicateTimestamp": "Já existe uma medição deste tipo no horário selecionado.", - "serverOwnedSource": "Valores de uma fonte conectada não podem ser editados, mas o horário e a nota permanecem editáveis.", - "deleteError": "Erro ao excluir", - "deletedToast": "Medição excluída", - "restoredToast": "Medição restaurada", - "restoreError": "Falha ao restaurar", - "invalidValue": "Insira um valor válido.", - "invalidTimestamp": "Selecione um horário válido.", - "loginRequired": "Entre para ver as medições.", - "allTypes": "Todos os tipos", - "measurementCount": "{count} medições", - "emptyTitle": "Nenhuma medição ainda", - "emptyDescription": "Registre seu peso, pressão arterial, pulso ou outros sinais vitais para começar a acompanhar tendências.", - "emptyFilteredTitle": "Nenhuma medição corresponde a este filtro", - "emptyFilteredDescription": "Tente um tipo diferente ou limpe o filtro para ver todas as medições.", - "emptyAddFirst": "Adicionar sua primeira medição", - "emptyResetFilter": "Mostrar todos os tipos", - "comment": "Comentário", - "actions": "Ações", - "deleteConfirmTitle": "Excluir medição?", - "deleteConfirmDescription": "Esta medição será excluída. Você pode desfazer isso por um curto momento depois.", - "pageInfo": "Página {page} de {total}", - "previousPage": "Página anterior", - "nextPage": "Próxima página", - "dailyTotalCaption": "({count} amostras)", - "openMetricInsights": "Abrir insights de {type}", - "sleepNapCaption": "+{count} soneca(s)", - "sleepAwakeningsCaption": "{count} despertar(es)", - "expandDay": "Mostrar amostras deste dia", - "collapseDay": "Ocultar amostras deste dia", - "loadError": "Não foi possível carregar as medições.", - "typeCardioRecovery": "Recuperação cardiovascular", - "typeWristTemperature": "Temperatura do pulso", - "typeFallCount": "Quedas", - "typeSixMinuteWalkDistance": "Distância de caminhada de seis minutos", - "typeStairAscentSpeed": "Velocidade de subida de escadas", - "typeStairDescentSpeed": "Velocidade de descida de escadas", - "typeBreathingDisturbances": "Distúrbios respiratórios do sono", - "typeIrregularRhythmNotification": "Notificação de ritmo irregular", - "typeHighHeartRateEvent": "Notificação de frequência cardíaca alta", - "typeLowHeartRateEvent": "Notificação de frequência cardíaca baixa", - "typeWalkingSteadinessEvent": "Alerta de estabilidade ao caminhar", - "typeBreathingDisturbanceEvent": "Distúrbio respiratório", - "typeRecoveryScore": "Pontuação de recuperação", - "typeStressScore": "Pontuação de estresse", - "typeStrainScore": "Pontuação de esforço", - "typeHrvRmssd": "VFC (RMSSD)", - "typeDayStrain": "Esforço do dia", - "typeWorkoutStrain": "Esforço do treino", - "typeSleepPerformance": "Desempenho do sono", - "typeSleepEfficiency": "Eficiência do sono", - "typeSleepConsistency": "Consistência do sono", - "typeSleepNeed": "Necessidade de sono", - "typeEnergyExpenditureKj": "Gasto energético", - "typeAverageHeartRate": "Frequência cardíaca média", - "typeMaxHeartRate": "Frequência cardíaca máxima", - "typeSleepDisturbanceCount": "Distúrbios do sono", - "typeAnsCharge": "Carga do SNA", - "typeCardioLoad": "Carga cardiovascular", - "typeSleepScore": "Pontuação do sono", - "typeBodyTemperatureDeviation": "Desvio da temperatura corporal", - "typeResilience": "Resiliência", - "sourceComputed": "Calculado", - "sourceWhoop": "WHOOP", - "sourceFitbit": "Fitbit", - "sourceNightscout": "Nightscout", - "sourcePolar": "Polar", - "sourceOura": "Oura", - "sourceTelegram": "Telegram", - "sourceMcp": "MCP", - "sourceGoogleHealth": "Google Health", - "sourceStrava": "Strava", - "sourceExternal": "Dispositivo externo", - "bulkDeleteSuccess": "{count} medições excluídas", - "bulkDeleteSuccessOne": "Medição excluída", - "bulkDeleteError": "Erro ao excluir as medições selecionadas", - "bulkDeleteConfirmTitle": "Excluir {count} medições?", - "bulkDeleteConfirmTitleOne": "Excluir esta medição?", - "bulkDeleteConfirmBody": "As {count} medições selecionadas serão excluídas. Você pode desfazer isso por um curto momento depois.", - "bulkDeleteConfirmBodyOne": "A medição selecionada será excluída. Você pode desfazer isso por um curto momento depois.", - "typePhq9Score": "Pontuação PHQ-9", - "typeGad7Score": "Pontuação GAD-7", - "typeGripStrength": "Força de preensão", - "typePainNrs": "Dor (0–10)", - "typeWaistCircumference": "Circunferência da cintura", - "typeWaistToHeight": "Relação cintura-altura", - "unitScore": "pts", - "unitRatio": "razão", - "unitRating": "avaliação", - "typeWho5Score": "Pontuação WHO-5", - "typeSciScore": "Pontuação SCI", - "durationReadAs": "Lida como {duration}", - "durationHoursMinutes": "{hours} h {minutes} min", - "durationHoursOnly": "{hours} h", - "durationMinutesOnly": "{minutes} min", - "durationInvalid": "Insira uma duração como 7,5, 7:30 ou 7h 30m.", - "durationTooLong": "Uma entrada não pode durar mais de 24 horas.", - "sourceHealthConnect": "Health Connect" - }, - "customMetrics": { - "sectionTitle": "Métricas personalizadas", - "sectionSubtitle": "Medições que você define e acompanha por conta própria.", - "add": "Adicionar métrica personalizada", - "addValue": "Adicionar valor", - "defineTitle": "Definir uma métrica personalizada", - "defineDescription": "Dê um nome à medição, defina sua unidade e, opcionalmente, uma faixa alvo.", - "editTitle": "Editar métrica personalizada", - "edit": "Editar", - "delete": "Excluir", - "deleteConfirmTitle": "Excluir esta métrica personalizada?", - "deleteConfirmDescription": "A métrica é removida da sua lista. Seus valores registrados são mantidos.", - "deletedToast": "Métrica personalizada excluída", - "deleteError": "Não foi possível excluir a métrica personalizada", - "showAllValues": "Mostrar todos os valores", - "emptyDescription": "Defina suas próprias medições para acompanhá-las e graficá-las.", - "noValuesYet": "Nenhum valor ainda", - "loadError": "Não foi possível carregar as métricas personalizadas", - "loadMore": "Carregar mais valores", - "showingLatestOf": "Mostrando os {shown} mais recentes de {total}", - "backToMeasurements": "Voltar às medições", - "form": { - "name": "Nome", - "namePlaceholder": "ex.: Força de preensão matinal", - "unit": "Unidade", - "unitPlaceholder": "ex.: kg", - "decimals": "Casas decimais", - "decimalsPlaceholder": "ex.: 1", - "targetLow": "Alvo baixo", - "targetLowPlaceholder": "Limite inferior", - "targetHigh": "Alvo alto", - "targetHighPlaceholder": "Limite superior", - "description": "Descrição", - "descriptionPlaceholder": "O que isso mede (opcional)", - "targetHint": "A faixa alvo é opcional e é desenhada como uma banda no gráfico.", - "correlationEnabled": "Usar na descoberta de correlações", - "correlationEnabledHint": "Adiciona esta métrica como um canal diário delimitado de comportamento. Permanece desligada por padrão.", - "requiredError": "Nome e unidade são obrigatórios", - "rangeOrderError": "O alvo baixo não deve exceder o alvo alto", - "save": "Salvar", - "savedToast": "Métrica personalizada salva", - "updatedToast": "Métrica personalizada atualizada", - "saveError": "Não foi possível salvar a métrica personalizada" - }, - "entry": { - "value": "Valor", - "measuredAt": "Data", - "note": "Nota", - "addDescription": "Registre um valor para esta métrica.", - "edit": "Editar valor", - "editTitle": "Editar valor", - "editDescription": "Atualize o valor, a data ou a nota.", - "delete": "Excluir valor", - "deleteConfirmTitle": "Excluir este valor?", - "deleteConfirmDescription": "Este valor é removido permanentemente.", - "valueError": "Insira um valor numérico", - "timestampError": "Insira uma data válida", - "savedToast": "Valor registrado", - "saveError": "Não foi possível registrar o valor", - "editedToast": "Valor atualizado", - "editError": "Não foi possível atualizar o valor", - "deletedToast": "Valor excluído", - "restoredToast": "Valor restaurado", - "restoreError": "Falha ao restaurar", - "deleteError": "Não foi possível excluir o valor" - }, - "chart": { - "empty": "Nenhum valor nesta faixa", - "valueLabel": "Valor", - "range": { - "30": "30d", - "90": "90d", - "365": "1a", - "all": "Tudo" - } - }, - "detail": { - "title": "Métrica personalizada", - "genericDescription": "Uma medição que você acompanha. Adicione valores para segui-la ao longo do tempo.", - "emptyTitle": "Nenhum valor ainda", - "emptyDescription": "Adicione seu primeiro valor para começar a graficar esta métrica.", - "valuesTitle": "{metric}: todos os valores", - "valuesDescription": "Cada valor registrado para esta métrica.", - "backToMetric": "Voltar para {metric}" - } - }, - "daily": { - "line": { - "allClear": "Nada precisa da sua atenção hoje.", - "scoreReady": "Sua pontuação de saúde para hoje está pronta." - }, - "push": { - "title": "Seu briefing matinal", - "bodyProvisional": "{line}\nO sono de ontem à noite ainda não chegou.", - "titleScore": "Pontuação matinal {score}", - "band": { - "green": "Parece estável hoje.", - "yellow": "Algumas coisas valem uma olhada hoje.", - "red": "Algumas áreas precisam de atenção hoje." - } - }, - "item": { - "doseWindow": { - "title": "Medicamento previsto", - "body": "Uma dose está prevista para breve.", - "bodyNamed": "{name} está previsto para breve.", - "overdueTitle": "Medicamento atrasado", - "overdueBody": "Uma dose está atrasada.", - "overdueBodyNamed": "{name} está atrasado." - }, - "preventiveCare": { - "title": "Check previsto", - "body": "{label} está previsto.", - "bodyManyNamed": "Previstos: {labels}" - }, - "syncIssue": { - "title": "Sincronização precisa de atenção", - "body": "{integration} não está sincronizando. Reconecte para manter seus dados atualizados." - }, - "coachCheckin": { - "title": "Hora de verificar um plano", - "body": "Já faz cerca de uma semana desde que você definiu este plano. Mantenha-o, ajuste-o ou deixe-o ir. Sem pressão de qualquer forma.", - "bodyPlan": "Cerca de uma semana atrás você definiu: “{plan}”. Mantenha-o, ajuste-o ou deixe-o ir. Sem pressão de qualquer forma.", - "adjustPrompt": "Eu gostaria de ajustar meu plano de check-in.", - "adjustPromptPlan": "Eu gostaria de ajustar este plano: “{plan}”" - }, - "tensionWindow": { - "title": "Possível tensão hoje", - "body": { - "morning": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta manhã enquanto você estava parado, possivelmente alguma tensão.", - "afternoon": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta tarde enquanto você estava parado, possivelmente alguma tensão.", - "evening": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta noite enquanto você estava parado, possivelmente alguma tensão.", - "night": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado durante a noite enquanto você estava parado, possivelmente alguma tensão." - } - }, - "ecgNewRecording": { - "title": "Nova gravação de ECG", - "body": "Seu dispositivo registrou um novo ECG. Está pronto para visualizar.", - "bodyVerdict": "Seu dispositivo registrou um novo ECG e relatou: {verdict}.", - "verdict": { - "irregular": "um possível ritmo irregular", - "notDetected": "nenhum ritmo irregular", - "inconclusive": "um resultado inconclusivo" - } - }, - "sameTimeBaseline": { - "title": { - "below": "Atrás do seu ritmo usual", - "above": "À frente do seu ritmo usual" - }, - "body": { - "below": "Até {time} você está com {today} passos. Em um dia usual, você estaria com cerca de {typical} a esta altura.", - "above": "Até {time} você está com {today} passos, à frente dos {typical} que é usual para você a esta altura." - } - }, - "upcomingVisit": { - "title": "Compromisso se aproximando", - "bodyToday": "{what} hoje", - "bodyTomorrow": "{what} amanhã", - "bodyDayAfterTomorrow": "{what} depois de amanhã" - } - }, - "action": { - "logDose": "Registrar dose", - "reconnect": "Reconectar", - "viewCheckups": "Ver checks", - "checkinKeep": "Manter", - "checkinAdjust": "Ajustar", - "checkinLetGo": "Deixar ir", - "viewMilestone": "Ver", - "viewPulse": "Ver pulso", - "viewEcg": "Ver gravação", - "viewSteps": "Ver passos" - }, - "today": { - "scoreLabel": "Pontuação de saúde", - "deltaVsBaseline": "{delta} vs. seu baseline", - "deltaFlat": "Em linha com seu baseline", - "sleepPending": "O sono de ontem à noite ainda não chegou, então a leitura de hoje é provisória.", - "worthALook": "Vale uma olhada", - "allClear": "Nada precisa da sua atenção hoje.", - "ringLink": "Abrir detalhes de {metric}", - "heading": "Hoje", - "steadyWeeksOne": "Estável por {count} semana", - "steadyWeeksFew": "Estável por {count} semanas", - "steadyWeeksOther": "Estável por {count} semanas", - "valueWithUnit": "{value} {unit}", - "rangeWithUnit": "{low} a {high} {unit}", - "rangeAtThisTime": "{range} para este horário do dia", - "vital": { - "RESTING_HEART_RATE": "Frequência cardíaca em repouso", - "HEART_RATE_VARIABILITY": "Variabilidade da frequência cardíaca", - "RESPIRATORY_RATE": "Frequência respiratória", - "OXYGEN_SATURATION": "Saturação de oxigênio", - "BODY_TEMPERATURE": "Temperatura corporal", - "SKIN_TEMPERATURE": "Temperatura da pele", - "BLOOD_PRESSURE_SYS": "Pressão arterial sistólica", - "BLOOD_PRESSURE_DIA": "Pressão arterial diastólica", - "BLOOD_GLUCOSE": "Glicemia", - "PULSE": "Pulso", - "WEIGHT": "Peso", - "generic": "Um sinal vital" - }, - "steadyAtLeastWeeksOne": "Estável por pelo menos {count} semana", - "steadyAtLeastWeeksFew": "Estável por pelo menos {count} semanas", - "steadyAtLeastWeeksOther": "Estável por pelo menos {count} semanas" - }, - "milestone": { - "metric": { - "restingHeartRate": "frequência cardíaca em repouso", - "heartRateVariability": "variabilidade da frequência cardíaca", - "respiratoryRate": "frequência respiratória", - "weight": "peso", - "generic": "esta métrica" - }, - "record": { - "title": "Um novo recorde de {metric}", - "body": "Um recorde pessoal para sua {metric} hoje. Anotado silenciosamente, nada a fazer." - }, - "returnToBaseline": { - "title": "De volta à faixa: {metric}", - "body": "Sua {metric} se estabilizou de volta dentro da sua faixa usual. Seja o que for, passou." - }, - "sustainedInRange": { - "week1": { - "title": "Uma semana na faixa", - "body": "Sua {metric} se manteve dentro da sua faixa usual por uma semana agora. Bonito e estável." - }, - "week2": { - "title": "Duas semanas na faixa", - "body": "Sua {metric} permaneceu na sua faixa usual por duas semanas. Calmo e estável." - }, - "week3": { - "title": "Três semanas na faixa", - "body": "Três semanas de sua {metric} dentro da sua faixa usual. Um período real de estabilidade." - }, - "week4": { - "title": "Um mês na faixa", - "body": "Um mês inteiro com sua {metric} na sua faixa usual. Belamente estável." - } - } - }, - "lead": { - "vitalOutside": { - "above": "{metric} está em {value}, acima da sua faixa usual de {range}.", - "below": "{metric} está em {value}, abaixo da sua faixa usual de {range}." - }, - "vitalsOutside": { - "aboveOne": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinal vital está fora da sua faixa também.", - "aboveFew": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", - "aboveOther": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", - "belowOne": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinal vital está fora da sua faixa também.", - "belowFew": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", - "belowOther": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também." - }, - "sleep": { - "more": "Ontem à noite você dormiu {duration}, {diff} a mais que o usual.", - "less": "Ontem à noite você dormiu {duration}, {diff} a menos que o usual.", - "usual": "Ontem à noite você dormiu {duration}, próximo ao seu usual.", - "plain": "Ontem à noite você dormiu {duration}." - }, - "vitalsInRangeOne": "Seu sinal vital mais recente está dentro da sua faixa usual.", - "vitalsInRangeFew": "Todos os {count} seus sinais vitais mais recentes estão dentro da sua faixa usual.", - "vitalsInRangeOther": "Todos os {count} seus sinais vitais mais recentes estão dentro da sua faixa usual.", - "vitalInRange": "{metric} está em {value}, dentro da sua faixa usual de {range}." - }, - "todayFact": { - "restMode": { - "label": "Modo de repouso", - "value": "Dia {day}" - }, - "medications": { - "label": "Medicamentos", - "value": "{taken} de {scheduled} tomados" - }, - "appointment": { - "label": "Compromisso", - "today": "Hoje {time}, {what}", - "tomorrow": "Amanhã {time}, {what}" - }, - "sleep": { - "label": "Ontem à noite", - "plain": "{duration}", - "usual": "{duration}, próximo ao seu usual", - "more": "{duration}, {diff} a mais que o usual", - "less": "{duration}, {diff} a menos que o usual" - }, - "vitals": { - "label": "Sinais vitais", - "allInOne": "{count} verificados, na sua faixa", - "allInFew": "{count} verificados, todos na sua faixa", - "allInOther": "{count} verificados, todos na sua faixa", - "oneOut": { - "above": "{metric} acima da sua faixa", - "below": "{metric} abaixo da sua faixa" - }, - "someOut": "{count} de {total} fora da sua faixa" - }, - "cycle": { - "label": "Ciclo", - "value": "{phase}, dia {day}", - "dayOnly": "Dia {day}" - } - } - }, - "timeline": { - "title": "Linha do tempo", - "subtitle": "O que aconteceu quando, ao lado dos seus valores.", - "standing": "Em curso", - "startUnknown": "início desconhecido", - "zoom": { - "all": "Tudo", - "year": "12 meses", - "quarter": "3 meses", - "range": "Faixa" - }, - "lanes": { - "life": "Vida", - "illness": "Condições", - "allergies": "Alergias", - "medications": "Medicamentos", - "vaccinations": "Vacinas", - "visits": "Médico e procedimentos", - "labs": "Exames", - "documents": "Documentos", - "cycle": "Ciclo" - }, - "readiness": { - "title": "O que sua linha do tempo já contém", - "subtitle": "Um inventário honesto antes de você abri-la.", - "menuEntry": "Cobertura de dados", - "hint": "Faixas vazias permanecem ocultas até que haja algo lá. Módulos que você desligou nunca aparecem. Você encontra esta visão depois em Cobertura de dados na linha do tempo.", - "later": "Depois", - "open": "Abrir linha do tempo", - "verdict": { - "carries": "Já contém.", - "thin": "Ainda fino. Por ora, a linha do tempo mostra majoritariamente seus valores." - }, - "status": { - "carries": "contém", - "thin": "fino", - "empty": "vazio" - }, - "lanes": { - "values": "Valores", - "mood": "Humor", - "environment": "Ambiente", - "life": "Eventos de vida" - }, - "meter": "{carrying} de {total} faixas contêm", - "carriesDetail": "{carrying} de {total} faixas dão uma visão desde {since}.", - "loadFailed": "Não foi possível carregar o inventário.", - "card": { - "title": "O que a linha do tempo já contém", - "summary": "Ela alcança até {since}; {carrying} de {total} faixas já contêm.", - "dismiss": "Ocultar" - }, - "detail": { - "valuesOne": "{count} medição desde {since}", - "valuesFew": "{count} medições desde {since}", - "valuesOther": "{count} medições desde {since}", - "illnessOne": "{count} episódio, {chronic} deles crônico", - "illnessFew": "{count} episódios, {chronic} deles crônicos", - "illnessOther": "{count} episódios, {chronic} deles crônicos", - "allergiesOne": "{count} alergia", - "allergiesFew": "{count} alergias", - "allergiesOther": "{count} alergias", - "medicationsOne": "{count} medicamento, {missingStart} sem data de início", - "medicationsFew": "{count} medicamentos, {missingStart} sem data de início", - "medicationsOther": "{count} medicamentos, {missingStart} sem data de início", - "medicationsDatedOne": "{count} medicamento com data de início", - "medicationsDatedFew": "{count} medicamentos com data de início", - "medicationsDatedOther": "{count} medicamentos com data de início", - "vaccinationsOne": "{count} vacina", - "vaccinationsFew": "{count} vacinas", - "vaccinationsOther": "{count} vacinas", - "visitsOne": "{count} consulta, {procedures} com procedimento", - "visitsFew": "{count} consultas, {procedures} com procedimento", - "visitsOther": "{count} consultas, {procedures} com procedimento", - "visitsPlannedOne": "{count} consulta, apenas planejada", - "visitsPlannedFew": "{count} consultas, apenas planejadas", - "visitsPlannedOther": "{count} consultas, apenas planejadas", - "labsOne": "{count} dia com resultados", - "labsFew": "{count} dias com resultados", - "labsOther": "{count} dias com resultados", - "documentsOne": "{count} documento datado", - "documentsFew": "{count} documentos datados", - "documentsOther": "{count} documentos datados", - "lifeOne": "{count} evento de vida", - "lifeFew": "{count} eventos de vida", - "lifeOther": "{count} eventos de vida", - "cycleOne": "{count} ciclo", - "cycleFew": "{count} ciclos", - "cycleOther": "{count} ciclos", - "moodOne": "{count} entrada desde {since}", - "moodFew": "{count} entradas desde {since}", - "moodOther": "{count} entradas desde {since}", - "environmentOne": "{count} dia com dados de ambiente", - "environmentFew": "{count} dias com dados de ambiente", - "environmentOther": "{count} dias com dados de ambiente", - "empty": "Nenhum ainda" - }, - "gap": { - "valuesEmpty": "Conectar fontes", - "illnessEmpty": "Adicionar um episódio", - "medicationsWithoutStart": "Completar", - "visitsEmpty": "Adicionar uma consulta", - "documentsUndated": "Revisar", - "labsEmpty": "Adicionar um resultado", - "vaccinationsEmpty": "Adicionar vacinas", - "lifeEventsEmpty": "Adicionar" - }, - "gapLine": { - "medicationsWithoutStartOne": "{count} medicamento sem data de início", - "medicationsWithoutStartFew": "{count} medicamentos sem data de início", - "medicationsWithoutStartOther": "{count} medicamentos sem data de início", - "documentsUndatedOne": "{count} documento sem data", - "documentsUndatedFew": "{count} documentos sem data", - "documentsUndatedOther": "{count} documentos sem data", - "valuesEmpty": "Nenhum valor em um período mais longo ainda", - "illnessEmpty": "Nenhuma condição com data de início ainda", - "visitsEmpty": "Nenhuma consulta médica concluída ainda", - "labsEmpty": "Nenhum resultado laboratorial ainda", - "vaccinationsEmpty": "Nenhuma vacina ainda", - "lifeEventsEmpty": "Nenhum evento de vida ainda" - } - }, - "legendSpan": "Período", - "legendEvent": "Evento", - "legendMeanQuarter": "Média trimestral", - "legendMeanMonth": "Média mensal", - "legendMeanWeek": "Média semanal", - "legendThin": "Menos de 3 leituras", - "legendGap": "Pequena lacuna sem medições", - "today": "Hoje", - "noDataYet": "Nenhum dado ainda", - "layers": "Camadas", - "layersLanes": "Faixas", - "zoomLabel": "Faixa de visualização", - "chartLabel": "Linha do tempo de {from} a {to}", - "keyboardHint": "As setas movem a seleção, Home e End saltam para as extremidades, Enter abre o dia.", - "loadFailed": "Não foi possível carregar a linha do tempo.", - "empty": { - "title": "Nada na linha do tempo ainda", - "description": "Entradas datadas aparecem aqui assim que houver algumas." - }, - "values": { - "menuTitle": "Valores sob as faixas", - "trigger": "Valores ({count})", - "noneInWindow": "Nenhum valor nesta faixa", - "series": { - "BLOOD_PRESSURE_SYS": "Pressão arterial sistólica", - "BLOOD_PRESSURE_DIA": "Pressão arterial diastólica" - }, - "noValue": "sem valor", - "bloodPressure": "Pressão arterial", - "readingsOne": "1 leitura", - "readingsFew": "média de {count} leituras", - "readingsOther": "média de {count} leituras" - }, - "table": { - "caption": "Entradas da linha do tempo", - "lane": "Faixa", - "entry": "Entrada", - "start": "Início", - "end": "Fim", - "seriesCaption": "Médias de valores por período", - "period": "Período" - }, - "selection": { - "empty": "Nenhuma entrada neste período", - "since": "desde {date}", - "range": "{from} a {to}", - "mean": "Ø {values}", - "week": "Semana de {date}", - "hintClick": "Clique em um ponto no tempo para vê-lo aqui", - "hintTap": "Toque em um ponto no tempo para vê-lo aqui" - }, - "chronicle": { - "months": "Meses", - "years": "Anos", - "groupingLabel": "Agrupamento", - "empty": "Nenhuma entrada de {from} a {to}", - "emptySingle": "Nenhuma entrada em {period}", - "ended": "{label} terminou", - "afterDaysOne": "após 1 dia", - "afterDaysFew": "após {count} dias", - "afterDaysOther": "após {count} dias", - "notable": { - "extremeHigh": "Maior valor em muito tempo", - "extremeLow": "Menor valor em muito tempo", - "firstValue": "Primeiro valor de uma medição", - "gap": "Uma lacuna mais longa nos valores" - }, - "notableMeta": "Abra o dia para detalhes" - }, - "standingAllergiesOne": "{count} alergia", - "standingAllergiesFew": "{count} alergias", - "standingAllergiesOther": "{count} alergias", - "legendMeanDay": "Média diária", - "range": { - "from": "De", - "to": "Até", - "label": "Faixa escolhida", - "open": "Escolher uma faixa", - "clear": "Mostrar tudo", - "apply": "Aplicar" - }, - "item": { - "labValuesOne": "1 valor laboratorial", - "labValuesFew": "{count} valores laboratoriais", - "labValuesOther": "{count} valores laboratoriais" - } - }, - "mood": { - "title": "Humor", - "subtitle": "Acompanhamento de humor e entradas", - "mentalWellbeingLink": "Fazer um check-in de bem-estar mental", - "addEntry": "Adicionar", - "editEntry": "Editar entrada", - "moodLevel": "Humor", - "heroQuestion": "Como você está?", - "factorYes": "Sim", - "factorNo": "Não", - "factorRatingOption": "{label}: {value} de {max}", - "tags": "Tags", - "tagsPlaceholder": "ex.: Exercício, Trabalho, Família", - "tagsHelp": "Separadas por vírgula", - "timestamp": "Hora", - "date": "Data", - "source": "Fonte", - "levelSuperGut": "Incrível", - "levelGut": "Bom", - "levelOkay": "Ok", - "levelSchlecht": "Ruim", - "levelLausig": "Péssimo", - "sourceMoodlog": "moodLog", - "allMoods": "Todos os humores", - "entryCount": "{count} entradas", - "emptyTitle": "Nenhuma entrada de humor ainda", - "emptyDescription": "Registre como você se sente hoje para identificar padrões ao longo do tempo.", - "emptyFilteredTitle": "Nenhuma entrada de humor corresponde a este filtro", - "emptyFilteredDescription": "Tente um nível de humor diferente ou limpe o filtro para ver todas as entradas.", - "emptyAddFirst": "Registrar seu primeiro humor", - "emptyResetFilter": "Mostrar todos os humores", - "actions": "Ações", - "formReset": "Redefinir formulário", - "noteCharCount": "{count}/{max}", - "formResetConfirmTitle": "Redefinir este formulário?", - "formResetConfirmBody": "Isso limpa o humor, as tags e a nota que você inseriu. Não pode ser desfeito.", - "formResetConfirmAction": "Redefinir", - "saveError": "Erro ao salvar", - "tagsNotSaved": "Salvo. Tags que não estão mais disponíveis foram deixadas de fora.", - "deleteError": "Erro ao excluir", - "deletedToast": "Entrada excluída", - "restoredToast": "Entrada restaurada", - "restoreError": "Falha ao restaurar", - "invalidTimestamp": "Selecione um horário válido.", - "deleteConfirmTitle": "Excluir entrada?", - "deleteConfirmDescription": "Esta entrada de humor será excluída. Você pode desfazer isso por um curto momento depois.", - "pageInfo": "Página {page} de {total}", - "previousPage": "Página anterior", - "nextPage": "Próxima página", - "loginRequired": "Entre para ver as entradas de humor.", - "note": "Nota", - "noteCollapse": "Recolher nota", - "noteExpand": "Mostrar nota completa", - "notePlaceholder": "Adicione uma nota sobre como você está se sentindo…", - "tagPicker": "Tags", - "tagCategory": { - "feelings": "Sentimentos", - "sleep": "Sono", - "health": "Saúde", - "social": "Social", - "work": "Trabalho", - "hobbies": "Hobbies", - "factors": "Fatores", - "custom": "Personalizado" - }, - "tag": { - "happy": "feliz", - "excited": "animado", - "grateful": "grato", - "relaxed": "relaxado", - "content": "satisfeito", - "tired": "cansado", - "unsure": "inseguro", - "bored": "entediado", - "tense": "tenso", - "angry": "bravo", - "stressed": "estressado", - "sad": "triste", - "sleptWell": "dormiu bem", - "sleptOk": "dormiu ok", - "sleptPoorly": "dormiu mal", - "earlyNight": "noite cedo", - "workedOut": "treinou", - "ateWell": "comeu bem", - "hydrated": "hidratado", - "walked": "caminhou", - "alcohol": "álcool", - "caffeine": "cafeína", - "nicotine": "nicotina", - "family": "família", - "friends": "amigos", - "party": "festa", - "alone": "sozinho", - "productive": "produtivo", - "overtime": "hora extra", - "dayOff": "dia de folga", - "travel": "viagem", - "sickDay": "dia de doença", - "movies": "filmes", - "reading": "leitura", - "gaming": "jogos", - "music": "música", - "outdoors": "ar livre", - "fastFood": "comida rápida", - "noSweets": "sem doces", - "bigMeal": "refeição grande", - "factorWork": "trabalho", - "factorSocial": "social", - "factorSleepQuality": "qualidade do sono", - "factorStress": "estresse", - "factorConflict": "conflito", - "factorFamily": "família", - "factorSadness": "tristeza", - "praise": "elogio" - }, - "sourceManual": "Manual", - "sourceWeb": "Web", - "sourceTelegram": "Telegram", - "sourceDaylio": "Daylio", - "bulkDeleteSuccess": "{count} entradas excluídas", - "bulkDeleteSuccessOne": "Entrada excluída", - "bulkDeleteError": "Erro ao excluir as entradas selecionadas", - "bulkDeleteConfirmTitle": "Excluir {count} entradas?", - "bulkDeleteConfirmTitleOne": "Excluir esta entrada?", - "bulkDeleteConfirmBody": "As {count} entradas de humor selecionadas serão excluídas. Você pode desfazer isso por um curto momento depois.", - "bulkDeleteConfirmBodyOne": "A entrada de humor selecionada será excluída. Você pode desfazer isso por um curto momento depois.", - "customize": "Personalizar tags de humor", - "addTagInline": "Adicionar tag", - "manage": { - "groupsTitle": "Grupos", - "groupsDescription": "Crie seus próprios grupos e defina a ordem em que o seletor os exibe.", - "newGroup": "Novo grupo", - "groupLabel": "Nome do grupo", - "groupIcon": "Ícone", - "groupCreated": "Grupo criado", - "groupRenamed": "Grupo salvo", - "groupDeleteTitle": "Excluir grupo?", - "groupDeleteBody": "As tags deste grupo voltam ao seu grupo original. Nenhuma entrada é excluída.", - "groupDeleted": "Grupo excluído", - "groupEmpty": "Nenhum grupo próprio ainda.", - "groupLimitReached": "Limite de grupos atingido", - "tagsTitle": "Tags", - "tagsDescription": "Oculte, reorganize, mova ou edite as tags que o seletor exibe.", - "newTag": "Nova tag", - "tagLabel": "Nome da tag", - "tagIcon": "Ícone", - "tagGroup": "Grupo", - "usageCount": "{count} entradas", - "hideTag": "Ocultar tag", - "showTag": "Mostrar tag", - "moveToGroup": "Mover para grupo", - "archive": "Arquivar", - "restore": "Restaurar", - "archivedTitle": "Tags arquivadas", - "archivedDescription": "Tags arquivadas permanecem em suas entradas passadas. Elas só desaparecem do seletor.", - "archivedEmpty": "Nada arquivado.", - "purgeTitle": "Excluir tag permanentemente?", - "purgeBody": "Isso remove a tag de {count} entradas passadas. Não pode ser desfeito.", - "purgeAction": "Excluir permanentemente", - "purged": "Tag excluída", - "tagLimitReached": "Limite de tags atingido", - "iconPickerTitle": "Escolher um ícone", - "iconSearchPlaceholder": "Buscar ícones…", - "iconSearchEmpty": "Nenhum ícone corresponde.", - "iconSearchClear": "Limpar busca", - "orderSave": "Salvar ordem", - "orderSaved": "Ordem salva", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "iconGroupEmotions": "Emoções", - "iconGroupActivities": "Atividades", - "iconGroupHealth": "Saúde", - "iconGroupFood": "Comida e bebida", - "iconGroupWeather": "Clima", - "iconGroupPlaces": "Lugares", - "iconGroupMisc": "Outro" - }, - "sectionMoreTags": "Mais tags", - "sectionNoteDetails": "Nota e detalhes", - "quickTagsHelp": "Suas tags frequentes, um toque", - "quickTagsExpand": "Mais", - "loadError": "Não foi possível carregar suas entradas de humor.", - "sectionLevelA": "Estado de espírito", - "sectionLevelAHelp": "Opcional. Qualquer coisa que você deixar em branco permanece vazia.", - "dimensionNotAnswered": "não registrado", - "dimensionClear": "limpar", - "dimensionValueText": "{value} de {max}: {low} a {high}", - "dimension": { - "a1": { - "label": "Humor", - "low": "muito desagradável", - "high": "muito agradável" - }, - "a2": { - "label": "Estresse", - "low": "completamente relaxado", - "high": "extremamente sobrecarregado" - }, - "a3": { - "label": "Energia", - "low": "esgotado", - "high": "cheio de energia" - }, - "a4": { - "label": "Conexão", - "low": "isolado", - "high": "compreendido e apoiado" - }, - "a5": { - "label": "Estabilidade", - "low": "completamente sobrecarregado", - "high": "totalmente capaz de agir" - } - }, - "context": { - "section": { - "work": "Trabalho", - "contacts": "Contato", - "leisure": "Tempo livre", - "events": "Evento" - }, - "field": { - "workStatus": "Dia de trabalho", - "workMinutes": "Tempo trabalhado", - "overtimeMinutes": "Hora extra", - "workLoad": "Carga de trabalho", - "workSatisfaction": "Satisfação com o trabalho", - "contactCircles": "Com quem foi o contato", - "contactForm": "Forma de contato", - "contactExtent": "Quanto tempo durou", - "contactQuality": "Qualidade do contato", - "contactSupport": "Apoio sentido", - "leisureCategories": "Em que o tempo livre foi gasto", - "leisureMinutes": "Tempo para si", - "leisureJoy": "Prazer", - "leisureRecovery": "Recuperação", - "eventType": "O que aconteceu", - "eventValence": "Como foi recebido", - "eventAt": "Quando", - "notes": "Nota" - }, - "workStatus": { - "off": "Não trabalhando", - "partial": "Parte do dia", - "regular": "Um dia regular", - "overtime": "Mais que o usual" - }, - "contactCircles": { - "partner": "Parceiro(a)", - "child": "Filho(a)", - "family": "Família", - "friends": "Amigos", - "colleagues": "Colegas", - "acquaintances": "Conhecidos", - "professional": "Apoio profissional", - "other": "Outros" - }, - "contactForm": { - "inPerson": "Pessoalmente", - "phone": "Telefone", - "video": "Videochamada", - "written": "Escrito" - }, - "contactExtent": { - "brief": "Breve", - "medium": "Médio", - "extended": "Estendido" - }, - "leisureCategories": { - "film": "Filme ou série", - "reading": "Leitura", - "gaming": "Jogos", - "music": "Música", - "creative": "Algo criativo", - "outing": "Sair", - "garden": "Jardim", - "cooking": "Cozinhar", - "timeWithChild": "Tempo com a criança", - "relaxation": "Descanso", - "other": "Outra coisa" - }, - "eventType": { - "goodNews": "Boas notícias", - "badNews": "Más notícias", - "success": "Algo deu certo", - "disappointment": "Uma decepção", - "conflict": "Um conflito", - "appointment": "Um compromisso", - "familyEvent": "Uma ocasião familiar", - "change": "Uma mudança", - "unexpected": "Algo inesperado" - }, - "rating": { - "workLoad": { - "low": "sem pressão", - "high": "sob muita pressão" - }, - "workSatisfaction": { - "low": "não satisfeito de forma alguma", - "high": "muito satisfeito" - }, - "contactQuality": { - "low": "não me fez bem", - "high": "me fez muito bem" - }, - "contactSupport": { - "low": "não apoiado", - "high": "bem apoiado" - }, - "leisureJoy": { - "low": "sem prazer", - "high": "muito prazer" - }, - "leisureRecovery": { - "low": "não restaurador", - "high": "muito restaurador" - }, - "eventValence": { - "low": "claramente ruim", - "high": "claramente bom" - } - } - }, - "dayContext": { - "minutesPlaceholder": "Minutos", - "contactsHelp": "Quantas pessoas eram não diz nada sobre o dia. O que conta é como o contato se sentiu.", - "notePlaceholder": "Qualquer outra coisa que pertença a este dia", - "notRecorded": "não registrado", - "linkedTitle": "Dos seus outros módulos", - "linkedHelp": "Lido de onde é mantido. Mude lá e muda aqui.", - "linkedSleep": "Dormindo", - "linkedInBed": "Na cama", - "linkedSteps": "Passos", - "linkedActiveEnergy": "Energia ativa", - "linkedRestingHeartRate": "Frequência cardíaca em repouso", - "linkedHrv": "Variabilidade da frequência cardíaca", - "bodyLogged": "Registrado no diário de doenças: {count} sintomas", - "bodyNotLogged": "Nada registrado no diário de doenças para este dia", - "openIllness": "Abrir" - }, - "sourceNotification": "Notificação" - }, - "documents": { - "title": "Documentos", - "subtitle": "Cada carta, laudo e digitalização em um só lugar pesquisável, criptografados em repouso.", - "pageUpload": "Enviar", - "ownerOnlyUpload": "Documentos só podem ser adicionados pelo proprietário do registro.", - "kind": { - "DOCTOR_REPORT": "Relatório médico", - "DISCHARGE_LETTER": "Carta de alta", - "OTHER": "Outro", - "LAB_RESULT": "Resultado laboratorial", - "IMAGING": "Imagem", - "PRESCRIPTION": "Receita", - "REFERRAL": "Encaminhamento", - "INSURANCE": "Seguro", - "VACCINATION": "Vacina", - "SICK_NOTE": "Atestado médico" - }, - "filter": { - "searchLabel": "Buscar documentos", - "searchPlaceholder": "Buscar título ou nome de arquivo…", - "typeGroup": "Tipo de documento", - "conditionGroup": "Condição", - "procedureGroup": "Procedimentos e cirurgias", - "yearGroup": "Ano", - "clear": "Limpar filtros", - "typeAll": "Todos os tipos", - "typeCount": "{count} tipos", - "conditionAll": "Todas as condições", - "procedureAll": "Todos os procedimentos", - "yearAll": "Todos os anos" - }, - "card": { - "untitled": "Documento sem título", - "selectLabel": "Selecionar {title}", - "openLabel": "Abrir {title}", - "attachmentBadge": "Somente download", - "uploading": "Enviando…", - "dismissFailed": "Dispensar envio com falha", - "processing": "Processando…", - "ready": "Pronto", - "deleteKey": "Del" - }, - "error": { - "fileTooLarge": "Este arquivo é maior que o limite de {maxSize}.", - "quotaExceeded": "O armazenamento está cheio: {used} de {quota} usados.", - "unsupportedType": "Este tipo de arquivo não é suportado.", - "purged": "Este documento foi removido permanentemente e não pode ser restaurado.", - "duplicateExists": "Um documento idêntico já está armazenado.", - "rateLimited": "Envios demais agora. Tente novamente em alguns minutos.", - "generic": "Falha no envio. Tente novamente." - }, - "toast": { - "duplicate": "Já armazenado. O documento existente está destacado.", - "deleted": "Documento excluído", - "restoreFailed": "Não foi possível restaurar o documento." - }, - "timeline": { - "loadingMore": "Carregando mais…", - "listLabel": "Linha do tempo de documentos" - }, - "upload": { - "browse": "Escolher arquivos", - "quotaAlmostFull": "Armazenamento quase cheio", - "quotaUsed": "{used} de {quota} usados", - "queuedAnnouncement": "{count} arquivo(s) adicionados à fila de envio" - }, - "selection": { - "count": "{count} selecionados", - "clear": "Limpar seleção" - }, - "list": { - "loadError": "Não foi possível carregar seus documentos." - }, - "empty": { - "title": "Seu cofre de documentos está vazio", - "description": "Armazene cartas médicas, laudos laboratoriais, imagens, receitas e registros de vacinação. Eles são criptografados e pesquisáveis por tipo, condição e ano.", - "action": "Enviar um primeiro documento", - "noMatchesTitle": "Nenhum documento correspondente", - "noMatchesDescription": "Nada corresponde à busca e aos filtros atuais." - }, - "detail": { - "title": "Detalhes do documento", - "summary": { - "title": "Resumo", - "pending": "O resumo está sendo preparado.", - "none": "Nenhum resumo foi gerado para este documento ainda.", - "withheld": "Um resumo foi gerado, mas não passou na verificação de segurança, então não é exibido. Você pode tentar novamente ou ler o próprio documento.", - "unavailable": "Nenhum resumo pôde ser gerado para este documento.", - "generate": "Gerar resumo", - "generating": "Gerando…" - }, - "index": { - "outcome": { - "local-empty": "Nenhum texto legível foi encontrado. Parece uma digitalização; um provedor de visão por IA pode lê-lo.", - "local-unsupported": "Este tipo de arquivo não pode ser lido para busca.", - "decrypt-error": "O arquivo armazenado não pôde ser aberto para leitura.", - "raster-failed": "As páginas do PDF não puderam ser renderizadas para leitura. Formatos de compressão de fax digitalizado são uma causa conhecida.", - "provider-error": "O provedor de IA não conseguiu ler este documento na última tentativa.", - "pdf-needs-anthropic": "O provedor de IA configurado não consegue ler arquivos PDF. Um provedor Claude ou OCR local consegue.", - "empty-transcription": "O provedor de IA não retornou texto para este documento." - } - }, - "loadError": "Não foi possível carregar este documento.", - "saveError": "Não foi possível salvar a alteração.", - "deleteError": "Não foi possível excluir o documento.", - "download": "Baixar", - "openInNewTab": "Abrir em nova aba", - "delete": "Excluir", - "titleLabel": "Título", - "titlePlaceholder": "Adicionar um título", - "kindLabel": "Tipo", - "dateLabel": "Data do documento", - "conditionsLabel": "Condições vinculadas", - "linkCondition": "Vincular", - "noConditions": "Não vinculado a uma condição", - "previewUnavailable": "Sem pré-visualização embutida para este tipo de arquivo", - "uploadedMeta": "Adicionado {date}, {size}", - "importedFrom": "Importado de {system}", - "importedFromWithId": "Importado de {system}, ID {id}", - "sourceOther": "outro sistema", - "share": "Compartilhar", - "labValuesLink": "Ver {count} valores laboratoriais", - "visitsLabel": "Pertence à consulta", - "vaccinationsLabel": "Vacinas", - "noVisitsToLink": "Nenhuma consulta registrada ainda.", - "noVaccinationsToLink": "Nenhuma vacina registrada ainda." - }, - "dropOverlay": { - "title": "Solte arquivos para enviar", - "hint": "Eles são armazenados criptografados no seu cofre de documentos" - }, - "bulk": { - "barLabel": "Ações para documentos selecionados", - "setKind": "Alterar tipo", - "linkCondition": "Vincular condição", - "delete": "Excluir", - "updated": "{count} documento(s) atualizado(s)", - "deleted": "{count} documento(s) excluído(s)", - "restored": "{count} documento(s) restaurado(s)", - "partialFailure": "{failed} de {total} não puderam ser atualizados", - "failed": "A ação não pôde ser concluída", - "share": "Compartilhar", - "shareTooMany": "Um link de compartilhamento pode conter no máximo {max} documentos. Desmarque alguns e tente novamente.", - "linkVisit": "Arquivar contra consulta" - }, - "episodeCard": { - "title": "Documentos", - "link": "Vincular", - "upload": "Enviar", - "viewAll": "Mostrar tudo", - "emptyLine": "Nenhum documento vinculado a esta condição ainda.", - "loadError": "Não foi possível carregar os documentos vinculados" - }, - "linkPicker": { - "title": "Vincular documentos", - "description": "Escolha documentos do seu cofre que pertencem a esta condição.", - "searchPlaceholder": "Buscar por título ou nome de arquivo", - "empty": "Nenhum documento encontrado." - }, - "assist": { - "suggest": "Sugerir detalhes", - "suggesting": "Lendo…", - "suggestedTitle": "Título sugerido", - "suggestedKind": "Tipo sugerido", - "suggestedDate": "Data sugerida", - "apply": "Aplicar", - "useTitle": "Usar título", - "applied": "Aplicado", - "dismiss": "Dispensar", - "empty": "Nada pôde ser lido deste documento.", - "unavailableBody": "Configure um provedor de IA para sugerir um título, tipo e data.", - "unavailableLocalOcr": "Ative o OCR local nas configurações de IA para ler imagens neste dispositivo.", - "unavailableAction": "Abrir configurações de IA", - "errorGeneric": "Não foi possível ler o documento. Tente novamente.", - "errorOcr": "Não foi possível ler texto desta imagem.", - "errorRateLimited": "O limite horário de leitura por IA foi atingido. Tente novamente mais tarde.", - "errorRateLimitedWaitOne": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de um minuto.", - "errorRateLimitedWaitFew": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de {count} minutos.", - "errorRateLimitedWaitOther": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de {count} minutos.", - "errorBudget": "Seu orçamento de IA para hoje foi esgotado.", - "errorPdfNeedsVision": "Digitalizar PDFs precisa de um provedor de visão Claude.", - "errorFileType": "Este tipo de arquivo não pode ser lido.", - "errorNotIndexed": "Leia o documento primeiro, depois extraia.", - "errorLocalOcrDisabled": "Ative o OCR local nas configurações de IA primeiro.", - "errorProvider": "Nenhum provedor de IA está configurado para isso.", - "errorTextImageOnly": "O OCR local lê apenas imagens, não este arquivo.", - "errorConsent": "Ler documentos com IA precisa do seu consentimento primeiro.", - "errorUnavailable": "Ler documentos com IA não está disponível aqui agora." - }, - "summary": { - "summarise": "Resumir", - "showText": "Mostrar texto extraído", - "summaryTitle": "Resumo", - "textTitle": "Texto extraído", - "close": "Ocultar" - }, - "ai": { - "readDone": "A IA leu seu documento.", - "readStagedOne": "A IA leu seu documento. 1 valor laboratorial está pronto para revisão.", - "readStagedFew": "A IA leu seu documento. {count} valores laboratoriais estão prontos para revisão.", - "readStagedOther": "A IA leu seu documento. {count} valores laboratoriais estão prontos para revisão.", - "read": "Ler com IA", - "reread": "Ler novamente", - "reading": "Lendo…", - "notReadYet": "Este documento ainda não foi lido." - }, - "review": { - "title": "Revisar valores extraídos", - "hint": "Aprove o que corresponde ao documento. Valores desmarcados são descartados; nada é salvo sem sua confirmação.", - "openOne": "Revisar valor extraído", - "openFew": "Revisar valores extraídos ({count})", - "openOther": "Revisar valores extraídos ({count})", - "includeAria": "Incluir {value}", - "type": { - "OBSERVATION": "Valor laboratorial", - "CONDITION": "Condição", - "MEDICATION_STATEMENT": "Medicamento" - }, - "statedRange": "Faixa informada {range}", - "needsCheck": "Confira este valor contra o documento e depois salve-o.", - "verify": "Verificar", - "verifySave": "Salvar valor", - "verifyInvalid": "Insira um nome e ou um valor numérico ou um resultado em texto, não ambos.", - "verifyFailed": "A correção não pôde ser salva. Tente novamente.", - "fieldName": "Nome", - "fieldDate": "Data", - "fieldValue": "Valor", - "fieldValueText": "Resultado (texto)", - "fieldUnit": "Unidade", - "fieldDose": "Dose", - "unverifiedNoteOne": "1 valor ainda precisa de verificação e permanece pendente.", - "unverifiedNoteFew": "{count} valores ainda precisam de verificação e permanecem pendentes.", - "unverifiedNoteOther": "{count} valores ainda precisam de verificação e permanecem pendentes.", - "finish": "Concluir revisão", - "confirmFailed": "A revisão não pôde ser salva. Tente novamente.", - "savedToastOne": "1 valor salvo", - "savedToastFew": "{count} valores salvos", - "savedToastOther": "{count} valores salvos", - "nothingSavedToast": "Revisão salva. Nenhum valor foi adicionado.", - "extract": "Extrair valores laboratoriais", - "extracting": "Extraindo…", - "extractHint": "Usa o texto já lido deste documento. Valores extraídos aguardam sua revisão; nada é salvo automaticamente.", - "extractEmpty": "Nenhum valor pôde ser extraído deste documento.", - "failUnitRequired": "Um valor numérico precisa de uma unidade antes de poder ser salvo.", - "failUnitMismatch": "A unidade informada não corresponde à unidade salva para este marcador. Ajuste-a e conclua a revisão novamente.", - "failGeneric": "Este valor não pôde ser salvo.", - "failUnknownBiomarker": "O biomarcador escolhido não existe mais. Escolha outro." - }, - "contentIndex": { - "indexPrompt": "Tornar o conteúdo dos documentos pesquisável.", - "indexAll": "Indexar tudo para busca", - "indexAllPending": "Iniciando…", - "indexAllQueued": "Indexando {count} documento(s) em segundo plano.", - "indexAllNothing": "Tudo já está indexado.", - "indexAllError": "Não foi possível iniciar a indexação." - }, - "share": { - "title": "Compartilhar este documento", - "multiTitle": "Compartilhar estes documentos", - "multiLabel": "{count} documentos", - "description": "Crie um link somente leitura para clínico com este documento anexado. O link e sua frase-senha aparecem uma vez." - }, - "chat": { - "title": "Conversar sobre este documento", - "openAria": "Perguntar ao Coach sobre este documento", - "openButton": "Perguntar ao Coach" - }, - "readingConsent": { - "body": "Ler com IA envia isto ao seu serviço de IA fora deste servidor. Permitir que o HealthLog envie documentos, laudos laboratoriais e descrições de medicamentos para leitura?", - "grant": "Permitir leitura", - "error": "O consentimento não pôde ser salvo. Tente novamente." - }, - "sourcePicker": { - "open": "Importar do arquivo", - "openNamed": "Importar de {name}", - "title": "Importar de {name}", - "description": "Busque pelo nome e marque os documentos que o HealthLog deve copiar.", - "sourceLabel": "Arquivo", - "searchLabel": "Nome do documento", - "searchPlaceholder": "Buscar por nome", - "tagLabel": "Tag", - "tagAny": "Qualquer tag", - "fromLabel": "De", - "toLabel": "Até", - "clearFilters": "Limpar tag e datas", - "rangeInvalid": "A data de fim é anterior à data de início.", - "empty": "{name} não tem documentos para mostrar.", - "noMatch": "Nenhum documento corresponde.", - "loadMore": "Carregar mais", - "stateImported": "No HealthLog", - "stateDeleted": "Excluído no HealthLog", - "selectedCount": "{count} de até {max} selecionados", - "importAction": "Importar {count}", - "importing": "Importando, um documento por vez…", - "done": "Concluído", - "summary": "Importados: {imported}. Já lá: {present}. Não importados: {failed}.", - "stopped": "Parado: {reason}", - "result": { - "waiting": "Aguardando", - "working": "Importando…", - "imported": "Importado", - "importedLinked": "Importado e vinculado", - "duplicate": "Já no HealthLog", - "duplicateLinked": "Já no HealthLog, agora vinculado", - "deleted": "Excluído no HealthLog, deixado como está" - }, - "errors": { - "unavailable": "Arquivos de documentos não estão habilitados neste servidor.", - "notConnected": "Este arquivo não está conectado. Conecte-o em Configurações, Integrações.", - "originNotAllowed": "Este endereço não está na lista de arquivos permitidos do servidor. Peça ao administrador para adicioná-lo.", - "unreachable": "O arquivo não pôde ser alcançado. Verifique se está em execução e se o endereço está certo.", - "redirected": "O arquivo redirecionou a solicitação. Insira o endereço para o qual ele redireciona.", - "authRefused": "O arquivo recusou o token. Verifique o token e suas permissões.", - "versionTooOld": "O arquivo é muito antigo. É necessário Paperless-ngx 2.16 ou posterior.", - "badResponse": "A resposta do arquivo não pôde ser lida. Verifique se o endereço aponta para o próprio arquivo.", - "notFound": "O arquivo não tem tal documento, ou o id da organização está errado ou não é seu.", - "linkTargetNotFound": "O registro para vincular não existe mais.", - "rateLimited": "Solicitações demais. Espere um minuto e tente novamente.", - "browserOnly": "Arquivos de documentos só podem ser usados no navegador.", - "invalidAddress": "Insira o endereço completo, começando com https:// ou http://.", - "organizationRequired": "Insira o id da organização Papra.", - "tokenRequired": "Insira o token da API. Um novo endereço precisa dele novamente.", - "fileTooLarge": "O arquivo é maior que o HealthLog aceita.", - "quotaExceeded": "Seu armazenamento de documentos está cheio.", - "fileType": "O HealthLog não aceita este tipo de arquivo.", - "uploadLimit": "O limite horário de envio foi atingido. Tente novamente mais tarde.", - "uploadBusy": "Outros envios ainda estão em execução. Tente novamente em instantes.", - "moduleDisabled": "Documentos estão desligados nas Configurações.", - "generic": "Algo deu errado. Tente novamente.", - "permissionMissing": "A chave Papra não consegue ler tags. Dê a ela a permissão tags:read." - }, - "pickMore": "Escolher mais", - "finishedHint": "Busque novamente ou mude um filtro para escolher mais documentos.", - "maxReached": "Você pode importar até {max} documentos por vez.", - "noMatchHint": "Tente parte do nome ou limpe a tag e as datas." - }, - "customize": "Personalizar visualização", - "layout": { - "viewDescription": "Pré-visualize cartões com miniaturas ou uma lista compacta.", - "arrangementHeading": "Organização", - "arrangementDescription": "Cada mês como seu próprio bloco, ou tudo fluindo pela largura total.", - "stacked": "Meses empilhados", - "flow": "Contínuo", - "saveFailed": "Não foi possível salvar a visualização." - }, - "deleteConfirm": { - "titleOne": "Excluir este documento?", - "titleMany": "Excluir {count} documentos?", - "body": "Você pode desfazer isso logo depois. Após 30 dias, é removido para sempre.", - "action": "Excluir" + "privacyNote": "Suas respostas são armazenadas criptografadas e nunca chegam ao AI Coach.", + "trend": { + "verdict": {} } }, "records": { @@ -11366,6 +11340,825 @@ } } }, + "environment": { + "fields": { + "tempMean": "Temperatura diária", + "tempMin": "Mínima noturna", + "sunshine": "Insolação", + "daylight": "Luz do dia", + "precip": "Precipitação", + "pressureMean": "Pressão barométrica", + "pressureDelta": "Variação de pressão", + "pm25": "Partículas finas (PM2,5)", + "pm10": "Partículas (PM10)", + "no2": "Dióxido de nitrogênio", + "ozone8h": "Ozônio (máxima de 8 horas)", + "europeanAqi": "Índice europeu de qualidade do ar", + "uvIndexMax": "Índice UV (máxima)", + "dustMax": "Poeira do Saara", + "pollenMax": "Pólen (mais alto)" + }, + "chip": { + "day": "Clima em {date}", + "pollenHigh": "Pólen alto: {kinds}", + "hotNight": "Noite quente", + "veryPoorAir": "Ar muito ruim" + }, + "pollen": { + "alder": "amieiro", + "birch": "bétula", + "grass": "gramíneas", + "mugwort": "artemísia", + "olive": "oliveira", + "ragweed": "ambrosia" + }, + "movement": { + "awayFromHome": "Tempo fora de casa", + "distance": "Distância percorrida" + } + }, + "documents": { + "title": "Documentos", + "subtitle": "Cada carta, laudo e digitalização em um só lugar pesquisável, criptografados em repouso.", + "pageUpload": "Enviar", + "ownerOnlyUpload": "Documentos só podem ser adicionados pelo proprietário do registro.", + "kind": { + "DOCTOR_REPORT": "Relatório médico", + "DISCHARGE_LETTER": "Carta de alta", + "OTHER": "Outro", + "LAB_RESULT": "Resultado laboratorial", + "IMAGING": "Imagem", + "PRESCRIPTION": "Receita", + "REFERRAL": "Encaminhamento", + "INSURANCE": "Seguro", + "VACCINATION": "Vacina", + "SICK_NOTE": "Atestado médico" + }, + "filter": { + "searchLabel": "Buscar documentos", + "searchPlaceholder": "Buscar título ou nome de arquivo…", + "typeGroup": "Tipo de documento", + "conditionGroup": "Condição", + "procedureGroup": "Procedimentos e cirurgias", + "yearGroup": "Ano", + "clear": "Limpar filtros", + "typeAll": "Todos os tipos", + "typeCount": "{count} tipos", + "conditionAll": "Todas as condições", + "procedureAll": "Todos os procedimentos", + "yearAll": "Todos os anos" + }, + "card": { + "untitled": "Documento sem título", + "selectLabel": "Selecionar {title}", + "openLabel": "Abrir {title}", + "attachmentBadge": "Somente download", + "uploading": "Enviando…", + "dismissFailed": "Dispensar envio com falha", + "processing": "Processando…", + "ready": "Pronto", + "deleteKey": "Del" + }, + "error": { + "fileTooLarge": "Este arquivo é maior que o limite de {maxSize}.", + "quotaExceeded": "O armazenamento está cheio: {used} de {quota} usados.", + "unsupportedType": "Este tipo de arquivo não é suportado.", + "purged": "Este documento foi removido permanentemente e não pode ser restaurado.", + "duplicateExists": "Um documento idêntico já está armazenado.", + "rateLimited": "Envios demais agora. Tente novamente em alguns minutos.", + "generic": "Falha no envio. Tente novamente." + }, + "toast": { + "duplicate": "Já armazenado. O documento existente está destacado.", + "deleted": "Documento excluído", + "restoreFailed": "Não foi possível restaurar o documento." + }, + "timeline": { + "loadingMore": "Carregando mais…", + "listLabel": "Linha do tempo de documentos" + }, + "upload": { + "browse": "Escolher arquivos", + "quotaAlmostFull": "Armazenamento quase cheio", + "quotaUsed": "{used} de {quota} usados", + "queuedAnnouncement": "{count} arquivo(s) adicionados à fila de envio" + }, + "selection": { + "count": "{count} selecionados", + "clear": "Limpar seleção" + }, + "list": { + "loadError": "Não foi possível carregar seus documentos." + }, + "empty": { + "title": "Seu cofre de documentos está vazio", + "description": "Armazene cartas médicas, laudos laboratoriais, imagens, receitas e registros de vacinação. Eles são criptografados e pesquisáveis por tipo, condição e ano.", + "action": "Enviar um primeiro documento", + "noMatchesTitle": "Nenhum documento correspondente", + "noMatchesDescription": "Nada corresponde à busca e aos filtros atuais." + }, + "detail": { + "title": "Detalhes do documento", + "summary": { + "title": "Resumo", + "pending": "O resumo está sendo preparado.", + "none": "Nenhum resumo foi gerado para este documento ainda.", + "withheld": "Um resumo foi gerado, mas não passou na verificação de segurança, então não é exibido. Você pode tentar novamente ou ler o próprio documento.", + "unavailable": "Nenhum resumo pôde ser gerado para este documento.", + "generate": "Gerar resumo", + "generating": "Gerando…" + }, + "index": { + "outcome": { + "local-empty": "Nenhum texto legível foi encontrado. Parece uma digitalização; um provedor de visão por IA pode lê-lo.", + "local-unsupported": "Este tipo de arquivo não pode ser lido para busca.", + "decrypt-error": "O arquivo armazenado não pôde ser aberto para leitura.", + "raster-failed": "As páginas do PDF não puderam ser renderizadas para leitura. Formatos de compressão de fax digitalizado são uma causa conhecida.", + "provider-error": "O provedor de IA não conseguiu ler este documento na última tentativa.", + "pdf-needs-anthropic": "O provedor de IA configurado não consegue ler arquivos PDF. Um provedor Claude ou OCR local consegue.", + "empty-transcription": "O provedor de IA não retornou texto para este documento." + } + }, + "loadError": "Não foi possível carregar este documento.", + "saveError": "Não foi possível salvar a alteração.", + "deleteError": "Não foi possível excluir o documento.", + "download": "Baixar", + "openInNewTab": "Abrir em nova aba", + "delete": "Excluir", + "titleLabel": "Título", + "titlePlaceholder": "Adicionar um título", + "kindLabel": "Tipo", + "dateLabel": "Data do documento", + "conditionsLabel": "Condições vinculadas", + "linkCondition": "Vincular", + "noConditions": "Não vinculado a uma condição", + "previewUnavailable": "Sem pré-visualização embutida para este tipo de arquivo", + "uploadedMeta": "Adicionado {date}, {size}", + "importedFrom": "Importado de {system}", + "importedFromWithId": "Importado de {system}, ID {id}", + "sourceOther": "outro sistema", + "share": "Compartilhar", + "labValuesLink": "Ver {count} valores laboratoriais", + "visitsLabel": "Pertence à consulta", + "vaccinationsLabel": "Vacinas", + "noVisitsToLink": "Nenhuma consulta registrada ainda.", + "noVaccinationsToLink": "Nenhuma vacina registrada ainda." + }, + "dropOverlay": { + "title": "Solte arquivos para enviar", + "hint": "Eles são armazenados criptografados no seu cofre de documentos" + }, + "bulk": { + "barLabel": "Ações para documentos selecionados", + "setKind": "Alterar tipo", + "linkCondition": "Vincular condição", + "delete": "Excluir", + "updated": "{count} documento(s) atualizado(s)", + "deleted": "{count} documento(s) excluído(s)", + "restored": "{count} documento(s) restaurado(s)", + "partialFailure": "{failed} de {total} não puderam ser atualizados", + "failed": "A ação não pôde ser concluída", + "share": "Compartilhar", + "shareTooMany": "Um link de compartilhamento pode conter no máximo {max} documentos. Desmarque alguns e tente novamente.", + "linkVisit": "Arquivar contra consulta" + }, + "episodeCard": { + "title": "Documentos", + "link": "Vincular", + "upload": "Enviar", + "viewAll": "Mostrar tudo", + "emptyLine": "Nenhum documento vinculado a esta condição ainda.", + "loadError": "Não foi possível carregar os documentos vinculados" + }, + "linkPicker": { + "title": "Vincular documentos", + "description": "Escolha documentos do seu cofre que pertencem a esta condição.", + "searchPlaceholder": "Buscar por título ou nome de arquivo", + "empty": "Nenhum documento encontrado." + }, + "assist": { + "suggest": "Sugerir detalhes", + "suggesting": "Lendo…", + "suggestedTitle": "Título sugerido", + "suggestedKind": "Tipo sugerido", + "suggestedDate": "Data sugerida", + "apply": "Aplicar", + "useTitle": "Usar título", + "applied": "Aplicado", + "dismiss": "Dispensar", + "empty": "Nada pôde ser lido deste documento.", + "unavailableBody": "Configure um provedor de IA para sugerir um título, tipo e data.", + "unavailableLocalOcr": "Ative o OCR local nas configurações de IA para ler imagens neste dispositivo.", + "unavailableAction": "Abrir configurações de IA", + "errorGeneric": "Não foi possível ler o documento. Tente novamente.", + "errorOcr": "Não foi possível ler texto desta imagem.", + "errorRateLimited": "O limite horário de leitura por IA foi atingido. Tente novamente mais tarde.", + "errorRateLimitedWaitOne": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de um minuto.", + "errorRateLimitedWaitFew": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de {count} minutos.", + "errorRateLimitedWaitOther": "O limite horário de leitura por IA foi atingido. Tente novamente em cerca de {count} minutos.", + "errorBudget": "Seu orçamento de IA para hoje foi esgotado.", + "errorPdfNeedsVision": "Digitalizar PDFs precisa de um provedor de visão Claude.", + "errorFileType": "Este tipo de arquivo não pode ser lido.", + "errorNotIndexed": "Leia o documento primeiro, depois extraia.", + "errorLocalOcrDisabled": "Ative o OCR local nas configurações de IA primeiro.", + "errorProvider": "Nenhum provedor de IA está configurado para isso.", + "errorTextImageOnly": "O OCR local lê apenas imagens, não este arquivo.", + "errorConsent": "Ler documentos com IA precisa do seu consentimento primeiro.", + "errorUnavailable": "Ler documentos com IA não está disponível aqui agora." + }, + "summary": { + "summarise": "Resumir", + "showText": "Mostrar texto extraído", + "summaryTitle": "Resumo", + "textTitle": "Texto extraído", + "close": "Ocultar" + }, + "ai": { + "readDone": "A IA leu seu documento.", + "readStagedOne": "A IA leu seu documento. 1 valor laboratorial está pronto para revisão.", + "readStagedFew": "A IA leu seu documento. {count} valores laboratoriais estão prontos para revisão.", + "readStagedOther": "A IA leu seu documento. {count} valores laboratoriais estão prontos para revisão.", + "read": "Ler com IA", + "reread": "Ler novamente", + "reading": "Lendo…", + "notReadYet": "Este documento ainda não foi lido." + }, + "review": { + "title": "Revisar valores extraídos", + "hint": "Aprove o que corresponde ao documento. Valores desmarcados são descartados; nada é salvo sem sua confirmação.", + "openOne": "Revisar valor extraído", + "openFew": "Revisar valores extraídos ({count})", + "openOther": "Revisar valores extraídos ({count})", + "includeAria": "Incluir {value}", + "type": { + "OBSERVATION": "Valor laboratorial", + "CONDITION": "Condição", + "MEDICATION_STATEMENT": "Medicamento" + }, + "statedRange": "Faixa informada {range}", + "needsCheck": "Confira este valor contra o documento e depois salve-o.", + "verify": "Verificar", + "verifySave": "Salvar valor", + "verifyInvalid": "Insira um nome e ou um valor numérico ou um resultado em texto, não ambos.", + "verifyFailed": "A correção não pôde ser salva. Tente novamente.", + "fieldName": "Nome", + "fieldDate": "Data", + "fieldValue": "Valor", + "fieldValueText": "Resultado (texto)", + "fieldUnit": "Unidade", + "fieldDose": "Dose", + "unverifiedNoteOne": "1 valor ainda precisa de verificação e permanece pendente.", + "unverifiedNoteFew": "{count} valores ainda precisam de verificação e permanecem pendentes.", + "unverifiedNoteOther": "{count} valores ainda precisam de verificação e permanecem pendentes.", + "finish": "Concluir revisão", + "confirmFailed": "A revisão não pôde ser salva. Tente novamente.", + "savedToastOne": "1 valor salvo", + "savedToastFew": "{count} valores salvos", + "savedToastOther": "{count} valores salvos", + "nothingSavedToast": "Revisão salva. Nenhum valor foi adicionado.", + "extract": "Extrair valores laboratoriais", + "extracting": "Extraindo…", + "extractHint": "Usa o texto já lido deste documento. Valores extraídos aguardam sua revisão; nada é salvo automaticamente.", + "extractEmpty": "Nenhum valor pôde ser extraído deste documento.", + "failUnitRequired": "Um valor numérico precisa de uma unidade antes de poder ser salvo.", + "failUnitMismatch": "A unidade informada não corresponde à unidade salva para este marcador. Ajuste-a e conclua a revisão novamente.", + "failGeneric": "Este valor não pôde ser salvo.", + "failUnknownBiomarker": "O biomarcador escolhido não existe mais. Escolha outro." + }, + "contentIndex": { + "indexPrompt": "Tornar o conteúdo dos documentos pesquisável.", + "indexAll": "Indexar tudo para busca", + "indexAllPending": "Iniciando…", + "indexAllQueued": "Indexando {count} documento(s) em segundo plano.", + "indexAllNothing": "Tudo já está indexado.", + "indexAllError": "Não foi possível iniciar a indexação." + }, + "share": { + "title": "Compartilhar este documento", + "multiTitle": "Compartilhar estes documentos", + "multiLabel": "{count} documentos", + "description": "Crie um link somente leitura para clínico com este documento anexado. O link e sua frase-senha aparecem uma vez." + }, + "chat": { + "title": "Conversar sobre este documento", + "openAria": "Perguntar ao Coach sobre este documento", + "openButton": "Perguntar ao Coach" + }, + "readingConsent": { + "body": "Ler com IA envia isto ao seu serviço de IA fora deste servidor. Permitir que o HealthLog envie documentos, laudos laboratoriais e descrições de medicamentos para leitura?", + "grant": "Permitir leitura", + "error": "O consentimento não pôde ser salvo. Tente novamente." + }, + "sourcePicker": { + "open": "Importar do arquivo", + "openNamed": "Importar de {name}", + "title": "Importar de {name}", + "description": "Busque pelo nome e marque os documentos que o HealthLog deve copiar.", + "sourceLabel": "Arquivo", + "searchLabel": "Nome do documento", + "searchPlaceholder": "Buscar por nome", + "tagLabel": "Tag", + "tagAny": "Qualquer tag", + "fromLabel": "De", + "toLabel": "Até", + "clearFilters": "Limpar tag e datas", + "rangeInvalid": "A data de fim é anterior à data de início.", + "empty": "{name} não tem documentos para mostrar.", + "noMatch": "Nenhum documento corresponde.", + "loadMore": "Carregar mais", + "stateImported": "No HealthLog", + "stateDeleted": "Excluído no HealthLog", + "selectedCount": "{count} de até {max} selecionados", + "importAction": "Importar {count}", + "importing": "Importando, um documento por vez…", + "done": "Concluído", + "summary": "Importados: {imported}. Já lá: {present}. Não importados: {failed}.", + "stopped": "Parado: {reason}", + "result": { + "waiting": "Aguardando", + "working": "Importando…", + "imported": "Importado", + "importedLinked": "Importado e vinculado", + "duplicate": "Já no HealthLog", + "duplicateLinked": "Já no HealthLog, agora vinculado", + "deleted": "Excluído no HealthLog, deixado como está" + }, + "errors": { + "unavailable": "Arquivos de documentos não estão habilitados neste servidor.", + "notConnected": "Este arquivo não está conectado. Conecte-o em Configurações, Integrações.", + "originNotAllowed": "Este endereço não está na lista de arquivos permitidos do servidor. Peça ao administrador para adicioná-lo.", + "unreachable": "O arquivo não pôde ser alcançado. Verifique se está em execução e se o endereço está certo.", + "redirected": "O arquivo redirecionou a solicitação. Insira o endereço para o qual ele redireciona.", + "authRefused": "O arquivo recusou o token. Verifique o token e suas permissões.", + "versionTooOld": "O arquivo é muito antigo. É necessário Paperless-ngx 2.16 ou posterior.", + "badResponse": "A resposta do arquivo não pôde ser lida. Verifique se o endereço aponta para o próprio arquivo.", + "notFound": "O arquivo não tem tal documento, ou o id da organização está errado ou não é seu.", + "linkTargetNotFound": "O registro para vincular não existe mais.", + "rateLimited": "Solicitações demais. Espere um minuto e tente novamente.", + "browserOnly": "Arquivos de documentos só podem ser usados no navegador.", + "invalidAddress": "Insira o endereço completo, começando com https:// ou http://.", + "organizationRequired": "Insira o id da organização Papra.", + "tokenRequired": "Insira o token da API. Um novo endereço precisa dele novamente.", + "fileTooLarge": "O arquivo é maior que o HealthLog aceita.", + "quotaExceeded": "Seu armazenamento de documentos está cheio.", + "fileType": "O HealthLog não aceita este tipo de arquivo.", + "uploadLimit": "O limite horário de envio foi atingido. Tente novamente mais tarde.", + "uploadBusy": "Outros envios ainda estão em execução. Tente novamente em instantes.", + "moduleDisabled": "Documentos estão desligados nas Configurações.", + "generic": "Algo deu errado. Tente novamente.", + "permissionMissing": "A chave Papra não consegue ler tags. Dê a ela a permissão tags:read." + }, + "pickMore": "Escolher mais", + "finishedHint": "Busque novamente ou mude um filtro para escolher mais documentos.", + "maxReached": "Você pode importar até {max} documentos por vez.", + "noMatchHint": "Tente parte do nome ou limpe a tag e as datas." + }, + "customize": "Personalizar visualização", + "layout": { + "viewDescription": "Pré-visualize cartões com miniaturas ou uma lista compacta.", + "arrangementHeading": "Organização", + "arrangementDescription": "Cada mês como seu próprio bloco, ou tudo fluindo pela largura total.", + "stacked": "Meses empilhados", + "flow": "Contínuo", + "saveFailed": "Não foi possível salvar a visualização." + }, + "deleteConfirm": { + "titleOne": "Excluir este documento?", + "titleMany": "Excluir {count} documentos?", + "body": "Você pode desfazer isso logo depois. Após 30 dias, é removido para sempre.", + "action": "Excluir" + } + }, + "selfDescription": {}, + "customMetrics": { + "sectionTitle": "Métricas personalizadas", + "sectionSubtitle": "Medições que você define e acompanha por conta própria.", + "add": "Adicionar métrica personalizada", + "addValue": "Adicionar valor", + "defineTitle": "Definir uma métrica personalizada", + "defineDescription": "Dê um nome à medição, defina sua unidade e, opcionalmente, uma faixa alvo.", + "editTitle": "Editar métrica personalizada", + "edit": "Editar", + "delete": "Excluir", + "deleteConfirmTitle": "Excluir esta métrica personalizada?", + "deleteConfirmDescription": "A métrica é removida da sua lista. Seus valores registrados são mantidos.", + "deletedToast": "Métrica personalizada excluída", + "deleteError": "Não foi possível excluir a métrica personalizada", + "showAllValues": "Mostrar todos os valores", + "emptyDescription": "Defina suas próprias medições para acompanhá-las e graficá-las.", + "noValuesYet": "Nenhum valor ainda", + "loadError": "Não foi possível carregar as métricas personalizadas", + "loadMore": "Carregar mais valores", + "showingLatestOf": "Mostrando os {shown} mais recentes de {total}", + "backToMeasurements": "Voltar às medições", + "form": { + "name": "Nome", + "namePlaceholder": "ex.: Força de preensão matinal", + "unit": "Unidade", + "unitPlaceholder": "ex.: kg", + "decimals": "Casas decimais", + "decimalsPlaceholder": "ex.: 1", + "targetLow": "Alvo baixo", + "targetLowPlaceholder": "Limite inferior", + "targetHigh": "Alvo alto", + "targetHighPlaceholder": "Limite superior", + "description": "Descrição", + "descriptionPlaceholder": "O que isso mede (opcional)", + "targetHint": "A faixa alvo é opcional e é desenhada como uma banda no gráfico.", + "correlationEnabled": "Usar na descoberta de correlações", + "correlationEnabledHint": "Adiciona esta métrica como um canal diário delimitado de comportamento. Permanece desligada por padrão.", + "requiredError": "Nome e unidade são obrigatórios", + "rangeOrderError": "O alvo baixo não deve exceder o alvo alto", + "save": "Salvar", + "savedToast": "Métrica personalizada salva", + "updatedToast": "Métrica personalizada atualizada", + "saveError": "Não foi possível salvar a métrica personalizada" + }, + "entry": { + "value": "Valor", + "measuredAt": "Data", + "note": "Nota", + "addDescription": "Registre um valor para esta métrica.", + "edit": "Editar valor", + "editTitle": "Editar valor", + "editDescription": "Atualize o valor, a data ou a nota.", + "delete": "Excluir valor", + "deleteConfirmTitle": "Excluir este valor?", + "deleteConfirmDescription": "Este valor é removido permanentemente.", + "valueError": "Insira um valor numérico", + "timestampError": "Insira uma data válida", + "savedToast": "Valor registrado", + "saveError": "Não foi possível registrar o valor", + "editedToast": "Valor atualizado", + "editError": "Não foi possível atualizar o valor", + "deletedToast": "Valor excluído", + "restoredToast": "Valor restaurado", + "restoreError": "Falha ao restaurar", + "deleteError": "Não foi possível excluir o valor" + }, + "chart": { + "empty": "Nenhum valor nesta faixa", + "valueLabel": "Valor", + "range": { + "30": "30d", + "90": "90d", + "365": "1a", + "all": "Tudo" + } + }, + "detail": { + "title": "Métrica personalizada", + "genericDescription": "Uma medição que você acompanha. Adicione valores para segui-la ao longo do tempo.", + "emptyTitle": "Nenhum valor ainda", + "emptyDescription": "Adicione seu primeiro valor para começar a graficar esta métrica.", + "valuesTitle": "{metric}: todos os valores", + "valuesDescription": "Cada valor registrado para esta métrica.", + "backToMetric": "Voltar para {metric}" + } + }, + "nutrients": { + "names": { + "vitamin_a": "Vitamina A", + "thiamin": "Tiamina (B1)", + "riboflavin": "Riboflavina (B2)", + "niacin": "Niacina (B3)", + "pantothenic_acid": "Ácido pantotênico (B5)", + "vitamin_b6": "Vitamina B6", + "biotin": "Biotina (B7)", + "folate": "Folato (B9)", + "vitamin_b12": "Vitamina B12", + "vitamin_c": "Vitamina C", + "vitamin_d": "Vitamina D", + "vitamin_e": "Vitamina E", + "vitamin_k": "Vitamina K", + "calcium": "Cálcio", + "iron": "Ferro", + "magnesium": "Magnésio", + "phosphorus": "Fósforo", + "zinc": "Zinco", + "copper": "Cobre", + "manganese": "Manganês", + "selenium": "Selênio", + "chromium": "Cromo", + "molybdenum": "Molibdênio", + "iodine": "Iodo", + "water": "Água", + "caffeine": "Cafeína", + "dha": "DHA (ômega-3)", + "epa": "EPA (ômega-3)" + }, + "page": { + "title": "Ingestão de nutrientes", + "description": "Hidratação e ingestão de vitaminas/minerais sincronizadas do app de saúde do seu telefone, mais entradas manuais de água.", + "moduleOffDescription": "Ative o módulo de nutrientes para ver hidratação e ingestão de vitaminas/minerais aqui. A ingestão sincronizada passa a fazer parte do registro que o Coach pode ler.", + "moduleOffCta": "Ativar nutrientes", + "emptyTitle": "Nenhum dado de nutrientes ainda", + "emptyDescription": "Os dados chegam pela sincronização do app de saúde do seu telefone ou por uma entrada manual de água.", + "loadError": "Não foi possível carregar seus dados de nutrientes", + "lastAttemptTitle": "Uma sincronização chegou, mas nada pôde ser armazenado", + "lastAttemptAt": "Última tentativa: {date}", + "lastAttemptReason": { + "unitMismatch": "Os valores que chegaram não corresponderam às unidades que este aplicativo espera para esses nutrientes, então não puderam ser armazenados.", + "valueOutOfRange": "As quantidades que chegaram eram maiores do que este aplicativo pode plausivelmente armazenar, então não puderam ser salvas.", + "dayInvalid": "As entradas continham uma data que o servidor não pôde aceitar. Isso pode acontecer quando o relógio ou fuso horário do lado remetente está errado, então vale verificar.", + "upsertFailed": "Essas entradas chegaram ao servidor, mas um problema deste lado impediu que fossem salvas. Não há nada que você precise fazer.", + "unknown": "Essas entradas chegaram, mas não puderam ser armazenadas." + } + }, + "hydration": { + "referenceMeta": "Ingestão de referência {value} {unit}/dia (EFSA)" + }, + "caffeine": { + "ceilingMeta": "Limite de nível seguro {value} {unit}/dia (EFSA)" + }, + "micronutrients": { + "title": "Vitaminas e minerais", + "rowMeta": "{days} de {window} dias, ref. {value} {unit} (EFSA)", + "rowMetaNoRef": "{days} de {window} dias", + "footer": "{tracked} de {total} micronutrientes acompanhados têm dados nesta janela.", + "emptyTitle": "Nenhum dado de micronutriente sincronizado ainda", + "loadError": "Não foi possível carregar seus dados de nutrientes", + "sourcePart": "{source} {value} {unit}", + "aboveUpperLimit": "Acima do nível de ingestão superior tolerável para adultos de {value} {unit} por dia ({source}).", + "aboveUpperLimitSupplemental": "A parcela de suplementos está acima do nível de ingestão superior tolerável para adultos de {value} {unit} por dia para suplementos ({source}).", + "upperLimitForm": { + "retinol": "O nível cobre apenas vitamina A pré-formada (retinol): se a quantidade vier de betacaroteno, não se aplica.", + "folic_acid": "O nível cobre ácido fólico de suplementos e alimentos fortificados, não o folato de alimentos comuns.", + "magnesium_salts": "O nível cobre sais de magnésio facilmente dissociáveis em suplementos, não o magnésio dos alimentos.", + "alpha_tocopherol": "O nível é definido para alfa-tocoferol." + } + }, + "sparseNote": "Um número baixo aqui geralmente significa registro esparso, não deficiência. Os totais diários do Apple Health refletem o que seus aplicativos registraram, não a ingestão dietética total.", + "units": { + "IU": "UI" + }, + "sources": { + "APPLE_HEALTH": "Sincronizado", + "MANUAL": "Inserido", + "SUPPLEMENT": "Suplementos" + } + }, + "daily": { + "line": { + "allClear": "Nada precisa da sua atenção hoje.", + "scoreReady": "Sua pontuação de saúde para hoje está pronta." + }, + "push": { + "title": "Seu briefing matinal", + "bodyProvisional": "{line}\nO sono de ontem à noite ainda não chegou.", + "titleScore": "Pontuação matinal {score}", + "band": { + "green": "Parece estável hoje.", + "yellow": "Algumas coisas valem uma olhada hoje.", + "red": "Algumas áreas precisam de atenção hoje." + } + }, + "item": { + "doseWindow": { + "title": "Medicamento previsto", + "body": "Uma dose está prevista para breve.", + "bodyNamed": "{name} está previsto para breve.", + "overdueTitle": "Medicamento atrasado", + "overdueBody": "Uma dose está atrasada.", + "overdueBodyNamed": "{name} está atrasado." + }, + "preventiveCare": { + "title": "Check previsto", + "body": "{label} está previsto.", + "bodyManyNamed": "Previstos: {labels}" + }, + "syncIssue": { + "title": "Sincronização precisa de atenção", + "body": "{integration} não está sincronizando. Reconecte para manter seus dados atualizados." + }, + "coachCheckin": { + "title": "Hora de verificar um plano", + "body": "Já faz cerca de uma semana desde que você definiu este plano. Mantenha-o, ajuste-o ou deixe-o ir. Sem pressão de qualquer forma.", + "bodyPlan": "Cerca de uma semana atrás você definiu: “{plan}”. Mantenha-o, ajuste-o ou deixe-o ir. Sem pressão de qualquer forma.", + "adjustPrompt": "Eu gostaria de ajustar meu plano de check-in.", + "adjustPromptPlan": "Eu gostaria de ajustar este plano: “{plan}”" + }, + "tensionWindow": { + "title": "Possível tensão hoje", + "body": { + "morning": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta manhã enquanto você estava parado, possivelmente alguma tensão.", + "afternoon": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta tarde enquanto você estava parado, possivelmente alguma tensão.", + "evening": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado esta noite enquanto você estava parado, possivelmente alguma tensão.", + "night": "Sua frequência cardíaca ficou acima do baseline de repouso por um período sustentado durante a noite enquanto você estava parado, possivelmente alguma tensão." + } + }, + "ecgNewRecording": { + "title": "Nova gravação de ECG", + "body": "Seu dispositivo registrou um novo ECG. Está pronto para visualizar.", + "bodyVerdict": "Seu dispositivo registrou um novo ECG e relatou: {verdict}.", + "verdict": { + "irregular": "um possível ritmo irregular", + "notDetected": "nenhum ritmo irregular", + "inconclusive": "um resultado inconclusivo" + } + }, + "sameTimeBaseline": { + "title": { + "below": "Atrás do seu ritmo usual", + "above": "À frente do seu ritmo usual" + }, + "body": { + "below": "Até {time} você está com {today} passos. Em um dia usual, você estaria com cerca de {typical} a esta altura.", + "above": "Até {time} você está com {today} passos, à frente dos {typical} que é usual para você a esta altura." + } + }, + "upcomingVisit": { + "title": "Compromisso se aproximando", + "bodyToday": "{what} hoje", + "bodyTomorrow": "{what} amanhã", + "bodyDayAfterTomorrow": "{what} depois de amanhã" + } + }, + "action": { + "logDose": "Registrar dose", + "reconnect": "Reconectar", + "viewCheckups": "Ver checks", + "checkinKeep": "Manter", + "checkinAdjust": "Ajustar", + "checkinLetGo": "Deixar ir", + "viewMilestone": "Ver", + "viewPulse": "Ver pulso", + "viewEcg": "Ver gravação", + "viewSteps": "Ver passos" + }, + "today": { + "scoreLabel": "Pontuação de saúde", + "deltaVsBaseline": "{delta} vs. seu baseline", + "deltaFlat": "Em linha com seu baseline", + "sleepPending": "O sono de ontem à noite ainda não chegou, então a leitura de hoje é provisória.", + "worthALook": "Vale uma olhada", + "allClear": "Nada precisa da sua atenção hoje.", + "ringLink": "Abrir detalhes de {metric}", + "heading": "Hoje", + "steadyWeeksOne": "Estável por {count} semana", + "steadyWeeksFew": "Estável por {count} semanas", + "steadyWeeksOther": "Estável por {count} semanas", + "valueWithUnit": "{value} {unit}", + "rangeWithUnit": "{low} a {high} {unit}", + "rangeAtThisTime": "{range} para este horário do dia", + "vital": { + "RESTING_HEART_RATE": "Frequência cardíaca em repouso", + "HEART_RATE_VARIABILITY": "Variabilidade da frequência cardíaca", + "RESPIRATORY_RATE": "Frequência respiratória", + "OXYGEN_SATURATION": "Saturação de oxigênio", + "BODY_TEMPERATURE": "Temperatura corporal", + "SKIN_TEMPERATURE": "Temperatura da pele", + "BLOOD_PRESSURE_SYS": "Pressão arterial sistólica", + "BLOOD_PRESSURE_DIA": "Pressão arterial diastólica", + "BLOOD_GLUCOSE": "Glicemia", + "PULSE": "Pulso", + "WEIGHT": "Peso", + "generic": "Um sinal vital" + }, + "steadyAtLeastWeeksOne": "Estável por pelo menos {count} semana", + "steadyAtLeastWeeksFew": "Estável por pelo menos {count} semanas", + "steadyAtLeastWeeksOther": "Estável por pelo menos {count} semanas" + }, + "milestone": { + "metric": { + "restingHeartRate": "frequência cardíaca em repouso", + "heartRateVariability": "variabilidade da frequência cardíaca", + "respiratoryRate": "frequência respiratória", + "weight": "peso", + "generic": "esta métrica" + }, + "record": { + "title": "Um novo recorde de {metric}", + "body": "Um recorde pessoal para sua {metric} hoje. Anotado silenciosamente, nada a fazer." + }, + "returnToBaseline": { + "title": "De volta à faixa: {metric}", + "body": "Sua {metric} se estabilizou de volta dentro da sua faixa usual. Seja o que for, passou." + }, + "sustainedInRange": { + "week1": { + "title": "Uma semana na faixa", + "body": "Sua {metric} se manteve dentro da sua faixa usual por uma semana agora. Bonito e estável." + }, + "week2": { + "title": "Duas semanas na faixa", + "body": "Sua {metric} permaneceu na sua faixa usual por duas semanas. Calmo e estável." + }, + "week3": { + "title": "Três semanas na faixa", + "body": "Três semanas de sua {metric} dentro da sua faixa usual. Um período real de estabilidade." + }, + "week4": { + "title": "Um mês na faixa", + "body": "Um mês inteiro com sua {metric} na sua faixa usual. Belamente estável." + } + } + }, + "lead": { + "vitalOutside": { + "above": "{metric} está em {value}, acima da sua faixa usual de {range}.", + "below": "{metric} está em {value}, abaixo da sua faixa usual de {range}." + }, + "vitalsOutside": { + "aboveOne": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinal vital está fora da sua faixa também.", + "aboveFew": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", + "aboveOther": "{metric} está em {value}, acima da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", + "belowOne": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinal vital está fora da sua faixa também.", + "belowFew": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também.", + "belowOther": "{metric} está em {value}, abaixo da sua faixa usual de {range}, e mais {count} sinais vitais estão fora da sua faixa também." + }, + "sleep": { + "more": "Ontem à noite você dormiu {duration}, {diff} a mais que o usual.", + "less": "Ontem à noite você dormiu {duration}, {diff} a menos que o usual.", + "usual": "Ontem à noite você dormiu {duration}, próximo ao seu usual.", + "plain": "Ontem à noite você dormiu {duration}." + }, + "vitalsInRangeOne": "Seu sinal vital mais recente está dentro da sua faixa usual.", + "vitalsInRangeFew": "Todos os {count} seus sinais vitais mais recentes estão dentro da sua faixa usual.", + "vitalsInRangeOther": "Todos os {count} seus sinais vitais mais recentes estão dentro da sua faixa usual.", + "vitalInRange": "{metric} está em {value}, dentro da sua faixa usual de {range}." + }, + "todayFact": { + "restMode": { + "label": "Modo de repouso", + "value": "Dia {day}" + }, + "medications": { + "label": "Medicamentos", + "value": "{taken} de {scheduled} tomados" + }, + "appointment": { + "label": "Compromisso", + "today": "Hoje {time}, {what}", + "tomorrow": "Amanhã {time}, {what}" + }, + "sleep": { + "label": "Ontem à noite", + "plain": "{duration}", + "usual": "{duration}, próximo ao seu usual", + "more": "{duration}, {diff} a mais que o usual", + "less": "{duration}, {diff} a menos que o usual" + }, + "vitals": { + "label": "Sinais vitais", + "allInOne": "{count} verificados, na sua faixa", + "allInFew": "{count} verificados, todos na sua faixa", + "allInOther": "{count} verificados, todos na sua faixa", + "oneOut": { + "above": "{metric} acima da sua faixa", + "below": "{metric} abaixo da sua faixa" + }, + "someOut": "{count} de {total} fora da sua faixa" + }, + "cycle": { + "label": "Ciclo", + "value": "{phase}, dia {day}", + "dayOnly": "Dia {day}" + } + } + }, + "reportSelection": { + "leafAnamnesis": "Perfil de saúde", + "groupIdentity": "Dados pessoais", + "groupVitals": "Sinais vitais", + "groupCardio": "Coração e circulação", + "groupBody": "Medidas corporais", + "groupSleepRecovery": "Sono e recuperação", + "groupActivity": "Atividade", + "groupMobility": "Mobilidade e marcha", + "groupEnvironment": "Ambiente", + "groupGlucose": "Glicemia", + "groupLabs": "Resultados laboratoriais", + "groupMedications": "Medicamentos", + "groupHistory": "Condições e alergias", + "groupSensitive": "Dados sensíveis", + "leafPatientIdentity": "Nome, data de nascimento, gênero, altura", + "leafInsurance": "Operadora e número do seguro", + "leafGlucosePanel": "Painel de glicose (tempo na faixa, GMI, variabilidade)", + "leafLabResults": "Resultados laboratoriais", + "leafMedicationList": "Lista de medicamentos", + "leafMedicationAdministrations": "Cada dose registrada", + "leafMedicationCompliance": "Taxa de adesão", + "leafGlp1Therapy": "Terapia com GLP-1 (histórico de doses, efeitos colaterais)", + "leafAllergies": "Alergias e intolerâncias", + "leafIllnessEpisodes": "Episódios de doença", + "leafFamilyHistory": "Histórico familiar", + "leafMood": "Humor", + "leafCycle": "Ciclo menstrual", + "templateStandard": "Relatório médico padrão", + "applyStandard": "Aplicar {template}", + "standardHint": "Um clique preenche o que uma consulta geral costuma precisar. Cada entrada permanece editável.", + "groupCount": "{on}/{total}", + "groupDisclosure": "Mostrar as entradas em {group}", + "sensitiveHint": "Nada aqui é pré-selecionado. Escolha cada entrada você mesmo.", + "scopeNone": "Nada selecionado ainda. Escolha o que incluir, ou aplique o relatório padrão.", + "scopeCount": "{count} entradas de {groups} áreas", + "scopeSensitive": "incl. {names}", + "leafVisits": "Consultas", + "leafSurgicalHistory": "Histórico cirúrgico", + "leafImmunizations": "Imunizações", + "leafEmergency": "Informações de emergência (tipo sanguíneo, contatos, diretivas)" + }, "recordSharing": { "banner": { "viewing": "Você está no registro de {name}", @@ -11493,8 +12286,7 @@ "loadError": "Não foi possível carregar a atividade.", "opened": "{name} abriu seu registro {count}×", "acted": "{name} fez uma alteração no seu registro", - "deletedAccount": "Uma conta excluída", - "truncated": "Esta lista mostra a atividade mais recente, não toda." + "deletedAccount": "Uma conta excluída" }, "delegate": { "addOnlyNote": "Você pode adicionar a este registro. Alterar ou remover entradas é algo que só {name} pode fazer." @@ -11813,3834 +12605,756 @@ "notificationsAction": "Abrir configurações de notificação" } }, - "onboarding": { - "errorGeneric": "Algo deu errado ao concluir a configuração. Tente novamente.", - "tour": { - "stepOf": "Etapa {current} de {total}", - "next": "Próximo", - "back": "Voltar", - "skip": "Pular tour", - "done": "Entendi", - "steps": { - "dashboardOverview": { - "title": "Seu painel", - "body": "O painel reúne todos os módulos de relance. Pressione longamente um bloco para reordenar ou ocultá-lo (Configurações → Layout do painel). Cada bloco só é tão informativo quanto os dados por trás dele, e os módulos à frente os preenchem." - }, - "quickAdd": { - "title": "Registrado em segundos", - "body": "Use “+ Adicionar” para registrar qualquer leitura em segundos: peso, pressão arterial, pulso, glicose. Força oculta: retrodate leituras que esqueceu de inserir. Tudo que registra aqui alimenta tendências, a pontuação de saúde e os insights de IA." - }, - "measurements": { - "title": "Leituras e faixas alvo", - "body": "Medições mostra o histórico e a faixa alvo de cada métrica. Joia oculta: defina uma faixa alvo por valor para que desvios se destaquem em cor. Essas séries são a base para as correlações do Coach e o relatório médico." - }, - "medications": { - "title": "Medicamentos e doses", - "body": "Medicamentos gerencia cronogramas, doses, estoque e titulação. Ocultos: planos recorrentes sincronizados de outros aplicativos (regras RRULE) e alertas de estoque baixo. Sua taxa de doses registradas alimenta o pilar de adesão no painel e o contexto da IA." - }, - "labs": { - "title": "Valores laboratoriais", - "body": "Exames captura biomarcadores com faixas de referência: hemograma, colesterol, HbA1c. Força: importação e exportação FHIR. Valores laboratoriais fora da faixa ressurgem como evidência nos insights e no relatório médico." - }, - "illness": { - "title": "Diário de doenças", - "body": "O diário de doenças registra episódios agudos e diagnósticos crônicos com seus surtos. Oculto: correlacione um episódio com suas leituras e o Modo de Repouso que pausa lembretes. É assim que o Coach entende por que os valores oscilam por um tempo." - }, - "vorsorge": { - "title": "Checks", - "body": "Checks lembram você de triagens e vacinas no seu próprio intervalo. Dica: “Concluído” pode criar uma leitura ou resultado laboratorial diretamente. Itens previstos aparecem como lembretes e no relatório médico." - }, - "cycle": { - "title": "Ciclo", - "body": "O acompanhamento do ciclo registra fases e sintomas. Oculto: compare sintomas com humor e sono. O ciclo dá contexto para oscilações que de outra forma pareceriam inexplicáveis." - }, - "mood": { - "title": "Humor", - "body": "Humor captura como você se sente mais tags em dois segundos. Força: suas próprias tags. Tendências de humor se correlacionam com sono, medicamentos e ciclo, e o Coach identifica os padrões." - }, - "insights": { - "title": "Insights", - "body": "Insights é o coração disso: análise dinâmica baseada em evidências em vez de dicas genéricas. Cada afirmação aponta para seus dados reais. Oculto: o layout é personalizável. Insights reúne tudo que os módulos acima fornecem." - }, - "coach": { - "title": "Coach", - "body": "O Coach responde perguntas sobre seus dados em diálogo, usando seu histórico, medicamentos e valores laboratoriais como contexto. Escolha seu provedor de IA você mesmo (sua própria chave ou local). Ele não recalcula nada; lê os mesmos números que o painel." - }, - "integrations": { - "title": "Integrações", - "body": "Integrações sincronizam Withings, WHOOP, Polar, Oura e Apple Health automaticamente. Peso, sono e recuperação se preenchem sem digitação manual e alimentam os insights e o Coach por sua vez." - }, - "export": { - "title": "Relatório médico", - "body": "O relatório médico reúne leituras, medicamentos, valores laboratoriais e checks em PDF ou FHIR para a consulta. É aqui que todos os módulos convergem: um relatório completo só vem de dados bem mantidos." - }, - "achievements": { - "title": "Conquistas", - "body": "Conquistas recompensam consistência: sequências e marcos. Um pequeno ciclo de motivação que facilita manter o hábito." - }, - "wrapUp": { - "title": "Esse é o tour", - "body": "Este passo a passo roda uma vez e não reabre sozinho. Tudo que cobriu permanece, e você pode ligar ou desligar recursos a qualquer momento em Configurações → Módulos." - } - } + "encounters": { + "kind": { + "routine": "Consulta de rotina", + "acute": "Consulta aguda", + "specialist": "Consulta com especialista", + "preventive": "Check preventivo", + "emergency": "Emergência", + "hospital": "Hospital", + "therapy": "Sessão de terapia", + "other": "Compromisso", + "procedure": "Procedimento ou cirurgia" }, - "shell": { - "back": "Voltar", - "skip": "Pular", - "next": "Continuar", - "stepOf": "Etapa {current} de {total}", - "stepsLabel": "Etapas de configuração" + "laterality": { + "left": "Esquerdo", + "right": "Direito", + "both": "Ambos os lados", + "none": "Não informado" }, - "baseline": { - "title": "Um pouco sobre você", - "body": "Quatro campos opcionais refinam faixas alvo, IMC e lembretes. Você pode ajustar qualquer um deles depois nas Configurações.", - "displayNameLabel": "Nome de exibição", - "displayNamePlaceholder": "Como o HealthLog deve se dirigir a você?", - "displayNameHint": "Exibido na saudação do painel e em relatórios.", - "heightLabel": "Altura (cm)", - "heightLabelFtIn": "Altura (ft, in)", - "genderLabel": "Gênero", - "genderNone": "Prefiro não dizer", - "genderMale": "Masculino", - "genderFemale": "Feminino", - "genderOther": "Outro", - "dateOfBirthLabel": "Data de nascimento", - "dateOfBirthHint": "Usado apenas para análises conscientes da idade." + "bodySiteWithSide": "{site} ({side})", + "sectionTitle": "Consultas", + "sectionDescription": "Consultas médicas e compromissos agendados em um só lugar.", + "add": "Consulta", + "loadError": "Não foi possível carregar as consultas.", + "emptyTitle": "Nenhuma consulta registrada ainda", + "emptyDescription": "Uma data é suficiente. Todo o resto é opcional.", + "upcomingHeading": "Próximas", + "pastHeading": "Passadas", + "createTitle": "Registrar uma consulta", + "editTitle": "Editar consulta", + "formDescription": "Apenas a data é obrigatória.", + "created": "Consulta salva", + "updated": "Consulta atualizada", + "saveFailed": "Não foi possível salvar a consulta.", + "checkupNotClosed": "Consulta salva. O check permanece aberto; seu acesso não cobre isso.", + "status": { + "planned": "Planejada", + "done": "Comparecida", + "cancelled": "Cancelada", + "noShow": "Perdida" }, - "done": { - "title": "Você está pronto", - "body": "Bem-vindo a bordo. Seu painel está pronto.", - "returnCta": "Abrir painel", - "learning": "Alguns insights (glicose, ritmo do sono, tendências de pressão arterial, ciclo) se refinam na primeira ou segunda semana conforme seus dados se acumulam. Blocos vazios agora só significam que ainda estamos aprendendo seu baseline.", - "connectCta": "Conectar um dispositivo", - "logCta": "Registrar sua primeira medição", - "importCta": "Importar histórico existente", - "modulesCta": "Escolher seus módulos" + "card": { + "documentCount": "documentos vinculados", + "labCount": "resultados laboratoriais vinculados", + "conditionCount": "condições vinculadas" }, - "welcomeBack": { - "title": "Bem-vindo de volta", - "cta": "Abrir painel" + "form": { + "date": "Data e hora", + "dateDerivesStatusHint": "Uma data no futuro é um compromisso agendado.", + "status": "Status", + "practitioner": "Clínica ou médico", + "practitionerHint": "Opcional: você pode adicionar o nome depois.", + "practitionerNone": "Não especificado", + "practitionerSearch": "Buscar nome ou clínica", + "practitionerNoMatch": "Nenhuma entrada encontrada.", + "practitionerAdd": "Adicionar novo", + "practitionerClear": "Limpar seleção", + "kind": "Tipo", + "reason": "Motivo", + "outcome": "Resultado", + "outcomeReveal": "Adicionar um resultado", + "bodySite": "Local do corpo", + "bodySiteHint": "Por exemplo joelho ou vesícula.", + "laterality": "Lado", + "linkDocuments": "Documentos", + "linkLabResults": "Resultados laboratoriais", + "linkConditions": "Condições", + "linkNothingToOffer": "Nada aqui para vincular ainda." }, - "disclaimer": { - "acknowledge": "Entendo: o HealthLog é uma ferramenta privada de acompanhamento, não uma avaliação clínica ou diagnóstico. Se eu estiver preocupado, falarei com meu médico, não com este aplicativo.", - "learnMore": "Saiba mais" + "deleteTitle": "Excluir esta consulta?", + "deleteDescription": "A entrada é removida. Se a consulta estiver agendada, seu lembrete para junto com ela.", + "deleteFailed": "Não foi possível excluir a consulta.", + "suggestion": { + "single": "Isso pertence a esta consulta?", + "choose": "A qual consulta isso pertence?" }, - "anamnesis": { - "title": "Sobre sua saúde (opcional)", - "subtitle": "Um pouco de contexto para o HealthLog ler seus números com mais justiça.", - "intro": "Compartilhe tanto ou pouco quanto quiser. Cada campo é opcional e você pode editá-lo a qualquer momento nas Configurações.", - "conditionsLabel": "Condições em curso", - "conditionsPlaceholder": "ex.: pressão alta, diabetes tipo 2", - "conditionsHint": "Ajuda o HealthLog a enquadrar suas leituras em contexto em vez de sinalizar o esperado.", - "allergiesLabel": "Alergias ou intolerâncias", - "allergiesPlaceholder": "ex.: penicilina, lactose", - "privacyNote": "Armazenado criptografado e usado apenas para dar melhor contexto. Não pedimos seus medicamentos aqui. Adicione-os a qualquer momento na página Medicamentos." - }, - "ai": { - "panelTitle": "Veja como os insights ficam", - "panelIntro": "Coach, o briefing diário e as leituras por métrica transformam seus próprios números em linguagem simples. Aqui está a forma disso, antes de conectar qualquer coisa.", - "showSample": "Ver um briefing de exemplo", - "sampleTitle": "Briefing Diário", - "sampleTag": "Exemplo", - "sampleAriaLabel": "Exemplo de briefing diário", - "sampleBody": "Peso caiu 1,2 kg em duas semanas. Pulso em repouso estável em 58 bpm. Pressão arterial na faixa em 6 de 7 dias; a única leitura alta seguiu um jantar tardio e salgado.", - "sampleCaption": "Apenas exemplo, não seus próprios dados. É assim que um briefing lê quando os insights estão ligados.", - "ladderTitle": "Três formas de ligar", - "ladderLocalTitle": "Modelo local: solicitações de IA permanecem na sua rede", - "ladderLocalBody": "Aponte o HealthLog para Ollama ou LM Studio na sua própria máquina. Gratuito e totalmente privado, o padrão tranquilo.", - "ladderByokTitle": "Traga sua própria chave", - "ladderByokBody": "Use sua própria chave OpenAI ou Anthropic. Roda sob sua conta e cobrança, e o nível de API mantém seus dados fora de treinamento por padrão.", - "ladderOauthTitle": "Entre com uma assinatura", - "ladderOauthBody": "Conecte uma conta ChatGPT. Sem custo por token, mas os termos do nível consumidor podem usar conteúdo para treinamento, então é uma escolha deliberada, nunca o padrão para seus dados de saúde.", - "keylessLine": "O HealthLog é totalmente útil sem IA. Seus blocos, gráficos, tendências e exportações funcionam. A IA só adiciona a leitura em linguagem simples por cima.", - "setupCta": "Configurar (cerca de um minuto)", - "sharedKeyNote": "Esta instância já fornece um provedor de IA compartilhado, então os insights funcionam para você agora, sem configuração.", - "offer": { - "title": "Esta instância pode escrever seu resumo em linguagem simples.", - "body": "O operador fornece um provedor que funcionou pela última vez nas últimas 24 horas. Um toque liga a leitura em linguagem simples; seus dados vão para esse único provedor e para ninguém mais.", - "cta": "Ligar linguagem simples", - "granted": "Ligado. O primeiro resumo aparece no seu painel.", - "error": "Ligar não funcionou. Tente novamente em instantes." - }, - "unavailable": { - "title": "O provedor desta instância não está respondendo agora.", - "body": "O HealthLog é totalmente útil sem a leitura em linguagem simples. Você pode adicionar um provedor próprio mais tarde nas Configurações." - } - }, - "steps": { - "who": "Para quem é este registro", - "areas": "Em que prestar atenção", - "medication": "Medicamento", - "sources": "De onde vêm as leituras", - "visit": "Consulta médica", - "units": "Unidades", - "confirm": "Confirmar", - "first-result": "Primeiro resultado", - "done": "Concluído" - }, - "flow": { - "welcome": { - "title": "Bem-vindo ao HealthLog", - "body": "Cinco perguntas curtas decidem o que o HealthLog mostra primeiro. Leva cerca de dois minutos.", - "changeLater": "Nada é definitivo: cada escolha pode ser alterada depois nas Configurações.", - "setUp": "Configurar", - "skip": "Pular por agora", - "againBody": "Sua configuração está concluída. Responda às perguntas novamente para mudar o que o HealthLog mostra primeiro, ou vá ao painel.", - "setUpAgain": "Configurar novamente" - }, - "who": { - "title": "Para quem é este registro?", - "body": "As respostas a seguir se aplicam a este registro.", - "options": { - "me": "Eu", - "someone-else": "Alguém de quem cuido", - "both": "Ambos" - }, - "hints": { - "someone-else": "Uma criança ou um pai, por exemplo. O perfil dela é criado no fim.", - "both": "Configure seu próprio registro agora; o perfil da outra pessoa é oferecido no fim." - } - }, - "areas": { - "title": "Em que quer prestar atenção?", - "body": "Escolha quantos quiser. Eles decidem quais módulos estão ligados e o que o painel mostra primeiro.", - "options": { - "blood-pressure": "Pressão arterial", - "weight-body": "Peso e corpo", - "glucose": "Glicemia", - "sleep": "Sono e recuperação", - "mood": "Humor e bem-estar mental", - "cycle": "Ciclo", - "activity": "Atividade e treinos", - "labs": "Resultados laboratoriais", - "illness": "Doenças e sintomas" - } - }, - "medication": { - "title": "Você toma medicamentos em um cronograma?", - "body": "Um cronograma liga o módulo de medicamentos e os lembretes.", - "options": { - "yes": "Sim", - "no": "Não", - "sometimes": "Às vezes" - } - }, - "sources": { - "title": "De onde vêm suas leituras hoje?", - "body": "Escolha quantos quiser. Uma conexão é oferecida no fim; nenhuma é obrigatória.", - "options": { - "manual": "Eu digito", - "apple-health": "Apple Health no meu iPhone", - "withings": "Withings", - "oura": "Oura", - "whoop": "WHOOP", - "polar": "Polar", - "fitbit": "Fitbit", - "strava": "Strava", - "nightscout": "Nightscout", - "file": "Um arquivo que já tenho" - }, - "hints": { - "apple-health": "Sincronizado pelo aplicativo iOS ou importado de uma exportação.", - "file": "Importado nas Configurações quando terminar aqui." - } - }, - "visit": { - "title": "Há uma consulta médica se aproximando?", - "body": "Uma consulta liga o relatório médico e adiciona preparar-se para ela à sua lista.", - "options": { - "within-a-month": "Sim, dentro de um mês", - "later": "Mais tarde", - "no": "Não" - } - }, - "units": { - "title": "Quais unidades você usa?", - "body": "As leituras são armazenadas uma vez e exibidas na unidade que você escolher. Pode mudar depois nas Configurações.", - "glucoseLegend": "Glicemia", - "weightLegend": "Peso e altura", - "options": { - "metric": "kg e cm", - "imperial": "lb e ft/in" - } - }, - "confirm": { - "title": "Aqui está o que suas respostas ligam", - "body": "Uma olhada e o HealthLog está configurado. Nada aqui é definitivo.", - "modulesTitle": "Módulos", - "switchedOn": "Ligados: {modules}.", - "nothingExtra": "Suas respostas não ligam nenhum módulo extra; as leituras centrais estão sempre lá.", - "alwaysOn": "Sempre ligados: {modules} e as leituras centrais (peso, pressão arterial, pulso).", - "everythingElse": "Todo o resto fica a um clique de distância em", - "modulesLink": "Configurações, Módulos", - "switchesOff": "Fora da navegação: {modules}. Você pode ligar qualquer um deles novamente em Configurações, Módulos.", - "glucoseUnit": "Glicemia", - "unitPreference": "Unidades", - "language": "Idioma", - "timezone": "Fuso horário", - "changeInSettings": "Mude em Configurações, Conta", - "cta": "Confirmar e continuar", - "managedTitle": "A pessoa de quem você cuida", - "managedBody": "O registro dela não tem login próprio; você cuida dele pela sua conta. É necessário um segundo fator ou chave de acesso na sua conta para criá-lo.", - "managedCreate": "Criar o perfil e concluir", - "managedLater": "Você também pode criá-lo depois em Configurações, Acesso compartilhado.", - "finishWithoutProfile": "Concluir sem o perfil" - }, - "first-result": { - "connect-source": { - "title": "Conectar {target}", - "body": "Uma conexão, escolhida a partir das suas respostas. As leituras então chegam sozinhas.", - "howTo": "A conexão com {target} é feita na página de integrações. Volte aqui depois; esta tela percebe quando está concluída.", - "cta": "Conectar {target}", - "checking": "Verificando a conexão.", - "waiting": "Ainda não conectado.", - "openSettings": "Abrir Configurações → Integrações", - "noDate": "desconhecido", - "needsCredentials": { - "title": "Esta instância ainda não tem um aplicativo {target} registrado.", - "detail": "Insira suas próprias credenciais em Configurações → Integrações, então a conexão pode começar." - }, - "state": { - "pending_first_sync": { - "title": "{target} está conectado.", - "detail": "A primeira sincronização está em andamento. As leituras aparecem no painel conforme chegam." - }, - "fresh": { - "title": "{target} já está conectado.", - "detail": "Última leitura {when}. Nada a fazer aqui." - }, - "stale": { - "title": "{target} está conectado, mas nada está chegando agora.", - "detail": "Última leitura {when}. A conexão em si está boa." - }, - "stalled": { - "title": "{target} está conectado, mas parou de sincronizar.", - "detail": "Última tentativa {when}. Verifique a conexão em Configurações → Integrações." - }, - "failing": { - "title": "{target} está conectado, mas a sincronização continua falhando.", - "detail": "Nada chegou desde {when}. Verifique a conexão em Configurações → Integrações." - }, - "reauth_required": { - "title": "A conexão com {target} precisa ser renovada.", - "detail": "Entre mais uma vez e as leituras continuam." - }, - "parked": { - "title": "A conexão com {target} está pausada.", - "detail": "Verifique a conexão em Configurações → Integrações." - } - } - }, - "add-medication": { - "title": "Adicionar seu primeiro medicamento", - "body": "Nome, dose e cronograma; o lembrete segue o cronograma que você definir.", - "howTo": "O medicamento é adicionado em alguns passos curtos. Você pode adicionar mais depois na página de medicamentos.", - "cta": "Adicionar um medicamento", - "done": "{name} foi adicionado.", - "doneUnnamed": "Seu primeiro medicamento foi adicionado.", - "nextDose": "Próxima dose: {when}.", - "reminders": "Os lembretes seguem o cronograma que você definir.", - "recordOnly": "Mantido como registro: sem lembretes, nada fica previsto.", - "asNeeded": "Conforme necessário: sem lembretes, registre uma dose quando tomar." - }, - "log-reading": { - "title": "Insira uma leitura: {target}", - "body": "Uma leitura coloca o primeiro valor no seu painel. A tendência se desenha a partir da quinta.", - "done": "Sua primeira leitura está no bloco dela.", - "doneElsewhere": "Sua primeira entrada para {target} está registrada.", - "elsewhere": "{target} tem sua própria página. Abra-a, faça a primeira entrada, depois volte e marque como concluída.", - "open": "Abrir {target}", - "markDone": "Eu fiz a entrada" - } - }, - "done": { - "tourCta": "Fazer um tour curto", - "openRecord": "Abrir o registro de {name}", - "createProfile": "Criar o perfil da pessoa de quem você cuida" - } - } - }, - "charts": { - "loadingLabel": "Carregando gráfico…", - "loadingSlowHint": "Calculando análises. Isso pode levar um momento.", - "weight": "Peso", - "bloodPressure": "Pressão arterial", - "pulse": "Pulso", - "bodyFat": "Gordura corporal", - "sleep": "Sono", - "steps": "Passos", - "hrv": "VFC", - "restingHeartRate": "Frequência cardíaca em repouso", - "activeEnergy": "Energia ativa", - "flights": "Andares subidos", - "distance": "Distância caminhada + corrida", - "vo2Max": "VO2 máx", - "bodyTemperature": "Temperatura corporal", - "noData": "Nenhum dado na faixa de tempo selecionada", - "bucketWeekly": "Média semanal", - "bucketMonthly": "Média mensal", - "bucketWeeklyDaily": "Média diária por semana", - "bucketMonthlyDaily": "Média diária por mês", - "days7Label": "7d", - "days7Title": "Últimos 7 dias", - "days30Label": "30d", - "daysNLabel": "{days}d", - "days30Title": "Últimos 30 dias", - "days90Label": "90d", - "days90Title": "Últimos 90 dias", - "daysAllLabel": "Tudo", - "daysAllTitle": "Todo o tempo", - "systolic": "Sistólica", - "diastolic": "Diastólica", - "bodyWater": "Água corporal", - "boneMass": "Massa óssea", - "spo2": "SpO2", - "movingAverage7d": "Tendência de 7 dias", - "avg7dShort": "7d", - "avg30dShort": "30d", - "trend7dShort": "Tendência de 7 dias", - "trend": "Tendência", - "perWeek": "/semana", - "totalDelta": "Total", - "colorGreen": "Verde:", - "colorOrange": "Laranja:", - "colorRed": "Vermelho:", - "mood": "Humor", - "moodScore": "Pontuação de humor", - "weekdays": { - "mon": "Seg", - "wed": "Qua", - "fri": "Sex", - "sun": "Dom" - }, - "months": { - "jan": "Jan", - "feb": "Fev", - "mar": "Mar", - "apr": "Abr", - "may": "Mai", - "jun": "Jun", - "jul": "Jul", - "aug": "Ago", - "sep": "Set", - "oct": "Out", - "nov": "Nov", - "dec": "Dez" - }, - "heatmapOnTime": "no horário", - "heatmapLate": "atrasado", - "heatmapVeryLate": "muito atrasado", - "legendOnTime": "No horário", - "legendLate": "Atrasado", - "legendVeryLate": "Muito atrasado", - "legendMissed": "Perdido", - "emptyStateTitle": "Adicione mais medições para ver tendências", - "emptyStateDescription": "Registre pelo menos 3 entradas para desbloquear a linha de tendência.", - "needMoreDistinctDaysTitle": "Mais dias distintos necessários", - "needMoreDistinctDaysDescription": "Registre em mais dias para desbloquear a linha de tendência.", - "noDataInRangeTitle": "Nenhum dado nesta faixa", - "noDataInRangeDescription": "Nenhuma medição cai dentro da faixa selecionada. Mude a faixa ou registre uma nova medição.", - "errorTitle": "Não foi possível carregar os dados", - "loadErrorTitle": "O gráfico não pôde ser carregado", - "loadErrorReload": "Recarregar", - "sparseDataCaption": "Mais dias preencherão a tendência.", - "tooltipHourlyMean": "{metric} (média das horas)", - "dataTable": { - "toggle": "Pontos de dados ({count})", - "columnDate": "Data", - "noValue": "Sem valor", - "captionDay": "Uma linha por dia de {metric}, os mesmos pontos que o gráfico desenha.", - "captionWeek": "Uma linha por semana de {metric}, a média dos dias daquela semana, os mesmos pontos que o gráfico desenha.", - "captionMonth": "Uma linha por mês de {metric}, a média dos dias daquele mês, os mesmos pontos que o gráfico desenha.", - "hourlyMeanNote": "{metric} é a média de cada dia, com cada hora contando uma vez, então um treino não pesa mais que o resto do dia." - }, - "personalBaseline": "Seu normal", - "deltaVsBaseline": "{delta} vs. seu normal", - "deltaUnchanged": "corresponde ao seu normal", - "deltaVsTarget": "{delta} vs. alvo", - "weekdaysFull": { - "mon": "Segunda-feira", - "tue": "Terça-feira", - "wed": "Quarta-feira", - "thu": "Quinta-feira", - "fri": "Sexta-feira", - "sat": "Sábado", - "sun": "Domingo" - }, - "rangeBand": "Faixa", - "a11y": { - "summary": "Gráfico de {metric}. Faixa {min} a {max}, mais recente {latest}, tendência {trend}.", - "noData": "Gráfico de {metric}. Nenhum dado disponível.", - "trendUp": "subindo", - "trendDown": "caindo", - "trendFlat": "estável", - "scatterSummary": "Gráfico de correlação, {count} pontos plotando {xLabel} contra {yLabel}.", - "scatterNoData": "Gráfico de correlação de {xLabel} contra {yLabel}. Nenhum dado disponível.", - "moodHeatmap": "Mapa de calor de humor de {start} a {end}, {days} dias registrados.", - "moodHeatmapEmpty": "Mapa de calor de humor, nenhum dia registrado ainda.", - "complianceHeatmap": "Mapa de calor de adesão a medicamentos de {start} a {end}, {days} dias ativos.", - "complianceHeatmapEmpty": "Mapa de calor de adesão a medicamentos, nenhum dia ativo ainda." - }, - "medicationsEmptyAction": "Adicionar um medicamento" - }, - "medications": { - "title": "Medicamentos", - "subtitle": "Medicamentos, cronogramas e doses", - "loginRequired": "Entre para gerenciar medicamentos.", - "addMedication": "Adicionar", - "firstMedication": "Adicionar primeiro medicamento", - "addChoice": { - "logIntake": "Registrar uma dose", - "newMedication": "Novo medicamento" - }, - "takeAllDue": { - "button": "Tomar todos os previstos", - "dialogTitle": "Tomar medicamentos previstos", - "dialogDescription": "Estes medicamentos estão previstos agora. Confirme para registrar todos como tomados.", - "confirm": "Tomar todos ({count})", - "successToast": "{count} doses registradas", - "partialToast": "{taken} registradas, {failed} falharam. Tente novamente", - "failedToast": "Nenhuma dose registrada. Tente novamente" - }, - "logIntake": { - "dialogTitle": "Registrar uma dose", - "dialogDescription": "Registre uma dose contra um medicamento existente. Você pode retrodatá-la para uma data e hora passadas.", - "medicationLabel": "Medicamento", - "slotLabel": "Horário do cronograma", - "slotNone": "Sem horário específico", - "doseLabel": "Dose", - "doseHint": "Pré-preenchida com a dose do medicamento ou horário. Edite-a para registrar uma dose diferente apenas para esta dose.", - "takenAtLabel": "Data e hora", - "takenAtHint": "Padrão é agora; escolha uma data e hora anteriores para registrar uma dose passada.", - "skippedLabel": "Registrada como pulada", - "noMedications": "Adicione um medicamento primeiro, então você pode registrar doses contra ele.", - "cancel": "Cancelar", - "submit": "Registrar dose", - "slotError": "O horário selecionado não pôde ser correspondido a um horário. Escolha outro horário ou “Sem horário específico”." - }, - "emptyTitle": "Nenhum medicamento ainda", - "emptyDescription": "Adicione medicamentos, doses e janelas de lembrete para acompanhar a adesão.", - "loadFailed": "Não foi possível carregar os medicamentos", - "retryLoad": "Tentar novamente", - "inactive": "Pausado", - "intakeHistory": "Histórico de doses", - "openDetailPage": "Abrir página de detalhes do medicamento", - "compliance": "Adesão", - "importIntakes": "Importar doses", - "importDescription": "Cole um array JSON com dados de doses. Formato esperado:", - "importUploadFile": "Enviar arquivo JSON", - "importPaste": "Cole o JSON aqui…", - "importSelected": "Selecionado: {name}", - "importFileLoaded": "Arquivo \"{name}\" carregado", - "importInvalidJson": "O arquivo não contém JSON válido", - "importNoArray": "Nenhum array encontrado", - "importFailed": "Falha na importação", - "importInvalidFormat": "Formato JSON inválido", - "requestExample": "Exemplo de solicitação", - "categoryBloodPressure": "Pressão arterial", - "categoryVitamin": "Vitaminas", - "categoryThyroid": "Tireoide", - "categoryHormone": "Hormônios", - "categorySupplement": "Suplemento", - "categoryPainRelief": "Alívio da dor", - "categoryAllergy": "Alergia", - "categoryDigestive": "Gastrointestinal", - "categorySkin": "Cuidados com a pele", - "categorySleepAid": "Auxílio para dormir", - "categoryDiabetes": "Diabetes", - "categoryAntibiotic": "Antibiótico", - "categoryMentalHealth": "Saúde mental", - "categoryOther": "Outro", - "daysSun": "Dom", - "daysMon": "Seg", - "daysTue": "Ter", - "daysWed": "Qua", - "daysThu": "Qui", - "daysFri": "Sex", - "daysSat": "Sáb", - "back": "Voltar", - "today": "Hoje", - "yesterday": "Ontem", - "tomorrow": "Amanhã", - "asNeededMarker": "Conforme necessário", - "recordOnlyBadge": "Apenas registro", - "courseEndedBadge": "Encerrado", - "trackIntake": { - "title": "Acompanhamento de doses", - "label": "Acompanhar doses", - "helperOn": "As doses ficam previstas neste cronograma, com lembretes e adesão.", - "helperOff": "Mantido como registro: nada fica previsto, sem lembretes, sem adesão.", - "enabledToast": "Acompanhamento de doses ligado", - "disabledToast": "Acompanhamento de doses desligado", - "toggleFailed": "Não foi possível alterar o acompanhamento de doses." - }, - "autoMarkTaken": { - "label": "Registrar doses automaticamente", - "helper": "O HealthLog registra cada dose programada como tomada no horário dela. Você ainda pode alterar ou pular uma dose manualmente. Nenhum lembrete é enviado.", - "cardHint": "Registrada automaticamente", - "enabledToast": "As doses agora são registradas automaticamente", - "disabledToast": "As doses não são mais registradas automaticamente", - "toggleFailed": "Não foi possível alterar o registro automático." - }, - "withoutNotification": "Sem notificação", - "pausedSince": "Pausado desde", - "takeNow": "Tomar agora", - "lastDoseYesterday": "Última dose ontem", - "lastDoseDaysAgo": "Última dose há {count} dias", - "overdue": "Atrasado", - "veryOverdue": "Muito atrasado", - "complianceWindow": "Adesão ({days} dias)", - "complianceUnavailable": "A adesão não pôde ser carregada", - "complianceNotApplicable": "Adesão não aplicável", - "complianceNotApplicableReason": "Nenhum cronograma local está armazenado no HealthLog.", - "complianceInfo": "Parcela das doses esperadas que você registrou. Cronogramas semanais contam semana por semana.", - "complianceInfoLabel": "O que significa adesão?", - "lastIntake": "Última dose:", - "nextIntake": "Próxima dose:", - "nextIntakeOverdue": "Atrasada desde {time}, ainda pode ser tomada", - "dayStreak": "dias seguidos", - "dayStreakOne": "dia seguido", - "cycleDueToday": "Previsto para hoje", - "cycleNoClosedCycles": "Nenhum ciclo de doses fechado ainda", - "taken": "Tomada", - "skipped": "Pulada", - "intakeToastTaken": "{name} registrada como tomada", - "intakeToastSkipped": "{name} pulada", - "intakeToastFailed": "Não foi possível registrar {name}. Tente novamente", - "intakeUndo": "Desfazer", - "intakeUndone": "Entrada revertida", - "intakeUndoFailed": "Não foi possível desfazer. Abra o histórico para corrigir", - "glp1LastInjection": "{label}", - "glp1NextInjectionDays": "{label} (em {days} dias)", - "glp1NextInjectionToday": "hoje", - "glp1NextInjectionTomorrow": "amanhã", - "glp1RotationSuggested": "Próximo recomendado: {site}", - "glp1LogSideEffect": "Registrar efeito colateral", - "sideEffects": { - "section": "Efeitos colaterais", - "addCta": "Registrar", - "sheetTitle": "Registrar um efeito colateral", - "categoryLabel": "Categoria", - "entryLabel": "Sintoma", - "severityLabel": "Gravidade", - "severity": { - "mild": "Leve", - "moderate": "Moderado", - "significant": "Significativo", - "severe": "Grave", - "verySevere": "Muito grave" - }, - "notesLabel": "Notas (opcional)", - "notesPlaceholder": "Qualquer coisa que valha lembrar, máx. 280 caracteres", - "submitCta": "Salvar", - "cancelCta": "Cancelar", - "emptyState": "Nenhum efeito colateral registrado ainda. Acompanhar pode ajudar seu médico e revelar padrões ao longo do tempo.", - "recentTitle": "Últimos 30 dias", - "loading": "Carregando…", - "loadMore": "Carregar mais", - "deleteCta": "Excluir", - "deleteError": "Não foi possível excluir a entrada", - "errorSeverity": "A gravidade deve estar entre 1 e 5", - "errorEntry": "Escolha um sintoma", - "categories": { - "gi": "Gastrointestinais", - "metabolic": "Metabólicos", - "injectionSite": "Local de injeção", - "cognitive": "Cognitivos", - "glp1Specific": "Específicos de GLP-1" - }, - "entries": { - "nausea": "Náusea", - "vomiting": "Vômito", - "diarrhea": "Diarreia", - "constipation": "Constipação", - "abdominalPain": "Dor abdominal", - "hypoglycemiaSymptoms": "Sintomas de glicemia baixa", - "dehydration": "Desidratação", - "anorexia": "Diminuição do apetite", - "electrolyteFatigue": "Fadiga por desequilíbrio de eletrólitos", - "injectionRedness": "Vermelhidão no local de injeção", - "injectionSwelling": "Inchaço no local de injeção", - "injectionBruising": "Hematoma no local de injeção", - "injectionInduration": "Endurecimento no local de injeção", - "brainFog": "Névoa mental", - "dizziness": "Tontura", - "lowMood": "Humor baixo", - "lowEnergy": "Pouca energia", - "earlySatiety": "Saciedade precoce", - "gastroparesisLike": "Esvaziamento gástrico lento", - "dysgeusia": "Alteração do paladar", - "gallbladderDiscomfort": "Desconforto na vesícula" - }, - "deleteConfirmTitle": "Excluir esta entrada?", - "deleteConfirmBody": "Esta entrada de efeito colateral será removida permanentemente." - }, - "scheduling": { - "naturalLanguage": { - "title": "Descreva seu medicamento", - "description": "Escreva o medicamento com suas próprias palavras e preencheremos o formulário para você.", - "placeholder": "ex.: Mounjaro 5 mg semanalmente na quarta-feira de manhã começando na próxima segunda", - "submit": "Extrair", - "submitBusy": "Extraindo…", - "cancel": "Cancelar", - "examples": { - "label": "Tente um destes exemplos", - "weekly": "Mounjaro 5 mg semanalmente na quarta-feira de manhã", - "daily": "Ibuprofeno 200 mg todos os dias, 3 vezes ao dia", - "rolling": "Metotrexato 7,5 mg a cada 7 dias a partir da última injeção" - }, - "error": { - "empty": "Digite uma descrição primeiro.", - "tooLong": "Mantenha a descrição abaixo de 2000 caracteres.", - "rateLimit": "Solicitações demais. Espere um momento e tente novamente.", - "noProvider": "Nenhum provedor de IA configurado. Configure um nas Configurações.", - "budget": "Orçamento diário de IA atingido. Tente novamente amanhã.", - "network": "Não foi possível alcançar o provedor de IA. Tente novamente.", - "consent": "Ler sua descrição com IA precisa do seu consentimento primeiro.", - "unavailable": "Ler descrições com IA não está disponível aqui agora." - } - }, - "cadence": { - "section": "Cadência", - "label": "Com que frequência", - "kind": { - "daily": "Todos os dias", - "weekdays": "Certos dias da semana", - "everyNWeeks": "A cada N semanas em certos dias", - "monthly": "Mensalmente em um dia específico", - "everyNMonths": "A cada N meses em um dia específico", - "yearly": "Uma vez por ano", - "rolling": "A cada N dias a partir da última dose (flexível)", - "rollingExplainer": "Conta a partir da sua última dose registrada; pausa se você pular uma dose.", - "oneShot": "Dose única" - }, - "weekdays": { - "label": "Dias da semana", - "short": { - "mo": "Seg", - "tu": "Ter", - "we": "Qua", - "th": "Qui", - "fr": "Sex", - "sa": "Sáb", - "su": "Dom" - }, - "long": { - "mo": "Segunda-feira", - "tu": "Terça-feira", - "we": "Quarta-feira", - "th": "Quinta-feira", - "fr": "Sexta-feira", - "sa": "Sábado", - "su": "Domingo" - } - }, - "intervalWeeks": { - "suffix": "semanas" - }, - "dayOfMonth": { - "label": "Dia" - }, - "intervalMonths": { - "suffix": "meses", - "dayOnLabel": "no dia" - }, - "yearly": { - "date": { - "label": "Data" - } - }, - "rollingDays": { - "suffix": "dias" - } - }, - "timesOfDay": { - "section": "Horários do dia", - "label": "Horários do dia", - "empty": { - "cta": "Adicione o primeiro horário." - }, - "add": "Adicionar horário", - "remove": "Remover", - "presets": { - "morning": "Manhã", - "noon": "Meio-dia", - "evening": "Noite", - "night": "Madrugada" - }, - "max": { - "reached": "Máximo atingido. Remova um horário antes de adicionar outro." - } - }, - "courseWindow": { - "section": "Janela do curso", - "startsOn": { - "label": "Começa em" - }, - "endsOn": { - "label": "Termina em" - }, - "noEndDate": "Sem data de fim", - "oneShotCaption": "(dose única)", - "invalidRange": "A data de fim deve ser no ou após a data de início." - } - }, - "wizard": { - "header": { - "stepOf": "Etapa {current} de {total}", - "createTitle": "Novo medicamento", - "editTitle": "Editar {name}" - }, - "nav": { - "back": "Voltar", - "next": "Próximo", - "save": "Salvar", - "saveEdit": "Salvar alterações", - "nextHint": "Próximo: {step}", - "reviewHint": "Próximo: Salvar", - "jumpFirst": "Ir para a primeira etapa", - "jumpLast": "Ir para revisão e salvar" - }, - "nl": { - "button": "Descrever" - }, - "steps": { - "step1": { - "title": "Como o medicamento se chama?", - "subline": "Exatamente como aparece na caixa.", - "label": "Nome", - "placeholder": "ex.: Ramipril", - "short": "Nome" - }, - "step2": { - "title": "Que tipo de medicamento é?", - "subline": "Usamos isso para os modelos e análises corretos.", - "short": "Tipo" - }, - "step3": { - "title": "Qual é a dose?", - "subline": "Um comprimido, uma inalação, uma gota, dependendo da forma.", - "amountLabel": "Quantidade", - "amountPlaceholder": "ex.: 5", - "unitLabel": "Unidade", - "unit": { - "mg": "mg", - "ml": "ml", - "iu": "UI", - "mcg": "µg", - "g": "g", - "tablets": "comprimido(s)", - "capsules": "cápsula(s)", - "drops": "gotas", - "puffs": "inalação", - "sprays": "spray", - "pieces": "unidades", - "other": "outro" - }, - "deliveryFormLabel": "Via", - "deliveryForm": { - "ORAL": "Oral", - "INJECTION": "Injeção", - "OTHER": "Outra" - }, - "dosesPerUnitLabel": "Doses por unidade", - "dosesPerUnitPlaceholder": "ex.: 4", - "dosesPerUnitHint": "Doses por caneta/frasco. Deixe em branco para não acompanhar estoque.", - "short": "Dose", - "unitsPerDoseLabel": "Unidades por dose", - "unitsPerDoseHint": "ex.: 2 comprimidos de 2 mg para uma dose de 4 mg, ou ½ comprimido para uma dose dividida" - }, - "step4": { - "title": "Por quanto período você está tomando?", - "subline": "Uma data de início é suficiente para hoje. Você pode adicionar uma data de fim depois.", - "short": "Quando" - }, - "step5": { - "title": "Com que frequência você dose?", - "subline": "Escolha a cadência. Os detalhes vêm na próxima etapa.", - "short": "Cadência" - }, - "step6": { - "title": "Como isso fica em detalhes?", - "subline": "Defina dias da semana, intervalos ou o dia do mês.", - "intervalWeeks": { - "label": "A cada", - "suffix": "semanas" - }, - "dayOfMonth": { - "label": "No", - "suffix": "dia do mês" - }, - "rollingDays": { - "label": "A cada", - "suffix": "dias a partir da última dose" - }, - "short": "Detalhe" - }, - "step7": { - "title": "Quando você dose?", - "subline": "Um ou mais horários do dia. Os lembretes seguem esta lista.", - "presetsLabel": "Predefinições de horário", - "presets": { - "morning": "Manhã", - "noon": "Meio-dia", - "evening": "Noite", - "night": "Madrugada" - }, - "overrideHint": "Opcional: defina uma dose ou contagem de unidades diferente apenas para este horário. Deixe em branco para usar o padrão do medicamento.", - "doseOverrideLabel": "Dose para este horário (opcional)", - "doseOverridePlaceholder": "ex.: meio comprimido", - "unitsOverrideLabel": "Unidades consumidas neste horário", - "unitsOverrideInherit": "Padrão", - "short": "Horários" - }, - "step8": { - "title": "Tudo pronto. O HealthLog deve lembrar você?", - "subline": "Revise tudo abaixo antes de salvar.", - "remindersLabel": "Lembretes ligados", - "remindersDescription": "Push, Telegram ou ntfy, conforme suas configurações.", - "noChannelHint": "Os lembretes precisam de um canal de notificação, e nenhum está ativo agora.", - "noChannelHintLink": "Configurar notificações", - "short": "Concluído" - } - }, - "classRow": { - "bloodPressure": "Pressão arterial", - "diabetes": "Diabetes", - "hormone": "Hormônios", - "glp1": "Injeção de GLP-1", - "painRelief": "Dor", - "allergy": "Alergia", - "vitamin": "Vitaminas", - "supplement": "Suplemento", - "antibiotic": "Antibiótico", - "mentalHealth": "Saúde mental", - "thyroid": "Tireoide", - "digestive": "Gastrointestinais", - "skin": "Cuidados com a pele", - "sleepAid": "Auxílio para dormir", - "other": "Outro" - }, - "cadence": { - "daily": { - "label": "Diário", - "description": "Todos os dias no mesmo horário." - }, - "weekdays": { - "label": "Dias da semana específicos", - "description": "Ex.: segunda, quarta, sexta." - }, - "everyNWeeks": { - "label": "A cada poucas semanas", - "description": "Ex.: a cada 2 semanas nas quintas (GLP-1, biológicos)." - }, - "monthly": { - "label": "Mensal", - "description": "Em um dia fixo de cada mês (ex.: sempre o dia 1)." - }, - "rolling": { - "label": "Flexível a partir da última dose", - "description": "Deixe a próxima dose aberta. Quando você tocar 'tomada', o contador recomeça daquele momento." - }, - "oneShot": { - "label": "Dose única", - "description": "Uma administração, ex.: uma vacina ou um curso de antibiótico." - }, - "asNeeded": { - "label": "Conforme necessário", - "description": "Sem plano fixo. Registre uma dose sempre que precisar (ex.: alívio da dor)." - } - }, - "summary": { - "title": "Resumo", - "cadence": { - "daily": "Todos os dias", - "weekdays": "Nos dias da semana selecionados", - "biweekly": "A cada duas semanas", - "monthly": "Mensalmente", - "quarterly": "A cada três meses", - "yearly": "Uma vez por ano", - "rolling": "A cada {n} dias a partir da sua última dose", - "oneShot": "Uma dose única", - "asNeeded": "Conforme necessário", - "everyNWeeks": "A cada {n} semanas", - "everyNMonths": "A cada {n} meses" - }, - "weekdaysDetail": ", em {days}", - "dayOfMonthDetail": ", no dia {day}.", - "times": "às {times}", - "startsOn": "Começa: {date}", - "endsOn": "Termina: {date}", - "noEndDate": "Sem data de fim" - }, - "compose": { - "scheduleIndex": "Cronograma {n} de {total}", - "list": { - "add": "Adicionar outro cronograma", - "edit": "Editar", - "remove": "Remover", - "removeDisabled": "É necessário pelo menos um cronograma." - } - }, - "errors": { - "submitFailed": "Não foi possível salvar o medicamento. Tente novamente." - } - }, - "doseStrength": { - "title": "Força da dose ao longo do tempo", - "axisLabel": "Dose registrada ({unit})", - "tooltipLabel": "Dose", - "currentDose": "Dose atual: {dose} {unit}", - "noCurrentDose": "Nenhuma dose registrada ainda.", - "empty": "Nenhum histórico de titulação ainda. Registre uma mudança de dose para ver a curva de força." - }, - "titration": { - "title": "Plano de titulação", - "empty": "Nenhum passo de escalada de dose registrado ainda. Adicione mudanças de dose datadas para plotar o plano.", - "youAreHere": "Você está aqui", - "doseStep": "{dose} {unit}", - "plannedFor": "Planejado para {date}" - }, - "injectionSiteBodyOutlineAriaLabel": "Contorno do corpo", - "injectionSitePickerAriaLabel": "Seletor de local de injeção", - "injectionSiteRecommendedAriaLabel": "{site}: próximo local recomendado", - "injectionSiteLegendAriaLabel": "Legenda de marcadores", - "injectionSiteLegendRecommended": "Próximo local recomendado", - "injectionSiteLegendLastUsed": "Último local usado", - "siteAbdomenLeft": "Abdômen, inferior esquerdo", - "siteAbdomenRight": "Abdômen, inferior direito", - "siteAbdomenUpperLeft": "Abdômen, superior esquerdo", - "siteAbdomenUpperRight": "Abdômen, superior direito", - "siteThighLeft": "Coxa esquerda", - "siteThighRight": "Coxa direita", - "siteUpperArmLeft": "Braço esquerdo", - "siteUpperArmRight": "Braço direito", - "sideEffectTagsHelp": "Toque em uma tag para adicioná-la às tags da sua entrada de humor.", - "sideEffectTagNausea": "náusea", - "sideEffectTagConstipation": "constipação", - "sideEffectTagDiarrhea": "diarreia", - "sideEffectTagFatigue": "fadiga", - "sideEffectTagAppetiteLoss": "perda-de-apetite", - "sideEffectTagHeartburn": "azia", - "sideEffectTagHeadache": "dor-de-cabeça", - "phaseConfig": "Fases de lembrete", - "phaseConfigDescription": "Configure o tempo dos lembretes.", - "phaseGreen": "Verde", - "phaseYellow": "Amarelo", - "phaseOrange": "Laranja", - "phaseRed": "Vermelho", - "phaseMinutes": "Min", - "phasePercent": "%", - "phaseResetDefaults": "Redefinir para padrões", - "phaseSaved": "Fases de lembrete salvas", - "sourceWeb": "Web", - "sourceApi": "Aplicativo iOS", - "sourceReminder": "Lembrete", - "sourceImport": "Importação", - "sourceAppleHealth": "Apple Health", - "intakeSourceVia": "via {origin}", - "intakeRecordedAutomatically": "Registrada automaticamente", - "intakeHistoryEmptyTitle": "Nenhuma dose registrada ainda", - "intakeHistoryEmptyDescription": "Registre uma dose na página de doses diárias para começar a construir o histórico.", - "intakeHistoryEmptyAction": "Abrir doses diárias", - "intakeHistoryColTaken": "Tomada", - "intakeHistoryColScheduled": "Programada", - "intakeHistoryColStatus": "Status", - "intakeHistoryColSource": "Fonte", - "intakeHistoryStatusTaken": "Tomada", - "intakeHistoryStatusSkipped": "Pulada", - "intakeHistorySortByTaken": "Ordenar por horário da dose", - "intakeHistorySortByScheduled": "Ordenar por horário programado", - "intakeHistoryPageInfo": "Página {page} de {total}, {count} entradas", - "intakeHistoryPrev": "Anterior", - "intakeHistoryNext": "Próxima", - "glp1": { - "drug": { - "tirzepatide": { - "name": "Tirzepatida" - }, - "semaglutide": { - "name": "Semaglutida" - }, - "liraglutide": { - "name": "Liraglutida" - }, - "dulaglutide": { - "name": "Dulaglutida" - }, - "exenatide": { - "name": "Exenatida" - } - } - }, - "researchMode": { - "chart": { - "title": "Nível estimado do medicamento", - "axisLabel": "Nível estimado (relativo)", - "emptyState": "Nenhum evento de dose ainda.", - "emptyStateCta": "Registre uma dose para ver o nível estimado tomar forma.", - "estimateNote": "Estimativa educacional a partir da farmacocinética populacional publicada pela EMA. Não é uma medição.", - "unknownDrug": "{name} não está no catálogo de GLP-1 aprovado pela EMA, então o HealthLog não pode renderizar uma curva de PK populacional para ele." - } - }, - "detail": { - "status": { - "active": "Ativo", - "paused": "Pausado", - "ended": "Encerrado" - }, - "cadence": { - "oneShotOn": "Dose única em {date}.", - "oneShotPending": "Dose única pendente.", - "asNeeded": "Conforme necessário, sem plano fixo." - }, - "intake": { - "title": "Histórico de doses", - "importButton": "Importar", - "rowActions": { - "openMenu": "Abrir ações da linha", - "edit": "Editar", - "delete": "Excluir" - }, - "selection": { - "rowToggleLabel": "Selecionar linha" - }, - "bulkDelete": { - "selectionCount": "{count} entradas selecionadas", - "deleteButton": "Excluir seleção", - "cancelButton": "Cancelar", - "confirmTitle": "Excluir as entradas selecionadas?", - "confirmBody": "{count} entradas serão removidas permanentemente. O medicamento em si permanece.", - "confirmAction": "Excluir", - "toast": "Seleção excluída", - "failed": "Não foi possível excluir a seleção." - }, - "edit": { - "dialogTitle": "Editar dose", - "takenAtLabel": "Tomada em", - "scheduledForHint": "Programada: {dateTime}", - "farFromScheduledWarning": "Isso está longe do horário programado. Verifique a data.", - "skippedLabel": "Pulada", - "save": "Salvar", - "cancel": "Cancelar", - "savedToast": "Dose atualizada", - "failed": "Não foi possível atualizar a dose." - }, - "deleteRow": { - "confirmTitle": "Excluir esta dose?", - "confirmBody": "A entrada é removida permanentemente.", - "confirmAction": "Excluir", - "toast": "Dose excluída", - "failed": "Não foi possível excluir a dose." - }, - "viewRecent90": "Últimos 90 dias", - "viewAll": "Histórico completo", - "viewToggleLabel": "Faixa do histórico" - }, - "verlauf": { - "loading": "Carregando histórico…", - "loadError": "Não foi possível carregar o histórico.", - "empty": "Nenhuma dose neste período ainda.", - "summaryEmpty": "Nenhuma dose para pontuar ainda.", - "adherenceLabel": "Adesão", - "adherenceBarLabel": "{onTime} no horário, {late} atrasadas, {missed} perdidas", - "add": "Entrada", - "markTaken": "Tomada", - "markSkipped": "Pulada", - "rowActionsLabel": "Ações para {time}", - "markAsTaken": "Marcar como tomada", - "markAsSkipped": "Marcar como pulada", - "adHocTag": "fora do cronograma", - "takenDetail": "prevista {planned}, tomada {taken}", - "doseTaken": "Dose: {dose}", - "status": { - "taken_on_time": "no horário", - "taken_late": "atrasada", - "skipped": "pulada", - "missed": "perdida", - "upcoming": "prevista", - "ad_hoc": "fora do cronograma" - }, - "addDialog": { - "title": "Adicionar dose", - "description": "Registre uma dose, incluindo uma retrodatada ou fora do cronograma.", - "takenAtLabel": "Tomada em", - "skippedLabel": "Pulada", - "nudgeHint": "Perto do horário {slot}. Ao salvar, perguntamos se deve atribuí-la.", - "cancel": "Cancelar", - "submit": "Salvar" - }, - "nudge": { - "title": "Atribuir a este horário?", - "body": "Esta dose cai logo fora da janela {slot}. Atribua a esse horário ou mantenha-a como uma entrada fora do cronograma?", - "keepAdHoc": "Fora do cronograma", - "pin": "Atribuir" - }, - "pin": { - "action": "Atribuir ao horário {time}", - "release": "Liberar atribuição", - "pinnedTag": "atribuída", - "pinnedToast": "Dose atribuída ao horário", - "unpinnedToast": "Atribuição liberada", - "dueContext": "estava prevista: {time} ({delta})", - "confirmTitle": "Atribuir ao horário {time}?", - "confirmBody": "A dose conta para este horário exatamente como contaria se tivesse sido registrada lá: no horário ou atrasada dependendo de quando foi tomada, então a taxa nunca é favorecida. Você pode liberar a atribuição a qualquer momento.", - "confirmCancel": "Cancelar", - "confirmAction": "Atribuir" - } - }, - "notifications": { - "title": "Notificações", - "switchLabel": "Enviar um lembrete quando esta dose estiver prevista", - "helperOn": "Os lembretes estão ligados.", - "helperOff": "Os lembretes estão desligados.", - "enabledToast": "Lembretes ligados", - "disabledToast": "Lembretes desligados", - "toggleFailed": "Não foi possível alterar a configuração de lembrete.", - "clientManagedChip": "Gerenciado pelo iPhone", - "clientManagedHint": "Seu iPhone gerencia os lembretes deste medicamento." - }, - "settings": { - "title": "Configurações", - "phases": { - "openButton": "Configurar fases", - "requiresCourseWindow": "As fases ficam disponíveis quando uma janela de curso é definida." - }, - "grace": { - "label": "Janela de lembrete", - "appliesToAllNote": "Aplica-se a todos os cronogramas deste medicamento.", - "unit": "minutos", - "saved": "Janela de lembrete salva", - "failed": "Não foi possível salvar a janela de lembrete." - }, - "codes": { - "label": "Códigos clínicos (ATC / RxNorm)", - "note": "Opcional. Usado na exportação do registro de saúde FHIR. Os códigos são tomados exatamente como inseridos, nunca adivinhados.", - "atcLabel": "ATC", - "rxNormLabel": "RxNorm", - "saved": "Códigos clínicos salvos", - "failed": "Não foi possível salvar os códigos clínicos." - } - }, - "zone": { - "title": "Gerenciar e zona de perigo", - "pause": { - "title": "Pausar", - "helper": "Pause os lembretes até ligá-los novamente. O histórico permanece intacto.", - "pausedToast": "Lembretes pausados", - "resumedToast": "Lembretes retomados", - "failed": "Não foi possível alterar o estado de pausa." - }, - "end": { - "title": "Encerrar medicamento", - "helper": "Pare os lembretes e marque o medicamento como encerrado. O histórico permanece visível.", - "button": "Encerrar", - "dialogTitle": "Encerrar {name}? Os lembretes param, o histórico permanece visível", - "dialogBody": "Sem mais lembretes. As entradas antigas permanecem na linha do tempo.", - "toast": "Medicamento encerrado", - "failed": "Não foi possível encerrar o medicamento." - }, - "purge": { - "title": "Excluir histórico", - "helper": "{count} eventos de dose estão armazenados para este medicamento.", - "button": "Excluir histórico", - "dialogTitle": "Realmente excluir o histórico?", - "dialogBody": "As {count} doses serão removidas permanentemente. O medicamento em si permanece.", - "toast": "Histórico excluído", - "failed": "Não foi possível excluir o histórico." - }, - "delete": { - "title": "Excluir medicamento", - "helper": "Remove o medicamento e todos os registros relacionados.", - "button": "Excluir", - "dialogTitle": "Excluir {name}?", - "dialogBody": "O medicamento, seus cronogramas, histórico de doses, tokens de API, configuração de fases e lembretes serão removidos permanentemente.", - "toast": "Medicamento excluído", - "failed": "Não foi possível excluir o medicamento." - } - }, - "phases": { - "modeLabel": "Modo {phase}", - "saveFailed": "Não foi possível salvar as fases de lembrete." - }, - "api": { - "caption": "Endpoint para \"{name}\"", - "copyUrl": "Copiar URL", - "urlCopied": "URL copiada", - "mintToken": "Gerar token", - "mintAnotherToken": "Gerar outro token", - "mintFailed": "Não foi possível gerar um token.", - "copyFailed": "Não foi possível copiar.", - "tokenCopied": "Token copiado", - "copyToken": "Copiar token", - "mintedHint": "Copie este token agora. Ele é exibido apenas uma vez." - }, - "advanced": { - "dataPortability": { - "import": { - "title": "Importar doses", - "helper": "Carregue doses passadas de um arquivo JSON ou JSON colado.", - "button": "Importar JSON" - }, - "export": { - "title": "Exportar medicamento", - "helper": "Baixe este medicamento como um arquivo CSV.", - "includeIntake": "Incluir histórico de doses", - "button": "Exportar CSV" - } - } - }, - "header": { - "historyLabel": "Ver histórico de doses" - }, - "history": { - "plannedSuffix": "prevista" - }, - "tabs": { - "uebersicht": "Visão geral", - "zeitplan": "Cronograma", - "bestand": "Estoque", - "verlauf": "Histórico", - "injektion": "Injeção", - "erweitert": "Avançado", - "wirkung": "Efeito" - }, - "shell": { - "loadFailed": "Este medicamento não pôde ser carregado.", - "tablistLabel": "Seções de detalhes do medicamento" - }, - "uebersicht": { - "statusTitle": "Status", - "nextDoseLabel": "Próxima dose", - "nextDoseNone": "Nenhuma dose prevista.", - "nextDoseAsNeeded": "Conforme necessário, sem dose planejada.", - "nextDoseNotTracked": "Não acompanhado, mantido como registro.", - "pausedHint": "Pausado: sem lembretes.", - "reminderLabel": "Lembrete", - "reminderOn": "Ligado", - "reminderOff": "Desligado", - "supplyLabel": "Estoque", - "supplyRunway": "Dura cerca de {days} dias a mais", - "jumpToZeitplan": "Abrir cronograma", - "jumpToVerlauf": "Abrir histórico", - "jumpToBestand": "Abrir estoque", - "complianceTitle": "Adesão", - "complianceEmpty": "Nenhum dado de adesão ainda." - }, - "bestand": { - "title": "Estoque", - "summary": "{remaining} de {total} doses restantes", - "itemsTitle": "Embalagens e recipientes", - "doses": "{remaining} / {total} doses", - "unknown": "Desconhecido", - "state": { - "ACTIVE": "Não aberta", - "IN_USE": "Em uso", - "EXPIRED": "Expirada", - "USED_UP": "Esgotada" - }, - "empty": "Nenhum estoque registrado.", - "emptyHelper": "Registre uma embalagem ou recipiente para acompanhar o estoque restante e a duração.", - "emptyCta": "Registrar uma embalagem", - "addButton": "Registrar", - "lowStockLinkOn": "Notificação de estoque baixo: abaixo de {days} dias", - "lowStockLinkOff": "Notificação de estoque baixo: desligada", - "addTitle": "Registrar uma embalagem ou recipiente", - "addDescription": "Registre um novo estoque com sua contagem de unidades; a data de validade é opcional.", - "addQuantityLabel": "Quantidade (unidades)", - "addQuantityHelper": "1–1000 unidades por embalagem ou recipiente.", - "addExpiryLabel": "Data de validade (opcional)", - "addSubmit": "Registrar", - "addSuccess": "Estoque registrado", - "addFailed": "O estoque não pôde ser registrado.", - "adjustButton": "Ajustar", - "adjustTitle": "Corrigir recipiente", - "adjustDescription": "Defina as unidades restantes e corrija as datas impressas ou registradas para este recipiente. 0 unidades marca como esgotado.", - "adjustQuantityLabel": "Unidades restantes", - "adjustHelper": "Capacidade: {total} unidades.", - "adjustSubmit": "Salvar", - "adjustSuccess": "Estoque atualizado", - "adjustFailed": "O estoque não pôde ser atualizado.", - "deleteTitle": "Excluir recipiente?", - "deleteDescription": "Remove permanentemente esta embalagem ou recipiente do estoque. As doses registradas permanecem inalteradas.", - "deleteSuccess": "Entrada de estoque excluída", - "deleteFailed": "A entrada de estoque não pôde ser excluída.", - "containerTypeLabel": "Tipo de recipiente", - "containerType": { - "PEN": "Caneta", - "AMPOULE": "Ampola", - "BLISTER": "Cartela de comprimidos", - "INHALER": "Inalador", - "BOTTLE": "Frasco", - "OTHER": "Outro" - }, - "unitsDetail": "{remaining} / {total} unidades", - "quantityModeDoses": "Doses", - "quantityModeUnits": "Unidades", - "quantityInUnits": "= {units} unidades", - "quantityInDoses": "≈ {doses} doses", - "quantityUnderOneDose": "< 1 dose", - "expiredSuffix": "+ {units} unidades expiradas", - "packagingTitle": "Embalagem e dose", - "packagingUnitsPerDose": "1 dose = {units} unidades", - "packagingDefaultPack": "Tamanho padrão da embalagem: {units} unidades", - "packagingNoDefaultPack": "Nenhum tamanho padrão de embalagem definido", - "packagingEdit": "Editar", - "packagingDescription": "Defina quantas unidades uma dose consome e quão grande uma nova embalagem costuma ser, ex.: após uma troca de fabricante com uma cartela de tamanho diferente.", - "packagingUnitsPerDoseLabel": "Unidades por dose", - "packagingUnitsPerDoseHelper": "Ex.: dois comprimidos de 2 mg para uma dose de 4 mg, ou 1,5 para um e meio (acima de 0, até 100). As doses já registradas permanecem inalteradas.", - "packagingDefaultPackLabel": "Tamanho padrão da embalagem (unidades)", - "packagingDefaultPackHelper": "Pré-preenche a quantidade ao registrar novas embalagens (1–1000). Deixe em branco se nenhum se aplica.", - "packagingSuccess": "Detalhes de embalagem salvos", - "packagingFailed": "Falha ao salvar", - "addManufacturerLabel": "Fabricante", - "addDoseStrengthLabel": "Força", - "addDoseStrengthHint": "Como impresso no recipiente, ex.: 5 mg/0,5 ml.", - "openedOn": "Aberta em {date}", - "expiresOn": "Expira em {date}", - "summaryAllExpired": "Nenhum estoque utilizável: {units} unidades marcadas como expiradas", - "editExpiryLabel": "Data de validade impressa", - "editExpiryHelper": "A data impressa na caixa. Deixe em branco se nenhuma estiver registrada.", - "editOpenedLabel": "Aberta em", - "editOpenedHelper": "Deixe em branco se o recipiente ainda estiver selado.", - "editOpenedHelperClock": "Uma caneta ou ampola expira 30 dias depois de aberta. Deixe em branco se ainda estiver selada." - }, - "erweitert": { - "group": { - "lifecycle": "Ciclo de vida", - "externalApi": "API externa", - "data": "Dados", - "danger": "Zona de perigo" - }, - "editor": { - "title": "Editar medicamento no editor", - "helper": "Altere nome, classe de tratamento, frequência e cronogramas no editor passo a passo.", - "button": "Abrir editor" - } - }, - "zeitplan": { - "title": "Cronograma", - "timesTitle": "Horários das doses", - "timesNote": "Ajuste o horário e a janela de pontualidade de cada dose. A frequência (diária, semanal…) é editada no editor em Avançado.", - "scheduleLabel": "Cronograma {index}", - "fullEditNote": "Frequência, classe de tratamento e janela do curso são editadas no editor em Avançado → Ciclo de vida.", - "graceEcho": "Janela de lembrete: {minutes} minutos", - "reminderTitle": "Lembrete", - "manageChannels": "Gerenciar canais de notificação", - "history": { - "title": "Histórico do plano", - "currentSince": "Plano atual desde {date}", - "noTimes": "Sem horários fixos", - "manualChip": "Adicionado manualmente", - "showErasOne": "Mostrar 1 era anterior", - "showErasOther": "Mostrar {count} eras anteriores", - "hideEras": "Ocultar eras anteriores", - "addEra": "Adicionar era anterior", - "addEraTitle": "Adicionar era anterior", - "addEraDescription": "Registre os horários em que este medicamento costumava ser tomado, por exemplo antes de você ajustá-lo aqui.", - "editAria": "Editar era", - "editEraTitle": "Editar era", - "editEraDescription": "Ajuste os horários das doses e a faixa de datas desta era.", - "archivedEditHint": "Esta era foi registrada automaticamente. Sua alteração corrige o histórico registrado; o original é mantido internamente como registro.", - "updatedToast": "Era atualizada", - "updateError": "Não foi possível atualizar a era. Ela não deve sobrepor outras eras e deve terminar antes do plano atual.", - "timesLabel": "Horários das doses", - "fromLabel": "De", - "untilLabel": "Até", - "untilHint": "\"Até\" é o dia em que o plano seguinte assumiu (exclusivo).", - "validationTimes": "Adicione pelo menos um horário.", - "validationRangeMissing": "Defina as datas de início e fim.", - "validationRangeOrder": "A data de início deve ser anterior à data de fim.", - "cancel": "Cancelar", - "submit": "Salvar era", - "createdToast": "Era anterior salva", - "createError": "Não foi possível salvar a era. Ela não deve sobrepor eras existentes e deve terminar antes do plano atual.", - "deletedToast": "Era excluída", - "deleteError": "Não foi possível excluir a era", - "deleteAria": "Excluir era", - "deleteConfirmTitle": "Excluir era?", - "deleteConfirmBody": "O histórico e a adesão deste período serão calculados novamente contra o plano atual.", - "deleteConfirmAction": "Excluir", - "loadError": "Não foi possível carregar o histórico do plano" - }, - "save": "Salvar cronograma", - "saved": "Cronograma salvo", - "failed": "Não foi possível salvar o cronograma", - "window": { - "intro": "Para cada dose, defina quando uma dose ainda conta como no horário: um horário preciso (±1h) ou sua própria janela, como 07:00–09:00.", - "explicitToggle": "Janela personalizada", - "startLabel": "Início da janela", - "endLabel": "Fim da janela", - "onTimeBand": "No horário: {start}–{end}", - "lateUntil": "atrasada até {time}", - "lateDays": "atrasada até {days} dias depois", - "orderError": "O início deve ser antes do fim.", - "noTimes": "Nenhum horário de dose definido ainda." - } - } - }, - "logInjectionSiteTitle": "Registrar local de injeção", - "logInjectionSiteDescription": "Onde você injetou {name}? Opcional: você pode pular isso.", - "logInjectionSiteSkip": "Pular", - "logInjectionSiteConfirm": "Salvar local", - "logInjectionSiteNoneAvailable": "Nenhum local de injeção disponível. Todos os locais estão excluídos nas suas configurações.", - "logInjectionSiteSaveFailed": "Não foi possível salvar o local de injeção. Tente novamente.", - "perSlotUnits": "{units} por dose", - "trackInjectionSitesToggle": "Acompanhar locais de injeção", - "trackInjectionSitesHint": "Depois que uma dose é tomada, pergunte qual local foi usado e sugira a próxima rotação.", - "allowedSitesLabel": "Locais permitidos", - "allowedSitesHint": "Deixe todos selecionados para nenhuma restrição. Locais que você excluiu globalmente nunca são oferecidos.", - "viewToggleLabel": "Visualização", - "viewToggleHint": "Escolha se seus medicamentos aparecem como cartões ou como uma tabela.", - "viewCards": "Visualização em cartões", - "viewTable": "Visualização em tabela", - "viewSaveFailed": "A visualização não pôde ser salva", - "tableCaption": "Medicamentos em uma tabela com status, próxima dose, adesão e estoque", - "tableColName": "Nome", - "tableColStatus": "Status", - "tableColNextDose": "Próxima dose", - "tableColCompliance": "Adesão", - "tableColStock": "Estoque", - "tableColActions": "Ações", - "tableSortBy": "Ordenar por {column}", - "tableComplianceDays": "{days} d", - "tableStockDoseOne": "1 dose", - "tableStockDoses": "{count} doses", - "tableStockRunway": "≈ {days} dias restantes", - "cardLowStockRunway": "Estoque: ≈ {days} dias", - "takeActionFor": "Tomar {name}", - "skipActionFor": "Pular {name}", - "reorderDescription": "Defina a ordem dos seus medicamentos tanto na visualização em cartões quanto na tabela.", - "reorderSaved": "Ordem salva", - "reorderSaveFailed": "A ordem não pôde ser salva", - "customize": "Personalizar medicamentos", - "efficacy": { - "title": "Efeito", - "intro": "Como as medições que este medicamento deve influenciar se moveram por volta do momento em que você começou. Mostra o que se alinha no tempo (uma associação, não uma causa) e nunca conselho sobre seu tratamento ou dose.", - "notEligible": "Não há resultado para relacionar este medicamento.", - "startFallback": "Nenhuma data de início definida, então a comparação usa sua primeira leitura registrada como ponto de referência.", - "noStart": "Defina uma data de início para este medicamento para comparar as leituras antes e depois de começar.", - "disclaimer": "Apenas associação: estes números mostram o que mudou no mesmo período, não que o medicamento causou a mudança. Discuta qualquer decisão sobre seu tratamento com seu médico.", - "primaryBadge": "Alvo principal", - "noSeries": "Nenhuma leitura registrada para este alvo ainda.", - "startMarker": "Início", - "adherenceLane": "Adesão", - "typicalRange": "Faixa típica", - "levelShift": "Uma mudança de nível foi detectada por volta de {date}.", - "plateau": { - "title": "Platô de peso na dose atual", - "evidence": "O peso mudou {delta} {unit} nos últimos {window} dias ({readings} leituras), {days} dias em {dose}." - }, - "retarget": { - "label": "Não é a medição certa?", - "placeholder": "Acompanhar contra…", - "apply": "Aplicar", - "reset": "Redefinir para padrão", - "error": "Não foi possível salvar essa alteração. Tente novamente." - }, - "beforeAfter": { - "summary": "Ø {before} antes → Ø {after} desde, uma mudança de {delta}.", - "counts": "Baseado em {beforeCount} leituras antes e {afterCount} desde.", - "needBefore": "Leituras insuficientes antes do início ainda. Cerca de {weeks} semanas são necessárias antes e depois para comparar.", - "needAfter": "Leituras insuficientes desde o início ainda. Cerca de {weeks} semanas são necessárias antes e depois para comparar.", - "needStart": "Defina uma data de início para comparar as leituras antes e depois de começar.", - "needData": "Leituras insuficientes ainda. Cerca de {weeks} semanas são necessárias antes e depois do início para comparar." - }, - "insights": { - "title": "Efeito do medicamento", - "subtitle": "O que se alinha com as medições que seus medicamentos visam: apenas associação, nunca um veredito.", - "link": "Abrir a visualização de efeito", - "empty": "Dados insuficientes ainda para relacionar seus medicamentos às medições alvo." - }, - "scaleAbsolute": "Absoluto", - "scalePercentSinceStart": "% desde o início", - "scaleToggleLabel": "Escala do gráfico" - }, - "import": { - "resultSuccess": "{imported} doses importadas", - "resultPartial": "{imported} importadas, {skipped} puladas.", - "resultNothing": "Nada foi importado: todas as {skipped} entradas foram puladas.", - "resultAlreadyRecorded": "{recorded} doses já estão registradas. Nada novo foi adicionado.", - "resultEmpty": "Esse arquivo não continha doses.", - "showSkipDetails": "Mostrar linhas puladas ({count})", - "skipDetailLine": "Linha {line}: {reason}", - "skipDetailsOmitted": "{count} linhas puladas a mais não são exibidas.", - "skipGroupOne": "{count} entrada pulada: {reason}", - "skipGroupFew": "{count} entradas puladas: {reason}", - "skipGroupOther": "{count} entradas puladas: {reason}", - "reasonDuplicateInFile": "outra entrada no mesmo arquivo tem a mesma data e hora", - "reasonAlreadyRecorded": "uma dose já está registrada para essa data e hora", - "reasonUnknown": "motivo não registrado", - "reasonMedicationNotFound": "nenhum medicamento registrado corresponde ao nome no arquivo", - "reasonMedicationAmbiguous": "o nome no arquivo corresponde a mais de um medicamento registrado", - "reasonMedicationIsMirrored": "o medicamento é uma cópia somente leitura da lista de outro aplicativo", - "reasonStatusUnknown": "o status no arquivo não é um que o formato define", - "reasonMissingTimestamp": "a linha não indica horário", - "reasonMissingOffset": "o horário não traz offset UTC, então o instante é desconhecido", - "reasonUnreadableTimestamp": "o horário não está no formato que a exportação documenta", - "reasonImplausibleTimestamp": "o horário não indica um instante real ou está no futuro", - "reasonMissingMedication": "a linha não indica medicamento", - "reasonUnreadableDosage": "a dosagem não é um número", - "reasonUnreadableRow": "a linha tem menos colunas que o cabeçalho", - "reasonStatusNoDoseInformation": "o arquivo não registra nada sobre essa dose; ninguém respondeu e nada foi registrado", - "reasonStatusReminderEvent": "a linha trata de um lembrete adiado, o que não diz nada sobre a dose", - "reasonStatusNotificationNotSent": "a linha registra que nenhuma notificação foi enviada, o que se refere ao aplicativo, não à dose" - }, - "unitsPerDoseField": { - "other": "Outro…", - "inputLabel": "Unidades por dose, outro valor", - "placeholder": "ex.: 1,5 ou 1 1/2", - "invalid": "Insira um número acima de 0 e até 100, por exemplo 1,5 ou 1 1/2.", - "preview": "Conta como {value} por dose" - }, - "category": { - "custom": { - "add": "Nova categoria", - "label": "Nome da categoria", - "labelPlaceholder": "ex.: Kit de viagem", - "create": "Adicionar", - "limitReached": "Você atingiu o limite de 20 categorias próprias.", - "saveFailed": "Isso não salvou. Tente novamente.", - "bpGateNote": "Os insights de pressão arterial contam apenas medicamentos na categoria integrada Pressão arterial.", - "manage": "Gerenciar categorias", - "manageDescription": "Suas categorias próprias, exibidas ao lado das integradas.", - "hidden": "Ocultas", - "count": "{count} medicamentos", - "rename": "Renomear", - "hide": "Ocultar do seletor", - "show": "Mostrar no seletor", - "delete": "Excluir", - "deleteTitle": "Excluir esta categoria?", - "deleteBody": "{count} medicamentos arquivados nela mudam para Outro. Os medicamentos em si permanecem.", - "movedToOther": "Categoria excluída. {count} medicamentos mudaram para Outro." - }, - "filter": { - "label": "Categoria", - "all": "Todas as categorias" - } - }, - "course": { - "endedOn": "Último curso terminou em {date}", - "nth": "Curso {n}", - "startNew": "Iniciar um novo curso", - "editTitle": "Editar curso", - "startsOn": "Primeiro dia", - "endsOn": "Último dia (opcional)", - "note": "Nota (opcional)", - "notePlaceholder": "ex.: a gripe em março", - "title": "Cursos", - "helper": "Quando você tomou. As doses são esperadas apenas dentro de um curso.", - "none": "Tomado continuamente, sem cursos separados.", - "range": "{start} a {end}", - "since": "Desde {start}", - "meta": "Curso {n}, {status}, {taken} doses tomadas", - "status": { - "current": "em andamento", - "upcoming": "previsto", - "ended": "encerrado" - }, - "delete": "Excluir curso", - "deleteTitle": "Excluir este curso?", - "deleteBody": "As datas vão; as doses que você registrou permanecem no histórico.", - "deleteLastConfirm": "Este é o único curso. Sem ele, o medicamento conta como tomado continuamente desde que você o adicionou. As doses registradas permanecem.", - "error": { - "overlap": "Este curso compartilha dias com outro.", - "currentOpen": "Encerre o curso em andamento antes de adicionar um depois dele.", - "oneShot": "Um medicamento de dose única tem um único curso.", - "invalidRange": "O último dia não pode ser antes do primeiro.", - "generic": "Isso não salvou. Tente novamente." - } - }, - "composition": { - "title": "Composição", - "empty": "Adicione o que um comprimido ou cápsula contém para contar cada dose tomada nos seus micronutrientes.", - "perUnitNote": "Por comprimido ou cápsula; cada dose tomada adiciona isso aos micronutrientes do dia.", - "add": "Adicionar", - "edit": "Editar", - "rowHelper": "O que um comprimido ou cápsula contém, para seus micronutrientes.", - "sheetTitle": "O que uma unidade contém", - "sheetDescription": "Insira as quantidades por comprimido ou cápsula conforme o rótulo as indica.", - "nutrientLabel": "Nutriente", - "amountLabel": "Quantidade", - "unitLabel": "Unidade", - "choose": "Escolha um nutriente", - "addRow": "Adicionar um nutriente", - "removeRow": "Remover {name}", - "editorEmpty": "Nenhum nutriente ainda. Adicione um por linha do rótulo.", - "labelPhoto": "Ler de uma foto do rótulo", - "labelReading": "Lendo o rótulo…", - "labelWaiting": "Ainda aguardando o worker em segundo plano pegar isso.", - "labelReviewNote": "Verifique cada linha contra o rótulo antes de salvar.", - "lowConfidence": "Esta linha foi difícil de ler; verifique-a contra o rótulo.", - "unmatchedTitle": "Linhas sem nutriente correspondente, para inserir manualmente se necessário:", - "servingNote": "O rótulo indica: {note}. As quantidades são exibidas por unidade única.", - "labelError": "O rótulo não pôde ser lido", - "saveError": "A composição não pôde ser salva", - "catalogError": "A lista de nutrientes não pôde ser carregada", - "invalidRow": "Escolha um nutriente e insira uma quantidade acima de zero em cada linha." - } - }, - "settings": { - "oauthCallbackPreflightItem": "{provider}: o endereço de callback {configuredOrigin} difere do endereço deste aplicativo {currentOrigin}.", - "shell": { - "sectionsNav": "Seções de configurações", - "groups": { - "account": "Conta", - "yourData": "Seus dados", - "display": "Exibição", - "healthProfile": "Perfil de saúde", - "ai": "IA", - "connectivity": "Conectividade", - "system": "Sistema" - } - }, - "sharedRecord": { - "managedSettings": { - "saveError": "Não foi possível salvar. Tente novamente.", - "validationError": "Verifique suas entradas.", - "profile": { - "title": "Perfil", - "displayName": "Nome de exibição", - "height": "Altura (cm)", - "dateOfBirth": "Data de nascimento", - "gender": "Gênero", - "notSpecified": "Não especificado", - "male": "Masculino", - "female": "Feminino", - "other": "Outro", - "locale": "Localidade", - "systemDefault": "Padrão do sistema", - "timezone": "Fuso horário", - "units": "Unidades", - "metric": "Métrico", - "imperial": "Imperial", - "timeFormat": "Formato de hora", - "automatic": "Automático", - "hour12": "12 horas", - "hour24": "24 horas", - "dateFormat": "Formato de data", - "dateDmy": "Dia / mês / ano", - "dateMdy": "Mês / dia / ano", - "dateYmd": "Ano / mês / dia" - }, - "modules": { - "title": "Módulos" - }, - "notifications": { - "title": "Notificações", - "moodReminder": "Ativar lembrete de humor", - "reminderHour": "Horário do lembrete de humor", - "lowStockRunwayDays": "Dias de estoque baixo", - "reorderLeadDays": "Dias de antecedência para repedido" - }, - "thresholds": { - "title": "Metas", - "metric": "Métrica", - "minimum": "Mínimo", - "maximum": "Máximo" - }, - "coach": { - "title": "Coach", - "disable": "Desativar Coach", - "tone": "Tom", - "warm": "Acolhedor", - "neutral": "Neutro", - "concise": "Conciso", - "verbosity": "Verbosidade", - "brief": "Breve", - "default": "Padrão", - "detailed": "Detalhado", - "excludedMetrics": "Métricas excluídas", - "dataClusters": "Grupos de dados", - "customClusters": "Usar uma seleção personalizada de grupos", - "metrics": { - "bp": "Pressão arterial", - "weight": "Peso", - "pulse": "Pulso", - "mood": "Humor", - "compliance": "Adesão a medicamentos", - "hrv": "Variabilidade da frequência cardíaca", - "sleep": "Sono", - "restingHr": "Frequência cardíaca em repouso", - "steps": "Passos", - "medications": "Medicamentos", - "anthropometrics": "Medidas corporais" - }, - "clusters": { - "cardio": "Saúde cardiovascular", - "body": "Composição corporal", - "activity": "Atividade", - "workouts": "Treinos", - "sleep": "Sono", - "mood": "Humor", - "glucose": "Glicose", - "medication": "Medicamento", - "mobility": "Mobilidade", - "environment": "Ambiente" - } - }, - "insights": { - "title": "Insights", - "sections": "Seções de visão geral", - "tiles": "Blocos de navegação", - "order": "Ordem", - "unknownItem": "Insight indisponível", - "sectionLabels": { - "wellnessScores": "Pontuações de bem-estar", - "dailyBriefing": "Resumo diário", - "vitals": "Sinais vitais", - "trends": "Tendências", - "periodReview": "Revisão do período", - "cycleSummary": "Resumo do ciclo", - "signals": "Sinais", - "rhythmEvents": "Eventos de ritmo", - "healthStatus": "Estado de saúde", - "breathing": "Respiração", - "labsChanges": "Alterações em exames", - "ecg": "ECG" - } - } - }, - "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.", - "integrationStatusDocs": "Como funciona o compartilhamento" - }, - "sections": { - "account": { - "title": "Conta", - "subtitle": "Seu perfil, identidade e dados de login." - }, - "integrations": { - "title": "Integrações", - "subtitle": "Conecte e gerencie suas fontes de dados e dispositivos.", - "connectionsHeading": "Conexões", - "channelsHeading": "Canais de entrega", - "channelsDescription": "Onde lembretes e alertas são entregues.", - "matrixLink": "Notificações por canal" - }, - "notifications": { - "title": "Notificações", - "subtitle": "Escolha quais lembretes você recebe e onde eles são entregues.", - "remindersHeading": "Lembretes", - "matrixLink": "Notificações por canal", - "channelsLink": "Canais de entrega", - "displayHeading": "No seu celular" - }, - "layout": { - "title": "Layout", - "backToHub": "Voltar ao Layout", - "dashboard": { - "title": "Painel", - "description": "Layout e ordem dos blocos." - }, - "insights": { - "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.", - "medications": { - "title": "Medicamentos", - "description": "Visualização em lista e ordem manual." - }, - "labs": { - "title": "Exames", - "description": "Visualização, ordenação e ordem manual." - }, - "illness": { - "title": "Diário de doenças", - "description": "Visualização em lista e ordem dos episódios." - }, - "vorsorge": { - "title": "Check-ups", - "description": "Visualização em lista e ordem dos lembretes." - }, - "mood": { - "title": "Tags de humor", - "description": "Grupos, tags e tags arquivadas para o seletor de humor." - }, - "documents": { - "title": "Documentos", - "description": "Visualização e disposição por mês." - } - }, - "dashboard": { - "subtitle": "Organize os blocos do seu painel." - }, - "thresholds": { - "title": "Metas", - "subtitle": "Defina suas faixas-alvo pessoais por métrica." - }, - "sources": { - "title": "Prioridade de fontes", - "integrationsHint": "Conecte ou desconecte fontes de dados na página de Integrações.", - "integrationsHintLink": "Abrir integrações", - "cardTitle": "Classificação por métrica", - "help": "Quando várias fontes entregam o mesmo valor no mesmo dia, a fonte mais bem classificada conta como canônica.", - "resetDefaults": "Redefinir para padrões", - "resetDefaultsTitle": "Redefinir a ordem das fontes?", - "resetDefaultsBody": "Toda hierarquia que você organizou volta à ordem padrão, para todas as métricas e tipos de dispositivo de uma vez. Isso é salvo imediatamente e não pode ser desfeito.", - "resetDefaultsConfirm": "Redefinir ordem", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "saveSuccess": "Prioridade de fontes salva", - "saveError": "Falha ao salvar a prioridade de fontes.", - "resetSuccess": "Prioridade de fontes redefinida para padrões", - "perMetricToggle": "Substituições por métrica ({count})", - "perMetricHelp": "Métricas que você personalizou fora da hierarquia padrão. Use esta lista para reverter qualquer métrica individual ao padrão fixo sem afetar as demais.", - "perMetricEmpty": "Nenhuma substituição por métrica definida. Todas as métricas usam a hierarquia global acima.", - "resetMetric": "Redefinir", - "deviceTypeToggle": "Prioridade por tipo de dispositivo ({count})", - "deviceTypeHelp": "Dentro de uma fonte, qual dispositivo prevalece. Quando um Apple Watch e um iPhone registram passos, o tipo de dispositivo mais bem classificado conta como a leitura canônica.", - "deviceTypeDefault": "Hierarquia padrão por tipo de dispositivo", - "resetDeviceTypes": "Redefinir tipos de dispositivo", - "metrics": { - "steps": "Passos", - "activeEnergy": "Energia ativa", - "walkingRunningDistance": "Distância caminhada + corrida", - "flightsClimbed": "Andares subidos", - "sleep": "Sono", - "weight": "Peso", - "bloodPressure": "Pressão arterial", - "pulse": "Pulso", - "bodyFat": "Gordura corporal", - "bodyTemperature": "Temperatura corporal", - "spo2": "Saturação de oxigênio", - "hrv": "Variabilidade da frequência cardíaca", - "restingHeartRate": "Frequência cardíaca em repouso", - "vo2Max": "VO2 máx", - "skinTemperature": "Temperatura da pele", - "respiratoryRate": "Frequência respiratória", - "recovery": "Recuperação", - "stress": "Estresse", - "sleepDebt": "Déficit de sono", - "hrvRmssd": "VFC (RMSSD)" - }, - "sourceLabels": { - "WITHINGS": "Withings", - "APPLE_HEALTH": "Apple Health", - "MANUAL": "Entrada manual", - "IMPORT": "Importação", - "WHOOP": "WHOOP", - "FITBIT": "Fitbit", - "COMPUTED": "Calculado", - "NIGHTSCOUT": "Nightscout", - "POLAR": "Polar", - "OURA": "Oura", - "TELEGRAM": "Telegram", - "MCP": "MCP", - "GOOGLE_HEALTH": "Google Health", - "STRAVA": "Strava", - "EXTERNAL": "Dispositivo externo", - "HEALTH_CONNECT": "Health Connect" - }, - "deviceLabels": { - "watch": "Relógio", - "band": "Pulseira", - "ring": "Anel", - "phone": "Celular", - "scale": "Balança", - "other": "Outro", - "unknown": "Desconhecido" - }, - "subtitle": "Decida qual fonte prevalece quando duas informam a mesma métrica.", - "nutrients": { - "title": "Ingestão de nutrientes sincronizada", - "description": "Totais diários nos últimos {days} dias: o que o Apple Health sincronizou mais os suplementos que você tomou.", - "empty": "Nenhum dado de nutrientes foi sincronizado ainda.", - "latest": "{amount} {unit} em {date}", - "daysWithData": "{count} de {days} dias", - "moduleHint": "A sincronização é controlada pelo módulo Ingestão de nutrientes.", - "moduleHintLink": "Gerenciar módulos", - "detail": "Somente leitura: o aplicativo de origem é o dono dos números." - }, - "helpDetail": "As demais permanecem armazenadas para fins de auditoria. Apenas as fontes que você conectou ou das quais há dados são listadas.", - "noneInUse": "Nenhuma fonte para classificar ainda. Conecte uma em Integrações ou registre um valor." - }, - "ai": { - "title": "Provedor de IA", - "subtitle": "Escolha seu provedor de IA e use sua própria chave." - }, - "api": { - "title": "API e tokens", - "subtitle": "Gerencie endpoints de API e tokens de acesso." - }, - "advanced": { - "title": "Avançado", - "subtitle": "Redefinição de dados e exclusão da conta." - }, - "export": { - "title": "Exportar e importar", - "otherOptionsHeading": "Outras opções de exportação", - "downloadFailed": "Não foi possível baixar a exportação. Tente novamente.", - "actions": { - "download": "Baixar" - }, - "filters": { - "since": "De", - "until": "Até" - }, - "cards": { - "measurementsCsv": { - "title": "Medições", - "description": "Peso, pressão arterial, pulso, glicose e todas as outras medições em valores separados por vírgula." - }, - "medicationsCsv": { - "title": "Medicamentos", - "description": "Sua lista de medicamentos com dosagem, cronogramas e (opcionalmente) o histórico completo de doses.", - "includeIntake": "Incluir histórico de doses" - }, - "moodCsv": { - "title": "Humor", - "description": "Registros diários de humor com pontuação, tags e horários." - }, - "fullBackup": { - "title": "Backup completo", - "description": "Todo o seu registro em um único arquivo JSON.", - "scopeNote": "Os metadados dos documentos e o resumo gerado por IA, se houver, são incluídos como texto simples; os arquivos originais dos documentos e os dados de GPS/amostras dos treinos não. Baixe esses itens separadamente no cofre ou na exportação de treinos.", - "encryptToggle": "Criptografar com uma frase-senha", - "passphrasePlaceholder": "Frase-senha (mín. 12 caracteres)", - "passphraseHelp": "Deriva a chave do arquivo com Argon2id e a sela com AES-256-GCM. Salve o arquivo com a extensão .hlx.", - "noRecoveryWarning": "Não há recuperação. Se você perder esta frase-senha, o arquivo não poderá ser aberto. Guarde-a em um lugar seguro.", - "detail": "Mesmo formato do backup automático semanal. Alguns tipos de registro ainda não são incluídos; o manifesto do arquivo indica o que está nele.", - "contents": "Suas medições, medicamentos, humor, ciclo, exames, episódios de doença, alergias, histórico familiar, nutrientes, treinos, perfil de saúde e métricas personalizadas em um único arquivo JSON." - } - }, - "import": { - "heading": "Importar", - "description": "Traga dados para o HealthLog de uma exportação do Apple Health, um arquivo JSON ou um CSV. As importações pulam linhas que já existem, então executar novamente é seguro.", - "charCount": "{used} / {max} caracteres", - "appleHealth": { - "title": "Apple Health", - "description": "Envie o export.zip do aplicativo Saúde no iPhone (Perfil → Exportar Todos os Dados de Saúde).", - "dropLabel": "Arraste o export.zip para cá", - "dropHint": "ou clique para escolher um arquivo", - "fileInputLabel": "Escolha um arquivo export.zip do Apple Health", - "choose": "Escolher arquivo", - "idempotencyNote": "Reenviar o mesmo arquivo o mescla e não cria duplicatas. Arquivos grandes são processados em segundo plano.", - "uploading": "Enviando…", - "uploadFailed": "Falha no envio. Tente novamente.", - "rateLimited": "Envios demais. Espere um momento e tente novamente.", - "tooLarge": "Esse arquivo é grande demais (limite de 1,5 GB).", - "failed": "A importação falhou.", - "failureInterrupted": "A importação foi interrompida antes de terminar, geralmente por uma reinicialização do servidor ou por falta de memória. Seus dados estão seguros; envie a exportação novamente para tentar de novo.", - "failureInsufficientMemory": "O limite de memória do servidor é baixo demais para um arquivo desse tamanho. Peça a quem administra o servidor para aumentar o limite de heap do Node.js (NODE_OPTIONS=--max-old-space-size) e envie a exportação novamente.", - "rowsImported": "{count} linhas importadas até agora", - "doneSummary": "Concluído: {imported} de {read} registros importados, {skipped} registros clínicos pulados.", - "doneNothing": "Nada foi importado desse arquivo: 0 de {read} registros foram processados.", - "writtenByHealthLogOne": "{count} registro que o próprio HealthLog gravou no Apple Health foi deixado de fora, porque já está nos seus dados.", - "writtenByHealthLogOther": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", - "writtenByHealthLogFew": "{count} registros que o próprio HealthLog gravou no Apple Health foram deixados de fora, porque já estão nos seus dados.", - "ecgResult": "ECGs: {discovered} descobertos, {imported} importados, {updated} atualizados, {skipped} pulados, {failed} falharam. Falhas de ECG não descartam registros compatíveis importados do export.xml.", - "estimateWarning": "Os totais acumulados de {count} dia(s) foram estimados a partir da maior fonte de exportação. As estatísticas nativas do Apple Health continuam sendo a referência.", - "phase": { - "queued": "Na fila…", - "unpacking": "Descompactando o arquivo…", - "parsing": "Lendo a exportação…", - "upserting": "Importando registros…" - }, - "skipUnsupported": "{count} amostras puladas: tipos de dados que o HealthLog não importa.", - "skipRefused": "{count} amostras não puderam ser gravadas (ilegíveis, fora da faixa ou falha ao salvar).", - "skipBreakdown": "Mostrar detalhamento ({count} tipos)", - "skipBreakdownMore": "+ {count} tipos a mais", - "cycleSummary": "{samples} amostras de ciclo mescladas em {days} registros diários.", - "cycleModuleOff": "{count} amostras de ciclo puladas porque o acompanhamento do ciclo está desligado para esta conta.", - "cycleDaysFailed": "{count} dias de ciclo não puderam ser gravados: {reason}" - }, - "json": { - "title": "Arquivo JSON", - "description": "Cole um JSON ou envie um arquivo .json com medições e registros de humor.", - "pasteLabel": "Cole o JSON", - "fileInputLabel": "Escolha um arquivo JSON para importar", - "schemaHint": "Dois arrays: measurements e moodEntries.", - "docsLink": "Veja o esquema e um exemplo.", - "uploadFile": "Enviar arquivo", - "downloadExample": "Baixar exemplo", - "import": "Importar", - "invalidJson": "Isso não é um JSON válido. Verifique a sintaxe e tente novamente.", - "invalidPayload": "Os dados não correspondem ao esquema de importação.", - "rateLimited": "Importações demais nesta hora (limite de 5). Tente novamente mais tarde.", - "failed": "A importação falhou. Tente novamente.", - "readFailed": "Não foi possível ler esse arquivo.", - "resultSummary": "Importadas {measurements} medições e {moods} registros de humor, {skipped} pulados.", - "resultSuccess": "Importadas {measurements} medições e {moods} registros de humor", - "resultNothing": "Nada foi importado. Todas as {skipped} entradas foram puladas.", - "resultEmpty": "Esse arquivo não continha medições nem registros de humor." - }, - "csv": { - "title": "Arquivo CSV", - "description": "Importe medições de uma planilha ou da exportação de um medidor.", - "pasteLabel": "Cole o CSV", - "fileInputLabel": "Escolha um arquivo CSV para importar", - "schemaHint": "Colunas: type, value, unit, measuredAt (com offset de fuso horário) e, opcionalmente, glucoseContext, notes, externalId.", - "docsLink": "Veja o esquema de colunas e um exemplo.", - "uploadFile": "Enviar arquivo", - "downloadExample": "Baixar exemplo", - "preview": "Pré-visualizar", - "import": "Importar", - "empty": "Adicione pelo menos uma linha de CSV antes de importar.", - "rateLimited": "Importações demais nesta hora (limite de 5). Tente novamente mais tarde.", - "tooLarge": "Esse arquivo é grande demais (limite de 16 MB).", - "invalidPayload": "O CSV não pôde ser interpretado. Verifique a linha de cabeçalho e tente novamente.", - "failed": "A importação falhou. Tente novamente.", - "readFailed": "Não foi possível ler esse arquivo.", - "previewSummary": "Pré-visualização: {inserted} seriam importados, {skipped} pulados.", - "resultSummary": "Importados {inserted} novos e atualizados {updated}, {skipped} pulados.", - "rowError": "Linha {line}: {reason}", - "resultSuccess": "Importados {inserted} novos e atualizados {updated}", - "resultNothing": "Nada foi importado. Todas as {skipped} linhas foram puladas.", - "resultEmpty": "Esse arquivo tem cabeçalho, mas nenhuma linha de dados.", - "previewSuccess": "Pré-visualização: {inserted} seriam importados", - "previewNothing": "Pré-visualização: nada seria importado. Todas as {skipped} linhas seriam puladas.", - "skipGroupOne": "{count} linha pulada: {reason}", - "skipGroupFew": "{count} linhas puladas: {reason}", - "skipGroupOther": "{count} linhas puladas: {reason}", - "skipDetails": "Mostrar todas as linhas puladas", - "reasonUnknownType": "tipo de medição desconhecido", - "reasonInvalidValue": "o valor não é um número", - "reasonValueOutOfRange": "valor fora da faixa plausível", - "reasonUnknownUnit": "unidade não reconhecida para este tipo", - "reasonMissingTimezoneOffset": "o horário não tem offset de fuso horário", - "reasonInvalidTimestamp": "o horário não pôde ser lido", - "reasonImplausibleTimestamp": "o horário está no futuro ou antes de 1900", - "reasonUnexpectedGlucoseContext": "contexto de glicose definido em uma linha que não é glicemia", - "reasonInvalidGlucoseContext": "o contexto de glicose não é um dos valores permitidos", - "reasonNotesTooLong": "a nota é longa demais", - "reasonExternalIdTooLong": "o ID externo é longo demais", - "reasonUnstableExternalId": "o ID externo não é estável entre exportações", - "reasonDuplicate": "já importado", - "reasonUnknown": "pulada", - "detail": "Uma linha por leitura." - }, - "doseHistory": { - "title": "Histórico de doses de medicamentos", - "description": "Um histórico de doses exportado de outro aplicativo de medicamentos, lido como vem.", - "pasteLabel": "Cole a exportação", - "fileInputLabel": "Escolha um arquivo de exportação de histórico de doses", - "uploadFile": "Escolher arquivo", - "preview": "Pré-visualizar", - "import": "Importar", - "empty": "Cole a exportação ou escolha um arquivo primeiro.", - "readFailed": "Não foi possível ler esse arquivo.", - "rateLimited": "Máximo de 5 importações por hora. Tente novamente mais tarde.", - "tooLarge": "Esse arquivo excede o limite de 16 MB.", - "inProgress": "Uma importação de histórico de doses já está em andamento. Espere ela terminar.", - "workerUnavailable": "O worker em segundo plano não está disponível, então nada foi importado.", - "failed": "A importação falhou. Nada foi gravado.", - "columnsHeading": "O que cada coluna faz", - "jsonOnly": "Somente JSON", - "previewLine": "{rows} linhas lidas, {queued} seriam importadas, {refused} recusadas", - "submittedLine": "{rows} linhas lidas, {queued} na fila para importação", - "unmatched": "Nenhum medicamento registrado corresponde a: {names}", - "ambiguous": "Corresponde a mais de um medicamento: {names}", - "mirrored": "Espelhado de outro aplicativo, então nenhuma dose pode ser adicionada: {names}", - "unknownColumns": "Colunas para as quais o importador não tem regra, deixadas sem leitura: {names}", - "codingsNotRead": "Linhas com um valor Codings que não foi lido: {count}", - "archivedRowsPresent": "Linhas marcadas como pertencentes a medicamentos arquivados: {count}. Essa flag não as pula nem as reativa; o resultado final indica o que foi adicionado.", - "verdict": { - "honoured": "usada", - "reported": "informada", - "ignored": "não lida" - }, - "column": { - "date": "O horário em que a dose foi realmente tomada. O offset UTC é lido exatamente como escrito.", - "scheduledDate": "O horário do cronograma ao qual a dose pertencia, mantido separado do horário em que foi tomada. Vazio significa que a dose não pertencia a nenhum horário.", - "medication": "Correspondido a um medicamento já registrado. Nada é criado a partir do arquivo.", - "nickname": "Tentado como um segundo nome quando o primeiro não corresponde a nada.", - "dosage": "Registrada na dose apenas quando difere da quantidade programada.", - "scheduledDosage": "Comparada à quantidade real para decidir se a dose desviou. Nunca armazenada por si só.", - "unit": "Escrita junto com a quantidade, grafada como o arquivo a grafia. \"count\" significa múltiplos da dose configurada.", - "status": "\"Taken\" vira uma dose e \"Skipped\", uma pulada deliberadamente. Qualquer outro valor não registra decisão e a linha é recusada.", - "archived": "Contada e informada de volta. Uma dose que aconteceu não é desfeita por arquivar o medicamento depois.", - "codings": "O CSV não documenta uma codificação para esta coluna, então ela é deixada como está em vez de ser adivinhada. Células preenchidas são contadas.", - "form": "Descreve o medicamento, não a dose.", - "start": "A data em que você começou o medicamento, não o horário desta dose.", - "end": "A data em que você parou o medicamento, não o horário desta dose." - }, - "fatal": { - "emptyFile": "Esse arquivo não contém linhas.", - "missingColumns": "Esse arquivo não tem uma coluna de que o importador precisa: Date, Medication ou Status.", - "unreadableJson": "Esse arquivo não é um JSON válido.", - "jsonNotAnArray": "Esse JSON não contém uma lista de doses.", - "jsonNoIntakeTime": "A exportação JSON registra quando a dose estava prevista, mas não quando foi tomada, e um horário programado não será gravado como se fosse a dose. Exporte o CSV em vez disso, que traz ambos.", - "tooManyRows": "Esse arquivo tem mais linhas do que uma importação consegue processar. Divida-o e importe as partes." - }, - "detail": "Um arquivo cobre todos os medicamentos nele contidos." - }, - "healthConnect": { - "title": "Exportação do Health Connect", - "description": "Importe o arquivo ZIP que o aplicativo Health Connect no Android gera quando você exporta seus dados.", - "choose": "Escolher arquivo ZIP", - "uploading": "Enviando…", - "uploadFailed": "Falha no envio. Tente novamente.", - "tooLarge": "O arquivo é maior do que este servidor aceita.", - "doneSummary": "{count} valores importados.", - "failed": "A importação falhou: {reason}", - "phase": { - "queued": "Aguardando início", - "unpacking": "Descompactando o arquivo", - "parsing": "Lendo os registros", - "upserting": "Salvando os valores", - "done": "Concluído", - "failed": "Falhou" - }, - "steps": { - "export": "No seu celular Android, abra o Health Connect, vá em Gerenciar dados, depois em Exportar e importar, e inicie uma exportação.", - "cloud": "O Health Connect só salva a exportação em um aplicativo de armazenamento em nuvem, como Google Drive, Dropbox ou Nextcloud, nunca no próprio celular. Escolha um lá.", - "upload": "Baixe o arquivo ZIP dessa nuvem para este dispositivo e envie-o aqui." - }, - "dropLabel": "Arraste o ZIP do Health Connect para cá", - "dropHint": "ou clique para escolhê-lo. Até 1 GB.", - "fileInputLabel": "Arquivo ZIP de exportação do Health Connect", - "privacyNote": "O arquivo é excluído do servidor assim que a importação termina. Registros de aplicativos que você já conecta diretamente, como Withings ou Fitbit, são deixados de fora para que nada chegue duplicado. Enviar o mesmo arquivo novamente não muda nada.", - "rateLimited": "Envios demais em pouco tempo. Espere um minuto e tente novamente.", - "busy": "Uma importação já está em andamento para sua conta. Espere ela terminar.", - "rowsSoFar": "{count} valores salvos até agora", - "doneNothing": "A importação terminou, mas não havia nada novo para adicionar.", - "workouts": "Treinos", - "leftOutConnected": "{count} registros de aplicativos que você já conecta diretamente foram deixados de fora.", - "nutrientsModuleOff": "Os totais de água e nutrientes não foram importados porque o módulo Nutrientes está desligado.", - "cycleModuleOff": "Os dados do período não foram importados porque o acompanhamento do ciclo está desligado.", - "failure": { - "unsupportedVersion": "Esta exportação do Health Connect é antiga demais para ser lida. Atualize o Health Connect no celular e exporte novamente.", - "notHealthConnect": "Este arquivo não é uma exportação do Health Connect. Escolha o arquivo ZIP que o Health Connect salvou.", - "unsafeSchema": "Este arquivo não tem a estrutura de uma exportação do Health Connect e não foi lido.", - "tooLarge": "A exportação é maior do que este servidor aceita.", - "stagingMissing": "O arquivo enviado não estava mais no servidor. Envie-o novamente.", - "interrupted": "A importação foi interrompida por uma reinicialização do servidor. Envie o arquivo novamente." - } - } - }, - "subtitle": "Exporte seus dados ou importe de um backup." - }, - "about": { - "title": "Sobre este aplicativo", - "subtitle": "Versão, licença e links do projeto." - }, - "sharing": { - "title": "Compartilhamento", - "subtitle": "Compartilhe acesso somente leitura aos seus dados." - }, - "insights": { - "subtitle": "Organize suas seções de visão geral e a ordem das tags." - }, - "medications": { - "subtitle": "Gerencie a visualização e a ordem da sua lista de medicamentos." - }, - "mood": { - "subtitle": "Organize suas tags de humor, grupos e a ordem do seletor." - }, - "labs": { - "subtitle": "Gerencie a visualização, a ordem de classificação e os biomarcadores." - }, - "illness": { - "subtitle": "Gerencie a visualização e a ordem dos episódios." - }, - "vorsorge": { - "subtitle": "Gerencie a visualização, a ordem e os lembretes individuais." - }, - "modules": { - "title": "Módulos", - "saved": "Salvo", - "error": "Não foi possível salvar. Tente novamente.", - "toggleable": { - "title": "O que você acompanha", - "description": "Módulos desativados saem da navegação, dos blocos e dos insights, enquanto seus dados permanecem intactos." - }, - "manageIn": "Gerenciar em {section}", - "operatorDisabled": "Desativado em todo o servidor", - "subtitle": "Escolha quais áreas de acompanhamento o HealthLog exibe em todo o aplicativo." - }, - "gesundheitsakte": { - "title": "Registro de saúde", - "subtitle": "Exporte um registro de saúde completo, pronto para o clínico." - }, - "coach": { - "title": "Coach", - "subtitle": "Ajuste o Coach, seus lembretes proativos e sua memória." - }, - "security": { - "title": "Segurança", - "subtitle": "Autenticação de dois fatores, códigos de recuperação e chaves de acesso." - }, - "privacy": { - "title": "Dados e privacidade", - "subtitle": "Seus dados, retenção, criptografia e segurança da conta em um só lugar." - }, - "mcp": { - "title": "Conector MCP", - "subtitle": "Conecte um assistente externo aos seus próprios dados de saúde." - }, - "anamnesis": { - "title": "Histórico médico", - "subtitle": "Seu histórico médico, estilo de vida, detalhes de emergência e o que a IA pode ler." - }, - "environment": { - "title": "Local e clima", - "subtitle": "Clima, luz do dia e contexto de localização.", - "disabledHint": "Ative o módulo Ambiente para definir uma localização de casa e receber clima e luz do dia diários.", - "searchPlaceholder": "Procure uma cidade", - "search": "Buscar", - "searchError": "Não foi possível buscar esse lugar.", - "use": "Usar", - "select": "Selecionar", - "saveError": "Não foi possível salvar sua alteração.", - "homeSaved": "Localização de casa salva", - "travelAdded": "Período de localização adicionado.", - "travelRemoved": "Período de localização removido.", - "backfillQueued": "Preenchimento retroativo na fila.", - "backfillError": "Não foi possível iniciar o preenchimento retroativo.", - "startDate": "Data de início", - "endDate": "Data de fim", - "storedDays": "{count} dias de clima armazenados.", - "home": { - "title": "Localização de casa", - "description": "Uma localização aproximada, no nível de cidade, nunca um rastro preciso. O clima e a luz do dia são buscados para este lugar nos dias em que nenhum período de localização se aplica, a partir da data em que você o definiu.", - "current": "Atual: {label}", - "none": "Nenhuma localização de casa definida ainda.", - "since": "Clima acompanhado a partir de {date}. Dias anteriores permanecem vazios até você adicionar um período de localização." - }, - "travel": { - "title": "Períodos de localização", - "description": "Adicione um lugar e uma faixa de datas, como uma viagem ou um trecho do histórico anterior. O período substitui sua casa nos dias que cobre, para que o clima corresponda a onde você realmente estava. É assim que você corrige o passado.", - "none": "Nenhum período de localização ainda.", - "add": "Adicionar {label}", - "remove": "Remover período de localização", - "removeConfirmTitle": "Remover esta viagem?", - "removeConfirmBody": "As leituras feitas durante ela permanecem no seu registro; apenas a entrada da viagem é removida.", - "range": "{start} a {end}", - "suggestionsIntro": "O Dawarich encontrou dias no exterior que nenhum período cobre ainda.", - "suggestionUse": "Usar", - "suggestionDismiss": "Descartar sugestão" - }, - "backfill": { - "title": "Preencher dias passados", - "description": "Busque e armazene o clima de uma faixa de datas passada para que dias mais antigos entrem nas correlações. O início usa por padrão a data efetiva da sua casa; para ir mais longe, adicione primeiro um período de localização para essa faixa.", - "run": "Preencher" - }, - "noResults": "Nenhum lugar correspondente encontrado.", - "fetchFailedOne": "A última atualização de clima em segundo plano falhou ({when}).", - "fetchFailedFew": "As últimas {count} atualizações de clima em segundo plano falharam, mais recentemente em {when}.", - "fetchFailedOther": "As últimas {count} atualizações de clima em segundo plano falharam, mais recentemente em {when}.", - "airQuality": { - "title": "Qualidade do ar e pólen", - "description": "Qualidade do ar, pólen e UV diários para sua localização, do modelo CAMS via Open-Meteo.", - "toggle": "Incluir qualidade do ar e pólen", - "operatorDisabled": "A qualidade do ar está desativada neste servidor.", - "coverage": "{count} dias com dados de qualidade do ar", - "pollenEuropeOnly": "Os dados de pólen cobrem apenas a Europa.", - "historyProgress": "Preenchendo qualidade do ar retroativamente: {done} de {total} dias", - "historyComplete": "A qualidade do ar está preenchida para todos os dias anteriores com registros que a fonte cobre ({total} dias). Dias mais antigos permanecem vazios.", - "attribution": "Fontes de dados e licenças", - "saveError": "A configuração não pôde ser salva.", - "latest": "Dia mais recente ({date})", - "modelNote": "Valores externos modelados para sua área, não sua exposição pessoal." - } - }, - "score": { - "title": "Pontuação de saúde", - "subtitle": "Escolha quais pilares contam para sua pontuação.", - "card": { - "title": "O que conta para sua pontuação", - "description": "Todo pilar que você registra conta, a menos que você diga o contrário aqui." - }, - "threeAxes": "Registrar, exibir e contar são três coisas separadas. Esta página muda apenas a última. Um pilar que você desativa aqui continua sendo registrado e continua aparecendo em todo o restante do HealthLog; ele apenas deixa de mover o número.", - "recommendation": "Três áreas de saúde são a recomendação, não uma exigência: uma seleção com pelo menos um pilar é salva. Uma pontuação mais enxuta é calculada da mesma forma e indica no cartão quantas áreas ela usa.", - "axis": { - "countsFor": "Contar {pillar} para a pontuação" - }, - "state": { - "counting": "Contando para sua pontuação", - "waiting": "Selecionado, aguardando dados", - "crisis": "Orientações de segurança são exibidas em vez de uma pontuação. Sua seleção está correta.", - "readFailed": "Este pilar não pôde ser lido na última execução." - }, - "presets": { - "label": "Começar de", - "all": "Todos os pilares", - "current": "Sua seleção salva" - }, - "save": "Salvar", - "saved": "Salvo", - "error": "Não foi possível salvar. Tente novamente.", - "loadFailed": "Não foi possível carregar sua seleção.", - "eligibilityFailed": "Não foi possível verificar quais pilares têm dados no momento. As chaves abaixo continuam funcionando.", - "omitted": "{count} pilares não são listados porque seu acompanhamento está desligado. Reative um módulo e seu pilar volta.", - "omittedLink": "Abrir módulos", - "refusal": { - "empty": "Uma pontuação de saúde precisa de pelo menos uma área de saúde para pontuar. Mantenha uma selecionada; a pontuação indicará de quais áreas ela é composta." - }, - "notice": { - "upgrade": { - "title": "O que conta agora é você quem escolhe", - "body": "Quais pilares contavam para sua Pontuação de Saúde costumavam seguir os módulos que você tinha ativado. Agora é uma escolha separada, e esta página é onde você a faz. Seu número não mudou quando isso chegou: ele continua contando exatamente o que contava antes." - }, - "changed": { - "title": "Você mudou o que conta", - "body": "Desde {date} sua pontuação é calculada a partir de um conjunto diferente de pilares. Os dias anteriores foram calculados com o conjunto antigo, então os dois não são comparados e a variação semanal permanece pausada até que a janela de comparação esteja livre da mudança. O histórico de cada pilar corre direto pela mudança.", - "bodyUndated": "Sua pontuação é calculada a partir de um conjunto diferente de pilares do que era antes. Os dias anteriores à mudança foram calculados com o conjunto antigo, então os dois não são comparados e a variação semanal permanece pausada até que a janela de comparação esteja livre da mudança. O histórico de cada pilar corre direto pela mudança." - }, - "composition": { - "title": "O que conta mudou por conta própria", - "left": "Deixou de contar para sua pontuação: {pillars}. O número mudou por esse motivo, não porque sua saúde mudou.", - "joined": "Agora conta para sua pontuação: {pillars}." - }, - "dismiss": "Entendi", - "dismissError": "Não foi possível salvar isso. Tente novamente." - } - }, - "access": { - "title": "Acesso compartilhado", - "subtitle": "Quem pode abrir seu registro de saúde e de quem você pode abrir." - } - }, - "profile": "Perfil", - "language": "Idioma", - "languageDescription": "Escolha o idioma de exibição do aplicativo.", - "timeFormat": { - "title": "Formato de hora", - "description": "Controla se os horários são exibidos no relógio de 24 horas ou de 12 horas (AM/PM).", - "auto": "Automático (idioma)", - "h24": "24 horas", - "h12": "12 horas (AM/PM)", - "saved": "Formato de hora salvo", - "saveError": "Falha ao salvar o formato de hora." - }, - "dateFormat": { - "title": "Formato de data", - "description": "Controla a ordem de dia, mês e ano quando as datas são exibidas.", - "auto": "Automático (idioma)", - "dmy": "DD.MM.AAAA", - "mdy": "MM/DD/AAAA", - "ymd": "AAAA-MM-DD", - "saved": "Formato de data salvo", - "saveError": "Falha ao salvar o formato de data." - }, - "username": "Nome de usuário", - "height": "Altura (cm)", - "heightFtIn": "Altura (pés, polegadas)", - "dateOfBirth": "Data de nascimento", - "dateOfBirthHint": "Usada para cálculos automáticos de metas de pressão arterial.", - "gender": "Gênero", - "genderNone": "Não especificado", - "genderMale": "Masculino", - "genderFemale": "Feminino", - "genderHint": "Usado para valores-alvo específicos por gênero.", - "timezone": "Fuso horário", - "timezoneHint": "Usado nos rótulos dos eixos dos gráficos, horários de lembrete, horários de exportação e contexto do Coach. Os dados armazenados não mudam.", - "timezoneInvalid": "Não é um fuso horário IANA válido.", - "profileSaved": "Perfil salvo", - "profilePartiallySaved": "Perfil salvo, mas {field} não pôde ser atualizado.", - "profileNothingSaved": "Nada foi salvo. Corrija {field} e tente novamente.", - "profileRejection": { - "tooBig": "Esse valor está acima da faixa que este campo aceita.", - "tooSmall": "Esse valor está abaixo da faixa que este campo aceita.", - "invalidValue": "Não é uma das respostas que este campo aceita.", - "invalidFormat": "Não está escrito em um formato que este campo consiga ler.", - "invalidType": "Esse valor não chegou em um formato que este campo consiga armazenar.", - "rateLimited": "Alterado com muita frequência. Espere um pouco e tente novamente.", - "other": "Esse valor não foi aceito. Verifique-o e tente novamente.", - "reproofRequired": "Digite sua senha atual para alterar o endereço de e-mail.", - "reproofFailed": "Essa senha não está correta, então o endereço de e-mail não foi alterado.", - "secondFactorRequired": "Confirme com seu segundo fator ou uma chave de acesso para alterar o endereço de e-mail." - }, - "avatar": { - "title": "Foto do perfil", - "description": "Envie uma foto armazenada no seu próprio servidor. Ela aparece em todo o aplicativo no lugar de um serviço externo de avatar.", - "upload": "Enviar foto", - "replace": "Substituir foto", - "remove": "Remover", - "removeTitle": "Remover a foto do perfil?", - "removeBody": "A imagem é excluída do seu servidor e suas iniciais tomam seu lugar. Você precisaria do arquivo original para enviá-la novamente.", - "removeConfirm": "Remover foto", - "hint": "JPEG, PNG ou WebP. Até 2 MB e 2048×2048 pixels.", - "uploaded": "Foto do perfil atualizada", - "removed": "Foto do perfil removida", - "invalidType": "Tipo de imagem não compatível. Use JPEG, PNG ou WebP.", - "tooLarge": "A imagem excede o limite de 2 MB.", - "error": "Não foi possível atualizar a foto do perfil. Tente novamente." - }, - "changePassword": "Alterar senha", - "changePasswordDescription": "Substitua sua senha atual por uma nova.", - "currentPassword": "Senha atual", - "newPassword": "Nova senha", - "confirmNewPassword": "Confirmar nova senha", - "passwordMismatch": "As novas senhas não coincidem", - "passwordUpdated": "Senha atualizada com sucesso", - "passkeys": "Chaves de acesso", - "passkeysDescription": "As chaves de acesso permitem entrar com segurança sem senha.", - "passkeyReauth": { - "title": "Confirme que é você", - "description": "Verifique um método de entrada existente antes de adicionar uma nova chave de acesso.", - "methodLabel": "Método de verificação", - "methods": { - "password": "Senha", - "totp": "Código do autenticador", - "passkey": "Chave de acesso", - "webauthn": "Chave de segurança" - }, - "currentPassword": "Senha atual", - "authenticatorCode": "Código do autenticador", - "authenticatorPlaceholder": "Código do autenticador de 6 dígitos", - "verifyAndAdd": "Verificar e adicionar", - "factorDescription": "Verifique um método de entrada existente antes de adicionar um segundo fator.", - "verifyAndContinue": "Verificar e continuar" - }, - "passkeyName": "Nome", - "noPasskeys": "Nenhuma chave de acesso registrada.", - "addPasskey": "Adicionar chave de acesso", - "passkeyRegistrationFailed": "Falha ao registrar a chave de acesso", - "passkeyRegistrationCancelled": "Registro da chave de acesso cancelado", - "passkeyNotSupported": "Seu navegador ou dispositivo ainda não oferece suporte a chaves de acesso. Tente outro navegador ou dispositivo.", - "passkeyAlreadyRegistered": "Este dispositivo já está registrado como uma chave de acesso para sua conta.", - "passkeySecurityBlocked": "Seu navegador bloqueou a solicitação de chave de acesso por motivos de segurança. Certifique-se de estar em uma origem HTTPS confiável e tente novamente.", - "passkeyTimeout": "O tempo da solicitação de chave de acesso expirou. Tente novamente.", - "passkeyUnknownError": "Falha ao registrar a chave de acesso: {message}", - "deletePasskey": "Excluir chave de acesso?", - "deletePasskeyDescription": "A chave de acesso será excluída permanentemente.", - "singleDevice": "Dispositivo único", - "multiDevice": "Multidispositivo", - "backedUp": "com backup", - "telegram": "Telegram", - "telegramDescription": "Lembretes de medicamentos via bot.", - "botToken": "Token do bot", - "chatId": "ID do chat", - "enableNotifications": "Ativar notificações", - "telegramStep1": "Crie um bot via @BotFather no Telegram e copie o token.", - "telegramStep2": "Envie /start ao seu bot para ativar o chat.", - "telegramStep3": "Encontre seu ID de chat via @userinfobot ou pela API de bots.", - "ntfy": "ntfy", - "ntfyDescription": "Notificações via ntfy (auto-hospedado ou ntfy.sh).", - "ntfyEnable": "Ativar ntfy", - "ntfyServer": "URL do servidor", - "ntfyTopic": "Tópico", - "ntfyAuthToken": "Token de autenticação (opcional)", - "ntfyAuthTokenHint": "Necessário apenas para tópicos privados com controle de acesso.", - "webhook": "Webhook", - "webhookDescription": "Envie notificações por POST para qualquer URL: Discord, Slack, Gotify, Home Assistant, n8n ou qualquer relay que aceite JSON.", - "webhookEnable": "Ativar webhook", - "webhookUrl": "URL do webhook", - "webhookUrlHint": "A URL completa para onde enviar o POST. Um endereço em rede privada precisa de aprovação do administrador do servidor.", - "webhookHeaderName": "Nome do cabeçalho (opcional)", - "webhookHeaderValue": "Valor do cabeçalho (opcional)", - "webhookFormat": "Formato do payload", - "webhookFormatGeneric": "JSON genérico", - "webhookFormatGenericHint": "Cole uma URL de webhook do Discord ou Slack como está. O Home Assistant e o n8n leem os campos title, message, eventType e priority.", - "webhookFormatGotify": "Gotify", - "webhookFormatGotifyHint": "Use a URL que termina em /message e coloque o token do aplicativo no cabeçalho X-Gotify-Key.", - "email": "E-mail", - "emailDescription": "Receba alertas e lembretes por e-mail.", - "emailEnable": "Ativar e-mail", - "emailRecipient": "Endereço do destinatário", - "webPush": "Push do navegador", - "webPushDescription": "Receba notificações diretamente no navegador, mesmo quando o HealthLog não estiver aberto.", - "webPushNotSupported": "Seu navegador não oferece suporte a notificações push.", - "webPushDenied": "As notificações push estão bloqueadas. Permita-as nas configurações do navegador.", - "webPushNotConfigured": "O Web Push não está configurado no servidor.", - "webPushSubscribe": "Ativar push", - "webPushUnsubscribe": "Desativar push", - "webPushSubscribed": "Notificações push ativadas!", - "webPushUnsubscribed": "Notificações push desativadas.", - "webPushSubscribeFailed": "Falha na ativação", - "codexConnected": "ChatGPT conectado com sucesso! Os insights agora estão ativos.", - "codexDisconnected": "Conexão com o ChatGPT removida.", - "codexConnectionFailed": "Falha na conexão com o ChatGPT. Tente novamente.", - "rawData": "Enviar histórico detalhado", - "rawDataOnDescription": "Além dos resumos, o provedor recebe médias das suas leituras: por dia nos últimos 90 dias, por semana no ano anterior e por mês até 5 anos atrás, cada uma com sua data e número de leituras. Leituras individuais, seu nome e seu e-mail não são enviados.", - "rawDataOffDescription": "Apenas resumos são enviados: o valor mais recente, médias, tendências, mínimo e máximo em janelas fixas. Nenhuma série de leituras.", - "rawDataWarning": "O histórico detalhado está ligado: cada análise também envia médias diárias dos últimos 90 dias, semanais do ano anterior e mensais até 5 anos atrás.", - "regenerateInsights": "Gerar relatórios novamente", - "regenerateSuccess": "Relatórios gerados novamente com sucesso", - "regenerateRateLimit": "Espere: você atingiu o limite horário de análises.", - "lastGeneratedAt": "Última geração", - "ai": { - "chatgptConnectedBadge": "ChatGPT conectado", - "adminAiActiveBadge": "Provedor administrativo ativo", - "connectionExpiredBadge": "Conexão expirada", - "connectedSince": "Conectado desde {when}.", - "deviceCodeHeading": "Conclua a conexão em chatgpt.com", - "deviceCodeStep1": "Abra este link em qualquer dispositivo:", - "deviceCodeStep2": "Digite este código de uso único:", - "deviceCodeStep3": "Aprove a conexão. Esta página se atualiza automaticamente.", - "deviceCodeCopy": "copiar", - "deviceCodeWaiting": "Aguardando aprovação…", - "deviceCodeCancel": "Cancelar", - "oauthNotConfigured": "O OAuth do ChatGPT não está configurado nesta instância. Use sua própria chave de API abaixo em vez disso.", - "modelLabel": "Modelo", - "modelOptionDefault": "— Padrão —", - "modelOptionCustom": "Personalizado…", - "customModelLabel": "Nome do modelo personalizado", - "anthropicKeyLabel": "Chave de API da Anthropic", - "baseUrlLabel": "URL base", - "localKeyLabel": "Chave de API (opcional)", - "localDescription": "Qualquer endpoint compatível com OpenAI funciona aqui: um modelo local (Ollama, LM Studio) ou um gateway como LiteLLM, OpenRouter ou vLLM. A URL base termina com /v1; a chave de API é opcional.", - "savedPreview": "(salvo {preview})", - "savedShort": "(salvo)", - "saveCta": "Salvar", - "saved": "Salvo", - "errorGeneric": "Erro", - "providerChain": { - "types": { - "codex": "ChatGPT (Codex)", - "openai": "OpenAI (sua chave)", - "anthropic": "Anthropic (Claude)", - "local": "Modelo local", - "openai-compatible": "Gateway compatível com OpenAI", - "admin-openai": "OpenAI administrativo" - }, - "title": "Cadeia de fallback", - "description": "Se o provedor ativo falhar, o HealthLog tenta o próximo habilitado nesta ordem.", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "removeFromChain": "Remover da cadeia", - "addProvider": "Adicionar provedor", - "addNoneAvailable": "Todos os provedores já estão na cadeia", - "saveOrder": "Salvar ordem da cadeia", - "saved": "Cadeia salva", - "saveFailed": "Falha ao salvar a cadeia", - "resetDefaults": "Redefinir para padrões", - "resetConfirmTitle": "Redefinir a cadeia para padrões?", - "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", - "providerSelect": { - "codex": "Conta do ChatGPT (Codex)", - "openai": "OpenAI (sua chave de API)", - "anthropic": "Anthropic (Claude)", - "local": "Modelo local (compatível com OpenAI)", - "openai-compatible": "Gateway compatível com OpenAI", - "admin-openai": "OpenAI fornecido pela administração" - }, - "compat": { - "description": "Um provedor de primeira classe para qualquer endpoint que fale a API /v1/chat/completions da OpenAI: LiteLLM, OpenRouter, vLLM ou outro gateway. A URL base termina com /v1, a chave de API é opcional e o modelo é o que seu gateway roteia. Sua chave da OpenAI nunca chega a este endpoint; este provedor tem a própria.", - "keyLabel": "Chave de API (opcional)", - "modelHint": "O nome do modelo que seu gateway espera. Em branco, o modelo salvo para seus outros provedores é usado; sem nenhum definido, este provedor é ignorado." - }, - "openai": { - "modelSelect": "Modelo", - "modelOptionCustom": "Slug personalizado…", - "modelCustomLabel": "Slug do modelo personalizado", - "modelCustomPlaceholder": "gpt-5", - "baseUrlLabel": "URL base (avançado)", - "baseUrlPlaceholder": "https://api.openai.com/v1", - "baseUrlHelp": "Substitua apenas se estiver usando um gateway compatível com OpenAI. Deixe em branco para a própria OpenAI.", - "showAdvanced": "Mostrar avançado", - "hideAdvanced": "Ocultar avançado", - "apiKey": "Chave de API", - "apiKeyPlaceholder": "sk-…" - }, - "codex": { - "statusConnected": "Conectado", - "statusDisconnected": "Não conectado", - "statusExpired": "Conexão expirada", - "connectButton": "Conectar com o ChatGPT", - "disconnectButton": "Desconectar", - "disconnectTitle": "Desconectar o ChatGPT?", - "disconnectBody": "O login armazenado é descartado junto com o texto de insights em cache. Reconectar significa entrar novamente pelo fluxo de código do dispositivo.", - "disconnectConfirm": "Desconectar", - "modelSlugLabel": "Slug do modelo", - "modelSlugBody": "O Codex usa o modelo para o qual sua assinatura do ChatGPT roteia. A variável de ambiente CODEX_MODEL permite à operação substituir isso na instância.", - "lastInsight": "Último insight: {when}" - }, - "adminOpenai": { - "title": "OpenAI administrativo", - "body": "Chave da OpenAI fornecida pela administração, usada como último fallback quando nenhum provedor pessoal está configurado. Nada para configurar aqui.", - "notConfigured": "A administração não configurou uma chave compartilhada da OpenAI nesta instância." - }, - "testProvider": "Testar provedor ativo", - "testSuccess": "OK: {provider} ({model})", - "testFailedShort": "Teste falhou: {message}", - "testUnexpectedResponse": "Falha na conexão com o provedor de IA: resposta inesperada do servidor.", - "testReasonCredentials": "O provedor rejeitou as credenciais. Autentique-se novamente nas configurações de IA.", - "testReasonRateLimited": "O provedor limitou a taxa da solicitação. Tente novamente em breve.", - "testReasonServerError": "O provedor de IA retornou um erro de servidor.", - "testReasonBadRequest": "O provedor rejeitou a solicitação (HTTP {status}). O endpoint respondeu, então é um problema de formato da solicitação ou de nome do modelo, não de conectividade.", - "testReasonUnreachable": "Não foi possível alcançar o provedor de IA.", - "coachMemory": { - "title": "O que o Coach lembra", - "description": "Fatos duradouros que você contou ao Coach.", - "empty": "O Coach ainda não armazenou nenhum fato. Conforme você conversa, ele lembra detalhes duradouros que você compartilha (seus objetivos, condições, preferências), e você pode limpá-los aqui a qualquer momento.", - "learnedPrefix": "aprendido em {when}", - "categoryPreference": "Preferências", - "categoryCondition": "Condições", - "categoryGoal": "Objetivos", - "categoryConstraint": "Restrições", - "categoryContext": "Contexto", - "forgetAria": "Esquecer este fato", - "forgetTitle": "Esquecer este fato?", - "forgetBody": "O Coach deixa de usá-lo a partir da próxima mensagem. Não há como trazer um fato esquecido de volta.", - "forgetConfirm": "Esquecer", - "forgetAll": "Esquecer tudo", - "forgetAllConfirmTitle": "Esquecer tudo que o Coach lembra?", - "forgetAllConfirmBody": "Isso remove todos os fatos armazenados. O Coach começará do zero na próxima conversa. Não é possível desfazer.", - "forgetAllConfirmAction": "Esquecer tudo", - "cancel": "Cancelar", - "summaryNote": "O Coach também pode manter um resumo curto e contínuo de cada conversa. Não há controle por item para isso; excluir uma conversa remove o resumo dela.", - "loadError": "Não foi possível carregar o que o Coach lembra.", - "forgotToast": "Fato esquecido.", - "forgotError": "Não foi possível esquecer esse fato. Tente novamente.", - "clearedToast": "{count} fatos armazenados esquecidos.", - "clearError": "Não foi possível limpar os fatos armazenados. Tente novamente.", - "detail": "Ele os usa para manter as respostas relevantes. Remova qualquer coisa que prefira que ele esqueça.", - "categoryMedication": "Medicamentos" - }, - "coachReminders": { - "title": "Seus lembretes", - "description": "Coisas que você pediu ao Coach para lembrar mais tarde.", - "empty": "Nenhum lembrete ainda. Peça ao Coach para lembrá-lo de algo e ele aparecerá aqui.", - "loadError": "Não foi possível carregar seus lembretes.", - "dueHeading": "Previstos agora", - "allHeading": "Salvos", - "duePrefix": "previsto para {when}", - "confirm": "Manter", - "markDone": "Concluído", - "dismiss": "Descartar", - "deleteAria": "Excluir este lembrete", - "note": "Os lembretes são armazenados criptografados. Exclua um a qualquer momento e ele sai do que o Coach consegue ver.", - "status": { - "proposed": "Sugerido", - "active": "Salvo", - "due": "Previsto", - "surfaced": "Exibido", - "done": "Concluído", - "dismissed": "Descartado" - }, - "deleteConfirmTitle": "Excluir este lembrete?", - "deleteConfirmBody": "Ele deixa de ser exibido. Qualquer coisa que você já tenha registrado não é afetada.", - "deleteConfirmAction": "Excluir", - "detail": "Os previstos aparecem aqui e no Coach.", - "readOnlyNote": "O Coach não está disponível agora, mas você ainda pode ler e excluir seus lembretes." - }, - "aboutMe": { - "title": "Sobre mim", - "description": "Contexto pessoal que o Coach e o resumo diário leem junto com seus dados.", - "placeholder": "Ex.: trabalho em turnos, dieta vegetariana, lesão no joelho, treinando para uma meia maratona…", - "charCount": "{used} / {max} caracteres", - "clear": "Limpar", - "clearTitle": "Limpar a nota sobre mim?", - "clearBody": "Isso remove apenas a nota de texto livre. Suas alergias e intolerâncias permanecem exatamente como estão.", - "clearConfirm": "Limpar nota", - "save": "Salvar", - "savedToast": "Nota sobre mim salva", - "clearedToast": "Nota sobre mim limpa.", - "saveError": "Não foi possível salvar. Tente novamente.", - "loadError": "A nota não pôde ser carregada.", - "hint": "Passada ao Coach e ao resumo diário como contexto adicional. Deixe em branco para não enviar nada.", - "profileHint": "Idade e gênero vêm do seu perfil e são incluídos automaticamente.", - "freeTextLabel": "Sobre mim (texto livre)", - "conditionsPlaceholder": "Ex.: hipertensão, diabetes tipo 2…", - "allergiesPlaceholder": "Ex.: intolerância à lactose, alergia à penicilina…", - "focusPlaceholder": "Ex.: acompanhar minha pressão arterial, me motivar a me movimentar mais…", - "questionsTitle": "O Coach tem perguntas de acompanhamento", - "questionsOpenCoach": "Responda-as no Coach" - }, - "responseTimeoutHeading": "Tempo limite de resposta", - "responseTimeoutBody": "Quanto tempo esperar pela resposta da IA antes de desistir. Aumente para um modelo local ou auto-hospedado que precisa de tempo para carregar na primeira solicitação. Em branco, uma resposta pode levar {seconds} s; o resumo diário permite até {briefingSeconds} s.", - "responseTimeoutLabel": "Tempo limite de resposta (segundos)", - "responseTimeoutPlaceholder": "Padrão ({seconds} s)", - "responseTimeoutInvalid": "Digite um número entre 10 e 600 segundos.", - "autoRead": { - "title": "Ler documentos automaticamente com IA", - "subLabel": "Seu provedor de IA lê e indexa cada novo documento sem um toque por documento.", - "honesty": "Quando ligado, cada documento que você envia é enviado ao seu provedor de IA configurado para ser lido, descrito e indexado para busca, sem confirmação por documento. Ativar também alcança o passado: documentos que você já enviou e que ainda não têm resumo também são enviados, até 200 por vez que você ativar. Isso acontece no servidor e o conteúdo dos documentos sai desta máquina para aquele provedor. Se o seu provedor configurado for uma conexão por assinatura (uma conta de IA conectada, em vez de uma chave de API), as próprias configurações de dados daquele provedor se aplicam: provedores por assinatura podem usar o conteúdo para melhorar seus modelos, e nenhum acordo de processamento de dados os cobre. Documentos lidos por um modelo local auto-hospedado nunca saem do seu servidor. Desligado por padrão; ative apenas se aceitar essa troca para seus documentos.", - "confirm": "Entendi, ativar", - "cancel": "Cancelar", - "restingFrugal": "Pausado no nível de uso frugal da IA: documentos são lidos apenas quando você pede." - }, - "centralCodex": { - "title": "Usar o acesso compartilhado de IA do servidor", - "subLabel": "Envie solicitações de IA pela conexão compartilhada do servidor, com seus próprios provedores como fallback.", - "honesty": "O acesso compartilhado é uma única conta de IA conectada que a administração conectou para todos neste servidor, não a sua própria chave. As solicitações que você faz por ela são usadas para treinamento pelo provedor por padrão e nenhum acordo de processamento de dados as cobre; os limites horários e semanais da conta são compartilhados com todos os outros usuários que optaram por participar; e seus próprios provedores configurados ainda são tentados primeiro. Ative apenas se aceitar essa troca.", - "confirm": "Entendi, usar conexão", - "cancel": "Cancelar" - }, - "consent": { - "title": "Consentimento de IA", - "activeSince": "Concedido em {date}: seus dados de saúde podem ser enviados ao provedor configurado para os recursos de IA.", - "withdraw": "Retirar consentimento", - "confirmBody": "A menos que outro consentimento que você concedeu ainda os cubra, isto para imediatamente: o Coach e os Insights onde usam o acesso de IA que este servidor fornece, e a leitura de documentos com um modelo online. Com sua própria chave ou um modelo local, o Coach e os Insights continuam funcionando. A menos que outro consentimento ainda cubra os Insights, as notas que um modelo escreveu para você são excluídas: notas de status, o resumo diário, resumos de período escritos pelo modelo, linhas de chegada e notas de treino. Suas conversas com o Coach, o que ele lembrou, seus planos e os resumos dos seus documentos permanecem, e você mesmo pode lê-los ou excluí-los.", - "confirmWithdraw": "Retirar", - "grantError": "O consentimento não pôde ser salvo. Tente novamente.", - "error": "A retirada não pôde ser salva. Tente novamente.", - "documentReading": { - "title": "Consentimento para leitura de documentos", - "activeSince": "Concedido em {date}: documentos, exames digitalizados e textos de medicamentos podem ir ao seu serviço de IA para leitura.", - "confirmBody": "Documentos, exames digitalizados e descrições de medicamentos não são mais enviados para leitura. Nada que você já tem é excluído." - }, - "activeSinceNamed": "Concedido em {date}: seus dados de saúde podem ir para {providers} para os recursos de IA.", - "activeUndated": "Concedido: seus dados de saúde podem ser enviados ao provedor configurado para os recursos de IA.", - "request": { - "title": "Seu acordo antes de a IA começar", - "body": "A IA neste servidor roda em um serviço fornecido pela administração: {providers}. Nada dos seus registros vai para lá até você concordar.", - "data": "Depois que você concordar, o HealthLog envia ao serviço o que os recursos de IA precisam: leituras como peso, pressão arterial, pulso, sono e atividade; seus medicamentos; humor; valores de exames e registros do ciclo, se você os mantiver; o que você escreve no perfil e ao Coach; e documentos que você escolher ter lidos. O serviço os usa para escrever seu resumo diário, as notas sobre suas leituras e as respostas do Coach.", - "withdrawHint": "Você pode retirar seu acordo a qualquer momento em Configurações, IA. Nada mais é enviado a partir desse momento.", - "agree": "Concordar", - "dismiss": "Agora não" - } - }, - "operatorOff": { - "allTitle": "A IA está desativada neste servidor", - "allBody": "Quem administra este servidor desativou a IA. O HealthLog continua funcionando com todos os seus dados; os recursos que precisam de IA simplesmente não são exibidos.", - "someTitle": "Alguns recursos de IA estão desativados neste servidor", - "someBody": "Quem administra este servidor desativou: {switches}. Todo o resto, incluindo todos os seus dados, funciona normalmente.", - "testRefused": "A IA está desativada neste servidor, então não há nada para testar.", - "autoRead": "A leitura de documentos com IA está desativada neste servidor." - }, - "coachConversations": { - "title": "Conversas do Coach", - "description": "Abra uma conversa para lê-la ou exclua-a.", - "more": "Mostrar mais", - "openAll": "Abrir todas as conversas" - }, - "coachPlans": { - "title": "Planos do Coach", - "description": "Os planos que você combinou com o Coach, para ler ou remover.", - "open": "Abrir planos" - }, - "reasoning": { - "label": "Raciocínio", - "hint": "Modelos de raciocínio, como Gemma ou Qwen, pensam antes de responder. Desligado deixa todo o orçamento de resposta para a resposta em si.", - "options": { - "default": "Padrão", - "none": "Desligado", - "low": "Baixo", - "medium": "Médio", - "high": "Alto" - }, - "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.", - "runtimeTitle": "Verificar e atualizar", - "usage": { - "title": "Uso da IA", - "description": "Quanto trabalho de IA roda em segundo plano para você, enquanto o Coach permanece igual em todos os níveis.", - "levels": { - "frugal": { - "label": "Frugal", - "hint": "Os blocos atualizam no máximo uma vez por dia após uma sincronização; resumo diário curto; documentos são lidos apenas quando você pede." - }, - "standard": { - "label": "Padrão", - "hint": "Os blocos atualizam a cada poucas horas após uma sincronização; resumo diário completo." - }, - "full": { - "label": "Completo", - "hint": "Os blocos atualizam até a cada hora após novos dados, como antes desta configuração existir." - } - }, - "limited": "Limitado pela administração do servidor.", - "estimate": "cerca de {tokens} tokens por dia, estimado", - "measured": "Medido: {tokens} tokens por dia nos últimos {days} dias, incluindo o Coach. Os valores por nível são estimativas.", - "noEstimate": "Uma estimativa por nível aparece após três dias de uso da IA.", - "capped": "Você escolheu {choice}, que o servidor não permite no momento, então {level} se aplica. Sua escolha é mantida.", - "followsDefault": "Você segue o padrão do servidor ({level}).", - "useDefault": "Usar o padrão do servidor ({level})", - "saveError": "O nível não pôde ser salvo. Tente novamente." - } + "episodeCard": { + "title": "Consultas sobre isso", + "emptyLine": "Nenhuma consulta vinculada a esta condição ainda.", + "add": "Adicionar uma consulta" }, "dashboard": { - "units": { - "title": "Unidades", - "description": "Escolha como distâncias e velocidades são exibidas nos gráficos e blocos.", - "metric": "Métrico", - "imperial": "Imperial", - "saved": "Preferência de unidade salva", - "saveError": "Não foi possível salvar sua preferência de unidade." - }, - "glucoseUnit": { - "title": "Glicemia", - "description": "Em qual unidade as leituras de glicemia são exibidas. As leituras são armazenadas da mesma forma em ambos os casos.", - "saved": "Unidade de glicose salva", - "saveError": "Não foi possível salvar sua unidade de glicose." + "nextVisit": "Próximo compromisso: {what} em {when}" + }, + "procedures": { + "title": "Procedimentos e cirurgias", + "description": "Todo procedimento e cirurgia que você já fez, do mais recente ao mais antigo.", + "add": "Procedimento", + "searchLabel": "Filtrar por local do corpo", + "searchPlaceholder": "Por exemplo joelho", + "sitesLabel": "Locais do corpo", + "allSites": "Todos", + "count": "{shown} de {total}", + "emptyTitle": "Nenhum procedimento registrado ainda", + "emptyDescription": "Registre uma consulta do tipo Procedimento ou cirurgia, ou altere uma consulta existente para ele.", + "noMatchTitle": "Nada corresponde a este filtro", + "clearFilter": "Limpar filtro", + "loadError": "Não foi possível carregar os procedimentos." + }, + "preparation": {} + }, + "checkups": { + "viewSwitchLabel": "Mostrar check-ups, consultas, procedimentos ou locais do corpo", + "tabVorsorge": "Check-ups", + "tabVisits": "Consultas", + "tabProcedures": "Procedimentos", + "tabBodySites": "Locais do corpo" + }, + "practitioners": { + "title": "Clínicas e médicos", + "description": "Seu próprio catálogo de endereços: digite uma clínica uma vez, escolha em todo lugar.", + "linkLabel": "Catálogo de endereços", + "searchPlaceholder": "Buscar nome, clínica ou especialidade", + "loadError": "Não foi possível carregar o catálogo de endereços.", + "emptyTitle": "Nenhuma entrada ainda", + "emptyDescription": "Adicione uma clínica para poder escolhê-la ao registrar uma consulta.", + "noMatchTitle": "Nenhuma correspondência", + "noMatchDescription": "Nenhuma entrada corresponde a esta busca.", + "createTitle": "Adicionar entrada", + "editTitle": "Editar entrada", + "formDescription": "Apenas o nome é obrigatório.", + "name": "Nome", + "specialty": "Especialidade", + "practice": "Clínica", + "location": "Endereço", + "phone": "Telefone", + "note": "Nota", + "noteHint": "Armazenado criptografado.", + "saveFailed": "Não foi possível salvar a entrada.", + "deleteTitle": "Excluir esta entrada?", + "deleteDescription": "Suas consultas existentes permanecem e mantêm este nome.", + "deleteFailed": "Não foi possível excluir a entrada.", + "noSpecialtyGroup": "Sem especialidade" + }, + "links": { + "picker": { + "add": "Adicionar", + "done": "Concluído", + "selectAll": "Selecionar tudo", + "searchPlaceholder": "Buscar", + "searchNoMatch": "Nenhuma correspondência", + "suggested": "Perto desta data", + "loadError": "Não foi possível carregar a lista.", + "removeNamed": "Remover {name}", + "removed": "Desvinculado {name}", + "linked": "Vinculado", + "loadNewer": "Carregar mais recentes", + "loadOlder": "Carregar mais antigos", + "period": { + "showing": "Mostrando {period}" } }, - "withings": "Withings", - "withingsDescription": "Conecte sua balança e monitor de pressão arterial Withings para sincronizar peso, composição corporal e pressão arterial automaticamente.", - "withingsCredentials": "Credenciais de API", - "withingsClientId": "ID do cliente", - "withingsClientSecret": "Segredo do cliente", - "withingsCredentialsSaved": "Credenciais salvas", - "withingsCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "withingsCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "withingsSaveCredentials": "Salvar", - "configured": "Configurado", - "withingsSync": "Sincronizar agora", - "withingsFullSync": "Sincronizar todos os dados", - "withingsFullSyncTitle": "Sincronização completa?", - "withingsFullSyncDescription": "Todos os dados disponíveis da Withings serão totalmente sincronizados. Isso pode levar algum tempo, dependendo do seu histórico.", - "withingsSyncResult": "{count} medições sincronizadas", - "syncOutcome": { - "empty": "Nada novo para importar. Tudo está atualizado.", - "failed": "Nada foi salvo. A próxima execução tenta novamente.", - "partial": "{count} medições sincronizadas. Alguns dados não puderam ser salvos; a próxima execução tenta novamente." - }, - "withingsFullSyncResult": "{count} medições totalmente sincronizadas", - "withingsSyncFailed": "Falha na sincronização", - "withingsOauthConnected": "Withings conectado. A primeira sincronização começa em segundo plano.", - "withingsOauthFailed": "Falha na conexão com a Withings", - "withingsOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "replay": "Este link de confirmação já foi usado. Inicie a conexão novamente.", - "state": "A resposta da Withings não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou. Inicie a conexão novamente e conclua a aprovação em poucos minutos.", - "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 Withings não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da Withings.", - "nocreds": "Nenhuma credencial de API da Withings está armazenada. Salve o ID do cliente e o segredo do cliente primeiro, depois conecte novamente.", - "token": "A troca de token com a Withings falhou. Verifique o ID do cliente e o segredo do cliente e tente novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "withingsSynchronize": "Sincronizar", - "withingsDisconnect": "Desconectar", - "withingsDisconnectTitle": "Desconectar a Withings?", - "withingsDisconnectDescription": "A conexão com a Withings será desconectada. Os dados sincronizados anteriormente serão preservados.", - "withingsConnect": "Conectar com a Withings", - "withingsNoCredentials": "Digite suas credenciais de API acima para conectar a Withings.", - "whoop": "WHOOP", - "whoopDescription": "Conecte sua pulseira WHOOP para sincronizar recuperação, sono, esforço e treinos diretamente no HealthLog.", - "whoopCredentials": "Credenciais de API", - "whoopClientId": "ID do cliente", - "whoopClientSecret": "Segredo do cliente", - "whoopCredentialsSaved": "Credenciais salvas", - "whoopCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "whoopCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "whoopSaveCredentials": "Salvar", - "whoopSync": "Sincronizar agora", - "whoopFullSync": "Sincronizar todos os dados", - "whoopFullSyncTitle": "Sincronização completa?", - "whoopFullSyncDescription": "Todo o histórico disponível da WHOOP será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "whoopSyncResult": "{count} medições sincronizadas", - "whoopSyncFailed": "Falha na sincronização", - "whoopSynchronize": "Sincronizar", - "whoopDisconnect": "Desconectar", - "whoopDisconnectTitle": "Desconectar a WHOOP?", - "whoopDisconnectDescription": "A conexão com a WHOOP será desconectada. Os dados sincronizados anteriormente serão preservados.", - "whoopConnect": "Conectar com a WHOOP", - "whoopNoCredentials": "Digite suas credenciais de API acima para conectar a WHOOP.", - "whoopOauthConnected": "WHOOP conectado. A primeira sincronização começa em segundo plano.", - "whoopOauthFailed": "Falha na conexão com a WHOOP", - "whoopOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta da WHOOP não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 WHOOP não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo da WHOOP.", - "nocreds": "A WHOOP não está configurada. Adicione suas credenciais OAuth da WHOOP acima e tente novamente.", - "token": "A troca de token com a WHOOP falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "fitbit": "Fitbit", - "fitbitTag": "Fitbit e Pixel", - "fitbitDescription": "Conecte o Fitbit para sincronizar seus sinais vitais do Fitbit e do Pixel Watch: peso, frequência cardíaca e mais.", - "fitbitExperimentalBadge": "Experimental", - "fitbitCredentials": "Credenciais de API", - "fitbitClientId": "ID do cliente", - "fitbitClientSecret": "Segredo do cliente", - "fitbitCredentialsSaved": "Credenciais salvas", - "fitbitCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "fitbitCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "fitbitSaveCredentials": "Salvar", - "fitbitSync": "Sincronizar agora", - "fitbitFullSync": "Sincronizar todos os dados", - "fitbitFullSyncTitle": "Sincronização completa?", - "fitbitFullSyncDescription": "Todo o histórico disponível do Fitbit será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "fitbitSyncResult": "{count} medições sincronizadas", - "fitbitSyncFailed": "Falha na sincronização", - "fitbitSynchronize": "Sincronizar", - "fitbitDisconnect": "Desconectar", - "fitbitDisconnectTitle": "Desconectar o Fitbit?", - "fitbitDisconnectDescription": "A conexão com o Fitbit será desconectada. Os dados sincronizados anteriormente serão preservados.", - "fitbitConnect": "Conectar com o Fitbit", - "fitbitNoCredentials": "Digite suas credenciais de API acima para conectar o Fitbit.", - "fitbitOauthConnected": "Fitbit conectado. A primeira sincronização começa em segundo plano.", - "fitbitOauthFailed": "Falha na conexão com o Fitbit", - "googleHealth": "Google Health", - "googleHealthTag": "Fitbit e Pixel", - "googleHealthBetaBadge": "Beta", - "googleHealthDescription": "Conecte Fitbit, Pixel Watch e Fitbit Air pela sua conta Google: peso, frequência cardíaca, sono e atividade. Isso substitui a conexão clássica com o Fitbit, que o Google descontinua em setembro de 2026.", - "googleHealthCredentials": "Credenciais de API", - "googleHealthClientId": "ID do cliente", - "googleHealthClientSecret": "Segredo do cliente", - "googleHealthCredentialsSaved": "Credenciais salvas", - "googleHealthCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "googleHealthCredentialsSavedPlaceholderSecret": "Salvo. Digite novo para substituir", - "googleHealthSaveCredentials": "Salvar", - "googleHealthSync": "Sincronizar agora", - "googleHealthSyncCheckStatus": "Atualizar status", - "googleHealthFullSync": "Sincronizar todos os dados", - "googleHealthFullSyncTitle": "Sincronização completa?", - "googleHealthFullSyncDescription": "Todo o histórico disponível do Google Health será totalmente sincronizado. Isso pode levar algum tempo, dependendo do seu histórico.", - "googleHealthSyncResult": "{count} medições sincronizadas", - "googleHealthSyncFailed": "Falha na sincronização", - "googleHealthSyncInProgress": "Sincronização em andamento: {count} medições salvas, {completed} de {total} áreas processadas.", - "googleHealthResourceFailuresTitle": "Estas áreas ainda precisam de atenção:", - "googleHealthResource": { - "workout": "Treinos", - "sleep": "Sono", - "boundedMetrics": "Medições de saúde", - "activity": "Atividade", - "heartRate": "Frequência cardíaca", - "other": "Outros dados" - }, - "googleHealthReason": { - "collectionFailed": "O Google não pôde fornecer esses dados. Tente sincronizar novamente mais tarde.", - "tokenFailed": "A conexão expirou. Reconecte o Google Health.", - "upsertFailed": "Os dados não puderam ser salvos. Tente sincronizar novamente.", - "rollupFailed": "Os dados foram capturados, mas o resumo ainda não foi atualizado. Tente novamente mais tarde.", - "pageLimit": "Apenas parte do histórico disponível foi processada. Outra sincronização continuará.", - "generic": "Esta área não foi totalmente sincronizada. Tente novamente." - }, - "googleHealthSynchronize": "Sincronizar", - "googleHealthDisconnect": "Desconectar", - "googleHealthDisconnectTitle": "Desconectar o Google Health?", - "googleHealthDisconnectDescription": "A conexão com o Google Health será desconectada. Os dados sincronizados anteriormente serão preservados.", - "googleHealthConnect": "Conectar com o Google", - "googleHealthNoCredentials": "Digite suas credenciais de API acima para conectar o Google Health.", - "googleHealthOauthConnected": "Google Health conectado. A primeira sincronização começa em segundo plano.", - "googleHealthOauthFailed": "Falha na conexão com o Google Health", - "googleHealthOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Google não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 Google não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Google.", - "nocreds": "O Google Health não está configurado. Adicione suas credenciais OAuth do Google acima e tente novamente.", - "token": "A troca de token com o Google falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "fitbitOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Fitbit não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "expired": "A solicitação de conexão expirou antes de ser concluída. Inicie a conexão novamente.", - "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 Fitbit não retornou um código de autorização. Tente novamente e permita o acesso na caixa de diálogo do Fitbit.", - "nocreds": "O Fitbit não está configurado. Adicione suas credenciais OAuth do Fitbit acima e tente novamente.", - "token": "A troca de token com o Fitbit falhou. Inicie a conexão novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "integrations": { - "withings": { - "plan": { - "link": "Sobre os planos de API da Withings", - "items": { - "spo2": "SpO2", - "vascularAge": "idade vascular", - "pulseWaveVelocity": "velocidade da onda de pulso", - "vo2Max": "VO2 máx", - "visceralFat": "gordura visceral", - "skinTemperature": "temperatura da pele", - "ecg": "ECG e fibrilação atrial", - "sleepScore": "pontuação de sono", - "sleepHrv": "VFC durante a noite", - "sleepHeartRate": "frequência cardíaca durante a noite", - "sleepRespiratoryRate": "frequência respiratória durante a noite", - "sleepSpo2": "SpO2 durante a noite", - "bodyTemperature": "temperatura corporal", - "bodyFat": "gordura corporal", - "fatMass": "massa de gordura", - "fatFreeMass": "massa livre de gordura", - "muscleMass": "massa muscular", - "bodyWater": "água corporal", - "boneMass": "massa óssea", - "heartRate": "frequência cardíaca", - "bloodPressure": "pressão arterial", - "weight": "peso" - } - } + "related": { + "title": "Relacionados", + "kind": { + "labResult": "Resultado laboratorial", + "encounter": "Consulta", + "document": "Documento", + "conditionEpisode": "Condição", + "medication": "Medicamento", + "vaccination": "Vacina" }, - "oura": { - "scope": { - "items": { - "vo2max": "VO2 máx", - "cardio_age": "idade cardiovascular", - "resilience": "resiliência" - } - } - } - }, - "integrationPill": { - "connected": "Conectado", - "errorReconnect": "Erro: reconectar", - "warningServerError": "Falha na sincronização", - "failureCount": "{count}/{threshold}", - "parkedReconnect": "Pausado: reconectar", - "notConnected": "Não conectado", - "justNow": "agora mesmo", - "minutesAgo": "há {count} min", - "hoursAgo": "há {count} h", - "daysAgo": "há {count} d", - "resumeSuccess": "Integração retomada", - "resumeError": "Falha ao reconectar", - "stale": "Conectado, sem dados recentes", - "stalled": "Sincronização parada", - "pendingSetup": "Aguardando primeiros dados" - }, - "integrationFreshness": { - "title": "Dados recebidos", - "summary": "{count} tipos de dados, mais recente {relative}", - "quiet": "{count} sem atividade", - "workouts": "Treinos", - "medicationDoses": "Doses de medicamentos" - }, - "integrationFallback": { - "description": "Configurado nesta conta sem um cartão de configurações próprio." - }, - "withingsViewData": "Ver suas medições", - "whoopViewData": "Ver sua recuperação", - "fitbitViewData": "Ver seu sono", - "googleHealthViewData": "Ver seus passos", - "apiTokens": "Tokens de API", - "apiTokensDescription": "Revise e revogue tokens para medições, treinos, documentos e doses de medicamentos.", - "measurementsToken": { - "title": "Tokens de medição", - "description": "Gere um token para que uma balança, uma ponte de relógio ou sua automação residencial possa adicionar leituras.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novas leituras ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. As leituras são marcadas como vindas de um dispositivo externo, para você distingui-las depois, e você ainda pode corrigi-las você mesmo.", - "createFailed": "O token não pôde ser criado. Tente novamente.", - "namePlaceholder": "Nome, ex.: Home Assistant" - }, - "workoutsToken": { - "title": "Tokens de treino", - "description": "Gere um token para que uma ponte de relógio ou um script de sincronização possa adicionar seus treinos.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novos treinos ao seu próprio registro. Não pode ler seus dados, alterar ou excluir nada, nem criar outro token. Os treinos que ele adiciona são marcados como vindos de um dispositivo externo e, quando seu celular registrou a mesma sessão, você vê a cópia do celular.", - "createFailed": "O token não pôde ser criado. Tente novamente.", - "namePlaceholder": "Nome, ex.: Garmin" - }, - "documentsToken": { - "title": "Tokens de documento", - "description": "Gere um token para que o Paperless-ngx, o Papra ou o script de importação possa adicionar documentos ao seu cofre.", - "detail": "O token é exibido uma vez.", - "scopeNote": "Ele só pode adicionar novos documentos ao seu próprio cofre. Não pode listar, abrir, baixar, alterar ou excluir nada, nem criar outro token. O que ele recebe de volta é se um arquivo foi armazenado, não como você o arquivou.", - "createFailed": "O token não pôde ser criado. Tente novamente.", - "namePlaceholder": "Nome, ex.: Paperless-ngx" - }, - "tokenMintMovedDescription": "Os tokens são emitidos onde se aplicam: acima para medições, treinos e documentos, ou no endpoint de API próprio de um medicamento, para aquele medicamento específico.", - "tokenCreated": "Token criado. Copie-o agora! Ele não será exibido novamente.", - "tokenCopy": "Copiar token", - "tokenCopied": "Token copiado para a área de transferência", - "tokenCopyFailed": "Não foi possível copiar o token", - "tokenRevokeFailed": "Não foi possível revogar o token. Tente novamente.", - "tokenRevoke": "Revogar token?", - "tokenRevokeAction": "Revogar token", - "tokenRevokeDescription": "O token será desativado permanentemente. Os aplicativos que o usam perderão acesso.", - "tokenRevoked": "Revogado", - "tokenExpired": "Expirado", - "tokenActive": "Ativo", - "activeTokensTitle": "Tokens ativos", - "revokedTokensTitle": "Tokens revogados ({count})", - "tokenTableName": "Nome", - "tokenTablePermissions": "Permissões", - "tokenTableStatus": "Status", - "tokenTableCreated": "Criado", - "tokenTableLastUsed": "Último uso", - "tokenTableActions": "Ações", - "noActiveTokens": "Nenhum token ativo disponível.", - "tokenNeverUsed": "Nunca", - "apiEndpointsTitle": "Endpoints de API", - "apiEndpointsDescription": "Visão geral dos endpoints externos disponíveis atualmente para ingestão baseada em tokens.", - "apiEndpointMethod": "Método", - "apiEndpointPath": "Caminho", - "apiEndpointAuth": "Autenticação", - "apiEndpointExample": "Exemplo de corpo", - "dangerZone": "Excluir todos os dados", - "dangerZoneDescription": "Apaga todo o seu registro de saúde e todas as conexões de integração.", - "dangerZoneConfirm": "Excluir todos os dados?", - "dangerZoneConfirmDescription": "Isso exclui permanentemente tudo no seu registro: medições, medicamentos, registros de humor, resultados de exames, registros de ciclo, documentos, conversas de IA e todas as conexões de integração, junto com tudo derivado deles e qualquer coisa que você tenha excluído antes. Os links de compartilhamento que você deu a um médico param de funcionar imediatamente. Sua conta permanece, junto com as credenciais que você usa para entrar e as configurações de exibição, como idioma, fuso horário e unidades. Não é possível desfazer.", - "dangerZoneSuccess": "Seu registro de saúde foi excluído. Sua conta e seu login permanecem inalterados.", - "dangerZoneDeleteFailed": "Falha na exclusão", - "finalDelete": "Excluir permanentemente", - "deleteAccountCardTitle": "Excluir conta por completo", - "deleteAccountCardDescription": "Exclui sua conta junto com chaves de acesso, log de auditoria e sessões.", - "deleteAccountCta": "Excluir conta", - "deleteAccountConfirmTitle": "Excluir conta permanentemente?", - "deleteAccountConfirmDescription": "Sua conta, todos os dados de saúde, chaves de acesso, sessões e registros de auditoria serão excluídos permanentemente. Você será desconectado imediatamente depois.", - "deleteAccountSuccess": "Conta excluída. Desconectando você.", - "deleteAccountFailed": "Não foi possível excluir a conta", - "deleteAccountFinal": "Excluir permanentemente", - "saved": "Salvo", - "savingError": "Erro ao salvar", - "about": { - "version": "Versão do aplicativo", - "gitSha": "Build", - "builtAtLabel": "Compilado em", - "license": "Licença", - "repository": "Código-fonte", - "changelog": "Changelog", - "docs": "Documentação", - "credits": "Créditos e atribuições de dados", - "linksHeading": "Fontes e documentação", - "newerAvailable": "Versão mais recente: {tag}", - "support": { - "title": "Suporte", - "description": "Um resumo para relatório de bug, sem seu nome, e-mail ou valores de saúde.", - "copy": "Copiar informações de suporte", - "copied": "Copiado", - "copyFailed": "Não foi possível montar as informações de suporte." - } - }, - "testConnection": { - "test": "Testar conexão", - "saveFirst": "Salve suas alterações primeiro. O teste usa as configurações salvas.", - "testing": "Testando…", - "ok": "Conectado (latência {latency} ms)", - "errors": { - "credentials_rejected": "Credenciais rejeitadas. Verifique seu token", - "rate_limited": "Taxa limitada pelo upstream", - "timeout": "A solicitação expirou", - "upstream_error": "O upstream retornou um erro", - "upstream_rejected": "O outro lado recusou a mensagem", - "connection_failed": "Falha na conexão", - "not_configured": "Não configurado", - "url_not_public": "A URL não é um endpoint público", - "private_origin_not_approved": "Destino em rede privada. A administração precisa listar esta origem em NOTIFICATION_PRIVATE_ORIGINS", - "private_origin_not_grantable": "Este endereço é link-local, de metadados ou não especificado; nenhuma autorização da administração pode abri-lo. Use o endereço em que o relay escuta", - "url_invalid": "URL inválida", - "redirected": "O endpoint redireciona. Verifique a URL", - "endpoint_not_found": "Endpoint não encontrado na URL", - "credentials_unreadable": "As credenciais não podem ser descriptografadas", - "upstream_invalid_json": "O upstream enviou um JSON inválido", - "vapid_not_configured": "Web Push não configurado (chaves VAPID ausentes)", - "rate_limited_self": "Solicitações de teste demais", - "generic": "Teste falhou" - } - }, - "notificationStatus": { - "title": "Status de entrega", - "description": "Estado de cada canal; “Desativado automaticamente” significa que as tentativas pararam após erros permanentes.", - "emptyDescription": "Configure um canal em Configurações › Integrações › Canais de entrega.", - "stateActive": "Ativo", - "stateAutoDisabled": "Desativado automaticamente", - "stateSendingPaused": "Envio pausado", - "stateManuallyDisabled": "Desativado", - "lastSuccess": "Último envio bem-sucedido", - "lastFailure": "Última falha", - "consecutiveFailures": "Falhas consecutivas", - "disabledReason": "Motivo", - "nextRetry": "Próxima tentativa", - "reEnable": "Reativar", - "sendTest": "Enviar teste", - "emptyTitle": "Nenhum canal configurado ainda" - }, - "identity": { - "description": "Detalhes opcionais para a exportação do registro de saúde (capa do PDF + exportação FHIR). Todos os campos são opcionais.", - "fullName": "Nome completo", - "fullNamePlaceholder": "ex.: Maria Silva", - "insurer": "Plano de saúde", - "insurerPlaceholder": "ex.: Unimed", - "insuranceNumber": "Número do plano (KVNR)", - "insuranceNumberHint": "10 caracteres: uma letra + nove dígitos (ex.: A123456780)." - }, - "healthRecord": { - "title": "Exportar registro de saúde", - "description": "Um registro completo para o seu médico: em PDF, em FHIR ou ambos.", - "format": "Formato", - "format_pdf": "PDF", - "format_fhir": "Estruturado (FHIR)", - "format_package": "Pacote: PDF + FHIR", - "range": "Período", - "range90": "Últimos 90 dias", - "range180": "Últimos 6 meses", - "range365": "Últimos 12 meses", - "practiceName": "Clínica (opcional)", - "practiceNamePlaceholder": "ex.: Dr. Silva", - "includedData": "Dados incluídos", - "includeCharts": "Incluir gráficos de tendência (somente PDF)", - "fhirNote": "A saída estruturada segue o padrão FHIR R4 (compatível com ePA).", - "generate": "Gerar", - "documentsLink": "Documentos deste período", - "range30": "Últimos 30 dias", - "rangeCustom": "Período personalizado", - "rangeCustomStart": "De", - "rangeCustomEnd": "Até", - "errorGeneric": "A exportação não pôde ser gerada. Tente novamente.", - "errorRateLimit": "Você atingiu o limite de exportações desta hora.", - "errorModuleDisabled": "A exportação do registro de saúde está desativada para esta conta.", - "visitOffer": "Uma consulta está prevista em {when}: {what}.", - "visitOfferApply": "Relatar até então" - }, - "globalExcludedInjectionSitesLabel": "Locais de injeção excluídos globalmente", - "globalExcludedInjectionSitesHint": "Nunca oferecidos e rejeitados ao registrar uma dose, mesmo que um medicamento prefira-os.", - "sharing": { - "createTitle": "Novo link de compartilhamento", - "createDescription": "O link é somente leitura e tem prazo limitado.", - "label": "Rótulo", - "labelPlaceholder": "ex.: Dr. Silva, check-up anual", - "range": "Dias de histórico", - "rangeHint": "Até onde a janela compartilhada alcança.", - "expiry": "Expira em (dias)", - "expiryHint": "No máximo {max} dias.", - "expiryInvalid": "A validade deve estar entre 1 e {max} dias.", - "create": "Criar link", - "tokenCreated": "Link de compartilhamento criado", - "copied": "Copiado para a área de transferência", - "activeTitle": "Links ativos", - "noActive": "Nenhum link de compartilhamento ativo.", - "created": "Criado", - "expires": "Expira", - "accessCount": "Visualizações", - "revoke": "Revogar", - "revokeDescription": "Revogue este link imediatamente. Qualquer pessoa que o tenha perde acesso na hora. Não é possível desfazer.", - "statusActive": "Ativo", - "statusRevoked": "Revogado", - "statusExpired": "Expirado", - "inactiveTitle": "Revogados e expirados ({count})", - "shownOnce": "Exibido apenas uma vez. Capture o código QR e a frase-senha agora; nenhum dos dois pode ser recuperado depois.", - "qrAlt": "Código QR contendo o link de compartilhamento e a frase-senha", - "linkLabel": "Link", - "passphraseLabel": "Frase-senha", - "passphraseHint": "O destinatário precisa do link e desta frase-senha. O código QR contém ambos.", - "copyLink": "Copiar link", - "copyPassphrase": "Copiar frase-senha", - "protected": "Frase-senha", - "attachTitle": "Anexar documentos", - "attachButton": "Escolher documentos", - "attachCount": "{count} de {max} selecionados", - "attachFrozen": "O conjunto de documentos fica fixo quando você cria o link. Documentos não podem ser adicionados ou removidos depois.", - "attachRemove": "Remover {title}", - "exifNote": "Os metadados da câmera (EXIF/GPS) são removidos de imagens JPEG, PNG e WebP ao compartilhar. Arquivos PDF, TIFF, HEIC e Office passam inalterados.", - "documentCount": "Documentos anexados: {count}", - "qrScanTitle": "Escaneie para abrir em outro dispositivo", - "qrScanHint": "Aponte a câmera de um celular para o código para abrir o registro compartilhado. A frase-senha já está incluída.", - "pickerTitle": "Anexar documentos", - "pickerDescription": "Pesquise no seu cofre e selecione documentos para compartilhar. Até {max}.", - "pickerSearch": "Pesquisar documentos", - "pickerEmpty": "Nenhum documento encontrado.", - "pickerDone": "Concluído", - "pickerSelectedCount": "{count} de {max} selecionados", - "pickerMaxReached": "Você atingiu o máximo de {max} documentos.", - "scopeTitle": "O que este link contém", - "scopeInsuranceExcluded": "Os detalhes do plano nunca são compartilhados por um link.", - "statusNeedsReselect": "Escolha o conteúdo novamente", - "reselectReason": "Este link atendia a um escopo que nunca foi escolhido, então foi encerrado. Crie um novo e escolha o que ele deve conter.", - "reselectAction": "Criar um substituto", - "createDetail": "O token é exibido uma vez na criação. Guarde-o então; não pode ser recuperado.", - "activeDescription": "Links que você compartilhou, quando expiram e com que frequência foram abertos." - }, - "genderOther": "Outro", - "nightscout": "Nightscout", - "nightscoutTag": "MCG", - "nightscoutDescription": "Conecte seu próprio site Nightscout para sincronizar leituras contínuas de glicose no painel de glicose.", - "nightscoutViewData": "Ver sua glicose", - "nightscoutUrl": "URL do Nightscout", - "nightscoutUrlSavedPlaceholder": "Salvo. Digite uma nova URL para substituí-la", - "nightscoutToken": "Token de API", - "nightscoutTokenOptional": "Opcional para um site público", - "nightscoutTokenSavedPlaceholder": "Salvo. Digite um novo token para substituí-lo", - "nightscoutTokenHelp": "Cole um token de acesso das ferramentas administrativas do seu Nightscout. Deixe em branco se seu site for publicamente legível.", - "nightscoutPrivateOperatorTitle": "O acesso privado ao Nightscout exige aprovação da administração do servidor.", - "nightscoutPrivateOperatorDescription": "Peça ao administrador do servidor para aprovar esta origem exata do Nightscout.", - "nightscoutConnect": "Conectar", - "nightscoutUpdate": "Salvar alterações", - "nightscoutConnected": "Nightscout conectado.", - "nightscoutConnectFailed": "Não foi possível conectar ao Nightscout.", - "nightscoutSync": "Sincronizar agora", - "nightscoutSyncResult": "{count} medições sincronizadas", - "nightscoutSyncFailed": "Falha na sincronização", - "nightscoutDisconnect": "Desconectar", - "nightscoutDisconnectTitle": "Desconectar o Nightscout?", - "nightscoutDisconnectDescription": "As sincronizações futuras param. As leituras de glicose já importadas permanecem no seu histórico.", - "polar": "Polar", - "polarDescription": "Conecte sua conta Polar para sincronizar a recuperação Nightly Recharge, estágios de sono, atividade diária e sessões de treino.", - "polarViewData": "Ver seu sono e recuperação", - "polarCredentials": "Credenciais de API", - "polarClientId": "ID do cliente", - "polarClientSecret": "Segredo do cliente", - "polarCredentialsSaved": "Credenciais salvas", - "polarCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "polarSaveCredentials": "Salvar", - "polarUnavailable": "A Polar não está configurada neste servidor. Adicione suas próprias credenciais OAuth da Polar acima ou peça ao administrador para configurar o aplicativo compartilhado.", - "polarConnect": "Conectar a Polar", - "polarSync": "Sincronizar agora", - "polarSyncResult": "{count} medições sincronizadas", - "polarSyncFailed": "Falha na sincronização", - "polarDisconnect": "Desconectar", - "polarDisconnectTitle": "Desconectar a Polar?", - "polarDisconnectDescription": "As sincronizações futuras param. As leituras já importadas permanecem no seu histórico.", - "polarOauthConnected": "Polar conectada. A primeira sincronização começa em segundo plano.", - "polarOauthFailed": "Falha na conexão com a Polar", - "polarOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta da Polar não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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.", - "rate_limited": "Tentativas de conexão demais. Espere um momento e tente novamente.", - "generic": "Erro desconhecido ao conectar. Inicie a conexão novamente." - }, - "oura": "Oura", - "ouraDescription": "Conecte sua conta Oura para sincronizar prontidão, estágios de sono, variabilidade da frequência cardíaca e atividade diária.", - "ouraViewData": "Ver seu sono e recuperação", - "ouraCredentials": "Credenciais de API", - "ouraClientId": "ID do cliente", - "ouraClientSecret": "Segredo do cliente", - "ouraCredentialsSaved": "Credenciais salvas", - "ouraCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "ouraSaveCredentials": "Salvar", - "ouraUnavailable": "A Oura não está configurada neste servidor. Adicione suas próprias credenciais OAuth da Oura acima ou peça ao administrador para configurar o aplicativo compartilhado.", - "ouraConnect": "Conectar a Oura", - "ouraSync": "Sincronizar agora", - "ouraSyncResult": "{count} medições sincronizadas", - "ouraSyncFailed": "Falha na sincronização", - "ouraDisconnect": "Desconectar", - "ouraDisconnectTitle": "Desconectar a Oura?", - "ouraDisconnectDescription": "As sincronizações futuras param. As leituras já importadas permanecem no seu histórico.", - "ouraOauthConnected": "Oura conectada. A primeira sincronização começa em segundo plano.", - "ouraOauthFailed": "Falha na conexão com a Oura", - "ouraOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta da Oura não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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.", - "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." - }, - "integrationSetupGuide": "Guia de configuração", - "coach": { - "activate": { - "title": "Ativar Coach", - "description": "Exibir o botão e o painel do Coach.", - "toggleAria": "Ativar o botão e o painel do Coach", - "savedOn": "Coach ativado.", - "savedOff": "Coach oculto.", - "saveError": "Não foi possível salvar a alteração. Tente novamente." + "via": { + "encounter": "por meio de uma consulta", + "efficacyTarget": "por meio do alvo de eficácia" }, - "memory": { - "edit": "Editar", - "source": { - "user": "de você", - "coach": "do Coach" - } - } - }, - "integrationRedirectGuide": { - "intro": "Esta conexão usa seu próprio aplicativo de desenvolvedor {provider}; leva cerca de 5 minutos para configurar:", - "step1": "Crie um aplicativo no portal de desenvolvedores {provider}.", - "step2": "Defina a URL de redirecionamento/callback dele para:", - "step3": "Cole o ID do cliente e o segredo do cliente que ele fornece acima." - }, - "security": { - "sessionsTitle": "Sessões ativas", - "sessionsDescription": "Dispositivos e navegadores atualmente conectados à sua conta.", - "sessionsLoadError": "As sessões ativas não puderam ser carregadas.", - "sessionsEmpty": "Nenhuma sessão ativa.", - "currentSession": "Este dispositivo", - "lastActive": "Última atividade em {time}", - "unknownLocation": "Local desconhecido", - "revokeSession": "Sair", - "revokeError": "Não foi possível concluir a solicitação. Tente novamente.", - "signOutEverywhere": "Sair em todos os outros lugares", - "signOutEverywhereDone": "Desconectadas {count} outra(s) sessão(ões)", - "activityTitle": "Atividade de segurança", - "activityDescription": "Entradas recentes, alterações de segurança e exportações de dados na sua conta.", - "activityEmpty": "Nenhuma atividade de segurança ainda.", - "activityLoadError": "A atividade de segurança não pôde ser carregada.", - "action": { - "newDevice": "Entrada em novo dispositivo", - "loginFailed": "Entrada falhou", - "login": "Entrada", - "passwordChange": "Senha alterada", - "mfa": "Alteração de dois fatores", - "sessionRevoke": "Sessão encerrada", - "token": "Alteração de token de API", - "accountDelete": "Conta excluída", - "dataClear": "Dados redefinidos", - "export": "Exportação de dados", - "other": "Evento de segurança" + "pick": { + "conditionEpisode": "Condições", + "document": "Documentos", + "encounter": "Consultas", + "medication": "Medicamentos", + "vaccination": "Vacinas" }, - "active": "Ativo", - "inactive": "Inativo", - "stepUpRequired": "Pela sua segurança, entre novamente para alterar seu segundo fator.", - "useRecoveryCode": "Use um código de recuperação em vez disso", - "useAuthenticator": "Use seu aplicativo autenticador em vez disso", - "totp": { - "title": "Aplicativo autenticador", - "description": "Use um código baseado em tempo de um aplicativo autenticador como seu segundo fator.", - "setUp": "Configurar", - "step1": "Escaneie o código QR com seu aplicativo autenticador ou digite o segredo manualmente.", - "step2": "Digite o código de 6 dígitos que o aplicativo exibe para confirmar.", - "qrAlt": "Código QR para configuração do aplicativo autenticador", - "qrUnavailable": "Código QR indisponível", - "manualEntry": "Ou digite este segredo manualmente", - "enterCode": "Digite o código de 6 dígitos", - "verify": "Verificar", - "setupFailed": "Não foi possível iniciar a configuração. Tente novamente.", - "invalidCode": "Esse código não é válido. Tente novamente.", - "disable": "Desativar", - "disableTitle": "Desativar autenticação de dois fatores", - "disableConfirm": "Digite um código atual para desligar seu segundo fator. Isso também exclui seus códigos de recuperação.", - "currentCode": "Código atual", - "disableFailed": "Não foi possível desativar o segundo fator." - }, - "recovery": { - "saveNow": "Salve estes códigos de recuperação agora", - "saveNowHint": "Cada código funciona uma vez. Eles são exibidos apenas desta vez. Guarde-os em um lugar seguro. Se você perder seu autenticador, um código de recuperação é a única forma de voltar.", - "download": "Baixar", - "remainingOne": "{count} código de recuperação restante.", - "remainingOther": "{count} códigos de recuperação restantes.", - "regenerate": "Gerar códigos novamente", - "regenFailed": "Não foi possível gerar os códigos de recuperação novamente.", - "savedIt": "Eu os salvei", - "regenerateTitle": "Gerar códigos de recuperação novamente?", - "regenerateConfirm": "Isso substitui seus códigos de recuperação atuais. Seus códigos existentes param de funcionar imediatamente, e um novo conjunto é exibido apenas uma vez." - }, - "keys": { - "title": "Chaves de segurança", - "description": "Registre uma chave de segurança de hardware ou plataforma como segundo fator.", - "empty": "Nenhuma chave de segurança registrada ainda.", - "add": "Adicionar chave de segurança", - "addFailed": "Não foi possível registrar a chave de segurança.", - "rename": "Renomear", - "renameFailed": "Não foi possível renomear a chave de segurança.", - "remove": "Remover chave de segurança", - "removeFailed": "Não foi possível remover a chave de segurança.", - "removeConfirm": "Esta chave de segurança deixará de funcionar como segundo fator.", - "lastUsed": "Último uso em {date}", - "neverUsed": "Nunca usada", - "added": "adicionada em {date}", - "nameLabel": "Nome da chave de segurança" - }, - "passkeyNudge": { - "title": "Adicione uma chave de acesso para entrar mais rápido", - "body": "As chaves de acesso permitem entrar com sua digital, rosto ou PIN do dispositivo, sem senha para lembrar." - }, - "trustedDevices": { - "title": "Dispositivos confiáveis", - "description": "Navegadores que você escolheu confiar pulam o segundo fator por 30 dias. A senha ainda é exigida. Revogue qualquer um que não reconheça.", - "loadError": "Não foi possível carregar os dispositivos confiáveis.", - "revokeError": "Não foi possível revogar o dispositivo. Tente novamente.", - "revoke": "Revogar", - "revokeAll": "Esquecer todos os dispositivos", - "revokeAllDone": "{count} dispositivo(s) confiável(is) esquecido(s)", - "unnamed": "Dispositivo desconhecido", - "current": "Este dispositivo", - "expires": "Confiável até {date}", - "revokeConfirmTitle": "Parar de confiar neste dispositivo?", - "revokeConfirmBody": "Ele pedirá seu segundo fator novamente na próxima vez que você entrar por ele.", - "revokeAllConfirmTitle": "Parar de confiar em todos os dispositivos?", - "revokeAllConfirmBody": "Todos os dispositivos pedirão seu segundo fator novamente na próxima vez que você entrar por eles, incluindo este." - }, - "revokeSessionConfirmTitle": "Desconectar este dispositivo?", - "revokeSessionConfirmBody": "{device} precisará entrar novamente. Nada registrado nele é afetado.", - "signOutEverywhereConfirmTitle": "Desconectar todos os outros dispositivos?", - "signOutEverywhereConfirmBody": "Todos os outros dispositivos, todos os assistentes de IA conectados e todos os tokens de API precisarão entrar ou ser configurados novamente. Este dispositivo permanece conectado. Nada que você tenha registrado é afetado.", - "signOutEverywhereShareLinks": "Também encerrar os links de compartilhamento com médicos", - "signOutEverywhereInvites": "Convites para o seu registro que ninguém aceitou ainda são retirados. Pessoas que já aceitaram mantêm o acesso; você pode encerrá-lo depois.", - "signOutEverywhereInvitesDone": "Retirados {count} convite(s) que ninguém havia aceitado.", - "grantsKeptTitle": "Estas pessoas ainda podem ver seu registro", - "grantsKeptBody": "Sair não encerra o acesso que você deu a alguém. Encerre aqui se você não o deu ou não quer mais que a pessoa tenha." - }, - "privacy": { - "encryption": { - "title": "Criptografado em repouso", - "summary": "Seus dados sensíveis são criptografados em repouso com {algorithm} em {columns} campos em {models} tipos de registro.", - "statement": "Seus dados sensíveis são criptografados em repouso com AES-256-GCM." - }, - "stored": { - "title": "O que é armazenado", - "measurements": "Medições: peso, pressão arterial, pulso e todos os outros valores que você ou um dispositivo registram", - "integrations": "Tokens de integração (criptografados)", - "security": "Conta e atividade de segurança (sessões, log de entrada)", - "profile": "Seu perfil, histórico médico e detalhes do registro de saúde", - "modules": "Registros de cada módulo: {list}" - }, - "retention": { - "title": "Retenção", - "description": "Por quanto tempo os registros com prazo são mantidos antes da limpeza automática.", - "coach": "Conversas do Coach: mantidas por {days} dias", - "audit": "Log de atividade de segurança: mantido por {days} dias", - "delivery": "Log de entrega de notificações: mantido por {days} dias", - "unavailable": "Os detalhes de retenção estão indisponíveis agora." - }, - "export": { - "title": "Baixar meus dados", - "description": "Seus registros em CSV ou JSON, ou um registro de saúde completo para o seu médico.", - "openExport": "Exportar e backup", - "openHealthRecord": "Registro de saúde" - }, - "delete": { - "title": "Excluir ou redefinir", - "description": "Remova sua conta por completo ou apague seus registros de saúde mantendo a conta.", - "backupLag": "A exclusão remove seus dados imediatamente. Se este servidor mantiver backups criptografados fora do host, as cópias dos seus dados são excluídas desse armazenamento logo depois, ou na próxima execução noturna se o armazenamento estiver inacessível.", - "openAdvanced": "Excluir ou redefinir" - }, - "posture": { - "title": "Postura de privacidade", - "description": "Controle quanto dos seus dados é compartilhado com recursos de IA.", - "openAi": "Modo de privacidade da IA" - } - }, - "mcp": { - "enableTitle": "Endpoint MCP remoto", - "enableDescription": "Permita que um assistente compatível com MCP (Claude.ai, ChatGPT) leia seus dados de saúde por um token com escopo.", - "enableToggleLabel": "Ativar o endpoint MCP", - "endpointLabel": "URL do conector", - "connectDescription": "Cole esta URL na configuração de conector personalizado do seu assistente, depois autorize com o token abaixo ou entre quando solicitado.", - "tokensTitle": "Tokens do conector", - "tokensDescription": "Gere um token para conectar um assistente, somente leitura, a menos que você permita registro abaixo.", - "scopeNote": "Novos tokens só podem ler seus próprios registros. O acesso de escrita (health:write) é concedido por token com a chave abaixo. Um token nunca alcança funções administrativas.", - "writeScopeToggleLabel": "Permitir registro (health:write)", - "writeScopeNote": "Adiciona o escopo health:write para que o assistente possa registrar novas medições e registros de humor na sua conta. Cada escrita é confirmada primeiro. O token ainda não pode excluir ou editar entradas existentes, alterar medicamentos ou alcançar funções REST ou administrativas. Deixe desligado para acesso somente leitura.", - "connectionsTitle": "Assistentes conectados", - "connectionsDescription": "Assistentes que você autorizou pelo fluxo de entrada.", - "noConnections": "Nenhum assistente conectado.", - "connectionConnected": "Conectado", - "connectionLastUsed": "Último uso", - "connectionNeverUsed": "Nunca usado", - "connectionRevoke": "Desconectar", - "connectionRevokeDescription": "Desconecta este assistente e revoga o token dele.", - "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" - }, - "strava": "Strava", - "stravaDescription": "Conecte sua conta Strava para sincronizar treinos, distância, ritmo e mais.", - "stravaViewData": "Ver seus treinos", - "stravaCredentials": "Credenciais de API", - "stravaClientId": "ID do cliente", - "stravaClientSecret": "Segredo do cliente", - "stravaCredentialsSaved": "Credenciais salvas", - "stravaCredentialsSavedPlaceholder": "Salvo. Digite novo para substituir", - "stravaSaveCredentials": "Salvar", - "stravaUnavailable": "O Strava não está configurado neste servidor. Adicione suas próprias credenciais OAuth do Strava acima ou peça ao administrador para configurar o aplicativo compartilhado.", - "stravaConnect": "Conectar o Strava", - "stravaSync": "Sincronizar agora", - "stravaSyncResult": "{count} medições sincronizadas", - "stravaSyncFailed": "Falha na sincronização", - "stravaDisconnect": "Desconectar", - "stravaDisconnectTitle": "Desconectar o Strava?", - "stravaDisconnectDescription": "A conexão com o Strava será desconectada. Os dados sincronizados anteriormente serão preservados.", - "stravaOauthConnected": "Strava conectado. A primeira sincronização começa em segundo plano.", - "stravaOauthFailed": "Falha na conexão com o Strava", - "stravaOauthError": { - "csrf1": "A verificação de segurança falhou porque o cookie do navegador estava ausente. Inicie a conexão novamente no mesmo navegador.", - "state": "A resposta do Strava não correspondeu a nenhuma solicitação de conexão aberta. Inicie a conexão novamente.", - "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.", - "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.", - "status": { - "unavailable": "Indisponível neste dispositivo." - }, - "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", - "progress": { - "title": "Progresso da sincronização", - "receivedLabel": "Recebido", - "oldestLabel": "Mais antigo", - "flowing": "Dados chegando", - "waiting": "Aguardando dados" - }, - "delivery": { - "title": "Entrega de dados", - "lastTriggerLabel": "Último gatilho", - "lastBackgroundLabel": "Última sincronização em segundo plano", - "backgroundNever": "Nunca", - "noSyncYet": "Nenhuma sincronização ainda", - "trigger": { - "foreground": "Em primeiro plano", - "background": "Em segundo plano", - "push": "Push", - "unknown": "Desconhecido", - "manual": "Manual" - } - }, - "freshness": { - "title": "Dados recebidos", - "lastReceived": "Último recebido", - "lastNewValue": "Último novo valor", - "lastBackground": "Última sincronização em segundo plano", - "never": "Nunca", - "lastBackfill": "Último preenchimento retroativo" - } - }, - "garminInfo": { - "title": "Garmin", - "body": "Conecte sua conta Garmin para sincronizar treinos, sono e mais.", - "docsLink": "Documentação do Garmin" - }, - "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." - }, - "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.", - "setUpAgain": "Configurar novamente", - "showChecklist": "Mostrar checklist", - "checklistShown": "Checklist exibido", - "checklistNothingHidden": "Nada oculto no checklist" - }, - "documentSources": { - "title": "Fontes de documentos", - "description": "Conecte fontes de documentos ao HealthLog.", - "explainer": "Fontes de documentos alimentam o cofre do HealthLog.", - "systemLabel": "Sistema", - "statusConnected": "Conectado", - "statusNotConnected": "Não conectado", - "connectedSince": "Conectado desde {when}", - "originRemoved": "Origem removida", - "baseUrl": "URL base", - "allowedOrigins": "Origens permitidas", - "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", - "test": "Testar", - "testOk": "OK: {provider}", - "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" - }, - "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." - }, - "passwordTitle": "Senha", - "tokenNameLabel": "Nome do token", - "displayCard": { - "title": "Exibição", - "description": "Escolha como os dados são exibidos no HealthLog." - }, - "integrationCard": { - "state": { - "ok": "OK", - "limited": "Limitado", - "degraded": "Degradado", - "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" - }, - "when": { - "today": "hoje", - "yesterday": "ontem", - "date": "em {date}" - }, - "items": { - "activity": "Atividade", - "sleep": "Sono" - }, - "moreValuesOne": "+ {count} valor", - "moreValuesFew": "+ {count} valores", - "moreValuesOther": "+ {count} valores", - "notConnected": "Não conectado", - "lastData": "Últimos dados: {when}", - "lastDataNone": "Nenhum dado ainda", - "reconnect": "Reconectar", - "resume": "Retomar", - "menuLabel": "Abrir menu da integração", - "menu": { - "credentials": "Credenciais", - "address": "Endereço" - }, - "syncing": "Sincronizando…", - "details": { - "title": "Detalhes", - "none": "Nenhum detalhe ainda", - "state": "Estado", - "since": "Desde", - "lastSync": "Última sincronização", - "lastData": "Últimos dados", - "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" - } - }, - "dawarich": "Dawarich", - "dawarichTag": "Localização", - "dawarichDescription": "Conecte seu próprio site Dawarich para sincronizar o histórico de localização.", - "dawarichUrl": "URL do Dawarich", - "dawarichApiKey": "Chave de API", - "dawarichApiKeyHelp": "Cole uma chave de API das ferramentas administrativas do seu Dawarich.", - "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.", - "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.", - "dawarichHomeSave": "Salvar", - "dawarichHomeSaved": "Local de casa 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.", - "rateLimited": "Solicitações demais. Espere um momento e tente novamente.", - "homePlaceUnknown": "Local de casa desconhecido.", - "notConnected": "Não conectado.", - "generic": "Erro desconhecido ao conectar." + "nothingToOffer": "Nada para vincular ainda.", + "saveError": "Não foi possível salvar o vínculo." } + }, + "bodySites": { + "title": "Locais do corpo", + "description": "Procedimentos e condições por onde no corpo eles ocorrem.", + "loadError": "Não foi possível carregar os locais do corpo.", + "emptyTitle": "Nenhum local do corpo registrado ainda", + "emptyDescription": "Adicione um local do corpo a um procedimento ou condição e ele aparece aqui.", + "sitesLabel": "Locais do corpo", + "sidesLabel": "Lado", + "allSides": "Todos os lados", + "pickPrompt": "Escolha um local para ver o que está arquivado lá.", + "noMatchTitle": "Nada registrado neste lado", + "visitsTitle": "Procedimentos e consultas", + "conditionsTitle": "Condições", + "hiddenDocument": "Um documento não compartilhado com você", + "hiddenLabResult": "Um resultado laboratorial não compartilhado com você", + "hiddenCondition": "Uma condição não compartilhada com você", + "hiddenVisit": "Uma consulta não compartilhada com você", + "linkedLabel": "Registros vinculados", + "conditionSince": "Desde {onset}", + "conditionDates": "{onset} a {resolved}" + }, + "aiRuns": { + "backgroundDocument": "Lendo em segundo plano. Você pode sair desta página; o resultado é salvo junto com o documento.", + "backgroundScan": "Lendo em segundo plano. Com um modelo lento, isso pode levar alguns minutos.", + "waitingForWorker": "Aguardando o worker em segundo plano. Se isso não mudar, o worker do servidor pode não estar em execução.", + "errorWorkerUnavailable": "O worker em segundo plano não está disponível agora. Tente novamente em instantes, ou peça ao operador do servidor para verificá-lo.", + "errorTimedOut": "A leitura demorou mais do que o seu tempo de resposta de IA permite. Tente novamente, ou aumente o tempo de resposta nas configurações de IA." + }, + "symptoms": { + "add": "Novo sintoma", + "nameLabel": "Nome", + "namePlaceholder": "ex.: Aura", + "iconLabel": "Ícone", + "icons": { + "Tag": "Etiqueta", + "Activity": "Atividade", + "Heart": "Coração", + "HeartPulse": "Batimento", + "Brain": "Cérebro", + "Zap": "Raio", + "Flame": "Chama", + "Snowflake": "Floco de neve", + "Droplet": "Gota", + "CircleDot": "Ponto", + "BatteryLow": "Bateria baixa", + "MoonStar": "Lua e estrela", + "PersonStanding": "Pessoa", + "Drama": "Máscaras", + "Frown": "Rosto franzido", + "Cookie": "Biscoito", + "Soup": "Sopa", + "Pill": "Comprimido", + "Thermometer": "Termômetro", + "Stethoscope": "Estetoscópio" + }, + "limitReached": "Você tem 8 sintomas. Oculte um para adicionar outro.", + "saveError": "Não foi possível salvar o sintoma. Tente novamente.", + "nameRequired": "Dê um nome ao sintoma.", + "unreadableLabel": "Sintoma ilegível", + "intensityPill": "{value}/10", + "entry": { + "sheetDescription": "Um dos seus sintomas, quão forte e quando.", + "symptom": "Sintoma", + "symptomRequired": "Escolha um sintoma.", + "intensity": "Intensidade", + "intensityRequired": "Defina quão forte foi.", + "intensityUnset": "Não definido", + "anchorLow": "Nenhum", + "anchorHigh": "O pior imaginável", + "intensityValueText": "{value} de {max} ({low} a {high})", + "when": "Quando", + "during": "Durante uma doença", + "duringNone": "Não vinculado", + "note": "Nota", + "notePlaceholder": "O que mais estava acontecendo?", + "reset": "Redefinir formulário", + "emptyHint": "Adicione seu primeiro sintoma, por exemplo aura ou dor de cabeça.", + "emptyHintNoManage": "Nenhum sintoma foi configurado para este registro ainda.", + "limitHint": "Até {limit} sintomas. Oculte um na página de doenças para adicionar outro." + }, + "section": { + "title": "Seus sintomas", + "log": "Registrar", + "loadError": "Não foi possível carregar seus sintomas.", + "summaryOne": "Uma vez em 30 dias, {max}/10, última {date}", + "summaryFew": "{count} vezes em 30 dias, até {max}/10, última {date}", + "summaryOther": "{count} vezes em 30 dias, até {max}/10, última {date}", + "summaryNoneRecent": "Não nos últimos 30 dias, última {date}", + "summaryNever": "Ainda não registrado", + "menuLabel": "Opções para {symptom}", + "eventMenuLabel": "Opções para esta entrada de {symptom}", + "hide": "Ocultar", + "show": "Mostrar novamente", + "deleteTitle": "Excluir sintoma?", + "deleteBody": "“{symptom}” e todas as suas entradas serão excluídos. Para manter o histórico, oculte-o em vez disso.", + "deleteEventTitle": "Excluir entrada?", + "deleteEventBody": "Esta entrada será excluída.", + "hiddenOne": "Ocultos (1)", + "hiddenFew": "Ocultos ({count})", + "hiddenOther": "Ocultos ({count})", + "recent": "Últimos 30 dias", + "recentEmpty": "Nada registrado nos últimos 30 dias.", + "editEventTitle": "Editar {symptom}", + "editSymptomTitle": "Editar sintoma" + }, + "episode": { + "title": "Sintomas registrados", + "during": "durante {illness}" + } + }, + "day": { + "scoreOfMax": "de {max}", + "cycleDay": "Dia do ciclo {n}", + "cyclePhaseLine": { + "MENSTRUAL": "Dia do ciclo {n}, fase menstrual", + "FOLLICULAR": "Dia do ciclo {n}, fase folicular", + "OVULATORY": "Dia do ciclo {n}, fase ovulatória", + "LUTEAL": "Dia do ciclo {n}, fase lútea" + }, + "previousDay": "Dia anterior", + "nextDay": "Próximo dia", + "close": "Fechar dia", + "hidePanel": "Ocultar dia", + "showPanel": "Mostrar {date}", + "openDay": "Abrir dia", + "viewWholeDay": "Ver o dia inteiro", + "captureForDay": "Adicionar para este dia", + "empty": "Não há entradas para este dia.", + "notShared": "Algumas áreas não são compartilhadas com você.", + "inTimeline": "Na linha do tempo", + "askCoach": "Perguntar ao Coach sobre este dia", + "loadFailed": "Não foi possível carregar este dia.", + "dayOf": "Dia {n} de {m}", + "dayN": "Dia {n}", + "usualRange": "Normalmente {lo} a {hi}", + "groups": { + "scores": "Pontuações", + "running": "Em execução naquele dia", + "values": "Valores", + "happened": "O que aconteceu", + "movement": "Em movimento" + }, + "notable": { + "extremeHigh": "Maior valor diário desde {since}", + "extremeLow": "Menor valor diário desde {since}", + "firstValue": "Primeira leitura deste tipo", + "gap": "Sem leitura por {days} dias" + }, + "previousDayShortcut": "Dia anterior (Alt + seta esquerda)", + "nextDayShortcut": "Próximo dia (Alt + seta direita)", + "captureShort": "Registrar", + "inTimelineShort": "Linha do tempo", + "askCoachPrompt": "O que aconteceu em {date}?", + "coachChips": "Dias nesta resposta", + "description": "Tudo que seus registros contêm para este dia.", + "openDocument": "Abrir documento", + "previousReading": "Antes, {date}", + "sheetExpand": "Expandir para altura total", + "sheetShrink": "Reduzir", + "valuesLegend": "Ponto para este dia, barra para os 30 dias anteriores", + "valuesAllOne": "Todos os valores", + "valuesAllFew": "Todos os {count} valores", + "valuesAllOther": "Todos os {count} valores", + "valuesFewer": "Menos valores", + "countEntriesOne": "1 entrada", + "countEntriesFew": "{count} entradas", + "countEntriesOther": "{count} entradas", + "meanOfReadingsOne": "Média de 1 leitura", + "meanOfReadingsFew": "Média de {count} leituras", + "meanOfReadingsOther": "Média de {count} leituras", + "sinceLastVisit": { + "countOne": "1 entrada", + "countFew": "{count} entradas", + "countOther": "{count} entradas", + "allOne": "Mostrar tudo", + "allFew": "Mostrar tudo ({count})", + "allOther": "Mostrar tudo ({count})", + "fewer": "Mostrar menos", + "note": "Compilado das suas entradas, sem julgamento. Cada data abre o dia inteiro.", + "report": "Relatório médico de {date} até hoje" + }, + "travel": "Fora", + "event": { + "started": "{label} começou", + "ended": "{label} terminou", + "paused": "{label} pausou", + "resumed": "{label} retomou", + "illnessBegan": "{label} começou", + "illnessResolved": "{label} resolveu" + }, + "pickDate": "Escolher uma data", + "pickerTitle": "Ir para um dia", + "today": "Hoje", + "hasEntries": "tem entradas", + "dayNSince": "Dia {n}, desde {date}", + "sinceDate": "Desde {date}", + "movement": { + "total": "Distância", + "driving": "De carro", + "train": "De trem", + "places": "Lugares visitados", + "away": "Fora de casa", + "travel": "Dia de viagem", + "travelYes": "Sim", + "kilometres": "{value} km", + "miles": "{value} mi" + } + }, + "timeline": { + "title": "Linha do tempo", + "subtitle": "O que aconteceu quando, ao lado dos seus valores.", + "standing": "Em curso", + "startUnknown": "início desconhecido", + "zoom": { + "all": "Tudo", + "year": "12 meses", + "quarter": "3 meses", + "range": "Faixa" + }, + "lanes": { + "life": "Vida", + "illness": "Condições", + "allergies": "Alergias", + "medications": "Medicamentos", + "vaccinations": "Vacinas", + "visits": "Médico e procedimentos", + "labs": "Exames", + "documents": "Documentos", + "cycle": "Ciclo" + }, + "readiness": { + "title": "O que sua linha do tempo já contém", + "subtitle": "Um inventário honesto antes de você abri-la.", + "menuEntry": "Cobertura de dados", + "hint": "Faixas vazias permanecem ocultas até que haja algo lá. Módulos que você desligou nunca aparecem. Você encontra esta visão depois em Cobertura de dados na linha do tempo.", + "later": "Depois", + "open": "Abrir linha do tempo", + "verdict": { + "carries": "Já contém.", + "thin": "Ainda fino. Por ora, a linha do tempo mostra majoritariamente seus valores." + }, + "status": { + "carries": "contém", + "thin": "fino", + "empty": "vazio" + }, + "lanes": { + "values": "Valores", + "mood": "Humor", + "environment": "Ambiente", + "life": "Eventos de vida" + }, + "meter": "{carrying} de {total} faixas contêm", + "carriesDetail": "{carrying} de {total} faixas dão uma visão desde {since}.", + "loadFailed": "Não foi possível carregar o inventário.", + "card": { + "title": "O que a linha do tempo já contém", + "summary": "Ela alcança até {since}; {carrying} de {total} faixas já contêm.", + "dismiss": "Ocultar" + }, + "detail": { + "valuesOne": "{count} medição desde {since}", + "valuesFew": "{count} medições desde {since}", + "valuesOther": "{count} medições desde {since}", + "illnessOne": "{count} episódio, {chronic} deles crônico", + "illnessFew": "{count} episódios, {chronic} deles crônicos", + "illnessOther": "{count} episódios, {chronic} deles crônicos", + "allergiesOne": "{count} alergia", + "allergiesFew": "{count} alergias", + "allergiesOther": "{count} alergias", + "medicationsOne": "{count} medicamento, {missingStart} sem data de início", + "medicationsFew": "{count} medicamentos, {missingStart} sem data de início", + "medicationsOther": "{count} medicamentos, {missingStart} sem data de início", + "medicationsDatedOne": "{count} medicamento com data de início", + "medicationsDatedFew": "{count} medicamentos com data de início", + "medicationsDatedOther": "{count} medicamentos com data de início", + "vaccinationsOne": "{count} vacina", + "vaccinationsFew": "{count} vacinas", + "vaccinationsOther": "{count} vacinas", + "visitsOne": "{count} consulta, {procedures} com procedimento", + "visitsFew": "{count} consultas, {procedures} com procedimento", + "visitsOther": "{count} consultas, {procedures} com procedimento", + "visitsPlannedOne": "{count} consulta, apenas planejada", + "visitsPlannedFew": "{count} consultas, apenas planejadas", + "visitsPlannedOther": "{count} consultas, apenas planejadas", + "labsOne": "{count} dia com resultados", + "labsFew": "{count} dias com resultados", + "labsOther": "{count} dias com resultados", + "documentsOne": "{count} documento datado", + "documentsFew": "{count} documentos datados", + "documentsOther": "{count} documentos datados", + "lifeOne": "{count} evento de vida", + "lifeFew": "{count} eventos de vida", + "lifeOther": "{count} eventos de vida", + "cycleOne": "{count} ciclo", + "cycleFew": "{count} ciclos", + "cycleOther": "{count} ciclos", + "moodOne": "{count} entrada desde {since}", + "moodFew": "{count} entradas desde {since}", + "moodOther": "{count} entradas desde {since}", + "environmentOne": "{count} dia com dados de ambiente", + "environmentFew": "{count} dias com dados de ambiente", + "environmentOther": "{count} dias com dados de ambiente", + "empty": "Nenhum ainda" + }, + "gap": { + "valuesEmpty": "Conectar fontes", + "illnessEmpty": "Adicionar um episódio", + "medicationsWithoutStart": "Completar", + "visitsEmpty": "Adicionar uma consulta", + "documentsUndated": "Revisar", + "labsEmpty": "Adicionar um resultado", + "vaccinationsEmpty": "Adicionar vacinas", + "lifeEventsEmpty": "Adicionar" + }, + "gapLine": { + "medicationsWithoutStartOne": "{count} medicamento sem data de início", + "medicationsWithoutStartFew": "{count} medicamentos sem data de início", + "medicationsWithoutStartOther": "{count} medicamentos sem data de início", + "documentsUndatedOne": "{count} documento sem data", + "documentsUndatedFew": "{count} documentos sem data", + "documentsUndatedOther": "{count} documentos sem data", + "valuesEmpty": "Nenhum valor em um período mais longo ainda", + "illnessEmpty": "Nenhuma condição com data de início ainda", + "visitsEmpty": "Nenhuma consulta médica concluída ainda", + "labsEmpty": "Nenhum resultado laboratorial ainda", + "vaccinationsEmpty": "Nenhuma vacina ainda", + "lifeEventsEmpty": "Nenhum evento de vida ainda" + } + }, + "legendSpan": "Período", + "legendEvent": "Evento", + "legendMeanQuarter": "Média trimestral", + "legendMeanMonth": "Média mensal", + "legendMeanWeek": "Média semanal", + "legendThin": "Menos de 3 leituras", + "legendGap": "Pequena lacuna sem medições", + "today": "Hoje", + "noDataYet": "Nenhum dado ainda", + "layers": "Camadas", + "layersLanes": "Faixas", + "zoomLabel": "Faixa de visualização", + "chartLabel": "Linha do tempo de {from} a {to}", + "keyboardHint": "As setas movem a seleção, Home e End saltam para as extremidades, Enter abre o dia.", + "loadFailed": "Não foi possível carregar a linha do tempo.", + "empty": { + "title": "Nada na linha do tempo ainda", + "description": "Entradas datadas aparecem aqui assim que houver algumas." + }, + "values": { + "menuTitle": "Valores sob as faixas", + "trigger": "Valores ({count})", + "noneInWindow": "Nenhum valor nesta faixa", + "series": { + "BLOOD_PRESSURE_SYS": "Pressão arterial sistólica", + "BLOOD_PRESSURE_DIA": "Pressão arterial diastólica" + }, + "noValue": "sem valor", + "bloodPressure": "Pressão arterial", + "readingsOne": "1 leitura", + "readingsFew": "média de {count} leituras", + "readingsOther": "média de {count} leituras" + }, + "table": { + "caption": "Entradas da linha do tempo", + "lane": "Faixa", + "entry": "Entrada", + "start": "Início", + "end": "Fim", + "seriesCaption": "Médias de valores por período", + "period": "Período" + }, + "selection": { + "empty": "Nenhuma entrada neste período", + "since": "desde {date}", + "range": "{from} a {to}", + "mean": "Ø {values}", + "week": "Semana de {date}", + "hintClick": "Clique em um ponto no tempo para vê-lo aqui", + "hintTap": "Toque em um ponto no tempo para vê-lo aqui" + }, + "chronicle": { + "months": "Meses", + "years": "Anos", + "groupingLabel": "Agrupamento", + "empty": "Nenhuma entrada de {from} a {to}", + "emptySingle": "Nenhuma entrada em {period}", + "ended": "{label} terminou", + "afterDaysOne": "após 1 dia", + "afterDaysFew": "após {count} dias", + "afterDaysOther": "após {count} dias", + "notable": { + "extremeHigh": "Maior valor em muito tempo", + "extremeLow": "Menor valor em muito tempo", + "firstValue": "Primeiro valor de uma medição", + "gap": "Uma lacuna mais longa nos valores" + }, + "notableMeta": "Abra o dia para detalhes" + }, + "standingAllergiesOne": "{count} alergia", + "standingAllergiesFew": "{count} alergias", + "standingAllergiesOther": "{count} alergias", + "legendMeanDay": "Média diária", + "range": { + "from": "De", + "to": "Até", + "label": "Faixa escolhida", + "open": "Escolher uma faixa", + "clear": "Mostrar tudo", + "apply": "Aplicar" + }, + "item": { + "labValuesOne": "1 valor laboratorial", + "labValuesFew": "{count} valores laboratoriais", + "labValuesOther": "{count} valores laboratoriais" + } + }, + "lifeEvents": { + "title": "Evento de vida", + "add": "Evento de vida", + "privacy": "Título e nota são armazenados criptografados. Eles não vão para nenhuma IA.", + "emptyHint": "Uma mudança, um nascimento ou um novo emprego dá aos anos uma referência.", + "save": "Salvar", + "cancel": "Cancelar", + "delete": "Excluir evento de vida", + "saved": "Evento de vida salvo", + "deleted": "Evento de vida excluído", + "fields": { + "title": "O que aconteceu?", + "category": "Tipo", + "when": "Quando", + "precision": "Precisão", + "addEnd": "Data de fim, se foi um período", + "endDate": "Até", + "note": "Nota", + "optionalTag": "opcional", + "notePlaceholder": "Algo que você queira saber depois", + "removeEnd": "Remover data de fim" + }, + "category": { + "FAMILY": "Família", + "HOME": "Casa", + "WORK": "Trabalho", + "LOSS": "Perda", + "OTHER": "Outro" + }, + "precision": { + "DAY": "Dia", + "MONTH": "Mês", + "YEAR": "Ano" + }, + "edit": "Editar evento de vida", + "errors": { + "titleRequired": "Dê um nome ao evento.", + "titleTooLong": "No máximo 120 caracteres.", + "categoryRequired": "Escolha um tipo.", + "dateRequired": "Insira uma data válida.", + "endBeforeStart": "O fim é anterior ao início.", + "noteTooLong": "No máximo 2000 caracteres." + }, + "saveFailed": "Não foi possível salvar.", + "deleteFailed": "Não foi possível excluir.", + "deleteConfirm": { + "title": "Excluir este evento de vida?", + "body": "Seu título e nota serão apagados." + } + }, + "palette": { + "title": "Buscar", + "description": "Encontre uma página, configuração, módulo, ação ou entrada nos seus registros.", + "placeholder": "Buscar páginas, configurações, seus registros…", + "results": "Resultados", + "noResults": "Nada encontrado para “{query}”.", + "moduleOn": "Ligado", + "moduleOff": "Desligado", + "hintMove": "Mover", + "hintOpen": "Abrir", + "hintClose": "Fechar", + "groups": { + "recent": "Recentes", + "pages": "Páginas", + "insights": "Insights", + "settings": "Configurações", + "modules": "Módulos", + "actions": "Ações", + "records": "Nos seus registros" + }, + "actions": { + "capture": "Nova entrada", + "coach": "Perguntar ao Coach", + "backup": "Criar um backup", + "today": "Abrir hoje", + "shortcuts": "Mostrar atalhos de teclado" + }, + "records": { + "loading": "Pesquisando seus registros…", + "empty": "Nada nos seus registros para “{query}”.", + "error": "Não foi possível pesquisar seus registros. Tente novamente em instantes.", + "truncated": "Apenas as entradas mais recentes foram pesquisadas.", + "kind": { + "visit": "Consulta", + "condition": "Condição", + "document": "Documento", + "vaccination": "Vacina", + "lab": "Resultado laboratorial", + "medication": "Medicamento", + "symptom": "Sintoma", + "workout": "Treino", + "note": "Nota" + }, + "source": { + "mood": "Nota de humor", + "measurement": "Nota sobre uma leitura", + "illness": "Diário de doenças" + } + } + }, + "shortcuts": { + "title": "Atalhos de teclado", + "description": "Teclas que funcionam em qualquer lugar do aplicativo, exceto enquanto você digita em um campo.", + "menuEntry": "Atalhos de teclado", + "then": "então", + "search": "Buscar", + "help": "Mostrar esta lista", + "close": "Fechar um diálogo ou painel", + "previousDay": "Dia anterior", + "nextDay": "Próximo dia", + "toggleDay": "Abrir ou fechar o dia", + "dayHint": "Dia anterior e próximo funcionam enquanto um dia está aberto.", + "groups": { + "navigation": "Navegação", + "actions": "Ações", + "day": "Dia" + } + }, + "aboutPage": { + "eyebrow": "Sobre", + "title": "Sobre o HealthLog", + "lastUpdated": "Última atualização: {date}", + "project": "Projeto", + "credits": "Créditos" + }, + "series": { + "reference": { + "targetUpper": "Seu alvo, limite superior", + "targetLower": "Seu alvo, limite inferior", + "clinicalUpper": "Limite clínico superior", + "clinicalLower": "Limite clínico inferior" + } + }, + "activityCalendar": { + "period": {}, + "metric": {}, + "cell": {}, + "level": {}, + "summary": {}, + "goal": {}, + "goalsSheet": {}, + "crossLink": {} + }, + "sourceProvenance": { + "reason": {}, + "pass": {}, + "side": {} + }, + "recordImport": { + "kind": {}, + "sheetTitle": {}, + "sheetDescription": {}, + "delimiterOption": {}, + "decimalOption": {}, + "dateOrderOption": {}, + "error": {}, + "reason": {}, + "field": {} } }