# erros básicos
ErrInvalidParams: 'Requisição inválida: {{ .detail }}'
ErrMcpGatewayArgsParse: 'Formato inválido dos argumentos personalizados do MCP'
ErrMcpGatewayArgsConflict: 'O argumento {{ .name }} é gerenciado pelo 1Panel e não pode ser definido nos argumentos personalizados'
ErrTokenParse: 'Erro de token: {{ .detail }}'
ErrInitialPassword: 'Senha original incorreta'
ErrInternalServer: 'Erro interno: {{ .detail }}'
ErrRecordExist: 'Registro já existe'
ErrRecordNotFound: 'Registro não encontrado'
WafLogExport: 'Exportação de logs do WAF'
MonitorLogExport: 'Exportação de logs de monitoramento de sites'
LogExportNoData: 'Nenhum log corresponde aos filtros selecionados'
LogExportDiskSpace: 'Há menos de 1 GiB disponível; a exportação foi interrompida'
LogExportRetentionInvalid: 'A retenção dos registros de exportação deve ser de 1 a 30 dias'
ErrSystemLogKeywordFilterUnsupported: 'A versão atual do sistema não oferece suporte à filtragem de logs do sistema por palavra-chave (requer systemd 237 ou posterior)'
ErrStructTransform: 'Erro de conversão: {{ .err }}'
ErrNotSupportType: 'Tipo não suportado: {{ .name }}'

# IA de arquivos
ErrFileAINotEnabled: 'A pesquisa com IA de arquivos está desativada ou sem conta. Em Gerenciamento de arquivos, use Conta de IA, ative e escolha uma conta.'
ErrFileAISearchBadPattern: 'Padrão de busca inválido (regex ou opção): {{ .detail }}'
FileAISearchEmptyDir: 'Nenhum arquivo ou pasta encontrado neste caminho (ou todos foram filtrados).'

# download remoto
ErrWgetRemoteFailed: 'Falha no download remoto ou URL inacessível: {{ .detail }}'
ErrWgetInvalidContentType: 'A URL remota não retornou um arquivo (possivelmente uma página de erro), {{ .detail }}'
ErrWgetProxyNotConfigured: 'Configure primeiro um servidor proxy nas configurações do painel'
ErrWgetProxyInvalid: 'Endereço do servidor proxy inválido: {{ .detail }}'

# login e segurança
ErrNotLogin: 'Sem sessão: {{ .detail }}'
ErrPasswordExpired: 'Senha expirada: {{ .detail }}'

# requisição e API
ErrProxy: 'Requisição falhou: {{ .detail }}'
ErrApiConfigStatusInvalid: 'API desativada: {{ .detail }}'
ErrApiConfigKeyInvalid: 'Chave API inválida: {{ .detail }}'
ErrApiConfigIPInvalid: 'IP sem permissão: {{ .detail }}'
ErrApiConfigDisable: 'API bloqueada: {{ .detail }}'
ErrApiConfigKeyTimeInvalid: 'Timestamp inválido: {{ .detail }}'
ErrCreateHttpClient: 'Falha ao criar solicitação {{ .err }}'
ErrHttpReqTimeOut: 'Tempo limite da solicitação esgotado {{ .err }}'
ErrHttpReqFailed: 'Falha na solicitação {{ .err }}'
ErrNoSuchHost: 'Não foi possível encontrar o servidor solicitado {{ .err }}'
ErrHttpReqNotFound: 'O recurso solicitado {{ .err }} não pôde ser encontrado'

# atalho rápido
ErrMinQuickJump: 'Adicione pelo menos um atalho rápido'
ErrMaxQuickJump: 'Máximo 4 atalhos rápidos'

# comum
ErrShutDown: 'Comando parado manualmente'
ErrUsernameIsExist: 'Usuário já existe'
ErrNameIsExist: 'Nome já existe'
ErrDemoEnvironment: 'Indisponível em demo'
ErrCmdTimeout: 'Comando expirou'
ErrCmdIllegal: 'Comando tem caracteres inválidos'
ErrPortExist: 'Porta {{ .port }} já ocupada por {{ .type }} [{{ .name }}]'
TYPE_APP: 'Aplicativo'
TYPE_RUNTIME: 'Ambiente de tempo de execução'
TYPE_DOMAIN: 'Nome de domínio'
ErrTypePort: 'O formato da porta {{ .name }} está incorreto'
ErrTypePortRange: 'O intervalo de portas precisa estar entre 1-65535'
Success: 'Sucesso'
Failed: 'Falhou'
SystemRestart: 'Tarefa interrompida devido à reinicialização do sistema'
ErrGroupIsDefault: 'Grupo padrão, não pode ser excluído'
ErrGroupIsInWebsiteUse: 'O grupo está sendo usado por outro site e não pode ser excluído.'
Decrypt: 'Descriptografar'

# agente
ErrAgentAccountBound: 'Conta vinculada a agente'
ErrTerminalAIAccountInUse: 'Esta conta de modelo esta sendo usada pelo Terminal AI. Troque a conta nas configuracoes do Terminal AI ou desative o Terminal AI e tente novamente.'
ErrFileAIAccountInUse: 'Esta conta de modelo está sendo usada pela IA do gerenciador de arquivos. Troque a conta nas configurações ou desative a IA e tente novamente.'
ErrAgentAccountUnavailable: 'Conexão da conta indisponível: {{ .err }}'
ErrAgentProviderNotSupported: 'Provedor de agente não suportado'
ErrAgentAccountRequired: 'Selecione uma conta de agente primeiro'
ErrAgentAccountNotVerified: 'Conta de agente não verificada'
ErrAgentAccountModelsRequired: 'Configure pelo menos um modelo'
ErrAgentAccountSingleInitialModel: 'Apenas um modelo inicial pode ser configurado ao criar a conta'
ErrAgentModelNotInAccount: 'O modelo não está configurado na conta selecionada'
ErrAgentVerifyModelInUse: 'Este modelo é usado para verificar a conta. Selecione outro modelo de verificação antes de excluí-lo'
ErrAgentFallbackModelDuplicate: 'Os modelos de fallback não podem ser duplicados'
ErrAgentFallbackModelPrimary: 'O modelo de fallback não pode ser igual ao modelo principal'
ErrAgentModelInUse: 'Ainda há um agente vinculado usando este modelo: {{ .name }}'
ErrAgentBaseURLRequired: 'URL base obrigatória'
ErrAgentApiKeyRequired: 'Chave API obrigatória'
ErrAgentComposeRequired: 'Conteúdo de compose obrigatório'
ErrAgentIDRequired: 'ID do agente obrigatório'
ErrAgentAccountIDRequired: 'ID da conta obrigatório'
ErrAgentLimitReached: 'A edição Community suporta até {{ .max }} agentes de IA. Faça upgrade para a edição Business para usar agentes ilimitados'
ErrAgentWebsiteBound: 'Este agente já está vinculado a um site'
ErrAgentWebsiteTypeUnsupported: 'Somente sites proxy ou estáticos podem ser vinculados'
ErrAgentWebsiteInUse: 'Este site já está vinculado a outro agente'
ErrAgentWebsiteUnbindUnsupported: 'Sites implantados em um clique não podem ser desvinculados manualmente'
ErrQwenPawAuthRequest: 'Falha ao atualizar as credenciais do QwenPaw: {{ .err }}'
ErrQwenPawAuthOutOfSync: 'As credenciais atuais do QwenPaw não correspondem ao registro do 1Panel. Redefina a senha do QwenPaw ou restaure as credenciais no arquivo .env do aplicativo'
ErrQwenPawAuthDisabled: 'A autenticação de login não está ativada no QwenPaw'
ErrHermesPairingCodeUnavailable: 'O código de pareamento está temporariamente indisponível no Hermes, possivelmente por causa de rede. Tente novamente mais tarde.'
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Quando a política de grupo do Feishu é Lista de permissões, a política de DM não pode ser Código de pareamento.'

# backup e configurações de alerta
Localhost: 'Máquina Local'
ErrBackupInUsed: 'Conta de backup em uso por tarefa'
ErrBackupCheck: 'Teste de conexão falhou: {{ .err }}'
ErrBackupLocalDelete: 'Não é permitido excluir contas locais'
ErrBackupLocalCreate: 'Não é permitido criar contas locais'
ErrAlertConfigInUse: 'A configuração de alerta está em uso e não pode ser excluída'
ErrAlertConfigPhoneExist: 'O numero de telefone ja existe'

# aplicativo
ErrPortInUsed: 'A porta {{ .detail }} já está ocupada'
ErrAppLimit: 'O número de aplicativos instalados excedeu o limite'
ErrNotInstall: 'Aplicativo não instalado'
ErrPortInOtherApp: 'A porta {{ .port }} já está ocupada pelo aplicativo {{ .apps }}'
ErrDbUserNotValid: 'Banco de dados existente, nome de usuário e senha não correspondem'
ErrMysqlUserUsedByApps: 'Este usuário do banco de dados está sendo usado por [{{ .detail }}]; seu host não pode ser alterado, e ele não pode ser excluído nem ter sua autorização revogada'
ErrUpdateBuWebsite: 'O aplicativo foi atualizado com sucesso, mas a modificação do arquivo de configuração do site falhou., verifique a configuração'
Err1PanelNetworkFailed: 'Falha na criação da rede de contêiner padrão {{ .detail }}'
ErrFileParse: 'Falha na análise do arquivo docker-compose do aplicativo'
ErrInstallDirNotFound: 'O diretório de instalação não existe. Se precisar desinstalar, selecione Forçar desinstalação'
AppStoreIsUpToDate: 'A loja de aplicativos já é a versão mais recente'
LocalAppVersionNull: 'O aplicativo {{ .name }} não está sincronizado com a versão Não é possível adicionar à lista de aplicativos'
LocalAppVersionErr: '{{ .name }} sincronização da versão {{ .version }} falhou {{ .err }}'
ErrFileNotFound: 'arquivo {{ .name }} não existe'
ErrFileParseApp: 'Falha na análise do arquivo {{ .name }} {{ .err }}'
ErrAppDirNull: 'A pasta da versão não existe'
LocalAppErr: 'Falha na sincronização do aplicativo {{ .name }} {{ .err }}'
ErrContainerName: 'O nome do contêiner já existe'
ErrContainerNotFound: '{{ .name }} container não existe'
ErrContainerMsg: 'O contêiner {{ .name }} está anormal., verifique o log na página do contêiner para obter detalhes.'
ErrAppBackup: '{{ .name }} falha no backup do aplicativo {{ .err }}'
ErrVersionTooLow: 'A versão atual do 1Panel é muito antiga para atualizar a App Store., atualize a versão antes de operar.'
ErrAppNameExist: 'O nome do aplicativo já existe'
ErrAppInstallNameExist: 'O nome de instalação do aplicativo {{ .name }} já existe'
AppStoreIsSyncing: 'A App Store está sincronizando mais tarde'
ErrGetCompose: 'Falha ao obter o arquivo docker-compose.yml {{ .detail }}'
ErrComposeProjectNameParse: 'Falha ao analisar o nome do projeto na saída de configuração do Docker Compose: {{ .detail }}'
ErrComposeProjectNameEmpty: 'Não foi possível derivar um nome de projeto da configuração do Docker Compose nem do diretório pai do arquivo. Informe um nome e tente novamente.'
ErrComposeNameInvalid: 'Nome de projeto Compose inválido: deve começar com uma letra minúscula ou número, conter apenas letras minúsculas, números, hífens e sublinhados e ter de 1 a 256 caracteres.'
ErrAppVersionUnavailable: 'Esta versão do aplicativo foi removida do serviço remoto. Selecione outra versão e tente novamente.'
ErrAppWarn: 'Status anormal, verifique o log'
ErrAppParamKey: 'O campo de parâmetro {{ .name }} está anormal'
ErrAppUpgrade: 'Falha na atualização do aplicativo {{ .name }} {{ .err }}'
AppRecover: 'Reverter aplicativo {{ .name }}'
PullImageStart: 'Comece a extrair a imagem [{{ .name }}]'
PullImageSuccess: 'Imagem retirada com sucesso'
AppStoreSyncSuccess: 'Sincronização da App Store bem-sucedida'
SyncAppDetail: 'Sincronizar configuração do aplicativo'
AppVersionNotMatch: 'o aplicativo {{ .name }} requer uma versão superior do 1Panel, ignorando a sincronização'
MoveSiteDir: 'Detecção de alteração no diretório do site. É necessário migrar o diretório do site OpenResty para {{ .name }}'
MoveSiteDirSuccess: 'Migração bem-sucedida do diretório do site'
DeleteRuntimePHP: 'Excluir tempo de execução do PHP'
CustomAppStoreFileValid: 'Os pacotes da App Store precisam estar no formato.tar.gz'
PullImageTimeout: 'Tempo limite para puxar imagem, tente aumentar a aceleração da imagem ou altere para outra aceleração de imagem'
ErrAppIsDown: 'O status do aplicativo {{ .name }} é anormal, verifique'
ErrCustomApps: 'Há um aplicativo instalado, desinstale-o primeiro'
ErrCustomRuntimes: 'Há um ambiente de execução instalado, exclua-o primeiro'
ErrAppVersionDeprecated: 'O aplicativo {{ .name }} não é compatível com a versão atual do 1Panel, ignorado'
ErrDockerFailed: 'O estado do Docker está anormal, verifique o status do serviço'
ErrDockerComposeCmdNotFound: 'O comando Docker Compose não existe, instale este comando na máquina host primeiro'
UseExistImage: 'A imagem já existe, usando imagem existente'
UpgradePrepare: 'Preparar atualização do aplicativo'
UpgradeStop: 'Parar aplicativo original'
UpgradeWaitReady: 'Aguardar o aplicativo ficar pronto'
UpgradeBackupDisabled: 'O backup de atualização está desativado; alterações de dados feitas pelos scripts não podem ser totalmente revertidas'
UpgradeRollbackFailed: 'Falha na reversão'
ErrDatabaseNotFound: 'O banco de dados {{ .name }} não existe'

