♻️ refactor: Refactoring and adding multiple features

This commit is contained in:
web
2025-08-05 06:42:39 -07:00
committed by speakeloudest
parent 5a2fa2e937
commit 47d19d1b44
106 changed files with 6893 additions and 4604 deletions
+4 -11
View File
@@ -1,32 +1,25 @@
{
"ADS Config": "Configuração ADS",
"Announcement Management": "Gerenciamento de Anúncios",
"Apple": "ID Apple",
"Application Management": "Gerenciamento de Aplicativos",
"Auth Control": "Controle de Autenticação",
"Coupon Management": "Gerenciamento de Cupons",
"Dashboard": "Painel de Controle",
"Device": "Dispositivo",
"Document Management": "Gerenciamento de Documentos",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finanças",
"General": "Geral",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gerenciamento de Pedidos",
"Payment Config": "Configuração de Pagamento",
"Phone Number": "Número de Telefone",
"Product Management": "Gestão de Produtos",
"Protocol Management": "Gestão de Protocolos",
"Rule Management": "Gerenciamento de Regras",
"Server": "Servidor",
"Server Management": "Gerenciamento de Servidor",
"Settings": "Configurações",
"Subscribe Management": "Gerenciamento de Assinaturas",
"Subscribe Config": "Configuração de Assinatura",
"System Config": "Configuração do Sistema",
"System Management": "Gerenciamento de Sistema",
"System Tool": "Ferramenta do Sistema",
"Telegram": "Telegram",
"Ticket Management": "Gerenciamento de Chamados",
"Twitter": "Twitter",
"User": "Usuário",
"User Detail": "Detalhes do Usuário",
"User Management": "Gerenciamento de Usuários"
+160
View File
@@ -0,0 +1,160 @@
{
"actions": "ações",
"app": {
"appDownloadURL": "URL de Download do App",
"appIcon": "Ícone do App",
"appList": "Lista de Apps",
"appName": "Nome do App",
"backupDomains": "Lista de Domínios de Backup",
"backupDomainsDescription": "Lista de domínios de backup para resolução de domínios, um domínio por linha",
"batchDelete": "Excluir em Lote",
"cancel": "Cancelar",
"communicationKey": "Chave de Comunicação",
"communicationKeyDescription": "Chave usada para comunicação com o cliente",
"config": "Configuração",
"configApp": "Configuração do App",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Exclusão",
"create": "Criar",
"createApp": "Criar App",
"createSuccess": "Criado com sucesso",
"defaultVersion": "Padrão",
"delete": "Excluir",
"deleteWarning": "Esta ação não pode ser desfeita",
"describeDescription": "Usado para descrever o aplicativo, exibido na lista de apps",
"description": "Descrição",
"downloadLink": "Link para Download",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Criptografia",
"encryptionDescription": "Escolha o método de criptografia para comunicação com o cliente. Se selecionado, o cliente usará este método para se comunicar com o servidor",
"nameDescription": "Nome do aplicativo, exibido na lista de apps",
"platform": "Plataforma",
"selectApp": "Selecionar Aplicativo",
"selectAppDescription": "Selecione o aplicativo para configurar, todas as configurações serão aplicadas ao aplicativo selecionado",
"startupPicture": "Imagem de Inicialização",
"startupPictureDescription": "Imagem de inicialização, suporta imagens de rede e locais. Para imagens de rede, por favor insira a URL completa da imagem",
"startupPicturePreview": "Pré-visualização da Imagem de Inicialização",
"startupPictureSkip": "Tempo de Pular Imagem de Inicialização",
"startupPictureSkipDescription": "Tempo de exibição da imagem de inicialização em segundos, insira 0 para não exibir",
"subscriptionProtocol": "Protocolo de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"version": "Versão"
},
"cancel": "Cancelar",
"config": {
"singleSubscriptionMode": "Modo de Assinatura Única",
"subscriptionDomain": "Domínio de Assinatura",
"subscriptionDomainDescription": "Usado para assinatura; deixe em branco para usar o domínio do site",
"subscriptionDomainPlaceholder": "Insira o domínio de assinatura, um por linha",
"subscriptionPath": "Caminho de Assinatura",
"subscriptionPathDescription": "Usado para assinatura; certifique-se de reiniciar o sistema após a modificação para um desempenho ideal",
"subscriptionPathPlaceholder": "Insira",
"updateSuccess": "Atualizado com sucesso",
"wildcardResolution": "Resolução de Curinga",
"wildcardResolutionDescription": "Usado para assinatura"
},
"confirm": "confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"copy": "Copiar",
"copySuccess": "Copiado com sucesso",
"create": "criar",
"createSubscribe": "Criar Assinatura",
"createSuccess": "Criação bem-sucedida",
"delete": "Excluir",
"deleteSuccess": "Exclusão bem-sucedida",
"deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.",
"deviceLimit": "Número de dispositivos/unidade",
"edit": "editar",
"editSubscribe": "Editar Assinatura",
"form": {
"Day": "Dia",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mês",
"NoLimit": "Sem Limite",
"Year": "Ano",
"annualReset": "Reinicialização Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuração de Dedução Automática/Manual",
"deductionRatioDescription": "Usado para dedução. Por padrão, o sistema adota um algoritmo de cálculo automático. Quando uma proporção manual é fornecida, o sistema calcula proporções com base no tempo e na proporção de tráfego, garantindo que o total seja igual a 100%.",
"description": "Descrição",
"deviceLimit": "Limite de dispositivos",
"discount": "Desconto",
"discountDescription": "Definir desconto com base no preço unitário",
"discountMonths": "Meses",
"discountPercent": "Percentual de desconto",
"discount_price": "Preço com desconto",
"duration": "Duração (meses)",
"groupId": "Grupo de Assinatura",
"inventory": "Limite de Assinatura",
"monthlyReset": "Reinicialização Mensal",
"name": "Nome",
"noLimit": "Sem limite",
"noReset": "Sem Reinicialização",
"pricing": "Preços",
"purchaseWithDiscount": "Permitir Dedução",
"purchaseWithDiscountDescription": "Ative ou desative a funcionalidade de cancelamento de inscrição. Após a ativação, o sistema realizará o processamento de dedução de acordo com as regras e proporções configuradas, e o valor restante será retornado ao saldo",
"quota": "Quantidade limitada",
"renewalReset": "Reinicialização na Renovação",
"renewalResetDescription": "Reiniciar ciclo ao renovar",
"replacement": "Preço de reposição (cada vez)",
"resetCycle": "Ciclo de Reinicialização",
"resetOn1st": "Reiniciar no dia 1",
"selectResetCycle": "Por favor, selecione um ciclo de reinicialização",
"selectSubscribeGroup": "Por favor, selecione o grupo de assinatura",
"selectUnitTime": "Por favor, selecione a unidade de tempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Limite de velocidade ",
"traffic": "Tráfego",
"unitPrice": "Preço unitário",
"unitTime": "Unidade de tempo"
},
"group": {
"actions": "Ações",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"create": "Criar",
"createSubscribeGroup": "Criar Novo Grupo de Assinatura",
"createSuccess": "Criado com sucesso",
"delete": "Excluir",
"deleteSuccess": "Excluído com sucesso",
"deleteWarning": "Os dados não poderão ser recuperados após a exclusão, por favor, proceda com cautela.",
"description": "Descrição",
"edit": "Editar",
"editSubscribeGroup": "Editar Grupo de Assinatura",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descrição",
"name": "Nome"
},
"name": "Nome",
"title": "Lista de Grupos de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"updatedAt": "Atualizado em"
},
"inventory": "Limite de Assinatura",
"name": "nome",
"quota": "Limite de compra/vez",
"replacement": "Redefinir preço/vez",
"sell": "venda",
"show": "Exibir",
"sold": "Contagem de Assinaturas",
"subscribe": "Inscrever-se",
"subscribeGroup": "Inscrever-se no grupo",
"tabs": {
"subscribe": "Inscrever-se",
"subscribeApp": "Configuração do Aplicativo",
"subscribeConfig": "Configuração de Assinatura",
"subscribeGroup": "Grupo de Inscrição"
},
"traffic": "tráfego",
"unitPrice": "Preço Unitário",
"updateSuccess": "Atualização bem-sucedida"
}
+74 -146
View File
@@ -1,161 +1,89 @@
{
"actions": "ações",
"app": {
"appDownloadURL": "URL de Download do App",
"appIcon": "Ícone do App",
"appList": "Lista de Apps",
"appName": "Nome do App",
"backupDomains": "Lista de Domínios de Backup",
"backupDomainsDescription": "Lista de domínios de backup para resolução de domínios, um domínio por linha",
"batchDelete": "Excluir em Lote",
"actions": {
"cancel": "Cancelar",
"communicationKey": "Chave de Comunicação",
"communicationKeyDescription": "Chave usada para comunicação com o cliente",
"config": "Configuração",
"configApp": "Configuração do App",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Exclusão",
"create": "Criar",
"createApp": "Criar App",
"createSuccess": "Criado com sucesso",
"defaultVersion": "Padrão",
"delete": "Excluir",
"deleteWarning": "Esta ação não pode ser desfeita",
"describeDescription": "Usado para descrever o aplicativo, exibido na lista de apps",
"description": "Descrição",
"downloadLink": "Link para Download",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Criptografia",
"encryptionDescription": "Escolha o método de criptografia para comunicação com o cliente. Se selecionado, o cliente usará este método para se comunicar com o servidor",
"nameDescription": "Nome do aplicativo, exibido na lista de apps",
"platform": "Plataforma",
"selectApp": "Selecionar Aplicativo",
"selectAppDescription": "Selecione o aplicativo para configurar, todas as configurações serão aplicadas ao aplicativo selecionado",
"startupPicture": "Imagem de Inicialização",
"startupPictureDescription": "Imagem de inicialização, suporta imagens de rede e locais. Para imagens de rede, por favor insira a URL completa da imagem",
"startupPicturePreview": "Pré-visualização da Imagem de Inicialização",
"startupPictureSkip": "Tempo de Pular Imagem de Inicialização",
"startupPictureSkipDescription": "Tempo de exibição da imagem de inicialização em segundos, insira 0 para não exibir",
"subscriptionProtocol": "Protocolo de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"version": "Versão"
"save": "Salvar",
"saveTemplate": "Salvar Modelo"
},
"cancel": "Cancelar",
"config": {
"description": "Gerenciar configurações do sistema de assinatura",
"restrictUserAgent": "Restrição de User-Agent",
"restrictUserAgentDescription": "Ativar restrições de acesso com base no User-Agent",
"singleSubscriptionMode": "Modo de Assinatura Única",
"singleSubscriptionModeDescription": "Quando ativado, todas as assinaturas de usuários serão convertidas para saldo",
"singleSubscriptionModeDescription": "Limitar usuários a uma assinatura ativa. Assinaturas existentes não são afetadas",
"subscriptionDomain": "Domínio de Assinatura",
"subscriptionDomainDescription": "Usado para assinatura; deixe em branco para usar o domínio do site",
"subscriptionDomainPlaceholder": "Insira o domínio de assinatura, um por linha",
"subscriptionDomainDescription": "Domínio personalizado para links de assinatura",
"subscriptionDomainPlaceholder": "Digite o domínio de assinatura, um por linha",
"subscriptionPath": "Caminho de Assinatura",
"subscriptionPathDescription": "Usado para assinatura; certifique-se de reiniciar o sistema após a modificação para um desempenho ideal",
"subscriptionPathPlaceholder": "Insira",
"updateSuccess": "Atualizado com sucesso",
"subscriptionPathDescription": "Caminho personalizado para endpoints de assinatura (melhor desempenho após reinício do sistema)",
"subscriptionPathPlaceholder": "Digite o caminho de assinatura",
"title": "Configuração de Assinatura",
"updateError": "Falha na atualização",
"updateSuccess": "Configurações atualizadas com sucesso",
"userAgentWhitelist": "Lista Branca de User-Agent",
"userAgentWhitelistDescription": "User-Agents permitidos para acesso à assinatura, um por linha. Modelos embutidos são automaticamente incluídos na lista branca",
"userAgentWhitelistPlaceholder": "Insira os User-Agents permitidos, um por linha",
"wildcardResolution": "Resolução de Curinga",
"wildcardResolutionDescription": "Usado para assinatura"
"wildcardResolutionDescription": "Ativar resolução de domínio curinga para assinaturas"
},
"confirm": "confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"copy": "Copiar",
"copySuccess": "Copiado com sucesso",
"create": "criar",
"createSubscribe": "Criar Assinatura",
"createSuccess": "Criação bem-sucedida",
"delete": "Excluir",
"deleteSuccess": "Exclusão bem-sucedida",
"deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.",
"deviceLimit": "Número de dispositivos/unidade",
"edit": "editar",
"editSubscribe": "Editar Assinatura",
"form": {
"Day": "Dia",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mês",
"NoLimit": "Sem Limite",
"Year": "Ano",
"annualReset": "Reinicialização Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuração de Dedução Automática/Manual",
"deductionRatioDescription": "Usado para dedução. Por padrão, o sistema adota um algoritmo de cálculo automático. Quando uma proporção manual é fornecida, o sistema calcula proporções com base no tempo e na proporção de tráfego, garantindo que o total seja igual a 100%.",
"description": "Descrição",
"deviceLimit": "Limite de dispositivos",
"discount": "Desconto",
"discountDescription": "Definir desconto com base no preço unitário",
"discountMonths": "Meses",
"discountPercent": "Percentual de desconto",
"discount_price": "Preço com desconto",
"duration": "Duração (meses)",
"groupId": "Grupo de Assinatura",
"inventory": "Limite de Assinatura",
"monthlyReset": "Reinicialização Mensal",
"name": "Nome",
"noLimit": "Sem limite",
"noReset": "Sem Reinicialização",
"pricing": "Preços",
"purchaseWithDiscount": "Permitir Dedução",
"purchaseWithDiscountDescription": "Ative ou desative a funcionalidade de cancelamento de inscrição. Após a ativação, o sistema realizará o processamento de dedução de acordo com as regras e proporções configuradas, e o valor restante será retornado ao saldo",
"quota": "Quantidade limitada",
"renewalReset": "Reinicialização na Renovação",
"renewalResetDescription": "Reiniciar ciclo ao renovar",
"replacement": "Preço de reposição (cada vez)",
"resetCycle": "Ciclo de Reinicialização",
"resetOn1st": "Reiniciar no dia 1",
"selectResetCycle": "Por favor, selecione um ciclo de reinicialização",
"selectSubscribeGroup": "Por favor, selecione o grupo de assinatura",
"selectUnitTime": "Por favor, selecione a unidade de tempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Limite de velocidade ",
"traffic": "Tráfego",
"unitPrice": "Preço unitário",
"unitTime": "Unidade de tempo"
"description": "Configurar configurações de assinatura e modelos de cliente",
"messages": {
"noClients": "Sem Modelos de Cliente",
"noClientsDescription": "Nenhum modelo de cliente configurado ainda. Adicione seu primeiro modelo para começar."
},
"group": {
"actions": "Ações",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"create": "Criar",
"createSubscribeGroup": "Criar Novo Grupo de Assinatura",
"createSuccess": "Criado com sucesso",
"delete": "Excluir",
"deleteSuccess": "Excluído com sucesso",
"deleteWarning": "Os dados não poderão ser recuperados após a exclusão, por favor, proceda com cautela.",
"description": "Descrição",
"edit": "Editar",
"editSubscribeGroup": "Editar Grupo de Assinatura",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descrição",
"name": "Nome"
"protocol": {
"clients": {
"clash": {
"features": "Grande ecossistema, regras abrangentes, comunidade ativa"
},
"egern": {
"features": "Cliente moderno para iOS, excelente desempenho"
},
"hiddify": {
"features": "Multiplataforma, protocolos abrangentes, amigável para iniciantes"
},
"loon": {
"features": "Cliente avançado para iOS, regras ricas, interface bonita"
},
"netch": {
"features": "Cliente proxy focado em jogos"
},
"quantumult": {
"features": "Cliente avançado para iOS, regras flexíveis, scripts ricos"
},
"shadowrocket": {
"features": "Cliente clássico para iOS, configuração flexível"
},
"singbox": {
"features": "Kernel mais recente, GUI oficial, suporte multiplataforma"
},
"stash": {
"features": "Interface móvel moderna, protocolos abrangentes"
},
"surfboard": {
"features": "Gratuito, desenvolvimento ativo, interface moderna"
},
"surge": {
"features": "Ferramenta premium para iOS/Mac, recursos poderosos"
},
"v2box": {
"features": "Cliente V2Ray amigável ao usuário"
},
"v2rayn": {
"features": "Cliente popular para Windows, rico em recursos"
},
"v2rayng": {
"features": "Cliente popular para Android, leve"
}
},
"name": "Nome",
"title": "Lista de Grupos de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"updatedAt": "Atualizado em"
"description": "Gerenciar modelos de configuração de assinatura para clientes proxy",
"features": "Principais Recursos",
"platforms": "Plataformas",
"subscribeTemplate": "Configuração de Modelo de Assinatura",
"templateContent": "Conteúdo do Modelo",
"templatePlaceholder": "Digite o modelo de configuração do cliente...",
"title": "Modelos de Assinatura de Cliente"
},
"inventory": "Limite de Assinatura",
"name": "nome",
"quota": "Limite de compra/vez",
"replacement": "Redefinir preço/vez",
"sell": "venda",
"show": "Exibir",
"sold": "Contagem de Assinaturas",
"subscribe": "Inscrever-se",
"subscribeGroup": "Inscrever-se no grupo",
"tabs": {
"subscribe": "Inscrever-se",
"subscribeApp": "Configuração do Aplicativo",
"subscribeConfig": "Configuração de Assinatura",
"subscribeGroup": "Grupo de Inscrição"
},
"traffic": "tráfego",
"unitPrice": "Preço Unitário",
"updateSuccess": "Atualização bem-sucedida"
"title": "Gerenciamento de Assinaturas"
}