merge fix/settings-trim: dead settings, upstream remnants, JSON/Clash subscriptions removed

# Conflicts:
#	frontend/src/models/setting.ts
#	frontend/src/pages/settings/GeneralTab.tsx
#	frontend/src/pages/settings/SettingsPage.tsx
#	frontend/src/pages/settings/SubscriptionBalancersTab.tsx
#	frontend/src/pages/xray/outbounds/OutboundsTab.css
#	frontend/src/schemas/setting.ts
This commit is contained in:
Muse
2026-10-23 00:39:44 +00:00
109 changed files with 386 additions and 11297 deletions
+1 -108
View File
@@ -70,7 +70,6 @@
"install": "Instalar",
"clients": "Clientes",
"usage": "Uso",
"twoFactorCode": "Código",
"remained": "Restante",
"security": "Segurança",
"somethingWentWrong": "Algo deu errado",
@@ -103,8 +102,7 @@
"docs": "Documentação",
"openMenu": "Abrir menu",
"pinSidebar": "Fixar barra lateral",
"unpinSidebar": "Desafixar barra lateral",
"subFormats": "Sub Formats"
"unpinSidebar": "Desafixar barra lateral"
},
"pages": {
"login": {
@@ -716,7 +714,6 @@
"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.",
@@ -1068,7 +1065,6 @@
"warnDefaultPort": "A porta padrão 2053 é bem conhecida — altere para uma porta aleatória.",
"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.",
"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",
@@ -1083,12 +1079,7 @@
"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)",
"panelOutbound": "Saída do tráfego do painel",
"panelOutboundDesc": "Encaminha as requisições do próprio painel — verificações de versão e downloads do painel/Xray, Telegram e a atualização normal de arquivos geo — por esta saída do Xray para contornar a filtragem de GitHub/Telegram no servidor. Uma entrada ponte local é adicionada automaticamente à configuração em execução e aplicada ao vivo. A Atualização Automática de Geodata nativa do Xray não é afetada; ela tem sua própria saída de download. Deixe vazio para conexão direta.",
"panelOutboundPh": "Conexão direta",
"datepicker": "Tipo de Calendário",
"datepickerPlaceholder": "Selecionar data",
"datepickerDescription": "Tarefas agendadas serão executadas com base neste calendário.",
"oldUsername": "Nome de Usuário Atual",
"currentPassword": "Senha Atual",
"newUsername": "Novo Nome de Usuário",
@@ -1104,22 +1095,6 @@
"subSettings": "Assinatura",
"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",
"subFormatsTipTitle": "Configurações de assinatura específicas por formato",
"subFormatsTipDesc": "Configure separadamente os caminhos de URL, URLs reversas e a detecção automática de clientes para JSON e Clash / Mihomo.",
"subFormatsTipAction": "Abrir formatos de assinatura",
"subJsonAutoDetect": "Detectar clientes Xray JSON automaticamente",
"subJsonAutoDetectDesc": "Quando ativado, clientes compatíveis reconhecidos que solicitarem a URL de assinatura padrão receberão automaticamente uma matriz de configurações Xray JSON. Os outros clientes manterão a resposta bruta/Base64. Requer a assinatura JSON ativada e a reinicialização do painel.",
"subJsonAlwaysArray": "Sempre retornar uma matriz JSON",
"subJsonAlwaysArrayDesc": "Retorna o endpoint JSON explícito como matriz mesmo com apenas um perfil, conforme o padrão XTLS. Respostas JSON detectadas automaticamente sempre usam matrizes. Desative para preservar a resposta legada de objeto único.",
"subJsonUserAgentRegex": "Expressão User-Agent do Xray JSON",
"subJsonUserAgentRegexDesc": "Expressão regular Go RE2 comparada com o User-Agent do cliente para selecionar automaticamente o formato Xray JSON na URL de assinatura padrão. Vazia por padrão, então a detecção automática permanece desativada até você definir um padrão para os clientes que deseja atender. Os outros clientes mantêm a resposta bruta/Base64. Reinicie o painel após alterá-la.",
"subClashAutoDetect": "Detectar clientes Clash/Mihomo automaticamente",
"subClashAutoDetectDesc": "Quando ativado, clientes Clash/Mihomo reconhecidos que solicitarem a URL de assinatura padrão receberão automaticamente YAML do Clash. Os navegadores continuarão exibindo a página de assinatura, os outros clientes manterão a resposta bruta/Base64 e as URLs explícitas de JSON e Clash continuarão disponíveis. Requer a assinatura Clash/Mihomo ativada e a reinicialização do painel para aplicar a alteração.",
"subClashUserAgentRegex": "Expressão User-Agent do Clash/Mihomo",
"subClashUserAgentRegexDesc": "Expressão regular Go RE2 comparada com o User-Agent do cliente para reconhecer clientes Clash/Mihomo na URL de assinatura padrão. Deixe em branco para usar o padrão predefinido. Reinicie o painel após alterá-la.",
"subTitle": "Título da Assinatura",
"subTitleDesc": "Título exibido no cliente VPN. Suporta tokens de identidade do cliente: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subSupportUrl": "URL de Suporte",
@@ -1128,23 +1103,8 @@
"subProfileUrlDesc": "Um link para o seu site exibido no cliente VPN. Suporta tokens de identidade do cliente: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subAnnounce": "Anúncio",
"subAnnounceDesc": "O texto do anúncio exibido no cliente VPN. Suporta tokens de identidade do cliente: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subThemeDir": "Diretório do tema de assinatura",
"subThemeDirDesc": "Caminho absoluto para uma pasta contendo um modelo personalizado (index.html/sub.html) para a página de assinatura (ex.: /etc/3x-ui/sub_templates/my-theme/). Deixe vazio para usar a página padrão.",
"subThemeDirDocs": "Guia de modelos ↗",
"subEnableRouting": "Ativar roteamento",
"subEnableRoutingDesc": "Configuração global para habilitar o roteamento no cliente VPN. (Apenas para Happ)",
"subRoutingRules": "Regras de roteamento",
"subRoutingRulesDesc": "Cole um deeplink happ:// pronto ou uma URL HTTPS permanente. O painel atualiza as regras remotas em segundo plano e mantém o último valor válido, sem atrasar as solicitações de assinatura. (Apenas para Happ)",
"subHideSettings": "Ocultar configurações do servidor",
"subHideSettingsDesc": "Ocultar a capacidade de visualizar e editar as configurações do servidor no cliente VPN. (Apenas para Happ)",
"subIncyEnableRouting": "Ativar roteamento",
"subIncyEnableRoutingDesc": "Injetar um perfil de roteamento no corpo da assinatura para o cliente Incy. (Apenas para Incy)",
"subIncyRoutingRules": "Regras de roteamento",
"subIncyRoutingRulesDesc": "Cole um deeplink incy:// pronto ou uma URL HTTPS permanente para JSON. O Incy cria um perfil de autorouting e o atualiza automaticamente. (Apenas para Incy)",
"subClashEnableRouting": "Ativar roteamento",
"subClashEnableRoutingDesc": "Incluir regras globais de roteamento Clash/Mihomo nas assinaturas YAML geradas.",
"subClashRoutingRules": "Regras globais de roteamento",
"subClashRoutingRulesDesc": "Cole regras/YAML ou uma URL HTTPS permanente. O painel a atualiza em segundo plano, importa apenas grupos, provedores de regras e regras, e preserva os nós VPN gerados e o último valor válido.",
"subListen": "IP de Escuta",
"subListenDesc": "O endereço IP para o serviço de assinatura. (deixe em branco para escutar em todos os IPs)",
"subPort": "Porta de Escuta",
@@ -1173,8 +1133,6 @@
"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.",
"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.",
"packets": "Pacotes",
"length": "Comprimento",
"interval": "Intervalo",
@@ -1185,16 +1143,12 @@
"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",
"direct": "Conexão Direta",
"directDesc": "Estabelece conexões diretamente com domínios ou intervalos de IP de um país específico.",
"certs": "Certificados",
"dateAndTime": "Data e Hora",
"proxyAndServer": "Proxy e Servidor",
@@ -1204,7 +1158,6 @@
"language": "Idioma",
"security": {
"admin": "Credenciais de administrador",
"twoFactorModalError": "Código incorreto",
"show": "Mostrar",
"hide": "Ocultar",
"apiTokenNew": "Novo token",
@@ -1226,9 +1179,6 @@
"getOutboundTrafficError": "Erro ao obter tráfego de saída",
"resetOutboundTrafficError": "Erro ao redefinir tráfego de saída"
},
"eventOutboundDown": "Inativo",
"eventOutboundUp": "Ativo",
"eventXrayCrash": "Falha",
"eventNodeDown": "Inativo",
"eventNodeUp": "Ativo",
"eventCPUHigh": "CPU alta (%)",
@@ -1244,59 +1194,6 @@
},
"secretClear": "Limpar",
"secretClearUndo": "Desfazer limpeza",
"calendarGregorian": "Gregorian (Standard)",
"calendarJalalian": "Jalalian (شمسی)",
"ipLimitAllowlist": "Lista de permissões do limite de IP",
"ipLimitAllowlistDesc": "Endereços e redes que o limite de IP nunca conta nem bane, para que um endereço compartilhado de escritório ou campus não esgote o limite de um cliente. IPs/CIDRs separados por vírgula.",
"subBalancers": {
"menu": "Balanceadores de assinatura",
"title": "Balanceador de assinatura",
"add": "Adicionar balanceador",
"desc": "Cada balanceador ativo é adicionado à assinatura JSON como um perfil extra que escolhe automaticamente o melhor endpoint entre os inbounds selecionados.",
"remark": "Descrição",
"remarkPlaceholder": "Auto · mais rápido",
"strategy": "Estratégia",
"strategyLeastLoad": "Menor carga",
"strategyLeastPing": "Menor ping",
"strategyRandom": "Aleatório",
"strategyRoundRobin": "Round robin",
"sortOrder": "Ordem",
"sortOrderHelp": "Posição na lista da assinatura, intercalada com a ordem dos inbounds; em caso de empate, o balanceador vem depois do inbound.",
"inbounds": "Inbounds",
"inboundsCount": "{count} Inbounds",
"enabled": "Ativado",
"empty": "Ainda não há balanceadores",
"deleteConfirm": "Excluir este balanceador?",
"errRemarkRequired": "A descrição é obrigatória",
"errInboundsRequired": "Selecione ao menos um inbound",
"errSortOrder": "A ordem deve ser um inteiro ≥ 1",
"toasts": {
"list": "Falha ao listar os balanceadores de assinatura",
"create": "Falha ao criar o balanceador de assinatura",
"update": "Falha ao atualizar o balanceador de assinatura",
"delete": "Falha ao excluir o balanceador de assinatura",
"invalidId": "Id inválido"
},
"tabBalancers": "Balanceadores",
"tabObservatory": "Observatório",
"observatory": {
"title": "Observatório do balanceador",
"desc": "Parâmetros de probe para o burstObservatory embutido em cada perfil leastPing/leastLoad. random/roundRobin não geram observatório. Salvo como ajuste global da assinatura JSON.",
"destination": "URL de probe",
"destinationDesc": "Endereço que o cliente sonda para medir cada saída membro.",
"connectivity": "URL de conectividade",
"connectivityDesc": "Endereço opcional para verificar uma vez que o membro alcança o destino. Vazio para pular.",
"interval": "Intervalo de probe",
"intervalDesc": "Tempo entre rodadas de probe, p. ex. 1m.",
"timeout": "Tempo limite de probe",
"timeoutDesc": "Tempo limite de cada probe, p. ex. 5s.",
"sampling": "Amostragem",
"samplingDesc": "Número de probes consecutivos para média de estabilidade.",
"httpMethod": "Método HTTP",
"httpMethodDesc": "Método usado nas requisições de probe.",
"note": "Balanceadores leastPing/leastLoad sempre carregam um burstObservatory. Esta opção personaliza seus parâmetros de probe — desligue-a para usar os padrões integrados. As alterações se aplicam após reiniciar o painel."
}
},
"TGBotSettings": "Bot do Telegram",
"notifications": "Notificações",
"notifyTime": {
@@ -1640,12 +1537,8 @@
"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 }}",