1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-01-19 00:09:16 +08:00

fix: Fix the issue of interface returning internationalization failure (#7668)

This commit is contained in:
ssongliu 2025-01-08 15:19:37 +08:00 committed by GitHub
parent 381cb61185
commit 6c08a3114a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 83 additions and 87 deletions

View File

@ -75,6 +75,7 @@ func GetMsgByKey(key string) string {
return content return content
} }
//go:embed lang/*
var fs embed.FS var fs embed.FS
var bundle *i18n.Bundle var bundle *i18n.Bundle
@ -84,10 +85,6 @@ func UseI18n() gin.HandlerFunc {
if lang == "" { if lang == "" {
lang = "zh" 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) global.I18n = i18n.NewLocalizer(bundle, lang)
} }
} }
@ -103,7 +100,6 @@ func Init() {
_, _ = bundle.LoadMessageFileFS(fs, "lang/zh-Hant.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/zh-Hant.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/fa.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/fa.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/pt.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/pt.yaml")
// (dev: lucasplcorrea) - Add pt-BR.yaml
_, _ = bundle.LoadMessageFileFS(fs, "lang/pt-BR.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/pt-BR.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/ja.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/ja.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/ru.yaml") _, _ = bundle.LoadMessageFileFS(fs, "lang/ru.yaml")

View File

@ -205,7 +205,7 @@ ErrIPExist: "IP is exit"
#license #license
ErrLicense: "License format error, please check and try again!" ErrLicense: "License format error, please check and try again!"
ErrLicenseCheck: "License verification failed, please check and try again!" ErrLicenseCheck: "License verification failed, please check and try again!"
ErrXpackVersion: "License verification failed, this license is version-restricted and cannot be successfully imported. Please check and try again!"; ErrXpackVersion: "License verification failed, this license is version-restricted and cannot be successfully imported. Please check and try again!"
ErrLicenseSave: "Failed to save license information, error {{ .err }}, please try again!" ErrLicenseSave: "Failed to save license information, error {{ .err }}, please try again!"
ErrLicenseSync: "Failed to sync license information, no license information detected in the database!" ErrLicenseSync: "Failed to sync license information, no license information detected in the database!"
ErrXpackNotFound: "This section is a professional edition feature, please import the license first in Panel Settings-License interface" ErrXpackNotFound: "This section is a professional edition feature, please import the license first in Panel Settings-License interface"

View File

@ -1,76 +1,76 @@
ErrInvalidParams: "Erro nos parâmetros da solicitação: {{ .detail }}", ErrInvalidParams: "Erro nos parâmetros da solicitação: {{ .detail }}"
ErrTokenParse: "Erro na geração do token: {{ .detail }}", ErrTokenParse: "Erro na geração do token: {{ .detail }}"
ErrInitialPassword: "Erro na senha inicial", ErrInitialPassword: "Erro na senha inicial"
ErrInternalServer: "Erro interno do serviço: {{ .detail }}", ErrInternalServer: "Erro interno do serviço: {{ .detail }}"
ErrRecordExist: "Registro já existente", ErrRecordExist: "Registro já existente"
ErrRecordNotFound: "Registros não encontrados", ErrRecordNotFound: "Registros não encontrados"
ErrStructTransform: "Falha na conversão de tipo: {{ .detail }}", ErrStructTransform: "Falha na conversão de tipo: {{ .detail }}"
ErrNotLogin: "Usuário não está logado: {{ .detail }}", ErrNotLogin: "Usuário não está logado: {{ .detail }}"
ErrPasswordExpired: "A senha atual expirou: {{ .detail }}", ErrPasswordExpired: "A senha atual expirou: {{ .detail }}"
ErrNotSupportType: "O sistema não suporta o tipo atual: {{ .detail }}", ErrNotSupportType: "O sistema não suporta o tipo atual: {{ .detail }}"
ErrApiConfigStatusInvalid: "Acesso à interface da API proibido: {{ .detail }}", ErrApiConfigStatusInvalid: "Acesso à interface da API proibido: {{ .detail }}"
ErrApiConfigKeyInvalid: "Erro na chave da interface da API: {{ .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 }}", 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 }}", ErrApiConfigDisable: "Esta interface proíbe o uso de chamadas de API: {{ .detail }}"
#common #common
ErrNameIsExist: "O nome já existe", ErrNameIsExist: "O nome já existe"
ErrDemoEnvironment: "Servidor de demonstração, operação proibida!", ErrDemoEnvironment: "Servidor de demonstração, operação proibida!"
ErrCmdTimeout: "Tempo limite de execução do comando excedido!", ErrCmdTimeout: "Tempo limite de execução do comando excedido!"
ErrCmdIllegal: "O comando contém caracteres ilegais. Por favor, modifique e tente novamente!", ErrCmdIllegal: "O comando contém caracteres ilegais. Por favor, modifique e tente novamente!"
ErrPortExist: 'A porta {{ .port }} já está ocupada por {{ .type }} [{{ .name }}]', ErrPortExist: 'A porta {{ .port }} já está ocupada por {{ .type }} [{{ .name }}]'
TYPE_APP: "Aplicação", TYPE_APP: "Aplicação"
TYPE_RUNTIME: "Ambiente de execução", TYPE_RUNTIME: "Ambiente de execução"
TYPE_DOMAIN: "Nome de domínio", TYPE_DOMAIN: "Nome de domínio"
ErrTypePort: 'Erro no formato da porta {{ .name }}', ErrTypePort: 'Erro no formato da porta {{ .name }}'
ErrTypePortRange: 'O intervalo da porta deve estar entre 1-65535', ErrTypePortRange: 'O intervalo da porta deve estar entre 1-65535'
Success: "Sucesso", Success: "Sucesso"
Failed: "Falhou", Failed: "Falhou"
SystemRestart: "A reinicialização do sistema causa interrupção da tarefa", SystemRestart: "A reinicialização do sistema causa interrupção da tarefa"
#app #app
ErrPortInUsed: "A porta {{ .detail }} já está em uso", ErrPortInUsed: "A porta {{ .detail }} já está em uso"
ErrAppLimit: "O limite de instalação de aplicativos foi excedido", ErrAppLimit: "O limite de instalação de aplicativos foi excedido"
ErrAppRequired: "O aplicativo {{ .detail }} é necessário", ErrAppRequired: "O aplicativo {{ .detail }} é necessário"
ErrNotInstall: "Aplicativo não instalado", ErrNotInstall: "Aplicativo não instalado"
ErrPortInOtherApp: "A porta {{ .port }} já está em uso pelo aplicativo {{ .apps }}", 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!", ErrDbUserNotValid: "Banco de dados padrão, nome de usuário e senha não correspondem!"
ErrDockerComposeNotValid: "Erro no formato do arquivo docker-compose!", 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!", 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 }}", Err1PanelNetworkFailed: "Falha ao criar a rede padrão do container! {{ .detail }}"
ErrFileParse: "Falha ao analisar o arquivo docker-compose do aplicativo!", ErrFileParse: "Falha ao analisar o arquivo docker-compose do aplicativo!"
ErrInstallDirNotFound: "O diretório de instalação não existe", ErrInstallDirNotFound: "O diretório de instalação não existe"
AppStoreIsUpToDate: "Atualizado", AppStoreIsUpToDate: "Atualizado"
LocalAppVersionNull: "O aplicativo {{.name}} não está sincronizado com a versão! Não foi possível adicionar à lista de aplicativos", 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}}", LocalAppVersionErr: "Falha ao sincronizar a versão {{.version}} do {{.name}}! {{.err}}"
ErrFileNotFound: "O arquivo {{.name}} não existe", ErrFileNotFound: "O arquivo {{.name}} não existe"
ErrFileParseApp: "Falha ao analisar o arquivo {{.name}} {{.err}}", ErrFileParseApp: "Falha ao analisar o arquivo {{.name}} {{.err}}"
ErrAppDirNull: "O diretório da versão não existe", ErrAppDirNull: "O diretório da versão não existe"
LocalAppErr: "Falha ao sincronizar o aplicativo {{.name}}! {{.err}}", LocalAppErr: "Falha ao sincronizar o aplicativo {{.name}}! {{.err}}"
ErrContainerName: "O nome do container já existe", ErrContainerName: "O nome do container já existe"
ErrAppSystemRestart: "A reinicialização do 1Panel causa a interrupção da tarefa", ErrAppSystemRestart: "A reinicialização do 1Panel causa a interrupção da tarefa"
ErrCreateHttpClient: "Falha ao criar a solicitação HTTP {{.err}}", ErrCreateHttpClient: "Falha ao criar a solicitação HTTP {{.err}}"
ErrHttpReqTimeOut: "Tempo limite da solicitação excedido {{.err}}", ErrHttpReqTimeOut: "Tempo limite da solicitação excedido {{.err}}"
ErrHttpReqFailed: "Falha na solicitação {{.err}}", ErrHttpReqFailed: "Falha na solicitação {{.err}}"
ErrHttpReqNotFound: "O arquivo não existe", ErrHttpReqNotFound: "O arquivo não existe"
ErrNoSuchHost: "Falha na conexão de rede", ErrNoSuchHost: "Falha na conexão de rede"
ErrImagePullTimeOut: "Tempo limite ao puxar a imagem", ErrImagePullTimeOut: "Tempo limite ao puxar a imagem"
ErrContainerNotFound: "O container {{ .name }} não existe", ErrContainerNotFound: "O container {{ .name }} não existe"
ErrContainerMsg: "O container {{ .name }} está anormal, verifique o log na página do container para mais detalhes", 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}}", ErrAppBackup: "Falha no backup do aplicativo {{ .name }} erro {{.err}}"
ErrImagePull: "Falha ao puxar a imagem {{ .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", 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", ErrAppNameExist: "O nome do aplicativo já existe"
AppStoreIsSyncing: "A loja de aplicativos está sincronizando, tente novamente mais tarde", AppStoreIsSyncing: "A loja de aplicativos está sincronizando, tente novamente mais tarde"
ErrGetCompose: "Falha ao obter o arquivo docker-compose.yml! {{ .detail }}", ErrGetCompose: "Falha ao obter o arquivo docker-compose.yml! {{ .detail }}"
ErrAppWarn: "Status anormal, verifique o log", ErrAppWarn: "Status anormal, verifique o log"
ErrAppParamKey: "Exceção no campo do parâmetro {{ .name }}", ErrAppParamKey: "Exceção no campo do parâmetro {{ .name }}"
ErrAppUpgrade: "Falha ao atualizar o aplicativo {{ .name }} {{ .err }}", ErrAppUpgrade: "Falha ao atualizar o aplicativo {{ .name }} {{ .err }}"
AppRecover: "Aplicativo {{ .name }} revertido", AppRecover: "Aplicativo {{ .name }} revertido"
PullImageStart: "Iniciando o download da imagem {{ .name }}", PullImageStart: "Iniciando o download da imagem {{ .name }}"
PullImageSuccess: "Imagem baixada com sucesso", PullImageSuccess: "Imagem baixada com sucesso"
UpgradeAppStart: "Iniciando a atualização do aplicativo {{ .name }}", UpgradeAppStart: "Iniciando a atualização do aplicativo {{ .name }}"
UpgradeAppSuccess: "Aplicativo {{ .name }} atualizado com sucesso", UpgradeAppSuccess: "Aplicativo {{ .name }} atualizado com sucesso"
#file #file
ErrFileCanNotRead: "Não foi possível ler o arquivo" ErrFileCanNotRead: "Não foi possível ler o arquivo"

