mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-12-19 14:01:28 +08:00
chore: Modify i18n initialization method
This commit is contained in:
parent
d9579901fe
commit
9235f73ec4
13 changed files with 69 additions and 31 deletions
|
|
@ -194,13 +194,13 @@ func (u *ScriptService) Sync(req dto.OperateByTaskID) error {
|
||||||
if global.CONF.Base.IsOffLine {
|
if global.CONF.Base.IsOffLine {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
syncTask, err := task.NewTaskWithOps(i18n.GetMsgByKey("ScriptLibrary"), task.TaskSync, task.TaskScopeScript, req.TaskID, 0)
|
syncTask, err := task.NewTaskWithOps(i18n.GetMsgByKey("RemoteScriptLibrary"), task.TaskSync, task.TaskScopeScript, req.TaskID, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.LOG.Errorf("create sync task failed %v", err)
|
global.LOG.Errorf("create sync task failed %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
syncTask.AddSubTask(task.GetTaskName(i18n.GetMsgByKey("ScriptLibrary"), task.TaskSync, task.TaskScopeScript), func(t *task.Task) (err error) {
|
syncTask.AddSubTask(task.GetTaskName(i18n.GetMsgByKey("RemoteScriptLibrary"), task.TaskSync, task.TaskScopeScript), func(t *task.Task) (err error) {
|
||||||
versionUrl := fmt.Sprintf("%s/scripts/version.txt", global.CONF.RemoteURL.ResourceURL)
|
versionUrl := fmt.Sprintf("%s/scripts/version.txt", global.CONF.RemoteURL.ResourceURL)
|
||||||
_, versionRes, err := req_helper.HandleRequestWithProxy(versionUrl, http.MethodGet, constant.TimeOut20s)
|
_, versionRes, err := req_helper.HandleRequestWithProxy(versionUrl, http.MethodGet, constant.TimeOut20s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ const (
|
||||||
TaskUpgrade = "TaskUpgrade"
|
TaskUpgrade = "TaskUpgrade"
|
||||||
TaskAddNode = "TaskAddNode"
|
TaskAddNode = "TaskAddNode"
|
||||||
TaskSync = "TaskSync"
|
TaskSync = "TaskSync"
|
||||||
|
TaskSyncForNode = "TaskSyncForNode"
|
||||||
TaskRsync = "TaskRsync"
|
TaskRsync = "TaskRsync"
|
||||||
TaskInstallCluster = "TaskInstallCluster"
|
TaskInstallCluster = "TaskInstallCluster"
|
||||||
TaskCreateCluster = "TaskCreateCluster"
|
TaskCreateCluster = "TaskCreateCluster"
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,12 @@ package i18n
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/core/app/repo"
|
"github.com/1Panel-dev/1Panel/core/app/repo"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/core/global"
|
"github.com/1Panel-dev/1Panel/core/global"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
|
|
@ -140,38 +138,29 @@ func UseI18n() gin.HandlerFunc {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Init() {
|
func Init() {
|
||||||
initOnce.Do(func() {
|
if bundle == nil {
|
||||||
bundle = i18n.NewBundle(language.Chinese)
|
initBundle()
|
||||||
bundle.RegisterUnmarshalFunc("yaml", yaml.Unmarshal)
|
}
|
||||||
|
dbLang := getLanguageFromDBInternal()
|
||||||
|
if dbLang == "" {
|
||||||
|
dbLang = defaultLang
|
||||||
|
}
|
||||||
|
SetCachedDBLanguage(dbLang)
|
||||||
|
|
||||||
isSuccess := true
|
global.I18n = i18n.NewLocalizer(bundle, dbLang)
|
||||||
for _, file := range langFiles {
|
|
||||||
if _, err := bundle.LoadMessageFileFS(fs, file); err != nil {
|
|
||||||
fmt.Printf("[i18n] load language file %s failed: %v\n", file, err)
|
|
||||||
isSuccess = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !isSuccess {
|
|
||||||
panic("[i18n] failed to init language files, See log above for details")
|
|
||||||
}
|
|
||||||
|
|
||||||
dbLang := getLanguageFromDBInternal()
|
|
||||||
if dbLang == "" {
|
|
||||||
dbLang = defaultLang
|
|
||||||
}
|
|
||||||
SetCachedDBLanguage(dbLang)
|
|
||||||
|
|
||||||
global.I18n = i18n.NewLocalizer(bundle, dbLang)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func UseI18nForCmd(lang string) {
|
func UseI18nForCmd(lang string) {
|
||||||
if bundle == nil {
|
if bundle == nil {
|
||||||
Init()
|
initBundle()
|
||||||
}
|
}
|
||||||
if lang == "" {
|
if lang == "" {
|
||||||
lang = defaultLang
|
langFrom1pctl := getLanguageFrom1pctl()
|
||||||
|
if langFrom1pctl == "" {
|
||||||
|
lang = defaultLang
|
||||||
|
} else {
|
||||||
|
lang = langFrom1pctl
|
||||||
|
}
|
||||||
}
|
}
|
||||||
global.I18nForCmd = i18n.NewLocalizer(bundle, lang)
|
global.I18nForCmd = i18n.NewLocalizer(bundle, lang)
|
||||||
}
|
}
|
||||||
|
|
@ -219,9 +208,20 @@ func getLanguageFromDBInternal() string {
|
||||||
}
|
}
|
||||||
return lang
|
return lang
|
||||||
}
|
}
|
||||||
|
func getLanguageFrom1pctl() string {
|
||||||
|
cmd := exec.Command("bash", "-c", "grep '^LANGUAGE=' /usr/local/bin/1pctl | cut -d'=' -f2")
|
||||||
|
stdout, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
info := strings.ReplaceAll(string(stdout), "\n", "")
|
||||||
|
if len(info) == 0 || info == `""` {
|
||||||
|
panic("error `LANGUAGE` find in /usr/local/bin/1pctl")
|
||||||
|
}
|
||||||
|
return info
|
||||||
|
}
|
||||||
|
|
||||||
var cachedDBLang atomic.Value
|
var cachedDBLang atomic.Value
|
||||||
var initOnce sync.Once
|
|
||||||
|
|
||||||
func GetLanguage() string {
|
func GetLanguage() string {
|
||||||
if v := cachedDBLang.Load(); v != nil {
|
if v := cachedDBLang.Load(); v != nil {
|
||||||
|
|
@ -236,3 +236,20 @@ func SetCachedDBLanguage(lang string) {
|
||||||
}
|
}
|
||||||
cachedDBLang.Store(lang)
|
cachedDBLang.Store(lang)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initBundle() {
|
||||||
|
bundle = i18n.NewBundle(language.Chinese)
|
||||||
|
bundle.RegisterUnmarshalFunc("yaml", yaml.Unmarshal)
|
||||||
|
|
||||||
|
isSuccess := true
|
||||||
|
for _, file := range langFiles {
|
||||||
|
if _, err := bundle.LoadMessageFileFS(fs, file); err != nil {
|
||||||
|
fmt.Printf("[i18n] load language file %s failed: %v\n", file, err)
|
||||||
|
isSuccess = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isSuccess {
|
||||||
|
panic("[i18n] failed to init language files, See log above for details")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} failed: {{ .err }}"
|
||||||
TaskInstall: "Install"
|
TaskInstall: "Install"
|
||||||
TaskUpgrade: "Upgrade"
|
TaskUpgrade: "Upgrade"
|
||||||
TaskSync: 'Synchronize'
|
TaskSync: 'Synchronize'
|
||||||
|
TaskSyncForNode: "Sync Node Data"
|
||||||
TaskBackup: "Backup"
|
TaskBackup: "Backup"
|
||||||
SuccessStatus: "{{ .name }} succeeded"
|
SuccessStatus: "{{ .name }} succeeded"
|
||||||
FailedStatus: "{{ .name }} failed {{ .err }}"
|
FailedStatus: "{{ .name }} failed {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "Skip errors and continue..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Script Library"
|
ScriptLibrary: "Script Library"
|
||||||
|
RemoteScriptLibrary: "Remote Script Library"
|
||||||
ScriptSyncSkip: "Current script library is already the latest version!"
|
ScriptSyncSkip: "Current script library is already the latest version!"
|
||||||
DownloadData: "Downloading script library file data.yaml"
|
DownloadData: "Downloading script library file data.yaml"
|
||||||
DownloadPackage: "Downloading script library package"
|
DownloadPackage: "Downloading script library package"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} falló: {{ .err }}"
|
||||||
TaskInstall: "Instalar"
|
TaskInstall: "Instalar"
|
||||||
TaskUpgrade: "Actualizar"
|
TaskUpgrade: "Actualizar"
|
||||||
TaskSync: 'Sincronizar'
|
TaskSync: 'Sincronizar'
|
||||||
|
TaskSyncForNode: "Sincronizar Datos del Nodo"
|
||||||
TaskBackup: "Respaldar"
|
TaskBackup: "Respaldar"
|
||||||
SuccessStatus: "{{ .name }} correcta"
|
SuccessStatus: "{{ .name }} correcta"
|
||||||
FailedStatus: "{{ .name }} fallida {{ .err }}"
|
FailedStatus: "{{ .name }} fallida {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "Omitir errores y continuar..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Biblioteca de scripts"
|
ScriptLibrary: "Biblioteca de scripts"
|
||||||
|
RemoteScriptLibrary: "Biblioteca de Scripts Remota"
|
||||||
ScriptSyncSkip: "¡La biblioteca de scripts ya está en la última versión!"
|
ScriptSyncSkip: "¡La biblioteca de scripts ya está en la última versión!"
|
||||||
DownloadData: "Descargando archivo de datos de la biblioteca de scripts data.yaml"
|
DownloadData: "Descargando archivo de datos de la biblioteca de scripts data.yaml"
|
||||||
DownloadPackage: "Descargando paquete de la biblioteca de scripts"
|
DownloadPackage: "Descargando paquete de la biblioteca de scripts"
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ SubTaskFailed: "{{ .name }} 失敗: {{ .err }}"
|
||||||
TaskInstall: "インストール"
|
TaskInstall: "インストール"
|
||||||
TaskUpgrade: "アップグレード"
|
TaskUpgrade: "アップグレード"
|
||||||
TaskSync: '同期'
|
TaskSync: '同期'
|
||||||
|
TaskSyncForNode: "ノードデータを同期"
|
||||||
TaskBackup: "バックアップ"
|
TaskBackup: "バックアップ"
|
||||||
SuccessStatus: "{{ .name }} 成功"
|
SuccessStatus: "{{ .name }} 成功"
|
||||||
FailedStatus: "{{ .name }} 失敗 {{ .err }}"
|
FailedStatus: "{{ .name }} 失敗 {{ .err }}"
|
||||||
|
|
@ -113,6 +114,7 @@ Skip: "エラーを無視して続行..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "スクリプトライブラリ"
|
ScriptLibrary: "スクリプトライブラリ"
|
||||||
|
RemoteScriptLibrary: "リモートスクリプトライブラリ"
|
||||||
ScriptSyncSkip: "現在のスクリプトライブラリは最新バージョンです!"
|
ScriptSyncSkip: "現在のスクリプトライブラリは最新バージョンです!"
|
||||||
DownloadData: "スクリプトライブラリファイル data.yaml をダウンロード中"
|
DownloadData: "スクリプトライブラリファイル data.yaml をダウンロード中"
|
||||||
DownloadPackage: "スクリプトライブラリパッケージをダウンロード中"
|
DownloadPackage: "スクリプトライブラリパッケージをダウンロード中"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} 실패: {{ .err }}"
|
||||||
TaskInstall: "설치"
|
TaskInstall: "설치"
|
||||||
TaskUpgrade: "업그레이드"
|
TaskUpgrade: "업그레이드"
|
||||||
TaskSync: '동기화'
|
TaskSync: '동기화'
|
||||||
|
TaskSyncForNode: "노드 데이터 동기화"
|
||||||
TaskBackup: "백업"
|
TaskBackup: "백업"
|
||||||
SuccessStatus: "{{ .name }} 성공"
|
SuccessStatus: "{{ .name }} 성공"
|
||||||
FailedStatus: "{{ .name }} 실패 {{ .err }}"
|
FailedStatus: "{{ .name }} 실패 {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "오류 무시하고 계속..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "스크립트 라이브러리"
|
ScriptLibrary: "스크립트 라이브러리"
|
||||||
|
RemoteScriptLibrary: "원격 스크립트 라이브러리"
|
||||||
ScriptSyncSkip: "현재 스크립트 라이브러리가 이미 최신 버전입니다!"
|
ScriptSyncSkip: "현재 스크립트 라이브러리가 이미 최신 버전입니다!"
|
||||||
DownloadData: "스크립트 라이브러리 파일 data.yaml 다운로드 중"
|
DownloadData: "스크립트 라이브러리 파일 data.yaml 다운로드 중"
|
||||||
DownloadPackage: "스크립트 라이브러리 패키지 다운로드 중"
|
DownloadPackage: "스크립트 라이브러리 패키지 다운로드 중"
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@ SubTaskFailed: "{{ .name }} gagal: {{ .err }}"
|
||||||
TaskInstall: "Pasang"
|
TaskInstall: "Pasang"
|
||||||
TaskUpgrade: "Kemas kini"
|
TaskUpgrade: "Kemas kini"
|
||||||
TaskSync: 'Selaraskan'
|
TaskSync: 'Selaraskan'
|
||||||
|
TaskSyncForNode: "Segerakan Data Nod"
|
||||||
TaskBackup: "Sandaran"
|
TaskBackup: "Sandaran"
|
||||||
SuccessStatus: "{{ .name }} berjaya"
|
SuccessStatus: "{{ .name }} berjaya"
|
||||||
FailedStatus: "{{ .name }} gagal {{ .err }}"
|
FailedStatus: "{{ .name }} gagal {{ .err }}"
|
||||||
|
|
@ -107,6 +108,7 @@ Skip: "Abaikan ralat dan teruskan..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Pustaka Skrip"
|
ScriptLibrary: "Pustaka Skrip"
|
||||||
|
RemoteScriptLibrary: "Pustaka Skrip Jauh"
|
||||||
ScriptSyncSkip: "Pustaka skrip semasa sudah versi terkini!"
|
ScriptSyncSkip: "Pustaka skrip semasa sudah versi terkini!"
|
||||||
DownloadData: "Muat turun fail pustaka skrip data.yaml"
|
DownloadData: "Muat turun fail pustaka skrip data.yaml"
|
||||||
DownloadPackage: "Muat turun pakej pustaka skrip"
|
DownloadPackage: "Muat turun pakej pustaka skrip"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} falhou: {{ .err }}"
|
||||||
TaskInstall: "Instalar"
|
TaskInstall: "Instalar"
|
||||||
TaskUpgrade: "Atualizar"
|
TaskUpgrade: "Atualizar"
|
||||||
TaskSync: 'Sincronizar'
|
TaskSync: 'Sincronizar'
|
||||||
|
TaskSyncForNode: "Sincronizar Dados do Nó"
|
||||||
TaskBackup: "Backup"
|
TaskBackup: "Backup"
|
||||||
SuccessStatus: "{{ .name }} bem-sucedido"
|
SuccessStatus: "{{ .name }} bem-sucedido"
|
||||||
FailedStatus: "{{ .name }} falhou {{ .err }}"
|
FailedStatus: "{{ .name }} falhou {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "Ignorar erros e continuar..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Biblioteca de Scripts"
|
ScriptLibrary: "Biblioteca de Scripts"
|
||||||
|
RemoteScriptLibrary: "Biblioteca de Scripts Remota"
|
||||||
ScriptSyncSkip: "A biblioteca de scripts atual já é a versão mais recente!"
|
ScriptSyncSkip: "A biblioteca de scripts atual já é a versão mais recente!"
|
||||||
DownloadData: "Baixando arquivo data.yaml da biblioteca de scripts"
|
DownloadData: "Baixando arquivo data.yaml da biblioteca de scripts"
|
||||||
DownloadPackage: "Baixando pacote da biblioteca de scripts"
|
DownloadPackage: "Baixando pacote da biblioteca de scripts"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} не удалось: {{ .err }}"
|
||||||
TaskInstall: "Установить"
|
TaskInstall: "Установить"
|
||||||
TaskUpgrade: "Обновить"
|
TaskUpgrade: "Обновить"
|
||||||
TaskSync: 'Синхронизация'
|
TaskSync: 'Синхронизация'
|
||||||
|
TaskSyncForNode: "Синхронизировать Данные Узла"
|
||||||
TaskBackup: "Резервная копия"
|
TaskBackup: "Резервная копия"
|
||||||
SuccessStatus: "{{ .name }} успешно"
|
SuccessStatus: "{{ .name }} успешно"
|
||||||
FailedStatus: "{{ .name }} не удалось {{ .err }}"
|
FailedStatus: "{{ .name }} не удалось {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "Пропустить ошибки и продолжить..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Библиотека скриптов"
|
ScriptLibrary: "Библиотека скриптов"
|
||||||
|
RemoteScriptLibrary: "Удаленная Библиотека Скриптов"
|
||||||
ScriptSyncSkip: "Текущая библиотека скриптов уже является последней версией!"
|
ScriptSyncSkip: "Текущая библиотека скриптов уже является последней версией!"
|
||||||
DownloadData: "Загрузка файла библиотеки скриптов data.yaml"
|
DownloadData: "Загрузка файла библиотеки скриптов data.yaml"
|
||||||
DownloadPackage: "Загрузка архива библиотеки скриптов"
|
DownloadPackage: "Загрузка архива библиотеки скриптов"
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,7 @@ SubTaskFailed: "{{ .name }} başarısız: {{ .err }}"
|
||||||
TaskInstall: "Kurulum"
|
TaskInstall: "Kurulum"
|
||||||
TaskUpgrade: "Yükseltme"
|
TaskUpgrade: "Yükseltme"
|
||||||
TaskSync: 'Senkronize'
|
TaskSync: 'Senkronize'
|
||||||
|
TaskSyncForNode: "Düğüm Verilerini Senkronize Et"
|
||||||
TaskBackup: "Yedekleme"
|
TaskBackup: "Yedekleme"
|
||||||
SuccessStatus: "{{ .name }} başarılı"
|
SuccessStatus: "{{ .name }} başarılı"
|
||||||
FailedStatus: "{{ .name }} başarısız {{ .err }}"
|
FailedStatus: "{{ .name }} başarısız {{ .err }}"
|
||||||
|
|
@ -111,6 +112,7 @@ Skip: "Hataları atla ve devam et..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "Betik Kütüphanesi"
|
ScriptLibrary: "Betik Kütüphanesi"
|
||||||
|
RemoteScriptLibrary: "Uzak Komut Dosyası Kütüphanesi"
|
||||||
ScriptSyncSkip: "Mevcut betik kütüphanesi zaten en son sürüm!"
|
ScriptSyncSkip: "Mevcut betik kütüphanesi zaten en son sürüm!"
|
||||||
DownloadData: "Betik kütüphanesi dosyası data.yaml indiriliyor"
|
DownloadData: "Betik kütüphanesi dosyası data.yaml indiriliyor"
|
||||||
DownloadPackage: "Betik kütüphanesi paketi indiriliyor"
|
DownloadPackage: "Betik kütüphanesi paketi indiriliyor"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} 失敗: {{ .err }}"
|
||||||
TaskInstall: "安裝"
|
TaskInstall: "安裝"
|
||||||
TaskUpgrade: "升級"
|
TaskUpgrade: "升級"
|
||||||
TaskSync: "同步"
|
TaskSync: "同步"
|
||||||
|
TaskSyncForNode: "同步節點數據"
|
||||||
TaskBackup: "備份"
|
TaskBackup: "備份"
|
||||||
SuccessStatus: "{{ .name }} 成功"
|
SuccessStatus: "{{ .name }} 成功"
|
||||||
FailedStatus: "{{ .name }} 失敗 {{ .err }}"
|
FailedStatus: "{{ .name }} 失敗 {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "忽略錯誤並繼續..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "腳本庫"
|
ScriptLibrary: "腳本庫"
|
||||||
|
RemoteScriptLibrary: "遠端腳本庫"
|
||||||
ScriptSyncSkip: "目前腳本庫已是最新版本!"
|
ScriptSyncSkip: "目前腳本庫已是最新版本!"
|
||||||
DownloadData: "下載腳本庫文件 data.yaml"
|
DownloadData: "下載腳本庫文件 data.yaml"
|
||||||
DownloadPackage: "下載腳本庫壓縮檔"
|
DownloadPackage: "下載腳本庫壓縮檔"
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ SubTaskFailed: "{{ .name }} 失败: {{ .err }}"
|
||||||
TaskInstall: "安装"
|
TaskInstall: "安装"
|
||||||
TaskUpgrade: "升级"
|
TaskUpgrade: "升级"
|
||||||
TaskSync: "同步"
|
TaskSync: "同步"
|
||||||
|
TaskSyncForNode: "同步节点数据"
|
||||||
TaskBackup: "备份"
|
TaskBackup: "备份"
|
||||||
SuccessStatus: "{{ .name }} 成功"
|
SuccessStatus: "{{ .name }} 成功"
|
||||||
FailedStatus: "{{ .name }} 失败 {{ .err }}"
|
FailedStatus: "{{ .name }} 失败 {{ .err }}"
|
||||||
|
|
@ -112,6 +113,7 @@ Skip: "忽略错误并继续..."
|
||||||
|
|
||||||
#script
|
#script
|
||||||
ScriptLibrary: "脚本库"
|
ScriptLibrary: "脚本库"
|
||||||
|
RemoteScriptLibrary: "远程脚本库"
|
||||||
ScriptSyncSkip: "检查到当前脚本库已是最新版本!"
|
ScriptSyncSkip: "检查到当前脚本库已是最新版本!"
|
||||||
DownloadData: "下载脚本库文件 data.yaml"
|
DownloadData: "下载脚本库文件 data.yaml"
|
||||||
DownloadPackage: "下载脚本库压缩包"
|
DownloadPackage: "下载脚本库压缩包"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue