精简版第四轮补裁(P4): 页面层摘除 + Xray更新端点下线 + 本机核心监管下线
页面层(用户真机截图发现前两轮漏裁): - 设置: 摘除 Telegram机器人/邮件菜单与页面, 及页内残留入口(通知页/外部流量/LDAP/2FA设置页) - Xray配置: 摘除负载均衡/DNS/高级配置菜单与页面; 基础配置(出站+路由)完好 - 总览: 摘除 Xray更新弹窗(VersionModal+GeodataSection)全部入口, 版本号改为静态展示 - 13个locale同步摘除461个已删功能专属翻译键(逐键核查前后端引用为零; i18n-dead-keys测试全绿) Xray更新后端(经调查确认仅服务本机bin/xray, 与agent下发/订阅无关): - 删除 getXrayVersion/installXray/updateGeofile 路由与handler(访问返回404) - 删除 ServerService 对应实现与校验和函数; 同步api-docs/monitor白名单/openapi 本机核心监管下线(设计: 主控永不运行本机xray, 入站全在agent): - XrayService.RestartXray 降级为no-op(一次性Warning说明日志); StopXray无进程时幂等返回 - web.go 摘除启动拉起本机核心/CheckXrayRunning看门狗(1s)/ApplyPendingRestart cron(30s)/XrayTrafficJob/CheckClientIpJob 注册 - ApplyPendingRestart 降级为消费即清, 其测试更新为新语义 - XrayMetricsService.Sample 短路: 不再每2s探本机/debug/vars, 状态优雅置为不可用 - 配置生成(纯JSON)/agent链路/订阅/入站CRUD未动; 状态读数优雅归零(stop/Unknown) 注: TestGetXrayConfig_EnabledClientsStillEmitted 在基线945b3a5同样失败(既有问题, 非本轮引入)
This commit is contained in:
@@ -67,16 +67,12 @@
|
||||
"success": "Com Sucesso",
|
||||
"lastOnline": "Última vez online",
|
||||
"lastSubFetch": "Última busca da assinatura",
|
||||
"getVersion": "Obter Versão",
|
||||
"install": "Instalar",
|
||||
"clients": "Clientes",
|
||||
"usage": "Uso",
|
||||
"twoFactorCode": "Código",
|
||||
"remained": "Restante",
|
||||
"security": "Segurança",
|
||||
"emptyDnsDesc": "Nenhum servidor DNS adicionado.",
|
||||
"emptyFakeDnsDesc": "Nenhum servidor Fake DNS adicionado.",
|
||||
"emptyBalancersDesc": "Nenhum balanceador adicionado.",
|
||||
"somethingWentWrong": "Algo deu errado",
|
||||
"subscription": {
|
||||
"title": "Informações da assinatura",
|
||||
@@ -86,7 +82,6 @@
|
||||
"uploaded": "Enviado",
|
||||
"expiry": "Validade",
|
||||
"totalQuota": "Cota total",
|
||||
"individualLinks": "Links individuais",
|
||||
"active": "Ativo",
|
||||
"inactive": "Inativo",
|
||||
"unlimited": "Ilimitado",
|
||||
@@ -136,9 +131,6 @@
|
||||
"xrayStatus": "Xray",
|
||||
"stopXray": "Parar",
|
||||
"restartXray": "Reiniciar",
|
||||
"xraySwitch": "Versão",
|
||||
"xrayUpdates": "Atualizações do Xray",
|
||||
"xraySwitchClickDesk": "Escolha com cuidado, pois versões mais antigas podem não ser compatíveis com as configurações atuais.",
|
||||
"updatePanel": "Atualizar painel",
|
||||
"panelUpdateDesc": "Isso atualizará o 3X-UI para a versão mais recente e reiniciará o serviço do painel.",
|
||||
"currentPanelVersion": "Versão atual do painel",
|
||||
@@ -200,9 +192,6 @@
|
||||
"download": "Download",
|
||||
"sent": "Enviado",
|
||||
"received": "Recebido",
|
||||
"xraySwitchVersionDialog": "Você realmente deseja alterar a versão do Xray?",
|
||||
"xraySwitchVersionDialogDesc": "Isso mudará a versão do Xray para #version#.",
|
||||
"xraySwitchVersionPopover": "Xray atualizado com sucesso",
|
||||
"panelUpdateDialog": "Deseja realmente atualizar o painel?",
|
||||
"panelUpdateDialogDesc": "Isso atualizará o 3X-UI para #version# e reiniciará o serviço do painel.",
|
||||
"panelUpdateStartedPopover": "Atualização do painel iniciada",
|
||||
@@ -210,24 +199,6 @@
|
||||
"panelUpdateFailedDesc": "A atualização não foi concluída com sucesso. Verifique os logs do servidor ou execute 'x-ui update' na linha de comando.",
|
||||
"panelUpdateUnknownTitle": "Não foi possível confirmar se a atualização terminou",
|
||||
"panelUpdateUnknownDesc": "O painel não retornou um resultado a tempo. Recarregue a página para verificar a versão atual, ou verifique os logs do servidor.",
|
||||
"geofileUpdateDialog": "Você realmente deseja atualizar o geofile?",
|
||||
"geofileUpdateDialogDesc": "Isso atualizará o arquivo #filename#.",
|
||||
"geofilesUpdateDialogDesc": "Isso atualizará todos os arquivos.",
|
||||
"geofilesUpdateAll": "Atualizar tudo",
|
||||
"geofileUpdatePopover": "Geofile atualizado com sucesso",
|
||||
"geodataTitle": "Atualização automática de Geodata",
|
||||
"geodataHint": "O Xray baixa esses arquivos conforme o agendamento e os recarrega sem reiniciar. As URLs devem ser HTTPS. Cada arquivo já deve existir na pasta bin para que o Xray possa atualizá-lo.",
|
||||
"geodataCron": "Agendamento (cron)",
|
||||
"geodataOutbound": "Baixar através de outbound (opcional)",
|
||||
"geodataFile": "Nome do arquivo",
|
||||
"geodataAddFile": "Adicionar arquivo",
|
||||
"geodataSaveRestart": "Salvar e reiniciar o Xray",
|
||||
"geodataConfirmTitle": "Salvar configurações de geodata?",
|
||||
"geodataConfirmContent": "O modelo de configuração do Xray será atualizado e o Xray será reiniciado.",
|
||||
"geodataInvalidUrl": "Cada arquivo precisa de uma URL HTTPS.",
|
||||
"geodataInvalidFile": "O nome do arquivo deve ser simples, ex.: geosite_custom.dat (sem caminhos).",
|
||||
"geodataInvalidCron": "O cron deve ter 5 campos, ex.: 0 4 * * *",
|
||||
"geodataEmpty": "Nenhum arquivo configurado. Nas regras de roteamento, referencie como ext:geosite_custom.dat:category.",
|
||||
"dontRefresh": "Instalação em andamento, por favor não atualize a página",
|
||||
"logs": "Logs",
|
||||
"accessLogs": "Logs de acesso",
|
||||
@@ -1082,7 +1053,6 @@
|
||||
"warnDefaultBasePath": "O caminho base padrão \"/\" é bem conhecido — altere para um caminho aleatório.",
|
||||
"warnDefaultSubPath": "O caminho de assinatura padrão \"/sub/\" é bem conhecido — altere-o.",
|
||||
"warnDefaultJsonPath": "O caminho de assinatura JSON padrão \"/json/\" é bem conhecido — altere-o.",
|
||||
"TGBotSettings": "Bot do Telegram",
|
||||
"panelListeningIP": "IP de Escuta",
|
||||
"panelListeningIPDesc": "O endereço IP para o painel web. (deixe em branco para escutar em todos os IPs)",
|
||||
"panelListeningDomain": "Domínio de Escuta",
|
||||
@@ -1107,43 +1077,12 @@
|
||||
"currentPassword": "Senha Atual",
|
||||
"newUsername": "Novo Nome de Usuário",
|
||||
"newPassword": "Nova Senha",
|
||||
"telegramBotEnable": "Ativar Bot do Telegram",
|
||||
"telegramBotEnableDesc": "Ativa o bot do Telegram.",
|
||||
"telegramToken": "Token do Telegram",
|
||||
"telegramTokenDesc": "O token do bot do Telegram obtido de '{'@'}BotFather'.",
|
||||
"telegramProxy": "Proxy SOCKS",
|
||||
"telegramProxyDesc": "Ativa o proxy SOCKS5 para conectar ao Telegram. (ajuste as configurações conforme o guia)",
|
||||
"telegramAPIServer": "Servidor API do Telegram",
|
||||
"telegramAPIServerDesc": "O servidor API do Telegram a ser usado. Deixe em branco para usar o servidor padrão.",
|
||||
"telegramChatId": "ID de Chat do Administrador",
|
||||
"telegramChatIdDesc": "O(s) ID(s) de Chat do Administrador no Telegram. (separado por vírgulas)(obtenha aqui {'@'}userinfobot) ou (use o comando '/id' no bot)",
|
||||
"telegramNotifyTime": "Hora da Notificação",
|
||||
"telegramNotifyTimeDesc": "Com que frequência o bot do Telegram envia relatórios periódicos. Escolha um intervalo predefinido ou selecione Personalizado para inserir uma expressão crontab.",
|
||||
"notifyTime": {
|
||||
"every": "@every — repetir em um intervalo",
|
||||
"hourly": "@hourly — a cada hora",
|
||||
"daily": "@daily — todos os dias às 00:00",
|
||||
"weekly": "@weekly — toda semana",
|
||||
"monthly": "@monthly — todo mês",
|
||||
"custom": "Personalizado (crontab)",
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
"hours": "Horas",
|
||||
"interval": "Intervalo",
|
||||
"unit": "Unidade"
|
||||
},
|
||||
"tgNotifyBackup": "Backup do Banco de Dados",
|
||||
"tgNotifyBackupDesc": "Enviar arquivo de backup do banco de dados junto com o relatório.",
|
||||
"tgNotifyLogin": "Notificação de Login",
|
||||
"tgNotifyLoginDesc": "Receba notificações sobre o nome de usuário, endereço IP e horário sempre que alguém tentar fazer login no seu painel web.",
|
||||
"sessionMaxAge": "Duração da Sessão",
|
||||
"sessionMaxAgeDesc": "A duração pela qual você pode permanecer logado. (unidade: minuto)",
|
||||
"expireTimeDiff": "Notificação de Expiração",
|
||||
"expireTimeDiffDesc": "Receba notificações sobre a data de expiração ao atingir esse limite. (unidade: dia)",
|
||||
"trafficDiff": "Notificação de Limite de Tráfego",
|
||||
"trafficDiffDesc": "Receba notificações sobre o limite de tráfego ao atingir esse limite. (unidade: GB)",
|
||||
"tgNotifyCpu": "Notificação de Carga da CPU",
|
||||
"tgNotifyCpuDesc": "Receba notificações se a carga da CPU ultrapassar esse limite. (unidade: %)",
|
||||
"timeZone": "Fuso Horário",
|
||||
"timeZoneDesc": "As tarefas agendadas serão executadas com base nesse fuso horário.",
|
||||
"subSettings": "Assinatura",
|
||||
@@ -1208,10 +1147,6 @@
|
||||
"subEncryptDesc": "O conteúdo retornado pelo serviço de assinatura será codificado em Base64.",
|
||||
"subURI": "URI de Proxy Reverso",
|
||||
"subURIDesc": "A URL base completa (scheme://dominio[:porta]/caminho/) para o link de assinatura e o código QR, usada em vez de Domínio/Porta de Escuta. Configure isso sempre que a assinatura for acessada por um proxy reverso ou um domínio/porta diferente dos acima.",
|
||||
"externalTrafficInformEnable": "Informações de tráfego externo",
|
||||
"externalTrafficInformEnableDesc": "Informar API externa a cada atualização de tráfego.",
|
||||
"externalTrafficInformURI": "URI de informação de tráfego externo",
|
||||
"externalTrafficInformURIDesc": "As atualizações de tráfego são enviadas para este URI.",
|
||||
"restartXrayOnClientDisable": "Reiniciar Xray Após Desativação Automática",
|
||||
"restartXrayOnClientDisableDesc": "Quando um cliente for desativado automaticamente por expiração ou limite de tráfego, reinicie o Xray.",
|
||||
"fragment": "Fragmentação",
|
||||
@@ -1221,38 +1156,6 @@
|
||||
"noisesSett": "Configurações de Noises",
|
||||
"trustedProxyCidrs": "CIDRs de proxy confiável",
|
||||
"trustedProxyCidrsDesc": "IPs/CIDRs separados por vírgula que podem definir os cabeçalhos host, proto e IP do cliente encaminhados.",
|
||||
"ldap": {
|
||||
"enable": "Habilitar sincronização LDAP",
|
||||
"host": "Host LDAP",
|
||||
"port": "Porta LDAP",
|
||||
"useTls": "Usar TLS (LDAPS)",
|
||||
"skipTlsVerify": "Pular verificação de certificado TLS",
|
||||
"skipTlsVerifyDesc": "Inseguro — desativa a validação do certificado do servidor. Use apenas com CAs internos/não confiáveis.",
|
||||
"bindDn": "Bind DN",
|
||||
"passwordConfigured": "Configurada; deixe em branco para manter a senha atual.",
|
||||
"passwordUnconfigured": "Não configurada.",
|
||||
"passwordPlaceholder": "Configurada — digite um novo valor para substituir",
|
||||
"baseDn": "Base DN",
|
||||
"userFilter": "Filtro de usuário",
|
||||
"userAttr": "Atributo de usuário (username/email)",
|
||||
"vlessField": "Atributo flag VLESS",
|
||||
"flagField": "Atributo flag genérico (opcional)",
|
||||
"flagFieldDesc": "Se definido, sobrescreve o flag VLESS — ex. shadowInactive.",
|
||||
"truthyValues": "Valores truthy",
|
||||
"truthyValuesDesc": "Separados por vírgula; padrão: true,1,yes,on",
|
||||
"invertFlag": "Inverter flag",
|
||||
"invertFlagDesc": "Habilite quando o atributo significar «desabilitado» (ex. shadowInactive).",
|
||||
"syncSchedule": "Agendamento da sincronização",
|
||||
"syncScheduleDesc": "String tipo cron, ex. @every 1m",
|
||||
"inboundTags": "Tags de entradas",
|
||||
"inboundTagsDesc": "Entradas nas quais a sincronização LDAP pode auto-criar ou auto-excluir clientes.",
|
||||
"noInbounds": "Nenhuma entrada encontrada. Crie uma em Entradas primeiro.",
|
||||
"autoCreate": "Criar clientes automaticamente",
|
||||
"autoDelete": "Excluir clientes automaticamente",
|
||||
"defaultTotalGb": "Total padrão (GB)",
|
||||
"defaultExpiryDays": "Expiração padrão (dias)",
|
||||
"defaultIpLimit": "Limite de IP padrão"
|
||||
},
|
||||
"subFormats": {
|
||||
"finalMask": "Final Mask",
|
||||
"finalMaskDesc": "Injeta máscaras TCP/UDP do finalmask do Xray e parâmetros QUIC em cada perfil Xray JSON gerado. Requer um aplicativo compatível com assinaturas Xray JSON e um núcleo Xray recente.",
|
||||
@@ -1276,31 +1179,15 @@
|
||||
"muxSett": "Configurações de Mux",
|
||||
"direct": "Conexão Direta",
|
||||
"directDesc": "Estabelece conexões diretamente com domínios ou intervalos de IP de um país específico.",
|
||||
"notifications": "Notificações",
|
||||
"certs": "Certificados",
|
||||
"externalTraffic": "Tráfego Externo",
|
||||
"dateAndTime": "Data e Hora",
|
||||
"proxyAndServer": "Proxy e Servidor",
|
||||
"intervals": "Intervalos",
|
||||
"information": "Informação",
|
||||
"profile": "Perfil",
|
||||
"language": "Idioma",
|
||||
"telegramBotLanguage": "Idioma do Bot do Telegram",
|
||||
"security": {
|
||||
"admin": "Credenciais de administrador",
|
||||
"twoFactor": "Autenticação de dois fatores",
|
||||
"twoFactorEnable": "Ativar 2FA",
|
||||
"twoFactorEnableDesc": "Adiciona uma camada extra de autenticação para mais segurança.",
|
||||
"twoFactorModalSetTitle": "Ativar autenticação de dois fatores",
|
||||
"twoFactorModalDeleteTitle": "Desativar autenticação de dois fatores",
|
||||
"twoFactorModalSteps": "Para configurar a autenticação de dois fatores, siga alguns passos:",
|
||||
"twoFactorModalFirstStep": "1. Escaneie este QR code no aplicativo de autenticação ou copie o token próximo ao QR code e cole no aplicativo",
|
||||
"twoFactorModalSecondStep": "2. Digite o código do aplicativo",
|
||||
"twoFactorModalRemoveStep": "Digite o código do aplicativo para remover a autenticação de dois fatores.",
|
||||
"twoFactorModalChangeCredentialsTitle": "Alterar credenciais",
|
||||
"twoFactorModalChangeCredentialsStep": "Insira o código do aplicativo para alterar as credenciais do administrador.",
|
||||
"twoFactorModalSetSuccess": "A autenticação de dois fatores foi estabelecida com sucesso",
|
||||
"twoFactorModalDeleteSuccess": "A autenticação de dois fatores foi excluída com sucesso",
|
||||
"twoFactorModalError": "Código incorreto",
|
||||
"show": "Mostrar",
|
||||
"hide": "Ocultar",
|
||||
@@ -1323,36 +1210,6 @@
|
||||
"getOutboundTrafficError": "Erro ao obter tráfego de saída",
|
||||
"resetOutboundTrafficError": "Erro ao redefinir tráfego de saída"
|
||||
},
|
||||
"smtpSettings": "Configurações SMTP",
|
||||
"smtpEnable": "Ativar notificações por e-mail",
|
||||
"smtpEnableDesc": "Ativar notificações por e-mail via SMTP",
|
||||
"smtpHost": "Servidor SMTP",
|
||||
"smtpHostDesc": "Nome do host do servidor SMTP (ex.: smtp.gmail.com)",
|
||||
"smtpPort": "Porta SMTP",
|
||||
"smtpPortDesc": "Porta do servidor SMTP (padrão: 587)",
|
||||
"smtpUsername": "Usuário SMTP",
|
||||
"smtpUsernameDesc": "Nome de usuário para autenticação SMTP",
|
||||
"smtpFrom": "Endereço do remetente (From)",
|
||||
"smtpFromDesc": "Endereço usado no cabeçalho From do e-mail. Deixe vazio para usar o nome de usuário.",
|
||||
"smtpFromName": "Nome do remetente (From)",
|
||||
"smtpFromNameDesc": "Nome de exibição opcional antes do endereço no cabeçalho From.",
|
||||
"smtpPassword": "Senha SMTP",
|
||||
"smtpPasswordDesc": "Senha para autenticação SMTP",
|
||||
"smtpTo": "Destinatários",
|
||||
"smtpToDesc": "Endereços de e-mail dos destinatários separados por vírgula",
|
||||
"emailSettings": "E-mail",
|
||||
"emailNotifications": "Notificações",
|
||||
"smtpEventBusNotify": "Notificações de eventos por e-mail",
|
||||
"smtpEventBusNotifyDesc": "Selecione quais eventos disparam notificações por e-mail",
|
||||
"tgEventBusNotify": "Notificações de eventos no Telegram",
|
||||
"tgEventBusNotifyDesc": "Selecione quais eventos disparam notificações no Telegram",
|
||||
"testSmtp": "Enviar e-mail de teste",
|
||||
"testTgBot": "Enviar mensagem de teste",
|
||||
"eventGroupOutbound": "Outbound",
|
||||
"eventGroupXray": "Núcleo Xray",
|
||||
"eventGroupSystem": "Sistema",
|
||||
"eventGroupSecurity": "Segurança",
|
||||
"eventGroupNode": "Nós",
|
||||
"eventOutboundDown": "Inativo",
|
||||
"eventOutboundUp": "Ativo",
|
||||
"eventXrayCrash": "Falha",
|
||||
@@ -1360,36 +1217,7 @@
|
||||
"eventNodeUp": "Ativo",
|
||||
"eventCPUHigh": "CPU alta (%)",
|
||||
"requestFailed": "Falha na requisição",
|
||||
"smtpEncryption": "Criptografia",
|
||||
"smtpEncryptionDesc": "Método de criptografia da conexão SMTP",
|
||||
"smtpEncryptionNone": "Nenhuma (texto puro)",
|
||||
"smtpEncryptionStartTLS": "STARTTLS",
|
||||
"smtpEncryptionTLS": "TLS (implícito)",
|
||||
"smtpStageConnect": "Conexão",
|
||||
"smtpStageAuth": "Autenticação",
|
||||
"smtpStageSend": "Envio",
|
||||
"smtpTestSuccess": "E-mail de teste enviado com sucesso",
|
||||
"smtpHostNotConfigured": "Servidor SMTP não configurado",
|
||||
"smtpNoRecipients": "Nenhum destinatário configurado",
|
||||
"smtpFromNotConfigured": "Endereço do remetente SMTP não configurado",
|
||||
"eventLoginAttempt": "Tentativa de login",
|
||||
"telegramTokenConfigured": "Configurado; deixe em branco para manter o token atual.",
|
||||
"telegramTokenPlaceholder": "Configurado - insira um novo token para substituir",
|
||||
"smtpPasswordConfigured": "Configurada; deixe em branco para manter a senha atual.",
|
||||
"smtpPasswordPlaceholder": "Configurada - insira uma nova senha para substituir",
|
||||
"smtpNotInitialized": "SMTP não inicializado",
|
||||
"tgBotNotEnabled": "O bot do Telegram não está ativado",
|
||||
"tgTestFailed": "Falha no teste do Telegram",
|
||||
"tgTestSuccess": "Mensagem de teste enviada ao Telegram",
|
||||
"tgBotNotRunning": "O bot do Telegram não está em execução",
|
||||
"smtpErrorAuth": "Falha na autenticação — verifique o nome de usuário e a senha",
|
||||
"smtpErrorStarttls": "O servidor requer STARTTLS — altere o tipo de criptografia",
|
||||
"smtpErrorTls": "O servidor requer TLS — altere o tipo de criptografia",
|
||||
"smtpErrorRefused": "Conexão recusada — verifique o host e a porta",
|
||||
"smtpErrorTimeout": "Tempo de conexão esgotado — host inacessível",
|
||||
"smtpErrorRelay": "O servidor rejeita o envio a partir deste endereço",
|
||||
"smtpErrorEof": "Conexão encerrada pelo servidor",
|
||||
"smtpErrorUnknown": "Erro de SMTP: {{ .Error }}",
|
||||
"eventMemoryHigh": "Uso de memória alto (%)",
|
||||
"remarkTemplate": "Modelo de Observação",
|
||||
"remarkTemplateDesc": "Quando definido, isto substitui o modelo de observação de cada link de assinatura — escreva seu próprio formato com os tokens de variáveis (use o botão para inseri-los). Deixe vazio para usar o modelo acima.",
|
||||
@@ -1483,8 +1311,6 @@
|
||||
"directdomains": "Domínios Diretos",
|
||||
"ipv4Routing": "Roteamento IPv4",
|
||||
"ipv4RoutingDesc": "Essas opções roteam o tráfego para um destino específico via IPv4.",
|
||||
"Template": "Modelo de Configuração Avançada do Xray",
|
||||
"TemplateDesc": "O arquivo final de configuração do Xray será gerado com base neste modelo.",
|
||||
"FreedomStrategy": "Estratégia do Protocolo Freedom",
|
||||
"FreedomStrategyDesc": "Definir a estratégia de saída para a rede no Protocolo Freedom.",
|
||||
"FreedomHappyEyeballs": "Freedom Happy Eyeballs (IPv4/IPv6)",
|
||||
@@ -1500,11 +1326,6 @@
|
||||
"Balancers": "Balanceadores",
|
||||
"balancerTagRequired": "A tag é obrigatória",
|
||||
"balancerSelectorRequired": "Selecione pelo menos uma saída",
|
||||
"balancerLive": "Destino atual",
|
||||
"balancerOverride": "Forçar destino",
|
||||
"balancerOverridePh": "Automático (estratégia)",
|
||||
"balancerLiveRefresh": "Atualizar estado do balanceador",
|
||||
"balancerNotRunning": "Este balanceador não está ativo no Xray em execução — salve as alterações ou inicie o Xray primeiro",
|
||||
"routeTester": "Teste de rota",
|
||||
"routeTesterDesc": "Pergunte ao Xray em execução qual saída trataria uma conexão. Nenhum tráfego é enviado — a decisão vem diretamente do motor de roteamento ao vivo.",
|
||||
"routeTesterDest": "Domínio ou IP",
|
||||
@@ -1516,7 +1337,6 @@
|
||||
"routeTesterViaBalancer": "via balanceador",
|
||||
"routeTesterDefaultOutbound": "Nenhuma regra de roteamento correspondeu — o tráfego vai para a saída padrão (primeira).",
|
||||
"Routings": "Regras de Roteamento",
|
||||
"completeTemplate": "Tudo",
|
||||
"logLevel": "Nível de Log",
|
||||
"logLevelDesc": "O nível de log para erros, indicando a informação que precisa ser registrada.",
|
||||
"accessLog": "Log de Acesso",
|
||||
@@ -1544,7 +1364,6 @@
|
||||
"source": "Fonte",
|
||||
"dest": "Destino",
|
||||
"inbound": "Entrada",
|
||||
"balancer": "Balanceador",
|
||||
"useComma": "Itens separados por vírgula"
|
||||
},
|
||||
"routing": {
|
||||
@@ -1725,32 +1544,7 @@
|
||||
"alreadyAdded": "Este servidor já está na lista de saídas. Use {reset} para renovar a chave.",
|
||||
"provisionFailed": "Não foi possível criar a saída PIA. Tente novamente."
|
||||
},
|
||||
"tabBalancerSettings": "Configurações do balanceador",
|
||||
"tabObservatory": "Observatório",
|
||||
"observatory": {
|
||||
"autoManaged": "Os observadores são gerenciados automaticamente a partir dos seus balanceadores. Ajuste abaixo como eles sondam; as saídas monitoradas seguem os seletores do balanceador.",
|
||||
"emptyHint": "Nenhum observador de conexão ativo. Um é adicionado automaticamente ao criar um balanceador Least Ping ou Least Load — ou um balanceador Random / Round-robin com fallback — para que balanceadores com observador possam verificar a saúde das saídas antes de escolher um destino.",
|
||||
"mixedLegacy": "Esta configuração contém Observatory e Burst Observatory ao mesmo tempo. O Xray usa um único observador global, então esse estado misto legado não é suportado; ao salvar os balanceadores ele será normalizado para um único observador.",
|
||||
"subjectSelector": "Saídas monitoradas",
|
||||
"subjectSelectorDesc": "Tags de saída que este observador sonda. Gerenciadas automaticamente a partir dos seus balanceadores.",
|
||||
"probeURL": "URL de sondagem",
|
||||
"probeURLDesc": "URL requisitada para medir cada saída. Deve retornar HTTP 204.",
|
||||
"probeInterval": "Intervalo de sondagem",
|
||||
"probeIntervalDesc": "Com que frequência sondar cada saída, ex.: 30s, 1m, 2h45m.",
|
||||
"enableConcurrency": "Sondagem concorrente",
|
||||
"enableConcurrencyDesc": "Sonda todas as saídas monitoradas de uma vez, em vez de uma a uma. Mais rápido, mas mais visível na rede.",
|
||||
"destination": "Destino da sondagem",
|
||||
"destinationDesc": "URL requisitada para medir cada saída. Deve retornar HTTP 204.",
|
||||
"connectivity": "Verificação de conectividade",
|
||||
"connectivityDesc": "URL opcional de verificação da rede local, testada apenas após o destino falhar. Deixe vazio para ignorar.",
|
||||
"interval": "Intervalo de sondagem",
|
||||
"intervalDesc": "Tempo médio entre sondagens por saída, ex.: 1m. Mínimo 10s.",
|
||||
"timeout": "Tempo limite da sondagem",
|
||||
"timeoutDesc": "Quanto esperar por uma sondagem antes de considerá-la falha, ex.: 5s.",
|
||||
"sampling": "Número de amostras",
|
||||
"samplingDesc": "Número de resultados de sondagem recentes mantidos para pontuar cada saída.",
|
||||
"httpMethod": "Método HTTP",
|
||||
"httpMethodDesc": "Método HTTP usado nas sondagens.",
|
||||
"deleteAlsoObservatory": "Este é o último balanceador que usa o Observatório, então ele também será removido.",
|
||||
"deleteAlsoBurst": "Este é o último balanceador que usa o Observatório Burst, então ele também será removido."
|
||||
},
|
||||
@@ -1762,25 +1556,7 @@
|
||||
},
|
||||
"balancer": {
|
||||
"balancerStrategy": "Estratégia",
|
||||
"tag": "Tag",
|
||||
"tagDuplicate": "Tag já usada por outro balanceador",
|
||||
"tagPlaceholder": "tag única do balanceador",
|
||||
"selector": "Seletor",
|
||||
"fallback": "Fallback",
|
||||
"cycleTooltip": "Ciclo: {path} → (voltar para {start})",
|
||||
"expected": "Esperado",
|
||||
"expectedPlaceholder": "número ótimo de nós",
|
||||
"maxRtt": "Máx. RTT",
|
||||
"tolerance": "Tolerância",
|
||||
"baselines": "Baselines",
|
||||
"costs": "Costs",
|
||||
"costMatch": "Padrão de tag",
|
||||
"costValue": "Peso",
|
||||
"costRegexp": "Correspondência por expressão regular",
|
||||
"balancerDeleteInUse": "Não é possível excluir este balanceador — ele é usado como fallback para: {names}",
|
||||
"balancerFallbackCycle": "Não é possível definir este balanceador como fallback — isso criaria uma dependência circular.",
|
||||
"balancerFallbackInfo": "O tráfego será roteado através de: Balanceador → Loopback → Servidor → Balanceador de destino → Conexão de saída. Isso adiciona um salto extra pelo servidor, o que pode introduzir pequenos atrasos.",
|
||||
"fallbackBalancerHint": "Selecione outro balanceador como fallback",
|
||||
"reservedPrefix": "O prefixo _bl_ é reservado para objetos loopback internos do balanceador"
|
||||
},
|
||||
"wireguard": {
|
||||
@@ -1883,55 +1659,8 @@
|
||||
"usage": "Uso",
|
||||
"addOutbound": "Adicionar saída"
|
||||
},
|
||||
"dns": {
|
||||
"enable": "Ativar DNS",
|
||||
"enableDesc": "Ativar o servidor DNS integrado",
|
||||
"tag": "Tag de Entrada DNS",
|
||||
"tagDesc": "Esta tag estará disponível como uma tag de Entrada nas regras de roteamento.",
|
||||
"clientIp": "IP do Cliente",
|
||||
"clientIpDesc": "Usado para notificar o servidor sobre a localização IP especificada durante consultas DNS",
|
||||
"disableCache": "Desativar cache",
|
||||
"disableCacheDesc": "Desativa o cache de DNS",
|
||||
"disableFallback": "Desativar Fallback",
|
||||
"disableFallbackDesc": "Desativa consultas DNS de fallback",
|
||||
"disableFallbackIfMatch": "Desativar Fallback Se Corresponder",
|
||||
"disableFallbackIfMatchDesc": "Desativa consultas DNS de fallback quando a lista de domínios correspondentes do servidor DNS é atingida",
|
||||
"enableParallelQuery": "Habilitar Consulta Paralela",
|
||||
"enableParallelQueryDesc": "Habilitar consultas DNS paralelas para múltiplos servidores para resolução mais rápida",
|
||||
"strategy": "Estratégia de Consulta",
|
||||
"strategyDesc": "Estratégia geral para resolver nomes de domínio",
|
||||
"add": "Adicionar Servidor",
|
||||
"edit": "Editar Servidor",
|
||||
"domains": "Domínios",
|
||||
"expectIPs": "IPs Esperadas",
|
||||
"unexpectIPs": "IPs inesperados",
|
||||
"useSystemHosts": "Usar Hosts do sistema",
|
||||
"useSystemHostsDesc": "Usar o arquivo hosts de um sistema instalado",
|
||||
"serveStale": "Servir Expirados",
|
||||
"serveStaleDesc": "Retornar resultados expirados do cache enquanto atualiza em segundo plano",
|
||||
"serveExpiredTTL": "TTL de Expirados",
|
||||
"serveExpiredTTLDesc": "Validade (segundos) das entradas expiradas no cache; 0 = nunca expira",
|
||||
"timeoutMs": "Tempo limite (ms)",
|
||||
"skipFallback": "Ignorar Fallback",
|
||||
"finalQuery": "Consulta Final",
|
||||
"hosts": "Hosts",
|
||||
"hostsAdd": "Adicionar Host",
|
||||
"hostsEmpty": "Nenhum Host definido",
|
||||
"hostsDomain": "Domínio (ex. domain:example.com)",
|
||||
"hostsValues": "IP ou domínio — digite e pressione Enter",
|
||||
"usePreset": "Usar modelo",
|
||||
"dnsPresetTitle": "Modelos DNS",
|
||||
"dnsPresetFamily": "Familiar",
|
||||
"clearAll": "Remover Todos",
|
||||
"clearAllTitle": "Remover todos os servidores DNS?",
|
||||
"clearAllConfirm": "Isso remove todos os servidores DNS da lista. Não pode ser desfeito.",
|
||||
"dnsLeakWarning": "DNS pode vazar por localhost, UDP/TCP sem criptografia, DoH/DoQ em modo local, consultas de fallback ou EDNS client IP. Use DoH roteado, fixe resolvedores em hosts e desative fallback quando privacidade importar."
|
||||
},
|
||||
"fakedns": {
|
||||
"add": "Adicionar Fake DNS",
|
||||
"ipPool": "Sub-rede do Pool de IP",
|
||||
"poolSize": "Tamanho do Pool"
|
||||
},
|
||||
"dns": {},
|
||||
"fakedns": {},
|
||||
"defaultOutbound": "Saída padrão",
|
||||
"defaultOutboundDesc": "Tráfego sem regra de roteamento usa esta saída (a primeira da lista)."
|
||||
},
|
||||
@@ -2055,198 +1784,7 @@
|
||||
}
|
||||
},
|
||||
"tgbot": {
|
||||
"keyboardClosed": "❌ Teclado fechado!",
|
||||
"noResult": "❗ Nenhum resultado!",
|
||||
"noQuery": "❌ Consulta não encontrada! Por favor, use o comando novamente!",
|
||||
"wentWrong": "❌ Algo deu errado!",
|
||||
"noIpRecord": "❗ Nenhum registro de IP!",
|
||||
"noInbounds": "❗ Nenhum inbound encontrado!",
|
||||
"unlimited": "♾ Ilimitado (Reset)",
|
||||
"add": "Adicionar",
|
||||
"month": "Mês",
|
||||
"months": "Meses",
|
||||
"days": "Dias",
|
||||
"hours": "Horas",
|
||||
"minutes": "Minutos",
|
||||
"unknown": "Desconhecido",
|
||||
"inbounds": "Entradas",
|
||||
"clients": "Clientes",
|
||||
"offline": "🔴 Offline",
|
||||
"online": "🟢 Online",
|
||||
"commands": {
|
||||
"unknown": "❗ Comando desconhecido.",
|
||||
"pleaseChoose": "👇 Escolha:\r\n",
|
||||
"help": "🤖 Bem-vindo a este bot! Ele foi projetado para oferecer dados específicos do painel da web e permite que você faça as modificações necessárias.\r\n\r\n",
|
||||
"start": "👋 Olá <i>{{ .Firstname }}</i>.\r\n",
|
||||
"welcome": "🤖 Bem-vindo ao bot de gerenciamento do <b>{{ .Hostname }}</b>.\r\n",
|
||||
"status": "✅ Bot está OK!",
|
||||
"usage": "❗ Por favor, forneça um texto para pesquisar!",
|
||||
"getID": "🆔 Seu ID: <code>{{ .ID }}</code>",
|
||||
"helpAdminCommands": "Para reiniciar o Xray Core:\r\n<code>/restart</code>\r\n\r\nPara pesquisar por um email de cliente:\r\n<code>/usage [Email]</code>\r\n\r\nPara pesquisar por inbounds (com estatísticas do cliente):\r\n<code>/inbound [Remark]</code>\r\n\r\nTelegram Chat ID:\r\n<code>/id</code>",
|
||||
"helpClientCommands": "Para pesquisar por estatísticas, use o seguinte comando:\r\n\r\n<code>/usage [Email]</code>\r\n\r\nTelegram Chat ID:\r\n<code>/id</code>",
|
||||
"restartUsage": "\r\n\r\n<code>/restart</code>",
|
||||
"restartSuccess": "✅ Operação bem-sucedida!",
|
||||
"restartFailed": "❗ Erro na operação.\r\n\r\n<code>Erro: {{ .Error }}</code>.",
|
||||
"xrayNotRunning": "❗ Xray Core não está em execução.",
|
||||
"startDesc": "Mostrar menu principal",
|
||||
"helpDesc": "Ajuda do bot",
|
||||
"statusDesc": "Verificar status do bot",
|
||||
"idDesc": "Mostrar seu ID do Telegram",
|
||||
"usageDesc": "Ver o uso do cliente: /usage email",
|
||||
"inboundDesc": "Buscar entradas: /inbound nome (admin)",
|
||||
"restartDesc": "Reiniciar o núcleo Xray (admin)",
|
||||
"clearallDesc": "Zerar o tráfego de todos os clientes (admin)"
|
||||
},
|
||||
"messages": {
|
||||
"cpuThreshold": "A carga da CPU {{ .Percent }}% excede o limite de {{ .Threshold }}%",
|
||||
"selectUserFailed": "❌ Erro na seleção do usuário!",
|
||||
"userSaved": "✅ Usuário do Telegram salvo.",
|
||||
"loginSuccess": "✅ Conectado ao painel com sucesso.\r\n",
|
||||
"loginFailed": "❗️Tentativa de login no painel falhou.\r\n",
|
||||
"report": "🕰 Relatórios agendados: {{ .RunTime }}\r\n",
|
||||
"datetime": "⏰ Data&Hora: {{ .DateTime }}\r\n",
|
||||
"hostname": "💻 Host: {{ .Hostname }}\r\n",
|
||||
"version": "🚀 Versão 3X-UI: {{ .Version }}\r\n",
|
||||
"xrayVersion": "📡 Versão Xray: {{ .XrayVersion }}\r\n",
|
||||
"ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
|
||||
"ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
|
||||
"ip": "🌐 IP: {{ .IP }}\r\n",
|
||||
"ips": "🔢 IPs:\r\n{{ .IPs }}\r\n",
|
||||
"serverUpTime": "⏳ Tempo de atividade: {{ .UpTime }} {{ .Unit }}\r\n",
|
||||
"serverLoad": "📈 Carga do sistema: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
|
||||
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
|
||||
"tcpCount": "🔹 TCP: {{ .Count }}\r\n",
|
||||
"udpCount": "🔸 UDP: {{ .Count }}\r\n",
|
||||
"traffic": "🚦 Tráfego: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
|
||||
"xrayStatus": "ℹ️ Status: {{ .State }}\r\n",
|
||||
"username": "👤 Nome de usuário: {{ .Username }}\r\n",
|
||||
"reason": "❗️ Motivo: {{ .Reason }}\r\n",
|
||||
"time": "⏰ Hora: {{ .Time }}\r\n",
|
||||
"inbound": "📍 Entrada: {{ .Remark }}\r\n",
|
||||
"port": "🔌 Porta: {{ .Port }}\r\n",
|
||||
"expire": "📅 Data de expiração: {{ .Time }}\r\n",
|
||||
"expireIn": "📅 Expira em: {{ .Time }}\r\n",
|
||||
"active": "💡 Ativo: {{ .Enable }}\r\n",
|
||||
"enabled": "🚨 Ativado: {{ .Enable }}\r\n",
|
||||
"online": "🌐 Status da conexão: {{ .Status }}\r\n",
|
||||
"lastOnline": "🔙 Última vez online: {{ .Time }}\r\n",
|
||||
"email": "📧 Email: {{ .Email }}\r\n",
|
||||
"upload": "🔼 Upload: ↑{{ .Upload }}\r\n",
|
||||
"download": "🔽 Download: ↓{{ .Download }}\r\n",
|
||||
"total": "📊 Total: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
|
||||
"TGUser": "👤 Usuário do Telegram: {{ .TelegramID }}\r\n",
|
||||
"exhaustedCount": "🚨 Contagem de {{ .Type }} esgotado:\r\n",
|
||||
"onlinesCount": "🌐 Clientes online: {{ .Count }}\r\n",
|
||||
"disabled": "🛑 Desativado: {{ .Disabled }}\r\n",
|
||||
"depleteSoon": "🔜 Esgotar em breve: {{ .Deplete }}\r\n\r\n",
|
||||
"backupTime": "🗄 Hora do backup: {{ .Time }}\r\n",
|
||||
"refreshedOn": "\r\n📋🔄 Atualizado em: {{ .Time }}\r\n\r\n",
|
||||
"yes": "✅ Sim",
|
||||
"no": "❌ Não",
|
||||
"received_email": "📧📥 E-mail atualizado.",
|
||||
"received_comment": "💬📥 Comentário atualizado.",
|
||||
"email_prompt": "📧 E-mail Padrão: {{ .ClientEmail }}\n\nDigite seu e-mail.",
|
||||
"comment_prompt": "💬 Comentário Padrão: {{ .ClientComment }}\n\nDigite seu comentário.",
|
||||
"cancel": "❌ Processo Cancelado! \n\nVocê pode iniciar novamente a qualquer momento com /start. 🔄",
|
||||
"error_add_client": "⚠️ Erro:\n\n {{ .error }}",
|
||||
"using_default_value": "Tudo bem, vou manter o valor padrão. 😊",
|
||||
"incorrect_input": "Sua entrada não é válida.\nAs frases devem ser contínuas, sem espaços.\nExemplo correto: aaaaaa\nExemplo incorreto: aaa aaa 🚫",
|
||||
"AreYouSure": "Você tem certeza? 🤔",
|
||||
"SuccessResetTraffic": "📧 Email: {{ .ClientEmail }}\n🏁 Resultado: ✅ Sucesso",
|
||||
"FailedResetTraffic": "📧 Email: {{ .ClientEmail }}\n🏁 Resultado: ❌ Falhou \n\n🛠️ Erro: [ {{ .ErrorMessage }} ]",
|
||||
"FinishProcess": "🔚 Processo de redefinição de tráfego concluído para todos os clientes.",
|
||||
"eventOutboundDown": "O outbound {{ .Tag }} está INATIVO",
|
||||
"eventOutboundUp": "O outbound {{ .Tag }} está ATIVO",
|
||||
"eventErrorDetail": "Erro: {{ .Error }}",
|
||||
"eventDelayDetail": "Latência: {{ .Delay }}ms",
|
||||
"eventXrayCrash": "O Xray FALHOU",
|
||||
"eventXrayCrashError": "Erro: {{ .Error }}",
|
||||
"eventNodeDown": "O nó {{ .Name }} está INATIVO",
|
||||
"eventNodeUp": "O nó {{ .Name }} está ATIVO",
|
||||
"eventLoginFallback": "Falha de login a partir de {{ .Source }}",
|
||||
"memoryThreshold": "Uso de memória {{ .Percent }}% excede o limite de {{ .Threshold }}%"
|
||||
},
|
||||
"buttons": {
|
||||
"closeKeyboard": "❌ Fechar teclado",
|
||||
"cancel": "❌ Cancelar",
|
||||
"cancelReset": "❌ Cancelar redefinição",
|
||||
"cancelIpLimit": "❌ Cancelar limite de IP",
|
||||
"confirmResetTraffic": "✅ Confirmar redefinição de tráfego?",
|
||||
"confirmClearIps": "✅ Confirmar limpar IPs?",
|
||||
"confirmRemoveTGUser": "✅ Confirmar remover usuário do Telegram?",
|
||||
"confirmToggle": "✅ Confirmar ativar/desativar usuário?",
|
||||
"dbBackup": "Obter backup do DB",
|
||||
"serverUsage": "Uso do servidor",
|
||||
"getInbounds": "Obter Inbounds",
|
||||
"depleteSoon": "Esgotar em breve",
|
||||
"clientUsage": "Obter uso",
|
||||
"onlines": "Clientes online",
|
||||
"commands": "Comandos",
|
||||
"refresh": "🔄 Atualizar",
|
||||
"clearIPs": "❌ Limpar IPs",
|
||||
"removeTGUser": "❌ Remover usuário do Telegram",
|
||||
"selectTGUser": "👤 Selecionar usuário do Telegram",
|
||||
"selectOneTGUser": "👤 Selecione um usuário do Telegram:",
|
||||
"resetTraffic": "📈 Redefinir tráfego",
|
||||
"resetExpire": "📅 Alterar data de expiração",
|
||||
"ipLog": "🔢 Log de IP",
|
||||
"ipLimit": "🔢 Limite de IP",
|
||||
"setTGUser": "👤 Definir usuário do Telegram",
|
||||
"toggle": "🔘 Ativar / Desativar",
|
||||
"custom": "🔢 Personalizado",
|
||||
"confirmNumber": "✅ Confirmar: {{ .Num }}",
|
||||
"confirmNumberAdd": "✅ Confirmar adicionar: {{ .Num }}",
|
||||
"limitTraffic": "🚧 Limite de tráfego",
|
||||
"getBanLogs": "Obter logs de banimento",
|
||||
"allClients": "Todos os clientes",
|
||||
"addClient": "Adicionar Cliente",
|
||||
"submitDisable": "Enviar como Desativado ☑️",
|
||||
"submitEnable": "Enviar como Ativado ✅",
|
||||
"use_default": "🏷️ Usar padrão",
|
||||
"change_email": "⚙️📧 Email",
|
||||
"change_comment": "⚙️💬 Comentário",
|
||||
"ResetAllTraffics": "Redefinir Todo o Tráfego",
|
||||
"SortedTrafficUsageReport": "Relatório de Uso de Tráfego Ordenado"
|
||||
},
|
||||
"answers": {
|
||||
"successfulOperation": "✅ Operação bem-sucedida!",
|
||||
"errorOperation": "❗ Erro na operação.",
|
||||
"getInboundsFailed": "❌ Falha ao obter inbounds.",
|
||||
"getClientsFailed": "❌ Falha ao obter clientes.",
|
||||
"canceled": "❌ {{ .Email }}: Operação cancelada.",
|
||||
"clientRefreshSuccess": "✅ {{ .Email }}: Cliente atualizado com sucesso.",
|
||||
"IpRefreshSuccess": "✅ {{ .Email }}: IPs atualizados com sucesso.",
|
||||
"TGIdRefreshSuccess": "✅ {{ .Email }}: Usuário do Telegram do cliente atualizado com sucesso.",
|
||||
"resetTrafficSuccess": "✅ {{ .Email }}: Tráfego redefinido com sucesso.",
|
||||
"setTrafficLimitSuccess": "✅ {{ .Email }}: Limite de tráfego salvo com sucesso.",
|
||||
"expireResetSuccess": "✅ {{ .Email }}: Dias de expiração redefinidos com sucesso.",
|
||||
"resetIpSuccess": "✅ {{ .Email }}: Limite de IP {{ .Count }} salvo com sucesso.",
|
||||
"clearIpSuccess": "✅ {{ .Email }}: IPs limpos com sucesso.",
|
||||
"getIpLog": "✅ {{ .Email }}: Obter log de IP.",
|
||||
"getUserInfo": "✅ {{ .Email }}: Obter informações do usuário do Telegram.",
|
||||
"removedTGUserSuccess": "✅ {{ .Email }}: Usuário do Telegram removido com sucesso.",
|
||||
"enableSuccess": "✅ {{ .Email }}: Ativado com sucesso.",
|
||||
"disableSuccess": "✅ {{ .Email }}: Desativado com sucesso.",
|
||||
"askToAddUserId": "Sua configuração não foi encontrada!\r\nPeça ao seu administrador para usar seu Telegram ChatID em suas configurações.\r\n\r\nSeu ChatID: <code>{{ .TgUserID }}</code>",
|
||||
"chooseClient": "Escolha um cliente para Inbound {{ .Inbound }}",
|
||||
"chooseInbound": "Escolha um Inbound"
|
||||
}
|
||||
"noIpRecord": "❗ Nenhum registro de IP!"
|
||||
},
|
||||
"email": {
|
||||
"labelStatus": "Status",
|
||||
"labelOutbound": "Outbound",
|
||||
"labelNode": "Nó",
|
||||
"labelError": "Erro",
|
||||
"labelDelay": "Latência",
|
||||
"labelUsername": "Nome de usuário",
|
||||
"labelIP": "IP",
|
||||
"labelReason": "Motivo",
|
||||
"labelSource": "Origem",
|
||||
"statusCrashed": "FALHOU",
|
||||
"statusHigh": "ALTA",
|
||||
"statusSuccess": "SUCESSO",
|
||||
"statusFailed": "FALHOU",
|
||||
"statusDown": "INATIVO",
|
||||
"statusUp": "ATIVO"
|
||||
}
|
||||
"email": {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user