# SSH
ExportIP: 'IP de Login'
ExportArea: 'Localização'
ExportPort: 'Porta'
ExportAuthMode: 'Método de Login'
ExportUser: 'Usuário'
ExportStatus: 'Status de Login'
ExportDate: 'Hora'

# arquivo
ErrFileCanNotRead: 'Este arquivo não suporta visualização'
ErrSensitiveFileRead: 'A leitura de arquivos sensíveis não é permitida'
ErrFileToLarge: 'O arquivo é maior que 10M e não pode ser aberto'
ErrPathNotFound: 'O diretório não existe'
ErrMovePathFailed: 'O caminho de destino não pode conter o caminho original'
ErrLinkPathNotFound: 'O caminho de destino não existe'
ErrFileIsExist: 'O arquivo ou pasta já existe'
ErrFileUpload: '{{ .name }} falhou ao carregar o arquivo {{ .detail }}'
ErrFileDownloadDir: 'A pasta de download não é suportada'
ErrFileSharePath: 'Caminho inválido ou o destino não é um arquivo'
ErrFileShareInvalid: 'Link de compartilhamento inválido ou expirado'
ErrFileShareExpired: 'O link de compartilhamento expirou'
ErrFileSharePassword: 'Senha de compartilhamento incorreta'
ErrFileShareExhausted: 'O limite de downloads deste compartilhamento foi atingido'
ErrFileSharePasswordPolicy: 'A senha deve ter pelo menos 4 caracteres'
ErrFileShareRateLimit: 'Muitas solicitações, tente novamente mais tarde'
ErrCmdNotFound: 'O comando {{ .name }} não existe, instale este comando no host primeiro'
ErrSourcePathNotFound: 'O diretório de origem não existe'
ErrFavoriteExist: 'Este caminho já foi favorito'
ErrInvalidChar: 'Caracteres ilegais não são permitidos'
ErrPathNotDelete: 'O diretório selecionado não pode ser excluído'
ErrLogFileToLarge: 'O arquivo de log excede 500 MB e não pode ser aberto'
FileDropFailed: 'Falha ao limpar arquivo {{ .name }}: {{ .err }}'
FileDropSuccess: 'Arquivo {{ .name }} limpo com sucesso, {{ .count }} arquivos removidos, {{ .size }} de espaço em disco liberado'
FileDropSum: 'Limpeza de arquivos concluída com sucesso, total de {{ .count }} arquivos removidos, total de {{ .size }} de espaço em disco liberado'
ErrBadDecrypt: 'Erro de senha de descriptografia do pacote compactado, descompactação falhou, verifique e'

# site
ErrAliasIsExist: 'Alias já existe'
ErrBackupMatch: 'O arquivo de backup não corresponde a alguns dados atuais do site {{ .detail }}'
ErrBackupExist: 'A parte correspondente dos dados de origem no arquivo de backup não existe {{ .detail }}'
ErrPHPResource: 'O ambiente operacional local não suporta comutação'
ErrPathPermission: 'Uma pasta com permissões diferentes de 1000:1000 foi detectada no diretório de índice, o que pode causar um erro de acesso negado no site. Clique no botão Salvar acima'
ErrDomainIsUsed: 'O nome de domínio já está sendo usado pelo site [{{ .name }}]'
ErrDomainFormat: 'o formato do nome de domínio {{ .name }} está incorreto'
ErrDefaultAlias: 'padrão é um código reservado, use outro código'
ErrParentWebsite: 'Você precisa excluir o subsite {{ .name }} primeiro'
ErrBuildDirNotFound: 'O diretório de compilação não existe'
ErrImageNotExist: 'A imagem do ambiente operacional {{ .name }} não existe, edite novamente o ambiente operacional'
ErrProxyIsUsed: 'Balanceamento de carga foi usado por proxy reverso, não pode ser excluído'
ErrSSLValid: 'O arquivo do certificado está anormal, verifique o status do certificado'
ErrWebsiteDir: ', selecione um diretório dentro do diretório do site.'
ErrComposerFileNotFound: 'O arquivo composer.json não existe'
ErrRuntimeNoPort: 'O ambiente de tempo de execução não está configurado com uma porta, edite o ambiente de tempo de execução primeiro.'
ErrRuntimeProjectDirContainsCodeDir: 'O diretório de execução inclui o diretório de projeto selecionado. Escolha outro diretório de projeto e crie novamente.'
Status: 'Estado'
start: 'Iniciar'
stop: 'Parar'
restart: 'Reiniciar'
kill: 'Parar Forçadamente'
pause: 'Pausar'
unpause: 'Retomar'
remove: 'Excluir'
delete: 'Excluir'
ErrDefaultWebsite: 'O site padrão já foi definido, cancele-o antes de definir'
SSL: 'Certificado'
Set: 'Configurações'

