mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
feat: add login failed ban ip list
This commit is contained in:
parent
ccb04c07d8
commit
cff843b82b
43 changed files with 2264 additions and 959 deletions
45
api/settings/auth.go
Normal file
45
api/settings/auth.go
Normal file
|
@ -0,0 +1,45 @@
|
|||
package settings
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/api"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func GetBanLoginIP(c *gin.Context) {
|
||||
b := query.BanIP
|
||||
|
||||
// clear expired banned IPs
|
||||
_, _ = b.Where(b.ExpiredAt.Lte(time.Now().Unix())).Delete()
|
||||
|
||||
banIps, err := b.Where(
|
||||
b.ExpiredAt.Gte(time.Now().Unix()),
|
||||
b.Attempts.Gte(settings.AuthSettings.MaxAttempts)).Find()
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, banIps)
|
||||
}
|
||||
|
||||
func RemoveBannedIP(c *gin.Context) {
|
||||
var json struct {
|
||||
IP string `json:"ip"`
|
||||
}
|
||||
if !api.BindAndValid(c, &json) {
|
||||
return
|
||||
}
|
||||
|
||||
b := query.BanIP
|
||||
_, err := b.Where(b.IP.Eq(json.IP)).Delete()
|
||||
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusNoContent, nil)
|
||||
}
|
14
api/settings/router.go
Normal file
14
api/settings/router.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
package settings
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func InitRouter(r *gin.RouterGroup) {
|
||||
r.GET("settings/server/name", GetServerName)
|
||||
r.GET("settings", GetSettings)
|
||||
r.POST("settings", SaveSettings)
|
||||
|
||||
r.GET("settings/auth/banned_ips", GetBanLoginIP)
|
||||
r.DELETE("settings/auth/banned_ip", RemoveBannedIP)
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package system
|
||||
package settings
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/api"
|
||||
|
@ -20,6 +20,7 @@ func GetSettings(c *gin.Context) {
|
|||
"nginx": settings.NginxSettings,
|
||||
"openai": settings.OpenAISettings,
|
||||
"logrotate": settings.LogrotateSettings,
|
||||
"auth": settings.AuthSettings,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -29,6 +30,7 @@ func SaveSettings(c *gin.Context) {
|
|||
Nginx settings.Nginx `json:"nginx"`
|
||||
Openai settings.OpenAI `json:"openai"`
|
||||
Logrotate settings.Logrotate `json:"logrotate"`
|
||||
Auth settings.Auth `json:"auth"`
|
||||
}
|
||||
|
||||
if !api.BindAndValid(c, &json) {
|
||||
|
@ -44,6 +46,7 @@ func SaveSettings(c *gin.Context) {
|
|||
settings.ProtectedFill(&settings.NginxSettings, &json.Nginx)
|
||||
settings.ProtectedFill(&settings.OpenAISettings, &json.Openai)
|
||||
settings.ProtectedFill(&settings.LogrotateSettings, &json.Logrotate)
|
||||
settings.ProtectedFill(&settings.AuthSettings, &json.Auth)
|
||||
|
||||
err := settings.Save()
|
||||
if err != nil {
|
|
@ -11,10 +11,6 @@ func InitPublicRouter(r *gin.RouterGroup) {
|
|||
}
|
||||
|
||||
func InitPrivateRouter(r *gin.RouterGroup) {
|
||||
r.GET("settings/server/name", GetServerName)
|
||||
r.GET("settings", GetSettings)
|
||||
r.POST("settings", SaveSettings)
|
||||
|
||||
r.GET("upgrade/release", GetRelease)
|
||||
r.GET("upgrade/current", GetCurrentVersion)
|
||||
r.GET("upgrade/perform", PerformCoreUpgrade)
|
||||
|
|
|
@ -4,12 +4,17 @@ import (
|
|||
"github.com/0xJacky/Nginx-UI/api"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/internal/user"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var mutex = &sync.Mutex{}
|
||||
|
||||
type LoginUser struct {
|
||||
Name string `json:"name" binding:"required,max=255"`
|
||||
Password string `json:"password" binding:"required,max=255"`
|
||||
|
@ -29,6 +34,25 @@ type LoginResponse struct {
|
|||
}
|
||||
|
||||
func Login(c *gin.Context) {
|
||||
// make sure that only one request is processed at a time
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
// check if the ip is banned
|
||||
clientIP := c.ClientIP()
|
||||
b := query.BanIP
|
||||
banIP, _ := b.Where(b.IP.Eq(clientIP),
|
||||
b.ExpiredAt.Gte(time.Now().Unix()),
|
||||
b.Attempts.Gte(settings.AuthSettings.MaxAttempts),
|
||||
).Count()
|
||||
|
||||
if banIP > 0 {
|
||||
c.JSON(http.StatusTooManyRequests, LoginResponse{
|
||||
Message: "Max attempts",
|
||||
Code: ErrMaxAttempts,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var json LoginUser
|
||||
ok := api.BindAndValid(c, &json)
|
||||
if !ok {
|
||||
|
@ -37,7 +61,7 @@ func Login(c *gin.Context) {
|
|||
|
||||
u, err := user.Login(json.Name, json.Password)
|
||||
if err != nil {
|
||||
time.Sleep(5 * time.Second)
|
||||
// time.Sleep(5 * time.Second)
|
||||
switch {
|
||||
case errors.Is(err, user.ErrPasswordIncorrect):
|
||||
c.JSON(http.StatusForbidden, LoginResponse{
|
||||
|
@ -52,9 +76,13 @@ func Login(c *gin.Context) {
|
|||
default:
|
||||
api.ErrHandler(c, err)
|
||||
}
|
||||
user.BanIP(clientIP)
|
||||
return
|
||||
}
|
||||
|
||||
// login success, clear banned record
|
||||
_, _ = b.Where(b.IP.Eq(clientIP)).Delete()
|
||||
|
||||
logger.Info("[User Login]", u.Name)
|
||||
token, err := user.GenerateJWT(u.Name)
|
||||
if err != nil {
|
||||
|
|
|
@ -13,7 +13,7 @@ export interface Pagination {
|
|||
total_pages: number
|
||||
}
|
||||
|
||||
export interface IGetListResponse<T> {
|
||||
export interface GetListResponse<T> {
|
||||
data: T[]
|
||||
pagination: Pagination
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class Curd<T> {
|
|||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
_get_list(params: any = null): Promise<IGetListResponse<T>> {
|
||||
_get_list(params: any = null): Promise<GetListResponse<T>> {
|
||||
return http.get(this.plural, { params })
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,27 @@
|
|||
import http from '@/lib/http'
|
||||
|
||||
export interface BannedIP {
|
||||
ip: string
|
||||
attempts: number
|
||||
expired_at: string
|
||||
}
|
||||
|
||||
const settings = {
|
||||
get() {
|
||||
get<T>(): Promise<T> {
|
||||
return http.get('/settings')
|
||||
},
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
save(data: any) {
|
||||
save<T>(data: T) {
|
||||
return http.post('/settings', data)
|
||||
},
|
||||
|
||||
get_server_name() {
|
||||
get_server_name(): Promise<{ name: string }> {
|
||||
return http.get('/settings/server/name')
|
||||
},
|
||||
get_banned_ips(): Promise<BannedIP[]> {
|
||||
return http.get('/settings/auth/banned_ips')
|
||||
},
|
||||
remove_banned_ip(ip: string) {
|
||||
return http.delete('/settings/auth/banned_ip', { data: { ip } })
|
||||
},
|
||||
}
|
||||
|
||||
export default settings
|
||||
|
|
|
@ -1 +1 @@
|
|||
es fr_FR ko_KR ru_RU vi_VN zh_CN zh_TW
|
||||
en zh_CN zh_TW fr_FR es ru_RU vi_VN ko_KR
|
|
@ -28,7 +28,8 @@ msgstr "Username"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "Action"
|
||||
|
||||
|
@ -51,7 +52,7 @@ msgstr "Add Directive Below"
|
|||
msgid "Add Location"
|
||||
msgstr "Add Location"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "Add Site"
|
||||
|
||||
|
@ -70,11 +71,11 @@ msgstr "Saved successfully"
|
|||
msgid "Additional"
|
||||
msgstr "Add Location"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "Advance Mode"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
|
@ -82,11 +83,11 @@ msgstr ""
|
|||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr ""
|
||||
|
||||
|
@ -94,7 +95,12 @@ msgstr ""
|
|||
msgid "Arch"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "Are you sure you want to remove this directive?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
#, fuzzy
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
|
@ -147,6 +153,14 @@ msgstr ""
|
|||
msgid "Assistant"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
msgid "Auth"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -170,8 +184,8 @@ msgstr "Auto-renewal enabled for %{name}"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
|
@ -180,19 +194,31 @@ msgstr "Back"
|
|||
msgid "Back Home"
|
||||
msgstr "Back"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "Base information"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
#, fuzzy
|
||||
msgid "Basic"
|
||||
msgstr "Basic Mode"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "Basic Mode"
|
||||
|
||||
|
@ -280,12 +306,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
#, fuzzy
|
||||
msgid "Cleared successfully"
|
||||
|
@ -312,7 +338,7 @@ msgstr "Configurations"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "Configuration Name"
|
||||
|
||||
|
@ -320,7 +346,7 @@ msgstr "Configuration Name"
|
|||
msgid "Configurations"
|
||||
msgstr "Configurations"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configure SSL"
|
||||
|
||||
|
@ -351,7 +377,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "Created at"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "Create Another"
|
||||
|
||||
|
@ -390,7 +416,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "Database (Optional, default: database)"
|
||||
|
||||
|
@ -423,15 +449,15 @@ msgstr ""
|
|||
msgid "Deleted successfully"
|
||||
msgstr "Disabled successfully"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
|
@ -481,9 +507,9 @@ msgstr "Disabled"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "Disable auto-renewal failed for %{name}"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "Disabled"
|
||||
|
||||
|
@ -562,7 +588,7 @@ msgstr "Are you sure you want to remove this directive?"
|
|||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Domain Config Created Successfully"
|
||||
|
||||
|
@ -582,38 +608,38 @@ msgstr ""
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
#, fuzzy
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Enable failed"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
#, fuzzy
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
#, fuzzy
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "Edit %{n}"
|
||||
|
||||
|
@ -635,25 +661,25 @@ msgstr "Edit Site"
|
|||
msgid "Email"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
#, fuzzy
|
||||
msgid "Enable"
|
||||
msgstr "Enabled"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -661,12 +687,12 @@ msgstr ""
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Enable auto-renewal failed for %{name}"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "Enable failed"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
#, fuzzy
|
||||
msgid "Enable successfully"
|
||||
msgstr "Enabled successfully"
|
||||
|
@ -677,19 +703,19 @@ msgstr "Enable TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "Enabled"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Enabled successfully"
|
||||
|
@ -759,7 +785,7 @@ msgstr "Failed to enable %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr ""
|
||||
|
||||
|
@ -785,7 +811,7 @@ msgstr "File Not Found"
|
|||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "Finished"
|
||||
|
||||
|
@ -857,6 +883,12 @@ msgstr ""
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
@ -866,6 +898,10 @@ msgstr ""
|
|||
msgid "Import Certificate"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
msgid "Incorrect username or password"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
@ -878,7 +914,7 @@ msgstr ""
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "Install"
|
||||
|
||||
|
@ -900,6 +936,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr "Invalid E-mail!"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -933,7 +973,7 @@ msgstr ""
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "Leave blank for no change"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr ""
|
||||
|
||||
|
@ -990,11 +1030,11 @@ msgstr "Locations"
|
|||
msgid "Log"
|
||||
msgstr "Login"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "Login successful"
|
||||
|
||||
|
@ -1002,7 +1042,7 @@ msgstr "Login successful"
|
|||
msgid "Logout successful"
|
||||
msgstr "Logout successful"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1047,6 +1087,10 @@ msgstr "Manage Users"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1060,7 +1104,7 @@ msgstr "Memory and Storage"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "Advance Mode"
|
||||
|
@ -1077,7 +1121,7 @@ msgstr "Modify Config"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "Modify Config"
|
||||
|
||||
|
@ -1097,12 +1141,12 @@ msgstr "Single Directive"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
@ -1129,11 +1173,11 @@ msgstr ""
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "Next"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1141,7 +1185,7 @@ msgstr ""
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
#, fuzzy
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Configuration Name"
|
||||
|
@ -1169,7 +1213,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Saved successfully"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1177,6 +1221,7 @@ msgstr "Saved successfully"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1208,7 +1253,7 @@ msgstr ""
|
|||
msgid "Notification"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "Certificate is valid"
|
||||
|
@ -1234,7 +1279,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1264,7 +1309,7 @@ msgstr ""
|
|||
msgid "Online"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1277,13 +1322,13 @@ msgstr "OS:"
|
|||
msgid "OS:"
|
||||
msgstr "OS:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1291,11 +1336,11 @@ msgstr ""
|
|||
msgid "Params"
|
||||
msgstr "Params"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "Password (*)"
|
||||
|
||||
|
@ -1358,7 +1403,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1454,7 +1499,16 @@ msgstr ""
|
|||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
@ -1513,9 +1567,9 @@ msgstr ""
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
|
||||
|
@ -1523,7 +1577,7 @@ msgstr "Save"
|
|||
msgid "Save Directive"
|
||||
msgstr "Save Directive"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "Save error %{msg}"
|
||||
|
@ -1531,15 +1585,15 @@ msgstr "Save error %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
|
@ -1564,8 +1618,9 @@ msgstr "Send"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "Server error"
|
||||
|
@ -1584,7 +1639,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "server_name not found in directives"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "server_name parameter is required"
|
||||
|
||||
|
@ -1641,7 +1696,7 @@ msgstr "Certificate Status"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
#, fuzzy
|
||||
msgid "SSO Login"
|
||||
msgstr "Login"
|
||||
|
@ -1728,8 +1783,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1763,7 +1818,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1798,8 +1853,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
msgid "The url is invalid."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1825,6 +1880,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1841,10 +1897,14 @@ msgid ""
|
|||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1900,11 +1960,15 @@ msgstr ""
|
|||
msgid "User"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "Username (*)"
|
||||
|
||||
|
@ -1918,7 +1982,7 @@ msgstr ""
|
|||
msgid "View"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "Certificate is valid"
|
||||
|
@ -1934,7 +1998,7 @@ msgstr "Basic Mode"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
||||
|
@ -1965,6 +2029,7 @@ msgstr ""
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "Yes"
|
||||
|
|
|
@ -33,7 +33,8 @@ msgstr "Usuario"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "Acción"
|
||||
|
||||
|
@ -56,7 +57,7 @@ msgstr "Añadir directiva a continuación"
|
|||
msgid "Add Location"
|
||||
msgstr "Agregar Ubicación"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "Agregar Sitio"
|
||||
|
||||
|
@ -72,11 +73,11 @@ msgstr "Agregado exitoso"
|
|||
msgid "Additional"
|
||||
msgstr "Adicional"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "Modo avanzado"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr "URL Base de la API"
|
||||
|
||||
|
@ -85,11 +86,11 @@ msgstr "URL Base de la API"
|
|||
msgid "API Document"
|
||||
msgstr "Token de la API"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr "Proxy de la API"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr "Token de la API"
|
||||
|
||||
|
@ -97,7 +98,12 @@ msgstr "Token de la API"
|
|||
msgid "Arch"
|
||||
msgstr "Arquitectura"
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "¿Está seguro de que quiere borrar?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
msgstr "¿Está seguro de que desea borrar todas las notificaciones?"
|
||||
|
@ -146,6 +152,15 @@ msgstr "Preguntar por ayuda a ChatGPT"
|
|||
msgid "Assistant"
|
||||
msgstr "Asistente"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "Autor"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -169,8 +184,8 @@ msgstr "Renovación automática habilitada por %{name}"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "Volver"
|
||||
|
||||
|
@ -178,18 +193,30 @@ msgstr "Volver"
|
|||
msgid "Back Home"
|
||||
msgstr "Volver al Inicio"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "Información general"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr "Básico"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "Modo Básico"
|
||||
|
||||
|
@ -273,12 +300,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "Borrar las variables de entorno"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
msgid "Cleared successfully"
|
||||
msgstr "Limpiado exitoso"
|
||||
|
@ -303,7 +330,7 @@ msgstr "Plantillas de configuración"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "El archivo de configuración se probó exitosamente"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "Nombre de la configuración"
|
||||
|
||||
|
@ -311,7 +338,7 @@ msgstr "Nombre de la configuración"
|
|||
msgid "Configurations"
|
||||
msgstr "Configuraciones"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configurar SSL"
|
||||
|
||||
|
@ -341,7 +368,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "Crear"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "Crear otro"
|
||||
|
||||
|
@ -380,7 +407,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "Panel"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "Base de datos (Opcional, default: database)"
|
||||
|
||||
|
@ -412,15 +439,15 @@ msgstr "Eliminar stream: %{site_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "Borrado exitoso"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr "Desplegar"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
|
||||
|
||||
|
@ -467,9 +494,9 @@ msgstr "Desactivar"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "No se pudo desactivar la renovación automática por %{name}"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
|
@ -540,7 +567,7 @@ msgstr "¿Quieres eliminar esta transmisión?"
|
|||
msgid "Domain"
|
||||
msgstr "Dominio"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Configuración de dominio creada con éxito"
|
||||
|
||||
|
@ -562,34 +589,34 @@ msgstr "Descargando la última versión"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "Modo de ejecución de prueba habilitado"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Duplicado fallido"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "Duplicado con éxito"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "Duplicado con éxito a local"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "Editar %{n}"
|
||||
|
||||
|
@ -610,24 +637,24 @@ msgstr "Editar Transmisión"
|
|||
msgid "Email"
|
||||
msgstr "Correo (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "Correo (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
msgid "Enable"
|
||||
msgstr "Habilitar"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
|
||||
|
||||
|
@ -635,12 +662,12 @@ msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "No se pudo activar la renovación automática por %{name}"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "Falló la habilitación"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
msgid "Enable successfully"
|
||||
msgstr "Habilitado con Éxito"
|
||||
|
||||
|
@ -650,19 +677,19 @@ msgstr "Habilitar TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "Habilitado"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Habilitado con éxito"
|
||||
|
@ -731,7 +758,7 @@ msgstr "Error al habilitar %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "No se pudo obtener la información del certificado"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr ""
|
||||
"No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
|
||||
|
@ -757,7 +784,7 @@ msgstr "Archivo no encontrado"
|
|||
msgid "Filter"
|
||||
msgstr "Filtro"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "Terminado"
|
||||
|
||||
|
@ -825,6 +852,12 @@ msgstr "HTTP01"
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
@ -833,6 +866,11 @@ msgstr "Importar"
|
|||
msgid "Import Certificate"
|
||||
msgstr "Importar Certificado"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "El nombre de usuario o contraseña son incorrectos"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr "Información"
|
||||
|
@ -845,7 +883,7 @@ msgstr "Error de actualización de kernel inicial"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Inicializando la actualización del kernel"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "Instalar"
|
||||
|
||||
|
@ -866,6 +904,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr "Válido"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
msgid "Issue wildcard certificate"
|
||||
msgstr "Obtener certificado comodín"
|
||||
|
@ -897,7 +939,7 @@ msgstr "Comprobado por última vez el"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "Para no modificar dejar en blanco"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/"
|
||||
|
||||
|
@ -949,11 +991,11 @@ msgstr "Ubicaciones"
|
|||
msgid "Log"
|
||||
msgstr "Registro"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "Acceso"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "Acceso exitoso"
|
||||
|
||||
|
@ -961,7 +1003,7 @@ msgstr "Acceso exitoso"
|
|||
msgid "Logout successful"
|
||||
msgstr "Cierre de sesión exitoso"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1003,6 +1045,10 @@ msgstr "Administrar usuarios"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "Certificado Administrado"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1016,7 +1062,7 @@ msgstr "Memoria y almacenamiento"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "Modo de ejecución"
|
||||
|
@ -1031,7 +1077,7 @@ msgstr "Modificar"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "Modificar Certificado"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "Modificar configuración"
|
||||
|
||||
|
@ -1050,12 +1096,12 @@ msgstr "Directiva multilínea"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
@ -1082,11 +1128,11 @@ msgstr "Se liberó una nueva versión"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "Siguiente"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr "Nginx"
|
||||
|
||||
|
@ -1094,7 +1140,7 @@ msgstr "Nginx"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Ruta de registro de acceso de Nginx"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Error de análisis de configuración de Nginx"
|
||||
|
||||
|
@ -1119,7 +1165,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx reiniciado con éxito"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1127,6 +1173,7 @@ msgstr "Nginx reiniciado con éxito"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1157,7 +1204,7 @@ msgstr "Nota"
|
|||
msgid "Notification"
|
||||
msgstr "Notificación"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
|
@ -1181,7 +1228,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1211,7 +1258,7 @@ msgstr "Una vez que se complete la verificación, los registros se eliminarán."
|
|||
msgid "Online"
|
||||
msgstr "En línea"
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr "OpenAI"
|
||||
|
||||
|
@ -1223,13 +1270,13 @@ msgstr "SO"
|
|||
msgid "OS:"
|
||||
msgstr "SO:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr "Sobrescribir"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr "Sobrescribir archivo existente"
|
||||
|
||||
|
@ -1237,11 +1284,11 @@ msgstr "Sobrescribir archivo existente"
|
|||
msgid "Params"
|
||||
msgstr "Parámetros"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "Contraseña (*)"
|
||||
|
||||
|
@ -1313,7 +1360,7 @@ msgstr "¡Seleccione al menos un nodo!"
|
|||
msgid "Pre-release"
|
||||
msgstr "Prelanzamiento"
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "Configuración"
|
||||
|
||||
|
@ -1409,7 +1456,16 @@ msgstr "Recargando"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Recargando Nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "Eliminado con éxito"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
msgid "Removed successfully"
|
||||
msgstr "Eliminado con éxito"
|
||||
|
||||
|
@ -1461,9 +1517,9 @@ msgstr "Corriendo"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
|
@ -1471,7 +1527,7 @@ msgstr "Guardar"
|
|||
msgid "Save Directive"
|
||||
msgstr "Guardar Directiva"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "Error al guardar %{msg}"
|
||||
|
@ -1479,14 +1535,14 @@ msgstr "Error al guardar %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
msgid "Save successfully"
|
||||
msgstr "Guardado con éxito"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "Guardado con éxito"
|
||||
|
||||
|
@ -1511,8 +1567,9 @@ msgstr "Enviado"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "Error del servidor"
|
||||
|
@ -1531,7 +1588,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "No se encuentra server_name en las directivas"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "Se requiere el parámetro server_name"
|
||||
|
||||
|
@ -1583,7 +1640,7 @@ msgstr "Ruta de la llave del certificado SSL"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "Ruta del certificado SSL"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
msgid "SSO Login"
|
||||
msgstr "Acceso SSO"
|
||||
|
||||
|
@ -1667,8 +1724,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr "Objetivo"
|
||||
|
||||
|
@ -1701,7 +1758,7 @@ msgstr "La entrada no es un Certificado SSL"
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "La entrada no es una clave de certificado SSL"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1736,8 +1793,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr "La URL no es válida"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
#, fuzzy
|
||||
msgid "The url is invalid."
|
||||
msgstr "La URL no es válida"
|
||||
|
@ -1764,6 +1821,7 @@ msgstr "Este campo es obligatorio"
|
|||
msgid "This field should not be empty"
|
||||
msgstr "Este campo no debe estar vacío"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1784,10 +1842,14 @@ msgstr ""
|
|||
"de la autoridad al backend, y debemos guardar este archivo y volver a cargar "
|
||||
"Nginx. ¿Estás seguro de que quieres continuar?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr "El token no es válido"
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1840,11 +1902,15 @@ msgstr "URL"
|
|||
msgid "User"
|
||||
msgstr "Usuario"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "Nombre de usuario (*)"
|
||||
|
||||
|
@ -1858,7 +1924,7 @@ msgstr "Válido"
|
|||
msgid "View"
|
||||
msgstr "Ver"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
msgid "View all notifications"
|
||||
msgstr "Ver todas las notificaciones"
|
||||
|
||||
|
@ -1874,7 +1940,7 @@ msgstr "Modo Básico"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "Advertencia"
|
||||
|
||||
|
@ -1909,6 +1975,7 @@ msgstr "Escribir certificado a disco"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "Si"
|
||||
|
|
|
@ -30,7 +30,8 @@ msgstr "Nom d'utilisateur"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "Action"
|
||||
|
||||
|
@ -53,7 +54,7 @@ msgstr "Ajouter une directive"
|
|||
msgid "Add Location"
|
||||
msgstr "Ajouter une localisation"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "Ajouter un site"
|
||||
|
||||
|
@ -72,11 +73,11 @@ msgstr "Mis à jour avec succés"
|
|||
msgid "Additional"
|
||||
msgstr "Supplémentaire"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "Mode avancé"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr "URL de base de l'API"
|
||||
|
||||
|
@ -85,11 +86,11 @@ msgstr "URL de base de l'API"
|
|||
msgid "API Document"
|
||||
msgstr "Jeton d'API"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr "Proxy d'API"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr "Jeton d'API"
|
||||
|
||||
|
@ -98,7 +99,12 @@ msgstr "Jeton d'API"
|
|||
msgid "Arch"
|
||||
msgstr "Arch"
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "Etes-vous sûr que vous voulez supprimer ?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
#, fuzzy
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
|
@ -149,6 +155,15 @@ msgstr "Modèle ChatGPT"
|
|||
msgid "Assistant"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "Autheur"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -172,8 +187,8 @@ msgstr "Renouvellement automatique activé pour %{name}"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
|
@ -181,18 +196,30 @@ msgstr "Retour"
|
|||
msgid "Back Home"
|
||||
msgstr "Retour au menu principal"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "Information générale"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr "Basique"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "Mode simple"
|
||||
|
||||
|
@ -279,12 +306,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "Nettoyage des variables d'environnement"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "Effacer"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
#, fuzzy
|
||||
msgid "Cleared successfully"
|
||||
|
@ -310,7 +337,7 @@ msgstr "Modèles de configuration"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "Le fichier de configuration est testé avec succès"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "Nom de la configuration"
|
||||
|
||||
|
@ -318,7 +345,7 @@ msgstr "Nom de la configuration"
|
|||
msgid "Configurations"
|
||||
msgstr "Configurations"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "Configurer SSL"
|
||||
|
||||
|
@ -349,7 +376,7 @@ msgstr "CPU :"
|
|||
msgid "Create"
|
||||
msgstr "Créé le"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "Créer un autre"
|
||||
|
||||
|
@ -388,7 +415,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "Base de données (Facultatif, par défaut : database)"
|
||||
|
||||
|
@ -422,15 +449,15 @@ msgstr "Supprimer le site : %{site_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "Désactivé avec succès"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
|
@ -480,9 +507,9 @@ msgstr "Désactivé"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "Désactivé"
|
||||
|
||||
|
@ -557,7 +584,7 @@ msgstr "Voulez-vous supprimer ce serveur ?"
|
|||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "La configuration du domaine a été créée avec succès"
|
||||
|
||||
|
@ -580,38 +607,38 @@ msgstr "Téléchargement de la dernière version"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliquer"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#, fuzzy
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Dupliqué avec succès"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#, fuzzy
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Dupliquer"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Dupliqué avec succès"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
#, fuzzy
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Dupliquer"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
#, fuzzy
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "Dupliqué avec succès"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
#, fuzzy
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "Dupliqué avec succès"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "Modifier %{n}"
|
||||
|
||||
|
@ -633,25 +660,25 @@ msgstr "Modifier le site"
|
|||
msgid "Email"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
#, fuzzy
|
||||
msgid "Enable"
|
||||
msgstr "Activé"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -659,12 +686,12 @@ msgstr ""
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Échec de l'activation du renouvellement automatique pour %{name}"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "Échec de l'activation"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
#, fuzzy
|
||||
msgid "Enable successfully"
|
||||
msgstr "Activé avec succès"
|
||||
|
@ -675,19 +702,19 @@ msgstr "Activer TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Activé avec succès"
|
||||
|
@ -758,7 +785,7 @@ msgstr "Impossible d'activer %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "Échec de l'obtention des informations sur le certificat"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr ""
|
||||
"Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
|
||||
|
@ -786,7 +813,7 @@ msgstr "Fichier introuvable"
|
|||
msgid "Filter"
|
||||
msgstr "Filtrer"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "Finie"
|
||||
|
||||
|
@ -856,6 +883,12 @@ msgstr "HTTP01"
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
#, fuzzy
|
||||
msgid "Import"
|
||||
|
@ -866,6 +899,11 @@ msgstr "Exporter"
|
|||
msgid "Import Certificate"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "Le pseudo ou mot de passe est incorect"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
@ -878,7 +916,7 @@ msgstr "Erreur du programme de mise à niveau initial du core"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Initialisation du programme de mise à niveau du core"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "Installer"
|
||||
|
||||
|
@ -898,6 +936,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -931,7 +973,7 @@ msgstr "Dernière vérification le"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "Laisser vide pour aucun changement"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/"
|
||||
|
||||
|
@ -990,11 +1032,11 @@ msgstr "Localisations"
|
|||
msgid "Log"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "Connexion réussie"
|
||||
|
||||
|
@ -1002,7 +1044,7 @@ msgstr "Connexion réussie"
|
|||
msgid "Logout successful"
|
||||
msgstr "Déconnexion réussie"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1047,6 +1089,10 @@ msgstr "Gérer les utilisateurs"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "Changer de certificat"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1060,7 +1106,7 @@ msgstr "Mémoire et stockage"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "Mode d'exécution"
|
||||
|
@ -1076,7 +1122,7 @@ msgstr "Modifier"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "Modifier la configuration"
|
||||
|
||||
|
@ -1095,12 +1141,12 @@ msgstr "Directive multiligne"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
@ -1127,11 +1173,11 @@ msgstr "Nouvelle version publiée"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
#, fuzzy
|
||||
msgid "Nginx"
|
||||
msgstr "Journal Nginx"
|
||||
|
@ -1140,7 +1186,7 @@ msgstr "Journal Nginx"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Chemin du journal d'accès Nginx"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Erreur d'analyse de configuration Nginx"
|
||||
|
||||
|
@ -1165,7 +1211,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx a redémarré avec succès"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1173,6 +1219,7 @@ msgstr "Nginx a redémarré avec succès"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1205,7 +1252,7 @@ msgstr "Note"
|
|||
msgid "Notification"
|
||||
msgstr "Certification"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "Certification"
|
||||
|
@ -1230,7 +1277,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1260,7 +1307,7 @@ msgstr ""
|
|||
msgid "Online"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr "OpenAI"
|
||||
|
||||
|
@ -1272,13 +1319,13 @@ msgstr "OS"
|
|||
msgid "OS:"
|
||||
msgstr "OS :"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1286,11 +1333,11 @@ msgstr ""
|
|||
msgid "Params"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "Mot de passe (*)"
|
||||
|
||||
|
@ -1360,7 +1407,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "Préférence"
|
||||
|
||||
|
@ -1459,7 +1506,16 @@ msgstr "Rechargement"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Rechargement de nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "Enregistré avec succès"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "Enregistré avec succès"
|
||||
|
@ -1517,9 +1573,9 @@ msgstr "En cours d'éxécution"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
|
@ -1527,7 +1583,7 @@ msgstr "Enregistrer"
|
|||
msgid "Save Directive"
|
||||
msgstr "Enregistrer la directive"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "Enregistrer l'erreur %{msg}"
|
||||
|
@ -1535,14 +1591,14 @@ msgstr "Enregistrer l'erreur %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
msgid "Save successfully"
|
||||
msgstr "Sauvegarde réussie"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "Enregistré avec succès"
|
||||
|
||||
|
@ -1567,8 +1623,9 @@ msgstr "Envoyer"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "Erreur du serveur"
|
||||
|
@ -1587,7 +1644,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "server_name introuvable dans les directives"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "Le paramètre server_name est obligatoire"
|
||||
|
||||
|
@ -1643,7 +1700,7 @@ msgstr "Chemin de la clé du certificat SSL"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "Chemin du certificat SSL"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
#, fuzzy
|
||||
msgid "SSO Login"
|
||||
msgstr "Connexion"
|
||||
|
@ -1731,8 +1788,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1766,7 +1823,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "Chemin de la clé du certificat SSL"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1802,8 +1859,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
msgid "The url is invalid."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1832,6 +1889,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1852,10 +1910,14 @@ msgstr ""
|
|||
"transmettre la demande de l'autorité au backend, et nous devons enregistrer "
|
||||
"ce fichier et recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1909,11 +1971,15 @@ msgstr ""
|
|||
msgid "User"
|
||||
msgstr "Nom d'utilisateur"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "Nom d'utilisateur (*)"
|
||||
|
||||
|
@ -1927,7 +1993,7 @@ msgstr ""
|
|||
msgid "View"
|
||||
msgstr "Voir"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "Certification"
|
||||
|
@ -1943,7 +2009,7 @@ msgstr "Mode simple"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
||||
|
@ -1976,6 +2042,7 @@ msgstr "Écriture du certificat sur le disque"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
|
|
|
@ -32,7 +32,8 @@ msgstr "사용자 이름"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "작업"
|
||||
|
||||
|
@ -55,7 +56,7 @@ msgstr "아래에 지시문 추가"
|
|||
msgid "Add Location"
|
||||
msgstr "위치 추가"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "사이트 추가"
|
||||
|
||||
|
@ -71,11 +72,11 @@ msgstr "성공적으로 추가됨"
|
|||
msgid "Additional"
|
||||
msgstr "추가적인"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "고급 모드"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr "API 기본 URL"
|
||||
|
||||
|
@ -84,11 +85,11 @@ msgstr "API 기본 URL"
|
|||
msgid "API Document"
|
||||
msgstr "API 토큰"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr "API 프록시"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr "API 토큰"
|
||||
|
||||
|
@ -96,7 +97,12 @@ msgstr "API 토큰"
|
|||
msgid "Arch"
|
||||
msgstr "아키텍처"
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "정말 삭제하시겠습니까?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
msgstr "모든 알림을 지우시겠습니까?"
|
||||
|
@ -145,6 +151,15 @@ msgstr "ChatGPT에게 도움 요청"
|
|||
msgid "Assistant"
|
||||
msgstr "조수"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "저자"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -168,8 +183,8 @@ msgstr "%{name}에 대한 자동 갱신 활성화됨"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "뒤로"
|
||||
|
||||
|
@ -177,18 +192,30 @@ msgstr "뒤로"
|
|||
msgid "Back Home"
|
||||
msgstr "홈으로"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "기본 정보"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr "기본"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "기본 모드"
|
||||
|
||||
|
@ -272,12 +299,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "환경 변수 정리"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "클리어"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
msgid "Cleared successfully"
|
||||
msgstr "성공적으로 제거됨"
|
||||
|
@ -301,7 +328,7 @@ msgstr "구성 템플릿"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "구성 파일 테스트 성공"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "구성 이름"
|
||||
|
||||
|
@ -309,7 +336,7 @@ msgstr "구성 이름"
|
|||
msgid "Configurations"
|
||||
msgstr "구성들"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "SSL 구성하기"
|
||||
|
||||
|
@ -339,7 +366,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "생성"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "다른 것 생성하기"
|
||||
|
||||
|
@ -378,7 +405,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "대시보드"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "데이터베이스 (선택사항, 기본값: database)"
|
||||
|
||||
|
@ -410,15 +437,15 @@ msgstr "스트림 삭제: %{stream_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "성공적으로 삭제됨"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr "배포"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
|
||||
|
||||
|
@ -465,9 +492,9 @@ msgstr "비활성화"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "%{name}의 자동 갱신 비활성화 실패"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "비활성화됨"
|
||||
|
||||
|
@ -538,7 +565,7 @@ msgstr "이 업스트림을 제거하시겠습니까?"
|
|||
msgid "Domain"
|
||||
msgstr "도메인"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "도메인 구성이 성공적으로 생성되었습니다"
|
||||
|
||||
|
@ -559,35 +586,35 @@ msgstr "최신 릴리스 다운로드 중"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "드라이런 모드 활성화됨"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "복제"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
msgid "Duplicate failed"
|
||||
msgstr "복제 실패"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
#, fuzzy
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "성공적으로 복제됨"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "로컬로 성공적으로 복제됨"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "%{n} 편집"
|
||||
|
||||
|
@ -608,24 +635,24 @@ msgstr "스트림 편집"
|
|||
msgid "Email"
|
||||
msgstr "이메일 (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "이메일 (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
msgid "Enable"
|
||||
msgstr "활성화"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
|
||||
|
||||
|
@ -633,12 +660,12 @@ msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "%{name}에 대한 자동 갱신 활성화 실패"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "활성화 실패"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
msgid "Enable successfully"
|
||||
msgstr "성공적으로 활성화"
|
||||
|
||||
|
@ -648,19 +675,19 @@ msgstr "TLS 활성화"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "활성화됨"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "성공적으로 활성화됨"
|
||||
|
@ -730,7 +757,7 @@ msgstr "%{msg} 활성화 실패"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "인증서 정보 가져오기 실패"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다."
|
||||
|
||||
|
@ -756,7 +783,7 @@ msgstr "파일을 찾을 수 없음"
|
|||
msgid "Filter"
|
||||
msgstr "필터"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "완료됨"
|
||||
|
||||
|
@ -828,6 +855,12 @@ msgstr "HTTP01"
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
msgid "Import"
|
||||
msgstr "가져오기"
|
||||
|
@ -837,6 +870,11 @@ msgstr "가져오기"
|
|||
msgid "Import Certificate"
|
||||
msgstr "인증서 상태"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr "정보"
|
||||
|
@ -849,7 +887,7 @@ msgstr "초기 코어 업그레이더 오류"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "코어 업그레이더 초기화"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "설치"
|
||||
|
||||
|
@ -871,6 +909,10 @@ msgstr "간격"
|
|||
msgid "Invalid"
|
||||
msgstr "유효함"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -904,7 +946,7 @@ msgstr "마지막 확인 시간"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "변경사항이 없으면 비워두세요"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "기본값을 사용하려면 비워 두세요: https://api.openai.com/"
|
||||
|
||||
|
@ -961,11 +1003,11 @@ msgstr "위치들"
|
|||
msgid "Log"
|
||||
msgstr "로그인"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "로그인"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "로그인 성공"
|
||||
|
||||
|
@ -973,7 +1015,7 @@ msgstr "로그인 성공"
|
|||
msgid "Logout successful"
|
||||
msgstr "로그아웃 성공"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr "로그관리"
|
||||
|
||||
|
@ -1023,6 +1065,10 @@ msgstr "사용자 관리"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "인증서 유효"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1036,7 +1082,7 @@ msgstr "메모리 및 저장소"
|
|||
msgid "Minutes"
|
||||
msgstr "분"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "실행 모드"
|
||||
|
@ -1053,7 +1099,7 @@ msgstr "설정 수정"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "인증서 상태"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "설정 수정"
|
||||
|
||||
|
@ -1073,12 +1119,12 @@ msgstr "단일 지시문"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "이름"
|
||||
|
@ -1105,11 +1151,11 @@ msgstr "새 버전 출시"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "다음"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr "Nginx"
|
||||
|
||||
|
@ -1117,7 +1163,7 @@ msgstr "Nginx"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Nginx 접근 로그 경로"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
#, fuzzy
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Nginx 구성 오류름"
|
||||
|
@ -1145,7 +1191,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx가 성공적으로 재시작됨"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1153,6 +1199,7 @@ msgstr "Nginx가 성공적으로 재시작됨"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1184,7 +1231,7 @@ msgstr "참고"
|
|||
msgid "Notification"
|
||||
msgstr "알림"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "알림"
|
||||
|
@ -1210,7 +1257,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1240,7 +1287,7 @@ msgstr "검증이 완료되면, 레코드는 제거됩니다."
|
|||
msgid "Online"
|
||||
msgstr "온라인"
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr "오픈AI"
|
||||
|
||||
|
@ -1253,13 +1300,13 @@ msgstr "OS"
|
|||
msgid "OS:"
|
||||
msgstr "OS:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr "덮어쓰기"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr "기존 파일 덮어쓰기"
|
||||
|
||||
|
@ -1267,11 +1314,11 @@ msgstr "기존 파일 덮어쓰기"
|
|||
msgid "Params"
|
||||
msgstr "파라미터"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "비밀번호"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "비밀번호 (*)"
|
||||
|
||||
|
@ -1336,7 +1383,7 @@ msgstr "적어도 하나의 노드를 선택해주세요!"
|
|||
msgid "Pre-release"
|
||||
msgstr "사전 출시"
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "환경설정"
|
||||
|
||||
|
@ -1434,7 +1481,16 @@ msgstr "리로딩 중"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Nginx 리로딩 중"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "성공적으로 제거됨"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "성공적으로 제거됨"
|
||||
|
@ -1493,9 +1549,9 @@ msgstr "실행 중"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "저장"
|
||||
|
||||
|
@ -1503,7 +1559,7 @@ msgstr "저장"
|
|||
msgid "Save Directive"
|
||||
msgstr "지시문 저장"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "저장 오류 %{msg}"
|
||||
|
@ -1511,15 +1567,15 @@ msgstr "저장 오류 %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
msgstr "성공적으로 저장됨"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "성공적으로 저장됨"
|
||||
|
||||
|
@ -1544,8 +1600,9 @@ msgstr "보내기"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "서버 오류"
|
||||
|
@ -1564,7 +1621,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "directives에서 server_name을 찾을 수 없습니다"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "server_name 매개변수가 필요합니다"
|
||||
|
||||
|
@ -1620,7 +1677,7 @@ msgstr "SSL 인증서 키 경로"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "SSL 인증서 경로"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
#, fuzzy
|
||||
msgid "SSO Login"
|
||||
msgstr "SSO 로그인"
|
||||
|
@ -1707,8 +1764,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "시스템"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr "대상"
|
||||
|
||||
|
@ -1742,7 +1799,7 @@ msgstr "입력이 SSL 인증서가 아닙니다"
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1778,8 +1835,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr "유효한 URL이 아닙니다"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
#, fuzzy
|
||||
msgid "The url is invalid."
|
||||
msgstr "유효한 URL이 아닙니다"
|
||||
|
@ -1806,6 +1863,7 @@ msgstr "이 필드는 필수입니다"
|
|||
msgid "This field should not be empty"
|
||||
msgstr "이 필드는 비워둘 수 없습니다"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr "팁"
|
||||
|
@ -1825,10 +1883,14 @@ msgstr ""
|
|||
"시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 Nginx를 다시로드해야 합"
|
||||
"니다.계속하시겠습니까?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr "토큰이 유효하지 않습니다"
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1884,11 +1946,15 @@ msgstr "URL"
|
|||
msgid "User"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "사용자 이름 (*)"
|
||||
|
||||
|
@ -1902,7 +1968,7 @@ msgstr "유효함"
|
|||
msgid "View"
|
||||
msgstr "보기"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "Certificate is valid"
|
||||
|
@ -1919,7 +1985,7 @@ msgstr "기본 모드"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "경고"
|
||||
|
||||
|
@ -1954,6 +2020,7 @@ msgstr "인증서를 디스크에 쓰기"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "예"
|
||||
|
|
|
@ -24,6 +24,7 @@ msgstr ""
|
|||
#: src/views/domain/DomainList.vue:47
|
||||
#: src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/preference/AuthSettings.vue:26
|
||||
#: src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
|
@ -49,7 +50,7 @@ msgid "Add Location"
|
|||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:64
|
||||
#: src/views/domain/DomainAdd.vue:93
|
||||
#: src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr ""
|
||||
|
||||
|
@ -65,12 +66,12 @@ msgstr ""
|
|||
msgid "Additional"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199
|
||||
#: src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197
|
||||
#: src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
|
@ -78,11 +79,11 @@ msgstr ""
|
|||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr ""
|
||||
|
||||
|
@ -90,7 +91,11 @@ msgstr ""
|
|||
msgid "Arch"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
msgstr ""
|
||||
|
@ -136,6 +141,14 @@ msgstr ""
|
|||
msgid "Assistant"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
msgid "Auth"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -160,9 +173,9 @@ msgstr ""
|
|||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73
|
||||
#: src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256
|
||||
#: src/views/domain/DomainEdit.vue:254
|
||||
#: src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
|
@ -170,19 +183,31 @@ msgstr ""
|
|||
msgid "Back Home"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202
|
||||
#: src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200
|
||||
#: src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr ""
|
||||
|
||||
|
@ -266,12 +291,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
msgid "Cleared successfully"
|
||||
msgstr ""
|
||||
|
@ -295,7 +320,7 @@ msgstr ""
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -303,7 +328,7 @@ msgstr ""
|
|||
msgid "Configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr ""
|
||||
|
||||
|
@ -333,7 +358,7 @@ msgstr ""
|
|||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr ""
|
||||
|
||||
|
@ -371,7 +396,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -403,15 +428,15 @@ msgstr ""
|
|||
msgid "Deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
|
@ -460,10 +485,10 @@ msgid "Disable auto-renewal failed for %{name}"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33
|
||||
#: src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177
|
||||
#: src/views/stream/StreamEdit.vue:175
|
||||
#: src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
@ -536,7 +561,7 @@ msgstr ""
|
|||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -556,35 +581,35 @@ msgstr ""
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
msgid "Duplicate failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
msgid "Duplicate successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174
|
||||
#: src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172
|
||||
#: src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -605,24 +630,24 @@ msgstr ""
|
|||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -630,12 +655,12 @@ msgstr ""
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
msgid "Enable successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -645,22 +670,22 @@ msgstr ""
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179
|
||||
#: src/views/domain/DomainEdit.vue:177
|
||||
#: src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171
|
||||
#: src/views/stream/StreamEdit.vue:169
|
||||
#: src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40
|
||||
#: src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr ""
|
||||
|
@ -730,8 +755,8 @@ msgstr ""
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132
|
||||
#: src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130
|
||||
#: src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr ""
|
||||
|
||||
|
@ -757,7 +782,7 @@ msgid "Filter"
|
|||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:19
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
#: src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
|
@ -825,6 +850,10 @@ msgstr ""
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
@ -834,6 +863,10 @@ msgstr ""
|
|||
msgid "Import Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
msgid "Incorrect username or password"
|
||||
msgstr ""
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
@ -847,7 +880,7 @@ msgid "Initialing core upgrader"
|
|||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:273
|
||||
#: src/views/other/Install.vue:136
|
||||
#: src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
||||
|
@ -867,6 +900,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
msgid "Issue wildcard certificate"
|
||||
msgstr ""
|
||||
|
@ -897,7 +934,7 @@ msgstr ""
|
|||
msgid "Leave blank for no change"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr ""
|
||||
|
||||
|
@ -949,12 +986,12 @@ msgid "Log"
|
|||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:279
|
||||
#: src/views/other/Login.vue:147
|
||||
#: src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:109
|
||||
#: src/views/other/Login.vue:51
|
||||
#: src/views/other/Login.vue:97
|
||||
msgid "Login successful"
|
||||
msgstr ""
|
||||
|
||||
|
@ -962,7 +999,7 @@ msgstr ""
|
|||
msgid "Logout successful"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -997,6 +1034,10 @@ msgstr ""
|
|||
msgid "Managed Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1010,7 +1051,7 @@ msgstr ""
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
msgid "Model"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1025,7 +1066,7 @@ msgstr ""
|
|||
msgid "Modify Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1044,12 +1085,12 @@ msgstr ""
|
|||
#: src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13
|
||||
#: src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
|
@ -1077,11 +1118,11 @@ msgstr ""
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1089,8 +1130,8 @@ msgstr ""
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217
|
||||
#: src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215
|
||||
#: src/views/stream/StreamEdit.vue:207
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1116,7 +1157,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1124,6 +1165,7 @@ msgstr ""
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1154,7 +1196,7 @@ msgstr ""
|
|||
msgid "Notification"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:80
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/routes/index.ts:221
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
@ -1179,7 +1221,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1209,7 +1251,7 @@ msgstr ""
|
|||
msgid "Online"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1221,13 +1263,13 @@ msgstr ""
|
|||
msgid "OS:"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1235,12 +1277,12 @@ msgstr ""
|
|||
msgid "Params"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:132
|
||||
#: src/views/other/Login.vue:144
|
||||
#: src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1300,7 +1342,7 @@ msgid "Pre-release"
|
|||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:239
|
||||
#: src/views/preference/Preference.vue:96
|
||||
#: src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1391,7 +1433,15 @@ msgstr ""
|
|||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
msgid "Remove successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
msgid "Removed successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1444,10 +1494,10 @@ msgstr ""
|
|||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96
|
||||
#: src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130
|
||||
#: src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145
|
||||
#: src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1456,7 +1506,7 @@ msgid "Save Directive"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57
|
||||
#: src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr ""
|
||||
|
@ -1464,15 +1514,15 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
msgid "Save successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55
|
||||
#: src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1499,8 +1549,9 @@ msgstr ""
|
|||
#: src/views/config/ConfigEdit.vue:40
|
||||
#: src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139
|
||||
#: src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70
|
||||
#: src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78
|
||||
#: src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81
|
||||
#: src/views/system/Upgrade.vue:42
|
||||
|
@ -1520,7 +1571,7 @@ msgid "server_name not found in directives"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1570,7 +1621,7 @@ msgstr ""
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
msgid "SSO Login"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1649,8 +1700,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1679,7 +1730,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid "The model name should only contain letters, unicode, numbers, hyphens, dashes, and dots."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1704,8 +1755,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
msgid "The url is invalid."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1731,6 +1782,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1743,10 +1795,14 @@ msgstr ""
|
|||
msgid "To make sure the certification auto-renewal can work normally, we need to add a location which can proxy the request from authority to backend, and we need to save this file and reload the Nginx. Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1804,12 +1860,16 @@ msgstr ""
|
|||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:122
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134
|
||||
#: src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1823,7 +1883,7 @@ msgstr ""
|
|||
msgid "View"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
msgid "View all notifications"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1838,7 +1898,7 @@ msgstr ""
|
|||
#: src/constants/index.ts:17
|
||||
#: src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1865,6 +1925,7 @@ msgstr ""
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
|
|
@ -28,7 +28,8 @@ msgstr "Пользователь"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "Действие"
|
||||
|
||||
|
@ -51,7 +52,7 @@ msgstr "Добавить директиву ниже"
|
|||
msgid "Add Location"
|
||||
msgstr "Добавить Location"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "Добавть Сайт"
|
||||
|
||||
|
@ -70,11 +71,11 @@ msgstr "Обновлено успешно"
|
|||
msgid "Additional"
|
||||
msgstr "Дополнительно"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "Расширенный режим"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
|
@ -82,11 +83,11 @@ msgstr ""
|
|||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr ""
|
||||
|
||||
|
@ -94,7 +95,12 @@ msgstr ""
|
|||
msgid "Arch"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "Вы уверены, что хотите удалить?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
#, fuzzy
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
|
@ -147,6 +153,15 @@ msgstr "Обратитесь за помощью к ChatGPT"
|
|||
msgid "Assistant"
|
||||
msgstr "Ассистент"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "Автор"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -170,8 +185,8 @@ msgstr "Автообновление включено для %{name}"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "Назад"
|
||||
|
||||
|
@ -180,19 +195,31 @@ msgstr "Назад"
|
|||
msgid "Back Home"
|
||||
msgstr "Вернутся"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "Основная информация"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
#, fuzzy
|
||||
msgid "Basic"
|
||||
msgstr "Простой режим"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "Простой режим"
|
||||
|
||||
|
@ -280,12 +307,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "Очистка переменных среды"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
#, fuzzy
|
||||
msgid "Cleared successfully"
|
||||
|
@ -312,7 +339,7 @@ msgstr "Шаблоны конфигураций"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "Проверка конфигурации успешна"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "Название конфигурации"
|
||||
|
||||
|
@ -320,7 +347,7 @@ msgstr "Название конфигурации"
|
|||
msgid "Configurations"
|
||||
msgstr "Конфигурации"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "Настроить SSL"
|
||||
|
||||
|
@ -351,7 +378,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "Создан в"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "Создать еще"
|
||||
|
||||
|
@ -390,7 +417,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "Доска"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "База данных (Опционально, по умолчанию: database)"
|
||||
|
||||
|
@ -423,15 +450,15 @@ msgstr ""
|
|||
msgid "Deleted successfully"
|
||||
msgstr "Отключено успешно"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr ""
|
||||
|
||||
|
@ -481,9 +508,9 @@ msgstr "Отключить"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "Не удалось отключить автоматическое продление для %{name}"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "Отключено"
|
||||
|
||||
|
@ -562,7 +589,7 @@ msgstr "Вы хотите удалить этот сервер?"
|
|||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Конфигурация домена успешно создана"
|
||||
|
||||
|
@ -584,38 +611,38 @@ msgstr "Загрузка последней версии"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "Включен пробный режим"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "Дублировать"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Продублированно %{conf_name} в %{node_name}"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
#, fuzzy
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Дублировать не удалось"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
#, fuzzy
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "Продублированно"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
#, fuzzy
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "Редактировать %{n}"
|
||||
|
||||
|
@ -637,25 +664,25 @@ msgstr "Редактировать Сайт"
|
|||
msgid "Email"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
#, fuzzy
|
||||
msgid "Enable"
|
||||
msgstr "Включить"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "Включение %{conf_name} in %{node_name} успешно"
|
||||
|
||||
|
@ -663,12 +690,12 @@ msgstr "Включение %{conf_name} in %{node_name} успешно"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Не удалось включить автоматическое продление для %{name}"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "Включить не удалось"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
#, fuzzy
|
||||
msgid "Enable successfully"
|
||||
msgstr "Активировано успешно"
|
||||
|
@ -679,19 +706,19 @@ msgstr "Включить TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "Включено"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Активировано успешно"
|
||||
|
@ -762,7 +789,7 @@ msgstr "Не удалось включить %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "Не удалось получить информацию о сертификате"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
|
||||
|
||||
|
@ -788,7 +815,7 @@ msgstr "Файл не найден"
|
|||
msgid "Filter"
|
||||
msgstr "Фильтр"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "Готово"
|
||||
|
||||
|
@ -860,6 +887,12 @@ msgstr ""
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
#, fuzzy
|
||||
msgid "Import"
|
||||
|
@ -870,6 +903,11 @@ msgstr "Экспорт"
|
|||
msgid "Import Certificate"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "Имя пользователя или пароль неверны"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
@ -882,7 +920,7 @@ msgstr "Ошибка первоначального обновления ядр
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Инициализация программы обновления ядра"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "Установить"
|
||||
|
||||
|
@ -904,6 +942,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr "Действительный"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -938,7 +980,7 @@ msgstr "Последняя проверка в"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "Оставьте пустым без изменений"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "Оставьте пустым для значения по умолчанию: https://api.openai.com/"
|
||||
|
||||
|
@ -995,11 +1037,11 @@ msgstr "Locations"
|
|||
msgid "Log"
|
||||
msgstr "Логин"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "Логин"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "Авторизация успешна"
|
||||
|
||||
|
@ -1007,7 +1049,7 @@ msgstr "Авторизация успешна"
|
|||
msgid "Logout successful"
|
||||
msgstr "Выход выполнен успешно"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1052,6 +1094,10 @@ msgstr "Пользователи"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "Управление сертификатами"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1065,7 +1111,7 @@ msgstr "Память и хранилище"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "Расширенный режим"
|
||||
|
@ -1082,7 +1128,7 @@ msgstr "Изменить"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "Изменить конфигурацию"
|
||||
|
||||
|
@ -1102,12 +1148,12 @@ msgstr "Одиночная директива"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "Имя"
|
||||
|
@ -1134,11 +1180,11 @@ msgstr "Вышла новая версия"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "Дальше"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
#, fuzzy
|
||||
msgid "Nginx"
|
||||
msgstr "Журнал"
|
||||
|
@ -1147,7 +1193,7 @@ msgstr "Журнал"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Путь для Nginx Access Log"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
#, fuzzy
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Ошибка синтаксического анализа конфигурации Nginx"
|
||||
|
@ -1175,7 +1221,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx успешно перезапущен"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1183,6 +1229,7 @@ msgstr "Nginx успешно перезапущен"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1214,7 +1261,7 @@ msgstr "Заметка"
|
|||
msgid "Notification"
|
||||
msgstr "Сертификат"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "Уведомления"
|
||||
|
@ -1240,7 +1287,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1270,7 +1317,7 @@ msgstr ""
|
|||
msgid "Online"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1283,13 +1330,13 @@ msgstr "OS:"
|
|||
msgid "OS:"
|
||||
msgstr "OS:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1297,11 +1344,11 @@ msgstr ""
|
|||
msgid "Params"
|
||||
msgstr "Параметры"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "Пароль (*)"
|
||||
|
||||
|
@ -1366,7 +1413,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "Настройки"
|
||||
|
||||
|
@ -1464,7 +1511,16 @@ msgstr "Перезагружается"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Перезагружается nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "Успешно сохранено"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "Успешно сохранено"
|
||||
|
@ -1523,9 +1579,9 @@ msgstr "Выполняется"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
|
@ -1533,7 +1589,7 @@ msgstr "Сохранить"
|
|||
msgid "Save Directive"
|
||||
msgstr "Сохранить директиву"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "Ошибка сохранения %{msg}"
|
||||
|
@ -1541,15 +1597,15 @@ msgstr "Ошибка сохранения %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
msgstr "Успешно сохранено"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "Успешно сохранено"
|
||||
|
||||
|
@ -1574,8 +1630,9 @@ msgstr "Отправлено"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "Ошибка сервера"
|
||||
|
@ -1594,7 +1651,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "server_name не нашел в директивах"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "server_name параметр обязателен"
|
||||
|
||||
|
@ -1651,7 +1708,7 @@ msgstr "Путь к ключу сертификата SSL"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "Путь к сертификату SSL"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
#, fuzzy
|
||||
msgid "SSO Login"
|
||||
msgstr "Логин"
|
||||
|
@ -1738,8 +1795,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "Система"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1773,7 +1830,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "Путь к ключу сертификата SSL"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1809,8 +1866,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr "URL-адрес неверный"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
#, fuzzy
|
||||
msgid "The url is invalid."
|
||||
msgstr "URL-адрес неверный"
|
||||
|
@ -1838,6 +1895,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr "Это поле обязательно к заполнению"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1854,10 +1912,14 @@ msgid ""
|
|||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1913,11 +1975,15 @@ msgstr ""
|
|||
msgid "User"
|
||||
msgstr "Пользователь"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "Имя пользователя"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "Имя пользователя (*)"
|
||||
|
||||
|
@ -1931,7 +1997,7 @@ msgstr "Действительный"
|
|||
msgid "View"
|
||||
msgstr "Просмотр"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "Просмотреть все уведомления"
|
||||
|
@ -1947,7 +2013,7 @@ msgstr "Простой режим"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "Внимание"
|
||||
|
||||
|
@ -1980,6 +2046,7 @@ msgstr "Запись сертификата на диск"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "Да"
|
||||
|
|
|
@ -28,7 +28,8 @@ msgstr "Người dùng"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "Hành động"
|
||||
|
||||
|
@ -51,7 +52,7 @@ msgstr "Thêm Directive"
|
|||
msgid "Add Location"
|
||||
msgstr "Thêm Location"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "Thêm Website"
|
||||
|
||||
|
@ -70,11 +71,11 @@ msgstr "Cập nhật thành công"
|
|||
msgid "Additional"
|
||||
msgstr "Tùy chọn bổ sung"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "Nâng cao"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr ""
|
||||
|
||||
|
@ -82,11 +83,11 @@ msgstr ""
|
|||
msgid "API Document"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr ""
|
||||
|
||||
|
@ -94,7 +95,12 @@ msgstr ""
|
|||
msgid "Arch"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "Bạn chắc chắn muốn xóa nó "
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
#, fuzzy
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
|
@ -147,6 +153,15 @@ msgstr "Hỏi ChatGPT"
|
|||
msgid "Assistant"
|
||||
msgstr "Trợ lý"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "Tác giả"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -170,8 +185,8 @@ msgstr "Đã bật tự động gia hạn SSL cho %{name}"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "Quay lại"
|
||||
|
||||
|
@ -180,19 +195,31 @@ msgstr "Quay lại"
|
|||
msgid "Back Home"
|
||||
msgstr "Quay lại"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "Thông tin"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
#, fuzzy
|
||||
msgid "Basic"
|
||||
msgstr "Cơ bản"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "Cơ bản"
|
||||
|
||||
|
@ -280,12 +307,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "Xoá các biến môi trường"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "Xoá"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
#, fuzzy
|
||||
msgid "Cleared successfully"
|
||||
|
@ -312,7 +339,7 @@ msgstr "Mẫu Cấu hình"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "Tệp cấu hình được kiểm tra thành công"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "Tên cấu hình"
|
||||
|
||||
|
@ -320,7 +347,7 @@ msgstr "Tên cấu hình"
|
|||
msgid "Configurations"
|
||||
msgstr "Cấu hình"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "Cấu hình SSL"
|
||||
|
||||
|
@ -351,7 +378,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "Ngày tạo"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "Tạo thêm"
|
||||
|
||||
|
@ -390,7 +417,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "Bảng điều khiển"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
|
||||
|
||||
|
@ -424,15 +451,15 @@ msgstr "Xoá trang web: %{site_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "Đã xoá thành công"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr "Triển khai"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
|
||||
|
||||
|
@ -482,9 +509,9 @@ msgstr "Tắt"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "Tắt tự động gia hạn SSL cho %{name} thất bại"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "Đã tắt"
|
||||
|
||||
|
@ -563,7 +590,7 @@ msgstr "Bạn muốn xóa máy chủ này ?"
|
|||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Tên miền đã được tạo"
|
||||
|
||||
|
@ -585,38 +612,38 @@ msgstr "Đang tải phiên bản mới nhất"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "Đã bật chế độ Dry run"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "Nhân bản"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
#, fuzzy
|
||||
msgid "Duplicate failed"
|
||||
msgstr "Nhân bản thất bại"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
#, fuzzy
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "Nhân bản thành công"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
#, fuzzy
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "Đã sao chép thành công vào máy cục bộ"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "Sửa %{n}"
|
||||
|
||||
|
@ -638,25 +665,25 @@ msgstr "Sửa trang web"
|
|||
msgid "Email"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "Email (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
#, fuzzy
|
||||
msgid "Enable"
|
||||
msgstr "Đã bật"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "Không thể bật %{conf_name} trên %{node_name}"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "Đã bật %{conf_name} trên %{node_name}"
|
||||
|
||||
|
@ -664,12 +691,12 @@ msgstr "Đã bật %{conf_name} trên %{node_name}"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Không thể bật tự động gia hạn SSL cho %{name}"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "Bật không thành công"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
#, fuzzy
|
||||
msgid "Enable successfully"
|
||||
msgstr "Đã bật"
|
||||
|
@ -680,19 +707,19 @@ msgstr "Bật TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "Đã bật"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Đã bật"
|
||||
|
@ -763,7 +790,7 @@ msgstr "Không thể bật %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "Không thể truy xuất thông tin chứng chỉ"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình."
|
||||
|
||||
|
@ -789,7 +816,7 @@ msgstr "Không tìm thấy tệp tin"
|
|||
msgid "Filter"
|
||||
msgstr "Lọc"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "Đã hoàn thành"
|
||||
|
||||
|
@ -862,6 +889,12 @@ msgstr ""
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
#, fuzzy
|
||||
msgid "Import"
|
||||
|
@ -872,6 +905,11 @@ msgstr "Xuất"
|
|||
msgid "Import Certificate"
|
||||
msgstr "Chứng chỉ"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "Tên người dùng hoặc mật khẩu không chính xác"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr "Thông tin"
|
||||
|
@ -884,7 +922,7 @@ msgstr "Không thể khởi tạo trình nâng cấp"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Đang khởi tạo trình nâng cấp"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "Cài đặt"
|
||||
|
||||
|
@ -906,6 +944,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr "Hợp lệ"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -940,7 +982,7 @@ msgstr "Kiểm tra lần cuối lúc"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "Bỏ trống nếu không thay đổi"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "Bỏ trống để sử dụng địa chỉ mặc định: https://api.openai.com/"
|
||||
|
||||
|
@ -997,11 +1039,11 @@ msgstr "Locations"
|
|||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "Đăng nhập"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "Đăng nhập thành công"
|
||||
|
||||
|
@ -1009,7 +1051,7 @@ msgstr "Đăng nhập thành công"
|
|||
msgid "Logout successful"
|
||||
msgstr "Đã đăng xuất"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1053,6 +1095,10 @@ msgstr "Người dùng"
|
|||
msgid "Managed Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1066,7 +1112,7 @@ msgstr "Memory và Storage"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "Run Mode"
|
||||
|
@ -1083,7 +1129,7 @@ msgstr "Sửa"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "Sửa chứng chỉ"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "Sửa cấu hình"
|
||||
|
||||
|
@ -1103,12 +1149,12 @@ msgstr "Single Directive"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "Tên"
|
||||
|
@ -1135,11 +1181,11 @@ msgstr "Đã có phiên bản mới"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "Tiếp theo"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1147,7 +1193,7 @@ msgstr ""
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Vị trí lưu log truy cập (Access log) của Nginx"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
#, fuzzy
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Lỗi phân tích cú pháp cấu hình Nginx"
|
||||
|
@ -1175,7 +1221,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Restart Nginx thành công"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1183,6 +1229,7 @@ msgstr "Restart Nginx thành công"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1214,7 +1261,7 @@ msgstr "Ghi chú"
|
|||
msgid "Notification"
|
||||
msgstr "Thông báo"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "Thông báo"
|
||||
|
@ -1240,7 +1287,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1270,7 +1317,7 @@ msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
|
|||
msgid "Online"
|
||||
msgstr "Trực tuyến"
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1283,13 +1330,13 @@ msgstr "Hệ điều hành"
|
|||
msgid "OS:"
|
||||
msgstr "Hệ điều hành:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr "Ghi đè"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr "Ghi đè tập tin đã tồn tại"
|
||||
|
||||
|
@ -1297,11 +1344,11 @@ msgstr "Ghi đè tập tin đã tồn tại"
|
|||
msgid "Params"
|
||||
msgstr "Tham số"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "Mật khẩu"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "Mật khẩu (*)"
|
||||
|
||||
|
@ -1368,7 +1415,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "Cài đặt"
|
||||
|
||||
|
@ -1466,7 +1513,16 @@ msgstr "Đang tải lại"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Tải lại nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "Xoá thành công"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "Xoá thành công"
|
||||
|
@ -1525,9 +1581,9 @@ msgstr "Running"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "Lưu"
|
||||
|
||||
|
@ -1535,7 +1591,7 @@ msgstr "Lưu"
|
|||
msgid "Save Directive"
|
||||
msgstr "Lưu Directive"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "Đã xảy ra lỗi khi lưu %{msg}"
|
||||
|
@ -1543,15 +1599,15 @@ msgstr "Đã xảy ra lỗi khi lưu %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
msgstr "Lưu thành công"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "Lưu thành công"
|
||||
|
||||
|
@ -1576,8 +1632,9 @@ msgstr "Gửi"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "Lỗi máy chủ"
|
||||
|
@ -1596,7 +1653,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "không tìm thấy server_name trong directives"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "Tham số server_name là bắt buộc"
|
||||
|
||||
|
@ -1650,7 +1707,7 @@ msgstr ""
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
msgid "SSO Login"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1736,8 +1793,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "Thông tin"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr "Mục tiêu"
|
||||
|
||||
|
@ -1770,7 +1827,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1803,8 +1860,8 @@ msgstr ""
|
|||
msgid "The url is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
msgid "The url is invalid."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1830,6 +1887,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr "Trường này không được để trống"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1850,10 +1908,14 @@ msgstr ""
|
|||
"quyền đến chương trình phụ trợ và chúng tôi cần lưu tệp này và tải lại "
|
||||
"Nginx. Bạn có chắc chắn muốn Tiếp tục?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1909,11 +1971,15 @@ msgstr ""
|
|||
msgid "User"
|
||||
msgstr "Người dùng"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "Username (*)"
|
||||
|
||||
|
@ -1927,7 +1993,7 @@ msgstr "Hợp lệ"
|
|||
msgid "View"
|
||||
msgstr "Xem"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "Xem tất cả thông báo"
|
||||
|
@ -1944,7 +2010,7 @@ msgstr "Cơ bản"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "Lưu ý"
|
||||
|
||||
|
@ -1979,6 +2045,7 @@ msgstr "Ghi chứng chỉ vào disk"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "Có"
|
||||
|
|
Binary file not shown.
|
@ -31,7 +31,8 @@ msgstr "ACME 用户"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "操作"
|
||||
|
||||
|
@ -54,7 +55,7 @@ msgstr "在下面添加指令"
|
|||
msgid "Add Location"
|
||||
msgstr "添加 Location"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "添加站点"
|
||||
|
||||
|
@ -70,11 +71,11 @@ msgstr "添加成功"
|
|||
msgid "Additional"
|
||||
msgstr "额外选项"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "高级模式"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr "API 地址"
|
||||
|
||||
|
@ -82,11 +83,11 @@ msgstr "API 地址"
|
|||
msgid "API Document"
|
||||
msgstr "API 文档"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr "API 代理"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr "API Token"
|
||||
|
||||
|
@ -94,7 +95,11 @@ msgstr "API Token"
|
|||
msgid "Arch"
|
||||
msgstr "架构"
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "您确定要立即删除这个被禁用的 IP 吗?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
msgstr "您确定要清除所有通知吗?"
|
||||
|
@ -139,6 +144,14 @@ msgstr "与ChatGPT聊天"
|
|||
msgid "Assistant"
|
||||
msgstr "助手"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr "尝试次数"
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
msgid "Auth"
|
||||
msgstr "认证"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -162,8 +175,8 @@ msgstr "成功启用 %{name} 自动续签"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
|
@ -171,18 +184,30 @@ msgstr "返回"
|
|||
msgid "Back Home"
|
||||
msgstr "返回首页"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr "禁止阈值(分钟)"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr "禁止 IP 列表"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr "禁用至"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "基本信息"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr "基本"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "基本模式"
|
||||
|
||||
|
@ -265,12 +290,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "正在清理环境变量"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "清空"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
msgid "Cleared successfully"
|
||||
msgstr "清除成功"
|
||||
|
@ -294,7 +319,7 @@ msgstr "配置"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "配置文件测试成功"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "配置名称"
|
||||
|
||||
|
@ -302,7 +327,7 @@ msgstr "配置名称"
|
|||
msgid "Configurations"
|
||||
msgstr "配置"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "配置 SSL"
|
||||
|
||||
|
@ -332,7 +357,7 @@ msgstr "CPU:"
|
|||
msgid "Create"
|
||||
msgstr "创建"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "再创建一个"
|
||||
|
||||
|
@ -371,7 +396,7 @@ msgstr "自定义显示在环境指示器中的本地服务器名称。"
|
|||
msgid "Dashboard"
|
||||
msgstr "仪表盘"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "数据库 (可选,默认: database)"
|
||||
|
||||
|
@ -403,15 +428,15 @@ msgstr "删除 Stream: %{stream_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "删除成功"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr "部署"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr "部署%{conf_name}到%{node_name}失败"
|
||||
|
||||
|
@ -458,9 +483,9 @@ msgstr "禁用"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "关闭 %{name} 自动续签失败"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "禁用"
|
||||
|
||||
|
@ -530,7 +555,7 @@ msgstr "你想删除这个 Upstream 吗?"
|
|||
msgid "Domain"
|
||||
msgstr "域名"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "域名配置文件创建成功"
|
||||
|
||||
|
@ -550,34 +575,34 @@ msgstr "下载最新版本"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "试运行模式已启动"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "复制"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "成功地将%{conf_name}复制到%{node_name}"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
msgid "Duplicate failed"
|
||||
msgstr "复制失败"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "复制成功"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "成功复制到本地"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "编辑 %{n}"
|
||||
|
||||
|
@ -597,24 +622,24 @@ msgstr "编辑 Stream"
|
|||
msgid "Email"
|
||||
msgstr "邮箱"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "邮箱 (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "在%{node_name}中启用%{conf_name}失败"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "成功启用%{node_name}中的%{conf_name}"
|
||||
|
||||
|
@ -622,12 +647,12 @@ msgstr "成功启用%{node_name}中的%{conf_name}"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "启用 %{name} 自动续签失败"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "启用失败"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
msgid "Enable successfully"
|
||||
msgstr "启用成功"
|
||||
|
||||
|
@ -637,19 +662,19 @@ msgstr "启用 TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "启用成功"
|
||||
|
@ -716,7 +741,7 @@ msgstr "启用失败 %{msg}"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "获取证书信息失败"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr "保存失败,在配置中检测到语法错误。"
|
||||
|
||||
|
@ -741,7 +766,7 @@ msgstr "未找到文件"
|
|||
msgid "Filter"
|
||||
msgstr "过滤"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "完成"
|
||||
|
||||
|
@ -809,6 +834,14 @@ msgstr "HTTP01"
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr "如果留空,则使用默认 CA Dir。"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
"如果某个 IP 的登录失败次数达到禁用阈值分钟内的最大尝试次数,该 IP 将被禁止登"
|
||||
"录一段时间。"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
msgid "Import"
|
||||
msgstr "导入"
|
||||
|
@ -817,6 +850,10 @@ msgstr "导入"
|
|||
msgid "Import Certificate"
|
||||
msgstr "导入证书"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "用户名或密码错误"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr "信息"
|
||||
|
@ -829,7 +866,7 @@ msgstr "初始化核心升级程序错误"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "初始化核心升级器"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "安装"
|
||||
|
||||
|
@ -849,6 +886,10 @@ msgstr "间隔"
|
|||
msgid "Invalid"
|
||||
msgstr "无效的"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
msgid "Issue wildcard certificate"
|
||||
msgstr "签发通配符证书"
|
||||
|
@ -879,7 +920,7 @@ msgstr "最后检查时间"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "留空表示不修改"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "留空为默认:https://api.openai.com/"
|
||||
|
||||
|
@ -930,11 +971,11 @@ msgstr "Locations"
|
|||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "登录成功"
|
||||
|
||||
|
@ -942,7 +983,7 @@ msgstr "登录成功"
|
|||
msgid "Logout successful"
|
||||
msgstr "登出成功"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr "Logrotate"
|
||||
|
||||
|
@ -988,6 +1029,10 @@ msgstr "用户管理"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "托管证书"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr "最大尝试次数"
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1001,7 +1046,7 @@ msgstr "内存与存储"
|
|||
msgid "Minutes"
|
||||
msgstr "分钟"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
msgid "Model"
|
||||
msgstr "模型"
|
||||
|
||||
|
@ -1015,7 +1060,7 @@ msgstr "修改"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "修改证书"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "修改配置文件"
|
||||
|
||||
|
@ -1033,12 +1078,12 @@ msgstr "多行指令"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
@ -1065,11 +1110,11 @@ msgstr "新版本发布"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "下一步"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr "Nginx"
|
||||
|
||||
|
@ -1077,7 +1122,7 @@ msgstr "Nginx"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Nginx 访问日志路径"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Nginx 配置解析错误"
|
||||
|
||||
|
@ -1102,7 +1147,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx 重启成功"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1110,6 +1155,7 @@ msgstr "Nginx 重启成功"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1140,7 +1186,7 @@ msgstr "注意"
|
|||
msgid "Notification"
|
||||
msgstr "通知"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
|
@ -1164,7 +1210,7 @@ msgid "Ok"
|
|||
msgstr "确定"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1194,7 +1240,7 @@ msgstr "一旦验证完成,这些记录将被删除。"
|
|||
msgid "Online"
|
||||
msgstr "在线"
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr "OpenAI"
|
||||
|
||||
|
@ -1206,13 +1252,13 @@ msgstr "OS"
|
|||
msgid "OS:"
|
||||
msgstr "OS:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr "覆盖"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr "覆盖现有文件"
|
||||
|
||||
|
@ -1220,11 +1266,11 @@ msgstr "覆盖现有文件"
|
|||
msgid "Params"
|
||||
msgstr "参数"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "密码 (*)"
|
||||
|
||||
|
@ -1289,7 +1335,7 @@ msgstr "请至少选择一个节点!"
|
|||
msgid "Pre-release"
|
||||
msgstr "预发布"
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "偏好设置"
|
||||
|
||||
|
@ -1380,7 +1426,15 @@ msgstr "重载中"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "正在重载 Nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr "删除"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
msgid "Remove successfully"
|
||||
msgstr "移除成功"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
msgid "Removed successfully"
|
||||
msgstr "删除成功"
|
||||
|
||||
|
@ -1432,9 +1486,9 @@ msgstr "运行中"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
|
@ -1442,7 +1496,7 @@ msgstr "保存"
|
|||
msgid "Save Directive"
|
||||
msgstr "保存指令"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "保存错误 %{msg}"
|
||||
|
@ -1450,14 +1504,14 @@ msgstr "保存错误 %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
msgid "Save successfully"
|
||||
msgstr "保存成功"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "保存成功"
|
||||
|
||||
|
@ -1482,8 +1536,9 @@ msgstr "上传"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "服务器错误"
|
||||
|
@ -1501,7 +1556,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "未在指令集合中找到 server_name"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "必须为 server_name 指令指明参数"
|
||||
|
||||
|
@ -1553,7 +1608,7 @@ msgstr "SSL证书密钥路径"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "SSL证书路径"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
msgid "SSO Login"
|
||||
msgstr "SSO 登录"
|
||||
|
||||
|
@ -1633,8 +1688,8 @@ msgstr "同步到"
|
|||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr "目标"
|
||||
|
||||
|
@ -1666,7 +1721,7 @@ msgstr "输入的内容不是 SSL 证书"
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "输入的内容不是 SSL 证书密钥"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1697,8 +1752,8 @@ msgstr "当前配置中的 server_name 必须是获取证书所需的域名,
|
|||
msgid "The url is invalid"
|
||||
msgstr "URL无效"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
msgid "The url is invalid."
|
||||
msgstr "URL 无效."
|
||||
|
||||
|
@ -1724,6 +1779,7 @@ msgstr "此字段必填"
|
|||
msgid "This field should not be empty"
|
||||
msgstr "该字段不能为空"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr "提示"
|
||||
|
@ -1742,10 +1798,14 @@ msgstr ""
|
|||
"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的"
|
||||
"请求的 Location,并且我们需要保存这个文件并重新加载Nginx。你确定要继续吗?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr "Token 无效"
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr "登录失败次数过多,请稍后再试"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr "回收站"
|
||||
|
@ -1798,11 +1858,15 @@ msgstr "URL"
|
|||
msgid "User"
|
||||
msgstr "用户"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr "用户被禁止"
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "用户名 (*)"
|
||||
|
||||
|
@ -1816,7 +1880,7 @@ msgstr "有效的"
|
|||
msgid "View"
|
||||
msgstr "查看"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
msgid "View all notifications"
|
||||
msgstr "查看全部通知"
|
||||
|
||||
|
@ -1830,7 +1894,7 @@ msgstr "预览模式"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
||||
|
@ -1862,6 +1926,7 @@ msgstr "正在将证书写入磁盘"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "是的"
|
||||
|
|
|
@ -33,7 +33,8 @@ msgstr "使用者名稱"
|
|||
#: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34
|
||||
#: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129
|
||||
#: src/views/notification/Notification.vue:37
|
||||
#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43
|
||||
#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47
|
||||
#: src/views/user/User.vue:43
|
||||
msgid "Action"
|
||||
msgstr "操作"
|
||||
|
||||
|
@ -56,7 +57,7 @@ msgstr "在下方新增指令"
|
|||
msgid "Add Location"
|
||||
msgstr "新增 Location"
|
||||
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93
|
||||
#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89
|
||||
msgid "Add Site"
|
||||
msgstr "新增網站"
|
||||
|
||||
|
@ -74,11 +75,11 @@ msgstr "更新成功"
|
|||
msgid "Additional"
|
||||
msgstr "其他設定"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191
|
||||
#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189
|
||||
msgid "Advance Mode"
|
||||
msgstr "進階模式"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:42
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
msgid "API Base Url"
|
||||
msgstr "API 基礎網址"
|
||||
|
||||
|
@ -87,11 +88,11 @@ msgstr "API 基礎網址"
|
|||
msgid "API Document"
|
||||
msgstr "API Token"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:54
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
msgid "API Proxy"
|
||||
msgstr "API 代理"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:66
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
msgid "API Token"
|
||||
msgstr "API Token"
|
||||
|
||||
|
@ -99,7 +100,12 @@ msgstr "API Token"
|
|||
msgid "Arch"
|
||||
msgstr "架構"
|
||||
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/views/preference/AuthSettings.vue:94
|
||||
#, fuzzy
|
||||
msgid "Are you sure to delete this banned IP immediately?"
|
||||
msgstr "您確定要刪除嗎?"
|
||||
|
||||
#: src/components/Notification/Notification.vue:86
|
||||
#: src/views/notification/Notification.vue:72
|
||||
#, fuzzy
|
||||
msgid "Are you sure you want to clear all notifications?"
|
||||
|
@ -149,6 +155,15 @@ msgstr "向 ChatGPT 尋求幫助"
|
|||
msgid "Assistant"
|
||||
msgstr "助理"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:17
|
||||
msgid "Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/Preference.vue:116
|
||||
#, fuzzy
|
||||
msgid "Auth"
|
||||
msgstr "作者"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120
|
||||
msgid "Author"
|
||||
|
@ -172,8 +187,8 @@ msgstr "已啟用 %{name} 的自動續簽"
|
|||
|
||||
#: src/views/certificate/CertificateEditor.vue:242
|
||||
#: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87
|
||||
#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:247
|
||||
#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168
|
||||
#: src/views/stream/StreamEdit.vue:245
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
|
@ -181,18 +196,30 @@ msgstr "返回"
|
|||
msgid "Back Home"
|
||||
msgstr "返回首頁"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:99
|
||||
#: src/views/preference/AuthSettings.vue:68
|
||||
msgid "Ban Threshold Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:82
|
||||
msgid "Banned IPs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:20
|
||||
msgid "Banned Until"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:95
|
||||
msgid "Base information"
|
||||
msgstr "基本資訊"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:115
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
#: src/views/preference/Preference.vue:101
|
||||
#: src/views/preference/Preference.vue:110
|
||||
#: src/views/stream/components/RightSettings.vue:74
|
||||
msgid "Basic"
|
||||
msgstr "基本"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194
|
||||
#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192
|
||||
msgid "Basic Mode"
|
||||
msgstr "基本模式"
|
||||
|
||||
|
@ -278,12 +305,12 @@ msgid "Cleaning environment variables"
|
|||
msgstr "清理環境變數"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:276
|
||||
#: src/components/Notification/Notification.vue:89
|
||||
#: src/components/Notification/Notification.vue:91
|
||||
#: src/views/notification/Notification.vue:77
|
||||
msgid "Clear"
|
||||
msgstr "清除"
|
||||
|
||||
#: src/components/Notification/Notification.vue:40
|
||||
#: src/components/Notification/Notification.vue:42
|
||||
#: src/views/notification/Notification.vue:46
|
||||
#, fuzzy
|
||||
msgid "Cleared successfully"
|
||||
|
@ -309,7 +336,7 @@ msgstr "設定模板"
|
|||
msgid "Configuration file is test successful"
|
||||
msgstr "設定檔案測試成功"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:105
|
||||
#: src/views/domain/DomainAdd.vue:101
|
||||
msgid "Configuration Name"
|
||||
msgstr "設定名稱"
|
||||
|
||||
|
@ -317,7 +344,7 @@ msgstr "設定名稱"
|
|||
msgid "Configurations"
|
||||
msgstr "設定"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:100
|
||||
#: src/views/domain/DomainAdd.vue:96
|
||||
msgid "Configure SSL"
|
||||
msgstr "設定 SSL"
|
||||
|
||||
|
@ -348,7 +375,7 @@ msgstr "中央處理器:"
|
|||
msgid "Create"
|
||||
msgstr "建立時間"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:158
|
||||
#: src/views/domain/DomainAdd.vue:154
|
||||
msgid "Create Another"
|
||||
msgstr "再建立一個"
|
||||
|
||||
|
@ -387,7 +414,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr "儀表板"
|
||||
|
||||
#: src/views/other/Install.vue:121
|
||||
#: src/views/other/Install.vue:120
|
||||
msgid "Database (Optional, default: database)"
|
||||
msgstr "資料庫 (可選,預設: database)"
|
||||
|
||||
|
@ -421,15 +448,15 @@ msgstr "刪除網站:%{site_name}"
|
|||
msgid "Deleted successfully"
|
||||
msgstr "成功停用"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:106
|
||||
#: src/views/domain/components/Deploy.vue:103
|
||||
#: src/views/domain/components/RightSettings.vue:93
|
||||
#: src/views/stream/components/Deploy.vue:106
|
||||
#: src/views/stream/components/Deploy.vue:103
|
||||
#: src/views/stream/components/RightSettings.vue:92
|
||||
msgid "Deploy"
|
||||
msgstr "部署"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:63
|
||||
#: src/views/stream/components/Deploy.vue:63
|
||||
#: src/views/domain/components/Deploy.vue:60
|
||||
#: src/views/stream/components/Deploy.vue:60
|
||||
msgid "Deploy %{conf_name} to %{node_name} failed"
|
||||
msgstr "部署 %{conf_name} 至 %{node_name} 失敗"
|
||||
|
||||
|
@ -477,9 +504,9 @@ msgstr "停用"
|
|||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "關閉 %{name} 自動續簽失敗"
|
||||
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185
|
||||
#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183
|
||||
#: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93
|
||||
#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33
|
||||
#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33
|
||||
msgid "Disabled"
|
||||
msgstr "停用"
|
||||
|
||||
|
@ -552,7 +579,7 @@ msgstr "您要移除此伺服器嗎?"
|
|||
msgid "Domain"
|
||||
msgstr "網域"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:148
|
||||
#: src/views/domain/DomainAdd.vue:144
|
||||
msgid "Domain Config Created Successfully"
|
||||
msgstr "網域設定檔成功建立"
|
||||
|
||||
|
@ -573,34 +600,34 @@ msgstr "正在下載最新版本"
|
|||
msgid "Dry run mode enabled"
|
||||
msgstr "試運轉模式已啟用"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:126
|
||||
#: src/views/domain/components/SiteDuplicate.vue:122
|
||||
#: src/views/domain/DomainList.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:126
|
||||
#: src/views/stream/components/StreamDuplicate.vue:122
|
||||
#: src/views/stream/StreamList.vue:161
|
||||
msgid "Duplicate"
|
||||
msgstr "複製"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:84
|
||||
#: src/views/stream/components/StreamDuplicate.vue:84
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
msgid "Duplicate %{conf_name} to %{node_name} successfully"
|
||||
msgstr "成功複製 %{conf_name} 到 %{node_name}"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:90
|
||||
#: src/views/stream/components/StreamDuplicate.vue:90
|
||||
#: src/views/domain/components/SiteDuplicate.vue:87
|
||||
#: src/views/stream/components/StreamDuplicate.vue:87
|
||||
msgid "Duplicate failed"
|
||||
msgstr "複製失敗"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:82
|
||||
#: src/views/domain/components/SiteDuplicate.vue:80
|
||||
#: src/views/stream/components/StreamDuplicate.vue:80
|
||||
msgid "Duplicate successfully"
|
||||
msgstr "複製成功"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:64
|
||||
#: src/views/stream/components/StreamDuplicate.vue:64
|
||||
#: src/views/domain/components/SiteDuplicate.vue:63
|
||||
#: src/views/stream/components/StreamDuplicate.vue:63
|
||||
msgid "Duplicate to local successfully"
|
||||
msgstr "成功複製至本機"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164
|
||||
msgid "Edit %{n}"
|
||||
msgstr "編輯 %{n}"
|
||||
|
||||
|
@ -622,24 +649,24 @@ msgstr "編輯網站"
|
|||
msgid "Email"
|
||||
msgstr "電子郵件 (*)"
|
||||
|
||||
#: src/views/other/Install.vue:90
|
||||
#: src/views/other/Install.vue:89
|
||||
msgid "Email (*)"
|
||||
msgstr "電子郵件 (*)"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:86
|
||||
#: src/views/domain/components/Deploy.vue:83
|
||||
#: src/views/domain/DomainList.vue:132
|
||||
#: src/views/stream/components/Deploy.vue:86
|
||||
#: src/views/stream/components/Deploy.vue:83
|
||||
#: src/views/stream/StreamList.vue:153
|
||||
msgid "Enable"
|
||||
msgstr "啟用"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:52
|
||||
#: src/views/stream/components/Deploy.vue:52
|
||||
#: src/views/domain/components/Deploy.vue:50
|
||||
#: src/views/stream/components/Deploy.vue:50
|
||||
msgid "Enable %{conf_name} in %{node_name} failed"
|
||||
msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:46
|
||||
#: src/views/stream/components/Deploy.vue:46
|
||||
#: src/views/domain/components/Deploy.vue:45
|
||||
#: src/views/stream/components/Deploy.vue:45
|
||||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "成功在 %{node_name} 啟用 %{conf_name}"
|
||||
|
||||
|
@ -647,12 +674,12 @@ msgstr "成功在 %{node_name} 啟用 %{conf_name}"
|
|||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "啟用 %{name} 自動續簽失敗"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
msgid "Enable failed"
|
||||
msgstr "啟用失敗"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:44
|
||||
#: src/views/stream/components/Deploy.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:43
|
||||
#: src/views/stream/components/Deploy.vue:43
|
||||
msgid "Enable successfully"
|
||||
msgstr "啟用成功"
|
||||
|
||||
|
@ -662,19 +689,19 @@ msgstr "啟用 TLS"
|
|||
|
||||
#: src/views/domain/cert/ChangeCert.vue:40
|
||||
#: src/views/domain/components/RightSettings.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29
|
||||
#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29
|
||||
#: src/views/environment/Environment.vue:102
|
||||
#: src/views/preference/LogrotateSettings.vue:20
|
||||
#: src/views/stream/components/RightSettings.vue:76
|
||||
#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29
|
||||
#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
|
||||
msgid "Enabled"
|
||||
msgstr "已啟用"
|
||||
|
||||
#: src/views/domain/components/RightSettings.vue:29
|
||||
#: src/views/domain/components/SiteDuplicate.vue:98
|
||||
#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57
|
||||
#: src/views/domain/components/SiteDuplicate.vue:94
|
||||
#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57
|
||||
#: src/views/stream/components/RightSettings.vue:29
|
||||
#: src/views/stream/components/StreamDuplicate.vue:98
|
||||
#: src/views/stream/components/StreamDuplicate.vue:94
|
||||
#: src/views/stream/StreamList.vue:57
|
||||
msgid "Enabled successfully"
|
||||
msgstr "成功啟用"
|
||||
|
@ -744,7 +771,7 @@ msgstr "啟用 %{msg} 失敗"
|
|||
msgid "Failed to get certificate information"
|
||||
msgstr "取得憑證資訊失敗"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124
|
||||
#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122
|
||||
msgid "Failed to save, syntax error(s) was detected in the configuration."
|
||||
msgstr "儲存失敗,在設定中檢測到語法錯誤。"
|
||||
|
||||
|
@ -770,7 +797,7 @@ msgstr "找不到檔案"
|
|||
msgid "Filter"
|
||||
msgstr "篩選"
|
||||
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101
|
||||
#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97
|
||||
msgid "Finished"
|
||||
msgstr "完成"
|
||||
|
||||
|
@ -840,6 +867,12 @@ msgstr "HTTP01"
|
|||
msgid "If left blank, the default CA Dir will be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:60
|
||||
msgid ""
|
||||
"If the number of login failed attempts from a ip reach the max attempts in "
|
||||
"ban threshold minutes, the ip will be banned for a period of time."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:136
|
||||
#, fuzzy
|
||||
msgid "Import"
|
||||
|
@ -850,6 +883,11 @@ msgstr "匯出"
|
|||
msgid "Import Certificate"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/views/other/Login.vue:59
|
||||
#, fuzzy
|
||||
msgid "Incorrect username or password"
|
||||
msgstr "使用者名稱或密碼不正確"
|
||||
|
||||
#: src/constants/index.ts:18
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
@ -862,7 +900,7 @@ msgstr "初始化核心升級程式錯誤"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "正在初始化核心升級程式"
|
||||
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:136
|
||||
#: src/routes/index.ts:273 src/views/other/Install.vue:135
|
||||
msgid "Install"
|
||||
msgstr "安裝"
|
||||
|
||||
|
@ -883,6 +921,10 @@ msgstr ""
|
|||
msgid "Invalid"
|
||||
msgstr "無效的郵箱!"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:14
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:144
|
||||
#, fuzzy
|
||||
msgid "Issue wildcard certificate"
|
||||
|
@ -916,7 +958,7 @@ msgstr "上次檢查時間"
|
|||
msgid "Leave blank for no change"
|
||||
msgstr "留空表示不修改"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:50
|
||||
#: src/views/preference/OpenAISettings.vue:53
|
||||
msgid "Leave blank for the default: https://api.openai.com/"
|
||||
msgstr "預設留空:https://api.openai.com/"
|
||||
|
||||
|
@ -972,11 +1014,11 @@ msgstr "Locations"
|
|||
msgid "Log"
|
||||
msgstr "登入"
|
||||
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:147
|
||||
#: src/routes/index.ts:279 src/views/other/Login.vue:159
|
||||
msgid "Login"
|
||||
msgstr "登入"
|
||||
|
||||
#: src/views/other/Login.vue:51 src/views/other/Login.vue:97
|
||||
#: src/views/other/Login.vue:109 src/views/other/Login.vue:51
|
||||
msgid "Login successful"
|
||||
msgstr "登入成功"
|
||||
|
||||
|
@ -984,7 +1026,7 @@ msgstr "登入成功"
|
|||
msgid "Logout successful"
|
||||
msgstr "登出成功"
|
||||
|
||||
#: src/views/preference/Preference.vue:119
|
||||
#: src/views/preference/Preference.vue:134
|
||||
msgid "Logrotate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1027,6 +1069,10 @@ msgstr "管理使用者"
|
|||
msgid "Managed Certificate"
|
||||
msgstr "更換憑證"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:74
|
||||
msgid "Max Attempts"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/dashboard/ServerAnalytic.vue:217
|
||||
#: src/views/dashboard/ServerAnalytic.vue:218
|
||||
msgid "Memory"
|
||||
|
@ -1040,7 +1086,7 @@ msgstr "記憶體與儲存"
|
|||
msgid "Minutes"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:30
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#, fuzzy
|
||||
msgid "Model"
|
||||
msgstr "執行模式"
|
||||
|
@ -1056,7 +1102,7 @@ msgstr "修改"
|
|||
msgid "Modify Certificate"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:155
|
||||
#: src/views/domain/DomainAdd.vue:151
|
||||
msgid "Modify Config"
|
||||
msgstr "修改設定"
|
||||
|
||||
|
@ -1075,12 +1121,12 @@ msgstr "多行指令"
|
|||
#: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7
|
||||
#: src/views/domain/cert/ChangeCert.vue:17
|
||||
#: src/views/domain/components/RightSettings.vue:83
|
||||
#: src/views/domain/components/SiteDuplicate.vue:133
|
||||
#: src/views/domain/components/SiteDuplicate.vue:129
|
||||
#: src/views/domain/DomainList.vue:13
|
||||
#: src/views/domain/ngx_conf/NgxUpstream.vue:175
|
||||
#: src/views/environment/Environment.vue:12
|
||||
#: src/views/stream/components/RightSettings.vue:82
|
||||
#: src/views/stream/components/StreamDuplicate.vue:133
|
||||
#: src/views/stream/components/StreamDuplicate.vue:129
|
||||
#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
@ -1107,11 +1153,11 @@ msgstr "新版本發布"
|
|||
|
||||
#: src/views/certificate/WildcardCertificate.vue:99
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:203
|
||||
#: src/views/domain/DomainAdd.vue:142
|
||||
#: src/views/domain/DomainAdd.vue:138
|
||||
msgid "Next"
|
||||
msgstr "下一步"
|
||||
|
||||
#: src/views/preference/Preference.vue:107
|
||||
#: src/views/preference/Preference.vue:122
|
||||
msgid "Nginx"
|
||||
msgstr "Nginx"
|
||||
|
||||
|
@ -1119,7 +1165,7 @@ msgstr "Nginx"
|
|||
msgid "Nginx Access Log Path"
|
||||
msgstr "Nginx 存取日誌路徑"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209
|
||||
#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207
|
||||
msgid "Nginx Configuration Parse Error"
|
||||
msgstr "Nginx 設定解析錯誤"
|
||||
|
||||
|
@ -1144,7 +1190,7 @@ msgid "Nginx restarted successfully"
|
|||
msgstr "Nginx 重啟成功"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:270
|
||||
#: src/components/Notification/Notification.vue:82
|
||||
#: src/components/Notification/Notification.vue:84
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:521
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:535
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:549
|
||||
|
@ -1152,6 +1198,7 @@ msgstr "Nginx 重啟成功"
|
|||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:71
|
||||
#: src/views/notification/Notification.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:96
|
||||
#: src/views/preference/BasicSettings.vue:101
|
||||
#: src/views/stream/StreamList.vue:165
|
||||
msgid "No"
|
||||
|
@ -1183,7 +1230,7 @@ msgstr "備註"
|
|||
msgid "Notification"
|
||||
msgstr "憑證"
|
||||
|
||||
#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221
|
||||
#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221
|
||||
#, fuzzy
|
||||
msgid "Notifications"
|
||||
msgstr "憑證"
|
||||
|
@ -1208,7 +1255,7 @@ msgid "Ok"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:271
|
||||
#: src/components/Notification/Notification.vue:83
|
||||
#: src/components/Notification/Notification.vue:85
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:522
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:536
|
||||
|
@ -1238,7 +1285,7 @@ msgstr ""
|
|||
msgid "Online"
|
||||
msgstr "線上"
|
||||
|
||||
#: src/views/preference/Preference.vue:113
|
||||
#: src/views/preference/Preference.vue:128
|
||||
msgid "OpenAI"
|
||||
msgstr "OpenAI"
|
||||
|
||||
|
@ -1250,13 +1297,13 @@ msgstr "作業系統"
|
|||
msgid "OS:"
|
||||
msgstr "作業系統:"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:90
|
||||
#: src/views/stream/components/Deploy.vue:90
|
||||
#: src/views/domain/components/Deploy.vue:87
|
||||
#: src/views/stream/components/Deploy.vue:87
|
||||
msgid "Overwrite"
|
||||
msgstr "覆蓋"
|
||||
|
||||
#: src/views/domain/components/Deploy.vue:94
|
||||
#: src/views/stream/components/Deploy.vue:94
|
||||
#: src/views/domain/components/Deploy.vue:91
|
||||
#: src/views/stream/components/Deploy.vue:91
|
||||
msgid "Overwrite exist file"
|
||||
msgstr "覆蓋現有檔案"
|
||||
|
||||
|
@ -1264,11 +1311,11 @@ msgstr "覆蓋現有檔案"
|
|||
msgid "Params"
|
||||
msgstr "參數"
|
||||
|
||||
#: src/views/other/Login.vue:132 src/views/user/User.vue:18
|
||||
#: src/views/other/Login.vue:144 src/views/user/User.vue:18
|
||||
msgid "Password"
|
||||
msgstr "密碼"
|
||||
|
||||
#: src/views/other/Install.vue:110
|
||||
#: src/views/other/Install.vue:109
|
||||
msgid "Password (*)"
|
||||
msgstr "密碼 (*)"
|
||||
|
||||
|
@ -1334,7 +1381,7 @@ msgstr "請至少選擇一個節點!"
|
|||
msgid "Pre-release"
|
||||
msgstr "預先發布"
|
||||
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:96
|
||||
#: src/routes/index.ts:239 src/views/preference/Preference.vue:105
|
||||
msgid "Preference"
|
||||
msgstr "偏好設定"
|
||||
|
||||
|
@ -1431,7 +1478,16 @@ msgstr "重新載入中"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "正在重新載入 Nginx"
|
||||
|
||||
#: src/components/Notification/Notification.vue:50
|
||||
#: src/views/preference/AuthSettings.vue:101
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:47
|
||||
#, fuzzy
|
||||
msgid "Remove successfully"
|
||||
msgstr "儲存成功"
|
||||
|
||||
#: src/components/Notification/Notification.vue:52
|
||||
#, fuzzy
|
||||
msgid "Removed successfully"
|
||||
msgstr "儲存成功"
|
||||
|
@ -1489,9 +1545,9 @@ msgstr "執行中"
|
|||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:252
|
||||
#: src/views/certificate/CertificateEditor.vue:249
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
|
||||
#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
|
||||
#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254
|
||||
#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
|
||||
msgid "Save"
|
||||
msgstr "儲存"
|
||||
|
||||
|
@ -1499,7 +1555,7 @@ msgstr "儲存"
|
|||
msgid "Save Directive"
|
||||
msgstr "儲存指令"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50
|
||||
#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
|
||||
msgid "Save error %{msg}"
|
||||
msgstr "儲存錯誤 %{msg}"
|
||||
|
@ -1507,14 +1563,14 @@ msgstr "儲存錯誤 %{msg}"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:66
|
||||
#: src/views/preference/Preference.vue:74
|
||||
msgid "Save successfully"
|
||||
msgstr "儲存成功"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38
|
||||
#: src/views/domain/DomainEdit.vue:148
|
||||
#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37
|
||||
#: src/views/domain/DomainEdit.vue:146
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
|
||||
#: src/views/stream/StreamEdit.vue:140
|
||||
#: src/views/stream/StreamEdit.vue:138
|
||||
msgid "Saved successfully"
|
||||
msgstr "儲存成功"
|
||||
|
||||
|
@ -1539,8 +1595,9 @@ msgstr "傳送"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:196
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:235
|
||||
#: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70
|
||||
#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113
|
||||
#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69
|
||||
#: src/views/preference/AuthSettings.vue:49
|
||||
#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
|
||||
#: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
|
||||
msgid "Server error"
|
||||
msgstr "伺服器錯誤"
|
||||
|
@ -1559,7 +1616,7 @@ msgid "server_name not found in directives"
|
|||
msgstr "在指令中未找到 server_name"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:121
|
||||
#: src/views/domain/DomainAdd.vue:117
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "必須提供 server_name 參數"
|
||||
|
||||
|
@ -1615,7 +1672,7 @@ msgstr "SSL 憑證金鑰路徑"
|
|||
msgid "SSL Certificate Path"
|
||||
msgstr "SSL 憑證路徑"
|
||||
|
||||
#: src/views/other/Login.vue:158
|
||||
#: src/views/other/Login.vue:170
|
||||
#, fuzzy
|
||||
msgid "SSO Login"
|
||||
msgstr "登入"
|
||||
|
@ -1701,8 +1758,8 @@ msgstr ""
|
|||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
#: src/views/domain/components/SiteDuplicate.vue:140
|
||||
#: src/views/stream/components/StreamDuplicate.vue:140
|
||||
#: src/views/domain/components/SiteDuplicate.vue:136
|
||||
#: src/views/stream/components/StreamDuplicate.vue:136
|
||||
msgid "Target"
|
||||
msgstr "目標"
|
||||
|
||||
|
@ -1736,7 +1793,7 @@ msgstr ""
|
|||
msgid "The input is not a SSL Certificate Key"
|
||||
msgstr "SSL 憑證金鑰路徑"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:33
|
||||
#: src/views/preference/OpenAISettings.vue:36
|
||||
msgid ""
|
||||
"The model name should only contain letters, unicode, numbers, hyphens, "
|
||||
"dashes, and dots."
|
||||
|
@ -1770,8 +1827,8 @@ msgstr "注意:目前設定中的 server_name 必須為需要申請憑證的
|
|||
msgid "The url is invalid"
|
||||
msgstr "此功能在演示中不可用。"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:45
|
||||
#: src/views/preference/OpenAISettings.vue:57
|
||||
#: src/views/preference/OpenAISettings.vue:48
|
||||
#: src/views/preference/OpenAISettings.vue:60
|
||||
#, fuzzy
|
||||
msgid "The url is invalid."
|
||||
msgstr "此功能在演示中不可用。"
|
||||
|
@ -1799,6 +1856,7 @@ msgstr ""
|
|||
msgid "This field should not be empty"
|
||||
msgstr "此欄位不應為空"
|
||||
|
||||
#: src/views/preference/AuthSettings.vue:59
|
||||
#: src/views/preference/LogrotateSettings.vue:12
|
||||
msgid "Tips"
|
||||
msgstr ""
|
||||
|
@ -1817,10 +1875,14 @@ msgstr ""
|
|||
"為了確保憑證自動續期能夠正常運作,我們需要新增一個 Location 來代理從授權後端"
|
||||
"的請求,我們需要儲存這個檔案並重新載入 Nginx。你確定你要繼續嗎?"
|
||||
|
||||
#: src/views/preference/OpenAISettings.vue:69
|
||||
#: src/views/preference/OpenAISettings.vue:72
|
||||
msgid "Token is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:62
|
||||
msgid "Too many login failed attempts, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
@ -1873,11 +1935,15 @@ msgstr "URL"
|
|||
msgid "User"
|
||||
msgstr "使用者名稱"
|
||||
|
||||
#: src/views/other/Login.vue:122 src/views/user/User.vue:9
|
||||
#: src/views/other/Login.vue:65
|
||||
msgid "User is banned"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/other/Login.vue:134 src/views/user/User.vue:9
|
||||
msgid "Username"
|
||||
msgstr "使用者名稱"
|
||||
|
||||
#: src/views/other/Install.vue:100
|
||||
#: src/views/other/Install.vue:99
|
||||
msgid "Username (*)"
|
||||
msgstr "使用者名稱 (*)"
|
||||
|
||||
|
@ -1891,7 +1957,7 @@ msgstr ""
|
|||
msgid "View"
|
||||
msgstr "檢視"
|
||||
|
||||
#: src/components/Notification/Notification.vue:141
|
||||
#: src/components/Notification/Notification.vue:143
|
||||
#, fuzzy
|
||||
msgid "View all notifications"
|
||||
msgstr "憑證"
|
||||
|
@ -1907,7 +1973,7 @@ msgstr "基本模式"
|
|||
|
||||
#: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:28
|
||||
#: src/views/domain/DomainAdd.vue:116
|
||||
#: src/views/domain/DomainAdd.vue:112
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
||||
|
@ -1940,6 +2006,7 @@ msgstr "將憑證寫入磁碟"
|
|||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:70
|
||||
#: src/views/preference/AuthSettings.vue:95
|
||||
#: src/views/preference/BasicSettings.vue:100
|
||||
msgid "Yes"
|
||||
msgstr "是的"
|
||||
|
|
|
@ -33,19 +33,15 @@ function init() {
|
|||
|
||||
async function save() {
|
||||
return ngx.build_config(ngx_config).then(r => {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
domain.save(ngx_config.name, { name: ngx_config.name, content: r.content, overwrite: true }).then(() => {
|
||||
message.success($gettext('Saved successfully'))
|
||||
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
domain.enable(ngx_config.name).then(() => {
|
||||
message.success($gettext('Enabled successfully'))
|
||||
window.scroll({ top: 0, left: 0, behavior: 'smooth' })
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
message.error(e.message ?? $gettext('Enable failed'), 5)
|
||||
})
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
message.error($gettext('Save error %{msg}', { msg: $gettext(e.message) ?? '' }), 5)
|
||||
})
|
||||
|
|
|
@ -105,10 +105,8 @@ function on_mode_change(advanced: CheckedType) {
|
|||
build_config()
|
||||
}
|
||||
else {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
return ngx.tokenize_config(configText.value).then(r => {
|
||||
Object.assign(ngx_config, r)
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(handle_parse_error)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -29,7 +29,7 @@ function deploy() {
|
|||
name: name.value,
|
||||
content: r.config,
|
||||
overwrite: overwrite.value,
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
}, { headers: { 'X-Node-ID': id } }).then(async () => {
|
||||
notification.success({
|
||||
message: $gettext('Deploy successfully'),
|
||||
|
@ -38,7 +38,6 @@ function deploy() {
|
|||
{ conf_name: name.value, node_name }),
|
||||
})
|
||||
if (enabled.value) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
domain.enable(name.value).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Enable successfully'),
|
||||
|
@ -46,7 +45,6 @@ function deploy() {
|
|||
$gettext('Enable %{conf_name} in %{node_name} successfully',
|
||||
{ conf_name: name.value, node_name }),
|
||||
})
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Enable %{conf_name} in %{node_name} failed', {
|
||||
|
@ -57,7 +55,6 @@ function deploy() {
|
|||
})
|
||||
})
|
||||
}
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Deploy %{conf_name} to %{node_name} failed', {
|
||||
|
|
|
@ -59,24 +59,22 @@ function onSubmit() {
|
|||
|
||||
modelRef.target.forEach(id => {
|
||||
if (id === 0) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
domain.duplicate(props.name, { name: modelRef.name }).then(() => {
|
||||
message.success($gettext('Duplicate to local successfully'))
|
||||
show.value = false
|
||||
emit('duplicated')
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
message.error($gettext(e?.message ?? 'Server error'))
|
||||
})
|
||||
}
|
||||
else {
|
||||
// get source content
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
domain.get(props.name).then(r => {
|
||||
domain.save(modelRef.name, {
|
||||
name: modelRef.name,
|
||||
content: r.config,
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
}, { headers: { 'X-Node-ID': id } }).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Duplicate successfully'),
|
||||
|
@ -84,7 +82,6 @@ function onSubmit() {
|
|||
$gettext('Duplicate %{conf_name} to %{node_name} successfully',
|
||||
{ conf_name: props.name, node_name: node_map[id] }),
|
||||
})
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Duplicate failed'),
|
||||
|
@ -92,7 +89,6 @@ function onSubmit() {
|
|||
})
|
||||
})
|
||||
if (r.enabled) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
domain.enable(modelRef.name, { headers: { 'X-Node-ID': id } }).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Enabled successfully'),
|
||||
|
|
|
@ -61,11 +61,10 @@ const onSubmit = () => {
|
|||
validate().then(() => {
|
||||
// modelRef
|
||||
loading.value = true
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
install.install_nginx_ui(modelRef).then(async () => {
|
||||
message.success($gettext('Install successfully'))
|
||||
await router.push('/login')
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
message.error(e.message ?? $gettext('Server error'))
|
||||
}).finally(() => {
|
||||
|
|
|
@ -46,16 +46,28 @@ const { validate, validateInfos, clearValidate } = Form.useForm(modelRef, rulesR
|
|||
const onSubmit = () => {
|
||||
validate().then(async () => {
|
||||
loading.value = true
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
await auth.login(modelRef.username, modelRef.password).then(async () => {
|
||||
message.success($gettext('Login successful'), 1)
|
||||
|
||||
const next = (route.query?.next || '').toString() || '/'
|
||||
|
||||
await router.push(next)
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
switch (e.code) {
|
||||
case 4031:
|
||||
message.error($gettext('Incorrect username or password'))
|
||||
break
|
||||
case 4291:
|
||||
message.error($gettext('Too many login failed attempts, please try again later'))
|
||||
break
|
||||
case 4033:
|
||||
message.error($gettext('User is banned'))
|
||||
break
|
||||
default:
|
||||
message.error($gettext(e.message ?? 'Server error'))
|
||||
break
|
||||
}
|
||||
})
|
||||
loading.value = false
|
||||
})
|
||||
|
|
114
app/src/views/preference/AuthSettings.vue
Normal file
114
app/src/views/preference/AuthSettings.vue
Normal file
|
@ -0,0 +1,114 @@
|
|||
<script setup lang="tsx">
|
||||
import { message } from 'ant-design-vue'
|
||||
import type { Ref } from 'vue'
|
||||
import { inject } from 'vue'
|
||||
import dayjs from 'dayjs'
|
||||
import type { BannedIP } from '@/api/settings'
|
||||
import setting from '@/api/settings'
|
||||
import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
|
||||
import type { Settings } from '@/views/preference/typedef'
|
||||
|
||||
const data: Settings = inject('data') as Settings
|
||||
|
||||
const bannedIPColumns = [{
|
||||
title: $gettext('IP'),
|
||||
dataIndex: 'ip',
|
||||
}, {
|
||||
title: $gettext('Attempts'),
|
||||
dataIndex: 'attempts',
|
||||
}, {
|
||||
title: $gettext('Banned Until'),
|
||||
dataIndex: 'expired_at',
|
||||
customRender: (args: customRender) => {
|
||||
return dayjs.unix(args.text).format('YYYY-MM-DD HH:mm:ss')
|
||||
},
|
||||
}, {
|
||||
title: $gettext('Action'),
|
||||
dataIndex: 'action',
|
||||
}]
|
||||
|
||||
const bannedIPs: Ref<BannedIP[]> = ref([])
|
||||
|
||||
function getBannedIPs() {
|
||||
setting.get_banned_ips().then(r => {
|
||||
bannedIPs.value = r
|
||||
})
|
||||
}
|
||||
|
||||
getBannedIPs()
|
||||
|
||||
defineExpose({
|
||||
getBannedIPs,
|
||||
})
|
||||
|
||||
function removeBannedIP(ip: string) {
|
||||
setting.remove_banned_ip(ip).then(() => {
|
||||
bannedIPs.value = bannedIPs.value.filter(v => v.ip !== ip)
|
||||
message.success($gettext('Remove successfully'))
|
||||
}).catch((e: { message?: string }) => {
|
||||
message.error(e?.message ?? $gettext('Server error'))
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex justify-center">
|
||||
<div>
|
||||
<AAlert
|
||||
class="mb-4"
|
||||
:message="$gettext('Tips')"
|
||||
:description="$gettext('If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes,'
|
||||
+ ' the ip will be banned for a period of time.')"
|
||||
type="info"
|
||||
/>
|
||||
<AForm
|
||||
layout="horizontal"
|
||||
style="width:90%;max-width: 500px"
|
||||
>
|
||||
<AFormItem :label="$gettext('Ban Threshold Minutes')">
|
||||
<AInputNumber
|
||||
v-model:value="data.auth.ban_threshold_minutes"
|
||||
min="1"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('Max Attempts')">
|
||||
<AInputNumber
|
||||
v-model:value="data.auth.max_attempts"
|
||||
min="1"
|
||||
/>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
<h3>
|
||||
{{ $gettext('Banned IPs') }}
|
||||
</h3>
|
||||
<div class="mb-6">
|
||||
<ATable
|
||||
:columns="bannedIPColumns"
|
||||
row-key="ip"
|
||||
:data-source="bannedIPs"
|
||||
size="small"
|
||||
>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.dataIndex === 'action'">
|
||||
<APopconfirm
|
||||
:title="$gettext('Are you sure to delete this banned IP immediately?')"
|
||||
:ok-text="$gettext('Yes')"
|
||||
:cancel-text="$gettext('No')"
|
||||
placement="bottom"
|
||||
@confirm="() => removeBannedIP(record.ip)"
|
||||
>
|
||||
<a>
|
||||
{{ $gettext('Remove') }}
|
||||
</a>
|
||||
</APopconfirm>
|
||||
</template>
|
||||
</template>
|
||||
</ATable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
</style>
|
|
@ -10,6 +10,7 @@ import NginxSettings from '@/views/preference/NginxSettings.vue'
|
|||
import type { Settings } from '@/views/preference/typedef'
|
||||
import LogrotateSettings from '@/views/preference/LogrotateSettings.vue'
|
||||
import { useSettingsStore } from '@/pinia'
|
||||
import AuthSettings from '@/views/preference/AuthSettings.vue'
|
||||
|
||||
const data = ref<Settings>({
|
||||
server: {
|
||||
|
@ -46,15 +47,21 @@ const data = ref<Settings>({
|
|||
cmd: '',
|
||||
interval: 1440,
|
||||
},
|
||||
auth: {
|
||||
ip_white_list: [],
|
||||
ban_threshold_minutes: 10,
|
||||
max_attempts: 10,
|
||||
},
|
||||
})
|
||||
|
||||
settings.get().then(r => {
|
||||
settings.get<Settings>().then(r => {
|
||||
data.value = r
|
||||
})
|
||||
|
||||
const settingsStore = useSettingsStore()
|
||||
const { server_name } = storeToRefs(settingsStore)
|
||||
const errors = ref({}) as Ref<Record<string, Record<string, string>>>
|
||||
const refAuthSettings = ref()
|
||||
|
||||
async function save() {
|
||||
// fix type
|
||||
|
@ -63,6 +70,7 @@ async function save() {
|
|||
if (!settingsStore.is_remote)
|
||||
server_name.value = r?.server?.name ?? ''
|
||||
data.value = r
|
||||
refAuthSettings.value.getBannedIPs()
|
||||
message.success($gettext('Save successfully'))
|
||||
errors.value = {}
|
||||
}).catch(e => {
|
||||
|
@ -90,6 +98,7 @@ onMounted(() => {
|
|||
if (route.query?.tab)
|
||||
activeKey.value = route.query.tab.toString()
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -102,6 +111,12 @@ onMounted(() => {
|
|||
>
|
||||
<BasicSettings />
|
||||
</ATabPane>
|
||||
<ATabPane
|
||||
key="auth"
|
||||
:tab="$gettext('Auth')"
|
||||
>
|
||||
<AuthSettings ref="refAuthSettings" />
|
||||
</ATabPane>
|
||||
<ATabPane
|
||||
key="nginx"
|
||||
:tab="$gettext('Nginx')"
|
||||
|
|
|
@ -33,4 +33,9 @@ export interface Settings {
|
|||
cmd: string
|
||||
interval: number
|
||||
}
|
||||
auth: {
|
||||
ip_white_list: string[]
|
||||
ban_threshold_minutes: number
|
||||
max_attempts: number
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,10 +97,8 @@ function on_mode_change(advanced: CheckedType) {
|
|||
build_config()
|
||||
}
|
||||
else {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
return ngx.tokenize_config(configText.value).then(r => {
|
||||
Object.assign(ngx_config, r)
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(handle_parse_error)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -29,7 +29,7 @@ function deploy() {
|
|||
name: name.value,
|
||||
content: r.config,
|
||||
overwrite: overwrite.value,
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
}, { headers: { 'X-Node-ID': id } }).then(async () => {
|
||||
notification.success({
|
||||
message: $gettext('Deploy successfully'),
|
||||
|
@ -38,7 +38,6 @@ function deploy() {
|
|||
{ conf_name: name.value, node_name }),
|
||||
})
|
||||
if (enabled.value) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
stream.enable(name.value).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Enable successfully'),
|
||||
|
@ -46,7 +45,6 @@ function deploy() {
|
|||
$gettext('Enable %{conf_name} in %{node_name} successfully',
|
||||
{ conf_name: name.value, node_name }),
|
||||
})
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Enable %{conf_name} in %{node_name} failed', {
|
||||
|
@ -57,7 +55,6 @@ function deploy() {
|
|||
})
|
||||
})
|
||||
}
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Deploy %{conf_name} to %{node_name} failed', {
|
||||
|
|
|
@ -59,24 +59,22 @@ function onSubmit() {
|
|||
|
||||
modelRef.target.forEach(id => {
|
||||
if (id === 0) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
stream.duplicate(props.name, { name: modelRef.name }).then(() => {
|
||||
message.success($gettext('Duplicate to local successfully'))
|
||||
show.value = false
|
||||
emit('duplicated')
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
message.error($gettext(e?.message ?? 'Server error'))
|
||||
})
|
||||
}
|
||||
else {
|
||||
// get source content
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
stream.get(props.name).then(r => {
|
||||
stream.save(modelRef.name, {
|
||||
name: modelRef.name,
|
||||
content: r.config,
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
|
||||
}, { headers: { 'X-Node-ID': id } }).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Duplicate successfully'),
|
||||
|
@ -84,7 +82,6 @@ function onSubmit() {
|
|||
$gettext('Duplicate %{conf_name} to %{node_name} successfully',
|
||||
{ conf_name: props.name, node_name: node_map[id] }),
|
||||
})
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
}).catch(e => {
|
||||
notification.error({
|
||||
message: $gettext('Duplicate failed'),
|
||||
|
@ -92,7 +89,6 @@ function onSubmit() {
|
|||
})
|
||||
})
|
||||
if (r.enabled) {
|
||||
// eslint-disable-next-line promise/no-nesting
|
||||
stream.enable(modelRef.name, { headers: { 'X-Node-ID': id } }).then(() => {
|
||||
notification.success({
|
||||
message: $gettext('Enabled successfully'),
|
||||
|
|
87
app/vite.config.ts.timestamp-1721542436572-91822f5b8889d.mjs
Normal file
87
app/vite.config.ts.timestamp-1721542436572-91822f5b8889d.mjs
Normal file
File diff suppressed because one or more lines are too long
|
@ -9,7 +9,7 @@ From v2.0.0-beta.26, you can authorization settings in the `auth` section of the
|
|||
[auth]
|
||||
IPWhiteList = 10.0.0.1
|
||||
IPWhiteList = 10.0.0.2
|
||||
IPWhiteList = 10.0.0.3
|
||||
IPWhiteList = 2001:0000:130F:0000:0000:09C0:876A:130B
|
||||
```
|
||||
|
||||
By default, if you do not set the `IPWhiteList`, all IP addresses are allowed to access the Nginx UI.
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
[auth]
|
||||
IPWhiteList = 10.0.0.1
|
||||
IPWhiteList = 10.0.0.2
|
||||
IPWhiteList = 10.0.0.3
|
||||
IPWhiteList = 2001:0000:130F:0000:0000:09C0:876A:130B
|
||||
```
|
||||
|
||||
默认情况下,如果您没有设置 `IPWhiteList`,所有 IP 地址都允许访问 Nginx UI。
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
[auth]
|
||||
IPWhiteList = 10.0.0.1
|
||||
IPWhiteList = 10.0.0.2
|
||||
IPWhiteList = 10.0.0.3
|
||||
IPWhiteList = 2001:0000:130F:0000:0000:09C0:876A:130B
|
||||
```
|
||||
|
||||
默認情況下,如果您沒有設置 IPWhiteList,所有 IP 地址都允許訪問 Nginx UI。
|
||||
|
|
|
@ -4,7 +4,9 @@ import (
|
|||
"errors"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -30,3 +32,16 @@ func Login(name string, password string) (user *model.Auth, err error) {
|
|||
|
||||
return
|
||||
}
|
||||
|
||||
func BanIP(ip string) {
|
||||
b := query.BanIP
|
||||
banIP, err := b.Where(b.IP.Eq(ip)).First()
|
||||
if err != nil || banIP.ExpiredAt <= time.Now().Unix() {
|
||||
_ = b.Create(&model.BanIP{
|
||||
IP: ip,
|
||||
Attempts: 1,
|
||||
ExpiredAt: time.Now().Unix() + int64(settings.AuthSettings.BanThresholdMinutes*60),
|
||||
})
|
||||
}
|
||||
_, _ = b.Where(b.IP.Eq(ip)).UpdateSimple(b.Attempts.Add(1))
|
||||
}
|
||||
|
|
7
model/ban_ip.go
Normal file
7
model/ban_ip.go
Normal file
|
@ -0,0 +1,7 @@
|
|||
package model
|
||||
|
||||
type BanIP struct {
|
||||
IP string `json:"ip"`
|
||||
Attempts int `json:"attempts"`
|
||||
ExpiredAt int64 `json:"expired_at" gorm:"index"`
|
||||
}
|
|
@ -35,6 +35,7 @@ func GenerateAllModel() []any {
|
|||
Environment{},
|
||||
Notification{},
|
||||
AcmeUser{},
|
||||
BanIP{},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ func newAuth(db *gorm.DB, opts ...gen.DOOption) auth {
|
|||
_auth.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
_auth.Name = field.NewString(tableName, "name")
|
||||
_auth.Password = field.NewString(tableName, "password")
|
||||
_auth.Status = field.NewBool(tableName, "status")
|
||||
|
||||
_auth.fillFieldMap()
|
||||
|
||||
|
@ -50,6 +51,7 @@ type auth struct {
|
|||
DeletedAt field.Field
|
||||
Name field.String
|
||||
Password field.String
|
||||
Status field.Bool
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
@ -72,6 +74,7 @@ func (a *auth) updateTableName(table string) *auth {
|
|||
a.DeletedAt = field.NewField(table, "deleted_at")
|
||||
a.Name = field.NewString(table, "name")
|
||||
a.Password = field.NewString(table, "password")
|
||||
a.Status = field.NewBool(table, "status")
|
||||
|
||||
a.fillFieldMap()
|
||||
|
||||
|
@ -88,13 +91,14 @@ func (a *auth) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
|||
}
|
||||
|
||||
func (a *auth) fillFieldMap() {
|
||||
a.fieldMap = make(map[string]field.Expr, 6)
|
||||
a.fieldMap = make(map[string]field.Expr, 7)
|
||||
a.fieldMap["id"] = a.ID
|
||||
a.fieldMap["created_at"] = a.CreatedAt
|
||||
a.fieldMap["updated_at"] = a.UpdatedAt
|
||||
a.fieldMap["deleted_at"] = a.DeletedAt
|
||||
a.fieldMap["name"] = a.Name
|
||||
a.fieldMap["password"] = a.Password
|
||||
a.fieldMap["status"] = a.Status
|
||||
}
|
||||
|
||||
func (a auth) clone(db *gorm.DB) auth {
|
||||
|
|
358
query/ban_ips.gen.go
Normal file
358
query/ban_ips.gen.go
Normal file
|
@ -0,0 +1,358 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
)
|
||||
|
||||
func newBanIP(db *gorm.DB, opts ...gen.DOOption) banIP {
|
||||
_banIP := banIP{}
|
||||
|
||||
_banIP.banIPDo.UseDB(db, opts...)
|
||||
_banIP.banIPDo.UseModel(&model.BanIP{})
|
||||
|
||||
tableName := _banIP.banIPDo.TableName()
|
||||
_banIP.ALL = field.NewAsterisk(tableName)
|
||||
_banIP.IP = field.NewString(tableName, "ip")
|
||||
_banIP.Attempts = field.NewInt(tableName, "attempts")
|
||||
_banIP.ExpiredAt = field.NewInt64(tableName, "expired_at")
|
||||
|
||||
_banIP.fillFieldMap()
|
||||
|
||||
return _banIP
|
||||
}
|
||||
|
||||
type banIP struct {
|
||||
banIPDo
|
||||
|
||||
ALL field.Asterisk
|
||||
IP field.String
|
||||
Attempts field.Int
|
||||
ExpiredAt field.Int64
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (b banIP) Table(newTableName string) *banIP {
|
||||
b.banIPDo.UseTable(newTableName)
|
||||
return b.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (b banIP) As(alias string) *banIP {
|
||||
b.banIPDo.DO = *(b.banIPDo.As(alias).(*gen.DO))
|
||||
return b.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (b *banIP) updateTableName(table string) *banIP {
|
||||
b.ALL = field.NewAsterisk(table)
|
||||
b.IP = field.NewString(table, "ip")
|
||||
b.Attempts = field.NewInt(table, "attempts")
|
||||
b.ExpiredAt = field.NewInt64(table, "expired_at")
|
||||
|
||||
b.fillFieldMap()
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *banIP) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := b.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (b *banIP) fillFieldMap() {
|
||||
b.fieldMap = make(map[string]field.Expr, 3)
|
||||
b.fieldMap["ip"] = b.IP
|
||||
b.fieldMap["attempts"] = b.Attempts
|
||||
b.fieldMap["expired_at"] = b.ExpiredAt
|
||||
}
|
||||
|
||||
func (b banIP) clone(db *gorm.DB) banIP {
|
||||
b.banIPDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return b
|
||||
}
|
||||
|
||||
func (b banIP) replaceDB(db *gorm.DB) banIP {
|
||||
b.banIPDo.ReplaceDB(db)
|
||||
return b
|
||||
}
|
||||
|
||||
type banIPDo struct{ gen.DO }
|
||||
|
||||
// FirstByID Where("id=@id")
|
||||
func (b banIPDo) FirstByID(id int) (result *model.BanIP, err error) {
|
||||
var params []interface{}
|
||||
|
||||
var generateSQL strings.Builder
|
||||
params = append(params, id)
|
||||
generateSQL.WriteString("id=? ")
|
||||
|
||||
var executeSQL *gorm.DB
|
||||
executeSQL = b.UnderlyingDB().Where(generateSQL.String(), params...).Take(&result) // ignore_security_alert
|
||||
err = executeSQL.Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
|
||||
func (b banIPDo) DeleteByID(id int) (err error) {
|
||||
var params []interface{}
|
||||
|
||||
var generateSQL strings.Builder
|
||||
params = append(params, id)
|
||||
generateSQL.WriteString("update ban_ips set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=? ")
|
||||
|
||||
var executeSQL *gorm.DB
|
||||
executeSQL = b.UnderlyingDB().Exec(generateSQL.String(), params...) // ignore_security_alert
|
||||
err = executeSQL.Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (b banIPDo) Debug() *banIPDo {
|
||||
return b.withDO(b.DO.Debug())
|
||||
}
|
||||
|
||||
func (b banIPDo) WithContext(ctx context.Context) *banIPDo {
|
||||
return b.withDO(b.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (b banIPDo) ReadDB() *banIPDo {
|
||||
return b.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (b banIPDo) WriteDB() *banIPDo {
|
||||
return b.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (b banIPDo) Session(config *gorm.Session) *banIPDo {
|
||||
return b.withDO(b.DO.Session(config))
|
||||
}
|
||||
|
||||
func (b banIPDo) Clauses(conds ...clause.Expression) *banIPDo {
|
||||
return b.withDO(b.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Returning(value interface{}, columns ...string) *banIPDo {
|
||||
return b.withDO(b.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Not(conds ...gen.Condition) *banIPDo {
|
||||
return b.withDO(b.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Or(conds ...gen.Condition) *banIPDo {
|
||||
return b.withDO(b.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Select(conds ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Where(conds ...gen.Condition) *banIPDo {
|
||||
return b.withDO(b.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Order(conds ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Distinct(cols ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Omit(cols ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Join(table schema.Tabler, on ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (b banIPDo) LeftJoin(table schema.Tabler, on ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (b banIPDo) RightJoin(table schema.Tabler, on ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Group(cols ...field.Expr) *banIPDo {
|
||||
return b.withDO(b.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Having(conds ...gen.Condition) *banIPDo {
|
||||
return b.withDO(b.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Limit(limit int) *banIPDo {
|
||||
return b.withDO(b.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (b banIPDo) Offset(offset int) *banIPDo {
|
||||
return b.withDO(b.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (b banIPDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *banIPDo {
|
||||
return b.withDO(b.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Unscoped() *banIPDo {
|
||||
return b.withDO(b.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (b banIPDo) Create(values ...*model.BanIP) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return b.DO.Create(values)
|
||||
}
|
||||
|
||||
func (b banIPDo) CreateInBatches(values []*model.BanIP, batchSize int) error {
|
||||
return b.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (b banIPDo) Save(values ...*model.BanIP) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return b.DO.Save(values)
|
||||
}
|
||||
|
||||
func (b banIPDo) First() (*model.BanIP, error) {
|
||||
if result, err := b.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.BanIP), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (b banIPDo) Take() (*model.BanIP, error) {
|
||||
if result, err := b.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.BanIP), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (b banIPDo) Last() (*model.BanIP, error) {
|
||||
if result, err := b.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.BanIP), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (b banIPDo) Find() ([]*model.BanIP, error) {
|
||||
result, err := b.DO.Find()
|
||||
return result.([]*model.BanIP), err
|
||||
}
|
||||
|
||||
func (b banIPDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.BanIP, err error) {
|
||||
buf := make([]*model.BanIP, 0, batchSize)
|
||||
err = b.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (b banIPDo) FindInBatches(result *[]*model.BanIP, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return b.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (b banIPDo) Attrs(attrs ...field.AssignExpr) *banIPDo {
|
||||
return b.withDO(b.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Assign(attrs ...field.AssignExpr) *banIPDo {
|
||||
return b.withDO(b.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (b banIPDo) Joins(fields ...field.RelationField) *banIPDo {
|
||||
for _, _f := range fields {
|
||||
b = *b.withDO(b.DO.Joins(_f))
|
||||
}
|
||||
return &b
|
||||
}
|
||||
|
||||
func (b banIPDo) Preload(fields ...field.RelationField) *banIPDo {
|
||||
for _, _f := range fields {
|
||||
b = *b.withDO(b.DO.Preload(_f))
|
||||
}
|
||||
return &b
|
||||
}
|
||||
|
||||
func (b banIPDo) FirstOrInit() (*model.BanIP, error) {
|
||||
if result, err := b.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.BanIP), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (b banIPDo) FirstOrCreate() (*model.BanIP, error) {
|
||||
if result, err := b.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.BanIP), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (b banIPDo) FindByPage(offset int, limit int) (result []*model.BanIP, count int64, err error) {
|
||||
result, err = b.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = b.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (b banIPDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = b.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = b.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (b banIPDo) Scan(result interface{}) (err error) {
|
||||
return b.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (b banIPDo) Delete(models ...*model.BanIP) (result gen.ResultInfo, err error) {
|
||||
return b.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (b *banIPDo) withDO(do gen.Dao) *banIPDo {
|
||||
b.DO = *do.(*gen.DO)
|
||||
return b
|
||||
}
|
|
@ -20,6 +20,7 @@ var (
|
|||
AcmeUser *acmeUser
|
||||
Auth *auth
|
||||
AuthToken *authToken
|
||||
BanIP *banIP
|
||||
Cert *cert
|
||||
ChatGPTLog *chatGPTLog
|
||||
ConfigBackup *configBackup
|
||||
|
@ -35,6 +36,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
|||
AcmeUser = &Q.AcmeUser
|
||||
Auth = &Q.Auth
|
||||
AuthToken = &Q.AuthToken
|
||||
BanIP = &Q.BanIP
|
||||
Cert = &Q.Cert
|
||||
ChatGPTLog = &Q.ChatGPTLog
|
||||
ConfigBackup = &Q.ConfigBackup
|
||||
|
@ -51,6 +53,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
|||
AcmeUser: newAcmeUser(db, opts...),
|
||||
Auth: newAuth(db, opts...),
|
||||
AuthToken: newAuthToken(db, opts...),
|
||||
BanIP: newBanIP(db, opts...),
|
||||
Cert: newCert(db, opts...),
|
||||
ChatGPTLog: newChatGPTLog(db, opts...),
|
||||
ConfigBackup: newConfigBackup(db, opts...),
|
||||
|
@ -68,6 +71,7 @@ type Query struct {
|
|||
AcmeUser acmeUser
|
||||
Auth auth
|
||||
AuthToken authToken
|
||||
BanIP banIP
|
||||
Cert cert
|
||||
ChatGPTLog chatGPTLog
|
||||
ConfigBackup configBackup
|
||||
|
@ -86,6 +90,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
|
|||
AcmeUser: q.AcmeUser.clone(db),
|
||||
Auth: q.Auth.clone(db),
|
||||
AuthToken: q.AuthToken.clone(db),
|
||||
BanIP: q.BanIP.clone(db),
|
||||
Cert: q.Cert.clone(db),
|
||||
ChatGPTLog: q.ChatGPTLog.clone(db),
|
||||
ConfigBackup: q.ConfigBackup.clone(db),
|
||||
|
@ -111,6 +116,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
|||
AcmeUser: q.AcmeUser.replaceDB(db),
|
||||
Auth: q.Auth.replaceDB(db),
|
||||
AuthToken: q.AuthToken.replaceDB(db),
|
||||
BanIP: q.BanIP.replaceDB(db),
|
||||
Cert: q.Cert.replaceDB(db),
|
||||
ChatGPTLog: q.ChatGPTLog.replaceDB(db),
|
||||
ConfigBackup: q.ConfigBackup.replaceDB(db),
|
||||
|
@ -126,6 +132,7 @@ type queryCtx struct {
|
|||
AcmeUser *acmeUserDo
|
||||
Auth *authDo
|
||||
AuthToken *authTokenDo
|
||||
BanIP *banIPDo
|
||||
Cert *certDo
|
||||
ChatGPTLog *chatGPTLogDo
|
||||
ConfigBackup *configBackupDo
|
||||
|
@ -141,6 +148,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
|||
AcmeUser: q.AcmeUser.WithContext(ctx),
|
||||
Auth: q.Auth.WithContext(ctx),
|
||||
AuthToken: q.AuthToken.WithContext(ctx),
|
||||
BanIP: q.BanIP.WithContext(ctx),
|
||||
Cert: q.Cert.WithContext(ctx),
|
||||
ChatGPTLog: q.ChatGPTLog.WithContext(ctx),
|
||||
ConfigBackup: q.ConfigBackup.WithContext(ctx),
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/0xJacky/Nginx-UI/api/nginx"
|
||||
"github.com/0xJacky/Nginx-UI/api/notification"
|
||||
"github.com/0xJacky/Nginx-UI/api/openai"
|
||||
"github.com/0xJacky/Nginx-UI/api/settings"
|
||||
"github.com/0xJacky/Nginx-UI/api/sites"
|
||||
"github.com/0xJacky/Nginx-UI/api/streams"
|
||||
"github.com/0xJacky/Nginx-UI/api/system"
|
||||
|
@ -56,6 +57,7 @@ func InitRouter() *gin.Engine {
|
|||
certificate.InitDNSCredentialRouter(g)
|
||||
certificate.InitAcmeUserRouter(g)
|
||||
system.InitPrivateRouter(g)
|
||||
settings.InitRouter(g)
|
||||
openai.InitRouter(g)
|
||||
cluster.InitRouter(g)
|
||||
notification.InitRouter(g)
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package settings
|
||||
|
||||
type Auth struct {
|
||||
IPWhiteList []string `ini:",,allowshadow"`
|
||||
IPWhiteList []string `json:"ip_white_list" binding:"omitempty,dive,ip" ini:",,allowshadow"`
|
||||
BanThresholdMinutes int `json:"ban_threshold_minutes" binding:"min=1"`
|
||||
MaxAttempts int `json:"max_attempts" binding:"min=1"`
|
||||
}
|
||||
|
||||
var AuthSettings = Auth{}
|
||||
var AuthSettings = Auth{
|
||||
BanThresholdMinutes: 10,
|
||||
MaxAttempts: 10,
|
||||
}
|
||||
|
|
|
@ -71,6 +71,14 @@ func Setup() {
|
|||
NginxSettings.RestartCmd = "nginx -s stop"
|
||||
}
|
||||
|
||||
if AuthSettings.BanThresholdMinutes <= 0 {
|
||||
AuthSettings.BanThresholdMinutes = 10
|
||||
}
|
||||
|
||||
if AuthSettings.MaxAttempts <= 0 {
|
||||
AuthSettings.MaxAttempts = 10
|
||||
}
|
||||
|
||||
err = Save()
|
||||
if err != nil {
|
||||
log.Fatalf("settings.Setup: %v\n", err)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue