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' },
]);