i18n(panel): migrate hardcoded panel strings to en-US and translate all locales

Surface ~400 hardcoded English labels, tooltips, placeholders, dt/divider
text, modal okText/cancelText, and Spin loading from the panel pages
(clients/groups/inbounds/nodes/settings/xray/sub/index) into
web/translation/en-US.json under existing pages.<page>.* namespaces, with
JSX swapped to t(...). Brand and protocol identifiers (TLS, MTU, SNI,
NordVPN, Cloudflare WARP, etc.) stay literal.

Sync all 12 non-English locales (ar-EG, es-ES, fa-IR, id-ID, ja-JP,
pt-BR, ru-RU, tr-TR, uk-UA, vi-VN, zh-CN, zh-TW) to match en-US's
structure and translate the 521 new key paths per locale. Every locale
file now has 1539 lines, mirroring en-US ordering.

Also remove a dead duplicate "info": "Info" key under pages.inbounds
that collided with the new pages.inbounds.info.* object.

Backend: bulk attach/detach errors in web/service/client.go now route
through logger.Warningf (so they appear under /panel/api/server/logs/)
instead of only living on the response payload.
This commit is contained in:
MHSanaei
2026-05-28 18:03:07 +02:00
parent 0829f1ecd4
commit 72b97efa8a
34 changed files with 6391 additions and 1125 deletions
+444 -27
View File
@@ -8,15 +8,22 @@
"save": "Salvar",
"logout": "Sair",
"create": "Criar",
"add": "Adicionar",
"remove": "Remover",
"update": "Atualizar",
"copy": "Copiar",
"copied": "Copiado",
"more": "mais",
"download": "Baixar",
"remark": "Observação",
"enable": "Ativado",
"protocol": "Protocolo",
"search": "Pesquisar",
"filter": "Filtrar",
"all": "Todos",
"from": "De",
"to": "Até",
"done": "Concluído",
"loading": "Carregando...",
"refresh": "Atualizar",
"clear": "Limpar",
@@ -27,7 +34,7 @@
"check": "Verificar",
"indefinite": "Indeterminado",
"unlimited": "Ilimitado",
"none": "Nada",
"none": "Nenhum",
"qrCode": "Código QR",
"info": "Mais Informações",
"edit": "Editar",
@@ -39,7 +46,7 @@
"encryption": "Criptografia",
"useIPv4ForHost": "Usar IPv4 para o host",
"transmission": "Transmissão",
"host": "Servidor",
"host": "Host",
"path": "Caminho",
"camouflage": "Ofuscação",
"status": "Status",
@@ -95,11 +102,12 @@
"dark": "Escuro",
"ultraDark": "Ultra Escuro",
"dashboard": "Visão Geral",
"inbounds": "Inbounds",
"inbounds": "Entradas",
"clients": "Clientes",
"groups": "Grupos",
"nodes": "Nós",
"settings": "Panel Settings",
"xray": "Xray Configs",
"settings": "Configurações do Painel",
"xray": "Configurações Xray",
"apiDocs": "Documentação da API",
"logout": "Sair",
"link": "Gerenciar",
@@ -241,7 +249,7 @@
"getConfigError": "Ocorreu um erro ao recuperar o arquivo de configuração"
},
"inbounds": {
"title": "Inbounds",
"title": "Entradas",
"totalDownUp": "Total Enviado/Recebido",
"totalUsage": "Uso Total",
"inboundCount": "Total de Inbounds",
@@ -270,14 +278,14 @@
},
"protocol": "Protocolo",
"port": "Porta",
"portMap": "Porta Mapeada",
"portMap": "Mapeamento de portas",
"traffic": "Tráfego",
"details": "Detalhes",
"transportConfig": "Transporte",
"expireDate": "Duração",
"createdAt": "Criado",
"updatedAt": "Atualizado",
"resetTraffic": "Redefinir Tráfego",
"resetTraffic": "Redefinir tráfego",
"addInbound": "Adicionar Inbound",
"generalActions": "Ações Gerais",
"modifyInbound": "Modificar Inbound",
@@ -292,11 +300,29 @@
"delAllClients": "Excluir todos os clientes",
"delAllClientsConfirmTitle": "Excluir todos os {count} clientes de \"{remark}\"?",
"delAllClientsConfirmContent": "Remove todos os clientes deste inbound e descarta seus registros de tráfego. O inbound em si é mantido. Esta ação não pode ser desfeita.",
"attachClients": "Associar clientes a…",
"addClientsToGroup": "Adicionar clientes ao grupo…",
"attachClientsTitle": "Associar clientes de «{remark}»",
"attachClientsDesc": "Associa os mesmos {count} cliente(s) (mesmo UUID/senha e tráfego compartilhado) à(s) entrada(s) selecionada(s). Permanecem nesta entrada também.",
"attachClientsTargets": "Entradas de destino",
"attachClientsNoTargets": "Não há outras entradas compatíveis disponíveis para associação.",
"attachClientsResult": "Associados {attached}, ignorados {skipped}.",
"attachClientsResultMixed": "Associados {attached}, ignorados {skipped}, erros {errors}.",
"attachClientsSelectLabel": "Clientes para associar",
"attachClientsSearchPlaceholder": "Buscar email ou comentário",
"attachClientsStatusDisabled": "Desabilitado",
"attachClientsSelectedCount": "{selected} de {total} selecionado(s)",
"detachClients": "Desassociar clientes",
"detachClientsTitle": "Desassociar clientes de «{remark}»",
"detachClientsDesc": "Remove o(s) cliente(s) selecionado(s) apenas desta entrada. Os registros são mantidos (use Delete para remover completamente). A origem tem {count} cliente(s) no total.",
"detachClientsResult": "Desassociados {detached}, ignorados {skipped}.",
"detachClientsResultMixed": "Desassociados {detached}, ignorados {skipped}, erros {errors}.",
"detachClientsSelectLabel": "Clientes para desassociar",
"exportLinksTitle": "Exportar links do inbound",
"exportSubsTitle": "Exportar links de assinatura",
"exportAllLinksTitle": "Exportar todos os links de inbound",
"exportAllSubsTitle": "Exportar todos os links de assinatura",
"inboundJsonTitle": "JSON do inbound",
"inboundJsonTitle": "JSON da entrada",
"deleteClient": "Excluir Cliente",
"deleteClientContent": "Tem certeza de que deseja excluir o cliente?",
"resetTrafficContent": "Tem certeza de que deseja redefinir o tráfego?",
@@ -341,6 +367,7 @@
"IPLimitlogDesc": "O histórico de IPs. (para ativar o inbound após a desativação, limpe o log)",
"IPLimitlogclear": "Limpar o Log",
"setDefaultCert": "Definir Certificado pelo Painel",
"setDefaultCertEmpty": "Nenhum certificado configurado para o painel. Configure um em Configurações primeiro.",
"streamTab": "Stream",
"securityTab": "Segurança",
"sniffingTab": "Sniffing",
@@ -369,7 +396,6 @@
},
"telegramDesc": "Por favor, forneça o ID do Chat do Telegram. (use o comando '/id' no bot) ou ({'@'}userinfobot)",
"subscriptionDesc": "Para encontrar seu URL de assinatura, navegue até 'Detalhes'. Além disso, você pode usar o mesmo nome para vários clientes.",
"info": "Informações",
"same": "Igual",
"inboundData": "Dados do Inbound",
"exportInbound": "Exportar Inbound",
@@ -406,6 +432,139 @@
"getNewmldsa65Error": "Erro ao obter o certificado mldsa65.",
"getNewVlessEncError": "Erro ao obter o certificado VlessEnc."
},
"form": {
"moveUp": "Mover para cima",
"moveDown": "Mover para baixo",
"addAll": "Adicionar todos",
"addAllFallbackTooltip": "Adiciona uma linha de fallback para cada entrada elegível ainda não conectada",
"peers": "Peers",
"addPeer": "Adicionar peer",
"keepAlive": "Keep-alive",
"autoSystemRoutesTooltip": "Apenas Windows. CIDRs são adicionados à tabela de roteamento do sistema automaticamente para que o tráfego correspondente passe pelo TUN.",
"autoOutboundsInterface": "Interface de saída automática",
"autoOutboundsInterfaceTooltip": "Interface física para tráfego de saída. Use 'auto' para detecção; auto-habilitado quando Auto system routes está ativo.",
"rewriteAddress": "Reescrever endereço",
"rewritePort": "Reescrever porta",
"allowedNetwork": "Rede permitida",
"followRedirect": "Seguir redirect",
"accounts": "Contas",
"allowTransparent": "Permitir transparente",
"encryptionMethod": "Método de criptografia",
"visionTestseed": "Vision testseed",
"version": "Versão",
"udpIdleTimeout": "UDP idle timeout (s)",
"masquerade": "Masquerade",
"type": "Tipo",
"upstreamUrl": "URL Upstream",
"rewriteHost": "Reescrever Host",
"skipTlsVerify": "Pular verificação TLS",
"directory": "Diretório",
"statusCode": "Código de status",
"body": "Body",
"headers": "Cabeçalhos",
"proxyProtocol": "Proxy Protocol",
"requestVersion": "Versão da requisição",
"requestMethod": "Método da requisição",
"requestPath": "Caminho da requisição",
"requestHeaders": "Cabeçalhos de requisição",
"responseVersion": "Versão da resposta",
"responseStatus": "Status da resposta",
"responseReason": "Motivo da resposta",
"responseHeaders": "Cabeçalhos de resposta",
"heartbeatPeriod": "Período de heartbeat",
"serviceName": "Nome do serviço",
"authority": "Authority",
"multiMode": "Multi Mode",
"maxBufferedUpload": "Máx. upload em buffer",
"maxUploadSize": "Tamanho máx. de upload (Byte)",
"streamUpServer": "Stream-Up Server",
"serverMaxHeaderBytes": "Máx. bytes cabeçalho servidor",
"paddingBytes": "Bytes de Padding",
"uplinkHttpMethod": "Método HTTP Uplink",
"paddingObfsMode": "Modo obfs de Padding",
"paddingKey": "Padding Key",
"paddingHeader": "Padding Header",
"paddingPlacement": "Posição de Padding",
"paddingMethod": "Método de Padding",
"sessionPlacement": "Session Placement",
"sessionKey": "Session Key",
"sequencePlacement": "Sequence Placement",
"sequenceKey": "Sequence Key",
"uplinkDataPlacement": "Uplink Data Placement",
"uplinkDataKey": "Uplink Data Key",
"noSseHeader": "Sem cabeçalho SSE",
"ttiMs": "TTI (ms)",
"uplinkMbps": "Uplink (MB/s)",
"downlinkMbps": "Downlink (MB/s)",
"cwndMultiplier": "Multiplicador CWND",
"maxSendingWindow": "Máx. janela de envio",
"externalProxy": "Proxy externo",
"sniPlaceholder": "SNI (padrão = host)",
"fingerprint": "Fingerprint",
"defaultOption": "Padrão",
"routeMark": "Route Mark",
"tcpKeepAliveInterval": "TCP Keep Alive Interval",
"tcpKeepAliveIdle": "TCP Keep Alive Idle",
"tcpMaxSeg": "TCP Max Seg",
"tcpUserTimeout": "TCP User Timeout",
"tcpWindowClamp": "TCP Window Clamp",
"tcpFastOpen": "TCP Fast Open",
"multipathTcp": "Multipath TCP",
"penetrate": "Penetrate",
"v6Only": "Apenas V6",
"tcpCongestion": "TCP Congestion",
"dialerProxy": "Dialer Proxy",
"trustedXForwardedFor": "X-Forwarded-For confiável",
"addressPortStrategy": "Estratégia endereço+porta",
"tryDelayMs": "Atraso de tentativa (ms)",
"prioritizeIPv6": "Priorizar IPv6",
"interleave": "Interleave",
"maxConcurrentTry": "Máx. tentativas simultâneas",
"customSockopt": "Sockopt personalizado",
"addCustomOption": "Adicionar opção personalizada",
"serverNameIndication": "SNI",
"cipherSuites": "Cipher Suites",
"autoOption": "Auto",
"minMaxVersion": "Versão mín/máx",
"rejectUnknownSni": "Rejeitar SNI desconhecido",
"disableSystemRoot": "Desabilitar System Root",
"sessionResumption": "Retomada de sessão",
"oneTimeLoading": "Carregamento único",
"usageOption": "Opção de uso",
"buildChain": "Construir cadeia",
"echKey": "ECH key",
"echConfig": "Config ECH",
"getNewEchCert": "Obter novo certificado ECH",
"show": "Mostrar",
"xver": "Xver",
"target": "Alvo",
"maxTimeDiff": "Máx. diferença de tempo (ms)",
"minClientVer": "Mín. versão cliente",
"maxClientVer": "Máx. versão cliente",
"shortIds": "Short IDs",
"spiderX": "SpiderX",
"getNewCert": "Obter novo certificado",
"mldsa65Seed": "mldsa65 Seed",
"mldsa65Verify": "mldsa65 Verify",
"getNewSeed": "Obter novo Seed"
},
"info": {
"mode": "Modo",
"grpcServiceName": "grpc serviceName",
"grpcMultiMode": "grpc multiMode",
"interfaceName": "Nome da interface",
"mtu": "MTU",
"gateway": "Gateway",
"dns": "DNS",
"outboundsInterface": "Interface de saída",
"autoSystemRoutes": "Rotas do sistema automáticas",
"followRedirect": "FollowRedirect",
"auth": "Auth",
"noKernelTun": "TUN sem kernel",
"keepAlive": "Keep alive",
"peerNumber": "Peer {n}",
"peerNumberConfig": "Config Peer {n}"
},
"stream": {
"general": {
"request": "Requisição",
@@ -456,6 +615,20 @@
"days": "Dia(s)",
"renew": "Renovação automática",
"renewDesc": "Renovação automática após a expiração. (0 = desativar) (unidade: dia)",
"searchPlaceholder": "Buscar email, comentário, sub ID, UUID, senha, auth…",
"filterTitle": "Filtrar clientes",
"clearAllFilters": "Limpar tudo",
"sortOldest": "Mais antigos primeiro",
"sortNewest": "Mais novos primeiro",
"sortRecentlyUpdated": "Atualizados recentemente",
"sortRecentlyOnline": "Online recentemente",
"sortEmailAZ": "Email A→Z",
"sortEmailZA": "Email Z→A",
"sortMostTraffic": "Mais tráfego",
"sortHighestRemaining": "Maior restante",
"sortExpiringSoonest": "Expira em breve",
"has": "Tem",
"hasNot": "Não tem",
"title": "Clientes",
"actions": "Ações",
"totalGB": "Total enviado/recebido (GB)",
@@ -465,7 +638,10 @@
"password": "Senha",
"subId": "ID da assinatura",
"online": "Online",
"email": "E-mail",
"email": "Email",
"group": "Grupo",
"groupDesc": "Rótulo lógico para agrupar clientes relacionados (ex.: equipe, cliente, região). Filtrável pela barra de ferramentas.",
"groupPlaceholder": "ex.: customer-a",
"comment": "Comentário",
"traffic": "Tráfego",
"offline": "Offline",
@@ -489,11 +665,45 @@
"resetAllTraffics": "Redefinir o tráfego de todos os clientes",
"resetAllTrafficsTitle": "Redefinir o tráfego de todos os clientes?",
"resetAllTrafficsContent": "Os contadores de envio/recebimento de cada cliente vão a zero. Cota e expiração não são afetadas. Não é possível desfazer.",
"empty": "Ainda não há clientes — adicione um para começar.",
"deleteConfirmTitle": "Excluir o cliente {email}?",
"deleteConfirmContent": "Isto remove o cliente de cada inbound associado e descarta o registro de tráfego. Não é possível desfazer.",
"deleteSelected": "Excluir ({count})",
"adjustSelected": "Ajustar ({count})",
"subLinksSelected": "Links sub ({count})",
"addToGroupTitle": "Adicionar {count} cliente(s) a um grupo",
"addToGroupTooltip": "Escolha um grupo existente ou digite um novo nome. Use Ungroup para remover clientes do grupo atual.",
"addToGroupPlaceholder": "Nome do grupo",
"addToGroupSuccessToast": "{count} cliente(s) adicionado(s) a {group}",
"ungroupSuccessToast": "Grupo limpo de {count} cliente(s)",
"ungroup": "Desagrupar",
"ungroupConfirmTitle": "Remover {count} cliente(s) do grupo?",
"ungroupConfirmContent": "Limpa o rótulo de grupo de cada cliente selecionado. Os clientes em si são mantidos (use Delete para remover completamente).",
"addToGroup": "Adicionar ao grupo",
"attach": "Associar",
"adjust": "Ajustar",
"subLinks": "Links de assinatura",
"selectedCount": "{count} selecionado(s)",
"attachSelected": "Associar ({count})",
"attachToInboundsTitle": "Associar {count} cliente(s) a entrada(s)",
"attachToInboundsDesc": "Associa os {count} cliente(s) selecionados (mesmo UUID/senha e tráfego compartilhado) às entradas escolhidas. Mantêm suas associações existentes.",
"attachToInboundsTargets": "Entradas de destino",
"attachToInboundsNoTargets": "Não há entradas multiusuário disponíveis para associação.",
"detachSelected": "Desassociar ({count})",
"detach": "Desassociar",
"detachFromInboundsTitle": "Desassociar {count} cliente(s) de entrada(s)",
"detachFromInboundsDesc": "Remove os {count} cliente(s) selecionados das entradas escolhidas. Pares onde o cliente não estava associado são ignorados silenciosamente. Os registros dos clientes são mantidos (use Delete para remover completamente).",
"detachFromInboundsTargets": "Entradas para desassociar",
"detachFromInboundsNoTargets": "Não há entradas multiusuário disponíveis.",
"detachFromInboundsResult": "Desassociados {detached}, ignorados {skipped}.",
"detachFromInboundsResultMixed": "Desassociados {detached}, ignorados {skipped}, erros {errors}.",
"subLinksTitle": "Links sub ({count})",
"subLinkColumn": "URL da assinatura",
"subJsonLinkColumn": "URL JSON da assinatura",
"subLinksCopyAll": "Copiar tudo",
"subLinksCopiedAll": "Copiados {count} link(s)",
"subLinksEmpty": "Nenhum dos clientes selecionados tem ID de assinatura.",
"subLinksDisabled": "O serviço de assinatura está desabilitado.",
"subLinksDisabledHint": "Habilite a assinatura em Configurações do Painel → Assinatura para gerar links.",
"bulkDeleteConfirmTitle": "Excluir {count} clientes?",
"bulkDeleteConfirmContent": "Cada cliente selecionado é removido dos inbounds associados e o registro de tráfego é descartado. Não é possível desfazer.",
"bulkAdjustTitle": "Ajustar {count} clientes",
@@ -505,10 +715,11 @@
"delDepletedConfirmTitle": "Excluir clientes esgotados?",
"delDepletedConfirmContent": "Remove todos os clientes cuja cota de tráfego foi esgotada ou cuja expiração já passou. Não é possível desfazer.",
"auth": "Auth",
"hysteriaAuth": "Auth do Hysteria",
"hysteriaAuth": "Hysteria Auth",
"uuid": "UUID",
"flow": "Flow",
"reverseTag": "Reverse tag",
"vmessSecurity": "Segurança VMess",
"reverseTag": "Tag reversa",
"reverseTagPlaceholder": "Reverse tag opcional",
"telegramId": "ID de usuário do Telegram",
"telegramIdPlaceholder": "ID numérico de usuário do Telegram (0 = nenhum)",
@@ -528,6 +739,44 @@
"delDepleted": "{count} clientes esgotados excluídos"
}
},
"groups": {
"title": "Grupos",
"name": "Nome",
"clientCount": "Clientes no grupo",
"totalGroups": "Total de grupos",
"totalGroupedClients": "Clientes com grupo",
"emptyGroups": "Grupos vazios",
"addGroup": "Adicionar grupo",
"createSuccess": "Grupo «{name}» criado.",
"rename": "Renomear",
"renameTitle": "Renomear {name}",
"renameCollision": "Já existe um grupo chamado «{name}».",
"renameSuccess": "Grupo renomeado em {count} cliente(s).",
"deleteConfirmTitle": "Excluir o grupo {name}?",
"deleteConfirmContent": "Isso remove o grupo e limpa seu rótulo de {count} cliente(s). Os clientes em si não são excluídos.",
"deleteSuccess": "Grupo limpo de {count} cliente(s).",
"resetTraffic": "Redefinir tráfego",
"resetConfirmTitle": "Redefinir tráfego do grupo {name}?",
"resetConfirmContent": "Isso zera up/down para todos os {count} cliente(s) deste grupo.",
"resetSuccess": "Tráfego redefinido para {count} cliente(s).",
"adjustSuccess": "Ajustados {count} cliente(s) em {name}.",
"emptyForAction": "Este grupo ainda não tem clientes.",
"deleteGroupOnly": "Excluir grupo (manter clientes)",
"deleteClients": "Excluir clientes do grupo",
"deleteClientsConfirmTitle": "Excluir todos os clientes em {name}?",
"deleteClientsConfirmContent": "Isso remove permanentemente {count} cliente(s) junto com seus registros de tráfego. O rótulo de grupo também é limpo. Isso não pode ser desfeito.",
"deleteClientsSuccess": "Excluídos {count} cliente(s).",
"deleteClientsMixed": "{ok} excluídos, {failed} ignorados",
"addToGroup": "Adicionar clientes…",
"addToGroupTitle": "Adicionar clientes ao grupo «{name}»",
"addToGroupDesc": "Selecione clientes para adicionar a este grupo. Mantêm suas associações de entrada atuais; apenas o rótulo de grupo muda. Clientes já neste grupo não são listados.",
"addToGroupEmpty": "Não há outros clientes disponíveis para adicionar.",
"addToGroupResult": "Adicionados {count} cliente(s) a {name}.",
"removeFromGroup": "Remover clientes…",
"removeFromGroupTitle": "Remover clientes do grupo «{name}»",
"removeFromGroupDesc": "Selecione membros para remover deste grupo. Os clientes em si são mantidos (use «Excluir clientes do grupo» para removê-los por completo).",
"removeFromGroupResult": "Removidos {count} cliente(s) de {name}."
},
"nodes": {
"title": "Nós",
"addNode": "Adicionar nó",
@@ -544,7 +793,7 @@
"address": "Endereço",
"port": "Porta",
"basePath": "Caminho base",
"apiToken": "Token da API",
"apiToken": "Token API",
"apiTokenPlaceholder": "Token da página de Configurações do painel remoto",
"apiTokenHint": "O painel remoto exibe o token da API em Configurações → Token da API.",
"regenerate": "Regenerar token",
@@ -590,7 +839,7 @@
"title": "Configurações do Painel",
"save": "Salvar",
"infoDesc": "Toda alteração feita aqui precisa ser salva. Reinicie o painel para aplicar as alterações.",
"restartPanel": "Reiniciar Painel",
"restartPanel": "Reiniciar painel",
"restartPanelDesc": "Tem certeza de que deseja reiniciar o painel? Se não conseguir acessar o painel após reiniciar, consulte os logs do painel no servidor.",
"restartPanelSuccess": "O painel foi reiniciado com sucesso",
"actions": "Ações",
@@ -619,6 +868,8 @@
"panelUrlPathDesc": "O caminho URI para o painel web. (começa com / e termina com /)",
"pageSize": "Tamanho da Paginação",
"pageSizeDesc": "Definir o tamanho da página para a tabela de entradas. (0 = desativado)",
"panelProxy": "Proxy de rede do painel",
"panelProxyDesc": "Encaminha as requisições de saída do próprio painel (atualizações de geo, verificações de versão do Xray/painel, Telegram) por este proxy para contornar a filtragem de GitHub/Telegram no servidor. Aceita socks5:// ou http(s)://, ex. uma entrada SOCKS local do Xray. Deixe vazio para conexão direta.",
"remarkModel": "Modelo de Observação & Caractere de Separação",
"datepicker": "Tipo de Calendário",
"datepickerPlaceholder": "Selecionar data",
@@ -634,7 +885,7 @@
"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": "API Server do Telegram",
"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)",
@@ -658,6 +909,8 @@
"subEnable": "Ativar Serviço de Assinatura",
"subEnableDesc": "Ativa o serviço de assinatura.",
"subJsonEnable": "Ativar/Desativar o endpoint de assinatura JSON de forma independente.",
"subJsonEnableTitle": "Assinatura JSON",
"subClashEnableTitle": "Assinatura Clash / Mihomo",
"subTitle": "Título da Assinatura",
"subTitleDesc": "Título exibido no cliente VPN",
"subSupportUrl": "URL de Suporte",
@@ -693,7 +946,7 @@
"subURI": "URI de Proxy Reverso",
"subURIDesc": "O caminho URI da URL de assinatura para uso por trás de proxies.",
"externalTrafficInformEnable": "Informações de tráfego externo",
"externalTrafficInformEnableDesc": "Informar a API externa sobre cada atualização de tráfego.",
"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",
@@ -703,6 +956,54 @@
"fragmentSett": "Configurações de Fragmentação",
"noisesDesc": "Ativar Noises.",
"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)",
"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": {
"packets": "Pacotes",
"length": "Comprimento",
"interval": "Intervalo",
"maxSplit": "Máx. divisão",
"noises": "Ruídos",
"noiseItem": "Ruído №{n}",
"type": "Tipo",
"packet": "Pacote",
"delayMs": "Atraso (ms)",
"applyTo": "Aplicar a",
"addNoise": "+ Ruído",
"concurrency": "Concorrência",
"xudpConcurrency": "Concorrência xudp",
"xudpUdp443": "xudp UDP 443"
},
"mux": "Mux",
"muxDesc": "Transmitir múltiplos fluxos de dados independentes dentro de um fluxo de dados estabelecido.",
"muxSett": "Configurações de Mux",
@@ -758,6 +1059,9 @@
"save": "Salvar",
"restart": "Reiniciar Xray",
"restartSuccess": "Xray foi reiniciado com sucesso",
"restartOutputTitle": "Saída do reinício do Xray",
"restartConfirmTitle": "Reiniciar xray?",
"restartConfirmContent": "Recarrega o serviço xray com a configuração salva.",
"stopSuccess": "Xray foi interrompido com sucesso",
"restartError": "Ocorreu um erro ao reiniciar o Xray.",
"stopError": "Ocorreu um erro ao parar o Xray.",
@@ -790,14 +1094,16 @@
"outboundTestUrl": "URL de teste de outbound",
"outboundTestUrlDesc": "URL usada ao testar conectividade do outbound",
"Torrent": "Bloquear Protocolo BitTorrent",
"Inbounds": "Inbounds",
"Inbounds": "Entradas",
"InboundsDesc": "Aceitar clientes específicos.",
"Outbounds": "Outbounds",
"Outbounds": "Saídas",
"Balancers": "Balanceadores",
"balancerTagRequired": "A tag é obrigatória",
"balancerSelectorRequired": "Selecione pelo menos uma saída",
"OutboundsDesc": "Definir o caminho de saída do tráfego.",
"Routings": "Regras de Roteamento",
"RoutingsDesc": "A prioridade de cada regra é importante!",
"completeTemplate": "Todos",
"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",
@@ -832,6 +1138,73 @@
"edit": "Editar Regra",
"useComma": "Itens separados por vírgula"
},
"routing": {
"dragToReorder": "Arraste para reordenar"
},
"ruleForm": {
"sourceIps": "IPs de origem",
"sourcePort": "Porta de origem",
"vlessRoute": "Rota VLESS",
"attributes": "Atributos",
"value": "Valor",
"user": "Usuário",
"inboundTags": "Tags de entradas",
"outboundTag": "Tag de saída",
"balancerTag": "Tag de balanceador",
"balancerTagTooltip": "Encaminha tráfego por um dos balanceadores configurados"
},
"outboundForm": {
"tagDuplicate": "Tag já usada por outra saída",
"tagRequired": "A tag é obrigatória",
"tagPlaceholder": "tag-única",
"localIpPlaceholder": "IP local",
"addressRequired": "Endereço é obrigatório",
"portRequired": "Porta é obrigatória",
"optional": "opcional",
"udpOverTcp": "UDP sobre TCP",
"uotVersion": "Versão UoT",
"inboundTag": "Tag de entrada",
"inboundTagPlaceholder": "tag de entrada usada em regras de roteamento",
"responseType": "Tipo de resposta",
"rewriteNetwork": "Reescrever rede",
"unchanged": "(inalterado)",
"unchangedAddress": "(inalterado) ex. 1.1.1.1",
"rules": "Regras",
"ruleN": "Regra {n}",
"action": "Ação",
"redirect": "Redirect",
"fragment": "Fragment",
"finalRules": "Regras finais",
"overrideXrayPrivateIp": "Sobrescrever o bloqueio de IP privado padrão do Xray",
"blockDelay": "Atraso do bloqueio (ms)",
"reverseSniffing": "Sniffing reverso",
"workers": "Workers",
"reserved": "Reservado",
"minUploadInterval": "Intervalo mín. de upload (ms)",
"maxUploadSizeBytes": "Tamanho máx. de upload (bytes)",
"uplinkChunkSize": "Tamanho do chunk Uplink",
"noGrpcHeader": "Sem cabeçalho gRPC",
"maxConcurrency": "Máx. concorrência",
"maxConnections": "Máx. conexões",
"maxReuseTimes": "Máx. reutilizações",
"maxRequestTimes": "Máx. requisições",
"maxReusableSecs": "Máx. segundos reutilizáveis",
"keepAlivePeriod": "Período keep alive",
"authPassword": "Senha de auth",
"visionTestpre": "Vision testpre",
"serverNamePlaceholder": "nome do servidor",
"verifyPeerName": "Verificar nome do peer",
"pinnedSha256": "SHA256 pinned",
"shortId": "Short ID",
"sockopts": "Sockopts",
"keepAliveInterval": "Intervalo keep alive",
"markFwmark": "Mark (fwmark)",
"interface": "Interface",
"ipv6Only": "Apenas IPv6",
"acceptProxyProtocol": "Aceitar proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
"outbound": {
"addOutbound": "Adicionar Saída",
"addReverse": "Adicionar Reverso",
@@ -846,7 +1219,7 @@
"reverse": "Reverso",
"domain": "Domínio",
"type": "Tipo",
"bridge": "Ponte",
"bridge": "Bridge",
"portal": "Portal",
"link": "Link",
"intercon": "Interconexão",
@@ -860,6 +1233,8 @@
"testSuccess": "Teste bem-sucedido",
"testFailed": "Teste falhou",
"testError": "Falha ao testar saída",
"testModeTooltip": "TCP: sondagem rápida apenas de dial. HTTP: requisição completa pelo xray.",
"testAll": "Testar todos",
"nordvpn": "NordVPN",
"accessToken": "Token de Acesso",
"country": "País",
@@ -876,6 +1251,16 @@
"balancerSelectors": "Seletores",
"tag": "Tag",
"tagDesc": "Tag Única",
"tagDuplicate": "Tag já usada por outro balanceador",
"tagPlaceholder": "tag única do balanceador",
"selector": "Seletor",
"fallback": "Fallback",
"expected": "Esperado",
"expectedPlaceholder": "número ótimo de nós",
"maxRtt": "Máx. RTT",
"tolerance": "Tolerância",
"baselines": "Baselines",
"costs": "Costs",
"balancerDesc": "Não é possível usar balancerTag e outboundTag ao mesmo tempo. Se usados simultaneamente, apenas outboundTag funcionará."
},
"wireguard": {
@@ -892,6 +1277,38 @@
"userLevel": "Nível do Usuário",
"userLevelDesc": "Todas as conexões feitas através deste inbound usarão este nível de usuário. O padrão é 0"
},
"nord": {
"accessToken": "Access token",
"privateKey": "Chave privada",
"noServers": "Nenhum servidor encontrado para o país selecionado",
"noPublicKey": "O servidor selecionado não anuncia uma chave pública NordLynx.",
"outboundAdded": "Saída NordVPN adicionada",
"outboundUpdated": "Saída NordVPN atualizada"
},
"warp": {
"licenseError": "Falha ao definir licença WARP.",
"fetchFirst": "Obtenha primeiro a configuração WARP.",
"createAccount": "Criar conta WARP",
"accessToken": "Access token",
"deviceId": "ID do dispositivo",
"licenseKey": "Chave de licença",
"privateKey": "Chave privada",
"deleteAccount": "Excluir conta",
"settings": "Configurações",
"licenseKeyLabel": "Chave de licença WARP / WARP+",
"key": "Chave",
"keyPlaceholder": "chave WARP+ de 26 caracteres",
"accountInfo": "Informação da conta",
"deviceName": "Nome do dispositivo",
"deviceModel": "Modelo do dispositivo",
"deviceEnabled": "Dispositivo habilitado",
"accountType": "Tipo de conta",
"role": "Função",
"warpPlusData": "Dados WARP+",
"quota": "Quota",
"usage": "Uso",
"addOutbound": "Adicionar saída"
},
"dns": {
"enable": "Ativar DNS",
"enableDesc": "Ativar o servidor DNS integrado",
@@ -959,7 +1376,7 @@
"hours": "Horas",
"minutes": "Minutos",
"unknown": "Desconhecido",
"inbounds": "Inbounds",
"inbounds": "Entradas",
"clients": "Clientes",
"offline": "🔴 Offline",
"online": "🟢 Online",
@@ -1009,7 +1426,7 @@
"username": "👤 Nome de usuário: {{ .Username }}\r\n",
"reason": "❗️ Motivo: {{ .Reason }}\r\n",
"time": "⏰ Hora: {{ .Time }}\r\n",
"inbound": "📍 Inbound: {{ .Remark }}\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",
@@ -1089,9 +1506,9 @@
"use_default": "🏷️ Usar padrão",
"change_id": "⚙️🔑 ID",
"change_password": "⚙️🔑 Senha",
"change_email": "⚙️📧 E-mail",
"change_email": "⚙️📧 Email",
"change_comment": "⚙️💬 Comentário",
"change_flow": "⚙️🚦 Fluxo",
"change_flow": "⚙️🚦 Flow",
"ResetAllTraffics": "Redefinir Todo o Tráfego",
"SortedTrafficUsageReport": "Relatório de Uso de Tráfego Ordenado"
},
@@ -1119,4 +1536,4 @@
"chooseInbound": "Escolha um Inbound"
}
}
}
}