View File

@ -205,7 +205,7 @@ ErrIPExist: "IP уже существует"
#license #license
ErrLicense: "Ошибка формата лицензии, пожалуйста, проверьте и попробуйте снова!" ErrLicense: "Ошибка формата лицензии, пожалуйста, проверьте и попробуйте снова!"
ErrLicenseCheck: "Проверка лицензии не выполнена, пожалуйста, проверьте и попробуйте снова!" ErrLicenseCheck: "Проверка лицензии не выполнена, пожалуйста, проверьте и попробуйте снова!"
ErrXpackVersion: "Ошибка проверки лицензии, эта лицензия ограничена по версии и не может быть успешно импортирована. Пожалуйста, проверьте и попробуйте снова!"; ErrXpackVersion: "Ошибка проверки лицензии, эта лицензия ограничена по версии и не может быть успешно импортирована. Пожалуйста, проверьте и попробуйте снова!"
ErrLicenseSave: "Не удалось сохранить информацию о лицензии, ошибка {{ .err }}, пожалуйста, попробуйте снова!" ErrLicenseSave: "Не удалось сохранить информацию о лицензии, ошибка {{ .err }}, пожалуйста, попробуйте снова!"
ErrLicenseSync: "Не удалось синхронизировать информацию о лицензии, в базе данных не обнаружена информация о лицензии!" ErrLicenseSync: "Не удалось синхронизировать информацию о лицензии, в базе данных не обнаружена информация о лицензии!"
ErrXpackNotFound: "Этот раздел является функцией профессионального издания, пожалуйста, сначала импортируйте лицензию в интерфейсе Настройки панели — Лицензия" ErrXpackNotFound: "Этот раздел является функцией профессионального издания, пожалуйста, сначала импортируйте лицензию в интерфейсе Настройки панели — Лицензия"