# certificado SSL
ErrSSLCannotDelete: 'O certificado {{ .name }} está sendo usado por um site e não pode ser excluído'
ErrAccountCannotDelete: 'A conta está associada a um certificado e não pode ser excluída'
ErrSSLApply: 'Renovação do certificado concluída, mas a recarga do OpenResty falhou. Verifique a configuração'
ErrEmailIsExist: 'A caixa de correio já existe'
ErrSSLKeyNotFound: 'O arquivo de chave privada não existe'
ErrSSLCertificateNotFound: 'O arquivo de certificado não existe'
ErrSSLKeyFormat: 'Falha na verificação do arquivo de chave privada'
ErrSSLCertificateFormat: 'O formato do arquivo de certificado está incorreto, use o formato pem'
ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid ou EabHmacKey não podem estar em branco'
ErrOpenrestyNotFound: 'O modo HTTP requer o OpenResty instalado'
ApplySSLStart: 'Comece a solicitar um certificado, nome de domínio [{{ .domain }}] método de solicitação [{{ .type }}]'
dnsAccount: 'DNS Automático'
dnsManual: 'Manual DNS'
http: 'HTTP'
ApplySSLFailed: 'Falha na solicitação de certificado [{{ .domain }}], {{ .detail }}'
ApplySSLSuccess: 'Solicitação de certificado [{{ .domain }}] realizada com sucesso'
DNSAccountName: 'Conta DNS [{{ .name }}] fornecedor [{{ .type }}]'
PushDirLog: 'Certificado enviado para o diretório [{{ .path }}] {{ .status }}'
ErrDeleteCAWithSSL: 'A organização atual tem um certificado que foi emitido e não pode ser excluído.'
ErrDeleteWithPanelSSL: 'A configuração SSL do painel usa este certificado e não pode ser excluída'
ErrDefaultCA: 'A autoridade padrão não pode ser excluída'
ApplyWebSiteSSLLog: 'Iniciando a renovação do certificado do site {{ .name }}'
ErrUpdateWebsiteSSL: 'Falha na atualização do certificado do site {{ .name }}: {{ .err }}'
ApplyWebSiteSSLSuccess: 'Atualizar certificado do site com sucesso'
ErrExecShell: 'Falha ao executar o script {{ .err }}'
ExecShellStart: 'Iniciar execução do script'
ExecShellSuccess: 'Execução do script bem-sucedida'
StartUpdateSystemSSL: 'Iniciar atualização do certificado do sistema'
UpdateSystemSSLSuccess: 'Atualizar certificado do sistema com sucesso'
ErrWildcardDomain: 'Não é possível solicitar certificado de nome de domínio curinga no modo HTTP'
ErrApplySSLCanNotDelete: 'O certificado {{ .name }} que está sendo solicitado não pode ser excluído mais tarde.'
StartPushSSLToNode: 'Iniciando o envio do certificado para o nó'
PushSSLToNodeFailed: 'Falha ao enviar o certificado para o nó: {{ .err }}'
PushSSLToNodeSuccess: 'Certificado enviado com sucesso para o nó'

# MySQL
ErrUserIsExist: 'O usuário atual já existe, digite novamente'
ErrDatabaseIsExist: 'O banco de dados atual já existe, digite novamente'
ErrExecTimeOut: 'Tempo limite de execução do SQL expirou, verifique o banco de dados'
ErrRemoteExist: 'O banco de dados remoto já existe com este nome, modifique-o e'
ErrLocalExist: 'O nome já existe no banco de dados local, modifique-o e'
RemoteBackup: 'Para fazer backup do banco de dados remoto, o serviço de banco de dados do contêiner local precisa ser iniciado primeiro usando a imagem {{ .name }} aguarde...'
RemoteRecover: 'Para restaurar o banco de dados remoto, o serviço de banco de dados do contêiner local precisa ser iniciado primeiro usando a imagem {{ .name }} aguarde...'
Arg: 'Argumento'

# Redis
ErrTypeOfRedis: 'O tipo de arquivo de recuperação não corresponde ao método de persistência atual, modifique-o e'

# contêiner
ErrInUsed: '{{ .detail }} está em uso e não pode ser excluído'
ErrObjectInUsed: 'Este objeto está em uso e não pode ser excluído'
ErrObjectBeDependent: 'Esta imagem é dependida por outras imagens e não pode ser excluída'
ErrPortRules: 'O número da porta não corresponde, digite novamente'
ErrPgImagePull: 'Tempo limite para extração de imagem. Configure a aceleração de imagem ou extraia manualmente a imagem {{ .name }} e'
PruneHelper: 'Esta limpeza {{ .name }} liberou espaço em disco {{ .size }}'
ImageRemoveHelper: 'Excluída a imagem {{ .name }}, liberando {{ .size }} de espaço em disco'
BuildCache: 'Cache de construção'
Volume: 'Volume de armazenamento'
Network: 'Rede'
PruneStart: 'Limpando em andamento aguarde...'
ContainerBackupPrepare: 'Preparar área de backup do contêiner'
ContainerBackupStop: 'Parar contêiner antes do backup'
ContainerBackupInspect: 'Fazer backup do inspect e rede do contêiner'
ContainerBackupMounts: 'Fazer backup dos mounts do contêiner'
ContainerBackupMeta: 'Escrever metadados do backup do contêiner'
ContainerBackupStart: 'Iniciar contêiner após o backup'
ContainerRecoverPrepare: 'Preparar área de restauração do contêiner'
ContainerRecoverExtract: 'Extrair arquivo de backup do contêiner'
ContainerRecoverParse: 'Carregar metadados do backup do contêiner'
ContainerRecoverCreate: 'Recriar contêiner'
ContainerRecoverMounts: 'Restaurar mounts do contêiner'
ContainerRecoverStart: 'Iniciar contêiner restaurado'
ContainerRecoverCleanup: 'Limpar área de restauração do contêiner'
ComposeBackupPrepare: 'Preparar área de backup do compose'
ComposeBackupStop: 'Parar compose antes do backup'
ComposeBackupFiles: 'Fazer backup dos arquivos do compose'
ComposeBackupContainers: 'Fazer backup dos contêineres do compose'
ComposeBackupMeta: 'Escrever metadados do backup do compose'
ComposeBackupStart: 'Iniciar compose após o backup'
ComposeBackupCleanup: 'Limpar área de backup do compose'
ComposeRecoverPrepare: 'Preparar área de restauração do compose'
ComposeRecoverExtract: 'Extrair arquivo de backup do compose'
ComposeRecoverMeta: 'Carregar metadados do backup do compose'
ComposeRecoverMetaLogName: 'Metadados da restauracao do compose: nome={{ .name }}'
ComposeRecoverMetaLogPath: 'Metadados da restauracao do compose: caminhoBackup={{ .backupPath }} caminhoDestino={{ .targetDir }}'
ComposeRecoverMetaLogCount: 'Metadados da restauracao do compose: arquivos={{ .files }} containers={{ .containers }}'
ComposeRecoverFiles: 'Restaurar arquivos do compose'
ComposeRecoverContainers: 'Restaurar contêineres do compose'
ComposeRecoverRecord: 'Salvar registro do compose'
ComposeRecoverCleanup: 'Limpar área de restauração do compose'

