mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-05 08:05:06 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e12ce056b | ||
|
|
c7bd036390 |
@@ -103,3 +103,46 @@ func (b *BaseApi) DeletePHPExtensions(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
helper.Success(c)
|
helper.Success(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Router /runtimes/php/extensions/detail [post]
|
||||||
|
func (b *BaseApi) GetPHPExtensions(c *gin.Context) {
|
||||||
|
var req request.PHPExtensionsDelete
|
||||||
|
if err := helper.CheckBindAndValidate(&req, c); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
item, err := phpExtensionsService.Get(req.ID)
|
||||||
|
if err != nil {
|
||||||
|
helper.InternalServer(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
helper.SuccessWithData(c, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Router /runtimes/php/extensions/import [post]
|
||||||
|
// @x-panel-log {"bodyKeys":["name"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"同步 PHP 扩展模版 [name]","formatEN":"Sync PHP extension template [name]"}
|
||||||
|
func (b *BaseApi) ImportPHPExtensions(c *gin.Context) {
|
||||||
|
var req request.PHPExtensionsCreate
|
||||||
|
if err := helper.CheckBindAndValidate(&req, c); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
status, err := phpExtensionsService.Import(req)
|
||||||
|
if err != nil {
|
||||||
|
helper.InternalServer(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
helper.SuccessWithData(c, status)
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Router /runtimes/php/extensions/push [post]
|
||||||
|
// @x-panel-log {"bodyKeys":["sourceNode","targetNodes"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"推送 PHP 扩展模版 [sourceNode] 至 [targetNodes]","formatEN":"Push PHP extension template from [sourceNode] to [targetNodes]"}
|
||||||
|
func (b *BaseApi) PushPHPExtensions(c *gin.Context) {
|
||||||
|
var req dto.PHPExtensionsPush
|
||||||
|
if err := helper.CheckBindAndValidate(&req, c); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := phpExtensionsService.Push(req); err != nil {
|
||||||
|
helper.InternalServer(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
helper.Success(c)
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
// PHPExtensionsPush is submitted to the master agent, with an explicit source node.
|
||||||
|
type PHPExtensionsPush struct {
|
||||||
|
SourceNode string `json:"sourceNode" validate:"required"`
|
||||||
|
TargetNodes []string `json:"targetNodes" validate:"required,min=1,dive,required"`
|
||||||
|
ID uint `json:"id" validate:"required"`
|
||||||
|
TaskID string `json:"taskID" validate:"required,uuid"`
|
||||||
|
}
|
||||||
@@ -4,7 +4,8 @@ import "github.com/1Panel-dev/1Panel/agent/app/dto"
|
|||||||
|
|
||||||
type PHPExtensionsSearch struct {
|
type PHPExtensionsSearch struct {
|
||||||
dto.PageInfo
|
dto.PageInfo
|
||||||
All bool `json:"all"`
|
All bool `json:"all"`
|
||||||
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PHPExtensionsCreate struct {
|
type PHPExtensionsCreate struct {
|
||||||
|
|||||||
@@ -1,13 +1,22 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/app/dto"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
|
"github.com/1Panel-dev/1Panel/agent/app/dto/request"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/dto/response"
|
"github.com/1Panel-dev/1Panel/agent/app/dto/response"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/model"
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
||||||
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
"github.com/1Panel-dev/1Panel/agent/app/repo"
|
||||||
"github.com/1Panel-dev/1Panel/agent/buserr"
|
"github.com/1Panel-dev/1Panel/agent/buserr"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/global"
|
||||||
|
"github.com/1Panel-dev/1Panel/agent/utils/xpack"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var phpExtensionsMu sync.Mutex
|
||||||
|
|
||||||
type PHPExtensionsService struct {
|
type PHPExtensionsService struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,6 +26,9 @@ type IPHPExtensionsService interface {
|
|||||||
Create(req request.PHPExtensionsCreate) error
|
Create(req request.PHPExtensionsCreate) error
|
||||||
Update(req request.PHPExtensionsUpdate) error
|
Update(req request.PHPExtensionsUpdate) error
|
||||||
Delete(req request.PHPExtensionsDelete) error
|
Delete(req request.PHPExtensionsDelete) error
|
||||||
|
Get(id uint) (model.PHPExtensions, error)
|
||||||
|
Import(req request.PHPExtensionsCreate) (string, error)
|
||||||
|
Push(req dto.PHPExtensionsPush) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewIPHPExtensionsService() IPHPExtensionsService {
|
func NewIPHPExtensionsService() IPHPExtensionsService {
|
||||||
@@ -30,7 +42,7 @@ func (p PHPExtensionsService) Page(req request.PHPExtensionsSearch) (int64, []re
|
|||||||
err error
|
err error
|
||||||
result []response.PHPExtensionsDTO
|
result []response.PHPExtensionsDTO
|
||||||
)
|
)
|
||||||
total, extensions, err = phpExtensionsRepo.Page(req.Page, req.PageSize)
|
total, extensions, err = phpExtensionsRepo.Page(req.Page, req.PageSize, repo.WithByLikeName(req.Name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, nil, err
|
return 0, nil, err
|
||||||
}
|
}
|
||||||
@@ -61,6 +73,8 @@ func (p PHPExtensionsService) List() ([]response.PHPExtensionsDTO, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p PHPExtensionsService) Create(req request.PHPExtensionsCreate) error {
|
func (p PHPExtensionsService) Create(req request.PHPExtensionsCreate) error {
|
||||||
|
phpExtensionsMu.Lock()
|
||||||
|
defer phpExtensionsMu.Unlock()
|
||||||
exist, _ := phpExtensionsRepo.GetFirst(repo.WithByName(req.Name))
|
exist, _ := phpExtensionsRepo.GetFirst(repo.WithByName(req.Name))
|
||||||
if exist.ID > 0 {
|
if exist.ID > 0 {
|
||||||
return buserr.New("ErrNameIsExist")
|
return buserr.New("ErrNameIsExist")
|
||||||
@@ -73,6 +87,8 @@ func (p PHPExtensionsService) Create(req request.PHPExtensionsCreate) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p PHPExtensionsService) Update(req request.PHPExtensionsUpdate) error {
|
func (p PHPExtensionsService) Update(req request.PHPExtensionsUpdate) error {
|
||||||
|
phpExtensionsMu.Lock()
|
||||||
|
defer phpExtensionsMu.Unlock()
|
||||||
exist, err := phpExtensionsRepo.GetFirst(repo.WithByID(req.ID))
|
exist, err := phpExtensionsRepo.GetFirst(repo.WithByID(req.ID))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -82,5 +98,41 @@ func (p PHPExtensionsService) Update(req request.PHPExtensionsUpdate) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p PHPExtensionsService) Delete(req request.PHPExtensionsDelete) error {
|
func (p PHPExtensionsService) Delete(req request.PHPExtensionsDelete) error {
|
||||||
|
phpExtensionsMu.Lock()
|
||||||
|
defer phpExtensionsMu.Unlock()
|
||||||
return phpExtensionsRepo.DeleteBy(repo.WithByID(req.ID))
|
return phpExtensionsRepo.DeleteBy(repo.WithByID(req.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p PHPExtensionsService) Get(id uint) (model.PHPExtensions, error) {
|
||||||
|
return phpExtensionsRepo.GetFirst(repo.WithByID(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p PHPExtensionsService) Import(req request.PHPExtensionsCreate) (string, error) {
|
||||||
|
phpExtensionsMu.Lock()
|
||||||
|
defer phpExtensionsMu.Unlock()
|
||||||
|
existing, err := phpExtensionsRepo.GetFirst(repo.WithByName(req.Name))
|
||||||
|
if err == nil {
|
||||||
|
if existing.Extensions == req.Extensions {
|
||||||
|
return "skipped", nil
|
||||||
|
}
|
||||||
|
return "", buserr.New("ErrPHPExtensionsConflict")
|
||||||
|
}
|
||||||
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
item := model.PHPExtensions{Name: req.Name, Extensions: req.Extensions}
|
||||||
|
if err := phpExtensionsRepo.Create(&item); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return "created", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p PHPExtensionsService) Push(req dto.PHPExtensionsPush) error {
|
||||||
|
if !global.IsMaster {
|
||||||
|
return errors.New("PHP extension template sync must be submitted to the master node")
|
||||||
|
}
|
||||||
|
if !xpack.MultiNodeProvider.IsXpack() {
|
||||||
|
return buserr.New("ErrXpackNotFound")
|
||||||
|
}
|
||||||
|
return xpack.MultiNodeProvider.PushPHPExtensionsToNode(req)
|
||||||
|
}
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Check finished: {{ .checked }} checked, {{ .updates
|
|||||||
ContainerImageCheckFailures: "{{ .count }} container checks failed; see the task log"
|
ContainerImageCheckFailures: "{{ .count }} container checks failed; see the task log"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "To check for image updates in the current runtime environment, please configure a proxy server first."
|
ErrImageCheckProxyRequired: "To check for image updates in the current runtime environment, please configure a proxy server first."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "A PHP extension template with this name exists with different content"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Comprobación finalizada: comprobados {{ .checked }
|
|||||||
ContainerImageCheckFailures: "Falló la comprobación de {{ .count }} contenedores; consulte el registro de la tarea"
|
ContainerImageCheckFailures: "Falló la comprobación de {{ .count }} contenedores; consulte el registro de la tarea"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "Para comprobar actualizaciones de imágenes en el entorno actual, configura primero un servidor proxy."
|
ErrImageCheckProxyRequired: "Para comprobar actualizaciones de imágenes en el entorno actual, configura primero un servidor proxy."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "Ya existe una plantilla de extensiones PHP con el mismo nombre y distinto contenido; no se ha sobrescrito"
|
||||||
|
|||||||
@@ -816,3 +816,5 @@ ContainerImageCheckSummary: "بررسی پایان یافت: بررسیشده
|
|||||||
ContainerImageCheckFailures: "بررسی {{ .count }} کانتینر ناموفق بود؛ گزارش وظیفه را مشاهده کنید"
|
ContainerImageCheckFailures: "بررسی {{ .count }} کانتینر ناموفق بود؛ گزارش وظیفه را مشاهده کنید"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "برای بررسی بهروزرسانی تصاویر در محیط فعلی، ابتدا یک سرور پروکسی پیکربندی کنید."
|
ErrImageCheckProxyRequired: "برای بررسی بهروزرسانی تصاویر در محیط فعلی، ابتدا یک سرور پروکسی پیکربندی کنید."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "الگوی افزونههای PHP با این نام و محتوای متفاوت از قبل وجود دارد؛ بازنویسی نشد"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "確認終了:成功 {{ .checked }}、更新可能
|
|||||||
ContainerImageCheckFailures: "{{ .count }} コンテナの確認に失敗しました。タスクログを確認してください"
|
ContainerImageCheckFailures: "{{ .count }} コンテナの確認に失敗しました。タスクログを確認してください"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "現在の実行環境でイメージの更新を確認するには、先にプロキシサーバーを設定してください。"
|
ErrImageCheckProxyRequired: "現在の実行環境でイメージの更新を確認するには、先にプロキシサーバーを設定してください。"
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "同名の PHP 拡張テンプレートが異なる内容で存在するため、上書きしませんでした"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "확인 종료: 성공 {{ .checked }}, 업데이트
|
|||||||
ContainerImageCheckFailures: "컨테이너 {{ .count }}개 확인에 실패했습니다. 작업 로그를 확인하세요"
|
ContainerImageCheckFailures: "컨테이너 {{ .count }}개 확인에 실패했습니다. 작업 로그를 확인하세요"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "현재 실행 환경에서 이미지 업데이트를 확인하려면 먼저 프록시 서버를 설정하세요."
|
ErrImageCheckProxyRequired: "현재 실행 환경에서 이미지 업데이트를 확인하려면 먼저 프록시 서버를 설정하세요."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "이름은 같지만 내용이 다른 PHP 확장 템플릿이 이미 있어 덮어쓰지 않았습니다"
|
||||||
|
|||||||
@@ -806,3 +806,5 @@ ContainerImageCheckSummary: "ກວດສອບສິ້ນສຸດ: ກວດ
|
|||||||
ContainerImageCheckFailures: "ກວດສອບ {{ .count }} ຄອນເທນເນີລົ້ມເຫຼວ; ກະລຸນາເບິ່ງບັນທຶກວຽກ"
|
ContainerImageCheckFailures: "ກວດສອບ {{ .count }} ຄອນເທນເນີລົ້ມເຫຼວ; ກະລຸນາເບິ່ງບັນທຶກວຽກ"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "ເພື່ອກວດສອບການອັບເດດອິມເມຈໃນສະພາບແວດລ້ອມປັດຈຸບັນ ກະລຸນາຕັ້ງຄ່າພຣັອກຊີເຊີບເວີກ່ອນ."
|
ErrImageCheckProxyRequired: "ເພື່ອກວດສອບການອັບເດດອິມເມຈໃນສະພາບແວດລ້ອມປັດຈຸບັນ ກະລຸນາຕັ້ງຄ່າພຣັອກຊີເຊີບເວີກ່ອນ."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "ມີແມ່ແບບສ່ວນຂະຫຍາຍ PHP ຊື່ດຽວກັນແຕ່ເນື້ອຫາຕ່າງກັນຢູ່ແລ້ວ; ບໍ່ໄດ້ຂຽນທັບ"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Semakan selesai: disemak {{ .checked }}, boleh dike
|
|||||||
ContainerImageCheckFailures: "Semakan {{ .count }} kontena gagal; lihat log tugas"
|
ContainerImageCheckFailures: "Semakan {{ .count }} kontena gagal; lihat log tugas"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "Untuk menyemak kemas kini imej dalam persekitaran semasa, sila konfigurasikan pelayan proksi terlebih dahulu."
|
ErrImageCheckProxyRequired: "Untuk menyemak kemas kini imej dalam persekitaran semasa, sila konfigurasikan pelayan proksi terlebih dahulu."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "Templat sambungan PHP dengan nama yang sama tetapi kandungan berbeza sudah wujud; tidak ditulis ganti"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Verificação concluída: verificados {{ .checked }
|
|||||||
ContainerImageCheckFailures: "Falha na verificação de {{ .count }} contêineres; consulte o log da tarefa"
|
ContainerImageCheckFailures: "Falha na verificação de {{ .count }} contêineres; consulte o log da tarefa"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "Para verificar atualizações de imagens no ambiente atual, configure primeiro um servidor proxy."
|
ErrImageCheckProxyRequired: "Para verificar atualizações de imagens no ambiente atual, configure primeiro um servidor proxy."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "Já existe um modelo de extensões PHP com o mesmo nome e conteúdo diferente; ele não foi sobrescrito"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Проверка завершена: провере
|
|||||||
ContainerImageCheckFailures: "Не удалось проверить контейнеры: {{ .count }}. Подробности в журнале задачи"
|
ContainerImageCheckFailures: "Не удалось проверить контейнеры: {{ .count }}. Подробности в журнале задачи"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "Для проверки обновлений образов в текущей среде сначала настройте прокси-сервер."
|
ErrImageCheckProxyRequired: "Для проверки обновлений образов в текущей среде сначала настройте прокси-сервер."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "Шаблон расширений PHP с таким именем уже существует и имеет другое содержимое; перезапись не выполнена"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "Denetim tamamlandı: denetlenen {{ .checked }}, gü
|
|||||||
ContainerImageCheckFailures: "{{ .count }} konteyner denetlenemedi; görev günlüğünü inceleyin"
|
ContainerImageCheckFailures: "{{ .count }} konteyner denetlenemedi; görev günlüğünü inceleyin"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "Geçerli çalışma ortamında imaj güncellemelerini kontrol etmek için önce bir proxy sunucusu yapılandırın."
|
ErrImageCheckProxyRequired: "Geçerli çalışma ortamında imaj güncellemelerini kontrol etmek için önce bir proxy sunucusu yapılandırın."
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "Aynı ada sahip farklı içerikli bir PHP eklenti şablonu zaten var; üzerine yazılmadı"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "檢查結束:成功 {{ .checked }},可升級 {{
|
|||||||
ContainerImageCheckFailures: "{{ .count }} 個容器檢查失敗,請查看任務日誌"
|
ContainerImageCheckFailures: "{{ .count }} 個容器檢查失敗,請查看任務日誌"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "目前運行環境下,如需檢查映像是否更新,請先設定代理伺服器"
|
ErrImageCheckProxyRequired: "目前運行環境下,如需檢查映像是否更新,請先設定代理伺服器"
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "同名 PHP 擴充模版已存在且內容不同,未覆蓋"
|
||||||
|
|||||||
@@ -815,3 +815,5 @@ ContainerImageCheckSummary: "检查结束:成功 {{ .checked }},可升级 {{
|
|||||||
ContainerImageCheckFailures: "{{ .count }} 个容器检查失败,请查看任务日志"
|
ContainerImageCheckFailures: "{{ .count }} 个容器检查失败,请查看任务日志"
|
||||||
|
|
||||||
ErrImageCheckProxyRequired: "当前运行环境下,如需检查镜像是否更新,请优先配置代理服务器"
|
ErrImageCheckProxyRequired: "当前运行环境下,如需检查镜像是否更新,请优先配置代理服务器"
|
||||||
|
|
||||||
|
ErrPHPExtensionsConflict: "同名 PHP 扩展模版已存在且内容不同,未覆盖"
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ func (r *RuntimeRouter) InitRouter(Router *gin.RouterGroup) {
|
|||||||
groupRouter.POST("/node/modules/operate", baseApi.OperateNodeModules)
|
groupRouter.POST("/node/modules/operate", baseApi.OperateNodeModules)
|
||||||
|
|
||||||
groupRouter.POST("/php/extensions/search", baseApi.PagePHPExtensions)
|
groupRouter.POST("/php/extensions/search", baseApi.PagePHPExtensions)
|
||||||
|
groupRouter.POST("/php/extensions/detail", baseApi.GetPHPExtensions)
|
||||||
|
groupRouter.POST("/php/extensions/import", baseApi.ImportPHPExtensions)
|
||||||
|
groupRouter.POST("/php/extensions/push", baseApi.PushPHPExtensions)
|
||||||
groupRouter.POST("/php/extensions", baseApi.CreatePHPExtensions)
|
groupRouter.POST("/php/extensions", baseApi.CreatePHPExtensions)
|
||||||
groupRouter.POST("/php/extensions/update", baseApi.UpdatePHPExtensions)
|
groupRouter.POST("/php/extensions/update", baseApi.UpdatePHPExtensions)
|
||||||
groupRouter.POST("/php/extensions/del", baseApi.DeletePHPExtensions)
|
groupRouter.POST("/php/extensions/del", baseApi.DeletePHPExtensions)
|
||||||
|
|||||||
@@ -72,3 +72,7 @@ func (m *multiNodeHelper) PushSSLToNode(websiteSSL *model.WebsiteSSL) error {
|
|||||||
func (m *multiNodeHelper) GetAgentInfo() (*dto.AgentInfo, error) {
|
func (m *multiNodeHelper) GetAgentInfo() (*dto.AgentInfo, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *multiNodeHelper) PushPHPExtensionsToNode(req dto.PHPExtensionsPush) error {
|
||||||
|
return buserr.New("ErrXpackNotFound")
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ type MultiNodeProvider interface {
|
|||||||
LoadRequestTransport() *http.Transport
|
LoadRequestTransport() *http.Transport
|
||||||
ValidateCertificate(c *gin.Context) bool
|
ValidateCertificate(c *gin.Context) bool
|
||||||
PushSSLToNode(websiteSSL *model.WebsiteSSL) error
|
PushSSLToNode(websiteSSL *model.WebsiteSSL) error
|
||||||
|
PushPHPExtensionsToNode(req dto.PHPExtensionsPush) error
|
||||||
GetAgentInfo() (*dto.AgentInfo, error)
|
GetAgentInfo() (*dto.AgentInfo, error)
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-15
@@ -189,21 +189,22 @@ var WebUrlMap = map[string]struct{}{
|
|||||||
"/xpack/monitor/trend": {},
|
"/xpack/monitor/trend": {},
|
||||||
"/xpack/monitor/websites": {},
|
"/xpack/monitor/websites": {},
|
||||||
|
|
||||||
"/xpack/tamper": {},
|
"/xpack/tamper": {},
|
||||||
"/xpack/gpu": {},
|
"/xpack/gpu": {},
|
||||||
"/xpack/alert/dashboard": {},
|
"/xpack/alert/dashboard": {},
|
||||||
"/xpack/alert/log": {},
|
"/xpack/alert/log": {},
|
||||||
"/xpack/alert/setting": {},
|
"/xpack/alert/setting": {},
|
||||||
"/xpack/setting": {},
|
"/xpack/setting": {},
|
||||||
"/xpack/node/dashboard": {},
|
"/xpack/node/dashboard": {},
|
||||||
"/xpack/node": {},
|
"/xpack/node": {},
|
||||||
"/xpack/simple-node": {},
|
"/xpack/simple-node": {},
|
||||||
"/xpack/sync/file": {},
|
"/xpack/sync/file": {},
|
||||||
"/xpack/sync/image": {},
|
"/xpack/sync/image": {},
|
||||||
"/xpack/sync/ssl": {},
|
"/xpack/sync/php-extensions": {},
|
||||||
"/xpack/sync/app": {},
|
"/xpack/sync/ssl": {},
|
||||||
"/xpack/app": {},
|
"/xpack/sync/app": {},
|
||||||
"/xpack/app-upgrade": {},
|
"/xpack/app": {},
|
||||||
|
"/xpack/app-upgrade": {},
|
||||||
|
|
||||||
"/xpack/cluster/mysql": {},
|
"/xpack/cluster/mysql": {},
|
||||||
"/xpack/cluster/postgres": {},
|
"/xpack/cluster/postgres": {},
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Installation failed and service recovery is incomplet
|
|||||||
MCPInstallLocalImage: "The image exists locally; skip downloading"
|
MCPInstallLocalImage: "The image exists locally; skip downloading"
|
||||||
MCPInstallVerifyImage: "Validate the image version and managed service contract"
|
MCPInstallVerifyImage: "Validate the image version and managed service contract"
|
||||||
MCPInstallVerifiedImage: "Image validation passed"
|
MCPInstallVerifiedImage: "Image validation passed"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "No target nodes remain after excluding the source node"
|
||||||
|
PHPExtensionsSyncTask: "Sync PHP extension template [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "Node [{{ .node }}] already has an identical template; skipped"
|
||||||
MCPInstallCleanup: "Clean up the previous container"
|
MCPInstallCleanup: "Clean up the previous container"
|
||||||
MCPInstallOldContainerRemoved: "Previous container removed"
|
MCPInstallOldContainerRemoved: "Previous container removed"
|
||||||
MCPInstallOldImageRemoved: "Previous image removed"
|
MCPInstallOldImageRemoved: "Previous image removed"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Instalación fallida y recuperación incompleta. Veri
|
|||||||
MCPInstallLocalImage: "La imagen ya existe localmente; omitir la descarga"
|
MCPInstallLocalImage: "La imagen ya existe localmente; omitir la descarga"
|
||||||
MCPInstallVerifyImage: "Validar la versión de la imagen y el contrato del servicio administrado"
|
MCPInstallVerifyImage: "Validar la versión de la imagen y el contrato del servicio administrado"
|
||||||
MCPInstallVerifiedImage: "La imagen superó la validación"
|
MCPInstallVerifiedImage: "La imagen superó la validación"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "No quedan nodos de destino tras excluir el nodo de origen"
|
||||||
|
PHPExtensionsSyncTask: "Sincronizar plantilla de extensiones PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "El nodo [{{ .node }}] ya tiene una plantilla idéntica; se ha omitido"
|
||||||
MCPInstallCleanup: "Limpiar el contenedor anterior"
|
MCPInstallCleanup: "Limpiar el contenedor anterior"
|
||||||
MCPInstallOldContainerRemoved: "Contenedor anterior eliminado"
|
MCPInstallOldContainerRemoved: "Contenedor anterior eliminado"
|
||||||
MCPInstallOldImageRemoved: "Imagen anterior eliminada"
|
MCPInstallOldImageRemoved: "Imagen anterior eliminada"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "نصب ناموفق و بازیابی سرویس نا
|
|||||||
MCPInstallLocalImage: "تصویر بهصورت محلی موجود است؛ دریافت انجام نمیشود"
|
MCPInstallLocalImage: "تصویر بهصورت محلی موجود است؛ دریافت انجام نمیشود"
|
||||||
MCPInstallVerifyImage: "اعتبارسنجی نسخه تصویر و قرارداد سرویس مدیریتشده"
|
MCPInstallVerifyImage: "اعتبارسنجی نسخه تصویر و قرارداد سرویس مدیریتشده"
|
||||||
MCPInstallVerifiedImage: "اعتبارسنجی تصویر موفق بود"
|
MCPInstallVerifiedImage: "اعتبارسنجی تصویر موفق بود"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "پس از حذف گره مبدأ از فهرست، هیچ گره مقصدی باقی نمانده است"
|
||||||
|
PHPExtensionsSyncTask: "همگامسازی الگوی افزونههای PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "گره [{{ .node }}] از قبل الگوی یکسانی دارد؛ رد شد"
|
||||||
MCPInstallCleanup: "پاکسازی کانتینر قبلی"
|
MCPInstallCleanup: "پاکسازی کانتینر قبلی"
|
||||||
MCPInstallOldContainerRemoved: "کانتینر قبلی حذف شد"
|
MCPInstallOldContainerRemoved: "کانتینر قبلی حذف شد"
|
||||||
MCPInstallOldImageRemoved: "ایمیج قبلی حذف شد"
|
MCPInstallOldImageRemoved: "ایمیج قبلی حذف شد"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "インストールに失敗し、サービスの復
|
|||||||
MCPInstallLocalImage: "ローカルにイメージが存在するため、ダウンロードをスキップ"
|
MCPInstallLocalImage: "ローカルにイメージが存在するため、ダウンロードをスキップ"
|
||||||
MCPInstallVerifyImage: "イメージのバージョンと管理対象サービスの契約を検証"
|
MCPInstallVerifyImage: "イメージのバージョンと管理対象サービスの契約を検証"
|
||||||
MCPInstallVerifiedImage: "イメージの検証に成功しました"
|
MCPInstallVerifiedImage: "イメージの検証に成功しました"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "ソースノードを除外した結果、同期先ノードがありません"
|
||||||
|
PHPExtensionsSyncTask: "PHP 拡張テンプレート [{{ .name }}] を同期"
|
||||||
|
PHPExtensionsSyncSkipped: "ノード [{{ .node }}] に同一のテンプレートが存在するため、スキップしました"
|
||||||
MCPInstallCleanup: "以前のコンテナーをクリーンアップ"
|
MCPInstallCleanup: "以前のコンテナーをクリーンアップ"
|
||||||
MCPInstallOldContainerRemoved: "以前のコンテナーを削除しました"
|
MCPInstallOldContainerRemoved: "以前のコンテナーを削除しました"
|
||||||
MCPInstallOldImageRemoved: "以前のイメージを削除しました"
|
MCPInstallOldImageRemoved: "以前のイメージを削除しました"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "설치에 실패했고 서비스 복원이 불완전
|
|||||||
MCPInstallLocalImage: "로컬 이미지가 있어 다운로드를 건너뜁니다"
|
MCPInstallLocalImage: "로컬 이미지가 있어 다운로드를 건너뜁니다"
|
||||||
MCPInstallVerifyImage: "이미지 버전 및 관리형 서비스 계약 검증"
|
MCPInstallVerifyImage: "이미지 버전 및 관리형 서비스 계약 검증"
|
||||||
MCPInstallVerifiedImage: "이미지 검증 통과"
|
MCPInstallVerifiedImage: "이미지 검증 통과"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "소스 노드를 제외하면 동기화할 대상 노드가 없습니다"
|
||||||
|
PHPExtensionsSyncTask: "PHP 확장 템플릿 [{{ .name }}] 동기화"
|
||||||
|
PHPExtensionsSyncSkipped: "노드 [{{ .node }}]에 동일한 템플릿이 이미 있어 건너뛰었습니다"
|
||||||
MCPInstallCleanup: "이전 컨테이너 정리"
|
MCPInstallCleanup: "이전 컨테이너 정리"
|
||||||
MCPInstallOldContainerRemoved: "이전 컨테이너가 삭제되었습니다"
|
MCPInstallOldContainerRemoved: "이전 컨테이너가 삭제되었습니다"
|
||||||
MCPInstallOldImageRemoved: "이전 이미지가 삭제되었습니다"
|
MCPInstallOldImageRemoved: "이전 이미지가 삭제되었습니다"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "ຕິດຕັ້ງບໍ່ສຳເລັດແ
|
|||||||
MCPInstallLocalImage: "ມີອິມເມດຢູ່ໃນເຄື່ອງແລ້ວ; ຂ້າມການດາວໂຫຼດ"
|
MCPInstallLocalImage: "ມີອິມເມດຢູ່ໃນເຄື່ອງແລ້ວ; ຂ້າມການດາວໂຫຼດ"
|
||||||
MCPInstallVerifyImage: "ກວດສອບເວີຊັນອິມເມດ ແລະ ສັນຍາບໍລິການທີ່ຈັດການ"
|
MCPInstallVerifyImage: "ກວດສອບເວີຊັນອິມເມດ ແລະ ສັນຍາບໍລິການທີ່ຈັດການ"
|
||||||
MCPInstallVerifiedImage: "ກວດສອບອິມເມດຜ່ານແລ້ວ"
|
MCPInstallVerifiedImage: "ກວດສອບອິມເມດຜ່ານແລ້ວ"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "ບໍ່ມີໂນດປາຍທາງຫຼັງຈາກຍົກເວັ້ນໂນດຕົ້ນທາງ"
|
||||||
|
PHPExtensionsSyncTask: "ຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "ໂນດ [{{ .node }}] ມີແມ່ແບບດຽວກັນຢູ່ແລ້ວ; ຂ້າມແລ້ວ"
|
||||||
MCPInstallCleanup: "ກຳລັງລ້າງຄອນເທນເນີເກົ່າ"
|
MCPInstallCleanup: "ກຳລັງລ້າງຄອນເທນເນີເກົ່າ"
|
||||||
MCPInstallOldContainerRemoved: "ລຶບຄອນເທນເນີເກົ່າແລ້ວ"
|
MCPInstallOldContainerRemoved: "ລຶບຄອນເທນເນີເກົ່າແລ້ວ"
|
||||||
MCPInstallOldImageRemoved: "ລຶບອິມເມຈເກົ່າແລ້ວ"
|
MCPInstallOldImageRemoved: "ລຶບອິມເມຈເກົ່າແລ້ວ"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Pemasangan gagal dan pemulihan tidak lengkap. Sahkan
|
|||||||
MCPInstallLocalImage: "Imej sudah tersedia secara setempat; langkau muat turun"
|
MCPInstallLocalImage: "Imej sudah tersedia secara setempat; langkau muat turun"
|
||||||
MCPInstallVerifyImage: "Sahkan versi imej dan kontrak perkhidmatan terurus"
|
MCPInstallVerifyImage: "Sahkan versi imej dan kontrak perkhidmatan terurus"
|
||||||
MCPInstallVerifiedImage: "Pengesahan imej berjaya"
|
MCPInstallVerifiedImage: "Pengesahan imej berjaya"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "Tiada nod sasaran selepas nod sumber dikecualikan"
|
||||||
|
PHPExtensionsSyncTask: "Segerakkan templat sambungan PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "Nod [{{ .node }}] sudah mempunyai templat yang sama; dilangkau"
|
||||||
MCPInstallCleanup: "Bersihkan bekas terdahulu"
|
MCPInstallCleanup: "Bersihkan bekas terdahulu"
|
||||||
MCPInstallOldContainerRemoved: "Bekas terdahulu dipadam"
|
MCPInstallOldContainerRemoved: "Bekas terdahulu dipadam"
|
||||||
MCPInstallOldImageRemoved: "Imej terdahulu dipadam"
|
MCPInstallOldImageRemoved: "Imej terdahulu dipadam"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Instalação falhou e a recuperação está incomplet
|
|||||||
MCPInstallLocalImage: "A imagem já existe localmente; ignorar o download"
|
MCPInstallLocalImage: "A imagem já existe localmente; ignorar o download"
|
||||||
MCPInstallVerifyImage: "Validar a versão da imagem e o contrato do serviço gerenciado"
|
MCPInstallVerifyImage: "Validar a versão da imagem e o contrato do serviço gerenciado"
|
||||||
MCPInstallVerifiedImage: "A imagem passou na validação"
|
MCPInstallVerifiedImage: "A imagem passou na validação"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "Não há nós de destino após excluir o nó de origem"
|
||||||
|
PHPExtensionsSyncTask: "Sincronizar modelo de extensões PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "O nó [{{ .node }}] já possui um modelo idêntico; ignorado"
|
||||||
MCPInstallCleanup: "Limpar o contêiner anterior"
|
MCPInstallCleanup: "Limpar o contêiner anterior"
|
||||||
MCPInstallOldContainerRemoved: "Contêiner anterior removido"
|
MCPInstallOldContainerRemoved: "Contêiner anterior removido"
|
||||||
MCPInstallOldImageRemoved: "Imagem anterior removida"
|
MCPInstallOldImageRemoved: "Imagem anterior removida"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Установка не удалась, служба
|
|||||||
MCPInstallLocalImage: "Образ уже есть локально; пропустить загрузку"
|
MCPInstallLocalImage: "Образ уже есть локально; пропустить загрузку"
|
||||||
MCPInstallVerifyImage: "Проверить версию образа и контракт управляемой службы"
|
MCPInstallVerifyImage: "Проверить версию образа и контракт управляемой службы"
|
||||||
MCPInstallVerifiedImage: "Образ успешно проверен"
|
MCPInstallVerifiedImage: "Образ успешно проверен"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "После исключения исходного узла не осталось целевых узлов"
|
||||||
|
PHPExtensionsSyncTask: "Синхронизация шаблона расширений PHP [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "На узле [{{ .node }}] уже есть идентичный шаблон; пропущено"
|
||||||
MCPInstallCleanup: "Очистка предыдущего контейнера"
|
MCPInstallCleanup: "Очистка предыдущего контейнера"
|
||||||
MCPInstallOldContainerRemoved: "Предыдущий контейнер удалён"
|
MCPInstallOldContainerRemoved: "Предыдущий контейнер удалён"
|
||||||
MCPInstallOldImageRemoved: "Предыдущий образ удалён"
|
MCPInstallOldImageRemoved: "Предыдущий образ удалён"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "Kurulum başarısız ve hizmet tam geri yüklenemedi.
|
|||||||
MCPInstallLocalImage: "İmaj yerel olarak mevcut; indirmeyi atla"
|
MCPInstallLocalImage: "İmaj yerel olarak mevcut; indirmeyi atla"
|
||||||
MCPInstallVerifyImage: "İmaj sürümünü ve yönetilen hizmet sözleşmesini doğrula"
|
MCPInstallVerifyImage: "İmaj sürümünü ve yönetilen hizmet sözleşmesini doğrula"
|
||||||
MCPInstallVerifiedImage: "İmaj doğrulaması başarılı"
|
MCPInstallVerifiedImage: "İmaj doğrulaması başarılı"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "Kaynak düğüm hariç tutulduktan sonra hedef düğüm kalmadı"
|
||||||
|
PHPExtensionsSyncTask: "PHP eklenti şablonunu eşitle [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "[{{ .node }}] düğümünde aynı şablon zaten var; atlandı"
|
||||||
MCPInstallCleanup: "Önceki konteyneri temizle"
|
MCPInstallCleanup: "Önceki konteyneri temizle"
|
||||||
MCPInstallOldContainerRemoved: "Önceki konteyner silindi"
|
MCPInstallOldContainerRemoved: "Önceki konteyner silindi"
|
||||||
MCPInstallOldImageRemoved: "Önceki imaj silindi"
|
MCPInstallOldImageRemoved: "Önceki imaj silindi"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "安裝失敗且原服務還原不完整,請核對
|
|||||||
MCPInstallLocalImage: "本機映像已存在,略過下載"
|
MCPInstallLocalImage: "本機映像已存在,略過下載"
|
||||||
MCPInstallVerifyImage: "驗證映像版本及受管契約"
|
MCPInstallVerifyImage: "驗證映像版本及受管契約"
|
||||||
MCPInstallVerifiedImage: "映像驗證通過"
|
MCPInstallVerifiedImage: "映像驗證通過"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "排除來源節點後,沒有可同步的目標節點"
|
||||||
|
PHPExtensionsSyncTask: "同步 PHP 擴充模版 [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "節點 [{{ .node }}] 已存在相同模版,略過"
|
||||||
MCPInstallCleanup: "正在清理舊容器"
|
MCPInstallCleanup: "正在清理舊容器"
|
||||||
MCPInstallOldContainerRemoved: "舊容器已刪除"
|
MCPInstallOldContainerRemoved: "舊容器已刪除"
|
||||||
MCPInstallOldImageRemoved: "舊映像已刪除"
|
MCPInstallOldImageRemoved: "舊映像已刪除"
|
||||||
|
|||||||
@@ -587,6 +587,10 @@ MCPInstallRecoveryFailed: "安装失败且原服务恢复不完整,请核对
|
|||||||
MCPInstallLocalImage: "本地镜像已存在,跳过下载"
|
MCPInstallLocalImage: "本地镜像已存在,跳过下载"
|
||||||
MCPInstallVerifyImage: "校验镜像版本和受管契约"
|
MCPInstallVerifyImage: "校验镜像版本和受管契约"
|
||||||
MCPInstallVerifiedImage: "镜像校验通过"
|
MCPInstallVerifiedImage: "镜像校验通过"
|
||||||
|
|
||||||
|
PHPExtensionsNoTargets: "排除源节点后,没有可同步的目标节点"
|
||||||
|
PHPExtensionsSyncTask: "同步 PHP 扩展模版 [{{ .name }}]"
|
||||||
|
PHPExtensionsSyncSkipped: "节点 [{{ .node }}] 已存在相同模版,跳过"
|
||||||
MCPInstallCleanup: "正在清理旧容器"
|
MCPInstallCleanup: "正在清理旧容器"
|
||||||
MCPInstallOldContainerRemoved: "旧容器已删除"
|
MCPInstallOldContainerRemoved: "旧容器已删除"
|
||||||
MCPInstallOldImageRemoved: "旧镜像已删除"
|
MCPInstallOldImageRemoved: "旧镜像已删除"
|
||||||
|
|||||||
@@ -199,5 +199,7 @@ func checkSession(c *gin.Context, refresh bool) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isLocalAPI(urlPath string) bool {
|
func isLocalAPI(urlPath string) bool {
|
||||||
return urlPath == "/api/v2/core/xpack/sync/ssl" || urlPath == "/api/v2/core/xpack/settings/search"
|
return urlPath == "/api/v2/core/xpack/sync/ssl" ||
|
||||||
|
urlPath == "/api/v2/core/xpack/sync/php/extensions" ||
|
||||||
|
urlPath == "/api/v2/core/xpack/settings/search"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ func isLocalSyncRequest(reqPath, clientIP, token string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch reqPath {
|
switch reqPath {
|
||||||
case "/api/v2/core/xpack/sync/ssl":
|
case "/api/v2/core/xpack/sync/ssl", "/api/v2/core/xpack/sync/php/extensions":
|
||||||
return token != ""
|
return token != ""
|
||||||
case "/api/v2/core/settings/ssl/reload":
|
case "/api/v2/core/settings/ssl/reload":
|
||||||
return token != ""
|
return token != ""
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
import { CommonModel, ReqPage } from '.';
|
import { CommonModel, ReqPage } from '.';
|
||||||
import { App } from './app';
|
import { App } from './app';
|
||||||
export namespace Runtime {
|
export namespace Runtime {
|
||||||
|
export interface PHPExtensionsPush {
|
||||||
|
sourceNode: string;
|
||||||
|
targetNodes: string[];
|
||||||
|
id: number;
|
||||||
|
taskID: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface Runtime extends CommonModel {
|
export interface Runtime extends CommonModel {
|
||||||
name: string;
|
name: string;
|
||||||
appDetailID: number;
|
appDetailID: number;
|
||||||
|
|||||||
@@ -46,8 +46,13 @@ export const OperateNodeModule = (req: Runtime.NodeModuleReq) => {
|
|||||||
return http.post<any>(`/runtimes/node/modules/operate`, req, TimeoutEnum.T_10M);
|
return http.post<any>(`/runtimes/node/modules/operate`, req, TimeoutEnum.T_10M);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const SearchPHPExtensions = (req: ReqPage) => {
|
export const SearchPHPExtensions = (req: ReqPage & { name?: string }, currentNode?: string) => {
|
||||||
return http.post<ResPage<Runtime.PHPExtensions>>(`/runtimes/php/extensions/search`, req);
|
return http.post<ResPage<Runtime.PHPExtensions>>(
|
||||||
|
`/runtimes/php/extensions/search`,
|
||||||
|
req,
|
||||||
|
undefined,
|
||||||
|
currentNode ? { CurrentNode: currentNode } : undefined,
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ListPHPExtensions = (req: Runtime.PHPExtensionsList) => {
|
export const ListPHPExtensions = (req: Runtime.PHPExtensionsList) => {
|
||||||
@@ -137,3 +142,7 @@ export const updateRemark = (req: Runtime.RemarkUpdate) => {
|
|||||||
export const getFPMStatus = (id: number) => {
|
export const getFPMStatus = (id: number) => {
|
||||||
return http.get<Runtime.FpmStatus[]>(`/runtimes/php/fpm/status/${id}`);
|
return http.get<Runtime.FpmStatus[]>(`/runtimes/php/fpm/status/${id}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const PushPHPExtensions = (req: Runtime.PHPExtensionsPush) => {
|
||||||
|
return http.post(`/runtimes/php/extensions/push`, req, undefined, { CurrentNode: 'local' });
|
||||||
|
};
|
||||||
|
|||||||
@@ -4009,6 +4009,13 @@ const message = {
|
|||||||
nodeApp: 'Upgrade to Commercial Edition to upgrade multi-node app versions without switching nodes manually.',
|
nodeApp: 'Upgrade to Commercial Edition to upgrade multi-node app versions without switching nodes manually.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Upgrade to Commercial Edition for centralized management of multi-node apps, websites, databases, and scheduled tasks.',
|
'Upgrade to Commercial Edition for centralized management of multi-node apps, websites, databases, and scheduled tasks.',
|
||||||
|
imageExchange: 'Upgrade to Commercial Edition to transfer container images between nodes in batches.',
|
||||||
|
appExchange:
|
||||||
|
'Upgrade to Commercial Edition to migrate installed applications to target nodes and confirm their resource dependencies.',
|
||||||
|
sslSync:
|
||||||
|
'Upgrade to Commercial Edition to synchronize certificates from a source node to one or more target nodes.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'Upgrade to Commercial Edition to synchronize PHP extension templates to one or more target nodes.',
|
||||||
fileExchange: 'Upgrade to Commercial Edition to transfer files quickly between servers.',
|
fileExchange: 'Upgrade to Commercial Edition to transfer files quickly between servers.',
|
||||||
app: 'Upgrade to Commercial Edition to view service details, anomaly monitoring, and more in the mobile app.',
|
app: 'Upgrade to Commercial Edition to view service details, anomaly monitoring, and more in the mobile app.',
|
||||||
cluster: 'Upgrade to Commercial Edition to manage MySQL/Postgres/Redis primary-replica clusters.',
|
cluster: 'Upgrade to Commercial Edition to manage MySQL/Postgres/Redis primary-replica clusters.',
|
||||||
@@ -7036,6 +7043,35 @@ const message = {
|
|||||||
nodeContent3: "Real-time monitoring of each node's operational status",
|
nodeContent3: "Real-time monitoring of each node's operational status",
|
||||||
nodeTitle4: 'Quick Remote Connection',
|
nodeTitle4: 'Quick Remote Connection',
|
||||||
nodeContent4: 'One-click direct connection to node remote terminals',
|
nodeContent4: 'One-click direct connection to node remote terminals',
|
||||||
|
imageExchangeTitle1: 'Select source images',
|
||||||
|
imageExchangeContent1: 'Browse container images on the source node and select the images to transfer.',
|
||||||
|
imageExchangeTitle2: 'Distribute images',
|
||||||
|
imageExchangeContent2: 'Transfer selected images to one or more target nodes.',
|
||||||
|
imageExchangeTitle3: 'View transfer logs',
|
||||||
|
imageExchangeContent3: 'Track image transfer progress and results in task logs.',
|
||||||
|
appExchangeTitle1: 'Select an application',
|
||||||
|
appExchangeContent1: 'Browse installed applications on the source node and select one to migrate.',
|
||||||
|
appExchangeTitle2: 'Confirm dependencies',
|
||||||
|
appExchangeContent2: 'Confirm target nodes and required resources, such as databases, before migration.',
|
||||||
|
appExchangeTitle3: 'Migrate applications',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Transfer application backups to target nodes for restoration and view results in task logs.',
|
||||||
|
sslSyncTitle1: 'Select certificates',
|
||||||
|
sslSyncContent1: 'Browse certificate details on the source node and select certificates to synchronize.',
|
||||||
|
sslSyncTitle2: 'Synchronize across nodes',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Synchronize selected certificates to target nodes, automatically excluding the source node.',
|
||||||
|
sslSyncTitle3: 'Confirm sync tasks',
|
||||||
|
sslSyncContent3: 'Review target nodes and certificates before execution, then view results in task logs.',
|
||||||
|
phpExtensionsSyncTitle1: 'Select a template',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Browse template names and extension lists on the source node and select a template to synchronize.',
|
||||||
|
phpExtensionsSyncTitle2: 'Synchronize templates',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Synchronize the selected template to target nodes, automatically excluding the source node.',
|
||||||
|
phpExtensionsSyncTitle3: 'Check existing templates',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Skip templates with identical names and content. Report conflicts without overwriting different content.',
|
||||||
fileExchangeTitle1: 'Key Authentication Transmission',
|
fileExchangeTitle1: 'Key Authentication Transmission',
|
||||||
fileExchangeContent1: 'Authenticate via SSH keys to ensure transmission security.',
|
fileExchangeContent1: 'Authenticate via SSH keys to ensure transmission security.',
|
||||||
fileExchangeTitle2: 'Efficient File Synchronization',
|
fileExchangeTitle2: 'Efficient File Synchronization',
|
||||||
@@ -7550,6 +7586,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'About to transfer {0} images to {1} nodes, for a total of {2} tasks.',
|
imageBatchConfirmPrefix: 'About to transfer {0} images to {1} nodes, for a total of {2} tasks.',
|
||||||
|
|
||||||
ssl: 'Certificate Sync',
|
ssl: 'Certificate Sync',
|
||||||
|
phpExtensions: 'PHP Extension Template Sync',
|
||||||
|
phpExtensionsTitle: 'Extension Template Sync',
|
||||||
|
phpExtensionsDesc: 'Select a source node to sync its PHP extension template to target nodes.',
|
||||||
|
phpExtensionsList: 'PHP extensions',
|
||||||
|
phpExtensionsConfirm: 'Sync {0} PHP extension template(s) to {1} node(s).',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Identical templates are skipped. Same-name templates with different content are reported as conflicts and will not be overwritten.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'After selecting a source node, sync the specified certificate into the current panel environment.',
|
'After selecting a source node, sync the specified certificate into the current panel environment.',
|
||||||
sslBatchConfirmPrefix: 'About to sync {0} certificates to {1} nodes, for a total of {2} tasks.',
|
sslBatchConfirmPrefix: 'About to sync {0} certificates to {1} nodes, for a total of {2} tasks.',
|
||||||
|
|||||||
@@ -4086,6 +4086,14 @@ const message = {
|
|||||||
'Actualizar a la edición comercial permite actualizar versiones de aplicaciones multinodo sin cambiar de nodo manualmente.',
|
'Actualizar a la edición comercial permite actualizar versiones de aplicaciones multinodo sin cambiar de nodo manualmente.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Actualizar a la edición comercial permite la gestión centralizada de aplicaciones, sitios web, bases de datos y tareas programadas multinodo.',
|
'Actualizar a la edición comercial permite la gestión centralizada de aplicaciones, sitios web, bases de datos y tareas programadas multinodo.',
|
||||||
|
imageExchange:
|
||||||
|
'Actualice a la edición comercial para transferir imágenes de contenedores entre nodos por lotes.',
|
||||||
|
appExchange:
|
||||||
|
'Actualice a la edición comercial para migrar aplicaciones instaladas a nodos de destino y confirmar sus recursos dependientes.',
|
||||||
|
sslSync:
|
||||||
|
'Actualice a la edición comercial para sincronizar certificados del nodo de origen con uno o varios nodos de destino.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'Actualice a la edición comercial para sincronizar plantillas de extensiones PHP con uno o varios nodos de destino.',
|
||||||
fileExchange: 'La edición comercial permite transferir archivos entre varios servidores.',
|
fileExchange: 'La edición comercial permite transferir archivos entre varios servidores.',
|
||||||
app: 'La edición comercial permite ver información de servicio, monitoreo, etc. vía app móvil.',
|
app: 'La edición comercial permite ver información de servicio, monitoreo, etc. vía app móvil.',
|
||||||
cluster:
|
cluster:
|
||||||
@@ -7149,6 +7157,41 @@ const message = {
|
|||||||
nodeContent3: 'Supervisa en tiempo real el estado operativo de cada nodo',
|
nodeContent3: 'Supervisa en tiempo real el estado operativo de cada nodo',
|
||||||
nodeTitle4: 'Conexión Remota Rápida',
|
nodeTitle4: 'Conexión Remota Rápida',
|
||||||
nodeContent4: 'Conecta directamente a la terminal remota de un nodo con un clic',
|
nodeContent4: 'Conecta directamente a la terminal remota de un nodo con un clic',
|
||||||
|
imageExchangeTitle1: 'Seleccionar imágenes de origen',
|
||||||
|
imageExchangeContent1:
|
||||||
|
'Consulte las imágenes de contenedores del nodo de origen y seleccione las que desea transferir.',
|
||||||
|
imageExchangeTitle2: 'Distribuir imágenes por lotes',
|
||||||
|
imageExchangeContent2: 'Transfiera las imágenes seleccionadas a uno o varios nodos de destino.',
|
||||||
|
imageExchangeTitle3: 'Consultar registros de transferencia',
|
||||||
|
imageExchangeContent3:
|
||||||
|
'Consulte el progreso y los resultados de la transferencia de imágenes en los registros de tareas.',
|
||||||
|
appExchangeTitle1: 'Seleccionar una aplicación',
|
||||||
|
appExchangeContent1:
|
||||||
|
'Consulte las aplicaciones instaladas en el nodo de origen y seleccione la que desea migrar.',
|
||||||
|
appExchangeTitle2: 'Confirmar dependencias',
|
||||||
|
appExchangeContent2:
|
||||||
|
'Confirme los nodos de destino y los recursos necesarios, como bases de datos, antes de la migración.',
|
||||||
|
appExchangeTitle3: 'Migrar aplicaciones',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Transfiera copias de seguridad de aplicaciones a los nodos de destino para restaurarlas y consulte los resultados en los registros de tareas.',
|
||||||
|
sslSyncTitle1: 'Seleccionar certificados',
|
||||||
|
sslSyncContent1:
|
||||||
|
'Consulte los detalles de los certificados del nodo de origen y seleccione los que desea sincronizar.',
|
||||||
|
sslSyncTitle2: 'Sincronizar certificados entre nodos',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Sincronice los certificados seleccionados con los nodos de destino, excluyendo automáticamente el nodo de origen.',
|
||||||
|
sslSyncTitle3: 'Confirmar tareas de sincronización',
|
||||||
|
sslSyncContent3:
|
||||||
|
'Revise los nodos de destino y los certificados antes de ejecutar la tarea y consulte los resultados en sus registros.',
|
||||||
|
phpExtensionsSyncTitle1: 'Seleccionar una plantilla',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Consulte los nombres de las plantillas y sus extensiones en el nodo de origen y seleccione la plantilla que desea sincronizar.',
|
||||||
|
phpExtensionsSyncTitle2: 'Sincronizar plantillas entre nodos',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Sincronice la plantilla seleccionada con los nodos de destino, excluyendo automáticamente el nodo de origen.',
|
||||||
|
phpExtensionsSyncTitle3: 'Comprobar plantillas existentes',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Se omiten las plantillas con el mismo nombre y contenido. Si el contenido difiere, se informa del conflicto sin sobrescribirlas.',
|
||||||
fileExchangeTitle1: 'Transmisión con Autenticación por Claves',
|
fileExchangeTitle1: 'Transmisión con Autenticación por Claves',
|
||||||
fileExchangeContent1: 'Autenticación vía claves SSH para garantizar seguridad en la transmisión.',
|
fileExchangeContent1: 'Autenticación vía claves SSH para garantizar seguridad en la transmisión.',
|
||||||
fileExchangeTitle2: 'Sincronización de Archivos Eficiente',
|
fileExchangeTitle2: 'Sincronización de Archivos Eficiente',
|
||||||
@@ -7667,6 +7710,14 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'Se enviarán {0} imágenes a {1} nodos, creando {2} tareas.',
|
imageBatchConfirmPrefix: 'Se enviarán {0} imágenes a {1} nodos, creando {2} tareas.',
|
||||||
|
|
||||||
ssl: 'Sincronización de certificados',
|
ssl: 'Sincronización de certificados',
|
||||||
|
phpExtensions: 'Sincronización de plantillas de extensiones PHP',
|
||||||
|
phpExtensionsTitle: 'Sincronización de plantillas de extensiones',
|
||||||
|
phpExtensionsDesc:
|
||||||
|
'Seleccione un nodo de origen para sincronizar su plantilla de extensiones PHP con los nodos de destino.',
|
||||||
|
phpExtensionsList: 'Lista de extensiones',
|
||||||
|
phpExtensionsConfirm: 'Se sincronizarán {0} plantillas de extensiones PHP con {1} nodos.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Se omiten las plantillas con el mismo nombre y contenido. Si el nombre coincide pero el contenido difiere, se informa del conflicto sin sobrescribirlas.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'Después de seleccionar el nodo de origen, los certificados especificados pueden sincronizarse con el entorno actual del panel.',
|
'Después de seleccionar el nodo de origen, los certificados especificados pueden sincronizarse con el entorno actual del panel.',
|
||||||
sslBatchConfirmPrefix: 'Se sincronizarán {0} certificados a {1} nodos, creando {2} tareas.',
|
sslBatchConfirmPrefix: 'Se sincronizarán {0} certificados a {1} nodos, creando {2} tareas.',
|
||||||
|
|||||||
@@ -3973,6 +3973,10 @@ const message = {
|
|||||||
nodeApp: 'برای ارتقاء نسخه برنامههای چند گره بدون نیاز به جابجایی دستی بین گرهها به نسخه تجاری ارتقاء دهید.',
|
nodeApp: 'برای ارتقاء نسخه برنامههای چند گره بدون نیاز به جابجایی دستی بین گرهها به نسخه تجاری ارتقاء دهید.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'برای مدیریت متمرکز برنامهها، وبسایتها، پایگاههای داده و وظایف زمانبندی شده چند گره به نسخه تجاری ارتقاء دهید.',
|
'برای مدیریت متمرکز برنامهها، وبسایتها، پایگاههای داده و وظایف زمانبندی شده چند گره به نسخه تجاری ارتقاء دهید.',
|
||||||
|
imageExchange: 'برای انتقال گروهی تصاویر کانتینر بین گرهها، به نسخه تجاری ارتقا دهید.',
|
||||||
|
appExchange: 'برای انتقال برنامههای نصبشده به گرههای مقصد و تأیید منابع وابسته، به نسخه تجاری ارتقا دهید.',
|
||||||
|
sslSync: 'برای همگامسازی گواهیهای گره مبدأ با یک یا چند گره مقصد، به نسخه تجاری ارتقا دهید.',
|
||||||
|
phpExtensionsSync: 'برای همگامسازی الگوهای افزونههای PHP با یک یا چند گره مقصد، به نسخه تجاری ارتقا دهید.',
|
||||||
fileExchange: 'برای انتقال سریع فایلها بین سرورها به نسخه تجاری ارتقاء دهید.',
|
fileExchange: 'برای انتقال سریع فایلها بین سرورها به نسخه تجاری ارتقاء دهید.',
|
||||||
app: 'برای مشاهده جزئیات سرویس، نظارت بر ناهنجاریها و موارد دیگر در برنامه موبایل به نسخه تجاری ارتقاء دهید.',
|
app: 'برای مشاهده جزئیات سرویس، نظارت بر ناهنجاریها و موارد دیگر در برنامه موبایل به نسخه تجاری ارتقاء دهید.',
|
||||||
cluster: 'برای مدیریت خوشههای اصلی-برده MySQL/Postgres/Redis به نسخه تجاری ارتقاء دهید.',
|
cluster: 'برای مدیریت خوشههای اصلی-برده MySQL/Postgres/Redis به نسخه تجاری ارتقاء دهید.',
|
||||||
@@ -6991,6 +6995,37 @@ const message = {
|
|||||||
nodeContent3: 'نظارت بر وضعیت عملیاتی هر گره به صورت بلادرنگ',
|
nodeContent3: 'نظارت بر وضعیت عملیاتی هر گره به صورت بلادرنگ',
|
||||||
nodeTitle4: 'اتصال سریع از راه دور',
|
nodeTitle4: 'اتصال سریع از راه دور',
|
||||||
nodeContent4: 'اتصال مستقیم یککلیکی به ترمینالهای از راه دور گره',
|
nodeContent4: 'اتصال مستقیم یککلیکی به ترمینالهای از راه دور گره',
|
||||||
|
imageExchangeTitle1: 'انتخاب تصاویر مبدأ',
|
||||||
|
imageExchangeContent1: 'تصاویر کانتینر در گره مبدأ را مشاهده و تصاویر موردنظر برای انتقال را انتخاب کنید.',
|
||||||
|
imageExchangeTitle2: 'توزیع گروهی تصاویر',
|
||||||
|
imageExchangeContent2: 'تصاویر انتخابشده را به یک یا چند گره مقصد انتقال دهید.',
|
||||||
|
imageExchangeTitle3: 'مشاهده گزارشهای انتقال',
|
||||||
|
imageExchangeContent3: 'پیشرفت و نتایج انتقال تصاویر را در گزارشهای وظایف مشاهده کنید.',
|
||||||
|
appExchangeTitle1: 'انتخاب برنامه مبدأ',
|
||||||
|
appExchangeContent1:
|
||||||
|
'برنامههای نصبشده در گره مبدأ را مشاهده و برنامه موردنظر برای انتقال را انتخاب کنید.',
|
||||||
|
appExchangeTitle2: 'تأیید وابستگیها',
|
||||||
|
appExchangeContent2: 'پیش از انتقال، گرههای مقصد و منابع موردنیاز مانند پایگاههای داده را تأیید کنید.',
|
||||||
|
appExchangeTitle3: 'انتقال برنامهها',
|
||||||
|
appExchangeContent3:
|
||||||
|
'نسخههای پشتیبان برنامهها را برای بازیابی به گرههای مقصد انتقال دهید و نتایج را در گزارشهای وظایف مشاهده کنید.',
|
||||||
|
sslSyncTitle1: 'انتخاب گواهیها',
|
||||||
|
sslSyncContent1: 'اطلاعات گواهیهای گره مبدأ را مشاهده و گواهیهای موردنظر برای همگامسازی را انتخاب کنید.',
|
||||||
|
sslSyncTitle2: 'همگامسازی گواهیها بین گرهها',
|
||||||
|
sslSyncContent2:
|
||||||
|
'گواهیهای انتخابشده را با گرههای مقصد همگامسازی کنید؛ گره مبدأ بهطور خودکار از فهرست مقصدها حذف میشود.',
|
||||||
|
sslSyncTitle3: 'تأیید وظایف همگامسازی',
|
||||||
|
sslSyncContent3:
|
||||||
|
'پیش از اجرا، گرههای مقصد و گواهیها را بررسی کنید و سپس نتایج را در گزارشهای وظایف مشاهده کنید.',
|
||||||
|
phpExtensionsSyncTitle1: 'انتخاب الگوی افزونهها',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'نام الگوها و فهرست افزونههای گره مبدأ را مشاهده و الگوی موردنظر برای همگامسازی را انتخاب کنید.',
|
||||||
|
phpExtensionsSyncTitle2: 'همگامسازی الگوها بین گرهها',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'الگوی انتخابشده را با گرههای مقصد همگامسازی کنید؛ گره مبدأ بهطور خودکار از فهرست مقصدها حذف میشود.',
|
||||||
|
phpExtensionsSyncTitle3: 'بررسی الگوهای همنام',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'الگوهای دارای نام و محتوای یکسان رد میشوند. در صورت تفاوت محتوا، تعارض گزارش میشود و الگو بازنویسی نخواهد شد.',
|
||||||
fileExchangeTitle1: 'انتقال احراز هویت کلید',
|
fileExchangeTitle1: 'انتقال احراز هویت کلید',
|
||||||
fileExchangeContent1: 'از طریق کلیدهای SSH احراز هویت کنید تا امنیت انتقال تضمین شود.',
|
fileExchangeContent1: 'از طریق کلیدهای SSH احراز هویت کنید تا امنیت انتقال تضمین شود.',
|
||||||
fileExchangeTitle2: 'همگامسازی کارآمد فایل',
|
fileExchangeTitle2: 'همگامسازی کارآمد فایل',
|
||||||
@@ -7508,6 +7543,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'در حال انتقال {0} تصویر به {1} گره، مجموعاً {2} وظیفه.',
|
imageBatchConfirmPrefix: 'در حال انتقال {0} تصویر به {1} گره، مجموعاً {2} وظیفه.',
|
||||||
|
|
||||||
ssl: 'همگامسازی گواهی',
|
ssl: 'همگامسازی گواهی',
|
||||||
|
phpExtensions: 'همگامسازی الگوی افزونههای PHP',
|
||||||
|
phpExtensionsTitle: 'همگامسازی الگوی افزونهها',
|
||||||
|
phpExtensionsDesc: 'گره مبدأ را برای همگامسازی الگوی افزونههای PHP آن با گرههای مقصد انتخاب کنید.',
|
||||||
|
phpExtensionsList: 'فهرست افزونهها',
|
||||||
|
phpExtensionsConfirm: '{0} الگوی افزونههای PHP با {1} گره همگامسازی میشود.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'الگوهای دارای نام و محتوای یکسان رد میشوند. اگر نام یکسان اما محتوا متفاوت باشد، تعارض گزارش میشود و الگو بازنویسی نخواهد شد.',
|
||||||
sslBatchDesc: 'پس از انتخاب یک گره منبع، گواهی مشخص شده را به محیط پنل فعلی همگامسازی کنید.',
|
sslBatchDesc: 'پس از انتخاب یک گره منبع، گواهی مشخص شده را به محیط پنل فعلی همگامسازی کنید.',
|
||||||
sslBatchConfirmPrefix: 'در حال همگامسازی {0} گواهی به {1} گره، مجموعاً {2} وظیفه.',
|
sslBatchConfirmPrefix: 'در حال همگامسازی {0} گواهی به {1} گره، مجموعاً {2} وظیفه.',
|
||||||
|
|
||||||
|
|||||||
@@ -3990,6 +3990,12 @@ const message = {
|
|||||||
'商用版にアップグレードすると、ノードを手動で切り替えずにマルチノードアプリのバージョンを一括アップグレードできます。',
|
'商用版にアップグレードすると、ノードを手動で切り替えずにマルチノードアプリのバージョンを一括アップグレードできます。',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'商用版にアップグレードすると、マルチノードのアプリ、Web サイト、データベース、スケジュールタスクを一元管理できます。',
|
'商用版にアップグレードすると、マルチノードのアプリ、Web サイト、データベース、スケジュールタスクを一元管理できます。',
|
||||||
|
imageExchange: '商用版にアップグレードすると、ノード間でコンテナーイメージを一括転送できます。',
|
||||||
|
appExchange:
|
||||||
|
'商用版にアップグレードすると、インストール済みアプリをターゲットノードに移行し、必要な依存リソースを確認できます。',
|
||||||
|
sslSync: '商用版にアップグレードすると、ソースノードの証明書を1つ以上のターゲットノードに同期できます。',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'商用版にアップグレードすると、PHP 拡張テンプレートを1つ以上のターゲットノードに同期できます。',
|
||||||
fileExchange: '商用版にアップグレードすると、複数サーバー間でファイルをすばやく転送できます。',
|
fileExchange: '商用版にアップグレードすると、複数サーバー間でファイルをすばやく転送できます。',
|
||||||
cluster: '商用版にアップグレードすると、MySQL/Postgres/Redis のプライマリ/レプリカ構成を管理できます。',
|
cluster: '商用版にアップグレードすると、MySQL/Postgres/Redis のプライマリ/レプリカ構成を管理できます。',
|
||||||
vllm: '商用版にアップグレードすると、1Panel で vLLM サービスのデプロイ、設定、ライフサイクル操作、タスク追跡を一元管理できます。',
|
vllm: '商用版にアップグレードすると、1Panel で vLLM サービスのデプロイ、設定、ライフサイクル操作、タスク追跡を一元管理できます。',
|
||||||
@@ -7024,6 +7030,34 @@ const message = {
|
|||||||
nodeContent3: '各ノードの運用状況をリアルタイムで把握',
|
nodeContent3: '各ノードの運用状況をリアルタイムで把握',
|
||||||
nodeTitle4: '迅速なリモート接続',
|
nodeTitle4: '迅速なリモート接続',
|
||||||
nodeContent4: 'ワンクリックでノードリモート端末に直接接続',
|
nodeContent4: 'ワンクリックでノードリモート端末に直接接続',
|
||||||
|
imageExchangeTitle1: 'ソースイメージの選択',
|
||||||
|
imageExchangeContent1: 'ソースノードのコンテナーイメージを確認し、転送するイメージを選択します。',
|
||||||
|
imageExchangeTitle2: 'イメージの一括配布',
|
||||||
|
imageExchangeContent2: '選択したイメージを1つ以上のターゲットノードに転送します。',
|
||||||
|
imageExchangeTitle3: '転送ログの確認',
|
||||||
|
imageExchangeContent3: 'タスクログでイメージ転送の進捗と実行結果を確認できます。',
|
||||||
|
appExchangeTitle1: 'ソースアプリの選択',
|
||||||
|
appExchangeContent1: 'ソースノードのインストール済みアプリを確認し、移行するアプリを選択します。',
|
||||||
|
appExchangeTitle2: '依存リソースの確認',
|
||||||
|
appExchangeContent2: '移行前にターゲットノードと、データベースなどの必要なリソースを確認します。',
|
||||||
|
appExchangeTitle3: 'アプリの移行',
|
||||||
|
appExchangeContent3:
|
||||||
|
'アプリのバックアップをターゲットノードに転送して復元し、タスクログで結果を確認できます。',
|
||||||
|
sslSyncTitle1: 'ソース証明書の選択',
|
||||||
|
sslSyncContent1: 'ソースノードの証明書情報を確認し、同期する証明書を選択します。',
|
||||||
|
sslSyncTitle2: '複数ノードへの証明書同期',
|
||||||
|
sslSyncContent2: 'ソースノードを自動的に除外し、選択した証明書をターゲットノードに同期します。',
|
||||||
|
sslSyncTitle3: '同期タスクの確認',
|
||||||
|
sslSyncContent3: '実行前にターゲットノードと証明書を確認し、タスクログで同期結果を確認できます。',
|
||||||
|
phpExtensionsSyncTitle1: '拡張テンプレートの選択',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'ソースノードのテンプレート名と拡張機能一覧を確認し、同期するテンプレートを選択します。',
|
||||||
|
phpExtensionsSyncTitle2: '複数ノードへのテンプレート同期',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'ソースノードを自動的に除外し、選択したテンプレートをターゲットノードに同期します。',
|
||||||
|
phpExtensionsSyncTitle3: '同名テンプレートの確認',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'同名で内容も同じテンプレートはスキップします。内容が異なる場合は競合を報告し、上書きしません。',
|
||||||
fileExchangeTitle1: 'キー認証伝送',
|
fileExchangeTitle1: 'キー認証伝送',
|
||||||
fileExchangeContent1: 'SSHキーを介して認証し、伝送のセキュリティを確保します。',
|
fileExchangeContent1: 'SSHキーを介して認証し、伝送のセキュリティを確保します。',
|
||||||
fileExchangeTitle2: '効率的なファイル同期',
|
fileExchangeTitle2: '効率的なファイル同期',
|
||||||
@@ -7538,6 +7572,13 @@ const message = {
|
|||||||
'{0} 個のイメージを {1} 個のノードへ転送します。合計 {2} 件のタスクが作成されます。',
|
'{0} 個のイメージを {1} 個のノードへ転送します。合計 {2} 件のタスクが作成されます。',
|
||||||
|
|
||||||
ssl: '証明書同期',
|
ssl: '証明書同期',
|
||||||
|
phpExtensions: 'PHP 拡張テンプレート同期',
|
||||||
|
phpExtensionsTitle: '拡張テンプレート同期',
|
||||||
|
phpExtensionsDesc: 'ソースノードを選択すると、PHP 拡張テンプレートをターゲットノードに同期できます。',
|
||||||
|
phpExtensionsList: '拡張機能一覧',
|
||||||
|
phpExtensionsConfirm: '{0} 件の PHP 拡張テンプレートを {1} 個のノードに同期します。',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'同名で内容も同じテンプレートはスキップします。同名で内容が異なる場合は競合を報告し、上書きしません。',
|
||||||
sslBatchDesc: 'ソースノードを選択すると、指定した証明書を現在のパネル環境へ同期できます。',
|
sslBatchDesc: 'ソースノードを選択すると、指定した証明書を現在のパネル環境へ同期できます。',
|
||||||
sslBatchConfirmPrefix: '{0} 件の証明書を {1} 個のノードへ同期します。合計 {2} 件のタスクが作成されます。',
|
sslBatchConfirmPrefix: '{0} 件の証明書を {1} 個のノードへ同期します。合計 {2} 件のタスクが作成されます。',
|
||||||
|
|
||||||
|
|||||||
@@ -3920,6 +3920,12 @@ const message = {
|
|||||||
'상용 버전으로 업그레이드하면 노드를 수동으로 전환하지 않고도 다중 노드 애플리케이션 버전을 일괄 업그레이드할 수 있습니다.',
|
'상용 버전으로 업그레이드하면 노드를 수동으로 전환하지 않고도 다중 노드 애플리케이션 버전을 일괄 업그레이드할 수 있습니다.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'상용 버전으로 업그레이드하면 다중 노드 애플리케이션, 웹사이트, 데이터베이스, 예약 작업을 중앙에서 관리할 수 있습니다.',
|
'상용 버전으로 업그레이드하면 다중 노드 애플리케이션, 웹사이트, 데이터베이스, 예약 작업을 중앙에서 관리할 수 있습니다.',
|
||||||
|
imageExchange: '상용 버전으로 업그레이드하면 노드 간에 컨테이너 이미지를 일괄 전송할 수 있습니다.',
|
||||||
|
appExchange:
|
||||||
|
'상용 버전으로 업그레이드하면 설치된 앱을 대상 노드로 이전하고 필요한 종속 리소스를 확인할 수 있습니다.',
|
||||||
|
sslSync: '상용 버전으로 업그레이드하면 소스 노드의 인증서를 하나 이상의 대상 노드에 동기화할 수 있습니다.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'상용 버전으로 업그레이드하면 PHP 확장 템플릿을 하나 이상의 대상 노드에 동기화할 수 있습니다.',
|
||||||
fileExchange: '상용 버전으로 업그레이드하면 여러 서버 간에 파일을 빠르게 전송할 수 있습니다.',
|
fileExchange: '상용 버전으로 업그레이드하면 여러 서버 간에 파일을 빠르게 전송할 수 있습니다.',
|
||||||
app: '상용 버전으로 업그레이드하면 모바일 앱에서 서비스 정보와 이상 모니터링을 확인할 수 있습니다.',
|
app: '상용 버전으로 업그레이드하면 모바일 앱에서 서비스 정보와 이상 모니터링을 확인할 수 있습니다.',
|
||||||
cluster: '상용 버전으로 업그레이드하면 MySQL/Postgres/Redis 기본-복제 클러스터를 관리할 수 있습니다.',
|
cluster: '상용 버전으로 업그레이드하면 MySQL/Postgres/Redis 기본-복제 클러스터를 관리할 수 있습니다.',
|
||||||
@@ -6883,6 +6889,31 @@ const message = {
|
|||||||
nodeContent3: '각 노드의 운영 상태를 실시간으로 파악',
|
nodeContent3: '각 노드의 운영 상태를 실시간으로 파악',
|
||||||
nodeTitle4: '빠른 원격 연결',
|
nodeTitle4: '빠른 원격 연결',
|
||||||
nodeContent4: '원클릭으로 노드 원격 터미널에 직접 연결',
|
nodeContent4: '원클릭으로 노드 원격 터미널에 직접 연결',
|
||||||
|
imageExchangeTitle1: '소스 이미지 선택',
|
||||||
|
imageExchangeContent1: '소스 노드의 컨테이너 이미지를 확인하고 전송할 이미지를 선택합니다.',
|
||||||
|
imageExchangeTitle2: '이미지 일괄 배포',
|
||||||
|
imageExchangeContent2: '선택한 이미지를 하나 이상의 대상 노드로 전송합니다.',
|
||||||
|
imageExchangeTitle3: '전송 로그 확인',
|
||||||
|
imageExchangeContent3: '작업 로그에서 이미지 전송 진행 상황과 실행 결과를 확인합니다.',
|
||||||
|
appExchangeTitle1: '소스 앱 선택',
|
||||||
|
appExchangeContent1: '소스 노드에 설치된 앱을 확인하고 이전할 앱을 선택합니다.',
|
||||||
|
appExchangeTitle2: '종속 리소스 확인',
|
||||||
|
appExchangeContent2: '이전 전에 대상 노드와 데이터베이스 등 필요한 리소스를 확인합니다.',
|
||||||
|
appExchangeTitle3: '앱 이전 실행',
|
||||||
|
appExchangeContent3: '앱 백업을 대상 노드로 전송하여 복원하고 작업 로그에서 결과를 확인합니다.',
|
||||||
|
sslSyncTitle1: '소스 인증서 선택',
|
||||||
|
sslSyncContent1: '소스 노드의 인증서 정보를 확인하고 동기화할 인증서를 선택합니다.',
|
||||||
|
sslSyncTitle2: '여러 노드에 인증서 동기화',
|
||||||
|
sslSyncContent2: '소스 노드를 자동으로 제외하고 선택한 인증서를 대상 노드에 동기화합니다.',
|
||||||
|
sslSyncTitle3: '동기화 작업 확인',
|
||||||
|
sslSyncContent3: '실행 전에 대상 노드와 인증서를 확인하고 작업 로그에서 동기화 결과를 확인합니다.',
|
||||||
|
phpExtensionsSyncTitle1: '확장 템플릿 선택',
|
||||||
|
phpExtensionsSyncContent1: '소스 노드의 템플릿 이름과 확장 목록을 확인하고 동기화할 템플릿을 선택합니다.',
|
||||||
|
phpExtensionsSyncTitle2: '여러 노드에 템플릿 동기화',
|
||||||
|
phpExtensionsSyncContent2: '소스 노드를 자동으로 제외하고 선택한 템플릿을 대상 노드에 동기화합니다.',
|
||||||
|
phpExtensionsSyncTitle3: '동일 이름 템플릿 확인',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'이름과 내용이 같으면 건너뜁니다. 내용이 다르면 충돌을 알리고 덮어쓰지 않습니다.',
|
||||||
fileExchangeTitle1: '키 인증 전송',
|
fileExchangeTitle1: '키 인증 전송',
|
||||||
fileExchangeContent1: 'SSH 키를 통해 인증하여 전송 보안을 보장합니다.',
|
fileExchangeContent1: 'SSH 키를 통해 인증하여 전송 보안을 보장합니다.',
|
||||||
fileExchangeTitle2: '효율적인 파일 동기화',
|
fileExchangeTitle2: '효율적인 파일 동기화',
|
||||||
@@ -7390,6 +7421,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: '{0}개의 이미지를 {1}개 노드로 전달합니다. 총 {2}개의 작업이 생성됩니다.',
|
imageBatchConfirmPrefix: '{0}개의 이미지를 {1}개 노드로 전달합니다. 총 {2}개의 작업이 생성됩니다.',
|
||||||
|
|
||||||
ssl: '인증서 동기화',
|
ssl: '인증서 동기화',
|
||||||
|
phpExtensions: 'PHP 확장 템플릿 동기화',
|
||||||
|
phpExtensionsTitle: '확장 템플릿 동기화',
|
||||||
|
phpExtensionsDesc: '소스 노드를 선택하면 PHP 확장 템플릿을 대상 노드에 동기화할 수 있습니다.',
|
||||||
|
phpExtensionsList: '확장 목록',
|
||||||
|
phpExtensionsConfirm: 'PHP 확장 템플릿 {0}개를 노드 {1}개에 동기화합니다.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'이름과 내용이 같은 템플릿은 건너뜁니다. 이름은 같지만 내용이 다르면 충돌을 알리고 덮어쓰지 않습니다.',
|
||||||
sslBatchDesc: '원본 노드를 선택한 후 지정된 인증서를 현재 패널 환경으로 동기화할 수 있습니다.',
|
sslBatchDesc: '원본 노드를 선택한 후 지정된 인증서를 현재 패널 환경으로 동기화할 수 있습니다.',
|
||||||
sslBatchConfirmPrefix: '{0}개의 인증서를 {1}개 노드로 동기화합니다. 총 {2}개의 작업이 생성됩니다.',
|
sslBatchConfirmPrefix: '{0}개의 인증서를 {1}개 노드로 동기화합니다. 총 {2}개의 작업이 생성됩니다.',
|
||||||
|
|
||||||
|
|||||||
@@ -3898,6 +3898,10 @@ const message = {
|
|||||||
nodeApp: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອອັບເກຣດເວີຊັນແອັບໃນຫຼາຍໂນດໂດຍບໍ່ຕ້ອງສະຫຼັບໂນດດ້ວຍຕົນເອງ.',
|
nodeApp: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອອັບເກຣດເວີຊັນແອັບໃນຫຼາຍໂນດໂດຍບໍ່ຕ້ອງສະຫຼັບໂນດດ້ວຍຕົນເອງ.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອຈັດການແອັບ, ເວັບໄຊ, ຖານຂໍ້ມູນ ແລະ ງານຕາມກຳນົດເວລາຂອງຫຼາຍໂນດຢູ່ບ່ອນດຽວ.',
|
'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອຈັດການແອັບ, ເວັບໄຊ, ຖານຂໍ້ມູນ ແລະ ງານຕາມກຳນົດເວລາຂອງຫຼາຍໂນດຢູ່ບ່ອນດຽວ.',
|
||||||
|
imageExchange: 'ອັບເກຣດເປັນເວີຊັນການຄ້າເພື່ອໂອນຍ້າຍອິມເມຈຄອນເທນເນີລະຫວ່າງໂນດເປັນຊຸດ.',
|
||||||
|
appExchange: 'ອັບເກຣດເປັນເວີຊັນການຄ້າເພື່ອຍ້າຍແອັບທີ່ຕິດຕັ້ງແລ້ວໄປຍັງໂນດປາຍທາງ ແລະຢືນຢັນຊັບພະຍາກອນທີ່ຕ້ອງໃຊ້.',
|
||||||
|
sslSync: 'ອັບເກຣດເປັນເວີຊັນການຄ້າເພື່ອຊິງໂຄຣໄນໃບຢັ້ງຢືນຈາກໂນດຕົ້ນທາງໄປຍັງໂນດປາຍທາງໜຶ່ງຫຼືຫຼາຍໂນດ.',
|
||||||
|
phpExtensionsSync: 'ອັບເກຣດເປັນເວີຊັນການຄ້າເພື່ອຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ PHP ໄປຍັງໂນດປາຍທາງໜຶ່ງຫຼືຫຼາຍໂນດ.',
|
||||||
fileExchange: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອໂອນຍ້າຍໄຟລ໌ລະຫວ່າງເຊີບເວີຢ່າງວ່ອງໄວ.',
|
fileExchange: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອໂອນຍ້າຍໄຟລ໌ລະຫວ່າງເຊີບເວີຢ່າງວ່ອງໄວ.',
|
||||||
app: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອເບິ່ງລາຍລະອຽດບໍລິການ, ການຕິດຕາມສິ່ງຜິດປົກກະຕິ ແລະ ອື່ນໆໃນແອັບມືຖື.',
|
app: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອເບິ່ງລາຍລະອຽດບໍລິການ, ການຕິດຕາມສິ່ງຜິດປົກກະຕິ ແລະ ອື່ນໆໃນແອັບມືຖື.',
|
||||||
cluster: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອຈັດການ MySQL/Postgres/Redis primary-replica clusters.',
|
cluster: 'ອັບເກຣດເປັນເວີຊັນ Commercial ເພື່ອຈັດການ MySQL/Postgres/Redis primary-replica clusters.',
|
||||||
@@ -6825,6 +6829,32 @@ const message = {
|
|||||||
nodeContent3: 'ຕິດຕາມສະຖານະການທຳງານຂອງແຕ່ລະໂນດແບບທັນທີ',
|
nodeContent3: 'ຕິດຕາມສະຖານະການທຳງານຂອງແຕ່ລະໂນດແບບທັນທີ',
|
||||||
nodeTitle4: 'ເຊື່ອມຕໍ່ໄລຍະໄກວ່ອງໄວ',
|
nodeTitle4: 'ເຊື່ອມຕໍ່ໄລຍະໄກວ່ອງໄວ',
|
||||||
nodeContent4: 'ເຊື່ອມຕໍ່ຫາເທີມິນອລຂອງໂນດໄດ້ໂດຍກົງຄລິກດຽວ',
|
nodeContent4: 'ເຊື່ອມຕໍ່ຫາເທີມິນອລຂອງໂນດໄດ້ໂດຍກົງຄລິກດຽວ',
|
||||||
|
imageExchangeTitle1: 'ເລືອກອິມເມຈຕົ້ນທາງ',
|
||||||
|
imageExchangeContent1: 'ເບິ່ງອິມເມຈຄອນເທນເນີໃນໂນດຕົ້ນທາງ ແລະເລືອກອິມເມຈທີ່ຕ້ອງການໂອນຍ້າຍ.',
|
||||||
|
imageExchangeTitle2: 'ແຈກຢາຍອິມເມຈເປັນຊຸດ',
|
||||||
|
imageExchangeContent2: 'ໂອນຍ້າຍອິມເມຈທີ່ເລືອກໄປຍັງໂນດປາຍທາງໜຶ່ງຫຼືຫຼາຍໂນດ.',
|
||||||
|
imageExchangeTitle3: 'ເບິ່ງບັນທຶກການໂອນຍ້າຍ',
|
||||||
|
imageExchangeContent3: 'ຕິດຕາມຄວາມຄືບໜ້າແລະຜົນການໂອນຍ້າຍອິມເມຈໃນບັນທຶກວຽກ.',
|
||||||
|
appExchangeTitle1: 'ເລືອກແອັບຕົ້ນທາງ',
|
||||||
|
appExchangeContent1: 'ເບິ່ງແອັບທີ່ຕິດຕັ້ງໃນໂນດຕົ້ນທາງ ແລະເລືອກແອັບທີ່ຕ້ອງການຍ້າຍ.',
|
||||||
|
appExchangeTitle2: 'ຢືນຢັນຊັບພະຍາກອນທີ່ຂຶ້ນຕໍ່ກັນ',
|
||||||
|
appExchangeContent2: 'ຢືນຢັນໂນດປາຍທາງແລະຊັບພະຍາກອນທີ່ຕ້ອງໃຊ້ ເຊັ່ນ ຖານຂໍ້ມູນ ກ່ອນການຍ້າຍ.',
|
||||||
|
appExchangeTitle3: 'ຍ້າຍແອັບ',
|
||||||
|
appExchangeContent3: 'ໂອນຍ້າຍຂໍ້ມູນສຳຮອງຂອງແອັບໄປຍັງໂນດປາຍທາງເພື່ອກູ້ຄືນ ແລະເບິ່ງຜົນໃນບັນທຶກວຽກ.',
|
||||||
|
sslSyncTitle1: 'ເລືອກໃບຢັ້ງຢືນຕົ້ນທາງ',
|
||||||
|
sslSyncContent1: 'ເບິ່ງຂໍ້ມູນໃບຢັ້ງຢືນໃນໂນດຕົ້ນທາງ ແລະເລືອກໃບຢັ້ງຢືນທີ່ຕ້ອງການຊິງໂຄຣໄນ.',
|
||||||
|
sslSyncTitle2: 'ຊິງໂຄຣໄນໃບຢັ້ງຢືນລະຫວ່າງໂນດ',
|
||||||
|
sslSyncContent2: 'ຊິງໂຄຣໄນໃບຢັ້ງຢືນທີ່ເລືອກໄປຍັງໂນດປາຍທາງ ໂດຍຍົກເວັ້ນໂນດຕົ້ນທາງອັດຕະໂນມັດ.',
|
||||||
|
sslSyncTitle3: 'ຢືນຢັນວຽກຊິງໂຄຣໄນ',
|
||||||
|
sslSyncContent3: 'ກວດສອບໂນດປາຍທາງແລະໃບຢັ້ງຢືນກ່ອນດຳເນີນການ ແລ້ວເບິ່ງຜົນໃນບັນທຶກວຽກ.',
|
||||||
|
phpExtensionsSyncTitle1: 'ເລືອກແມ່ແບບສ່ວນຂະຫຍາຍ',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'ເບິ່ງຊື່ແມ່ແບບແລະລາຍການສ່ວນຂະຫຍາຍໃນໂນດຕົ້ນທາງ ແລະເລືອກແມ່ແບບທີ່ຕ້ອງການຊິງໂຄຣໄນ.',
|
||||||
|
phpExtensionsSyncTitle2: 'ຊິງໂຄຣໄນແມ່ແບບລະຫວ່າງໂນດ',
|
||||||
|
phpExtensionsSyncContent2: 'ຊິງໂຄຣໄນແມ່ແບບທີ່ເລືອກໄປຍັງໂນດປາຍທາງ ໂດຍຍົກເວັ້ນໂນດຕົ້ນທາງອັດຕະໂນມັດ.',
|
||||||
|
phpExtensionsSyncTitle3: 'ກວດສອບແມ່ແບບຊື່ດຽວກັນ',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'ຈະຂ້າມແມ່ແບບທີ່ມີຊື່ແລະເນື້ອຫາຄືກັນ. ຖ້າເນື້ອຫາຕ່າງກັນ ຈະແຈ້ງຂໍ້ຂັດແຍ່ງແລະບໍ່ຂຽນທັບ.',
|
||||||
fileExchangeTitle1: 'ສົ່ງຂໍ້ມູນຜ່ານ Key Authentication',
|
fileExchangeTitle1: 'ສົ່ງຂໍ້ມູນຜ່ານ Key Authentication',
|
||||||
fileExchangeContent1: 'ຢືນຢັນຕົວຕົນຜ່ານ SSH keys ເພື່ອຄວາມປອດໄພໃນການສົ່ງຂໍ້ມູນ.',
|
fileExchangeContent1: 'ຢືນຢັນຕົວຕົນຜ່ານ SSH keys ເພື່ອຄວາມປອດໄພໃນການສົ່ງຂໍ້ມູນ.',
|
||||||
fileExchangeTitle2: 'ຊິງໂຄຣໄນໄຟລ໌ທີ່ມີປະສິດທິພາບ',
|
fileExchangeTitle2: 'ຊິງໂຄຣໄນໄຟລ໌ທີ່ມີປະສິດທິພາບ',
|
||||||
@@ -7302,6 +7332,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'ກຳລັງຈະໂອນ {0} images ໄປຫາ {1} ໂນດ, ລວມທັງໝົດ {2} ງານ.',
|
imageBatchConfirmPrefix: 'ກຳລັງຈະໂອນ {0} images ໄປຫາ {1} ໂນດ, ລວມທັງໝົດ {2} ງານ.',
|
||||||
|
|
||||||
ssl: 'ຊິງໂຄຣໄນໃບຢັ້ງຢືນ',
|
ssl: 'ຊິງໂຄຣໄນໃບຢັ້ງຢືນ',
|
||||||
|
phpExtensions: 'ຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ PHP',
|
||||||
|
phpExtensionsTitle: 'ຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ',
|
||||||
|
phpExtensionsDesc: 'ເລືອກໂນດຕົ້ນທາງເພື່ອຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ PHP ໄປຍັງໂນດປາຍທາງ.',
|
||||||
|
phpExtensionsList: 'ລາຍການສ່ວນຂະຫຍາຍ',
|
||||||
|
phpExtensionsConfirm: 'ຈະຊິງໂຄຣໄນແມ່ແບບສ່ວນຂະຫຍາຍ PHP {0} ແມ່ແບບ ໄປຍັງ {1} ໂນດ.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'ຈະຂ້າມແມ່ແບບທີ່ມີຊື່ແລະເນື້ອຫາຄືກັນ. ຖ້າຊື່ຄືກັນແຕ່ເນື້ອຫາຕ່າງກັນ ຈະແຈ້ງຂໍ້ຂັດແຍ່ງແລະບໍ່ຂຽນທັບ.',
|
||||||
sslBatchDesc: 'ເລືອກໂນດຕົ້ນທາງ ແລະ ຊິງໂຄຣໄນໃບຢັ້ງຢືນທີ່ກຳນົດເຂົ້າມາໃນພາແນລປັດຈຸບັນ.',
|
sslBatchDesc: 'ເລືອກໂນດຕົ້ນທາງ ແລະ ຊິງໂຄຣໄນໃບຢັ້ງຢືນທີ່ກຳນົດເຂົ້າມາໃນພາແນລປັດຈຸບັນ.',
|
||||||
sslBatchConfirmPrefix: 'ກຳລັງຈະຊິງໂຄຣໄນ {0} ໃບຢັ້ງຢືນ ໄປຫາ {1} ໂນດ, ລວມທັງໝົດ {2} ງານ.',
|
sslBatchConfirmPrefix: 'ກຳລັງຈະຊິງໂຄຣໄນ {0} ໃບຢັ້ງຢືນ ໄປຫາ {1} ໂນດ, ລວມທັງໝົດ {2} ງານ.',
|
||||||
|
|
||||||
|
|||||||
@@ -4076,6 +4076,13 @@ const message = {
|
|||||||
'Naik taraf ke Edisi Komersial untuk menaik taraf versi aplikasi berbilang nod tanpa menukar nod secara manual.',
|
'Naik taraf ke Edisi Komersial untuk menaik taraf versi aplikasi berbilang nod tanpa menukar nod secara manual.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Naik taraf ke Edisi Komersial untuk mengurus aplikasi, laman web, pangkalan data dan tugas berjadual berbilang nod secara berpusat.',
|
'Naik taraf ke Edisi Komersial untuk mengurus aplikasi, laman web, pangkalan data dan tugas berjadual berbilang nod secara berpusat.',
|
||||||
|
imageExchange: 'Naik taraf ke edisi komersial untuk memindahkan imej kontena antara nod secara kelompok.',
|
||||||
|
appExchange:
|
||||||
|
'Naik taraf ke edisi komersial untuk memindahkan aplikasi yang dipasang ke nod sasaran dan mengesahkan sumber kebergantungannya.',
|
||||||
|
sslSync:
|
||||||
|
'Naik taraf ke edisi komersial untuk menyegerakkan sijil daripada nod sumber ke satu atau lebih nod sasaran.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'Naik taraf ke edisi komersial untuk menyegerakkan templat sambungan PHP ke satu atau lebih nod sasaran.',
|
||||||
fileExchange: 'Naik taraf ke Edisi Komersial untuk memindahkan fail dengan pantas antara pelayan.',
|
fileExchange: 'Naik taraf ke Edisi Komersial untuk memindahkan fail dengan pantas antara pelayan.',
|
||||||
app: 'Naik taraf ke Edisi Komersial untuk melihat maklumat perkhidmatan dan pemantauan anomali dalam aplikasi mudah alih.',
|
app: 'Naik taraf ke Edisi Komersial untuk melihat maklumat perkhidmatan dan pemantauan anomali dalam aplikasi mudah alih.',
|
||||||
cluster: 'Naik taraf ke Edisi Komersial untuk mengurus kelompok utama-replika MySQL/Postgres/Redis.',
|
cluster: 'Naik taraf ke Edisi Komersial untuk mengurus kelompok utama-replika MySQL/Postgres/Redis.',
|
||||||
@@ -7137,6 +7144,38 @@ const message = {
|
|||||||
nodeContent3: 'Memantau status operasi setiap nod secara real-time',
|
nodeContent3: 'Memantau status operasi setiap nod secara real-time',
|
||||||
nodeTitle4: 'Sambungan Jauh Pantas',
|
nodeTitle4: 'Sambungan Jauh Pantas',
|
||||||
nodeContent4: 'Sambung terus ke terminal jauh nod dengan satu klik',
|
nodeContent4: 'Sambung terus ke terminal jauh nod dengan satu klik',
|
||||||
|
imageExchangeTitle1: 'Pilih imej sumber',
|
||||||
|
imageExchangeContent1: 'Lihat imej kontena pada nod sumber dan pilih imej yang ingin dipindahkan.',
|
||||||
|
imageExchangeTitle2: 'Edarkan imej secara kelompok',
|
||||||
|
imageExchangeContent2: 'Pindahkan imej yang dipilih ke satu atau lebih nod sasaran.',
|
||||||
|
imageExchangeTitle3: 'Lihat log pemindahan',
|
||||||
|
imageExchangeContent3: 'Pantau kemajuan dan hasil pemindahan imej dalam log tugas.',
|
||||||
|
appExchangeTitle1: 'Pilih aplikasi sumber',
|
||||||
|
appExchangeContent1:
|
||||||
|
'Lihat aplikasi yang dipasang pada nod sumber dan pilih aplikasi yang ingin dipindahkan.',
|
||||||
|
appExchangeTitle2: 'Sahkan kebergantungan',
|
||||||
|
appExchangeContent2:
|
||||||
|
'Sahkan nod sasaran dan sumber yang diperlukan, seperti pangkalan data, sebelum pemindahan.',
|
||||||
|
appExchangeTitle3: 'Pindahkan aplikasi',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Pindahkan sandaran aplikasi ke nod sasaran untuk pemulihan dan lihat hasilnya dalam log tugas.',
|
||||||
|
sslSyncTitle1: 'Pilih sijil sumber',
|
||||||
|
sslSyncContent1: 'Lihat maklumat sijil pada nod sumber dan pilih sijil yang ingin disegerakkan.',
|
||||||
|
sslSyncTitle2: 'Segerakkan sijil antara nod',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Segerakkan sijil yang dipilih ke nod sasaran dengan mengecualikan nod sumber secara automatik.',
|
||||||
|
sslSyncTitle3: 'Sahkan tugas penyegerakan',
|
||||||
|
sslSyncContent3:
|
||||||
|
'Semak nod sasaran dan sijil sebelum pelaksanaan, kemudian lihat hasilnya dalam log tugas.',
|
||||||
|
phpExtensionsSyncTitle1: 'Pilih templat sambungan',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Lihat nama templat dan senarai sambungan pada nod sumber, kemudian pilih templat yang ingin disegerakkan.',
|
||||||
|
phpExtensionsSyncTitle2: 'Segerakkan templat antara nod',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Segerakkan templat yang dipilih ke nod sasaran dengan mengecualikan nod sumber secara automatik.',
|
||||||
|
phpExtensionsSyncTitle3: 'Semak templat bernama sama',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Templat dengan nama dan kandungan yang sama akan dilangkau. Kandungan yang berbeza dilaporkan sebagai konflik tanpa menulis ganti templat.',
|
||||||
fileExchangeTitle1: 'Pengangkutan Pengesahan Kunci',
|
fileExchangeTitle1: 'Pengangkutan Pengesahan Kunci',
|
||||||
fileExchangeContent1: 'Mengesahkan melalui kunci SSH untuk memastikan keselamatan pengangkutan.',
|
fileExchangeContent1: 'Mengesahkan melalui kunci SSH untuk memastikan keselamatan pengangkutan.',
|
||||||
fileExchangeTitle2: 'Segerakan Fail Cekap',
|
fileExchangeTitle2: 'Segerakan Fail Cekap',
|
||||||
@@ -7660,6 +7699,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'Akan memindahkan {0} imej ke {1} nod, dengan jumlah {2} tugasan.',
|
imageBatchConfirmPrefix: 'Akan memindahkan {0} imej ke {1} nod, dengan jumlah {2} tugasan.',
|
||||||
|
|
||||||
ssl: 'Penyegerakan Sijil',
|
ssl: 'Penyegerakan Sijil',
|
||||||
|
phpExtensions: 'Penyegerakan Templat Sambungan PHP',
|
||||||
|
phpExtensionsTitle: 'Penyegerakan Templat Sambungan',
|
||||||
|
phpExtensionsDesc: 'Pilih nod sumber untuk menyegerakkan templat sambungan PHP ke nod sasaran.',
|
||||||
|
phpExtensionsList: 'Senarai sambungan',
|
||||||
|
phpExtensionsConfirm: 'Segerakkan {0} templat sambungan PHP ke {1} nod.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Templat dengan nama dan kandungan yang sama akan dilangkau. Jika nama sama tetapi kandungan berbeza, konflik akan dilaporkan tanpa menulis ganti templat.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'Selepas memilih nod sumber, sijil yang ditentukan boleh disegerakkan ke persekitaran panel semasa.',
|
'Selepas memilih nod sumber, sijil yang ditentukan boleh disegerakkan ke persekitaran panel semasa.',
|
||||||
sslBatchConfirmPrefix: 'Akan menyegerakkan {0} sijil ke {1} nod, dengan jumlah {2} tugasan.',
|
sslBatchConfirmPrefix: 'Akan menyegerakkan {0} sijil ke {1} nod, dengan jumlah {2} tugasan.',
|
||||||
|
|||||||
@@ -4082,6 +4082,13 @@ const message = {
|
|||||||
'Atualize para a edição comercial para atualizar versões de aplicativos multi-nó sem alternar manualmente entre os nós.',
|
'Atualize para a edição comercial para atualizar versões de aplicativos multi-nó sem alternar manualmente entre os nós.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Atualize para a edição comercial para gerenciar aplicativos, sites, bancos de dados e tarefas agendadas multi-nó de forma centralizada.',
|
'Atualize para a edição comercial para gerenciar aplicativos, sites, bancos de dados e tarefas agendadas multi-nó de forma centralizada.',
|
||||||
|
imageExchange: 'Atualize para a edição comercial para transferir imagens de contêineres entre nós em lote.',
|
||||||
|
appExchange:
|
||||||
|
'Atualize para a edição comercial para migrar aplicativos instalados para nós de destino e confirmar os recursos necessários.',
|
||||||
|
sslSync:
|
||||||
|
'Atualize para a edição comercial para sincronizar certificados do nó de origem com um ou mais nós de destino.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'Atualize para a edição comercial para sincronizar modelos de extensões PHP com um ou mais nós de destino.',
|
||||||
fileExchange: 'Atualize para a edição comercial para transferir arquivos rapidamente entre vários servidores.',
|
fileExchange: 'Atualize para a edição comercial para transferir arquivos rapidamente entre vários servidores.',
|
||||||
app: 'Faça upgrade para a edição comercial para visualizar informações do serviço e monitoramento de anomalias no aplicativo móvel.',
|
app: 'Faça upgrade para a edição comercial para visualizar informações do serviço e monitoramento de anomalias no aplicativo móvel.',
|
||||||
cluster: 'Atualize para a edição comercial para gerenciar clusters primário-réplica de MySQL/Postgres/Redis.',
|
cluster: 'Atualize para a edição comercial para gerenciar clusters primário-réplica de MySQL/Postgres/Redis.',
|
||||||
@@ -7172,6 +7179,39 @@ const message = {
|
|||||||
nodeContent3: 'Acompanhe em tempo real o status operacional de cada nó',
|
nodeContent3: 'Acompanhe em tempo real o status operacional de cada nó',
|
||||||
nodeTitle4: 'Conexão Remota Rápida',
|
nodeTitle4: 'Conexão Remota Rápida',
|
||||||
nodeContent4: 'Conecte-se diretamente a terminais remotos de nós com um clique',
|
nodeContent4: 'Conecte-se diretamente a terminais remotos de nós com um clique',
|
||||||
|
imageExchangeTitle1: 'Selecionar imagens de origem',
|
||||||
|
imageExchangeContent1:
|
||||||
|
'Veja as imagens de contêineres no nó de origem e selecione as que deseja transferir.',
|
||||||
|
imageExchangeTitle2: 'Distribuir imagens em lote',
|
||||||
|
imageExchangeContent2: 'Transfira as imagens selecionadas para um ou mais nós de destino.',
|
||||||
|
imageExchangeTitle3: 'Ver logs de transferência',
|
||||||
|
imageExchangeContent3:
|
||||||
|
'Acompanhe o progresso e os resultados da transferência de imagens nos logs de tarefas.',
|
||||||
|
appExchangeTitle1: 'Selecionar aplicativo de origem',
|
||||||
|
appExchangeContent1: 'Veja os aplicativos instalados no nó de origem e selecione o que deseja migrar.',
|
||||||
|
appExchangeTitle2: 'Confirmar dependências',
|
||||||
|
appExchangeContent2:
|
||||||
|
'Confirme os nós de destino e os recursos necessários, como bancos de dados, antes da migração.',
|
||||||
|
appExchangeTitle3: 'Migrar aplicativos',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Transfira backups dos aplicativos para restauração nos nós de destino e veja os resultados nos logs de tarefas.',
|
||||||
|
sslSyncTitle1: 'Selecionar certificados',
|
||||||
|
sslSyncContent1: 'Veja os detalhes dos certificados no nó de origem e selecione os que deseja sincronizar.',
|
||||||
|
sslSyncTitle2: 'Sincronizar certificados entre nós',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Sincronize os certificados selecionados com os nós de destino, excluindo automaticamente o nó de origem.',
|
||||||
|
sslSyncTitle3: 'Confirmar tarefas de sincronização',
|
||||||
|
sslSyncContent3:
|
||||||
|
'Confira os nós de destino e os certificados antes da execução e veja os resultados nos logs de tarefas.',
|
||||||
|
phpExtensionsSyncTitle1: 'Selecionar modelo de extensões',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Veja os nomes dos modelos e suas listas de extensões no nó de origem e selecione o modelo que deseja sincronizar.',
|
||||||
|
phpExtensionsSyncTitle2: 'Sincronizar modelos entre nós',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Sincronize o modelo selecionado com os nós de destino, excluindo automaticamente o nó de origem.',
|
||||||
|
phpExtensionsSyncTitle3: 'Verificar modelos existentes',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Modelos com nome e conteúdo idênticos são ignorados. Conteúdos diferentes geram um aviso de conflito, sem sobrescrever o modelo.',
|
||||||
fileExchangeTitle1: 'Transmissão de Autenticação por Chave',
|
fileExchangeTitle1: 'Transmissão de Autenticação por Chave',
|
||||||
fileExchangeContent1: 'Autentique via chaves SSH para garantir a segurança da transmissão.',
|
fileExchangeContent1: 'Autentique via chaves SSH para garantir a segurança da transmissão.',
|
||||||
fileExchangeTitle2: 'Sincronização de Arquivos Eficiente',
|
fileExchangeTitle2: 'Sincronização de Arquivos Eficiente',
|
||||||
@@ -7697,6 +7737,14 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'Serão encaminhadas {0} imagens para {1} nós, totalizando {2} tarefas.',
|
imageBatchConfirmPrefix: 'Serão encaminhadas {0} imagens para {1} nós, totalizando {2} tarefas.',
|
||||||
|
|
||||||
ssl: 'Sincronização de Certificados',
|
ssl: 'Sincronização de Certificados',
|
||||||
|
phpExtensions: 'Sincronização de modelos de extensões PHP',
|
||||||
|
phpExtensionsTitle: 'Sincronização de modelos de extensões',
|
||||||
|
phpExtensionsDesc:
|
||||||
|
'Selecione um nó de origem para sincronizar seu modelo de extensões PHP com os nós de destino.',
|
||||||
|
phpExtensionsList: 'Lista de extensões',
|
||||||
|
phpExtensionsConfirm: 'Sincronizar {0} modelos de extensões PHP com {1} nós.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Modelos com o mesmo nome e conteúdo são ignorados. Se o nome for igual e o conteúdo diferente, o conflito será informado sem sobrescrever o modelo.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'Após selecionar o nó de origem, os certificados especificados podem ser sincronizados com o ambiente atual do painel.',
|
'Após selecionar o nó de origem, os certificados especificados podem ser sincronizados com o ambiente atual do painel.',
|
||||||
sslBatchConfirmPrefix: 'Serão sincronizados {0} certificados para {1} nós, totalizando {2} tarefas.',
|
sslBatchConfirmPrefix: 'Serão sincronizados {0} certificados para {1} nós, totalizando {2} tarefas.',
|
||||||
|
|||||||
@@ -4058,6 +4058,13 @@ const message = {
|
|||||||
'Обновление до коммерческой редакции позволяет унифицированно обновлять версии приложений на нескольких узлах без необходимости ручного переключения узлов.',
|
'Обновление до коммерческой редакции позволяет унифицированно обновлять версии приложений на нескольких узлах без необходимости ручного переключения узлов.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Обновление до коммерческой редакции позволяет централизованно управлять приложениями, веб-сайтами, базами данных и запланированными задачами на нескольких узлах.',
|
'Обновление до коммерческой редакции позволяет централизованно управлять приложениями, веб-сайтами, базами данных и запланированными задачами на нескольких узлах.',
|
||||||
|
imageExchange: 'Перейдите на коммерческую версию для пакетной передачи образов контейнеров между узлами.',
|
||||||
|
appExchange:
|
||||||
|
'Перейдите на коммерческую версию для переноса установленных приложений на целевые узлы и подтверждения зависимых ресурсов.',
|
||||||
|
sslSync:
|
||||||
|
'Перейдите на коммерческую версию для синхронизации сертификатов исходного узла с одним или несколькими целевыми узлами.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'Перейдите на коммерческую версию для синхронизации шаблонов расширений PHP с одним или несколькими целевыми узлами.',
|
||||||
fileExchange: 'Обновите до Коммерческой версии, чтобы быстро передавать файлы между несколькими серверами.',
|
fileExchange: 'Обновите до Коммерческой версии, чтобы быстро передавать файлы между несколькими серверами.',
|
||||||
app: 'Обновите до коммерческой версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.',
|
app: 'Обновите до коммерческой версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.',
|
||||||
cluster: 'Обновление до коммерческой версии позволяет управлять кластерами мастер-слейв MySQL/Postgres/Redis.',
|
cluster: 'Обновление до коммерческой версии позволяет управлять кластерами мастер-слейв MySQL/Postgres/Redis.',
|
||||||
@@ -7146,6 +7153,39 @@ const message = {
|
|||||||
nodeContent3: 'Реальное наблюдение за рабочим статусом каждого узла',
|
nodeContent3: 'Реальное наблюдение за рабочим статусом каждого узла',
|
||||||
nodeTitle4: 'Быстрое удаленное подключение',
|
nodeTitle4: 'Быстрое удаленное подключение',
|
||||||
nodeContent4: 'Одним кликом подключитесь к удаленным терминалам узлов',
|
nodeContent4: 'Одним кликом подключитесь к удаленным терминалам узлов',
|
||||||
|
imageExchangeTitle1: 'Выбор исходных образов',
|
||||||
|
imageExchangeContent1: 'Просмотрите образы контейнеров на исходном узле и выберите образы для передачи.',
|
||||||
|
imageExchangeTitle2: 'Пакетная передача образов',
|
||||||
|
imageExchangeContent2: 'Передавайте выбранные образы на один или несколько целевых узлов.',
|
||||||
|
imageExchangeTitle3: 'Просмотр журналов передачи',
|
||||||
|
imageExchangeContent3: 'Отслеживайте ход и результаты передачи образов в журналах задач.',
|
||||||
|
appExchangeTitle1: 'Выбор исходного приложения',
|
||||||
|
appExchangeContent1:
|
||||||
|
'Просмотрите установленные приложения на исходном узле и выберите приложение для переноса.',
|
||||||
|
appExchangeTitle2: 'Подтверждение зависимостей',
|
||||||
|
appExchangeContent2:
|
||||||
|
'Перед переносом подтвердите целевые узлы и необходимые ресурсы, например базы данных.',
|
||||||
|
appExchangeTitle3: 'Перенос приложений',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Передавайте резервные копии приложений на целевые узлы для восстановления и просматривайте результаты в журналах задач.',
|
||||||
|
sslSyncTitle1: 'Выбор сертификатов',
|
||||||
|
sslSyncContent1:
|
||||||
|
'Просмотрите сведения о сертификатах на исходном узле и выберите сертификаты для синхронизации.',
|
||||||
|
sslSyncTitle2: 'Синхронизация сертификатов между узлами',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Синхронизируйте выбранные сертификаты с целевыми узлами, автоматически исключая исходный узел.',
|
||||||
|
sslSyncTitle3: 'Подтверждение задач синхронизации',
|
||||||
|
sslSyncContent3:
|
||||||
|
'Проверьте целевые узлы и сертификаты перед выполнением, затем просмотрите результаты в журналах задач.',
|
||||||
|
phpExtensionsSyncTitle1: 'Выбор шаблона расширений',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Просмотрите имена шаблонов и списки расширений на исходном узле и выберите шаблон для синхронизации.',
|
||||||
|
phpExtensionsSyncTitle2: 'Синхронизация шаблонов между узлами',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Синхронизируйте выбранный шаблон с целевыми узлами, автоматически исключая исходный узел.',
|
||||||
|
phpExtensionsSyncTitle3: 'Проверка одноимённых шаблонов',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Шаблоны с одинаковыми именами и содержимым пропускаются. При различии содержимого сообщается о конфликте без перезаписи.',
|
||||||
fileExchangeTitle1: 'Передача с аутентификацией по ключу',
|
fileExchangeTitle1: 'Передача с аутентификацией по ключу',
|
||||||
fileExchangeContent1: 'Аутентифицируйтесь через SSH-ключи, чтобы обеспечить безопасность передачи.',
|
fileExchangeContent1: 'Аутентифицируйтесь через SSH-ключи, чтобы обеспечить безопасность передачи.',
|
||||||
fileExchangeTitle2: 'Эффективная синхронизация файлов',
|
fileExchangeTitle2: 'Эффективная синхронизация файлов',
|
||||||
@@ -7676,6 +7716,14 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: 'Будет передано {0} образов на {1} узлов, всего {2} задач.',
|
imageBatchConfirmPrefix: 'Будет передано {0} образов на {1} узлов, всего {2} задач.',
|
||||||
|
|
||||||
ssl: 'Синхронизация сертификатов',
|
ssl: 'Синхронизация сертификатов',
|
||||||
|
phpExtensions: 'Синхронизация шаблонов расширений PHP',
|
||||||
|
phpExtensionsTitle: 'Синхронизация шаблонов расширений',
|
||||||
|
phpExtensionsDesc:
|
||||||
|
'Выберите исходный узел, чтобы синхронизировать его шаблон расширений PHP с целевыми узлами.',
|
||||||
|
phpExtensionsList: 'Список расширений',
|
||||||
|
phpExtensionsConfirm: 'Синхронизировать шаблоны расширений PHP ({0}) с узлами ({1}).',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Шаблоны с одинаковыми именами и содержимым пропускаются. При совпадении имени и различии содержимого сообщается о конфликте без перезаписи.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'После выбора исходного узла указанные сертификаты можно синхронизировать с текущей средой панели.',
|
'После выбора исходного узла указанные сертификаты можно синхронизировать с текущей средой панели.',
|
||||||
sslBatchConfirmPrefix: 'Будет синхронизировано {0} сертификатов на {1} узлов, всего {2} задач.',
|
sslBatchConfirmPrefix: 'Будет синхронизировано {0} сертификатов на {1} узлов, всего {2} задач.',
|
||||||
|
|||||||
@@ -4071,6 +4071,13 @@ const message = {
|
|||||||
'Ticari sürüme yükselterek düğümleri manuel değiştirmeden çok düğümlü uygulama sürümlerini toplu olarak yükseltebilirsiniz.',
|
'Ticari sürüme yükselterek düğümleri manuel değiştirmeden çok düğümlü uygulama sürümlerini toplu olarak yükseltebilirsiniz.',
|
||||||
nodeDashboard:
|
nodeDashboard:
|
||||||
'Ticari sürüme yükselterek çok düğümlü uygulamaları, web sitelerini, veritabanlarını ve zamanlanmış görevleri merkezi olarak yönetebilirsiniz.',
|
'Ticari sürüme yükselterek çok düğümlü uygulamaları, web sitelerini, veritabanlarını ve zamanlanmış görevleri merkezi olarak yönetebilirsiniz.',
|
||||||
|
imageExchange: 'Konteyner imajlarını düğümler arasında toplu olarak aktarmak için ticari sürüme yükseltin.',
|
||||||
|
appExchange:
|
||||||
|
'Kurulu uygulamaları hedef düğümlere taşımak ve gerekli kaynak bağımlılıklarını onaylamak için ticari sürüme yükseltin.',
|
||||||
|
sslSync:
|
||||||
|
'Kaynak düğümdeki sertifikaları bir veya daha fazla hedef düğümle eşitlemek için ticari sürüme yükseltin.',
|
||||||
|
phpExtensionsSync:
|
||||||
|
'PHP eklenti şablonlarını bir veya daha fazla hedef düğümle eşitlemek için ticari sürüme yükseltin.',
|
||||||
fileExchange: 'Ticari sürüme yükselterek birden fazla sunucu arasında dosyaları hızlıca aktarabilirsiniz.',
|
fileExchange: 'Ticari sürüme yükselterek birden fazla sunucu arasında dosyaları hızlıca aktarabilirsiniz.',
|
||||||
app: 'Ticari sürüme yükselterek mobil uygulamada hizmet bilgilerini ve anormallik izlemeyi görüntüleyebilirsiniz.',
|
app: 'Ticari sürüme yükselterek mobil uygulamada hizmet bilgilerini ve anormallik izlemeyi görüntüleyebilirsiniz.',
|
||||||
cluster: 'Ticari sürüme yükselterek MySQL/Postgres/Redis birincil-kopya kümelerini yönetebilirsiniz.',
|
cluster: 'Ticari sürüme yükselterek MySQL/Postgres/Redis birincil-kopya kümelerini yönetebilirsiniz.',
|
||||||
@@ -7149,6 +7156,36 @@ const message = {
|
|||||||
nodeContent3: 'Her düğümün çalışma durumunu gerçek zamanlı olarak izler',
|
nodeContent3: 'Her düğümün çalışma durumunu gerçek zamanlı olarak izler',
|
||||||
nodeTitle4: 'Hızlı Uzak Bağlantı',
|
nodeTitle4: 'Hızlı Uzak Bağlantı',
|
||||||
nodeContent4: 'Düğümlere tek tıkla doğrudan uzak terminal bağlantısı',
|
nodeContent4: 'Düğümlere tek tıkla doğrudan uzak terminal bağlantısı',
|
||||||
|
imageExchangeTitle1: 'Kaynak imajları seçin',
|
||||||
|
imageExchangeContent1: 'Kaynak düğümdeki konteyner imajlarını görüntüleyin ve aktarılacak imajları seçin.',
|
||||||
|
imageExchangeTitle2: 'İmajları toplu dağıtın',
|
||||||
|
imageExchangeContent2: 'Seçilen imajları bir veya daha fazla hedef düğüme aktarın.',
|
||||||
|
imageExchangeTitle3: 'Aktarım günlüklerini görüntüleyin',
|
||||||
|
imageExchangeContent3: 'İmaj aktarımının ilerlemesini ve sonuçlarını görev günlüklerinden takip edin.',
|
||||||
|
appExchangeTitle1: 'Kaynak uygulamayı seçin',
|
||||||
|
appExchangeContent1: 'Kaynak düğümde kurulu uygulamaları görüntüleyin ve taşınacak uygulamayı seçin.',
|
||||||
|
appExchangeTitle2: 'Bağımlılıkları onaylayın',
|
||||||
|
appExchangeContent2: 'Taşıma öncesinde hedef düğümleri ve veritabanları gibi gerekli kaynakları onaylayın.',
|
||||||
|
appExchangeTitle3: 'Uygulamaları taşıyın',
|
||||||
|
appExchangeContent3:
|
||||||
|
'Uygulama yedeklerini geri yüklemek üzere hedef düğümlere aktarın ve sonuçları görev günlüklerinden görüntüleyin.',
|
||||||
|
sslSyncTitle1: 'Sertifikaları seçin',
|
||||||
|
sslSyncContent1: 'Kaynak düğümdeki sertifika bilgilerini görüntüleyin ve eşitlenecek sertifikaları seçin.',
|
||||||
|
sslSyncTitle2: 'Düğümler arasında sertifika eşitleme',
|
||||||
|
sslSyncContent2:
|
||||||
|
'Kaynak düğümü otomatik olarak hariç tutarak seçilen sertifikaları hedef düğümlerle eşitleyin.',
|
||||||
|
sslSyncTitle3: 'Eşitleme görevlerini onaylayın',
|
||||||
|
sslSyncContent3:
|
||||||
|
'Çalıştırmadan önce hedef düğümleri ve sertifikaları kontrol edin, ardından sonuçları görev günlüklerinden görüntüleyin.',
|
||||||
|
phpExtensionsSyncTitle1: 'Eklenti şablonunu seçin',
|
||||||
|
phpExtensionsSyncContent1:
|
||||||
|
'Kaynak düğümdeki şablon adlarını ve eklenti listelerini görüntüleyin, eşitlenecek şablonu seçin.',
|
||||||
|
phpExtensionsSyncTitle2: 'Düğümler arasında şablon eşitleme',
|
||||||
|
phpExtensionsSyncContent2:
|
||||||
|
'Kaynak düğümü otomatik olarak hariç tutarak seçilen şablonu hedef düğümlerle eşitleyin.',
|
||||||
|
phpExtensionsSyncTitle3: 'Aynı adlı şablonları kontrol edin',
|
||||||
|
phpExtensionsSyncContent3:
|
||||||
|
'Adı ve içeriği aynı olan şablonlar atlanır. İçerik farklıysa çakışma bildirilir ve üzerine yazılmaz.',
|
||||||
fileExchangeTitle1: 'Anahtar Kimlik Doğrulama İletimi',
|
fileExchangeTitle1: 'Anahtar Kimlik Doğrulama İletimi',
|
||||||
fileExchangeContent1: 'İletim güvenliğini sağlamak için SSH anahtarları ile kimlik doğrulaması yapar.',
|
fileExchangeContent1: 'İletim güvenliğini sağlamak için SSH anahtarları ile kimlik doğrulaması yapar.',
|
||||||
fileExchangeTitle2: 'Verimli Dosya Senkronizasyonu',
|
fileExchangeTitle2: 'Verimli Dosya Senkronizasyonu',
|
||||||
@@ -7673,6 +7710,13 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: '{0} imaj {1} düğüme aktarılacak, toplam {2} görev oluşturulacak.',
|
imageBatchConfirmPrefix: '{0} imaj {1} düğüme aktarılacak, toplam {2} görev oluşturulacak.',
|
||||||
|
|
||||||
ssl: 'Sertifika Senkronizasyonu',
|
ssl: 'Sertifika Senkronizasyonu',
|
||||||
|
phpExtensions: 'PHP Eklenti Şablonu Eşitleme',
|
||||||
|
phpExtensionsTitle: 'Eklenti Şablonu Eşitleme',
|
||||||
|
phpExtensionsDesc: 'PHP eklenti şablonunu hedef düğümlerle eşitlemek için bir kaynak düğüm seçin.',
|
||||||
|
phpExtensionsList: 'Eklenti listesi',
|
||||||
|
phpExtensionsConfirm: '{0} PHP eklenti şablonu {1} düğümle eşitlenecek.',
|
||||||
|
phpExtensionsConflictHint:
|
||||||
|
'Adı ve içeriği aynı olan şablonlar atlanır. Adı aynı ancak içeriği farklı olan şablonlar için çakışma bildirilir ve üzerine yazılmaz.',
|
||||||
sslBatchDesc:
|
sslBatchDesc:
|
||||||
'Kaynak düğüm seçildikten sonra belirtilen sertifikalar mevcut panel ortamına senkronize edilebilir.',
|
'Kaynak düğüm seçildikten sonra belirtilen sertifikalar mevcut panel ortamına senkronize edilebilir.',
|
||||||
sslBatchConfirmPrefix: '{0} sertifika {1} düğüme senkronize edilecek, toplam {2} görev oluşturulacak.',
|
sslBatchConfirmPrefix: '{0} sertifika {1} düğüme senkronize edilecek, toplam {2} görev oluşturulacak.',
|
||||||
|
|||||||
@@ -3747,6 +3747,10 @@ const message = {
|
|||||||
node: '升級商業版可以使用 1Panel 管理多台 Linux 伺服器。',
|
node: '升級商業版可以使用 1Panel 管理多台 Linux 伺服器。',
|
||||||
nodeApp: '升級商業版可以統一升級多節點應用版本,無需手動切換節點。',
|
nodeApp: '升級商業版可以統一升級多節點應用版本,無需手動切換節點。',
|
||||||
nodeDashboard: '升級商業版可以集中管理多節點應用、網站、資料庫和計劃任務。',
|
nodeDashboard: '升級商業版可以集中管理多節點應用、網站、資料庫和計劃任務。',
|
||||||
|
imageExchange: '升級商業版可以在多個節點之間批次傳輸容器映像。',
|
||||||
|
appExchange: '升級商業版可以將已安裝的應用程式遷移到目標節點,並確認所需的關聯資源。',
|
||||||
|
sslSync: '升級商業版可以將來源節點的憑證同步到一個或多個目標節點。',
|
||||||
|
phpExtensionsSync: '升級商業版可以將 PHP 擴充範本同步到一個或多個目標節點。',
|
||||||
fileExchange: '升級商業版可以在多台伺服器之間快速傳輸檔案。',
|
fileExchange: '升級商業版可以在多台伺服器之間快速傳輸檔案。',
|
||||||
app: '升級商業版可透過手機APP,檢視服務資訊、異常監控等。',
|
app: '升級商業版可透過手機APP,檢視服務資訊、異常監控等。',
|
||||||
cluster: '升級商業版可以管理 MySQL/Postgres/Redis 主從叢集。',
|
cluster: '升級商業版可以管理 MySQL/Postgres/Redis 主從叢集。',
|
||||||
@@ -6539,6 +6543,30 @@ const message = {
|
|||||||
nodeContent3: '即時掌握各節點執行狀態',
|
nodeContent3: '即時掌握各節點執行狀態',
|
||||||
nodeTitle4: '快速遠端連接',
|
nodeTitle4: '快速遠端連接',
|
||||||
nodeContent4: '一鍵直連節點遠端終端',
|
nodeContent4: '一鍵直連節點遠端終端',
|
||||||
|
imageExchangeTitle1: '選擇來源映像',
|
||||||
|
imageExchangeContent1: '檢視來源節點的容器映像,選擇需要傳輸的映像。',
|
||||||
|
imageExchangeTitle2: '批次分發映像',
|
||||||
|
imageExchangeContent2: '將選取的映像傳輸到一個或多個目標節點。',
|
||||||
|
imageExchangeTitle3: '檢視傳輸日誌',
|
||||||
|
imageExchangeContent3: '透過任務日誌檢視映像傳輸進度和執行結果。',
|
||||||
|
appExchangeTitle1: '選擇來源應用程式',
|
||||||
|
appExchangeContent1: '檢視來源節點已安裝的應用程式,選擇需要遷移的應用程式。',
|
||||||
|
appExchangeTitle2: '確認資源相依性',
|
||||||
|
appExchangeContent2: '遷移前確認目標節點及應用程式所需的資料庫等關聯資源。',
|
||||||
|
appExchangeTitle3: '執行應用程式遷移',
|
||||||
|
appExchangeContent3: '將應用程式備份傳輸到目標節點進行還原,並透過任務日誌檢視結果。',
|
||||||
|
sslSyncTitle1: '選擇來源憑證',
|
||||||
|
sslSyncContent1: '檢視來源節點的憑證資訊,選擇需要同步的憑證。',
|
||||||
|
sslSyncTitle2: '多節點憑證同步',
|
||||||
|
sslSyncContent2: '將選取的憑證同步到目標節點,自動排除來源節點。',
|
||||||
|
sslSyncTitle3: '確認同步任務',
|
||||||
|
sslSyncContent3: '執行前確認目標節點和憑證,透過任務日誌檢視同步結果。',
|
||||||
|
phpExtensionsSyncTitle1: '選擇擴充範本',
|
||||||
|
phpExtensionsSyncContent1: '檢視來源節點的範本名稱和擴充清單,選擇需要同步的範本。',
|
||||||
|
phpExtensionsSyncTitle2: '多節點範本同步',
|
||||||
|
phpExtensionsSyncContent2: '將選取的擴充範本同步到目標節點,自動排除來源節點。',
|
||||||
|
phpExtensionsSyncTitle3: '同名範本檢查',
|
||||||
|
phpExtensionsSyncContent3: '同名且內容一致的範本會略過;內容不同則提示衝突,不會覆寫。',
|
||||||
fileExchangeTitle1: '金鑰認證傳輸',
|
fileExchangeTitle1: '金鑰認證傳輸',
|
||||||
fileExchangeContent1: '通過 SSH 金鑰進行身份驗證,確保傳輸的安全性。',
|
fileExchangeContent1: '通過 SSH 金鑰進行身份驗證,確保傳輸的安全性。',
|
||||||
fileExchangeTitle2: '高效檔案同步',
|
fileExchangeTitle2: '高效檔案同步',
|
||||||
@@ -7022,6 +7050,12 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: '即將把 {0} 張映像轉發到 {1} 個節點,共 {2} 個任務。',
|
imageBatchConfirmPrefix: '即將把 {0} 張映像轉發到 {1} 個節點,共 {2} 個任務。',
|
||||||
|
|
||||||
ssl: '證書同步',
|
ssl: '證書同步',
|
||||||
|
phpExtensions: 'PHP 擴充模版同步',
|
||||||
|
phpExtensionsTitle: '擴充模版同步',
|
||||||
|
phpExtensionsDesc: '選擇來源節點後,可將指定 PHP 擴充模版同步至目標節點。',
|
||||||
|
phpExtensionsList: '擴充清單',
|
||||||
|
phpExtensionsConfirm: '即將把 {0} 個 PHP 擴充模版同步至 {1} 個目標節點。',
|
||||||
|
phpExtensionsConflictHint: '同名且內容一致的模版將略過;同名但內容不同的模版將提示衝突,不會覆蓋。',
|
||||||
sslBatchDesc: '選擇來源節點後,可將指定證書同步到目前面板環境。',
|
sslBatchDesc: '選擇來源節點後,可將指定證書同步到目前面板環境。',
|
||||||
sslBatchConfirmPrefix: '即將把 {0} 張證書同步到 {1} 個節點,共 {2} 個任務。',
|
sslBatchConfirmPrefix: '即將把 {0} 張證書同步到 {1} 個節點,共 {2} 個任務。',
|
||||||
|
|
||||||
|
|||||||
@@ -3777,6 +3777,10 @@ const message = {
|
|||||||
node: '升级商业版可以使用 1Panel 管理多台 linux 服务器。',
|
node: '升级商业版可以使用 1Panel 管理多台 linux 服务器。',
|
||||||
nodeApp: '升级商业版可以统一升级多节点应用版本,无需手动切换节点。',
|
nodeApp: '升级商业版可以统一升级多节点应用版本,无需手动切换节点。',
|
||||||
nodeDashboard: '升级商业版可以集中管理多节点应用、网站、数据库和计划任务。',
|
nodeDashboard: '升级商业版可以集中管理多节点应用、网站、数据库和计划任务。',
|
||||||
|
imageExchange: '升级商业版可以在多个节点之间批量传输容器镜像。',
|
||||||
|
appExchange: '升级商业版可以将已安装的应用迁移到目标节点,并确认所需的关联资源。',
|
||||||
|
sslSync: '升级商业版可以将源节点的证书同步到一个或多个目标节点。',
|
||||||
|
phpExtensionsSync: '升级商业版可以将 PHP 扩展模版同步到一个或多个目标节点。',
|
||||||
fileExchange: '升级商业版可以在多台服务器之间快速传输文件。',
|
fileExchange: '升级商业版可以在多台服务器之间快速传输文件。',
|
||||||
app: '升级商业版可通过手机 APP,查看服务信息、异常监控等。',
|
app: '升级商业版可通过手机 APP,查看服务信息、异常监控等。',
|
||||||
cluster: '升级商业版可以管理 MySQL/Postgres/Redis 主从集群。',
|
cluster: '升级商业版可以管理 MySQL/Postgres/Redis 主从集群。',
|
||||||
@@ -5494,6 +5498,30 @@ const message = {
|
|||||||
nodeTitle4: '快速远程连接',
|
nodeTitle4: '快速远程连接',
|
||||||
nodeContent4: '一键直连节点远程终端',
|
nodeContent4: '一键直连节点远程终端',
|
||||||
|
|
||||||
|
imageExchangeTitle1: '选择源镜像',
|
||||||
|
imageExchangeContent1: '查看源节点的容器镜像,选择需要传输的镜像。',
|
||||||
|
imageExchangeTitle2: '批量分发镜像',
|
||||||
|
imageExchangeContent2: '将选中的镜像传输到一个或多个目标节点。',
|
||||||
|
imageExchangeTitle3: '查看传输日志',
|
||||||
|
imageExchangeContent3: '通过任务日志查看镜像传输进度和执行结果。',
|
||||||
|
appExchangeTitle1: '选择源应用',
|
||||||
|
appExchangeContent1: '查看源节点已安装的应用,选择需要迁移的应用。',
|
||||||
|
appExchangeTitle2: '确认资源依赖',
|
||||||
|
appExchangeContent2: '迁移前确认目标节点及应用所需的数据库等关联资源。',
|
||||||
|
appExchangeTitle3: '执行应用迁移',
|
||||||
|
appExchangeContent3: '将应用备份传输到目标节点进行恢复,并通过任务日志查看结果。',
|
||||||
|
sslSyncTitle1: '选择源证书',
|
||||||
|
sslSyncContent1: '查看源节点的证书信息,选择需要同步的证书。',
|
||||||
|
sslSyncTitle2: '多节点证书同步',
|
||||||
|
sslSyncContent2: '将选中的证书同步到目标节点,自动排除源节点。',
|
||||||
|
sslSyncTitle3: '确认同步任务',
|
||||||
|
sslSyncContent3: '执行前确认目标节点和证书,通过任务日志查看同步结果。',
|
||||||
|
phpExtensionsSyncTitle1: '选择扩展模版',
|
||||||
|
phpExtensionsSyncContent1: '查看源节点的模版名称和扩展列表,选择需要同步的模版。',
|
||||||
|
phpExtensionsSyncTitle2: '多节点模版同步',
|
||||||
|
phpExtensionsSyncContent2: '将选中的扩展模版同步到目标节点,自动排除源节点。',
|
||||||
|
phpExtensionsSyncTitle3: '同名模版检查',
|
||||||
|
phpExtensionsSyncContent3: '同名且内容一致的模版会跳过;内容不同则提示冲突,不会覆盖。',
|
||||||
fileExchangeTitle1: '密钥认证传输',
|
fileExchangeTitle1: '密钥认证传输',
|
||||||
fileExchangeContent1: '通过 SSH 密钥进行身份验证,确保传输的安全性。',
|
fileExchangeContent1: '通过 SSH 密钥进行身份验证,确保传输的安全性。',
|
||||||
fileExchangeTitle2: '高效文件同步',
|
fileExchangeTitle2: '高效文件同步',
|
||||||
@@ -7079,6 +7107,12 @@ const message = {
|
|||||||
imageBatchConfirmPrefix: '即将把 {0} 张镜像转发到 {1} 个节点,共 {2} 个任务。',
|
imageBatchConfirmPrefix: '即将把 {0} 张镜像转发到 {1} 个节点,共 {2} 个任务。',
|
||||||
|
|
||||||
ssl: '证书同步',
|
ssl: '证书同步',
|
||||||
|
phpExtensions: 'PHP 扩展模版同步',
|
||||||
|
phpExtensionsTitle: '扩展模版同步',
|
||||||
|
phpExtensionsDesc: '选择源节点后,可将指定 PHP 扩展模版同步到目标节点。',
|
||||||
|
phpExtensionsList: '扩展列表',
|
||||||
|
phpExtensionsConfirm: '即将把 {0} 个 PHP 扩展模版同步到 {1} 个目标节点。',
|
||||||
|
phpExtensionsConflictHint: '同名且内容一致的模版将跳过;同名但内容不同的模版将提示冲突,不会覆盖。',
|
||||||
sslBatchDesc: '选择源节点后,可将指定证书同步到当前面板环境。',
|
sslBatchDesc: '选择源节点后,可将指定证书同步到当前面板环境。',
|
||||||
sslBatchConfirmPrefix: '即将把 {0} 张证书同步到 {1} 个节点,共 {2} 个任务。',
|
sslBatchConfirmPrefix: '即将把 {0} 张证书同步到 {1} 个节点,共 {2} 个任务。',
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user