View File

@ -76,7 +76,7 @@ UpgradeAppSuccess: "應用程式 {{ .name }} 升級成功"
#file #file
ErrFileCanNotRead: "此文件不支援預覽" ErrFileCanNotRead: "此文件不支援預覽"
ErrFileToLarge: "文件超過10M,無法打開" ErrFileToLarge: "文件超過10M無法打開"
ErrPathNotFound: "目錄不存在" ErrPathNotFound: "目錄不存在"
ErrMovePathFailed: "目標路徑不能包含原路徑!" ErrMovePathFailed: "目標路徑不能包含原路徑!"
ErrLinkPathNotFound: "目標路徑不存在!" ErrLinkPathNotFound: "目標路徑不存在!"
@ -91,7 +91,7 @@ ErrPathNotDelete: "所選目錄不可刪除"
#website #website
ErrDomainIsExist: "域名已存在" ErrDomainIsExist: "域名已存在"
ErrAliasIsExist: "代號已存在" ErrAliasIsExist: "代號已存在"
ErrAppDelete: '其他網站使用此應用,無法刪除' ErrAppDelete: '其他網站使用此應用無法刪除'
ErrGroupIsUsed: '分組正在使用中,無法刪除' ErrGroupIsUsed: '分組正在使用中,無法刪除'
ErrBackupMatch: '該備份文件與目前網站部分數據不匹配: {{ .detail}}' ErrBackupMatch: '該備份文件與目前網站部分數據不匹配: {{ .detail}}'
ErrBackupExist: '該備份文件對應部分原數據不存在: {{ .detail}}' ErrBackupExist: '該備份文件對應部分原數據不存在: {{ .detail}}'
@ -113,11 +113,11 @@ ErrSSLKeyFormat: '私鑰文件校驗錯誤'
ErrSSLCertificateFormat: '證書文件格式錯誤,請使用 pem 格式' ErrSSLCertificateFormat: '證書文件格式錯誤,請使用 pem 格式'
ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能為空' ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能為空'
ErrOpenrestyNotFound: 'Http 模式需要先安裝 Openresty' ErrOpenrestyNotFound: 'Http 模式需要先安裝 Openresty'
ApplySSLStart: '開始申請憑證,網域 [{{ .domain }}] 申請方式 [{{ .type }}] ' ApplySSLStart: '開始申請憑證網域 [{{ .domain }}] 申請方式 [{{ .type }}] '
dnsAccount: "DNS 自動" dnsAccount: "DNS 自動"
dnsManual: "DNS 手排" dnsManual: "DNS 手排"
http: "HTTP" http: "HTTP"
ApplySSLFailed: '申請 [{{ .domain }}] 憑證失敗, {{.detail}} ' ApplySSLFailed: '申請 [{{ .domain }}] 憑證失敗 {{.detail}} '
ApplySSLSuccess: '申請 [{{ .domain }}] 憑證成功! ' ApplySSLSuccess: '申請 [{{ .domain }}] 憑證成功! '
DNSAccountName: 'DNS 帳號 [{{ .name }}] 廠商 [{{.type}}]' DNSAccountName: 'DNS 帳號 [{{ .name }}] 廠商 [{{.type}}]'
PushDirLog: '憑證推送到目錄 [{{ .path }}] {{ .status }}' PushDirLog: '憑證推送到目錄 [{{ .path }}] {{ .status }}'
@ -205,8 +205,8 @@ ErrIPExist: "IP 已存在"
#license #license
ErrLicense: "許可證格式錯誤,請檢查後重試!" ErrLicense: "許可證格式錯誤,請檢查後重試!"
ErrLicenseCheck: "許可證校驗失敗,請檢查後重試!" ErrLicenseCheck: "許可證校驗失敗,請檢查後重試!"
ErrXpackVersion: "許可證校驗失敗,該許可證受版本限制,無法成功導入,請檢查後重試!"; ErrXpackVersion: "許可證校驗失敗,該許可證受版本限制,無法成功導入,請檢查後重試!"
ErrLicenseSave: "許可證資訊保存失敗,錯誤 {{ .err }}, 請重試!" ErrLicenseSave: "許可證資訊保存失敗,錯誤 {{ .err }} 請重試!"
ErrLicenseSync: "許可證資訊同步失敗,資料庫中未檢測到許可證資訊!" ErrLicenseSync: "許可證資訊同步失敗,資料庫中未檢測到許可證資訊!"
ErrXpackNotFound: "該部分為專業版功能,請先在 面板設定-許可證 界面導入許可證" ErrXpackNotFound: "該部分為專業版功能,請先在 面板設定-許可證 界面導入許可證"
ErrXpackNotActive: "該部分為專業版功能,請先在 面板設定-許可證 界面同步許可證狀態" ErrXpackNotActive: "該部分為專業版功能,請先在 面板設定-許可證 界面同步許可證狀態"