# runtime
ErrFileNotExist: 'O arquivo {{ .detail }} não existe Verifique a integridade do arquivo de origem'
ErrImageBuildErr: 'Falha na criação da imagem'
ErrImageExist: 'A imagem já existe, modifique o nome da imagem.'
ErrDelWithWebsite: 'O ambiente operacional já está associado a um site e não pode ser excluído'
ErrRuntimeStart: 'Falha na inicialização'
ErrPackageJsonNotFound: 'o arquivo package.json não existe'
ErrScriptsNotFound: 'O item de configuração de scripts não foi encontrado em package.json'
ErrContainerNameNotFound: 'Não foi possível obter o nome do contêiner, verifique o arquivo.env'
ErrNodeModulesNotFound: 'A pasta node_modules não existe Edite o ambiente de execução ou aguarde até que o ambiente de execução inicie com sucesso'
ErrContainerNameIsNull: 'O nome do contêiner não existe'
ErrPHPPortIsDefault: 'A porta 9000 é a porta padrão. Altere-a e tente novamente'
ErrPHPRuntimePortFailed: 'A porta {{ .name }} já está em uso neste runtime. Altere-a e tente novamente'

# ferramenta
ErrConfigNotFound: 'O arquivo de configuração não existe'
ErrConfigParse: 'O formato do arquivo de configuração está incorreto'
ErrConfigIsNull: 'O arquivo de configuração não pode estar vazio'
ErrConfigDirNotFound: 'O diretório de execução não existe'
ErrConfigAlreadyExist: 'Um arquivo de configuração com o mesmo nome já existe'
ErrUserFindErr: 'Falha na pesquisa do usuário {{ .name }} {{ .err }}'

# tarefa cron
CutWebsiteLogSuccess: '{{ .name }} registro do site cortado com sucesso, caminho de backup {{ .path }}'
HandleShell: 'Executar script {{ .name }}'
HandleCurl: 'Acessar URL {{ .name }}'
HandleNtpSync: 'Sincronização de hora do sistema'
HandleSystemClean: 'Limpeza de cache do sistema'
SystemLog: 'Log do Sistema'
CutWebsiteLog: 'Rotacionar Log do Website'
FileOrDir: 'Diretório / Arquivo'
UploadFile: 'Enviando arquivo de backup {{ .file }} para {{ .backup }}'
Upload: 'Enviar'
IgnoreBackupErr: 'Backup falhou, erro: {{ .detail }}, ignorando este erro...'
IgnoreUploadErr: 'Upload falhou, erro: {{ .detail }}, ignorando este erro...'
LoadBackupFailed: 'Falha ao obter conexão da conta de backup, erro: {{ .detail }}'
InExecuting: 'A tarefa atual está sendo executada, não repita a execução'
NoSuchResource: 'Nenhum conteúdo de backup encontrado no banco de dados, ignorando...'
CleanLog: 'Limpar log'
CleanLogByName: 'Limpar log de {{ .name }}'
WafIpGroupNotFound: 'Grupo de IP do WAF não encontrado., vá para [Recursos Avançados - WAF - Lista Branca/Preta - Grupo de IP] para adicionar um grupo de IP via método de download remoto.'

# caixa de ferramentas
ErrNotExistUser: 'O usuário atual não existe, modifique e'
ErrBanAction: 'Falha na configuração. O serviço atual {{ .name }} não está disponível. Verifique e'
ErrClamdscanNotFound: 'O comando clamdscan não foi detectado, consulte a documentação para instalá-lo'
TaskSwapSet: 'Configurar Swap'
SetSwap: 'Configurar Swap {{ .path }} - {{ .size }}'
CreateSwap: 'Criar Arquivo Swap'
FormatSwap: 'Formatar Arquivo Swap'
EnableSwap: 'Ativar Swap'

# proteção contra adulteração
CleanTamperSetting: 'Limpar configurações de proteção históricas'
SetTamperWithRules: 'Iniciar proteção de diretório de acordo com as regras'
ProtectDir: 'Proteger diretório {{ .name }}'
IgnoreFile: 'Proteger arquivo {{ .name }}'
TamperSetSuccessful: 'Configurações de proteção concluídas, iniciando monitoramento dos seguintes diretórios:'

