diff --git a/backend/app/dto/auth.go b/backend/app/dto/auth.go index 3909f227d..72f933aa0 100644 --- a/backend/app/dto/auth.go +++ b/backend/app/dto/auth.go @@ -29,7 +29,7 @@ type Login struct { Captcha string `json:"captcha"` CaptchaID string `json:"captchaID"` AuthMethod string `json:"authMethod" validate:"required,oneof=jwt session"` - Language string `json:"language" validate:"required,oneof=zh en tw jp ru ms"` + Language string `json:"language" validate:"required,oneof=zh en tw jp ru ms pt-BR"` } type MFALogin struct { diff --git a/backend/i18n/i18n.go b/backend/i18n/i18n.go index c3aaab625..71cb51b5a 100644 --- a/backend/i18n/i18n.go +++ b/backend/i18n/i18n.go @@ -84,6 +84,10 @@ func UseI18n() gin.HandlerFunc { if lang == "" { lang = "zh" } + //(dev: lucasplcorrea) - Ensuring support for pt-BR as a separate language + if lang == "pt-BR" { + lang = "pt-BR" + } global.I18n = i18n.NewLocalizer(bundle, lang) } } @@ -99,6 +103,8 @@ func Init() { _, _ = bundle.LoadMessageFileFS(fs, "lang/zh-Hant.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/fa.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/pt.yaml") + // (dev: lucasplcorrea) - Add pt-BR.yaml + _, _ = bundle.LoadMessageFileFS(fs, "lang/pt-BR.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/jp.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/ru.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml") @@ -108,9 +114,7 @@ func UseI18nForCmd(lang string) { if lang == "" { lang = "en" } - if lang == "pt-BR" { - lang = "pt" - } + if bundle == nil { Init() } diff --git a/backend/i18n/lang/pt-BR.yaml b/backend/i18n/lang/pt-BR.yaml new file mode 100644 index 000000000..fb9d80db6 --- /dev/null +++ b/backend/i18n/lang/pt-BR.yaml @@ -0,0 +1,283 @@ +ErrInvalidParams: "Erro nos parâmetros da solicitação: {{ .detail }}", +ErrTokenParse: "Erro na geração do token: {{ .detail }}", +ErrInitialPassword: "Erro na senha inicial", +ErrInternalServer: "Erro interno do serviço: {{ .detail }}", +ErrRecordExist: "Registro já existente", +ErrRecordNotFound: "Registros não encontrados", +ErrStructTransform: "Falha na conversão de tipo: {{ .detail }}", +ErrNotLogin: "Usuário não está logado: {{ .detail }}", +ErrPasswordExpired: "A senha atual expirou: {{ .detail }}", +ErrNotSupportType: "O sistema não suporta o tipo atual: {{ .detail }}", +ErrApiConfigStatusInvalid: "Acesso à interface da API proibido: {{ .detail }}", +ErrApiConfigKeyInvalid: "Erro na chave da interface da API: {{ .detail }}", +ErrApiConfigIPInvalid: "O IP da interface da API não está na lista de permissões: {{ .detail }}", +ErrApiConfigDisable: "Esta interface proíbe o uso de chamadas de API: {{ .detail }}", + +#common +ErrNameIsExist: "O nome já existe", +ErrDemoEnvironment: "Servidor de demonstração, operação proibida!", +ErrCmdTimeout: "Tempo limite de execução do comando excedido!", +ErrCmdIllegal: "O comando contém caracteres ilegais. Por favor, modifique e tente novamente!", +ErrPortExist: 'A porta {{ .port }} já está ocupada por {{ .type }} [{{ .name }}]', +TYPE_APP: "Aplicação", +TYPE_RUNTIME: "Ambiente de execução", +TYPE_DOMAIN: "Nome de domínio", +ErrTypePort: 'Erro no formato da porta {{ .name }}', +ErrTypePortRange: 'O intervalo da porta deve estar entre 1-65535', +Success: "Sucesso", +Failed: "Falhou", +SystemRestart: "A reinicialização do sistema causa interrupção da tarefa", + +#app +ErrPortInUsed: "A porta {{ .detail }} já está em uso", +ErrAppLimit: "O limite de instalação de aplicativos foi excedido", +ErrAppRequired: "O aplicativo {{ .detail }} é necessário", +ErrNotInstall: "Aplicativo não instalado", +ErrPortInOtherApp: "A porta {{ .port }} já está em uso pelo aplicativo {{ .apps }}", +ErrDbUserNotValid: "Banco de dados padrão, nome de usuário e senha não correspondem!", +ErrDockerComposeNotValid: "Erro no formato do arquivo docker-compose!", +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 ao criar a rede padrão do container! {{ .detail }}", +ErrFileParse: "Falha ao analisar o arquivo docker-compose do aplicativo!", +ErrInstallDirNotFound: "O diretório de instalação não existe", +AppStoreIsUpToDate: "Atualizado", +LocalAppVersionNull: "O aplicativo {{.name}} não está sincronizado com a versão! Não foi possível adicionar à lista de aplicativos", +LocalAppVersionErr: "Falha ao sincronizar a versão {{.version}} do {{.name}}! {{.err}}", +ErrFileNotFound: "O arquivo {{.name}} não existe", +ErrFileParseApp: "Falha ao analisar o arquivo {{.name}} {{.err}}", +ErrAppDirNull: "O diretório da versão não existe", +LocalAppErr: "Falha ao sincronizar o aplicativo {{.name}}! {{.err}}", +ErrContainerName: "O nome do container já existe", +ErrAppSystemRestart: "A reinicialização do 1Panel causa a interrupção da tarefa", +ErrCreateHttpClient: "Falha ao criar a solicitação HTTP {{.err}}", +ErrHttpReqTimeOut: "Tempo limite da solicitação excedido {{.err}}", +ErrHttpReqFailed: "Falha na solicitação {{.err}}", +ErrHttpReqNotFound: "O arquivo não existe", +ErrNoSuchHost: "Falha na conexão de rede", +ErrImagePullTimeOut: "Tempo limite ao puxar a imagem", +ErrContainerNotFound: "O container {{ .name }} não existe", +ErrContainerMsg: "O container {{ .name }} está anormal, verifique o log na página do container para mais detalhes", +ErrAppBackup: "Falha no backup do aplicativo {{ .name }} erro {{.err}}", +ErrImagePull: "Falha ao puxar a imagem {{ .name }} erro {{.err}}", +ErrVersionTooLow: "A versão atual do 1Panel é muito baixa para atualizar a loja de aplicativos, por favor atualize a versão", +ErrAppNameExist: "O nome do aplicativo já existe", +AppStoreIsSyncing: "A loja de aplicativos está sincronizando, tente novamente mais tarde", +ErrGetCompose: "Falha ao obter o arquivo docker-compose.yml! {{ .detail }}", +ErrAppWarn: "Status anormal, verifique o log", +ErrAppParamKey: "Exceção no campo do parâmetro {{ .name }}", +ErrAppUpgrade: "Falha ao atualizar o aplicativo {{ .name }} {{ .err }}", +AppRecover: "Aplicativo {{ .name }} revertido", +PullImageStart: "Iniciando o download da imagem {{ .name }}", +PullImageSuccess: "Imagem baixada com sucesso", +UpgradeAppStart: "Iniciando a atualização do aplicativo {{ .name }}", +UpgradeAppSuccess: "Aplicativo {{ .name }} atualizado com sucesso", + +#file +ErrFileCanNotRead: "Não foi possível ler o arquivo" +ErrFileToLarge: "O arquivo é muito grande" +ErrPathNotFound: "Caminho não encontrado" +ErrMovePathFailed: "O caminho de destino não pode conter o caminho original!" +ErrLinkPathNotFound: "O caminho de destino não existe!" +ErrFileIsExist: "O arquivo ou diretório já existe!" +ErrFileUpload: "Falha ao fazer upload do arquivo {{.name}} {{.detail}}" +ErrFileDownloadDir: "Pasta de download não é suportada" +ErrCmdNotFound: "O comando {{ .name }} não existe, por favor, instale este comando no host primeiro" +ErrSourcePathNotFound: "O diretório de origem não existe" +ErrFavoriteExist: "Este caminho já foi adicionado aos favoritos" +ErrInvalidChar: "Caracteres ilegais são proibidos" +ErrPathNotDelete: "O diretório selecionado não pode ser excluído" + +#website +ErrDomainIsExist: "O domínio já existe" +ErrAliasIsExist: "O alias já existe" +ErrAppDelete: "Outro site usa este aplicativo" +ErrGroupIsUsed: "O grupo está em uso e não pode ser excluído" +ErrBackupMatch: "O arquivo de backup não corresponde aos dados parciais atuais do site: {{ .detail }}" +ErrBackupExist: "O arquivo de backup corresponde a uma parte dos dados originais que não existe: {{ .detail }}" +ErrPHPResource: "O ambiente local não suporta a troca!" +ErrPathPermission: "Foi detectada uma pasta com permissões diferentes de 1000:1000 no diretório de índice, o que pode causar um erro de acesso negado ao acessar o site. Clique no botão salvar acima" +ErrDomainIsUsed: "O domínio já está sendo usado pelo site {{ .name }}" +ErrDomainFormat: "O formato do domínio {{ .name }} está incorreto" +ErrDefaultAlias: "default é um nome reservado, por favor, use outro nome" +ErrImageNotExist: "A imagem do ambiente de execução {{.name}} não existe, por favor, reconfigure o ambiente" + +#ssl +ErrSSLCannotDelete: "O certificado {{ .name }} está sendo usado pelo site e não pode ser removido" +ErrAccountCannotDelete: "O certificado associado à conta não pode ser excluído" +ErrSSLApply: "O certificado foi assinado com sucesso, mas o recarregamento do OpenResty falhou, por favor, verifique a configuração!" +ErrEmailIsExist: "O email já existe" +ErrSSLKeyNotFound: "O arquivo da chave privada não existe" +ErrSSLCertificateNotFound: "O arquivo do certificado não existe" +ErrSSLKeyFormat: "Erro na verificação do arquivo da chave privada" +ErrSSLCertificateFormat: "Erro no formato do arquivo do certificado, por favor, use o formato PEM" +ErrEabKidOrEabHmacKeyCannotBlank: "EabKid ou EabHmacKey não podem estar vazios" +ErrOpenrestyNotFound: "O modo HTTP requer a instalação prévia do OpenResty" +ApplySSLStart: "Iniciando aplicação do certificado, domínio [{{ .domain }}], método de aplicação [{{ .type }}]" +dnsAccount: "DNS Automático" +dnsManual: "DNS Manual" +http: "HTTP" +ApplySSLFailed: "A aplicação do certificado para [{{ .domain }}] falhou, {{.detail}}" +ApplySSLSuccess: "Certificado para [{{ .domain }}] aplicado com sucesso!" +DNSAccountName: "Conta DNS [{{ .name }}], provedor [{{.type}}]" +PushDirLog: "Certificado enviado para o diretório [{{ .path }}] {{ .status }}" +ErrDeleteCAWithSSL: "Há um certificado emitido sob a organização atual, não pode ser excluído" +ErrDeleteWithPanelSSL: "A configuração SSL do painel usa este certificado, não pode ser excluído" +ErrDefaultCA: "A autoridade certificadora padrão não pode ser excluída" +ApplyWebSiteSSLLog: "Iniciando atualização do certificado do site {{ .name }}" +ErrUpdateWebsiteSSL: "Falha ao atualizar o certificado do site {{ .name }}: {{ .err }}" +ApplyWebSiteSSLSuccess: "Certificado do site atualizado com sucesso" +ErrExecShell: "Falha na execução do script {{ .err }}" +ExecShellStart: "Iniciando execução do script" +ExecShellSuccess: "Script executado com sucesso" +StartUpdateSystemSSL: "Iniciando atualização do certificado do sistema" +UpdateSystemSSLSuccess: "Certificado do sistema atualizado com sucesso" + +#mysql +ErrUserIsExist: "O usuário atual já existe. Por favor, insira um novo usuário" +ErrDatabaseIsExist: "O banco de dados atual já existe. Por favor, insira um novo banco de dados" +ErrExecTimeOut: "Tempo de execução SQL expirado, por favor, verifique o banco de dados" +ErrRemoteExist: "O banco de dados remoto já existe com este nome, por favor, modifique e tente novamente" +ErrLocalExist: "O banco de dados local já existe com este nome, por favor, modifique e tente novamente" + +#redis +ErrTypeOfRedis: "O tipo do arquivo de recuperação não corresponde ao modo de persistência atual. Modifique o tipo do arquivo e tente novamente" + +#container +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" +ErrPortRules: "O número de portas não corresponde. Por favor, insira novamente!" +ErrPgImagePull: "Tempo limite ao tentar puxar a imagem. Configure a aceleração de imagem ou puxe manualmente a imagem postgres:16.0-alpine e tente novamente" + +#runtime +ErrDirNotFound: "A pasta de build não existe! Por favor, verifique a integridade dos arquivos!" +ErrFileNotExist: "O arquivo {{ .detail }} não existe! Por favor, verifique a integridade do arquivo de origem!" +ErrImageBuildErr: "Falha ao construir a imagem" +ErrImageExist: "A imagem já existe!" +ErrDelWithWebsite: "O ambiente operacional está associado a um site e não pode ser excluído" +ErrRuntimeStart: "Falha ao iniciar" +ErrPackageJsonNotFound: "O arquivo package.json não existe" +ErrScriptsNotFound: "Nenhum item de configuração de scripts foi encontrado no package.json" +ErrContainerNameNotFound: "Não foi possível obter o nome do contêiner. Por favor, verifique o arquivo .env" +ErrNodeModulesNotFound: "A pasta node_modules não existe! Edite o ambiente de execução ou aguarde até que o ambiente seja iniciado com sucesso" + +#setting +ErrBackupInUsed: "A conta de backup já está sendo usada em um cronjob e não pode ser excluída" +ErrBackupCheck: "Falha ao testar a conexão com a conta de backup {{ .err }}" +ErrOSSConn: "Não foi possível recuperar a versão mais recente. Por favor, verifique se o servidor pode se conectar à rede externa." +ErrEntrance: "Erro nas informações da entrada de segurança. Por favor, verifique e tente novamente!" + +#tool +ErrConfigNotFound: "O arquivo de configuração não existe" +ErrConfigParse: "Erro no formato do arquivo de configuração" +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 ao encontrar o usuário {{ .name }} {{ .err }}" + +#ssh +ErrFirewallNone: "Nenhum serviço firewalld ou ufw foi detectado no sistema. Por favor, verifique e tente novamente!" +ErrFirewallBoth: "Os serviços firewalld e ufw foram detectados no sistema. Para evitar conflitos, desinstale um deles e tente novamente!" + +#cronjob +ErrBashExecute: "Erro na execução do script. Por favor, verifique as informações específicas na área de saída da tarefa." +ErrCutWebsiteLog: "Falha ao cortar os logs do site {{ .name }}, erro {{ .err }}" +CutWebsiteLogSuccess: "Logs do site {{ .name }} cortados com sucesso, caminho do backup {{ .path }}" + +#toolbox +ErrNotExistUser: "O usuário atual não existe. Por favor, modifique e tente novamente!" +ErrBanAction: "Falha na configuração. O serviço {{ .name }} atual está indisponível, por favor, verifique e tente novamente!" +ErrClamdscanNotFound: "O comando clamdscan não foi detectado. Por favor, consulte a documentação para instalá-lo!" + +#waf +ErrScope: "A modificação dessa configuração não é suportada" +ErrStateChange: "Falha ao modificar o estado" +ErrRuleExist: "A regra já existe" +ErrRuleNotExist: "A regra não existe" +ErrParseIP: "Erro no formato do IP" +ErrDefaultIP: "default é um nome reservado, por favor, escolha outro nome" +ErrGroupInUse: "O grupo de IPs está sendo usado na lista de bloqueio/permitidos e não pode ser excluído" +ErrGroupExist: "O nome do grupo de IPs já existe" +ErrIPRange: "Intervalo de IP inválido" +ErrIPExist: "O IP já existe" + +#license +ErrLicense: "Erro no formato da licença, por favor, verifique e tente novamente!" +ErrLicenseCheck: "Falha na verificação da licença, por favor, verifique e tente novamente!" +ErrLicenseSave: "Falha ao salvar as informações da licença, erro {{ .err }}, por favor, tente novamente!" +ErrLicenseSync: "Falha ao sincronizar as informações da licença, nenhuma informação de licença detectada no banco de dados!" +ErrXpackNotFound: "Esta seção é um recurso da edição profissional. Por favor, importe a licença primeiro na interface Configurações do Painel - Licença." +ErrXpackNotActive: "Esta seção é um recurso da edição profissional. Por favor, sincronize o status da licença primeiro na interface Configurações do Painel - Licença." +ErrXpackOutOfDate: "A licença atual expirou, por favor, reimporte a licença na interface Configurações do Painel - Licença." +ErrXpackLost: "A licença atingiu o número máximo de tentativas de reexecução. Por favor, acesse as páginas [Configurações] [Licença] e clique manualmente no botão de sincronização para garantir que os recursos da versão profissional funcionem corretamente." +ErrXpackTimeout: "Tempo limite de solicitação, a conexão de rede pode estar instável, por favor, tente novamente mais tarde!" + +#license +ErrAlert: "Erro no formato das informações do alerta, por favor, verifique e tente novamente!" +ErrAlertPush: "Erro no envio do alerta, por favor, verifique e tente novamente!" +ErrAlertSave: "Erro ao salvar o alerta, por favor, verifique e tente novamente!" +ErrAlertSync: "Erro na sincronização do alerta, por favor, verifique e tente novamente!" +ErrAlertRemote: "Erro de alerta remoto, por favor, verifique e tente novamente!" + +#cmd +AppVersion: "Versão do aplicativo" +AppCommands: "Comandos relacionados ao aplicativo" +AppInit: "Inicializar aplicativo" +AppKeyVal: "Chave do aplicativo (somente suporta inglês)" +AppCreateFileErr: "Falha ao criar o arquivo {{ .name }} {{ .err }}" +AppCreateDirErr: "Falha ao criar a pasta {{ .name }} {{ .err }}" +AppMissKey: "Chave do aplicativo ausente, use -k para especificar" +AppMissVersion: "Versão do aplicativo ausente, use -v para especificar" +AppVersionExist: "A versão já existe!" +AppCreateSuccessful: "Criação bem-sucedida!" +AppWriteErr: "Falha ao escrever no arquivo {{ .name }} {{ .err }}" +SudoHelper: "Por favor, use {{ .cmd }} ou altere para o usuário root" +ListenIPCommands: "Trocar IP de escuta" +ListenIPv4: "Escutando em IPv4" +ListenIPv6: "Escutando em IPv6" +ListenChangeSuccessful: "Troca bem-sucedida! Agora escutando em {{ .value }}" +ResetCommands: "Redefinir informações do sistema" +ResetMFA: "Cancelar autenticação de dois fatores do 1Panel" +ResetHttps: "Cancelar login https do 1Panel" +ResetEntrance: "Cancelar entrada segura do 1Panel" +ResetIPs: "Cancelar restrições de IP autorizado do 1Panel" +ResetDomain: "Cancelar vinculação de domínio do 1Panel" +RestoreCommands: "Restaurar serviço e dados do 1Panel" +RestoreNoSuchFile: "Nenhum arquivo disponível para restauração" +RestoreStep1: "(1/5) Iniciando a restauração do serviço e dados do 1Panel a partir do diretório {{ .name }}..." +RestoreStep2: "(2/5) Restauração do binário do 1Panel bem-sucedida" +RestoreStep3: "(3/5) Restauração dos scripts do 1Panel bem-sucedida" +RestoreStep4: "(4/5) Restauração do serviço do 1Panel bem-sucedida" +RestoreStep5: "(5/5) Restauração dos dados do 1Panel bem-sucedida" +RestoreSuccessful: "Restauração bem-sucedida! Reiniciando o serviço, por favor, aguarde..." +UpdateCommands: "Atualizar informações do painel" +UpdateUser: "Atualizar usuário do painel" +UpdatePassword: "Atualizar senha do painel" +UpdatePort: "Atualizar porta do painel" +UpdateUserNull: "Erro: usuário do painel está vazio!" +UpdateUserBlank: "Erro: o usuário do painel contém espaços!" +UpdateUserFormat: "Erro: Formato de usuário do painel inválido! Apenas suporta inglês, chinês, números e _, comprimento de 3-30." +UpdateUserErr: "Erro: Falha ao atualizar o usuário do painel, {{ .err }}" +UpdateSuccessful: "Atualização bem-sucedida!" +UpdateUserResult: "Usuário do painel: {{ .name }}" +UpdatePasswordRead: "Erro: Falha ao ler as informações da senha do painel, {{ .err }}" +UpdatePasswordNull: "Erro: A senha do painel está vazia!" +UpdateUPasswordBlank: "Erro: A senha do painel contém espaços!" +UpdatePasswordFormat: "Erro: A senha do painel suporta apenas letras, números, caracteres especiais !@#$%*_,.?, comprimento de 8-30!" +UpdatePasswordLen: "Erro: Por favor, insira uma senha com mais de 6 caracteres!" +UpdatePasswordRe: "Confirmar senha:" +UpdatePasswordErr: "Erro: Falha ao atualizar a senha do painel, {{ .err }}" +UpdatePasswordSame: "Erro: As duas senhas não correspondem, por favor, verifique e tente novamente!" +UpdatePasswordResult: "Senha do painel: {{ .name }}" +UpdatePortFormat: "Erro: O número da porta deve estar entre 1 e 65535!" +UpdatePortUsed: "Erro: O número da porta já está em uso, por favor, verifique e tente novamente!" +UpdatePortErr: "Erro: Falha ao atualizar a porta do painel, {{ .err }}" +UpdatePortResult: "Porta do painel: {{ .name }}" +UpdatePortFirewallAdd: "Falha ao adicionar regra de porta ao firewall, {{ .err }}, por favor, adicione manualmente a porta {{ .name }} às regras do firewall." +UpdatePortFirewallDel: "Erro: Falha ao excluir a porta do firewall, {{ .err }}" +UpdatePortFirewallReload: "Falha ao recarregar o firewall, {{ .err }}, por favor, recarregue o firewall manualmente." +UserInfo: "Obter informações do painel" +UserInfoAddr: "Endereço do painel: " +UserInfoPassHelp: "Dica: Para alterar a senha, você pode executar o comando: " +DBConnErr: "Erro: Falha ao inicializar a conexão com o banco de dados, {{ .err }}" +SystemVersion: "versão: " +SystemMode: "modo: " \ No newline at end of file diff --git a/frontend/src/lang/index.ts b/frontend/src/lang/index.ts index c68d67867..e48305a00 100644 --- a/frontend/src/lang/index.ts +++ b/frontend/src/lang/index.ts @@ -2,6 +2,7 @@ import { createI18n } from 'vue-i18n'; import zh from './modules/zh'; import tw from './modules/tw'; import en from './modules/en'; +import ptBr from './modules/pt-br'; import jp from './modules/jp'; import ru from './modules/ru'; import ms from './modules/ms'; @@ -15,6 +16,7 @@ const i18n = createI18n({ zh, tw, en, + 'pt-br': ptBr, jp, ru, ms, diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts new file mode 100644 index 000000000..9ac2a58f4 --- /dev/null +++ b/frontend/src/lang/modules/pt-br.ts @@ -0,0 +1,2464 @@ +import fit2cloudPtBrLocale from 'fit2cloud-ui-plus/src/locale/lang/pt-br'; + +let xpackPtBrLocale = {}; +const xpackModules = import.meta.glob('../../xpack/lang/pt-br.ts', { eager: true }); +if (xpackModules['../../xpack/lang/pt-br.ts']) { + xpackPtBrLocale = xpackModules['../../xpack/lang/pt-br.ts']['default'] || {}; +} + +const message = { + commons: { + true: 'verdadeiro', + false: 'falso', + colon: ': ', + example: 'Por exemplo, ', + fit2cloud: 'FIT2CLOUD', + lingxia: 'Lingxia', + button: { + create: 'Criar', + add: 'Adicionar', + save: 'Salvar', + set: 'Editar configuração', + sync: 'Sincronizar', + delete: 'Excluir', + edit: 'Editar', + enable: 'Ativar', + disable: 'Desativar', + confirm: 'Confirmar', + cancel: 'Cancelar', + reset: 'Redefinir', + restart: 'Reiniciar', + conn: 'Conectar', + disconn: 'Desconectar', + clean: 'Limpar', + login: 'Entrar', + close: 'Fechar', + stop: 'Parar', + start: 'Iniciar', + view: 'Visualizar', + watch: 'Monitorar', + handle: 'Disparar', + expand: 'Expandir', + collapse: 'Recolher', + log: 'Logs', + back: 'Voltar', + backup: 'Backup', + recover: 'Restaurar', + retry: 'Tentar novamente', + upload: 'Fazer upload', + download: 'Fazer download', + init: 'Inicializar', + verify: 'Verificar', + saveAndEnable: 'Salvar e ativar', + import: 'Importar', + search: 'Pesquisar', + refresh: 'Atualizar', + get: 'Obter', + upgrade: 'Atualizar versão', + ignore: 'Ignorar atualização', + copy: 'Copiar', + random: 'Aleatório', + uninstall: 'Desinstalar', + fullscreen: 'Entrar em tela cheia', + quitFullscreen: 'Sair da tela cheia', + update: 'Editar', + showAll: 'Exibir tudo', + hideSome: 'Ocultar alguns', + agree: 'Concordo', + notAgree: 'Não concordo', + preview: 'Pré-visualizar', + open: 'Abrir', + notSave: 'Não salvar', + createNewFolder: 'Criar nova pasta', + createNewFile: 'Criar novo arquivo', + helpDoc: 'Documento de ajuda', + unbind: 'Desvincular', + }, + search: { + timeStart: 'Hora inicial', + timeEnd: 'Hora final', + timeRange: 'Até', + dateStart: 'Data inicial', + dateEnd: 'Data final', + + }, + table: { + all: 'Todos', + total: 'Total de {0}', + name: 'Nome', + type: 'Tipo', + status: 'Status', + statusSuccess: 'Sucesso', + statusFailed: 'Falha', + statusWaiting: 'Aguardando...', + records: 'Registros', + group: 'Grupo', + createdAt: 'Data de criação', + publishedAt: 'Data de publicação', + date: 'Data', + updatedAt: 'Data de atualização', + operate: 'Operações', + message: 'Mensagem', + description: 'Descrição', + interval: 'Intervalo', + user: 'Responsável', + title: 'Título', + port: 'Porta', + forward: 'Encaminhar', + protocol: 'Protocolo', + tableSetting: 'Configuração da tabela', + refreshRate: 'Taxa de atualização', + refreshRateUnit: 'Sem atualização | {n} segundo/atualização | {n} segundos/atualização', + selectColumn: 'Selecionar coluna', + + }, + loadingText: { + Upgrading: 'Atualizando o sistema, por favor, aguarde...', + Restarting: 'Reiniciando o sistema, por favor, aguarde...', + Recovering: 'Restaurando a partir de um snapshot, por favor, aguarde...', + Rollbacking: 'Revertendo para um snapshot, por favor, aguarde...', + + }, + msg: { + noneData: 'Nenhum dado disponível', + delete: 'Esta operação de exclusão não pode ser desfeita. Deseja continuar?', + clean: 'Esta operação de limpeza não pode ser desfeita. Deseja continuar?', + deleteTitle: 'Excluir', + deleteSuccess: 'Excluído com sucesso', + loginSuccess: 'Login realizado com sucesso', + operationSuccess: 'Operação concluída com sucesso', + copySuccess: 'Copiado com sucesso', + notSupportOperation: 'Esta operação não é suportada', + requestTimeout: 'A solicitação expirou, tente novamente mais tarde', + infoTitle: 'Aviso', + notRecords: 'Nenhum registro de execução foi gerado para a tarefa atual', + sureLogOut: 'Tem certeza de que deseja sair?', + createSuccess: 'Criado com sucesso', + updateSuccess: 'Atualizado com sucesso', + uploadSuccess: 'Enviado com sucesso', + operate: 'Operar', + operateConfirm: 'Se você tem certeza da operação, insira-a manualmente:', + inputOrSelect: 'Por favor, selecione ou insira', + copyFailed: 'Falha ao copiar', + operatorHelper: 'A operação "{1}" será realizada em "{0}" e não poderá ser desfeita. Deseja continuar?', + notFound: 'Desculpe, a página solicitada não existe.', + unSupportType: 'O tipo de arquivo atual não é suportado.', + unSupportSize: 'O arquivo enviado excede {0}M, por favor confirme!', + fileExist: 'O arquivo já existe na pasta atual. Não é possível enviar novamente.', + fileNameErr: 'Você pode enviar apenas arquivos cujo nome contenha de 1 a 256 caracteres, incluindo letras, números ou os caracteres (. - _)', + confirmNoNull: 'Certifique-se de que o valor {0} não está vazio.', + errPort: 'Informação de porta incorreta, por favor confirme!', + remove: 'Remover', + backupHelper: 'A operação atual fará o backup de {0}. Deseja continuar?', + recoverHelper: 'Restaurando a partir do arquivo {0}. Esta operação é irreversível. Deseja continuar?', + refreshSuccess: 'Atualizado com sucesso', + rootInfoErr: 'Já está no diretório raiz', + resetSuccess: 'Redefinido com sucesso', + creatingInfo: 'Criando, não é necessário realizar esta operação', + + }, + login: { + username: 'Usuário', + password: 'Senha', + welcome: 'Bem-vindo de volta, insira seu usuário e senha para acessar!', + errorAuthInfo: 'O nome de usuário ou senha que você inseriu está incorreto, tente novamente!', + errorMfaInfo: 'Informações de autenticação incorretas, tente novamente!', + captchaHelper: 'Captcha', + errorCaptcha: 'Erro no código Captcha!', + notSafe: 'Acesso Negado', + safeEntrance1: 'O login seguro foi habilitado no ambiente atual', + safeEntrance2: 'Digite o seguinte comando no terminal SSH para visualizar a entrada do painel: 1pctl user-info', + errIP1: 'O acesso por endereço IP autorizado está habilitado no ambiente atual', + errDomain1: 'O acesso por nome de domínio vinculado está habilitado no ambiente atual', + errHelper: 'Para redefinir as informações de vinculação, execute o seguinte comando no terminal SSH:', + codeInput: 'Por favor, insira o código de verificação de 6 dígitos do validador MFA', + mfaTitle: 'Autenticação MFA', + mfaCode: 'Código de verificação MFA', + title: 'Painel de Gerenciamento de Servidores Linux', + licenseHelper: + 'Concordar com « Acordo de Licença Comunitária »', + errorAgree: 'Clique para concordar com o Acordo de Licença de Software Comunitário', + logout: 'Sair', + agreeTitle: 'Termo de Aceite', + agreeContent: + 'Para proteger melhor seus direitos e interesses legítimos, leia e concorde com o seguinte termo « Acordo de Licença Comunitária »', + }, + rule: { + username: 'Insira um nome de usuário', + password: 'Insira uma senha', + rePassword: 'A confirmação da senha não corresponde à senha.', + requiredInput: 'Este campo é obrigatório.', + requiredSelect: 'Selecione um item na lista', + illegalInput: 'Este campo não deve conter caracteres ilegais.', + commonName: + 'Este campo deve começar com caracteres não especiais e consistir em letras, números, ".", "-", e "_" com comprimento de 1-128.', + userName: 'Este campo deve conter letras, números e "_" com comprimento de 3-30.', + simpleName: 'Este campo não deve começar com "_" e deve conter letras, números e "_" com comprimento de 3-30.', + simplePassword: 'Este campo não deve começar com "_" e deve conter letras, números e "_" com comprimento de 1-30.', + dbName: 'Este campo não deve começar com "_" e deve conter letras, números e "_" com comprimento de 1-64.', + imageName: + 'Este campo deve conter letras, números, ":", "@", "/", ".", "-", e "_" com comprimento de 1-256.', + composeName: + 'Deve começar com caracteres não especiais, conter letras minúsculas, números, "-" e "_" com comprimento de 1-256.', + volumeName: + 'Este campo deve conter letras, números, ".", "-", e "_" com comprimento de 2-30.', + supervisorName: + 'Este campo deve começar com caracteres não especiais e conter letras, números, "-" e "_" com comprimento de 1-128.', + complexityPassword: + 'Este campo deve conter letras, números com comprimento de 8-30 e pelo menos dois caracteres especiais.', + commonPassword: 'O comprimento deste campo deve ser maior que 6.', + linuxName: 'O comprimento deste campo deve estar entre 1 e 128. Não pode conter os seguintes caracteres especiais: "{0}".', + email: 'Este campo deve ser um endereço de email válido.', + number: 'Este campo deve ser um número.', + integer: 'Este campo deve ser um número inteiro positivo.', + ip: 'Este campo deve ser um endereço IP válido.', + host: 'Este campo deve ser um endereço IP ou nome de domínio válido.', + hostHelper: 'Suporta a entrada de endereço IP ou nome de domínio', + port: 'Este campo deve ser um número de porta válido.', + selectHelper: 'Selecione o arquivo {0} correto', + domain: 'Este campo deve estar no formato: exemplo.com ou exemplo.com:8080.', + databaseName: 'Este campo deve conter letras, números e "_" com comprimento de 1-30.', + ipErr: 'Este campo deve ser um endereço IP válido.', + numberRange: 'Este campo deve ser um número entre {0} e {1}.', + paramName: + 'Este campo deve conter letras, números, ".", "-", e "_" com comprimento de 2-30.', + paramComplexity: + 'Este campo não deve começar ou terminar com caracteres especiais e deve conter letras, números e "{0}" com comprimento de 6-128.', + paramUrlAndPort: 'Este campo deve estar no formato "http(s)://(nome do domínio/IP):(porta)".', + nginxDoc: 'Este campo deve conter letras, números e ".".', + appName: 'Este campo não deve começar ou terminar com "-" ou "_" e deve conter letras, números, "-", e "_" com comprimento de 2-30.', + containerName: 'Suporta letras, números, "-", "_" e "."; não pode começar com "-", "_" ou "."; comprimento: 2-128.', + mirror: 'O endereço de aceleração do mirror deve começar com http(s)://, suportar letras (maiúsculas e minúsculas), números, ".", "/" e "-", e não deve conter linhas em branco.', + disableFunction: 'Suporta apenas letras, underscores e,', + leechExts: 'Suporta apenas letras, números e,', + paramSimple: 'Suporta letras minúsculas e números, comprimento 1-128', + filePermission: 'Erro de permissão de arquivo', + formatErr: 'Erro de formato, verifique e tente novamente', + phpExtension: 'Suporta apenas _, letras minúsculas e números', + paramHttp: 'Deve começar com http:// ou https://', + phone: 'O formato do número de telefone está incorreto', + }, + res: { + paramError: 'A solicitação falhou, por favor, tente novamente mais tarde!', + forbidden: 'O usuário atual não tem permissão', + serverError: 'Exceção no serviço', + notFound: 'O recurso não existe', + commonError: 'A solicitação falhou', + }, + service: { + serviceNotStarted: `O serviço {0} não está iniciado.`, + }, + status: { + running: 'Em execução', + done: 'Concluído', + scanFailed: 'Incompleto', + success: 'Sucesso', + waiting: 'Aguardando', + waiting1: 'Aguardando', + failed: 'Falhou', + stopped: 'Parado', + error: 'Erro', + created: 'Criado', + restarting: 'Reiniciando', + uploading: 'Enviando', + unhealthy: 'Indisponível', + removing: 'Removendo', + paused: 'Pausado', + exited: 'Finalizado', + dead: 'Morto', + installing: 'Instalando', + enabled: 'Habilitado', + disabled: 'Desabilitado', + normal: 'Normal', + building: 'Construindo', + downloaderr: 'Erro de download', + upgrading: 'Atualizando', + upgradeerr: 'Erro na atualização', + pullerr: 'Erro ao buscar imagem', + rebuilding: 'Reconstruindo', + deny: 'Negado', + accept: 'Aceito', + used: 'Usado', + unUsed: 'Não usado', + starting: 'Iniciando', + recreating: 'Reconstruindo', + creating: 'Criando', + systemrestart: 'Interromper', + init: 'Aguardando aplicação', + ready: 'Normal', + applying: 'Aplicando', + applyerror: 'Falha', + syncerr: 'Erro', + uperr: 'Erro', + }, + units: { + second: 'segundo | segundos | segundos', + minute: 'minuto | minutos | minutos', + hour: 'hora | horas | horas', + day: 'dia | dias | dias', + week: 'semana | semanas | semanas', + month: 'mês | meses | meses', + year: 'ano | anos | anos', + time: 'rqm', + core: 'núcleo | núcleos | núcleos', + millisecond: 'milissegundo | milissegundos', + secondUnit: 's', + minuteUnit: 'min', + hourUnit: 'h', + dayUnit: 'd', + weekUnit: 's', + monthUnit: 'm', + yearUnit: 'a', + millisecondUnit: 'ms', + }, + operate: { + down: 'Parar', + up: 'Iniciar', + restart: 'Reiniciar', + install: 'Instalar', + uninstall: 'Desinstalar', + update: 'Atualizar', + }, + }, + menu: { + home: 'Visão Geral', + apps: 'Loja de Aplicativos', + website: 'Site | Sites', + project: 'Projeto | Projetos', + config: 'Configuração | Configurações', + ssh: 'Configurações SSH', + firewall: 'Firewall', + ssl: 'Certificado | Certificados', + database: 'Banco de Dados | Bancos de Dados', + container: 'Container | Containers', + cronjob: 'Tarefa Cron | Tarefas Cron', + host: 'Host | Hosts', + system: 'Sistema', + security: 'Segurança', + files: 'Arquivos', + monitor: 'Monitoramento', + terminal: 'Terminal | Terminais', + settings: 'Configuração | Configurações', + toolbox: 'Caixa de Ferramentas', + logs: 'Log | Logs', + runtime: 'Tempo de Execução | Tempos de Execução', + processManage: 'Processo | Processos', + process: 'Processo | Processos', + network: 'Rede | Redes', + supervisor: 'Supervisor', + name: 'Imunidade contra Modificação', + }, + home: { + restart_1panel: 'Reiniciar painel', + restart_system: 'Reiniciar servidor', + operationSuccess: 'Operação bem-sucedida, reiniciando, por favor, atualize o navegador manualmente mais tarde!', + overview: 'Visão Geral', + entranceHelper: 'A entrada de segurança não está ativada. Você pode ativá-la em "Configurações -> Segurança" para melhorar a segurança do sistema.', + appInstalled: 'Aplicações', + systemInfo: 'Informações do sistema', + hostname: 'Nome do host', + platformVersion: 'Sistema operacional', + kernelVersion: 'Versão do Kernel', + kernelArch: 'Arquitetura', + network: 'Rede', + io: 'Leitura/Gravação de Disco', + ip: 'IP local', + proxy: 'Proxy do sistema', + baseInfo: 'Informações básicas', + totalSend: 'Total enviado', + totalRecv: 'Total recebido', + rwPerSecond: 'Operações de I/O', + ioDelay: 'Latência de I/O', + uptime: 'Tempo de atividade', + runningTime: 'Tempo de execução', + mem: 'Memória', + swapMem: 'Partição Swap', + + runSmoothly: 'Baixo carregamento', + runNormal: 'Carregamento moderado', + runSlowly: 'Carregamento alto', + runJam: 'Carregamento pesado', + + core: 'Núcleo físico', + logicCore: 'Núcleo lógico', + loadAverage: 'Média de carga nos últimos 1 minuto | Média de carga nos últimos {n} minutos', + load: 'Carga', + mount: 'Ponto de montagem', + fileSystem: 'Sistema de arquivos', + total: 'Total', + used: 'Usado', + free: 'Livre', + percent: 'Utilização', + app: 'Aplicações recomendadas', + goInstall: 'Ir para instalação', + + networkCard: 'Placa de rede', + disk: 'Disco', + }, + tabs: { + more: 'Mais', + hide: 'Esconder', + close: 'Fechar', + closeLeft: 'Fechar à esquerda', + closeRight: 'Fechar à direita', + closeCurrent: 'Fechar atual', + closeOther: 'Fechar outros', + closeAll: 'Fechar todos', + + }, + header: { + logout: 'Logout', + }, + database: { + all: 'Todos', + manage: 'Gerenciamento', + database: 'Banco de dados', + deleteBackupHelper: 'Excluir backups do banco de dados simultaneamente', + delete: 'A operação de exclusão não pode ser desfeita, insira "', + deleteHelper: '" para excluir este banco de dados', + create: 'Criar banco de dados', + noMysql: 'Serviço de banco de dados (MySQL ou MariaDB)', + noPostgresql: 'Serviço de banco de dados Postgresql', + goUpgrade: 'Ir para atualização', + goInstall: 'Ir para instalação', + source: 'Fonte', + isDelete: 'Excluído', + permission: 'Permissões', + permissionForIP: 'IP', + permissionAll: 'Todos (% de)', + databaseConnInfo: 'Informações de conexão', + rootPassword: 'Senha root', + serviceName: 'Nome do serviço', + serviceNameHelper: 'Acesso entre containers na mesma rede.', + backupList: 'Backup', + loadBackup: 'Importar', + remoteAccess: 'Acesso remoto', + remoteHelper: 'Vários IPs separados por vírgula, exemplo: 172.16.10.111, 172.16.10.112', + remoteConnHelper: + 'Conectar-se ao MySQL como usuário root pode representar riscos de segurança. Realize esta operação com cautela.', + changePassword: 'Senha', + changePasswordHelper: + 'O banco de dados está associado a um aplicativo. Alterar a senha alterará a senha do banco de dados do aplicativo ao mesmo tempo. A mudança surtirá efeito após a reinicialização do aplicativo.', + + confChange: 'Configuração', + confNotFound: + 'Não foi possível encontrar o arquivo de configuração. Atualize o aplicativo para a versão mais recente na loja de aplicativos e tente novamente!', + + portHelper: + 'Esta porta é a porta exposta do container. Você precisa salvar a modificação separadamente e reiniciar o container!', + + loadFromRemote: 'Sincronizar', + userBind: 'Vincular usuário', + pgBindHelper: `Esta operação cria um novo usuário e o vincula ao banco de dados alvo. A seleção de usuários já existentes no banco de dados não é suportada.`, + pgSuperUser: 'Superusuário', + loadFromRemoteHelper: + 'Isso sincronizará as informações do banco de dados no servidor para o 1Panel. Deseja continuar?', + passwordHelper: 'Não é possível obter, por favor, modifique', + local: 'Local', + remote: 'Remoto', + remoteDB: 'Servidor remoto | Servidores remotos', + manageRemoteDB: 'Gerenciar DB remoto', + createRemoteDB: 'Vincular @.lower:database.remoteDB', + unBindRemoteDB: 'Desvincular @.lower:database.remoteDB', + unBindForce: 'Forçar desvinculação', + unBindForceHelper: 'Ignorar todos os erros durante o processo de desvinculação para garantir que a operação final seja bem-sucedida', + unBindRemoteHelper: + 'Desvincular o banco de dados remoto removerá apenas a relação de vinculação e não excluirá diretamente o banco de dados remoto', + editRemoteDB: 'Editar servidor remoto', + localDB: 'Banco de dados local', + address: 'Endereço do banco de dados', + version: 'Versão do banco de dados', + userHelper: 'O usuário root ou um usuário do banco de dados com privilégios de root pode acessar o banco de dados remoto.', + pgUserHelper: 'Usuário do banco de dados com privilégios de superusuário.', + ssl: 'Usar SSL', + clientKey: 'Chave privada do cliente', + clientCert: 'Certificado do cliente', + caCert: 'Certificado CA', + hasCA: 'Possui certificado CA', + skipVerify: 'Ignorar verificação de validade do certificado', + + formatHelper: + 'O conjunto de caracteres atual do banco de dados é {0}, a inconsistência no conjunto de caracteres pode causar falha na recuperação', + selectFile: 'Selecionar arquivo', + dropHelper: 'Você pode arrastar e soltar o arquivo carregado aqui ou', + clickHelper: 'clicar para fazer upload', + supportUpType: 'Apenas arquivos sql, sql.gz e tar.gz são suportados', + zipFormat: 'Estrutura do pacote comprimido tar.gz: o pacote comprimido test.tar.gz deve conter test.sql', + + currentStatus: 'Estado atual', + baseParam: 'Parâmetro básico', + performanceParam: 'Parâmetro de desempenho', + runTime: 'Tempo de inicialização', + connections: 'Conexões totais', + bytesSent: 'Bytes enviados', + bytesReceived: 'Bytes recebidos', + queryPerSecond: 'Consultas por segundo', + txPerSecond: 'Tx por segundo', + connInfo: 'conexões ativas/pico', + connInfoHelper: 'Se o valor for muito grande, aumente "max_connections".', + threadCacheHit: 'Acuracidade do cache de threads', + threadCacheHitHelper: 'Se for muito baixo, aumente "thread_cache_size".', + indexHit: 'Acuracidade de índice', + indexHitHelper: 'Se for muito baixo, aumente "key_buffer_size".', + innodbIndexHit: 'Taxa de acerto de índice InnoDB', + innodbIndexHitHelper: 'Se for muito baixo, aumente "innodb_buffer_pool_size".', + cacheHit: 'Acuracidade da consulta em cache', + cacheHitHelper: 'Se for muito baixo, aumente "query_cache_size".', + tmpTableToDB: 'Tabela temporária para disco', + tmpTableToDBHelper: 'Se for muito grande, tente aumentar "tmp_table_size".', + openTables: 'Tabelas abertas', + openTablesHelper: 'O valor da configuração de "table_open_cache" deve ser maior ou igual a este valor.', + selectFullJoin: 'Join completo de seleção', + selectFullJoinHelper: `Se o valor não for 0, verifique se o índice da tabela de dados está correto.`, + selectRangeCheck: 'Número de joins sem índice', + selectRangeCheckHelper: `Se o valor não for 0, verifique se o índice da tabela de dados está correto.`, + sortMergePasses: 'Número de mesclagens ordenadas', + sortMergePassesHelper: 'Se o valor for muito grande, aumente "sort_buffer_size".', + tableLocksWaited: 'Número de bloqueios de tabela', + tableLocksWaitedHelper: 'Se o valor for muito grande, considere aumentar o desempenho do banco de dados.', + + performanceTuning: 'Ajuste de desempenho', + optimizationScheme: 'Plano de otimização', + keyBufferSizeHelper: 'Tamanho do buffer para índice', + queryCacheSizeHelper: 'Cache de consulta. Se essa função estiver desativada, defina este parâmetro como 0.', + tmpTableSizeHelper: 'Tamanho do cache de tabela temporária', + innodbBufferPoolSizeHelper: 'Tamanho do buffer InnoDB', + innodbLogBufferSizeHelper: 'Tamanho do buffer de log InnoDB', + sortBufferSizeHelper: '* conexões, buffer de cada thread de ordenação', + readBufferSizeHelper: '* conexões, tamanho do buffer de leitura', + readRndBufferSizeHelper: '* conexões, tamanho do buffer de leitura aleatória', + joinBufferSizeHelper: '* conexões, tamanho do cache da tabela de associação', + threadStackelper: '* conexões, tamanho do stack por thread', + binlogCacheSizeHelper: '* conexões, tamanho do cache de log binário (múltiplos de 4096)', + threadCacheSizeHelper: 'Tamanho do pool de threads', + tableOpenCacheHelper: 'Cache de tabelas', + maxConnectionsHelper: 'Conexões máximas', + restart: 'Reiniciar', + + log: 'Logs', + slowLog: 'Logs lentos', + noData: 'Ainda não há logs lentos.', + + isOn: 'Ligado', + longQueryTime: 'limite (segundos)', + thresholdRangeHelper: 'Por favor, insira o limite correto (1 - 600).', + + timeout: 'Tempo limite', + timeoutHelper: 'Período de timeout de conexão ociosa. 0 indica que a conexão permanece ativa continuamente.', + maxclients: 'Máximo de clientes', + requirepassHelper: + 'Deixe este campo em branco para indicar que nenhuma senha foi definida. Mudanças precisam ser salvas separadamente e o container reiniciado!', + databases: 'Número de bancos de dados', + maxmemory: 'Uso máximo de memória', + maxmemoryHelper: '0 indica sem restrição.', + tcpPort: 'Porta de escuta atual.', + uptimeInDays: 'Dias de operação.', + connectedClients: 'Número de clientes conectados.', + usedMemory: 'Uso atual de memória do Redis.', + usedMemoryRss: 'Tamanho da memória solicitado ao sistema operacional.', + usedMemoryPeak: 'Pico de consumo de memória do Redis.', + memFragmentationRatio: 'Taxa de fragmentação de memória.', + totalConnectionsReceived: 'Total de clientes conectados desde a execução.', + totalCommandsProcessed: 'Número total de comandos executados desde a execução.', + instantaneousOpsPerSec: 'Número de comandos executados pelo servidor por segundo.', + keyspaceHits: 'Número de vezes que uma chave de banco de dados foi encontrada.', + keyspaceMisses: 'Número de tentativas falhas de encontrar a chave do banco de dados.', + hit: 'Taxa de acerto de chave de banco de dados.', + latestForkUsec: 'Número de microssegundos gastos na última operação fork()', + redisCliHelper: `"redis-cli" não foi detectado. Habilite o serviço primeiro.`, + redisQuickCmd: 'Comandos rápidos Redis', + recoverHelper: 'Isso sobrescreverá os dados com [{0}]. Deseja continuar?', + submitIt: 'Sobrescrever os dados', + + baseConf: 'Básico', + allConf: 'Todos', + restartNow: 'Reiniciar agora', + restartNowHelper1: + 'Você precisa reiniciar o sistema após as mudanças na configuração entrarem em vigor. Se seus dados precisarem ser persistidos, execute primeiro a operação de salvar.', + restartNowHelper: 'Isso só terá efeito após o sistema reiniciar.', + + persistence: 'Persistência', + rdbHelper1: 'segundo(s), inserir', + rdbHelper2: 'registros de dados', + rdbHelper3: 'Atender a qualquer uma das condições acionará a persistência RDB.', + rdbInfo: 'Certifique-se de que o valor na lista de regras esteja entre 1 e 100000', + + containerConn: 'Conexão do contêiner', + connAddress: 'Endereço', + connPort: 'Porta', + containerConnHelper: + 'Este endereço de conexão pode ser utilizado por aplicações que estão em execução nos ambientes do site (PHP, etc.) ou no contêiner.', + remoteConn: 'Conexão externa', + remoteConnHelper2: + 'Este endereço de conexão pode ser utilizado por aplicações que estão fora do contêiner ou por aplicações externas.', + localIP: 'IP local', + + }, + container: { + create: 'Criar contêiner', + edit: 'Editar contêiner', + updateHelper1: 'Detectamos que este contêiner vem da loja de aplicativos. Observe os seguintes dois pontos:', + updateHelper2: + '1. As modificações atuais não serão sincronizadas com os aplicativos instalados na loja de aplicativos.', + updateHelper3: + '2. Se você modificar o aplicativo na página de instalados, o conteúdo atualmente editado se tornará inválido.', + updateHelper4: 'Editar o contêiner requer reconstrução, e qualquer dado não persistente será perdido. Deseja continuar?', + containerList: 'Lista de contêineres', + operatorHelper: '{0} será realizado no seguinte contêiner. Deseja continuar?', + operatorAppHelper: + 'A operação "{0}" será realizada no(s) seguinte(s) contêiner(es) e pode afetar os serviços em execução. Deseja continuar?', + start: 'Iniciar', + stop: 'Parar', + restart: 'Reiniciar', + kill: 'Finalizar', + pause: 'Pausar', + unpause: 'Retomar', + rename: 'Renomear', + remove: 'Remover', + removeAll: 'Remover todos', + containerPrune: 'Limpar', + containerPruneHelper1: 'Isso excluirá todos os contêineres que estão no estado parado.', + containerPruneHelper2: + 'Se os contêineres forem da loja de aplicativos, você precisará ir para "Loja de Aplicativos -> Instalados" e clicar no botão "Reconstruir" para reinstalá-los após a limpeza.', + containerPruneHelper3: 'Esta operação não pode ser desfeita. Deseja continuar?', + imagePrune: 'Limpar', + imagePruneSome: 'Limpar sem rótulo', + imagePruneSomeEmpty: 'Não há imagens com a tag "none" para limpar.', + imagePruneSomeHelper: 'Limpar as imagens com a tag "none" que não são usadas por nenhum contêiner.', + imagePruneAll: 'Limpar não utilizadas', + imagePruneAllEmpty: 'Não há imagens não utilizadas para limpar.', + imagePruneAllHelper: 'Limpar as imagens que não são usadas por nenhum contêiner.', + networkPrune: 'Limpar', + networkPruneHelper: 'Isso removerá todas as redes não utilizadas. Deseja continuar?', + volumePrune: 'Limpar', + volumePruneHelper: 'Isso removerá todos os volumes locais não utilizados. Deseja continuar?', + cleanSuccess: 'A operação foi bem-sucedida, o número desta limpeza: {0}!', + cleanSuccessWithSpace: + 'A operação foi bem-sucedida. O número de discos limpos desta vez é {0}. O espaço em disco liberado foi {1}!', + container: 'Contêiner | Contêineres', + unExposedPort: 'O endereço atual de mapeamento de porta é 127.0.0.1, o que não permite o acesso externo.', + upTime: 'Tempo de atividade', + all: 'Todos', + fetch: 'Buscar', + lines: 'Linhas', + linesHelper: 'Por favor, insira o número correto de logs a serem recuperados!', + lastDay: 'Último dia', + last4Hour: 'Últimas 4 horas', + lastHour: 'Última hora', + last10Min: 'Últimos 10 minutos', + cleanLog: 'Limpar log', + downLogHelper1: 'Isso fará o download de todos os logs do contêiner {0}. Deseja continuar?', + downLogHelper2: 'Isso fará o download dos últimos {0} logs do contêiner {0}. Deseja continuar?', + cleanLogHelper: 'Isso exigirá a reinicialização do contêiner e não poderá ser desfeito. Deseja continuar?', + newName: 'Novo nome', + source: 'Uso de recursos', + cpuUsage: 'Uso de CPU', + cpuTotal: 'CPU total', + core: 'Núcleo', + memUsage: 'Uso de memória', + memTotal: 'Limite de memória', + memCache: 'Cache de memória', + ip: 'Endereço IP', + cpuShare: 'Atribuição de CPU', + cpuShareHelper: + 'O mecanismo de contêiner usa um valor base de 1024 para a atribuição de CPU. Você pode aumentá-lo para dar mais tempo de CPU ao contêiner.', + inputIpv4: 'Exemplo: 192.168.1.1', + inputIpv6: 'Exemplo: 2001:0db8:85a3:0000:0000:8a2e:0370:7334', + + containerFromAppHelper: + 'Detectamos que este contêiner vem da loja de aplicativos. As operações no aplicativo podem fazer com que as edições atuais sejam invalidadas.', + containerFromAppHelper1: + 'Clique no botão [Param] na lista de aplicativos instalados para acessar a página de edição e modificar o nome do contêiner.', + command: 'Comando', + console: 'Interação com o contêiner', + tty: 'Atribuir pseudo-TTY (-t)', + openStdin: 'Manter STDIN aberto mesmo que não esteja anexado (-i)', + custom: 'Personalizado', + emptyUser: 'Se estiver vazio, você fará login com o padrão', + containerTerminal: 'Terminal', + privileged: 'Privilegiado', + privilegedHelper: + 'Permite que o contêiner execute determinadas operações privilegiadas no host, o que pode aumentar os riscos do contêiner. Use com cautela!', + editComposeHelper: + 'Nota: As variáveis de ambiente definidas serão gravadas no arquivo 1panel.env por padrão.\nSe você quiser usar esses parâmetros no contêiner, também precisará adicionar manualmente uma referência env_file no arquivo compose.', + upgradeHelper: 'Nome do Repositório/Nome da Imagem: Versão da Imagem', + upgradeWarning2: + 'A operação de upgrade requer a reconstrução do contêiner, e qualquer dado não persistente será perdido. Deseja continuar?', + oldImage: 'Imagem atual', + targetImage: 'Imagem alvo', + imageLoadErr: 'Nenhum nome de imagem detectado para o contêiner', + appHelper: 'O contêiner vem da loja de aplicativos, e o upgrade pode tornar o serviço indisponível.', + input: 'Entrada manual', + forcePull: 'Sempre puxar imagem', + forcePullHelper: 'Isso ignorará as imagens existentes no servidor e puxará a imagem mais recente do repositório.', + server: 'Host', + serverExample: '80, 80-88, ip:80 ou ip:80-88', + containerExample: '80 ou 80-88', + exposePort: 'Expor porta', + exposeAll: 'Expor todas', + cmdHelper: 'Exemplo: nginx -g "daemon off;"', + entrypointHelper: 'Exemplo: docker-entrypoint.sh', + autoRemove: 'Remover automaticamente', + cpuQuota: 'Número de núcleos de CPU', + memoryLimit: 'Memória', + limitHelper: 'Se definido como 0, significa que não há limitação. O valor máximo é {0}', + mount: 'Montagem', + volumeOption: 'Volume', + hostOption: 'Host', + serverPath: 'Caminho do servidor', + containerDir: 'Caminho do contêiner', + volumeHelper: 'Certifique-se de que o conteúdo do volume de armazenamento está correto', + modeRW: 'RW', + modeR: 'R', + mode: 'Modo', + env: 'Ambientes', + restartPolicy: 'Política de reinício', + always: 'sempre', + unlessStopped: 'a menos que parado', + onFailure: 'em falha (cinco vezes por padrão)', + no: 'nunca', + monitor: 'Monitorar', + refreshTime: 'Intervalo de atualização', + cache: 'Cache', + image: 'Imagem | Imagens', + imagePull: 'Puxar', + imagePush: 'Enviar', + imageDelete: 'Excluir imagem', + imageDeleteTag: 'Excluir tag de imagem', + imageTagDeleteHelper: 'Remover outras tags associadas a este ID de imagem', + repoName: 'Registro de contêiner', + imageName: 'Nome da imagem', + pull: 'Puxar', + path: 'Caminho', + importImage: 'Importar', + build: 'Construir', + imageBuild: 'Construção de imagem', + pathSelect: 'Caminho', + label: 'Etiqueta', + imageTag: 'Tag de imagem', + push: 'Enviar', + fileName: 'Nome do arquivo', + export: 'Exportar', + exportImage: 'Exportar imagem', + version: 'Versão', + size: 'Tamanho', + from: 'De', + tag: 'Tags', + tagHelper: 'Uma por linha. Por exemplo,\nchave1=valor1\nchave2=valor2', + imageNameHelper: 'Nome da imagem e tag, por exemplo: nginx:latest', + cleanBuildCache: 'Limpar cache de construção', + delBuildCacheHelper: + 'Isso excluirá todos os artefatos em cache gerados durante as construções e não poderá ser desfeito. Deseja continuar?', + urlWarning: 'O prefixo da URL não precisa incluir http:// ou https://. Por favor, modifique.', + + network: 'Rede | Redes', + networkHelper: 'Isso pode fazer com que alguns aplicativos e ambientes de execução não funcionem corretamente. Deseja continuar?', + createNetwork: 'Criar', + networkName: 'Nome', + driver: 'Driver', + option: 'Opção', + attachable: 'Anexável', + subnet: 'Sub-rede', + scope: 'Escopo IP', + gateway: 'Gateway', + auxAddress: 'Excluir IP', + + volume: 'Volume | Volumes', + volumeDir: 'Diretório do volume', + nfsEnable: 'Habilitar armazenamento NFS', + nfsAddress: 'Endereço', + mountpoint: 'Ponto de montagem', + mountpointNFSHelper: 'Exemplo: /nfs, /nfs-share', + options: 'Opções', + createVolume: 'Criar', + + repo: 'Registries', + createRepo: 'Adicionar', + httpRepo: 'Escolher o protocolo HTTP requer reiniciar o serviço Docker para adicioná-lo a registries inseguros.', + delInsecure: 'Remover da lista de segurança', + delInsecureHelper: 'Isso reiniciará o serviço Docker para removê-lo dos registries inseguros. Deseja continuar?', + downloadUrl: 'Servidor', + imageRepo: 'Repositório de imagens', + repoHelper: 'Inclui repositório espelho/organização/projeto?', + auth: 'Exigir autenticação', + mirrorHelper: 'Se houver múltiplos espelhos, devem ser exibidos em novas linhas, por exemplo:\nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com', + registrieHelper: 'Se houver múltiplos repositórios privados, eles devem ser exibidos em novas linhas, por exemplo:\n172.16.10.111:8081 \n172.16.10.112:8081', + + compose: 'Compose | Composições', + fromChangeHelper: 'Trocar a origem limpará o conteúdo editado atual. Deseja continuar?', + composePathHelper: 'Caminho de salvamento do arquivo de configuração: {0}', + composeHelper: 'A composição criada através do editor ou template do 1Panel será salva no diretório {0}/docker/compose.', + deleteFile: 'Excluir arquivo', + allDelete: 'Excluir permanentemente', + deleteComposeHelper: 'Excluir todos os arquivos relacionados à composição do container, incluindo arquivos de configuração e arquivos persistentes. Prossiga com cautela!', + deleteCompose: 'Excluir esta composição.', + apps: 'Loja de Aplicativos', + local: 'Local', + createCompose: 'Criar', + composeDirectory: 'Diretório', + template: 'Template', + composeTemplate: 'Template de composição | Templates de composição', + createComposeTemplate: 'Criar', + description: 'Descrição', + content: 'Conteúdo', + contentEmpty: 'O conteúdo da composição não pode estar vazio, por favor, insira algo e tente novamente!', + containerNumber: 'Número de containers', + containerStatus: 'Status do container', + exited: 'Finalizado', + running: 'Em execução', + down: 'Parado', + up: 'Ativo', + composeDetailHelper: 'A composição foi criada externamente ao 1Panel. As operações de iniciar e parar não são suportadas.', + composeOperatorHelper: 'A operação {1} será realizada no {0}. Deseja continuar?', + composeDownHelper: 'Isso irá parar e remover todos os containers e redes sob a composição {0}. Deseja continuar?', + + setting: 'Configuração | Configurações', + operatorStatusHelper: 'Isso irá "{0}" o serviço Docker. Deseja continuar?', + dockerStatus: 'Serviço Docker', + daemonJsonPathHelper: 'Certifique-se de que o caminho de configuração seja o mesmo especificado no docker.service.', + mirrors: 'Espelhos de registro', + mirrorsHelper: '', + mirrorsHelper2: 'Para mais detalhes, consulte a documentação oficial.', + registries: 'Registries inseguros', + ipv6Helper: 'Ao habilitar o IPv6, é necessário adicionar uma rede de containers IPv6. Consulte a documentação oficial para etapas específicas de configuração.', + ipv6CidrHelper: 'Faixa de endereços IPv6 para containers', + ipv6TablesHelper: 'Configuração automática do Docker IPv6 para regras do iptables.', + experimentalHelper: 'Habilitar ip6tables requer que esta configuração esteja ativada; caso contrário, ip6tables será ignorado', + cutLog: 'Opção de log', + cutLogHelper1: 'A configuração atual afetará apenas containers recém-criados.', + cutLogHelper2: 'Containers existentes precisam ser recriados para que a configuração tenha efeito.', + cutLogHelper3: 'Observe que recriar containers pode resultar em perda de dados. Se seus containers contiverem dados importantes, faça backup antes de realizar a operação de reconstrução.', + maxSize: 'Tamanho máximo', + maxFile: 'Arquivo máximo', + liveHelper: 'Por padrão, quando o daemon Docker termina, ele desliga os containers em execução. Você pode configurar o daemon para que os containers permaneçam em execução se o daemon ficar indisponível. Essa funcionalidade é chamada de "restauração ao vivo". A opção de restauração ao vivo ajuda a reduzir o tempo de inatividade dos containers devido a falhas do daemon, interrupções planejadas ou atualizações.', + liveWithSwarmHelper: 'A configuração de restauração ao vivo é incompatível com o modo swarm.', + iptablesDisable: 'Desabilitar iptables', + iptablesHelper1: 'Configuração automática das regras do iptables para Docker.', + iptablesHelper2: 'Desabilitar iptables fará com que os containers não consigam se comunicar com redes externas.', + daemonJsonPath: 'Caminho de configuração', + serviceUnavailable: 'O serviço Docker não foi iniciado no momento.', + startIn: 'para iniciar', + sockPath: 'Caminho do socket Unix', + sockPathHelper: 'Canal de comunicação entre o daemon Docker e o cliente.', + sockPathHelper1: 'Caminho padrão: /var/run/docker-x.sock', + sockPathMsg: 'Salvar a configuração do Caminho do Socket pode tornar o serviço Docker indisponível. Deseja continuar?', + sockPathErr: 'Por favor, selecione ou insira o caminho correto do arquivo do Docker sock', + related: 'Relacionado', + includeAppstore: 'Exibir containers da loja de aplicativos', + + cleanDockerDiskZone: 'Limpar o espaço em disco usado pelo Docker', + cleanImagesHelper: '(Limpar todas as imagens que não são usadas por nenhum container)', + cleanContainersHelper: '(Limpar todos os containers parados)', + cleanVolumesHelper: '(Limpar todos os volumes locais não usados)', + + makeImage: 'Criar imagem', + newImageName: 'Novo nome da imagem', + commitMessage: 'Mensagem de commit', + author: 'Autor', + ifPause: 'Pausar container durante a criação', + ifMakeImageWithContainer: 'Criar nova imagem a partir deste container?', + }, + cronjob: { + create: 'Criar tarefa cron', + edit: 'Editar tarefa cron', + cronTask: 'Tarefa Cron | Tarefas Cron', + changeStatus: 'Alterar status', + disableMsg: 'Isso irá parar a execução automática da tarefa agendada. Você deseja continuar?', + enableMsg: 'Isso permitirá que a tarefa agendada seja executada automaticamente. Você deseja continuar?', + taskType: 'Tipo', + record: 'Registros', + viewRecords: 'Visualizar registros', + shell: 'Shell', + log: 'Logs de backup', + logHelper: 'Backup do log do sistema', + ogHelper1: '1. Log do sistema 1Panel', + logHelper2: '2. Log de login SSH do servidor', + logHelper3: '3. Todos os logs do site', + containerCheckBox: 'No container (não é necessário inserir o comando do container)', + containerName: 'Nome do container', + ntp: 'Sincronização de tempo', + ntp_helper: 'Você pode configurar o servidor NTP na página de Configuração Rápida da Caixa de Ferramentas.', + app: 'Backup de app', + website: 'Backup de site', + rulesHelper: 'Quando houver múltiplas regras de exclusão de compressão, elas devem ser exibidas com quebras de linha. Por exemplo,\n*.log\n*.sql', + lastRecordTime: 'Última execução', + all: 'Todos', + failedRecord: 'Registros de falha', + successRecord: 'Registros de sucesso', + database: 'Backup de banco de dados', + missBackupAccount: 'A conta de backup não foi encontrada', + syncDate: 'Data de sincronização', + clean: 'Limpeza de cache', + curl: 'URL de acesso', + taskName: 'Nome', + cronSpec: 'Ciclo de execução', + cronSpecHelper: 'Digite o período correto de execução', + cleanHelper: 'Esta operação registra todos os registros de execução de tarefas, arquivos de backup e logs. Você deseja continuar?', + directory: 'Diretório de backup', + sourceDir: 'Diretório de backup', + snapshot: 'Snapshot do sistema', + allOptionHelper: 'O plano de tarefa atual é fazer backup de todos os [{0}]. O download direto não é suportado no momento. Você pode verificar a lista de backups no menu [{0}].', + exclusionRules: 'Regras de exclusão', + exclusionRulesHelper: 'As regras de exclusão se aplicam a todas as operações de compressão deste backup.', + default_download_path: 'Link de download padrão', + saveLocal: 'Manter backups locais (o mesmo número de cópias na nuvem)', + url: 'Endereço URL', + targetHelper: 'As contas de backup são mantidas nas configurações do painel.', + retainCopies: 'Manter cópias', + retainCopiesHelper: 'Número de cópias a serem mantidas para registros de execução e logs', + retainCopiesHelper1: 'Número de cópias a serem mantidas para arquivos de backup', + retainCopiesUnit: ' cópias (Visualizar)', + cronSpecRule: 'O formato do período de execução na linha {0} está incorreto. Verifique e tente novamente!', + perMonth: 'Todo mês', + perWeek: 'Toda semana', + perHour: 'Toda hora', + perNDay: 'A cada N dia(s)', + perDay: 'Todo dia', + perNHour: 'A cada N hora(s)', + perNMinute: 'A cada N minuto(s)', + perNSecond: 'A cada N segundo(s)', + per: 'A cada ', + handle: '', + day: 'dia(s)', + dayUnit: 'd', + monday: 'Segunda-feira', + tuesday: 'Terça-feira', + wednesday: 'Quarta-feira', + thursday: 'Quinta-feira', + friday: 'Sexta-feira', + saturday: 'Sábado', + sunday: 'Domingo', + shellContent: 'Script', + errRecord: 'Registro incorreto', + errHandle: 'Falha na execução do Cronjob', + noRecord: 'Acione a tarefa Cron e você verá os registros aqui.', + cleanData: 'Limpar dados', + cleanDataHelper: 'Excluir o arquivo de backup gerado durante esta tarefa.', + noLogs: 'Ainda não há saída de tarefa...', + errPath: 'Caminho de backup [{0}] com erro, não é possível fazer o download!', + cutWebsiteLog: 'Rotação de log do site', + cutWebsiteLogHelper: 'Os arquivos de log rotacionados serão salvos no diretório de backup do 1Panel.', + + requestExpirationTime: 'Tempo de expiração da solicitação de upload (Horas)', + unitHours: 'Unidade: Horas', + alertTitle: 'Tarefa Planejada - {0} 「{1}」 Alerta de Falha na Tarefa', + }, + monitor: { + monitor: 'Monitoramento', + globalFilter: 'Filtro global', + enableMonitor: 'Ativar', + storeDays: 'Dias de expiração', + cleanMonitor: 'Limpar registros de monitoramento', + + avgLoad: 'Média de carga', + loadDetail: 'Detalhes da carga', + resourceUsage: 'Utilização', + networkCard: 'Interface de rede', + read: 'Leitura', + write: 'Gravação', + readWriteCount: 'Operações de I/O', + readWriteTime: 'Latência de I/O', + today: 'Hoje', + yesterday: 'Ontem', + lastNDay: 'Últimos {0} dia(s)', + memory: 'Memória', + cache: 'Cache', + disk: 'Disco', + network: 'Rede', + up: 'Para cima', + down: 'Para baixo', + interval: 'Intervalo (minuto)', + + gpuUtil: 'Utilização da GPU', + temperature: 'Temperatura', + performanceState: 'Estado de desempenho', + powerUsage: 'Uso de energia', + memoryUsage: 'Uso de memória', + fanSpeed: 'Velocidade do ventilador', + }, + terminal: { + conn: 'Conexão', + connLocalErr: 'Não foi possível autenticar automaticamente, por favor, preencha as informações de login do servidor local.', + testConn: 'Testar conexão', + saveAndConn: 'Salvar e conectar', + connTestOk: 'Informações de conexão disponíveis', + connTestFailed: 'Conexão indisponível, por favor, verifique as informações de conexão.', + host: 'Host | Hosts', + createConn: 'Nova conexão', + group: 'Grupo', + manageGroup: 'Gerenciar grupos', + noHost: 'Nenhum host', + groupChange: 'Alterar grupo', + expand: 'Expandir todos', + fold: 'Contrair tudo', + batchInput: 'Processamento em lote', + quickCommand: 'Comando rápido | Comandos rápidos', + quickCommandHelper: 'Você pode usar os comandos rápidos na parte inferior de "Terminais -> Terminais".', + groupDeleteHelper: + 'Após o grupo ser removido, todas as conexões no grupo serão migradas para o grupo padrão. Você deseja continuar?', + command: 'Comando', + quickCmd: 'Comando rápido', + addHost: 'Adicionar', + localhost: 'Localhost', + ip: 'Endereço', + authMode: 'Autenticação', + passwordMode: 'Senha', + rememberPassword: 'Lembrar informações de autenticação', + keyMode: 'Chave privada', + key: 'Chave privada', + keyPassword: 'Senha da chave privada', + emptyTerminal: 'Nenhum terminal está conectado no momento.', + + }, + toolbox: { + swap: { + swap: 'Partição Swap', + swapHelper1: + 'O tamanho do swap deve ser de 1 a 2 vezes a memória física, ajustável conforme os requisitos específicos;', + swapHelper2: + 'Antes de criar um arquivo swap, verifique se o disco do sistema tem espaço disponível suficiente, pois o tamanho do arquivo swap ocupará o espaço correspondente no disco;', + swapHelper3: + 'Swap pode ajudar a aliviar a pressão de memória, mas é apenas uma alternativa. A dependência excessiva de swap pode levar a uma diminuição no desempenho do sistema. É recomendável priorizar o aumento de memória ou otimizar o uso de memória do aplicativo;', + swapHelper4: 'É aconselhável monitorar regularmente o uso de swap para garantir o funcionamento normal do sistema.', + swapDeleteHelper: + 'Esta operação removerá a partição Swap {0}. Por motivos de segurança do sistema, o arquivo correspondente não será excluído automaticamente. Se a exclusão for necessária, por favor, faça manualmente!', + saveHelper: 'Por favor, salve as configurações atuais primeiro!', + saveSwap: + 'Salvar a configuração atual ajustará o tamanho da partição Swap {0} para {1}. Você deseja continuar?', + swapMin: 'O tamanho mínimo da partição é 40 KB. Por favor, modifique e tente novamente!', + swapMax: 'O valor máximo para o tamanho da partição é {0}. Por favor, modifique e tente novamente!', + swapOff: 'O tamanho mínimo da partição é 40 KB. Definir como 0 desabilitará a partição Swap.', + } + }, + device: { + dnsHelper: 'Servidor DNS', + dnsAlert: + 'Atenção! Modificar a configuração do arquivo /etc/resolv.conf restaurará o arquivo para seus valores padrão após a reinicialização do sistema.', + dnsHelper1: + 'Quando houver várias entradas DNS, elas devem ser exibidas em novas linhas. Exemplo:\n114.114.114.114\n8.8.8.8', + hostsHelper: 'Resolução de hostname', + hosts: 'Domínio', + hostAlert: 'Registros comentados ocultos, clique no botão "Todas as configurações" para visualizar ou configurar', + toolbox: 'Configurações rápidas', + hostname: 'Nome do host', + passwd: 'Senha do sistema', + passwdHelper: 'Os caracteres de entrada não podem incluir $ e &', + timeZone: 'Fuso horário', + localTime: 'Hora do servidor', + timeZoneChangeHelper: 'Modificar o fuso horário do sistema requer a reinicialização do serviço. Deseja continuar?', + timeZoneHelper: `Se você não instalar o comando "timedatectl", poderá não conseguir alterar o fuso horário. O sistema usa esse comando para alterar o fuso horário.`, + timeZoneCN: 'Pequim', + timeZoneAM: 'Los Angeles', + timeZoneNY: 'Nova York', + ntpALi: 'Alibaba', + ntpGoogle: 'Google', + syncSite: 'Servidor NTP', + hostnameHelper: `A modificação do nome do host depende do comando "hostnamectl". Se o comando não estiver instalado, a modificação pode falhar.`, + userHelper: `O nome de usuário depende do comando "whoami" para recuperação. Se o comando não estiver instalado, a recuperação pode falhar.`, + passwordHelper: `A modificação da senha depende do comando "chpasswd". Se o comando não estiver instalado, a modificação pode falhar.`, + hostHelper: + 'Há um valor vazio no conteúdo fornecido. Verifique e tente novamente após a modificação!', + dnsCheck: 'Testar disponibilidade', + dnsOK: 'As informações de configuração do DNS estão disponíveis!', + dnsTestFailed: `As informações de configuração do DNS não estão disponíveis.`, + }, + fail2ban: { + sshPort: 'Porta de escuta do SSH', + sshPortHelper: 'O Fail2ban atual escuta a porta de conexão SSH do host', + noFail2ban: `O serviço Fail2ban não foi detectado. Consulte a documentação oficial para instalá-lo.`, + unActive: `O serviço Fail2ban não está ativado no momento.`, + operation: 'Você realizará a operação "{0}" no serviço Fail2ban. Deseja continuar?', + fail2banChange: 'Modificação da configuração do Fail2ban', + ignoreHelper: 'A lista de IPs na lista de permissão será ignorada para bloqueio. Deseja continuar?', + bannedHelper: 'A lista de IPs na lista de bloqueio será bloqueada pelo servidor. Deseja continuar?', + maxRetry: 'Máximo de tentativas de reclusão', + banTime: 'Tempo de banimento', + banTimeHelper: 'O tempo de banimento padrão é 10 minutos, -1 indica banimento permanente', + banTimeRule: 'Por favor, insira um tempo de banimento válido ou -1', + banAllTime: 'Banimento permanente', + findTime: 'Período de descoberta', + banAction: 'Ação de bloqueio', + banActionOption: 'Bloquear endereços IP especificados usando {0}', + allPorts: ' (Todas as portas)', + ignoreIP: 'Lista de permissão de IP', + bannedIP: 'Lista de bloqueio de IP', + logPath: 'Caminho do log', + logPathHelper: 'O padrão é /var/log/secure ou /var/log/auth.log', + }, + ftp: { + ftp: 'Conta FTP | Contas FTP', + noFtp: `O serviço FTP (pure-ftpd) não foi detectado. Consulte a documentação oficial para instalá-lo.`, + operation: 'Isso realizará a operação "{0}" no serviço FTP. Deseja continuar?', + noPasswdMsg: 'Não foi possível obter a senha atual da conta FTP, por favor, defina a senha e tente novamente!', + enableHelper: 'Ativar a conta FTP selecionada restaurará suas permissões de acesso. Deseja continuar?', + disableHelper: 'Desativar a conta FTP selecionada revogará suas permissões de acesso. Deseja continuar?', + syncHelper: 'Sincronizar os dados da conta FTP entre o servidor e o banco de dados. Deseja continuar?', + }, + clam: { + clam: 'Scan de vírus', + cron: 'Scan agendado', + cronHelper: 'A versão profissional suporta a funcionalidade de scan agendado', + specErr: 'Erro no formato do agendamento, por favor, verifique e tente novamente!', + disableMsg: 'Parar a execução agendada impedirá que esta tarefa de scan seja executada automaticamente. Deseja continuar?', + enableMsg: 'Ativar a execução agendada permitirá que esta tarefa de scan seja executada automaticamente em intervalos regulares. Deseja continuar?', + showFresh: 'Mostrar serviço de atualização de assinaturas', + hideFresh: 'Ocultar serviço de atualização de assinaturas', + clamHelper: 'A configuração mínima recomendada para o ClamAV é: 3 GiB de RAM ou mais, CPU de 1 núcleo com 2.0 GHz ou superior, e pelo menos 5 GiB de espaço livre no disco rígido.', + noClam: 'Serviço ClamAV não detectado, consulte a documentação oficial para instalação!', + notStart: 'O serviço ClamAV não está em execução, por favor, inicie-o primeiro!', + removeRecord: 'Excluir arquivos de relatório', + noRecords: 'Clique no botão "Acionar" para iniciar o scan e você verá registros aqui.', + removeResultHelper: 'Excluir arquivos de relatório gerados durante a execução da tarefa para liberar espaço de armazenamento.', + removeInfected: 'Excluir arquivos infectados', + removeInfectedHelper: 'Excluir arquivos de vírus detectados durante a tarefa para garantir a segurança e o funcionamento normal do servidor.', + clamCreate: 'Criar regra de scan', + infectedStrategy: 'Estratégia de arquivos infectados', + remove: 'Excluir', + removeHelper: 'Excluir arquivos de vírus, escolha com cuidado!', + move: 'Mover', + moveHelper: 'Mover arquivos de vírus para o diretório especificado', + copy: 'Copiar', + copyHelper: 'Copiar arquivos de vírus para o diretório especificado', + none: 'Não fazer nada', + noneHelper: 'Não tomar nenhuma ação sobre arquivos de vírus', + scanDir: 'Diretório de scan', + infectedDir: 'Diretório de arquivos infectados', + scanDate: 'Data do scan', + scanResult: 'Últimos logs de scan', + tail: 'Linhas', + scanTime: 'Tempo gasto', + infectedFiles: 'Arquivos infectados', + log: 'Detalhes', + clamConf: 'Daemon Clam AV', + clamLog: '@:toolbox.clam.clamConf logs', + freshClam: 'FreshClam', + freshClamLog: '@:toolbox.clam.freshClam logs', + alertHelper: 'A versão profissional suporta scan agendado e alerta por SMS', + alertTitle: 'Tarefa de scan de vírus 「{0}」 detectou alerta de arquivo infectado', + }, + logs: { + panelLog: 'Logs do painel', + operation: 'Logs de operação', + login: 'Logs de login', + loginIP: 'IP de login', + loginAddress: 'Endereço de login', + loginAgent: 'Agente de login', + loginStatus: 'Status', + system: 'Logs do sistema', + deleteLogs: 'Limpar logs', + resource: 'Recurso', + operate: 'Operar', + detail: { + groups: 'Grupo', + hosts: 'Host', + apps: 'Aplicativo', + websites: 'Website', + containers: 'Container', + files: 'Gerenciamento de arquivos', + runtimes: 'Ambiente de execução', + process: 'Processo', + toolbox: 'Caixa de ferramentas', + logs: 'Logs do painel', + settings: 'Configurações do painel', + cronjobs: 'Tarefas agendadas', + databases: 'Banco de dados', + } + , + websiteLog: 'Logs do website', + runLog: 'Logs de execução', + errLog: 'Logs de erro', + }, + file: { + dir: 'Pasta', + upload: 'Carregar', + uploadFile: '@:file.upload @.lower:file.file', + uploadDirectory: '@:file.upload @.lower:file.dir', + download: 'Baixar', + fileName: 'Nome do arquivo', + search: 'Pesquisar', + mode: 'Permissões', + editPermissions: '@:file.mode', + owner: 'Proprietário', + file: 'Arquivo', + remoteFile: 'Baixar de remoto', + share: 'Compartilhar', + sync: 'Sincronização de dados', + size: 'Tamanho', + updateTime: 'Modificado', + open: 'Abrir', + rename: 'Renomear', + role: 'Permissões', + info: 'Atributos', + linkFile: 'Link simbólico', + terminal: 'Terminal', + batchoperation: 'Operação em lote', + shareList: 'Lista de compartilhamento', + zip: 'Compactado', + group: 'Grupo', + path: 'Caminho', + public: 'Outros', + setRole: 'Configurar permissões', + link: 'Link do arquivo', + rRole: 'Leitura', + wRole: 'Escrita', + xRole: 'Executável', + name: 'Nome', + compress: 'Compactar', + deCompress: 'Descompactar', + compressType: 'Formato de compactação', + compressDst: 'Caminho de compactação', + replace: 'Substituir arquivos existentes', + compressSuccess: 'Compactado com sucesso', + deCompressSuccess: 'Descompactado com sucesso', + deCompressDst: 'Caminho de descompactação', + linkType: 'Tipo de link', + softLink: 'Link simbólico', + hardLink: 'Link físico', + linkPath: 'Caminho do link', + selectFile: 'Selecionar arquivo', + downloadUrl: 'URL remota', + downloadStart: 'Download iniciado', + moveSuccess: 'Movido com sucesso', + copySuccess: 'Copiado com sucesso', + move: 'Mover', + copy: 'Copiar', + calculate: 'Calcular', + canNotDeCompress: 'Não é possível descompactar este arquivo', + uploadSuccess: 'Upload bem-sucedido', + downloadProcess: 'Progresso do download', + downloading: 'Baixando...', + infoDetail: 'Propriedades do arquivo', + root: 'Diretório raiz', + list: 'Lista de arquivos', + sub: 'Subpastas', + downloadSuccess: 'Baixado com sucesso', + theme: 'Tema', + language: 'Idioma', + eol: 'Fim de linha', + copyDir: 'Copiar', + paste: 'Colar', + cancel: 'Cancelar', + changeOwner: 'Modificar usuário e grupo de usuários', + containSub: 'Aplicar mudança de permissões recursivamente', + ownerHelper: 'O usuário padrão do ambiente PHP: o grupo de usuários é 1000:1000, é normal que os usuários dentro e fora do container mostrem inconsistências', + searchHelper: 'Suporte a curingas como *', + uploadFailed: '[{0}] Falha no upload do arquivo', + fileUploadStart: 'Carregando [{0}]....', + currentSelect: 'Selecionado atualmente: ', + unsupportedType: 'Tipo de arquivo não suportado', + deleteHelper: 'Tem certeza de que deseja excluir os seguintes arquivos? Por padrão, eles irão para a lixeira após a exclusão', + fileHeper: `Nota:\n1. Os resultados da pesquisa não podem ser ordenados.\n2. Pastas não podem ser ordenadas por tamanho.`, + forceDeleteHelper: 'Excluir permanentemente o arquivo (sem entrar na lixeira, excluí-lo diretamente)', + recycleBin: 'Lixeira', + sourcePath: 'Caminho original', + deleteTime: 'Hora da exclusão', + confirmReduce: 'Tem certeza de que deseja restaurar os seguintes arquivos?', + reduceSuccess: 'Restaurado com sucesso', + reduce: 'Restaurar', + reduceHelper: 'Se um arquivo ou diretório com o mesmo nome existir no caminho original, ele será substituído. Deseja continuar?', + clearRecycleBin: 'Limpar', + clearRecycleBinHelper: 'Você deseja limpar a lixeira?', + favorite: 'Favoritos', + removeFavorite: 'Remover dos favoritos?', + addFavorite: 'Adicionar aos favoritos', + clearList: 'Limpar lista', + deleteRecycleHelper: 'Tem certeza de que deseja excluir permanentemente os seguintes arquivos?', + typeErrOrEmpty: '[{0}] tipo de arquivo errado ou pasta vazia', + dropHelper: 'Arraste os arquivos que deseja carregar aqui', + fileRecycleBin: 'Habilitar lixeira', + fileRecycleBinMsg: '{0} lixeira', + wordWrap: 'Quebra automática de linha', + deleteHelper2: 'Tem certeza de que deseja excluir o arquivo selecionado? A operação de exclusão não pode ser desfeita', + ignoreCertificate: 'Permitir conexões inseguras com o servidor', + ignoreCertificateHelper: 'Permitir conexões inseguras com o servidor pode levar a vazamento ou adulteração de dados. Use esta opção apenas quando confiar na fonte de download.', + uploadOverLimit: 'O número de arquivos excede 1000! Por favor, compacte e envie novamente', + clashDitNotSupport: 'Os nomes de arquivos são proibidos de conter .1panel_clash', + clashDeleteAlert: 'A pasta "Lixeira" não pode ser excluída', + clashOpenAlert: 'Clique no botão "Lixeira" para abrir o diretório da lixeira', + right: 'Avançar', + back: 'Voltar', + top: 'Voltar ao topo', + refresh: 'Atualizar', + up: 'Voltar', + openWithVscode: 'Abrir com VS Code', + vscodeHelper: 'Por favor, certifique-se de que o VS Code está instalado localmente e o plugin SSH Remote está configurado', + saveContentAndClose: 'O arquivo foi modificado, deseja salvar e fechar?', + saveAndOpenNewFile: 'O arquivo foi modificado, deseja salvar e abrir o novo arquivo?', + noEdit: 'O arquivo não foi modificado, não é necessário fazer isso!', + noNameFolder: 'Pasta sem nome', + noNameFile: 'Arquivo sem nome', + minimap: 'Mini mapa de código', + fileCanNotRead: 'O arquivo não pode ser lido', + panelInstallDir: 'O diretório de instalação do 1Panel não pode ser excluído', + } + , + ssh: { + autoStart: 'Início automático', + enable: 'Habilitar início automático', + disable: 'Desabilitar início automático', + sshAlert: 'Os dados da lista são classificados com base na data de login. Alterar o fuso horário ou realizar outras operações pode causar desvios na data dos logs de login.', + sshAlert2: 'Você pode usar o "Fail2ban" na "Caixa de ferramentas" para bloquear endereços IP que tentam ataques de força bruta, o que aumentará a segurança do host.', + sshOperate: 'A operação "{0}" no serviço SSH será realizada. Você deseja continuar?', + sshChange: 'Configuração SSH', + sshChangeHelper: 'Esta ação alterou "{0}" para "{1}". Você deseja continuar?', + sshFileChangeHelper: 'Modificar o arquivo de configuração pode afetar a disponibilidade do serviço. Tenha cautela ao realizar esta operação. Você deseja continuar?', + port: 'Porta', + portHelper: 'Especifique a porta na qual o serviço SSH escutará.', + listenAddress: 'Endereço de escuta', + allV4V6: '0.0.0.0:{0}(IPv4) e :::{0}(IPv6)', + listenHelper: 'Deixar os campos de IPv4 e IPv6 em branco fará com que o serviço escute em "0.0.0.0:{0}(IPv4)" e ":::{0}(IPv6)"', + addressHelper: 'Especifique o endereço em que o serviço SSH irá escutar.', + permitRootLogin: 'Permitir login de usuário root', + rootSettingHelper: 'O método de login padrão para o usuário root é "Permitir login SSH".', + rootHelper1: 'Permitir login SSH', + rootHelper2: 'Desabilitar login SSH', + rootHelper3: 'Somente login com chave é permitido', + rootHelper4: 'Somente comandos pré-definidos podem ser executados. Nenhuma outra operação pode ser realizada.', + passwordAuthentication: 'Autenticação por senha', + pwdAuthHelper: 'Se deve ou não habilitar a autenticação por senha. Esse parâmetro está habilitado por padrão.', + pubkeyAuthentication: 'Autenticação por chave', + key: 'Chave', + password: 'Senha', + pubkey: 'Informações da chave', + encryptionMode: 'Modo de criptografia', + passwordHelper: 'Pode conter de 6 a 10 dígitos e letras maiúsculas e minúsculas', + generate: 'Gerar chave', + reGenerate: 'Regenerar chave', + keyAuthHelper: 'Se deve ou não habilitar a autenticação por chave.', + useDNS: 'Usar DNS', + dnsHelper: 'Controla se a função de resolução DNS está habilitada no servidor SSH para verificar a identidade da conexão.', + analysis: 'Informações estatísticas', + denyHelper: "Realizando uma operação de 'negar' nos seguintes endereços. Após a configuração, o IP será proibido de acessar o servidor. Você deseja continuar?", + acceptHelper: "Realizando uma operação de 'aceitar' nos seguintes endereços. Após a configuração, o IP recuperará o acesso normal. Você deseja continuar?", + noAddrWarning: 'Nenhum endereço [{0}] foi selecionado atualmente. Por favor, verifique e tente novamente!', + successful: 'Sucesso', + failed: 'Falhou', + loginLogs: 'Logs de login', + loginMode: 'Modo', + authenticating: 'Chave', + publickey: 'Chave', + belong: 'Pertence', + local: 'Local', + config: 'Configuração', + session: 'Sessão | Sessões', + loginTime: 'Hora do login', + loginIP: 'IP de login', + disconnect: 'Desconectar', + stopSSHWarn: 'Deseja desconectar esta conexão SSH?', + + }, + setting: { + all: 'Tudo', + panel: 'Painel', + user: 'Usuário do painel', + userChange: 'Alterar usuário do painel', + userChangeHelper: 'Alterar o usuário do painel irá desconectá-lo. Continuar?', + passwd: 'Senha do painel', + emailHelper: 'Para recuperação de senha', + title: 'Alias do painel', + panelPort: 'Porta do painel', + titleHelper: + 'Suporta caracteres não especiais no início, inglês, chinês, números, espaços, .- e _, comprimento de 3 a 30', + portHelper: + 'O intervalo recomendado de portas é de 8888 a 65535. Nota: Se o servidor tiver um grupo de segurança, permita a nova porta do grupo de segurança antecipadamente', + portChange: 'Alteração de porta', + portChangeHelper: 'Modificar a porta do serviço e reiniciar o serviço. Deseja continuar?', + theme: 'Tema', + menuTabs: 'Guias do menu', + dark: 'Escuro', + darkGold: 'Ouro escuro', + light: 'Claro', + auto: 'Seguir o sistema', + language: 'Idioma', + languageHelper: + 'Por padrão, segue o idioma do navegador. Este parâmetro tem efeito apenas no navegador atual', + sessionTimeout: 'Tempo limite de sessão', + sessionTimeoutError: 'O tempo mínimo de sessão é de 300 segundos', + sessionTimeoutHelper: + 'O painel será desconectado automaticamente após {0} segundo(s) de inatividade.', + systemIP: 'Endereço do sistema', + proxy: 'Proxy do servidor', + proxyHelper: 'Será eficaz nos seguintes cenários após configurar o servidor proxy:', + proxyHelper1: + 'Download de pacotes de instalação e sincronização da loja de aplicativos (apenas edição profissional)', + proxyHelper2: 'Atualização do sistema e recuperação de informações de atualização (apenas edição profissional)', + proxyHelper4: 'A rede Docker será acessada por meio de um servidor proxy (apenas edição profissional)', + proxyHelper3: 'Verificação e sincronização da licença do sistema', + proxyType: 'Tipo de proxy', + proxyUrl: 'Endereço do proxy', + proxyPort: 'Porta do proxy', + proxyPasswdKeep: 'Lembrar senha', + proxyDocker: 'Proxy Docker', + proxyDockerHelper: + 'Sincronize a configuração do servidor proxy com o Docker, suportando operações de puxar imagens de servidor offline e outras', + apiInterface: 'Habilitar API', + apiInterfaceClose: 'Uma vez fechado, as interfaces da API não poderão ser acessadas. Deseja continuar?', + apiInterfaceHelper: 'Permitir que aplicativos de terceiros acessem a API.', + apiInterfaceAlert1: 'Não habilite em ambientes de produção, pois pode aumentar os riscos de segurança do servidor.', + apiInterfaceAlert2: 'Não use aplicativos de terceiros para chamar a API, para evitar potenciais ameaças à segurança.', + apiInterfaceAlert3: 'Documentação da API', + apiInterfaceAlert4: 'Documentação de uso', + apiKey: 'Chave API', + apiKeyHelper: 'A chave da API é usada para aplicativos de terceiros acessarem a API.', + ipWhiteList: 'Lista de IPs permitidos', + ipWhiteListEgs: 'Um por linha. Exemplo: \n172.161.10.111\n172.161.10.0/24', + ipWhiteListHelper: 'IPs na lista de permitidos podem acessar a API.', + apiKeyReset: 'Redefinir chave da interface', + apiKeyResetHelper: 'O serviço associado à chave se tornará inválido. Por favor, adicione uma nova chave ao serviço', + confDockerProxy: 'Configurar proxy do Docker', + restartNowHelper: 'Configurar o proxy do Docker exige reiniciar o serviço Docker.', + restartNow: 'Reiniciar imediatamente', + systemIPWarning: 'O endereço do servidor ainda não está configurado. Configure-o no painel de controle primeiro.', + systemIPWarning1: 'O endereço atual do servidor está configurado como {0}, e o redirecionamento rápido não é possível!', + defaultNetwork: 'Placa de rede', + syncTime: 'Hora do servidor', + timeZone: 'Fuso horário', + timeZoneChangeHelper: 'Alterar o fuso horário exige reiniciar o serviço. Deseja continuar?', + timeZoneHelper: + 'A modificação de fuso horário depende do serviço timedatectl do sistema. Entrará em vigor após reiniciar o serviço 1Panel.', + timeZoneCN: 'Pequim', + timeZoneAM: 'Los Angeles', + timeZoneNY: 'Nova York', + ntpALi: 'Alibaba', + ntpGoogle: 'Google', + syncSite: 'Servidor NTP', + syncSiteHelper: + 'Esta operação usará {0} como fonte para a sincronização do horário do sistema. Deseja continuar?', + changePassword: 'Alterar senha', + oldPassword: 'Senha original', + newPassword: 'Nova senha', + retryPassword: 'Confirmar senha', + noSpace: 'As informações inseridas não podem conter caracteres de espaço', + duplicatePassword: 'A nova senha não pode ser igual à senha original, por favor, insira novamente!', + diskClean: 'Limpeza de cache', + developerMode: 'Modo de desenvolvimento', + developerModeHelper: + 'Você terá a oportunidade de testar novos recursos e correções antes de serem amplamente lançados e fornecer feedback precoce.', + thirdParty: 'Contas de terceiros', + addBackupAccount: 'Adicionar {0}', + noTypeForCreate: 'Nenhum tipo de backup foi criado até o momento', + LOCAL: 'Disco do servidor', + OSS: 'Ali OSS', + S3: 'Amazon S3', + mode: 'Modo', + MINIO: 'MinIO', + SFTP: 'SFTP', + WebDAV: 'WebDAV', + WebDAVAlist: 'Conectar WebDAV Alist pode referir-se à documentação oficial', + OneDrive: 'Microsoft OneDrive', + isCN: 'Internet da China', + isNotCN: 'Versão internacional', + client_id: 'ID do cliente', + client_secret: 'Segredo do cliente', + redirect_uri: 'URL de redirecionamento', + onedrive_helper: 'A configuração personalizada pode ser referida na documentação oficial', + refreshTime: 'Tempo de atualização do token', + refreshStatus: 'Status da atualização do token', + backupDir: 'Diretório de backup', + codeWarning: 'O formato atual do código de autorização está incorreto, por favor, verifique novamente!', + code: 'Código de autorização', + codeHelper: + 'Clique no botão "Adquirir", faça login no OneDrive e copie o conteúdo após "code" no link redirecionado. Cole-o neste campo. Para instruções específicas, consulte a documentação oficial.', + loadCode: 'Obter', + COS: 'Tencent COS', + ap_beijing_1: 'Beijing Zona 1', + ap_beijing: 'Pequim', + ap_nanjing: 'Nanjing', + ap_shanghai: 'Xangai', + ap_guangzhou: 'Cantão', + ap_chengdu: 'Chengdu', + ap_chongqing: 'Chongqing', + ap_shenzhen_fsi: 'Shenzhen Financeiro', + ap_shanghai_fsi: 'Xangai Financeiro', + ap_beijing_fsi: 'Pequim Financeiro', + ap_hongkong: 'Hong Kong, China', + ap_singapore: 'Cingapura', + ap_mumbai: 'Bombaim', + ap_jakarta: 'Jacarta', + ap_seoul: 'Seul', + ap_bangkok: 'Bangkok', + ap_tokyo: 'Tóquio', + na_siliconvalley: 'Silicon Valley (EUA Oeste)', + na_ashburn: 'Ashburn (EUA Leste)', + na_toronto: 'Toronto', + sa_saopaulo: 'São Paulo', + eu_frankfurt: 'Frankfurt', + KODO: 'Qiniu Kodo', + scType: 'Tipo de armazenamento', + typeStandard: 'Padrão', + typeStandard_IA: 'Padrão_IA', + typeArchive: 'Arquivo', + typeDeep_Archive: 'Arquivo Profundo', + scStandard: + 'O armazenamento padrão é adequado para cenários de negócios com grande volume de arquivos quentes que exigem acesso em tempo real, interação frequente de dados, etc.', + scStandard_IA: + 'O armazenamento de baixa frequência é adequado para cenários de negócios com frequência de acesso relativamente baixa, e armazena dados por pelo menos 30 dias.', + scArchive: 'Armazenamento para arquivos é adequado para cenários de negócios com frequência de acesso extremamente baixa.', + scDeep_Archive: 'Armazenamento frio durável é adequado para cenários de negócios com frequência de acesso extremamente baixa.', + archiveHelper: + 'Arquivos de armazenamento arquivado não podem ser baixados diretamente e devem ser restaurados primeiro através do site do provedor de serviços de nuvem correspondente. Use com cautela!', + backupAlert: + 'Se um provedor de nuvem for compatível com o protocolo S3, você pode usar diretamente o Amazon S3 para backup.', + domain: 'Domínio de aceleração', + backupAccount: 'Conta de backup | Contas de backup', + loadBucket: 'Obter bucket', + accountName: 'Nome da conta', + accountKey: 'Chave da conta', + address: 'Endereço', + path: 'Caminho', + + + safe: 'Segurança', + bindInfo: 'Informações de Vinculação', + bindAll: 'Ouvir Todos', + bindInfoHelper: 'Alterar o endereço de escuta ou protocolo do serviço pode resultar em indisponibilidade do serviço. Você deseja continuar?', + ipv6: 'Ouvir IPv6', + bindAddress: 'Endereço de escuta', + entrance: 'Entrada', + showEntrance: 'Mostrar alerta desativado na página "Visão Geral"', + entranceHelper: 'Habilitar a entrada de segurança permitirá o login no painel apenas através do ponto de entrada de segurança especificado.', + entranceError: 'Por favor, insira um ponto de entrada seguro de 5-116 caracteres, somente números ou letras são suportados.', + entranceInputHelper: 'Deixe em branco para desativar a entrada de segurança.', + randomGenerate: 'Aleatório', + expirationTime: 'Data de Expiração', + unSetting: 'Não definido', + noneSetting: 'Defina o tempo de expiração da senha do painel. Após a expiração, será necessário redefinir a senha.', + expirationHelper: 'Se o tempo de expiração da senha for [0] dias, a função de expiração da senha estará desativada.', + days: 'Dias de Expiração', + expiredHelper: 'A senha atual expirou. Por favor, altere a senha novamente.', + timeoutHelper: '[ {0} dias ] A senha do painel está prestes a expirar. Após a expiração, será necessário redefinir a senha.', + complexity: 'Validação de Complexidade', + complexityHelper: 'Após ativar, a regra de validação de senha será: 8-30 caracteres, incluindo letras, números e pelo menos dois caracteres especiais.', + bindDomain: 'Vincular domínio', + unBindDomain: 'Desvincular domínio', + panelSSL: 'SSL do Painel', + unBindDomainHelper: 'A ação de desvincular um domínio pode causar insegurança no sistema. Você deseja continuar?', + bindDomainHelper: 'Após vincular o domínio, somente esse domínio poderá acessar o serviço 1Panel.', + bindDomainHelper1: 'Deixe em branco para desabilitar o vínculo de domínio.', + bindDomainWarning: 'Após vincular o domínio, você será desconectado e poderá acessar o serviço 1Panel apenas através do domínio especificado nas configurações. Você deseja continuar?', + allowIPs: 'IP Autorizado', + unAllowIPs: 'IP Não Autorizado', + unAllowIPsWarning: 'Autorizar um IP vazio permitirá que todos os IPs acessem o sistema, o que pode causar insegurança. Você deseja continuar?', + allowIPsHelper: 'Após definir a lista de IPs autorizados, apenas os IPs da lista poderão acessar o serviço do painel.', + allowIPsWarning: 'Após definir a lista de IPs autorizados, somente os IPs da lista poderão acessar o serviço do painel. Você deseja continuar?', + allowIPsHelper1: 'Deixe em branco para desabilitar a restrição de IP.', + allowIPEgs: 'Um por linha. Por exemplo,\n172.16.10.111\n172.16.10.0/24', + mfa: 'Autenticação de dois fatores (2FA)', + mfaClose: 'Desabilitar MFA reduzirá a segurança do serviço. Você deseja continuar?', + secret: 'Segredo', + mfaInterval: 'Intervalo de atualização (s)', + mfaTitleHelper: 'O título é usado para distinguir diferentes hosts do 1Panel. Escaneie novamente ou adicione manualmente a chave secreta após modificar o título.', + mfaIntervalHelper: 'Escaneie novamente ou adicione manualmente a chave secreta após modificar o intervalo de atualização.', + mfaAlert: 'O token de uso único é um número dinâmico de 6 dígitos e baseado no tempo atual. Certifique-se de que o horário do servidor esteja sincronizado.', + mfaHelper: 'Após ativá-lo, o token de uso único precisará ser verificado.', + mfaHelper1: 'Baixe um aplicativo autenticador, por exemplo,', + mfaHelper2: 'Para obter o token de uso único, escaneie o código QR abaixo usando seu aplicativo autenticador ou copie a chave secreta para o aplicativo de autenticação.', + mfaHelper3: 'Digite os seis dígitos do aplicativo', + mfaCode: 'Token de uso único', + sslChangeHelper: 'Modificar a configuração de https e reiniciar o serviço. Você deseja continuar?', + sslDisable: 'Desabilitar', + sslDisableHelper: 'Se o serviço https for desabilitado, será necessário reiniciar o painel para que a alteração tenha efeito. Você deseja continuar?', + noAuthSetting: 'Configuração não autorizada', + noAuthSettingHelper: 'Quando os usuários não fizerem login com a entrada de segurança especificada, ou não acessarem o painel a partir de IP ou domínio especificado, essa resposta pode ocultar características do painel.', + responseSetting: 'Configuração de resposta', + help200: 'Página de ajuda', + error400: 'Requisição inválida', + error401: 'Não autorizado', + error403: 'Proibido', + error404: 'Não encontrado', + error408: 'Tempo de solicitação expirado', + error416: 'Faixa não satisfatória', + error444: 'Conexão fechada', + error500: 'Erro no servidor', + + + https: 'Configurar o acesso via protocolo HTTPS para o painel pode melhorar a segurança do acesso ao painel.', + certType: 'Tipo de certificado', + selfSigned: 'Autoassinado', + selfSignedHelper: 'Os navegadores podem não confiar em certificados autoassinados e podem exibir avisos de segurança.', + select: 'Selecionar', + domainOrIP: 'Domínio ou IP:', + timeOut: 'Tempo limite', + rootCrtDownload: 'Download do certificado raiz', + primaryKey: 'Chave primária', + certificate: 'Certificado', + backupJump: 'Arquivos de backup não estão na lista de backup atual, tente fazer o download do diretório de arquivos e importar para o backup.', + + snapshot: 'Snapshot | Snapshots', + deleteHelper: 'Todos os arquivos de snapshot, incluindo os da conta de backup de terceiros, serão excluídos. Você deseja continuar?', + status: 'Status do snapshot', + ignoreRule: 'Ignorar regra', + editIgnoreRule: '@:commons.button.edit @.lower:setting.ignoreRule', + ignoreHelper: 'Esta regra será usada para comprimir e fazer backup do diretório de dados do 1Panel durante a criação do snapshot. Por padrão, arquivos de socket são ignorados.', + ignoreHelper1: 'Um por linha. Exemplo,\n*.log\n/opt/1panel/cache', + panelInfo: 'Escrever informações básicas do 1Panel', + panelBin: 'Fazer backup dos arquivos do sistema 1Panel', + daemonJson: 'Fazer backup do arquivo de configuração do Docker', + appData: 'Fazer backup dos aplicativos instalados do 1Panel', + panelData: 'Fazer backup do diretório de dados do 1Panel', + backupData: 'Fazer backup do diretório de backup local do 1Panel', + compress: 'Criar arquivo de snapshot', + upload: 'Fazer upload do arquivo de snapshot', + recoverDetail: 'Detalhes da recuperação', + createSnapshot: 'Criar snapshot', + importSnapshot: 'Sincronizar snapshot', + importHelper: 'Diretório do snapshot: ', + recover: 'Recuperar', + lastRecoverAt: 'Última recuperação realizada', + lastRollbackAt: 'Último rollback realizado', + reDownload: 'Baixar o arquivo de backup novamente', + statusSuccess: 'Sucesso', + statusFailed: 'Falhou', + recoverErrArch: 'A recuperação de snapshot entre diferentes arquiteturas de servidor não é suportada!', + recoverErrSize: 'Espaço em disco insuficiente detectado, por favor, verifique ou libere espaço e tente novamente!', + recoverHelper: 'Iniciando a recuperação do snapshot {0}, por favor, confirme as seguintes informações antes de prosseguir:', + recoverHelper1: 'A recuperação requer reiniciar os serviços Docker e 1Panel', + recoverHelper2: 'Por favor, assegure-se de que há espaço suficiente em disco no servidor (Tamanho do arquivo de snapshot: {0}, Espaço disponível: {1})', + recoverHelper3: 'Por favor, assegure-se de que a arquitetura do servidor corresponda à arquitetura do servidor onde o snapshot foi criado (Arquitetura do servidor atual: {0})', + rollback: 'Rollback', + rollbackHelper: 'Reverter essa recuperação substituirá todos os arquivos dessa recuperação e pode exigir reiniciar os serviços Docker e 1Panel. Você deseja continuar?', + + upgradeHelper: 'A atualização requer reiniciar o serviço 1Panel. Você deseja continuar?', + noUpgrade: 'Esta é a versão mais recente', + upgradeNotes: 'Notas de versão', + upgradeNow: 'Atualizar agora', + source: 'Fonte para download', + + about: 'Sobre', + project: 'GitHub', + issue: 'Problema', + doc: 'Documento oficial', + star: 'Estrela', + description: 'Painel de Servidor Linux', + forum: 'Discussões', + doc2: 'Docs', + currentVersion: 'Versão', + + license: 'Licença', + advancedMenuHide: 'Ocultar menu avançado', + showMainAdvancedMenu: 'Se apenas um menu for mantido, somente o menu avançado principal será exibido na barra lateral', + showAll: 'Mostrar Tudo', + hideALL: 'Ocultar Tudo', + ifShow: 'Exibir?', + menu: 'Menu', + confirmMessage: 'A página será atualizada para atualizar a lista de menus avançados. Continuar?', + compressPassword: 'Senha de compressão', + backupRecoverMessage: 'Por favor, insira a senha de compressão ou descompressão (deixe em branco para não definir)', + + }, + license: { + community: 'Gratuito', + pro: 'Pro', + trial: 'Teste', + office: 'Oficial', + trialInfo: 'Versão', + authorizationId: 'ID de autorização de assinatura', + authorizedUser: 'Usuário autorizado', + expiresAt: 'Data de expiração', + productName: 'Nome do Produto', + productStatus: 'Status do Produto', + Lost: 'Perdido', + Enable: 'Habilitado', + Disable: 'Desabilitado', + lostHelper: 'A licença atingiu o número máximo de tentativas de reenvio. Por favor, clique manualmente no botão de sincronização para garantir que os recursos da versão profissional estão funcionando corretamente.', + disableHelper: 'A verificação de sincronização da licença falhou. Por favor, clique manualmente no botão de sincronização para garantir que os recursos da versão profissional estão funcionando corretamente.', + quickUpdate: 'Atualização rápida', + import: 'Importar', + power: 'Autorizar', + unbind: 'Desvincular Licença', + unbindHelper: 'Todas as configurações relacionadas ao Pro serão limpas após a desvinculação. Você deseja continuar?', + importLicense: 'Licença', + importHelper: 'Clique ou arraste o arquivo de licença aqui', + technicalAdvice: 'Consultoria técnica', + advice: 'Consultoria', + indefinitePeriod: 'Período Indefinido', + levelUpPro: 'Upgrade para Pro', + licenseSync: 'Sincronização de Licença', + knowMorePro: 'Saiba mais', + closeAlert: 'A página atual pode ser fechada nas configurações do painel', + introduce: 'Introdução de recursos', + waf: 'O upgrade para a versão profissional pode fornecer recursos como mapa de intercepção, logs, registros de bloqueio, bloqueio por localização geográfica, regras personalizadas, páginas de intercepção personalizadas, etc.', + tamper: 'O upgrade para a versão profissional pode proteger sites contra modificações ou adulterações não autorizadas.', + gpu: 'O upgrade para a versão profissional pode ajudar os usuários a monitorar visualmente parâmetros importantes da GPU, como carga de trabalho, temperatura e uso de memória em tempo real.', + setting: 'O upgrade para a versão profissional permite a personalização do logo do painel, mensagem de boas-vindas e outras informações.', + monitor: 'Upgrade para a versão profissional para visualizar o status em tempo real do site, tendências de visitantes, fontes de visitantes, logs de solicitações e outras informações.', + alert: 'Upgrade para a versão profissional para receber informações de alarme via SMS e visualizar logs de alarmes, controlar completamente vários eventos chave e garantir a operação sem preocupações do sistema', + + }, + clean: { + scan: 'Iniciar escaneamento', + scanHelper: 'Limpeza fácil de arquivos inúteis gerados durante a execução do 1Panel', + clean: 'Limpar agora', + reScan: 'Repetir escaneamento', + cleanHelper: 'Isso limpará os arquivos inúteis selecionados e não poderá ser desfeito. Você deseja continuar?', + statusSuggest: '(Limpeza recomendada)', + statusClean: '(Muito limpo)', + statusEmpty: 'Muito limpo, nenhuma limpeza necessária!', + statusWarning: '(Prossiga com cautela)', + lastCleanTime: 'Última limpeza: {0}', + lastCleanHelper: 'Arquivos e diretórios limpos: {0}, total limpo: {1}', + cleanSuccessful: 'Limpeza realizada com sucesso', + currentCleanHelper: 'Arquivos e diretórios limpos nesta sessão: {0}, total limpo: {1}', + suggest: '(Recomendado)', + totalScan: 'Total de arquivos inúteis a serem limpos: ', + selectScan: 'Total de arquivos inúteis selecionados: ', + + system: 'Arquivos inúteis do sistema', + systemHelper: 'Arquivos temporários gerados durante snapshots, atualizações e conteúdos obsoletos durante iterações de versão', + panelOriginal: 'Arquivos de backup de recuperação de snapshot do sistema', + upgrade: 'Arquivos de backup de atualização do sistema', + upgradeHelper: '(Recomenda-se manter o backup de atualização mais recente para rollback do sistema)', + cache: 'Arquivos de cache do sistema', + cacheHelper: '(Prossiga com cautela, a limpeza exige reinício do serviço)', + snapshotTmp: 'Arquivos temporários de upload de snapshot do sistema', + snapshotLocal: 'Arquivos temporários de criação de snapshot do sistema', + rollback: 'Arquivos de backup antes da recuperação', + unused: 'Diretórios do sistema não utilizados', + oldUpgrade: 'Diretórios de backup não utilizados anteriores à atualização', + oldOriginal: 'Diretórios de backup de recuperação de snapshot não utilizados', + oldAppsBak: 'Diretórios de backup de aplicativos não utilizados', + + upload: 'Arquivos temporários de upload', + uploadHelper: 'Arquivos temporários enviados da lista de backup do sistema', + download: 'Arquivos temporários de download', + downloadHelper: 'Arquivos temporários baixados de contas de backup de terceiros pelo sistema', + website: 'Site', + app: 'Aplicativo', + database: 'Banco de dados', + directory: 'Diretório', + + systemLog: 'Arquivos de log do sistema', + systemLogHelper: 'Informações de log do sistema, logs de construção de container ou pull de imagem, e logs gerados em tarefas agendadas', + dockerLog: 'Arquivos de log de operação de container', + taskLog: 'Arquivos de log de execução de tarefas agendadas', + containerShell: 'Tarefas agendadas de script Shell interno do container', + + containerTrash: 'Lixeira do container', + images: 'Imagens', + containers: 'Containers', + volumes: 'Volumes', + buildCache: 'Cache de construção do container', + + }, + app: { + app: 'Aplicativo | Aplicativos', + installName: 'Nome', + installed: 'Instalado', + all: 'Todos', + version: 'Versão', + detail: 'Detalhes', + params: 'Editar', + install: 'Instalar', + author: 'Autor', + source: 'Fonte', + sync: 'Sincronizar', + appName: 'Nome do Aplicativo', + status: 'Status', + container: 'Container', + restart: 'Reiniciar', + start: 'Iniciar', + stop: 'Parar', + rebuild: 'Reconstruir', + description: 'Descrição', + deleteWarn: 'A operação de exclusão excluirá todos os dados e backups juntos. Esta operação não pode ser desfeita. Deseja continuar?', + syncSuccess: 'Sincronizado com sucesso', + canUpgrade: 'Atualizações', + backupName: 'Nome do Arquivo', + backupPath: 'Caminho do Arquivo', + backupdate: 'Hora do Backup', + update: 'Atualizar', + versionSelect: 'Por favor, selecione uma versão', + operatorHelper: 'A operação {0} será realizada no aplicativo selecionado. Deseja continuar?', + startOperatorHelper: 'O aplicativo será iniciado. Deseja continuar?', + stopOperatorHelper: 'O aplicativo será parado. Deseja continuar?', + restartOperatorHelper: 'O aplicativo será reiniciado. Deseja continuar?', + reloadOperatorHelper: 'O aplicativo será recarregado. Deseja continuar?', + checkInstalledWarn: `"{0}" não foi detectado. Vá para "Loja de Aplicativos" para instalar.`, + gotoInstalled: 'Ir para instalar', + search: 'Pesquisar', + limitHelper: 'O aplicativo já foi instalado.', + deleteHelper: `"{0}" foi associado aos seguintes recursos. Por favor, verifique e tente novamente!`, + checkTitle: 'Dica', + website: 'site', + database: 'banco de dados', + defaultConfig: 'Configuração padrão', + defaultConfigHelper: 'Foi restaurado para a configuração padrão, ela entrará em vigor após salvar', + forceDelete: 'Excluir forçadamente', + forceDeleteHelper: 'A exclusão forçada ignorará erros durante o processo de exclusão e eliminará os metadados.', + deleteBackup: 'Excluir backup', + deleteBackupHelper: 'Excluir também o backup do aplicativo', + deleteDB: 'Excluir banco de dados', + deleteDBHelper: 'Excluir também o banco de dados', + noService: 'Sem {0}', + toInstall: 'Ir para instalar', + param: 'Parâmetros', + alreadyRun: 'Idade', + syncAppList: 'Sincronizar', + less1Minute: 'Menos de 1 minuto', + appOfficeWebsite: 'Site oficial', + github: 'Github', + document: 'Documento', + updatePrompt: 'Nenhuma atualização disponível', + installPrompt: 'Nenhum aplicativo instalado ainda', + updateHelper: 'Editar parâmetros pode causar falha no início do aplicativo. Por favor, proceda com cautela.', + updateWarn: 'Os parâmetros de atualização precisam reconstruir o aplicativo. Deseja continuar?', + busPort: 'Porta', + syncStart: 'Iniciando a sincronização! Por favor, atualize a loja de aplicativos mais tarde', + advanced: 'Configurações avançadas', + cpuCore: 'núcleo(s)', + containerName: 'Nome do container', + containerNameHelper: 'O nome do container será gerado automaticamente quando não definido', + allowPort: 'Acesso externo', + allowPortHelper: 'Permitir o acesso externo irá liberar a porta do firewall', + appInstallWarn: `O aplicativo não expõe a porta de acesso externo por padrão. Clique em "Configurações Avançadas" para expô-la.`, + upgradeStart: 'Iniciando a atualização! Por favor, atualize a página mais tarde', + toFolder: 'Abrir o diretório de instalação', + editCompose: 'Editar arquivo compose', + editComposeHelper: 'Editar o arquivo compose pode resultar em falha na instalação do software', + composeNullErr: 'O compose não pode estar vazio', + takeDown: 'Retirar', + allReadyInstalled: 'Instalado', + installHelper: 'Se houver problemas ao puxar a imagem, configure a aceleração da imagem.', + upgradeHelper: 'Coloque aplicativos anormais de volta ao estado normal antes de atualizar. Se a atualização falhar, vá para "Logs > Logs do Sistema" para verificar a razão da falha.', + installWarn: `O acesso externo não foi habilitado, o que impede que o aplicativo seja acessado via redes externas. Deseja continuar?`, + showIgnore: 'Exibir aplicativos ignorados', + cancelIgnore: 'Cancelar ignorar', + ignoreList: 'Aplicativos ignorados', + appHelper: 'Vá para a página de detalhes do aplicativo para aprender as instruções de instalação para alguns aplicativos especiais.', + backupApp: 'Fazer backup do aplicativo antes de atualizar', + backupAppHelper: 'Se a atualização falhar, o backup será automaticamente revertido. Verifique a razão da falha no log de auditoria-sistema. O backup manterá as últimas 3 cópias por padrão', + delete: 'Excluir', + openrestyDeleteHelper: 'Excluir forçadamente o OpenResty excluirá todos os sites. Deseja continuar?', + downloadLogHelper1: 'Todos os logs do aplicativo {0} estão prestes a ser baixados. Deseja continuar?', + downloadLogHelper2: 'Os últimos {1} logs do aplicativo {0} estão prestes a ser baixados. Deseja continuar?', + syncAllAppHelper: 'Todos os aplicativos serão sincronizados. Deseja continuar?', + hostModeHelper: 'O modo de rede atual do aplicativo é o modo host. Se precisar abrir a porta, abra-a manualmente na página do firewall.', + showLocal: 'Exibir aplicativos locais', + reload: 'Recarregar', + upgradeWarn: 'Atualizar o aplicativo substituirá o arquivo docker-compose.yml. Se houver alterações, você pode clicar para visualizar a comparação do arquivo', + newVersion: 'Nova versão', + oldVersion: 'Versão atual', + composeDiff: 'Comparação de arquivo', + showDiff: 'Exibir comparação', + useNew: 'Usar versão personalizada', + useDefault: 'Usar versão padrão', + useCustom: 'Personalizar docker-compose.yml', + useCustomHelper: 'Usar um arquivo docker-compose.yml personalizado pode causar falha na atualização do aplicativo. Se não for necessário, não marque esta opção.', + diffHelper: 'O lado esquerdo é a versão antiga, o lado direito é a nova versão. Após editar, clique para salvar a versão personalizada', + pullImage: 'Puxar Imagem', + pullImageHelper: 'Execute o comando docker pull para puxar a imagem antes de iniciar o aplicativo', + + }, + website: { + website: 'Website | Websites', + primaryDomain: 'Domínio principal', + otherDomains: 'Outros domínios', + static: 'Estático', + deployment: 'Implantação', + supportUpType: 'Somente arquivos .tar.gz são suportados', + zipFormat: 'Estrutura de pacote comprimido .tar.gz: o pacote comprimido test.tar.gz deve conter o arquivo {0}', + proxy: 'Proxy reverso', + alias: 'Alias', + enableFtp: 'FTP', + ftpUser: 'Conta FTP', + ftpPassword: 'Senha FTP', + ftpHelper: + 'Após criar um site, uma conta FTP correspondente será criada e o diretório FTP será vinculado ao diretório do site.', + remark: 'Observação', + group: 'Grupo', + manageGroup: 'Gerenciar grupos', + groupSetting: 'Gerenciamento de grupos', + createGroup: 'Criar grupo', + app: 'Aplicativo', + appNew: 'Novo Aplicativo', + appInstalled: 'Aplicativo instalado', + create: 'Criar site', + delete: 'Excluir site', + deleteApp: 'Excluir Aplicativo', + deleteBackup: 'Excluir Backup', + domain: 'Domínio', + domainHelper: 'Um domínio por linha.\nSuporta curinga "*" e endereço IP.\nSuporta adição de porta.', + addDomain: 'Adicionar', + domainConfig: 'Domínios', + defaultDoc: 'Documento', + perserver: 'Concorrência', + perserverHelper: 'Limitar a concorrência máxima do site atual', + perip: 'IP único', + peripHelper: 'Limitar o número máximo de acessos simultâneos a um único IP', + rate: 'Limites de tráfego', + rateHelper: 'Limitar o fluxo de cada requisição (unidade: KB)', + limitHelper: 'Habilitar controle de fluxo', + other: 'Outro', + currentSSL: 'Certificado atual', + dnsAccount: 'Conta DNS', + applySSL: 'Solicitação de certificado', + SSLList: 'Lista de certificados', + createDnsAccount: 'Conta DNS', + aliyun: 'Aliyun', + volcengine: 'Volcengine', + manual: 'Análise manual', + key: 'Chave', + check: 'Ver', + acmeAccountManage: 'Contas ACME', + email: 'Email', + acmeAccount: 'Conta ACME', + provider: 'Método de verificação', + dnsManual: 'Resolução manual', + expireDate: 'Data de expiração', + brand: 'Organização', + deploySSL: 'Implantação', + deploySSLHelper: 'Tem certeza de que deseja implantar o certificado?', + ssl: 'Certificado | Certificados', + dnsAccountManage: 'Provedores DNS', + renewSSL: 'Renovar', + renewHelper: 'Tem certeza de que deseja renovar o certificado?', + renewSuccess: 'Certificado renovado', + config: 'Editar', + enableHTTPS: 'Habilitar', + aliasHelper: 'Alias é o nome do diretório do site', + lastBackupAt: 'Último backup realizado em', + null: 'nenhum', + nginxConfig: 'Configuração Nginx', + websiteConfig: 'Configurações do site', + basic: 'Básico', + source: 'Configuração', + security: 'Segurança', + log: 'Logs', + nginxPer: 'Ajuste de desempenho', + neverExpire: 'Nunca', + setDefault: 'Definir como padrão', + default: 'Padrão', + deleteHelper: 'O status do aplicativo relacionado está anômalo, por favor verifique', + toApp: 'Ir para a lista de aplicativos instalados', + cycle: 'Ciclo', + frequency: 'Frequência', + ccHelper: + 'Solicitar cumulativamente a mesma URL mais de {1} vezes em {0} segundos, aciona a defesa CC, bloqueia este IP', + mustSave: 'A modificação precisa ser salva para ter efeito', + fileExt: 'Extensão de arquivo', + fileExtBlock: 'Lista negra de extensões de arquivo', + value: 'valor', + enable: 'Habilitar', + proxyAddress: 'Endereço Proxy', + proxyHelper: 'Exemplo: 127.0.0.1:8080', + forceDelete: 'Excluir forçadamente', + forceDeleteHelper: + 'A exclusão forçada ignorará erros durante o processo de exclusão e excluirá os metadados.', + deleteAppHelper: 'Excluir aplicativos associados e backups de aplicativos ao mesmo tempo', + deleteBackupHelper: 'Excluir também backups do site.', + deleteConfirmHelper: `A operação de exclusão não pode ser desfeita. Digite "{0}" para confirmar a exclusão.`, + staticPath: 'O diretório principal correspondente é ', + limit: 'Plano', + blog: 'Fórum/Blog', + imageSite: 'Site de Imagens', + downloadSite: 'Site de Download', + shopSite: 'Loja', + doorSite: 'Portal', + qiteSite: 'Empresarial', + videoSite: 'Site de Vídeo', + errLog: 'Erro de log', + accessLog: 'Log do site', + stopHelper: + 'Após parar o site, ele não poderá ser acessado normalmente, e o usuário verá a página de parada do site atual ao visitar. Deseja continuar?', + startHelper: + 'Após ativar o site, os usuários podem acessar o conteúdo do site normalmente, deseja continuar?', + sitePath: 'Diretório', + siteAlias: 'Alias do site', + primaryPath: 'Diretório raiz', + folderTitle: 'O site contém principalmente as seguintes pastas', + wafFolder: 'Regras de firewall', + indexFolder: 'Diretório raiz do site', + logFolder: 'Log do site', + sslFolder: 'Certificado do site', + enableOrNot: 'Habilitar', + oldSSL: 'Certificado existente', + manualSSL: 'Importar certificado', + select: 'Selecionar', + selectSSL: 'Selecionar certificado', + privateKey: 'Chave (KEY)', + certificate: 'Certificado (formato PEM)', + HTTPConfig: 'Opções HTTP', + HTTPSOnly: 'Bloquear requisições HTTP', + HTTPToHTTPS: 'Redirecionar para HTTPS', + HTTPAlso: 'Permitir requisições HTTP diretas', + sslConfig: 'Opções SSL', + disableHTTPS: 'Desabilitar HTTPS', + disableHTTPSHelper: + 'Desabilitar HTTPS removerá a configuração do certificado relacionada, deseja continuar?', + SSLHelper: + "Nota: Não use certificados SSL para sites ilegais.\nSe o acesso HTTPS não funcionar após a ativação, verifique se o grupo de segurança liberou corretamente a porta 443.", + SSLConfig: 'Configurações do certificado', + SSLProConfig: 'Configurações do protocolo', + supportProtocol: 'Versão do protocolo', + encryptionAlgorithm: 'Algoritmo de criptografia', + notSecurity: '(não seguro)', + encryptHelper: + "O Let's Encrypt tem um limite de frequência para a emissão de certificados, mas é suficiente para atender necessidades normais. Operações muito frequentes podem causar falha na emissão. Para restrições específicas, consulte documentação oficial", + ipValue: 'Valor', + ext: 'Extensão de arquivo', + wafInputHelper: 'Digite os dados por linha, uma linha por vez', + data: 'dados', + ever: 'permanente', + nextYear: 'Um ano depois', + noLog: 'Nenhum log encontrado', + defaultServer: 'Site padrão', + noDefaultServer: 'Não definido', + defaultServerHelper: + 'Após definir o site padrão, todos os domínios e IPs não vinculados serão redirecionados para o site padrão\n o que pode prevenir efetivamente análises maliciosas', + restoreHelper: 'Tem certeza de que deseja restaurar com este backup?', + websiteDeploymentHelper: 'Use um aplicativo instalado ou crie um novo aplicativo para criar um site.', + websiteStatictHelper: 'Crie um diretório de site no host.', + websiteProxyHelper: + 'Use proxy reverso para redirecionar um serviço existente. Por exemplo, se um serviço estiver instalado e rodando na porta 8080, o endereço do proxy será "http://127.0.0.1:8080".', + runtimeProxyHelper: 'Use o ambiente de execução do site para criar um site.', + runtime: 'Ambiente de execução', + deleteRuntimeHelper: + 'O aplicativo de Runtime precisa ser excluído junto com o site, por favor, manuseie com cuidado', + proxyType: 'Tipo de rede', + unix: 'Rede Unix', + tcp: 'Rede TCP/IP', + phpFPM: 'Configuração FPM', + phpConfig: 'Configuração PHP', + updateConfig: 'Atualizar configurações', + isOn: 'Ligado', + isOff: 'Desligado', + rewrite: 'Pseudo-estático', + rewriteMode: 'Plano', + current: 'Atual', + rewriteHelper: + 'Se configurar pseudo-estático e o site se tornar inacessível, tente reverter para as configurações padrão.', + runDir: 'Diretório de execução', + runUserHelper: + 'Para sites implantados através do ambiente de execução PHP, você deve definir o proprietário e o grupo dos arquivos e pastas de índice e subdiretórios para 1000. Para o ambiente PHP local, consulte as configurações de usuário e grupo do PHP-FPM local', + userGroup: 'Usuário/Grupo', + uGroup: 'Grupo', + proxyPath: 'Caminho do proxy', + proxyPass: 'URL de destino', + cache: 'Cache', + cacheTime: 'Duração do cache', + enableCache: 'Habilitar cache', + proxyHost: 'Host do proxy', + disabled: 'Parado', + startProxy: 'Isso iniciará o proxy reverso. Deseja continuar?', + stopProxy: 'Isso interromperá o proxy reverso. Deseja continuar?', + sourceFile: 'Fonte', + proxyHelper1: 'Ao acessar este diretório, o conteúdo da URL de destino será retornado e exibido.', + proxyPassHelper: 'A URL de destino deve ser válida e acessível.', + proxyHostHelper: 'Passe o nome de domínio no cabeçalho da requisição para o servidor proxy.', + replacementHelper: 'Até 5 substituições podem ser adicionadas, deixe em branco se não houver substituição necessária.', + modifier: 'Regras de correspondência', + modifierHelper: + 'Exemplo: "=" é correspondência exata, "~" é correspondência regular, "^~" corresponde ao início do caminho, etc.', + replace: 'Substituições de texto', + addReplace: 'Adicionar', + replaced: 'String de busca (não pode estar vazia)', + replaceText: 'Substituir por string', + replacedErr: 'A string de busca não pode estar vazia', + replacedErr2: 'A string de busca não pode ser repetida', + basicAuth: 'Autenticação básica', + editBasicAuthHelper: 'A senha é criptografada de forma assimétrica e não pode ser exibida. A edição requer a redefinição da senha', + antiLeech: 'Anti-leech', + extends: 'Extensão', + browserCache: 'Cache', + leechLog: 'Registrar log anti-leech', + accessDomain: 'Domínios permitidos', + leechReturn: 'Recurso de resposta', + noneRef: 'Permitir referrer vazio', + disable: 'não habilitado', + disableLeechHelper: 'Se deseja desabilitar o anti-leech', + disableLeech: 'Desabilitar anti-leech', + ipv6: 'Ouvir IPv6', + leechReturnError: 'Por favor, preencha o código de status HTTP', + selectAcme: 'Selecionar conta Acme', + imported: 'Criado manualmente', + importType: 'Tipo de importação', + pasteSSL: 'Colar código', + localSSL: 'Selecionar arquivo do servidor', + privateKeyPath: 'Caminho do arquivo da chave privada', + certificatePath: 'Caminho do arquivo do certificado', + ipWhiteListHelper: 'O papel da lista de permissões de IP: todas as regras são inválidas para a lista de permissões de IP', + redirect: 'Redirecionar', + sourceDomain: 'Domínio de origem', + targetURL: 'Endereço da URL de destino', + keepPath: 'Parâmetros URI', + path: 'caminho', + redirectType: 'Tipo de redirecionamento', + redirectWay: 'Modo', + keep: 'manter', + notKeep: 'Não manter', + redirectRoot: 'Redirecionar para a página inicial', + redirectHelper: 'Redirecionamento permanente 301, redirecionamento temporário 302', + changePHPVersionWarn: 'Trocar a versão do PHP vai excluir o contêiner PHP original (o código do site montado não será perdido), continuar?', + changeVersion: 'Trocar versão', + retainConfig: 'Deseja manter os arquivos php-fpm.conf e php.ini?', + runDirHelper2: 'Por favor, certifique-se de que o diretório de execução secundário esteja no diretório do índice', + openrestyHelper: 'Porta HTTP padrão do OpenResty: {0} Porta HTTPS: {1}, o que pode afetar o acesso ao domínio do site e o redirecionamento forçado para HTTPS', + primaryDomainHelper: 'Exemplo: exemplo.com ou exemplo.com:8080', + acmeAccountType: 'Tipo de conta', + keyType: 'Algoritmo de chave', + tencentCloud: 'Tencent Cloud', + containWarn: 'O nome de domínio contém o domínio principal, por favor, reentre', + rewriteHelper2: 'Aplicações como o WordPress instaladas a partir da loja de aplicativos geralmente vêm com configuração de pseudo-estática predefinida. Reconfigurá-las pode causar erros.', + websiteBackupWarn: 'Somente suporta importar backups locais, importar backups de outras máquinas pode causar falha na recuperação', + ipWebsiteWarn: 'Sites com IP como nomes de domínio precisam ser configurados como site padrão para serem acessados normalmente', + hstsHelper: 'Ativar HSTS pode aumentar a segurança do site', + defaultHtml: 'Página padrão', + website404: 'Página de erro 404 do site', + domain404: 'O domínio do site não existe', + indexHtml: 'Índice para site estático', + stopHtml: 'Site parado', + indexPHP: 'Índice para site PHP', + sslExpireDate: 'Data de expiração do certificado', + website404Helper: 'A página de erro 404 do site suporta apenas sites com ambiente de execução PHP e sites estáticos', + sni: 'SNI de origem', + sniHelper: 'Quando o proxy reverso de backend for HTTPS, você pode precisar configurar o SNI de origem. Consulte a documentação do provedor de serviços CDN para mais detalhes.', + huaweicloud: 'Huawei Cloud', + }, + php: { + short_open_tag: 'Suporte para short tags', + max_execution_time: 'Tempo máximo de execução do script', + max_input_time: 'Tempo máximo de entrada de dados', + memory_limit: 'Limite de memória para scripts', + post_max_size: 'Tamanho máximo para dados enviados via POST', + file_uploads: 'Permitir upload de arquivos', + upload_max_filesize: 'Tamanho máximo permitido para upload de arquivos', + max_file_uploads: 'Número máximo de arquivos permitidos para upload simultâneo', + default_socket_timeout: 'Tempo limite do socket', + error_reporting: 'Nível de relatório de erros', + display_errors: 'Exibir informações detalhadas de erro', + cgi_fix_pathinfo: 'Ativar suporte a pathinfo', + date_timezone: 'Fuso horário', + disableFunction: 'Desabilitar função', + disableFunctionHelper: 'Informe a função a ser desabilitada, como exec. Para múltiplas funções, separe com vírgulas', + uploadMaxSize: 'Limite de upload', + indexHelper: + 'Para garantir o funcionamento normal do site em PHP, coloque o código no diretório de índice e evite renomeações', + extensions: 'Modelos de extensão', + extension: 'Extensão', + extensionHelper: 'Para múltiplas extensões, separe com vírgulas', + toExtensionsList: 'Ver lista de extensões', + }, + nginx: { + serverNamesHashBucketSizeHelper: 'The hash table size of the server name', + clientHeaderBufferSizeHelper: 'The header buffer size requested by the client', + clientMaxBodySizeHelper: 'Maximum Upload File', + keepaliveTimeoutHelper: 'Connection Timeout', + gzipMinLengthHelper: 'Minimum Compressed File', + gzipCompLevelHelper: 'Compression Rate', + gzipHelper: 'Enable compression for transmission', + connections: 'Active connections', + accepts: 'Accepts', + handled: 'Handled', + requests: 'Requests', + reading: 'Reading', + writing: 'Writing', + waiting: 'Waiting', + status: 'Current Status', + nginxConfig: 'Settings', + configResource: 'Configuration', + saveAndReload: 'Save and reload', + clearProxyCache: 'Clean reverse proxy cache', + clearProxyCacheWarn: + 'All websites that have configured with cache will be affected and "OpenResty" will be restarted. Do you want to continue?', + }, + ssl: { + create: 'Solicitar', + provider: 'Tipo', + manualCreate: 'Criado manualmente', + acmeAccount: 'Conta ACME', + resolveDomain: 'Resolver nome de domínio', + err: 'Erro', + value: 'Valor do registro', + dnsResolveHelper: 'Vá ao provedor de serviço de DNS para adicionar os seguintes registros de resolução:', + detail: 'Detalhes', + msg: 'Informação', + ssl: 'Certificado', + key: 'Chave privada', + startDate: 'Data de início', + organization: 'Organização emissora', + renewConfirm: 'Isso renovará um novo certificado para o domínio {0}. Deseja continuar?', + autoRenew: 'Renovação automática', + autoRenewHelper: 'Renova automaticamente 30 dias antes da expiração', + renewSuccess: 'Renovação bem-sucedida', + renewWebsite: + 'Este certificado está associado aos seguintes sites e será aplicado a eles simultaneamente', + createAcme: 'Criar conta', + acmeHelper: 'A conta ACME é usada para solicitar certificados gratuitos', + upload: 'Importar', + applyType: 'Tipo', + apply: 'Renovar', + applyStart: 'Início da solicitação do certificado', + getDnsResolve: 'Obtendo o valor de resolução DNS, por favor, aguarde...', + selfSigned: 'CA autoassinado', + ca: 'Autoridade certificadora', + commonName: 'Nome comum', + caName: 'Nome da autoridade certificadora', + company: 'Nome da organização', + department: 'Nome da unidade organizacional', + city: 'Nome da localidade', + province: 'Estado ou província', + country: 'Nome do país (código de 2 letras)', + commonNameHelper: 'Por exemplo, ', + selfSign: 'Emitir certificado', + days: 'Período de validade', + domainHelper: 'Um domínio por linha, suporta * e endereços IP', + pushDir: 'Enviar o certificado para o diretório local', + dir: 'Diretório', + pushDirHelper: + 'O arquivo do certificado "fullchain.pem" e o arquivo de chave "privkey.pem" serão gerados neste diretório.', + organizationDetail: 'Detalhes da organização', + fromWebsite: 'Do site', + dnsMauanlHelper: + 'No modo de resolução manual, você precisa clicar no botão de solicitação após a criação para obter o valor de resolução DNS', + httpHelper: 'O modo HTTP requer a instalação do OpenResty', + buypassHelper: 'O Buypass não está acessível na China continental', + googleHelper: 'Como obter EAB HmacKey e EAB kid', + googleCloudHelper: 'A API do Google Cloud não está acessível na maior parte da China continental', + httpHelper2: 'Não é possível solicitar certificados para domínios genéricos no modo HTTP', + skipDNSCheck: 'Pular verificação DNS', + skipDNSCheckHelper: 'Marque esta opção apenas se enfrentar problemas de timeout durante a solicitação de certificação.', + cfHelper: 'Não use a Global API Key', + deprecated: 'será descontinuado', + deprecatedHelper: + 'A manutenção foi interrompida e pode ser abandonada em uma versão futura. Use o método Tencent Cloud para análise', + disableCNAME: 'Desativar CNAME', + disableCNAMEHelper: 'Marque esta opção se o domínio tiver um registro CNAME e a solicitação falhar.', + nameserver: 'Servidor DNS', + nameserverHelper: 'Use um servidor DNS personalizado para verificar os nomes de domínio.', + edit: 'Editar certificado', + execShell: 'Executar o script após a solicitação de certificação.', + shell: 'Conteúdo do script', + shellHelper: + 'O diretório padrão de execução do script é o diretório de instalação do 1Panel. Se um certificado for enviado para o diretório local, o diretório de execução será o diretório de envio do certificado. O tempo limite padrão de execução é de 30 minutos.', + }, + firewall: { + create: 'Criar regra', + edit: 'Editar regra', + notSupport: + 'Nenhum firewall do sistema detectado (firewalld ou ufw). Consulte a documentação oficial para instalação.', + ccDeny: 'Proteção contra CC', + ipWhiteList: 'Lista de IPs permitidos', + ipBlockList: 'Lista de IPs bloqueados', + fileExtBlockList: 'Lista de extensões de arquivo bloqueadas', + urlWhiteList: 'Lista de URLs permitidas', + urlBlockList: 'Lista de URLs bloqueadas', + argsCheck: 'Verificação de parâmetros GET', + postCheck: 'Verificação de parâmetros POST', + cookieBlockList: 'Lista de cookies bloqueados', + + firewall: 'Firewall', + dockerHelper: + 'O firewall do Linux "{0}" não pode desativar o mapeamento de portas do Docker. O aplicativo pode editar os parâmetros na página "App Store -> Instalados" para controlar se a porta será liberada.', + quickJump: 'Acesso rápido', + used: 'Usado', + unUsed: 'Não usado', + firewallHelper: 'Firewall do sistema {0}', + firewallNotStart: + 'O firewall do sistema não está habilitado atualmente. Habilite-o primeiro.', + restartFirewallHelper: 'Esta operação reiniciará o firewall atual. Deseja continuar?', + stopFirewallHelper: + 'Isso fará com que o servidor perca a proteção de segurança. Deseja continuar?', + startFirewallHelper: + 'Depois que o firewall for habilitado, a segurança do servidor será melhor protegida. Deseja continuar?', + noPing: 'Desativar ping', + noPingTitle: 'Desativar ping', + noPingHelper: + 'Isso desativará o ping, e o servidor não responderá ao ICMP. Deseja continuar?', + onPingHelper: + 'Isso ativará o ping, permitindo que hackers descubram seu servidor. Deseja continuar?', + changeStrategy: 'Alterar a estratégia {0}', + changeStrategyIPHelper1: + 'Altere a estratégia de endereço IP para [negar]. Após definir o endereço IP, o acesso ao servidor será proibido. Deseja continuar?', + changeStrategyIPHelper2: + 'Altere a estratégia de endereço IP para [permitir]. Após definir o endereço IP, o acesso normal será restaurado. Deseja continuar?', + changeStrategyPortHelper1: + 'Altere a política de porta para [bloquear]. Após definir a política de porta, o acesso externo será negado. Deseja continuar?', + changeStrategyPortHelper2: + 'Altere a política de porta para [aceitar]. Após definir a política de porta, o acesso normal será restaurado. Deseja continuar?', + stop: 'Parar', + portFormatError: 'Este campo deve ser uma porta válida.', + portHelper1: 'Várias portas, ex.: 8080 e 8081', + portHelper2: 'Faixa de portas, ex.: 8080-8089', + changeStrategyHelper: + 'Alterar a estratégia [{1}] {0} para [{2}]. Após a definição, {0} acessará {2} externamente. Deseja continuar?', + portHelper: + 'Várias portas podem ser inseridas, ex.: 80,81, ou faixas de portas, ex.: 80-88', + strategy: 'Estratégia', + accept: 'Aceitar', + drop: 'Bloquear', + source: 'Origem', + anyWhere: 'Qualquer', + address: 'IPs especificados', + addressHelper: 'Suporta endereço IP ou segmento de IP', + allow: 'Permitir', + deny: 'Negar', + addressFormatError: 'Este campo deve ser um endereço IP válido.', + addressHelper1: + 'Suporta endereço IP ou intervalo de IP. Por exemplo, "172.16.10.11" ou "172.16.10.0/24".', + addressHelper2: + 'Para vários endereços IP, separe por vírgula. Por exemplo, "172.16.10.11, 172.16.0.0/24".', + allIP: 'Todos os IPs', + portRule: 'Regra | Regras', + createPortRule: '@:commons.button.create @.lower:firewall.portRule', + forwardRule: 'Regra de redirecionamento de porta | Regras de redirecionamento de porta', + createForwardRule: '@:commons.button.create @:firewall.forwardRule', + ipRule: 'Regra de IP | Regras de IP', + createIpRule: '@:commons.button.create @:firewall.ipRule', + userAgent: 'Filtro User-Agent', + sourcePort: 'Porta de origem', + targetIP: 'IP de destino', + targetPort: 'Porta de destino', + forwardHelper1: + 'Se você deseja redirecionar para a porta local, o IP de destino deve ser definido como "127.0.0.1".', + forwardHelper2: + 'Deixe o IP de destino em branco para redirecionar para a porta local.', + forwardHelper3: 'Somente suporta redirecionamento de porta IPv4.', + }, + runtime: { + runtime: 'Runtime', + image: 'Imagem', + workDir: 'Diretório de trabalho', + create: 'Criar runtime', + resource: 'Fonte', + appstore: 'Loja de Aplicativos', + local: 'Local', + app: 'Aplicação', + localHelper: 'O ambiente local precisa ser instalado manualmente', + version: 'Versão', + versionHelper: 'Versão do PHP, por exemplo, v8.0', + buildHelper: `Se mais extensões forem selecionadas, o uso da CPU será maior durante o processo de criação da imagem. Evite selecionar todas as extensões.`, + openrestyWarn: 'É necessário atualizar o PHP para OpenResty versão 1.21.4.1 ou superior para usar', + toupgrade: 'Atualizar', + edit: 'Editar runtime', + extendHelper: `Caso as extensões necessárias não estejam na lista, você pode inserir manualmente o nome da extensão. Por exemplo, insira "sockets" e selecione a primeira opção.`, + rebuildHelper: 'Após editar as extensões, é necessário recriar a aplicação PHP para aplicar as alterações', + rebuild: 'Recriar Aplicação PHP', + source: 'Fonte de extensões PHP', + ustc: 'Universidade de Ciência e Tecnologia da China', + netease: 'Netease', + aliyun: 'Alibaba Cloud', + default: 'Padrão', + tsinghua: 'Universidade Tsinghua', + xtomhk: 'Estação de Espelhos XTOM (Hong Kong)', + xtom: 'Estação de Espelhos XTOM (Global)', + phpsourceHelper: 'Escolha uma fonte adequada de acordo com o ambiente de rede.', + appPort: 'Porta da aplicação', + externalPort: 'Porta externa', + packageManager: 'Gerenciador de pacotes', + codeDir: 'Diretório do código', + appPortHelper: 'A porta usada pela aplicação.', + externalPortHelper: 'A porta exposta para o ambiente externo.', + runScript: 'Executar script', + runScriptHelper: 'A lista de comandos de inicialização é gerada a partir do arquivo package.json no diretório de origem.', + open: 'Abrir', + close: 'Fechar', + operatorHelper: + 'A operação {0} será realizada no ambiente selecionado. Deseja continuar?', + statusHelper: + 'Descrição do status: Iniciando - o contêiner foi iniciado, mas a aplicação está carregando; anormal - o contêiner foi iniciado, mas o status da aplicação está incorreto.', + taobao: 'Taobao', + tencent: 'Tencent', + imageSource: 'Fonte da imagem', + moduleManager: 'Gerenciamento de Módulos', + module: 'Módulo', + nodeOperatorHelper: + 'Deseja {0} o módulo {1}? Esta operação pode causar instabilidade no ambiente, confirme antes de prosseguir.', + customScript: 'Comando de inicialização personalizado', + customScriptHelper: 'Forneça um comando completo de inicialização. Por exemplo, "npm run start".', + portError: `Evite repetir a mesma porta.`, + systemRestartHelper: 'Descrição do status: Interrupção - falha ao adquirir status devido à reinicialização do sistema.', + javaScriptHelper: 'Forneça um comando completo de inicialização. Por exemplo, "java -jar halo.jar -Xmx1024M -Xms256M".', + javaDirHelper: 'O diretório deve conter arquivos jar, subdiretórios também são aceitos.', + goHelper: 'Forneça um comando completo de inicialização. Por exemplo, "go run main.go" ou "./main".', + goDirHelper: 'O diretório ou subdiretório deve conter arquivos Go ou binários.', + pythonHelper: + 'Forneça um comando completo de inicialização. Por exemplo, "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000".', + dotnetHelper: 'Forneça um comando completo de inicialização. Por exemplo, "dotnet MyWebApp.dll".', + + }, + process: { + pid: 'ID do Processo', + ppid: 'ID do Processo Pai', + numThreads: 'Threads', + memory: 'Memória', + diskRead: 'Leitura de Disco', + diskWrite: 'Escrita de Disco', + netSent: 'Envio (uplink)', + netRecv: 'Recebimento (downlink)', + numConnections: 'Conexões', + startTime: 'Hora de Início', + status: 'Status', + state: 'Estado', + running: 'Executando', + sleep: 'Dormindo', + stop: 'Parado', + idle: 'Ocioso', + zombie: 'Processo zumbi', + wait: 'Aguardando', + lock: 'Travado', + blocked: 'Bloqueado', + cmdLine: 'Comando de Inicialização', + basic: 'Básico', + mem: 'Memória', + openFiles: 'Arquivos Abertos', + file: 'Arquivo', + env: 'Ambientes', + noenv: 'Nenhum', + net: 'Conexões de Rede', + laddr: 'Endereço/porta de origem', + raddr: 'Endereço/porta de destino', + stopProcess: 'Encerrar', + viewDetails: 'Detalhes', + stopProcessWarn: 'Tem certeza de que deseja encerrar este processo (PID:{0})?', + processName: 'Nome do Processo', + + }, + tool: { + supervisor: { + loadStatusErr: 'Falha ao recuperar o status do processo, verifique o status do serviço do supervisor.', + notSupport: `Supervisor não detectado. Consulte o documento oficial para instalação.`, + list: 'Processo daemon | Processos daemon', + config: 'Configuração do Supervisor', + primaryConfig: 'Localização do arquivo de configuração principal', + notSupportCrl: `O supervisorctl não foi detectado. Consulte o documento oficial para instalação.`, + user: 'Usuário', + command: 'Comando', + dir: 'Diretório', + numprocs: 'Nº de processos', + initWarn: + 'Isso irá modificar o valor "files" na seção "[include"] do arquivo de configuração principal. O diretório de outros arquivos de configuração será: "{diretório de instalação do 1Panel}/1panel/tools/supervisord/supervisor.d/".', + operatorHelper: 'A operação {1} será realizada em {0}, deseja continuar? ', + uptime: 'Tempo de execução', + notStartWarn: `O Supervisor não foi iniciado. Inicie-o primeiro.`, + serviceName: 'Nome do serviço', + initHelper: `O serviço do Supervisor não foi inicializado. Clique em "Inicializar" para configurar.`, + serviceNameHelper: 'Nome do serviço do Supervisor gerenciado pelo systemctl, geralmente supervisor ou supervisord', + restartHelper: + 'Isso reiniciará o serviço após a inicialização, o que fará com que todos os processos daemon existentes sejam interrompidos.', + msg: 'Mensagem', + RUNNING: 'Executando', + STOPPED: 'Parado', + STOPPING: 'Parando', + STARTING: 'Iniciando', + FATAL: 'Falha ao iniciar', + BACKOFF: 'Exceção ao iniciar', + ERROR: 'Erro', + statusCode: 'Código de status', + manage: 'Gerenciamento', + }, + }, + alert: { + isAlert: 'Alerta', + alertCount: 'Contagem de Alertas', + clamHelper: 'Dispara alerta via SMS ao detectar arquivos infectados durante a varredura', + cronJobHelper: 'Dispara alerta via SMS ao falhar na execução de tarefas', + licenseHelper: 'A versão profissional suporta alertas via SMS', + alertCountHelper: 'Frequência máxima diária de alertas', + }, +}; + +export default { + ...fit2cloudPtBrLocale, + ...message, + ...xpackPtBrLocale, +}; diff --git a/frontend/src/views/login/components/login-form.vue b/frontend/src/views/login/components/login-form.vue index 780c774c3..f643d9eb9 100644 --- a/frontend/src/views/login/components/login-form.vue +++ b/frontend/src/views/login/components/login-form.vue @@ -55,20 +55,16 @@ English - - 日本語 - 中文(简体) 中文(繁體) English - - 日本語 - + Portugês (Brasil) + 日本語 + Русский + Bahasa Melayu - Русский - Bahasa Melayu @@ -278,7 +274,9 @@ function handleCommand(command: string) { dropdownText.value = '中文(简体)'; } else if (command === 'en') { dropdownText.value = 'English'; - } else if (command === 'tw') { + } else if (command === 'pt-BR') { + dropdownText.value = 'Português (Brasil)'; + }else if (command === 'tw') { dropdownText.value = '中文(繁體)'; } else if (command === 'jp') { dropdownText.value = '日本語'; diff --git a/frontend/src/views/setting/panel/index.vue b/frontend/src/views/setting/panel/index.vue index b73dc9fa5..c4060a0f3 100644 --- a/frontend/src/views/setting/panel/index.vue +++ b/frontend/src/views/setting/panel/index.vue @@ -318,6 +318,8 @@ const languageOptions = ref([ { value: 'zh', label: '中文(简体)' }, { value: 'tw', label: '中文(繁體)' }, ...(!globalStore.isIntl ? [{ value: 'en', label: 'English' }] : []), + { value: 'pt-BR', label: 'Português (Brasil)' }, + { value: 'jp', label: '日本語' }, { value: 'ru', label: 'Русский' }, { value: 'ms', label: 'Bahasa Melayu' }, ]);