View File

@ -75,7 +75,7 @@ UpgradeAppSuccess: "应用 {{ .name }} 升级成功"
#file #file
ErrFileCanNotRead: "此文件不支持预览" ErrFileCanNotRead: "此文件不支持预览"
ErrFileToLarge: "文件超过10M,无法打开" ErrFileToLarge: "文件超过10M无法打开"
ErrPathNotFound: "目录不存在" ErrPathNotFound: "目录不存在"
ErrMovePathFailed: "目标路径不能包含原路径!" ErrMovePathFailed: "目标路径不能包含原路径!"
ErrLinkPathNotFound: "目标路径不存在!" ErrLinkPathNotFound: "目标路径不存在!"
@ -91,7 +91,7 @@ ErrPathNotDelete: "所选目录不可删除"
#website #website
ErrDomainIsExist: "域名已存在" ErrDomainIsExist: "域名已存在"
ErrAliasIsExist: "代号已存在" ErrAliasIsExist: "代号已存在"
ErrAppDelete: '其他网站使用此应用,无法删除' ErrAppDelete: '其他网站使用此应用无法删除'
ErrGroupIsUsed: '分组正在使用中,无法删除' ErrGroupIsUsed: '分组正在使用中,无法删除'
ErrBackupMatch: '该备份文件与当前网站部分数据不匹配 {{ .detail}}' ErrBackupMatch: '该备份文件与当前网站部分数据不匹配 {{ .detail}}'
ErrBackupExist: '该备份文件对应部分源数据不存在 {{ .detail}}' ErrBackupExist: '该备份文件对应部分源数据不存在 {{ .detail}}'
@ -113,11 +113,11 @@ ErrSSLKeyFormat: '私钥文件校验失败'
ErrSSLCertificateFormat: '证书文件格式错误,请使用 pem 格式' ErrSSLCertificateFormat: '证书文件格式错误,请使用 pem 格式'
ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能为空' ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能为空'
ErrOpenrestyNotFound: 'Http 模式需要首先安装 Openresty' ErrOpenrestyNotFound: 'Http 模式需要首先安装 Openresty'
ApplySSLStart: '开始申请证书,域名 [{{ .domain }}] 申请方式 [{{ .type }}] ' ApplySSLStart: '开始申请证书域名 [{{ .domain }}] 申请方式 [{{ .type }}] '
dnsAccount: "DNS 自动" dnsAccount: "DNS 自动"
dnsManual: "DNS 手动" dnsManual: "DNS 手动"
http: "HTTP" http: "HTTP"
ApplySSLFailed: '申请 [{{ .domain }}] 证书失败, {{.detail}} ' ApplySSLFailed: '申请 [{{ .domain }}] 证书失败 {{.detail}} '
ApplySSLSuccess: '申请 [{{ .domain }}] 证书成功!!' ApplySSLSuccess: '申请 [{{ .domain }}] 证书成功!!'
DNSAccountName: 'DNS 账号 [{{ .name }}] 厂商 [{{.type}}]' DNSAccountName: 'DNS 账号 [{{ .name }}] 厂商 [{{.type}}]'
PushDirLog: '证书推送到目录 [{{ .path }}] {{ .status }}' PushDirLog: '证书推送到目录 [{{ .path }}] {{ .status }}'
@ -258,7 +258,7 @@ UpdatePassword: "修改面板密码"
UpdatePort: "修改面板端口" UpdatePort: "修改面板端口"
UpdateUserNull: "错误:输入面板用户为空!" UpdateUserNull: "错误:输入面板用户为空!"
UpdateUserBlank: "错误:输入面板用户中包含空格字符!" UpdateUserBlank: "错误:输入面板用户中包含空格字符!"
UpdateUserFormat: "错误输入面板用户错误仅支持英文、中文、数字和_,长度3-30" UpdateUserFormat: "错误输入面板用户错误仅支持英文、中文、数字和_长度3-30"
UpdateUserErr: "错误:面板用户修改失败,{{ .err }}" UpdateUserErr: "错误:面板用户修改失败,{{ .err }}"
UpdateSuccessful: "修改成功!" UpdateSuccessful: "修改成功!"
UpdateUserResult: "面板用户:{{ .name }}" UpdateUserResult: "面板用户:{{ .name }}"