# WAF
ErrScope: 'A modificação desta configuração não é suportada'
ErrStateChange: 'Falha na alteração de estado'
ErrRuleExist: 'A regra já existe'
ErrRuleNotExist: 'A regra não existe'
ErrParseIP: 'Formato de IP errado'
ErrDefaultIP: 'padrão é um nome reservado, altere-o para outro nome'
ErrGroupInUse: 'O grupo de IP é usado pela lista negra/lista branca e não pode ser excluído'
ErrIPGroupAclUse: 'O grupo de IP está sendo usado por regras personalizadas do site {{ .name }}, não pode ser excluído'
ErrIPGroupOriginProtectionUse: 'O grupo de IP está sendo usado pela proteção de origem CDN do site {{ .name }}'
ErrOriginProtectionIPGroupRequired: 'Selecione pelo menos um grupo de IP não vazio antes de ativar a proteção de origem'
ErrOriginProtectionIPGroupInvalid: 'O grupo de IP {{ .name }} não existe ou está vazio'
ErrGroupExist: 'O nome do grupo IP já existe'
ErrIPRange: 'Intervalo de IP errado'
ErrIPExist: 'IP já existe'
urlDefense: 'regras de URL'
urlHelper: 'URL proibido'
dirFilter: 'Filtro de diretório'
xss: 'XSS'
phpExec: 'Execução de script PHP'
oneWordTrojan: 'Cavalo de Tróia de Uma Palavra'
appFilter: 'Aplicar filtragem de diretório perigosa'
webShell: 'Webshell'
args: 'Regras de parâmetros'
protocolFilter: 'Filtragem de protocolo'
javaFilter: 'Filtro de arquivo perigoso Java'
scannerFilter: 'Filtro do scanner'
escapeFilter: 'filtro de escape'
customRule: 'Regra personalizada'
httpMethod: 'Filtragem de método HTTP'
fileExt: 'Restrições de upload de arquivo'
defaultIpBlack: 'Grupo de IP malicioso'
cookie: 'Regras de cookies'
urlBlack: 'lista negra de URLs'
uaBlack: 'Lista negra de agentes do usuário'
attackCount: 'Limite de frequência de ataque'
fileExtCheck: 'Restrições de upload de arquivo'
geoRestrict: 'Restrições de acesso regionais'
unknownWebsite: 'Acesso não autorizado ao nome de domínio'
notFoundCount: 'Limite de taxa 404'
headerDefense: 'Regras de cabeçalho'
defaultUaBlack: 'Regras do agente do usuário'
methodWhite: 'regras HTTP'
captcha: 'verificação homem-máquina'
fiveSeconds: 'verificação de 5 segundos'
vulnCheck: 'Regras suplementares'
acl: 'Regras personalizadas'
sql: 'injeção de SQL'
cc: 'Limite de frequência de acesso'
defaultUrlBlack: 'regras de URL'
sqlInject: 'injeção de SQL'
ErrDBNotExist: 'O banco de dados não existe'
allow: 'permitir'
deny: 'negar'
OpenrestyNotFound: 'OpenResty não está instalado'
remoteIpIsNull: 'A lista de IP está vazia'
OpenrestyVersionErr: 'A versão do OpenResty é muito antiga. Atualize para 1.27.1.2-2-2-focal'
ErrFileTooLarge: 'O arquivo excede 1 MB e não pode ser enviado'

# tarefa
TaskStart: '{{ .name }} A tarefa inicia [START]'
TaskEnd: '{{ .name }} Tarefa concluída [CONCLUÍDA]'
TaskFailed: '{{ .name }} tarefa falhou'
TaskTimeout: '{{ .name }} expirou'
TaskSuccess: '{{ .name }} Tarefa bem-sucedida'
TaskRetry: 'Iniciar {{ .name }}ª nova tentativa'
SubTaskSuccess: '{{ .name }} bem-sucedido'
SubTaskFailed: '{{ .name }} falhou: {{ .err }}'
TaskInstall: 'Instalar'
TaskUninstall: 'Desinstalar'
TaskCreate: 'Criar'
TaskDelete: 'Excluir'
TaskUpgrade: 'Atualizar'
TaskUpdate: 'Atualizar'
AgentPluginInstall: 'Instalar plugin'
AgentPluginEnable: 'Ativar plugin'
AgentPluginDisable: 'Desativar plugin'
AgentPluginUpdate: 'Atualizar plugin'
AgentPluginUninstall: 'Desinstalar plugin'
TaskRestart: 'Reiniciar'
TaskProtect: 'Proteger'
TaskBackup: 'Fazer cópia de segurança'
TaskRecover: 'Recuperar'
TaskRollback: 'Reverter'
TaskPull: 'Puxar'
TaskCommit: 'Criar imagem'
TaskBuild: 'Construir'
TaskPush: 'Enviar'
TaskClean: 'Limpeza'
TaskHandle: 'Executar'
TaskImport: 'Importar'
TaskExport: 'Exportar'
Website: 'Site'
App: 'Aplicativo'
Runtime: 'Ambiente de tempo de execução'
Database: 'Banco de dados'
ConfigFTP: 'Criar usuário FTP {{ .name }}'
ConfigOpenresty: 'Criar arquivo de configuração do OpenResty'
InstallAppSuccess: 'Aplicativo {{ .name }} instalado com sucesso'
ConfigRuntime: 'Configurar o ambiente de tempo de execução'
ConfigApp: 'Aplicativo de configuração'
SuccessStatus: '{{ .name }} bem-sucedido'
FailedStatus: '{{ .name }} falhou {{ .err }}'
HandleLink: 'Manipular associação de aplicativos'
HandleDatabaseApp: 'Manipulando parâmetros do aplicativo'
ExecShell: 'Executar script {{ .name }}'
PullImage: 'Puxar imagem'
Start: 'Iniciar'
Run: 'Iniciar'
Stop: 'Pare'
Image: 'Espelho'
Compose: 'Orquestração'
Container: 'Recipiente'
AppLink: 'Aplicativo vinculado'
EnableSSL: 'Habilitar HTTPS'
AppStore: 'Loja de aplicativos'
TaskSync: 'Sincronizar'
LocalApp: 'Aplicativo local'
SubTask: 'Subtarefa'
RuntimeExtension: 'Extensão do ambiente de tempo de execução'
TaskIsExecuting: 'A tarefa está em execução'
CustomAppstore: 'Armazém de aplicativos personalizados'
TaskExec: 'Executar'
TaskBatch: 'Operação em Lote'
FileConvert: 'Conversão de Formato de Arquivo'

# tarefa - ClamAV
Clamscan: 'Escanear {{ .name }}'
TaskScan: 'Escanear'

# tarefa - IA
OllamaModelPull: 'Puxar modelo Ollama {{ .name }}'
OllamaModelSize: 'Obtenha o tamanho do modelo Ollama {{ .name }}'
AIBenchmarkRun: "Executar benchmark de IA"

# tarefa - snapshot
Snapshot: 'Instantâneo'
SnapDBInfo: 'Escrever informações do banco de dados 1Panel'
SnapCopy: 'Copiar arquivos e diretórios {{ .name }}'
SnapNewDB: 'Inicializar conexão com o banco de dados {{ .name }}'
SnapDeleteOperationLog: 'Excluir log de operação'
SnapDeleteLoginLog: 'Excluir log de acesso'
SnapDeleteMonitor: 'Excluir dados de monitoramento'
SnapRemoveSystemIP: 'Remover IP do sistema'
SnapBaseInfo: 'Escreva informações básicas do 1Panel'
SnapInstallAppImageEmpty: 'Nenhuma imagem de aplicativo selecionada, pulando...'
SnapInstallApp: 'Backup dos aplicativos instalados do 1Panel'
SnapDockerSave: 'Compactar aplicativos instalados'
SnapLocalBackup: 'Backup do diretório de backup local do 1Panel'
SnapCompressBackup: 'Compactar diretório de backup local'
SnapPanelData: 'Backup do diretório de dados do 1Panel'
SnapCompressPanel: 'Diretório de dados compactados'
SnapWebsite: 'Backup do diretório do site 1Panel'
SnapCloseDBConn: 'Fechar a conexão com o banco de dados'
SnapCompress: 'Criar arquivos de instantâneos'
SnapCompressFile: 'Compactar arquivo de instantâneo'
SnapCheckCompress: 'Verificar arquivo de compactação de instantâneo'
SnapCompressSize: 'Tamanho do arquivo de instantâneo {{ .name }}'
SnapUpload: 'Carregar arquivo de instantâneo'
SnapUploadTo: 'Carregar arquivo de instantâneo para {{ .name }}'
SnapUploadRes: 'Carregar arquivo de instantâneo para {{ .name }}'
SnapshotRecover: 'Restauração de instantâneo'
RecoverDownload: 'Baixar arquivo de instantâneo'
Download: 'Baixar'
RecoverDownloadAccount: 'Obter conta de backup de download de instantâneo {{ .name }}'
RecoverDecompress: 'Descompacte arquivos compactados de instantâneos'
Decompress: 'Descompressão'
BackupBeforeRecover: 'Fazer backup de dados relacionados ao sistema antes do snapshot'
ReadJson: 'Ler o arquivo Json no snapshot'
ReadJsonPath: 'Obtenha o caminho do arquivo Json no snapshot'
ReadJsonContent: 'Ler arquivo Json'
ReadJsonMarshal: 'Processamento de escape JSON'
RecoverApp: 'Restaurar aplicativos instalados'
RecoverWebsite: 'Recuperar diretório de sites'
RecoverAppImage: 'Restaurar backup de imagem instantânea'
RecoverCompose: 'Restaurar outro conteúdo do compositor'
RecoverComposeList: 'Obter todos os compositores para serem restaurados'
RecoverComposeItem: 'Recuperar composição {{ .name }}'
RecoverAppEmpty: 'Nenhum backup de imagem de aplicativo foi encontrado no arquivo de instantâneo'
RecoverBaseData: 'Recuperar dados e arquivos básicos'
RecoverDaemonJsonEmpty: 'O arquivo de instantâneo e a máquina atual não têm o arquivo daemon.json de configuração do contêiner'
RecoverDaemonJson: 'Restaurar arquivo daemon.json de configuração do contêiner'
RecoverDBData: 'Recuperar dados do banco de dados'
RecoverBackups: 'Restaurar diretório de backup local'
RecoverPanelData: 'Diretório de dados de recuperação'

# tarefa - contêiner
ContainerImagePull: 'Puxar imagem do contêiner {{ .name }}'
ContainerRemoveOld: 'Remover o contêiner original {{ .name }}'
ContainerImageCheck: 'Verifique se a imagem é extraída normalmente'
ContainerLoadInfo: 'Obter informações básicas do contêiner'
ContainerRecreate: 'A atualização do contêiner falhou, agora iniciando a restauração do contêiner original'
ContainerCreate: 'Criar um novo contêiner {{ .name }}'
ContainerCreateFailed: 'Falha na criação do contêiner, exclua o contêiner com falha'
ContainerStartCheck: 'Verifique se o contêiner foi iniciado'
ContainerAcquireLock: 'Aguardar o bloqueio de operação do contêiner {{ .name }}'
ContainerUpgradeItem: 'Atualizar o contêiner {{ .name }}'
ContainerUpgradeSummary: 'Resumir os resultados da atualização de contêineres'
ContainerCleanupWarning: 'A atualização foi concluída, mas não foi possível remover o contêiner de backup {{ .name }}. Depois de confirmar que o novo contêiner está funcionando, remova manualmente o contêiner de backup. Erro: {{ .err }}'
ContainerStopOld: 'Parar o contêiner original {{ .name }}'
ContainerRenameOld: 'Renomear o contêiner original {{ .name }} para reversão'
ContainerDisconnectOld: 'Liberar os endereços de rede do contêiner original {{ .name }}'
ContainerCreateReplacement: 'Criar o contêiner substituto {{ .name }}'
ContainerStartReplacement: 'Iniciar o contêiner substituto {{ .name }}'
ContainerWaitReplacement: 'Verificar se o contêiner substituto {{ .name }} está pronto'
ContainerRollbackRestartOld: 'Reiniciar o contêiner original {{ .name }}'
ContainerRollbackRemoveReplacement: 'Remover o contêiner substituto com falha {{ .name }}'
ContainerRollbackRenameOld: 'Restaurar o nome do contêiner original {{ .name }}'
ContainerRollbackReconnectOld: 'Restaurar as redes do contêiner original {{ .name }}'

# tarefa - imagem
ImageBuild: 'Construção de imagem'
ImagePull: 'Puxar imagem'
ImageRepoAuthFromDB: 'Obter informações de autenticação do repositório do banco de dados'
ImagePush: 'Enviar imagem'
ImageRenameTag: 'Modificar tag de imagem'
ImageNewTag: 'Nova tag de imagem {{ .name }}'
ComposeCreate: 'Criar uma composição'

# tarefa - site
BackupNginxConfig: 'Fazer backup do arquivo de configuração do OpenResty do site'
CompressFileSuccess: 'Diretório compactado com sucesso, compactado para {{ .name }}'
CompressDir: 'Diretório de compressão'
DeCompressFile: 'Descompacte o arquivo {{ .name }}'
ErrCheckValid: 'Falha na verificação do arquivo de backup, {{ .name }}'
Rollback: 'Reversão'
websiteDir: 'Diretório de sites'
RecoverFailedStartRollBack: 'Falha na recuperação, iniciar reversão'
AppBackupFileIncomplete: 'O arquivo de backup está incompleto e não contém os arquivos app.json ou app.tar.gz'
AppAttributesNotMatch: 'O tipo ou nome do aplicativo não corresponde'

# alerta
ErrAlertMethodNotSupported: 'Esta versão não oferece suporte a este método de alerta'
ErrAlertSync: 'Erro de sincronização de informações de alarme, verifique e'

# tarefa - runtime
ErrInstallExtension: 'Já existe uma tarefa de instalação em andamento, aguarde a conclusão da tarefa'

# modelo de e-mail de alerta
PanelAlertTitle: 'Notificação de Alerta do Painel'
TestAlertTitle: 'E-mail de Teste - Verificar Conectividade de E-mail'
TestAlert: 'Este é um e-mail de teste para verificar se sua configuração de envio de e-mails está correta.'
LicenseExpirationAlert: 'Seu Painel {{ .node }}{{ .ip }}, a licença expirará em {{ .day }} dias. Faça login no painel para obter detalhes.'
CronJobFailedAlert: 'Seu Painel {{ .node }}{{ .ip }}, a execução da tarefa agendada {{ .name }} falhou. Faça login no painel para obter detalhes.'
ClamAlert: 'Seu Painel {{ .node }}{{ .ip }}, a tarefa de verificação de vírus detectou {{ .num }} arquivos infectados. Faça login no painel para obter detalhes.'
WebSiteAlert: 'Seu Painel {{ .node }}{{ .ip }}, {{ .num }} sites expirarão em {{ .day }} dias. Faça login no painel para obter detalhes.'
SSLAlert: 'Seu Painel {{ .node }}{{ .ip }}, {{ .num }} certificados SSL expirarão em {{ .day }} dias. Faça login no painel para obter detalhes.'
DiskUsedAlert: 'Seu Painel {{ .node }}{{ .ip }}, o uso do disco {{ .name }} atingiu {{ .used }}. Faça login no painel para obter detalhes.'
ResourceAlert: 'Seu Painel {{ .node }}{{ .ip }}, a taxa de uso médio do {{ .name }} nos últimos {{ .time }} minutos é {{ .used }}. Faça login no painel para obter detalhes.'
PanelVersionAlert: 'Seu Painel {{ .node }}{{ .ip }}, a versão mais recente do painel está disponível para atualização. Faça login no painel para obter detalhes.'
PanelPwdExpirationAlert: 'Seu Painel {{ .node }}{{ .ip }}, a senha do painel expirará em {{ .day }} dias. Faça login no painel para obter detalhes.'
CommonAlert: 'Seu Painel {{ .node }}{{ .ip }}, {{ .msg }}. Faça login no painel para obter detalhes.'
NodeExceptionAlert: 'Seu Painel {{ .node }}{{ .ip }}, {{ .num }} nós estão anormais. Faça login no painel para obter detalhes.'
LicenseExceptionAlert: 'Seu Painel {{ .node }}{{ .ip }}, {{ .num }} licenças estão anormais. Faça login no painel para obter detalhes.'
SSHAndPanelLoginAlert: 'Seu Painel {{ .node }}{{ .ip }}, o login {{ .name }} a partir de {{ .loginIp }} é anormal. Faça login no painel para obter detalhes.'

# disco
DeviceNotFound: 'Dispositivo {{ .name }} não encontrado'
DeviceIsMounted: 'Dispositivo {{ .name }} está montado desmonte primeiro'
PartitionDiskErr: 'Falha ao particionar, {{ .err }}'
FormatDiskErr: 'Falha ao formatar disco, {{ .err }}'
MountDiskErr: 'Falha ao montar disco, {{ .err }}'
XfsNotFound: 'Sistema de arquivos xfs não detectado instale xfsprogs primeiro'

# terminal
TerminalAIBlockedRiskyCommand: 'Comando de risco bloqueado: {{ .command }}'
TerminalAIThinking: 'A IA está pensando...'
TerminalAIReadyToExecute: 'Pensamento concluído, pressione Enter para executar (duração: {{ .duration }}, token: {{ .tokens }})'
TerminalAIRequestFailed: 'Falha na solicitação de AI: {{ .err }}'

# gateway de IA
ErrAIProxyServiceNotInstalled: 'O serviço {{ .name }} não está instalado'
ErrAIProxyModelAccountNotFound: 'Conta de modelo {{ .id }} não encontrada'
ErrAIProxyModelMapRequired: 'Este campo é obrigatório.'
ErrAIProxyModelMapInvalid: 'O mapeamento de modelos deve ser um objeto JSON válido: {{ .err }}'
ErrAIProxyModelMapEmpty: 'O mapeamento de modelos não pode estar vazio'
ErrAIProxyModelMapEmptyExternalModel: 'O mapeamento de modelos contém um modelo solicitado vazio'
ErrAIProxyModelMapEmptyUpstreamModel: 'O modelo upstream de {{ .model }} não pode estar vazio'
AIProxyUserFallback: 'Usuário excluído (ID: {{ .id }})'
AIProviderBailian: 'Alibaba Cloud Model Studio'
AIProviderBailianCodingPlan: 'Alibaba Cloud Model Studio Coding Plan'
AIProviderArk: 'Volcengine Ark'
AIProviderArkCodingPlan: 'Volcengine Ark Coding Plan'
