mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 18:35:51 +02:00
refactor(cert): introducing new management page
1. User can now view the latest renew logs of the certain certificate. 2. Add manually renew button in certificate modify page for managed certificate (auto cert)
This commit is contained in:
parent
7c47f08a72
commit
ac68fd05c9
36 changed files with 1908 additions and 1286 deletions
|
@ -3,48 +3,31 @@ package certificate
|
|||
import (
|
||||
"github.com/0xJacky/Nginx-UI/api"
|
||||
"github.com/0xJacky/Nginx-UI/api/cosy"
|
||||
"github.com/0xJacky/Nginx-UI/api/sites"
|
||||
"github.com/0xJacky/Nginx-UI/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/cast"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func GetCertList(c *gin.Context) {
|
||||
cosy.Core[model.Cert](c).SetFussy("name", "domain").PagingList()
|
||||
type APICertificate struct {
|
||||
*model.Cert
|
||||
SSLCertificate string `json:"ssl_certificate,omitempty"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key,omitempty"`
|
||||
CertificateInfo *cert.Info `json:"certificate_info,omitempty"`
|
||||
}
|
||||
|
||||
func getCert(c *gin.Context, certModel *model.Cert) {
|
||||
type resp struct {
|
||||
*model.Cert
|
||||
SSLCertificate string `json:"ssl_certificate"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key"`
|
||||
CertificateInfo *sites.CertificateInfo `json:"certificate_info,omitempty"`
|
||||
}
|
||||
|
||||
func Transformer(certModel *model.Cert) (certificate *APICertificate) {
|
||||
var sslCertificationBytes, sslCertificationKeyBytes []byte
|
||||
var certificateInfo *sites.CertificateInfo
|
||||
var certificateInfo *cert.Info
|
||||
if certModel.SSLCertificatePath != "" {
|
||||
if _, err := os.Stat(certModel.SSLCertificatePath); err == nil {
|
||||
sslCertificationBytes, _ = os.ReadFile(certModel.SSLCertificatePath)
|
||||
}
|
||||
|
||||
pubKey, err := cert.GetCertInfo(certModel.SSLCertificatePath)
|
||||
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
certificateInfo = &sites.CertificateInfo{
|
||||
SubjectName: pubKey.Subject.CommonName,
|
||||
IssuerName: pubKey.Issuer.CommonName,
|
||||
NotAfter: pubKey.NotAfter,
|
||||
NotBefore: pubKey.NotBefore,
|
||||
}
|
||||
certificateInfo, _ = cert.GetCertInfo(certModel.SSLCertificatePath)
|
||||
}
|
||||
|
||||
if certModel.SSLCertificateKeyPath != "" {
|
||||
|
@ -53,23 +36,37 @@ func getCert(c *gin.Context, certModel *model.Cert) {
|
|||
}
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp{
|
||||
certModel,
|
||||
string(sslCertificationBytes),
|
||||
string(sslCertificationKeyBytes),
|
||||
certificateInfo,
|
||||
})
|
||||
return &APICertificate{
|
||||
Cert: certModel,
|
||||
SSLCertificate: string(sslCertificationBytes),
|
||||
SSLCertificateKey: string(sslCertificationKeyBytes),
|
||||
CertificateInfo: certificateInfo,
|
||||
}
|
||||
}
|
||||
|
||||
func GetCertList(c *gin.Context) {
|
||||
cosy.Core[model.Cert](c).SetFussy("name", "domain").SetTransformer(func(m *model.Cert) any {
|
||||
|
||||
info, _ := cert.GetCertInfo(m.SSLCertificatePath)
|
||||
|
||||
return APICertificate{
|
||||
Cert: m,
|
||||
CertificateInfo: info,
|
||||
}
|
||||
}).PagingList()
|
||||
}
|
||||
|
||||
func GetCert(c *gin.Context) {
|
||||
certModel, err := model.FirstCertByID(cast.ToInt(c.Param("id")))
|
||||
q := query.Cert
|
||||
|
||||
certModel, err := q.FirstByID(cast.ToInt(c.Param("id")))
|
||||
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
getCert(c, &certModel)
|
||||
c.JSON(http.StatusOK, Transformer(certModel))
|
||||
}
|
||||
|
||||
func AddCert(c *gin.Context) {
|
||||
|
@ -77,8 +74,10 @@ func AddCert(c *gin.Context) {
|
|||
Name string `json:"name"`
|
||||
SSLCertificatePath string `json:"ssl_certificate_path" binding:"required"`
|
||||
SSLCertificateKeyPath string `json:"ssl_certificate_key_path" binding:"required"`
|
||||
SSLCertification string `json:"ssl_certification"`
|
||||
SSLCertificationKey string `json:"ssl_certification_key"`
|
||||
SSLCertificate string `json:"ssl_certificate"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key"`
|
||||
ChallengeMethod string `json:"challenge_method"`
|
||||
DnsCredentialID int `json:"dns_credential_id"`
|
||||
}
|
||||
if !api.BindAndValid(c, &json) {
|
||||
return
|
||||
|
@ -87,6 +86,8 @@ func AddCert(c *gin.Context) {
|
|||
Name: json.Name,
|
||||
SSLCertificatePath: json.SSLCertificatePath,
|
||||
SSLCertificateKeyPath: json.SSLCertificateKeyPath,
|
||||
ChallengeMethod: json.ChallengeMethod,
|
||||
DnsCredentialID: json.DnsCredentialID,
|
||||
}
|
||||
|
||||
err := certModel.Insert()
|
||||
|
@ -96,35 +97,21 @@ func AddCert(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(json.SSLCertificatePath), 0644)
|
||||
content := &cert.Content{
|
||||
SSLCertificatePath: json.SSLCertificatePath,
|
||||
SSLCertificateKeyPath: json.SSLCertificateKeyPath,
|
||||
SSLCertificate: json.SSLCertificate,
|
||||
SSLCertificateKey: json.SSLCertificateKey,
|
||||
}
|
||||
|
||||
err = content.WriteFile()
|
||||
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(json.SSLCertificateKeyPath), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if json.SSLCertification != "" {
|
||||
err = os.WriteFile(json.SSLCertificatePath, []byte(json.SSLCertification), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if json.SSLCertificationKey != "" {
|
||||
err = os.WriteFile(json.SSLCertificateKeyPath, []byte(json.SSLCertificationKey), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
getCert(c, certModel)
|
||||
c.JSON(http.StatusOK, Transformer(certModel))
|
||||
}
|
||||
|
||||
func ModifyCert(c *gin.Context) {
|
||||
|
@ -136,13 +123,17 @@ func ModifyCert(c *gin.Context) {
|
|||
SSLCertificateKeyPath string `json:"ssl_certificate_key_path" binding:"required"`
|
||||
SSLCertificate string `json:"ssl_certificate"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key"`
|
||||
ChallengeMethod string `json:"challenge_method"`
|
||||
DnsCredentialID int `json:"dns_credential_id"`
|
||||
}
|
||||
|
||||
if !api.BindAndValid(c, &json) {
|
||||
return
|
||||
}
|
||||
|
||||
certModel, err := model.FirstCertByID(id)
|
||||
q := query.Cert
|
||||
|
||||
certModel, err := q.FirstByID(id)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
|
@ -152,6 +143,8 @@ func ModifyCert(c *gin.Context) {
|
|||
Name: json.Name,
|
||||
SSLCertificatePath: json.SSLCertificatePath,
|
||||
SSLCertificateKeyPath: json.SSLCertificateKeyPath,
|
||||
ChallengeMethod: json.ChallengeMethod,
|
||||
DnsCredentialID: json.DnsCredentialID,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
|
@ -159,33 +152,19 @@ func ModifyCert(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(json.SSLCertificatePath), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
content := &cert.Content{
|
||||
SSLCertificatePath: json.SSLCertificatePath,
|
||||
SSLCertificateKeyPath: json.SSLCertificateKeyPath,
|
||||
SSLCertificate: json.SSLCertificate,
|
||||
SSLCertificateKey: json.SSLCertificateKey,
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(json.SSLCertificateKeyPath), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
err = content.WriteFile()
|
||||
|
||||
if json.SSLCertificate != "" {
|
||||
err = os.WriteFile(json.SSLCertificatePath, []byte(json.SSLCertificate), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if json.SSLCertificateKeyPath != "" {
|
||||
err = os.WriteFile(json.SSLCertificateKeyPath, []byte(json.SSLCertificateKey), 0644)
|
||||
if err != nil {
|
||||
api.ErrHandler(c, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
GetCert(c)
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ type IssueCertResponse struct {
|
|||
SSLCertificateKey string `json:"ssl_certificate_key,omitempty"`
|
||||
}
|
||||
|
||||
func handleIssueCertLogChan(conn *websocket.Conn, logChan chan string) {
|
||||
func handleIssueCertLogChan(conn *websocket.Conn, log *cert.Logger, logChan chan string) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logger.Error(err)
|
||||
|
@ -33,6 +33,8 @@ func handleIssueCertLogChan(conn *websocket.Conn, logChan chan string) {
|
|||
|
||||
for logString := range logChan {
|
||||
|
||||
log.Info(logString)
|
||||
|
||||
err := conn.WriteJSON(IssueCertResponse{
|
||||
Status: Info,
|
||||
Message: logString,
|
||||
|
@ -42,7 +44,6 @@ func handleIssueCertLogChan(conn *websocket.Conn, logChan chan string) {
|
|||
logger.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,9 +66,9 @@ func IssueCert(c *gin.Context) {
|
|||
}(ws)
|
||||
|
||||
// read
|
||||
buffer := &cert.ConfigPayload{}
|
||||
payload := &cert.ConfigPayload{}
|
||||
|
||||
err = ws.ReadJSON(buffer)
|
||||
err = ws.ReadJSON(payload)
|
||||
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
@ -84,15 +85,20 @@ func IssueCert(c *gin.Context) {
|
|||
logChan := make(chan string, 1)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
go cert.IssueCert(buffer, logChan, errChan)
|
||||
log := &cert.Logger{}
|
||||
log.SetCertModel(&certModel)
|
||||
|
||||
go handleIssueCertLogChan(ws, logChan)
|
||||
go cert.IssueCert(payload, logChan, errChan)
|
||||
|
||||
go handleIssueCertLogChan(ws, log, logChan)
|
||||
|
||||
// block, until errChan closes
|
||||
for err = range errChan {
|
||||
errLog := &cert.AutoCertErrorLog{}
|
||||
errLog.SetCertModel(&certModel)
|
||||
errLog.Exit("issue cert", err)
|
||||
|
||||
log.Error(err)
|
||||
|
||||
// Save logs to db
|
||||
log.Exit()
|
||||
|
||||
err = ws.WriteJSON(IssueCertResponse{
|
||||
Status: Error,
|
||||
|
@ -107,12 +113,12 @@ func IssueCert(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
certDirName := strings.Join(buffer.ServerName, "_")
|
||||
certDirName := strings.Join(payload.ServerName, "_")
|
||||
sslCertificatePath := nginx.GetConfPath("ssl", certDirName, "fullchain.cer")
|
||||
sslCertificateKeyPath := nginx.GetConfPath("ssl", certDirName, "private.key")
|
||||
|
||||
err = certModel.Updates(&model.Cert{
|
||||
Domains: buffer.ServerName,
|
||||
Domains: payload.ServerName,
|
||||
SSLCertificatePath: sslCertificatePath,
|
||||
SSLCertificateKeyPath: sslCertificateKeyPath,
|
||||
})
|
||||
|
@ -126,7 +132,8 @@ func IssueCert(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
certModel.ClearLog()
|
||||
// Save logs to db
|
||||
log.Exit()
|
||||
|
||||
err = ws.WriteJSON(IssueCertResponse{
|
||||
Status: Success,
|
||||
|
|
|
@ -146,7 +146,7 @@ func GetDomain(c *gin.Context) {
|
|||
|
||||
c.Set("maybe_error", "")
|
||||
|
||||
certInfoMap := make(map[int]CertificateInfo)
|
||||
certInfoMap := make(map[int]*cert.Info)
|
||||
for serverIdx, server := range nginxConfig.Servers {
|
||||
for _, directive := range server.Directives {
|
||||
if directive.Directive == "ssl_certificate" {
|
||||
|
@ -158,12 +158,7 @@ func GetDomain(c *gin.Context) {
|
|||
break
|
||||
}
|
||||
|
||||
certInfoMap[serverIdx] = CertificateInfo{
|
||||
SubjectName: pubKey.Subject.CommonName,
|
||||
IssuerName: pubKey.Issuer.CommonName,
|
||||
NotAfter: pubKey.NotAfter,
|
||||
NotBefore: pubKey.NotBefore,
|
||||
}
|
||||
certInfoMap[serverIdx] = pubKey
|
||||
|
||||
break
|
||||
}
|
||||
|
|
|
@ -1,18 +1,12 @@
|
|||
package sites
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/internal/cert"
|
||||
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
||||
"github.com/sashabaranov/go-openai"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CertificateInfo struct {
|
||||
SubjectName string `json:"subject_name"`
|
||||
IssuerName string `json:"issuer_name"`
|
||||
NotAfter time.Time `json:"not_after"`
|
||||
NotBefore time.Time `json:"not_before"`
|
||||
}
|
||||
|
||||
type Site struct {
|
||||
ModifiedAt time.Time `json:"modified_at"`
|
||||
Advanced bool `json:"advanced"`
|
||||
|
@ -22,5 +16,5 @@ type Site struct {
|
|||
AutoCert bool `json:"auto_cert"`
|
||||
ChatGPTMessages []openai.ChatCompletionMessage `json:"chatgpt_messages,omitempty"`
|
||||
Tokenized *nginx.NgxConfig `json:"tokenized,omitempty"`
|
||||
CertInfo map[int]CertificateInfo `json:"cert_info,omitempty"`
|
||||
CertInfo map[int]*cert.Info `json:"cert_info,omitempty"`
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ export interface DNSProvider {
|
|||
}
|
||||
}
|
||||
export interface DnsChallenge extends DNSProvider {
|
||||
dns_credential_id: number
|
||||
dns_credential_id: number | null
|
||||
challenge_method: string
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ export interface Site {
|
|||
}
|
||||
|
||||
export interface AutoCertRequest {
|
||||
dns_credential_id: number
|
||||
dns_credential_id: number | null
|
||||
challenge_method: string
|
||||
domains: string[]
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@ export const msg = [
|
|||
$gettext('Generating private key for registering account'),
|
||||
$gettext('Preparing lego configurations'),
|
||||
$gettext('Creating client facilitates communication with the CA server'),
|
||||
$gettext('Using HTTP01 challenge provider'),
|
||||
$gettext('Using DNS01 challenge provider'),
|
||||
$gettext('Setting HTTP01 challenge provider'),
|
||||
$gettext('Setting DNS01 challenge provider'),
|
||||
$gettext('Setting environment variables'),
|
||||
$gettext('Cleaning environment variables'),
|
||||
$gettext('Registering user'),
|
||||
|
|
|
@ -9,15 +9,15 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "About"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -31,6 +31,12 @@ msgstr "Action"
|
|||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Add Certificate"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "Add Directive Below"
|
||||
|
@ -102,31 +108,23 @@ msgstr ""
|
|||
msgid "Author"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
msgid "Auto Cert Log"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "Auto-renewal disabled for %{name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "Auto-renewal enabled for %{name}"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -170,7 +168,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -186,22 +184,22 @@ msgstr "Certificate has expired"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
#, fuzzy
|
||||
msgid "Certificates"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
#, fuzzy
|
||||
msgid "Certificates List"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr ""
|
||||
|
||||
|
@ -242,11 +240,6 @@ msgstr ""
|
|||
msgid "Comments"
|
||||
msgstr "Comments"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
#, fuzzy
|
||||
msgid "Config Name"
|
||||
msgstr "Configuration Name"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Config Templates"
|
||||
|
@ -302,7 +295,7 @@ msgstr "Created at"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr ""
|
||||
|
||||
|
@ -387,11 +380,10 @@ msgstr "Directive"
|
|||
msgid "Disable"
|
||||
msgstr "Disabled"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "Disable auto-renewal failed for %{name}"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -406,16 +398,16 @@ msgstr "Disabled successfully"
|
|||
msgid "Disk IO"
|
||||
msgstr "Disk IO"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -426,7 +418,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
|
|||
msgstr[0] "Are you sure you want to remove this directive?"
|
||||
msgstr[1] "Are you sure you want to remove this directive?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -454,7 +446,7 @@ msgstr "Are you sure you want to remove this directive?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Domain Config Created Successfully"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -524,7 +516,7 @@ msgstr ""
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Enable auto-renewal failed for %{name}"
|
||||
|
||||
|
@ -541,7 +533,6 @@ msgstr "Enabled successfully"
|
|||
msgid "Enable TLS"
|
||||
msgstr "Enable TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -559,7 +550,7 @@ msgstr "Enabled successfully"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "Encrypt website with Let's Encrypt"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr ""
|
||||
|
||||
|
@ -572,7 +563,7 @@ msgstr "Comments"
|
|||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr ""
|
||||
|
||||
|
@ -580,6 +571,10 @@ msgstr ""
|
|||
msgid "Executable Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
#, fuzzy
|
||||
msgid "Expired At: %{date}"
|
||||
|
@ -655,7 +650,7 @@ msgstr ""
|
|||
msgid "Get release information error"
|
||||
msgstr "Base information"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "Getting the certificate, please wait..."
|
||||
|
||||
|
@ -695,7 +690,7 @@ msgstr ""
|
|||
msgid "HTTP Port"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -707,7 +702,7 @@ msgstr ""
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "Install"
|
||||
|
||||
|
@ -769,7 +764,12 @@ msgstr "Location"
|
|||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
#, fuzzy
|
||||
msgid "Log"
|
||||
msgstr "Login"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
|
@ -781,7 +781,7 @@ msgstr "Login successful"
|
|||
msgid "Logout successful"
|
||||
msgstr "Logout successful"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
|
@ -798,7 +798,7 @@ msgstr "Manage Configs"
|
|||
msgid "Manage Sites"
|
||||
msgstr "Manage Sites"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "Manage Users"
|
||||
|
||||
|
@ -813,11 +813,15 @@ msgstr "Memory and Storage"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
#, fuzzy
|
||||
msgid "Modify"
|
||||
msgstr "Modify Config"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "Modify Config"
|
||||
|
@ -827,7 +831,7 @@ msgstr "Modify Config"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "Single Directive"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -856,7 +860,7 @@ msgstr "Network Total Send"
|
|||
msgid "New version released"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "Next"
|
||||
|
@ -882,7 +886,7 @@ msgstr ""
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr ""
|
||||
|
||||
|
@ -908,7 +912,11 @@ msgstr "No"
|
|||
msgid "Node Secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "Not Found"
|
||||
|
||||
|
@ -917,11 +925,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "Not Valid Before: %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
#, fuzzy
|
||||
msgid "Obtain certificate"
|
||||
msgstr "Certificate is valid"
|
||||
|
@ -941,7 +949,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -1014,7 +1022,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
"select one of the credentialsbelow to request the API of the DNS provider."
|
||||
|
@ -1051,7 +1059,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1116,6 +1124,17 @@ msgstr ""
|
|||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
#, fuzzy
|
||||
msgid "Renew Certificate"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
#, fuzzy
|
||||
msgid "Renew successfully"
|
||||
msgstr "Enabled successfully"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr ""
|
||||
|
@ -1141,8 +1160,9 @@ msgstr "Advance Mode"
|
|||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1158,6 +1178,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "Save error %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
|
@ -1199,24 +1220,32 @@ msgstr "Server error"
|
|||
msgid "Server Info"
|
||||
msgstr "Server Info"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "server_name not found in directives"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "server_name parameter is required"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "Single Directive"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
#, fuzzy
|
||||
msgid "Site Logs"
|
||||
msgstr "Sites List"
|
||||
|
@ -1225,22 +1254,22 @@ msgstr "Sites List"
|
|||
msgid "Sites List"
|
||||
msgstr "Sites List"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "Certificate Status"
|
||||
|
@ -1255,7 +1284,8 @@ msgstr "Login"
|
|||
msgid "Stable"
|
||||
msgstr "Enabled"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
|
@ -1284,7 +1314,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1297,7 +1327,7 @@ msgstr "Enabled"
|
|||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "Terminal"
|
||||
|
||||
|
@ -1305,7 +1335,7 @@ msgstr "Terminal"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
|
@ -1318,7 +1348,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr "The filename cannot contain the following characters: %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
|
@ -1331,10 +1361,14 @@ msgstr ""
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
@ -1347,11 +1381,10 @@ msgid ""
|
|||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1365,7 +1398,7 @@ msgstr "Updated at"
|
|||
msgid "Updated successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr ""
|
||||
|
@ -1400,12 +1433,8 @@ msgstr "Username"
|
|||
msgid "Username (*)"
|
||||
msgstr "Username (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
|
@ -1413,7 +1442,7 @@ msgid "View"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
@ -1424,7 +1453,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1456,6 +1485,14 @@ msgstr ""
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "Certificate is valid"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "Configuration Name"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Certification"
|
||||
#~ msgstr "Certificate is valid"
|
||||
|
|
|
@ -14,15 +14,15 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.0\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "Acerca de"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr "Registros de acceso"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -36,6 +36,12 @@ msgstr "Acción"
|
|||
msgid "Add"
|
||||
msgstr "Agregar"
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Add Certificate"
|
||||
msgstr "Estado del Certificado"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "Añadir directiva a continuación"
|
||||
|
@ -103,33 +109,23 @@ msgstr "Asistente"
|
|||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr "Certificado automático"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
#, fuzzy
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr "Certificado automático"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
#, fuzzy
|
||||
msgid "Auto Cert Log"
|
||||
msgstr "Registro del Certificado automático"
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr "Actualización automática"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "Renovación automática deshabilitada por %{name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "Renovación automática habilitada por %{name}"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -170,7 +166,7 @@ msgstr "Directorio CA"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -186,22 +182,22 @@ msgstr "El certificado expiró"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "El certificado es válido"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "Estado del Certificado"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
#, fuzzy
|
||||
msgid "Certificates"
|
||||
msgstr "Estado del Certificado"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
#, fuzzy
|
||||
msgid "Certificates List"
|
||||
msgstr "Lista de Certificados"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr "Método de desafío"
|
||||
|
||||
|
@ -241,10 +237,6 @@ msgstr "Limpiar"
|
|||
msgid "Comments"
|
||||
msgstr "Comentarios"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
msgid "Config Name"
|
||||
msgstr "Nombre de la configuración"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
msgid "Config Templates"
|
||||
msgstr "Plantillas de configuración"
|
||||
|
@ -299,7 +291,7 @@ msgstr "Creado el"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "La creación de un cliente facilita la comunicación con el servidor CA"
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr "Credencial"
|
||||
|
||||
|
@ -383,11 +375,10 @@ msgstr "Directiva"
|
|||
msgid "Disable"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "No se pudo desactivar la renovación automática por %{name}"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -402,16 +393,16 @@ msgstr "Desactivado con éxito"
|
|||
msgid "Disk IO"
|
||||
msgstr "I/O del disco"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Credenciales de DNS"
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr "Proveedor DNS"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr "DNS01"
|
||||
|
||||
|
@ -421,7 +412,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
|
|||
msgstr[0] "¿Desea desplegar este archivo en un servidor remoto?"
|
||||
msgstr[1] "¿Desea desplegar este archivo en los servidores remotos?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr "¿Desea deshabilitar la renovación automática de certificado?"
|
||||
|
||||
|
@ -445,7 +436,7 @@ msgstr "¿Quieres eliminar este servidor?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Configuración de dominio creada con éxito"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
#, fuzzy
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr ""
|
||||
|
@ -514,7 +505,7 @@ msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "No se pudo activar la renovación automática por %{name}"
|
||||
|
||||
|
@ -530,7 +521,6 @@ msgstr "Habilitado con éxito"
|
|||
msgid "Enable TLS"
|
||||
msgstr "Habilitar TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -548,7 +538,7 @@ msgstr "Habilitado con éxito"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "Encriptar sitio web con Let's Encrypt"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr "Entorno"
|
||||
|
||||
|
@ -560,7 +550,7 @@ msgstr "Entornos"
|
|||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr "Registros de acceso"
|
||||
|
||||
|
@ -568,6 +558,10 @@ msgstr "Registros de acceso"
|
|||
msgid "Executable Path"
|
||||
msgstr "Ruta ejecutable"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
#, fuzzy
|
||||
msgid "Expired At: %{date}"
|
||||
|
@ -641,7 +635,7 @@ msgstr "Generando clave privada para registrar cuenta"
|
|||
msgid "Get release information error"
|
||||
msgstr "Obtener error de información de versión"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "Obteniendo el certificado, por favor espere..."
|
||||
|
||||
|
@ -682,7 +676,7 @@ msgstr "Host HTTP"
|
|||
msgid "HTTP Port"
|
||||
msgstr "Puerto HTTP"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr "HTTP01"
|
||||
|
||||
|
@ -694,7 +688,7 @@ msgstr "Error de actualización de kernel inicial"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Inicializando la actualización del kernel"
|
||||
|
||||
#: src/routes/index.ts:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "Instalar"
|
||||
|
||||
|
@ -753,7 +747,12 @@ msgstr "Ubicación"
|
|||
msgid "Locations"
|
||||
msgstr "Ubicaciones"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
#, fuzzy
|
||||
msgid "Log"
|
||||
msgstr "Acceso"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "Acceso"
|
||||
|
||||
|
@ -765,7 +764,7 @@ msgstr "Acceso exitoso"
|
|||
msgid "Logout successful"
|
||||
msgstr "Cierre de sesión exitoso"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
"HTTPChallengePort before obtaining the certificate."
|
||||
|
@ -781,7 +780,7 @@ msgstr "Administrar configuraciones"
|
|||
msgid "Manage Sites"
|
||||
msgstr "Administrar sitios"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "Administrar usuarios"
|
||||
|
||||
|
@ -796,10 +795,14 @@ msgstr "Memoria y almacenamiento"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
msgid "Modify"
|
||||
msgstr "Modificar"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Estado del Certificado"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "Modificar configuración"
|
||||
|
@ -808,7 +811,7 @@ msgstr "Modificar configuración"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "Directiva multilínea"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -837,7 +840,7 @@ msgstr "Total enviado por la red"
|
|||
msgid "New version released"
|
||||
msgstr "Se liberó una nueva versión"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "Siguiente"
|
||||
|
@ -862,7 +865,7 @@ msgstr "Control de Nginx"
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr "Ruta de registro de errores de Nginx"
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr "Registro Nginx"
|
||||
|
||||
|
@ -886,7 +889,11 @@ msgstr "No"
|
|||
msgid "Node Secret"
|
||||
msgstr "Secreto del nodo"
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "No encontrado"
|
||||
|
||||
|
@ -895,11 +902,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "No válido antes: %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
msgid "Obtain certificate"
|
||||
msgstr "Obtener certificado"
|
||||
|
||||
|
@ -918,7 +925,7 @@ msgstr "Desconectado"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -990,7 +997,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
|
@ -1033,7 +1040,7 @@ msgstr "¡Seleccione al menos un nodo!"
|
|||
msgid "Pre-release"
|
||||
msgstr "Prelanzamiento"
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr "Configuración"
|
||||
|
||||
|
@ -1096,6 +1103,17 @@ msgstr "Recargando"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Recargando Nginx"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
#, fuzzy
|
||||
msgid "Renew Certificate"
|
||||
msgstr "Cambiar Certificado"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
#, fuzzy
|
||||
msgid "Renew successfully"
|
||||
msgstr "Habilitado con éxito"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr "Pedido con parámetros incorrectos"
|
||||
|
@ -1120,8 +1138,9 @@ msgstr "Modo de ejecución"
|
|||
msgid "Running"
|
||||
msgstr "Corriendo"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1137,6 +1156,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "Error al guardar %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
msgid "Save successfully"
|
||||
msgstr "Guardado con éxito"
|
||||
|
@ -1176,24 +1196,34 @@ msgstr "Error del servidor"
|
|||
msgid "Server Info"
|
||||
msgstr "Información del servidor"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "No se encuentra server_name en las directivas"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "Se requiere el parámetro server_name"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
#, fuzzy
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr "Usando el proveedor de desafíos DNS01"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr "Configuración de variables de entorno"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
#, fuzzy
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr "Usando el proveedor de desafíos HTTP01"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "Directiva de una sola línea"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
msgid "Site Logs"
|
||||
msgstr "Registros del sitio"
|
||||
|
||||
|
@ -1201,21 +1231,21 @@ msgstr "Registros del sitio"
|
|||
msgid "Sites List"
|
||||
msgstr "Lista de sitios"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "Contenido de certificado SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "Contenido de la llave del certificado SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "Ruta de la llave del certificado SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "Ruta del certificado SSL"
|
||||
|
||||
|
@ -1228,7 +1258,8 @@ msgstr "Acceso"
|
|||
msgid "Stable"
|
||||
msgstr "Estable"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
|
@ -1257,7 +1288,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
|
@ -1269,7 +1300,7 @@ msgstr "Tabla"
|
|||
msgid "Target"
|
||||
msgstr "Objetivo"
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "Terminal"
|
||||
|
||||
|
@ -1277,7 +1308,7 @@ msgstr "Terminal"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr "Comando de inicio de terminal"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
|
@ -1291,7 +1322,7 @@ msgid "The filename cannot contain the following characters: %{c}"
|
|||
msgstr ""
|
||||
"El nombre del archivo no puede contener los siguientes caracteres: %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
|
@ -1304,11 +1335,15 @@ msgstr ""
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr "El nombre de usuario o contraseña son incorrectos"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
#, fuzzy
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr "Este elemento de auto-cert es inválido, elimínelo por favor."
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr "Este campo no debe estar vacío"
|
||||
|
@ -1325,11 +1360,10 @@ 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/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1342,7 +1376,7 @@ msgstr "Actualizado a"
|
|||
msgid "Updated successfully"
|
||||
msgstr "Actualización exitosa"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr "Actualizar"
|
||||
|
@ -1375,20 +1409,16 @@ msgstr "Nombre de usuario"
|
|||
msgid "Username (*)"
|
||||
msgstr "Nombre de usuario (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr "Usando el proveedor de desafíos DNS01"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr "Usando el proveedor de desafíos HTTP01"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
msgid "View"
|
||||
msgstr "Ver"
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "Advertencia"
|
||||
|
@ -1399,7 +1429,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1433,6 +1463,21 @@ msgstr "Estás usando la última versión"
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr "Puede consultar la actualización de Nginx UI en esta página."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "Obtener certificado"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert is enabled"
|
||||
#~ msgstr "Certificado automático"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert Log"
|
||||
#~ msgstr "Registro del Certificado automático"
|
||||
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "Nombre de la configuración"
|
||||
|
||||
#~ msgid "Auto cert is enabled, please do not modify this certification."
|
||||
#~ msgstr ""
|
||||
#~ "Está habilitado el Certificado automático, por favor no modifique esta "
|
||||
|
|
|
@ -11,15 +11,15 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.3\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "À propos"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr "Journaux d'accès"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -33,6 +33,12 @@ msgstr "Action"
|
|||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Add Certificate"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "Ajouter une directive"
|
||||
|
@ -103,33 +109,23 @@ msgstr ""
|
|||
msgid "Author"
|
||||
msgstr "Autheur"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr "Auto Cert"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
#, fuzzy
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr "Auto Cert"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
#, fuzzy
|
||||
msgid "Auto Cert Log"
|
||||
msgstr "Journal Auto-Cert"
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr "Actualisation automatique"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "Renouvellement automatique désactivé pour %{name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "Renouvellement automatique activé pour %{name}"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -171,7 +167,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -187,22 +183,22 @@ msgstr "Le certificat a expiré"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "Le certificat est valide"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
#, fuzzy
|
||||
msgid "Certificates"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
#, fuzzy
|
||||
msgid "Certificates List"
|
||||
msgstr "Liste des certifications"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr "Méthode de challenge"
|
||||
|
||||
|
@ -242,10 +238,6 @@ msgstr "Effacer"
|
|||
msgid "Comments"
|
||||
msgstr "Commentaires"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
msgid "Config Name"
|
||||
msgstr "Nom de la config"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
msgid "Config Templates"
|
||||
msgstr "Modèles de configuration"
|
||||
|
@ -300,7 +292,7 @@ msgstr "Créé le"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "La création du client facilite la communication avec le serveur CA"
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr "Identifiant"
|
||||
|
||||
|
@ -385,11 +377,10 @@ msgstr "Directive"
|
|||
msgid "Disable"
|
||||
msgstr "Désactivé"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -404,16 +395,16 @@ msgstr "Désactivé avec succès"
|
|||
msgid "Disk IO"
|
||||
msgstr "E/S disque"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr "Identifiants DNS"
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr "Fournisseur DNS"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr "DNS01"
|
||||
|
||||
|
@ -424,7 +415,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
|
|||
msgstr[0] "Voulez-vous supprimer ce serveur ?"
|
||||
msgstr[1] "Voulez-vous supprimer ce serveur ?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr "Voulez-vous désactiver le renouvellement automatique des certificats ?"
|
||||
|
||||
|
@ -448,7 +439,7 @@ msgstr "Voulez-vous supprimer ce serveur ?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "La configuration du domaine a été créée avec succès"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
#, fuzzy
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr ""
|
||||
|
@ -521,7 +512,7 @@ msgstr ""
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Échec de l'activation du renouvellement automatique pour %{name}"
|
||||
|
||||
|
@ -538,7 +529,6 @@ msgstr "Activé avec succès"
|
|||
msgid "Enable TLS"
|
||||
msgstr "Activer TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -556,7 +546,7 @@ msgstr "Activé avec succès"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "Crypter le site Web avec Let's Encrypt"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr ""
|
||||
|
||||
|
@ -569,7 +559,7 @@ msgstr "Commentaires"
|
|||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr "Journaux d'erreurs"
|
||||
|
||||
|
@ -577,6 +567,10 @@ msgstr "Journaux d'erreurs"
|
|||
msgid "Executable Path"
|
||||
msgstr "Chemin exécutable"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
#, fuzzy
|
||||
msgid "Expired At: %{date}"
|
||||
|
@ -651,7 +645,7 @@ msgstr "Génération de clé privée pour l'enregistrement du compte"
|
|||
msgid "Get release information error"
|
||||
msgstr "Erreur d'obtention des informations sur la version"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "Obtention du certificat, veuillez patienter..."
|
||||
|
||||
|
@ -692,7 +686,7 @@ msgstr "Host HTTP"
|
|||
msgid "HTTP Port"
|
||||
msgstr "Port HTTP"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr "HTTP01"
|
||||
|
||||
|
@ -704,7 +698,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:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "Installer"
|
||||
|
||||
|
@ -766,7 +760,12 @@ msgstr "Localisation"
|
|||
msgid "Locations"
|
||||
msgstr "Localisations"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
#, fuzzy
|
||||
msgid "Log"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "Connexion"
|
||||
|
||||
|
@ -778,7 +777,7 @@ msgstr "Connexion réussie"
|
|||
msgid "Logout successful"
|
||||
msgstr "Déconnexion réussie"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
|
@ -795,7 +794,7 @@ msgstr "Gérer les configurations"
|
|||
msgid "Manage Sites"
|
||||
msgstr "Gérer les sites"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "Gérer les utilisateurs"
|
||||
|
||||
|
@ -810,10 +809,14 @@ msgstr "Mémoire et stockage"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
msgid "Modify"
|
||||
msgstr "Modifier"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Modify Certificate"
|
||||
msgstr "État du certificat"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "Modifier la configuration"
|
||||
|
@ -822,7 +825,7 @@ msgstr "Modifier la configuration"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "Directive multiligne"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -851,7 +854,7 @@ msgstr "Envoi total réseau"
|
|||
msgid "New version released"
|
||||
msgstr "Nouvelle version publiée"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
@ -877,7 +880,7 @@ msgstr "Contrôle Nginx"
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr "Chemin du journal des erreurs Nginx"
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr "Journal Nginx"
|
||||
|
||||
|
@ -902,7 +905,11 @@ msgstr "Non"
|
|||
msgid "Node Secret"
|
||||
msgstr "Secret Jwt"
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "Introuvable"
|
||||
|
||||
|
@ -911,11 +918,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "Non valide avant : %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
msgid "Obtain certificate"
|
||||
msgstr "Obtenir un certificat"
|
||||
|
||||
|
@ -934,7 +941,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -1006,7 +1013,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
|
@ -1050,7 +1057,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr "Préférence"
|
||||
|
||||
|
@ -1116,6 +1123,17 @@ msgstr "Rechargement"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Rechargement de nginx"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
#, fuzzy
|
||||
msgid "Renew Certificate"
|
||||
msgstr "Changer de certificat"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
#, fuzzy
|
||||
msgid "Renew successfully"
|
||||
msgstr "Activé avec succès"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr ""
|
||||
|
@ -1140,8 +1158,9 @@ msgstr "Mode d'exécution"
|
|||
msgid "Running"
|
||||
msgstr "En cours d'éxécution"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1157,6 +1176,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "Enregistrer l'erreur %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
msgid "Save successfully"
|
||||
msgstr "Sauvegarde réussie"
|
||||
|
@ -1196,24 +1216,34 @@ msgstr "Erreur du serveur"
|
|||
msgid "Server Info"
|
||||
msgstr "Informations sur le serveur"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "server_name introuvable dans les directives"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "Le paramètre server_name est obligatoire"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
#, fuzzy
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr "Utilisation du fournisseur de challenge DNS01"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr "Définition des variables d'environnement"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
#, fuzzy
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr "Utilisation du fournisseur de challenge HTTP01"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "Directive unique"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
msgid "Site Logs"
|
||||
msgstr "Journaux du site"
|
||||
|
||||
|
@ -1221,21 +1251,21 @@ msgstr "Journaux du site"
|
|||
msgid "Sites List"
|
||||
msgstr "Liste des sites"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "Contenu de la certification SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "Contenu de la clé de certification SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "Chemin de la clé du certificat SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "Chemin du certificat SSL"
|
||||
|
||||
|
@ -1249,7 +1279,8 @@ msgstr "Connexion"
|
|||
msgid "Stable"
|
||||
msgstr "Tableau"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "Statut"
|
||||
|
||||
|
@ -1279,7 +1310,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
|
@ -1291,7 +1322,7 @@ msgstr "Tableau"
|
|||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "Terminal"
|
||||
|
||||
|
@ -1299,7 +1330,7 @@ msgstr "Terminal"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr "Commande de démarrage du terminal"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
|
@ -1312,7 +1343,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
|
@ -1326,13 +1357,17 @@ msgstr ""
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr "Le pseudo ou mot de passe est incorect"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
#, fuzzy
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr ""
|
||||
"Cet élément de certification automatique n'est pas valide, veuillez le "
|
||||
"supprimer."
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
@ -1349,11 +1384,10 @@ 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/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1366,7 +1400,7 @@ msgstr "Mis à jour le"
|
|||
msgid "Updated successfully"
|
||||
msgstr "Mis à jour avec succés"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr "Mettre à niveau"
|
||||
|
@ -1400,20 +1434,16 @@ msgstr "Nom d'utilisateur"
|
|||
msgid "Username (*)"
|
||||
msgstr "Nom d'utilisateur (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr "Utilisation du fournisseur de challenge DNS01"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr "Utilisation du fournisseur de challenge HTTP01"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
msgid "View"
|
||||
msgstr "Voir"
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
@ -1424,7 +1454,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1458,6 +1488,21 @@ msgstr "Vous utilisez la dernière version"
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr "Vous pouvez vérifier la mise à niveau de Nginx UI sur cette page."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "Obtenir un certificat"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert is enabled"
|
||||
#~ msgstr "Auto Cert"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert Log"
|
||||
#~ msgstr "Journal Auto-Cert"
|
||||
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "Nom de la config"
|
||||
|
||||
#~ msgid "Auto cert is enabled, please do not modify this certification."
|
||||
#~ msgstr ""
|
||||
#~ "La certification automatique est activée, veuillez ne pas modifier cette "
|
||||
|
|
|
@ -2,16 +2,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:134
|
||||
#: src/routes/index.ts:151
|
||||
#: src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32
|
||||
#: src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50
|
||||
|
@ -27,6 +27,12 @@ msgstr ""
|
|||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:122
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
msgid "Add Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr ""
|
||||
|
@ -95,31 +101,23 @@ msgstr ""
|
|||
msgid "Author"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
msgid "Auto Cert Log"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75
|
||||
#: src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261
|
||||
|
@ -162,7 +160,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -178,22 +176,21 @@ msgstr ""
|
|||
msgid "Certificate is valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:100
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/Certificate.vue:109
|
||||
msgid "Certificates"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
msgid "Certificates List"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr ""
|
||||
|
||||
|
@ -233,10 +230,6 @@ msgstr ""
|
|||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
msgid "Config Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
msgid "Config Templates"
|
||||
msgstr ""
|
||||
|
@ -291,7 +284,7 @@ msgstr ""
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr ""
|
||||
|
||||
|
@ -372,11 +365,10 @@ msgstr ""
|
|||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48
|
||||
#: src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
|
@ -392,17 +384,17 @@ msgstr ""
|
|||
msgid "Disk IO"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:113
|
||||
#: src/routes/index.ts:130
|
||||
#: src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -412,7 +404,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
|
|||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -436,7 +428,7 @@ msgstr ""
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -502,7 +494,7 @@ msgstr ""
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -518,7 +510,6 @@ msgstr ""
|
|||
msgid "Enable TLS"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -538,7 +529,7 @@ msgstr ""
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:151
|
||||
#: src/routes/index.ts:168
|
||||
#: src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr ""
|
||||
|
@ -551,7 +542,7 @@ msgstr ""
|
|||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:138
|
||||
#: src/routes/index.ts:155
|
||||
#: src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr ""
|
||||
|
@ -560,6 +551,10 @@ msgstr ""
|
|||
msgid "Executable Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
msgid "Expired At: %{date}"
|
||||
msgstr ""
|
||||
|
@ -632,7 +627,7 @@ msgstr ""
|
|||
msgid "Get release information error"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr ""
|
||||
|
||||
|
@ -672,7 +667,7 @@ msgstr ""
|
|||
msgid "HTTP Port"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -684,7 +679,7 @@ msgstr ""
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:194
|
||||
#: src/routes/index.ts:211
|
||||
#: src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
|
@ -742,7 +737,11 @@ msgstr ""
|
|||
msgid "Locations"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:200
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:217
|
||||
#: src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
@ -756,7 +755,7 @@ msgstr ""
|
|||
msgid "Logout successful"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort before obtaining the certificate."
|
||||
msgstr ""
|
||||
|
||||
|
@ -769,7 +768,7 @@ msgstr ""
|
|||
msgid "Manage Sites"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:159
|
||||
#: src/routes/index.ts:176
|
||||
#: src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr ""
|
||||
|
@ -785,10 +784,14 @@ msgstr ""
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:114
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
msgid "Modify Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr ""
|
||||
|
@ -797,7 +800,7 @@ msgstr ""
|
|||
msgid "Multi-line Directive"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13
|
||||
#: src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
|
@ -828,7 +831,7 @@ msgstr ""
|
|||
msgid "New version released"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
@ -853,7 +856,7 @@ msgstr ""
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:128
|
||||
#: src/routes/index.ts:145
|
||||
#: src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr ""
|
||||
|
@ -878,8 +881,12 @@ msgstr ""
|
|||
msgid "Node Secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:206
|
||||
#: src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223
|
||||
#: src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr ""
|
||||
|
||||
|
@ -888,11 +895,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
msgid "Obtain certificate"
|
||||
msgstr ""
|
||||
|
||||
|
@ -911,7 +918,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -982,7 +989,7 @@ msgstr ""
|
|||
msgid "Please fill in the API authentication credentials provided by your DNS provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
msgid "Please first add credentials in Certification > DNS Credentials, and then select one of the credentialsbelow to request the API of the DNS provider."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1017,7 +1024,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:167
|
||||
#: src/routes/index.ts:184
|
||||
#: src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr ""
|
||||
|
@ -1081,6 +1088,15 @@ msgstr ""
|
|||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
msgid "Renew Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
msgid "Renew successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr ""
|
||||
|
@ -1106,6 +1122,7 @@ msgid "Running"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
|
@ -1124,6 +1141,7 @@ msgid "Save error %{msg}"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
msgid "Save successfully"
|
||||
msgstr ""
|
||||
|
@ -1166,24 +1184,32 @@ msgstr ""
|
|||
msgid "Server Info"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
msgid "Site Logs"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1191,19 +1217,19 @@ msgstr ""
|
|||
msgid "Sites List"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1216,6 +1242,7 @@ msgstr ""
|
|||
msgid "Stable"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:71
|
||||
#: src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
|
@ -1245,7 +1272,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1257,7 +1284,7 @@ msgstr ""
|
|||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:120
|
||||
#: src/routes/index.ts:137
|
||||
#: src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr ""
|
||||
|
@ -1266,7 +1293,7 @@ msgstr ""
|
|||
msgid "Terminal Start Command"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
msgid "The certificate for the domain will be checked 5 minutes, and will be renewed if it has been more than 1 week since it was last issued."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1274,7 +1301,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
msgid "The server_name in the current configuration must be the domain name you need to get the certificate, supportmultiple domains."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1282,10 +1309,14 @@ msgstr ""
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
@ -1294,11 +1325,11 @@ 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/certificate/Certificate.vue:39
|
||||
#: src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26
|
||||
#: src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
|
@ -1313,7 +1344,7 @@ msgstr ""
|
|||
msgid "Updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:186
|
||||
#: src/routes/index.ts:203
|
||||
#: src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
|
@ -1348,12 +1379,8 @@ msgstr ""
|
|||
msgid "Username (*)"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
|
@ -1361,7 +1388,7 @@ msgid "View"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
@ -1370,7 +1397,7 @@ msgstr ""
|
|||
msgid "We will add one or more TXT records to the DNS records of your domain for ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -9,15 +9,15 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "О проекте"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr "Журнал доступа"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -31,6 +31,12 @@ msgstr "Действие"
|
|||
msgid "Add"
|
||||
msgstr "Добавить"
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Add Certificate"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "Добавить директиву ниже"
|
||||
|
@ -102,33 +108,23 @@ msgstr ""
|
|||
msgid "Author"
|
||||
msgstr "Автор"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr "Авто Сертификат"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
#, fuzzy
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr "Авто Сертификат"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
#, fuzzy
|
||||
msgid "Auto Cert Log"
|
||||
msgstr "Логирование авто-сертификата"
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr "Автообновление"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "Автообновление отключено для %{name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "Автообновление включено для %{name}"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -172,7 +168,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -188,22 +184,22 @@ msgstr "Срок действия сертификата истек"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "Сертификат действителен"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
#, fuzzy
|
||||
msgid "Certificates"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
#, fuzzy
|
||||
msgid "Certificates List"
|
||||
msgstr "Список"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr "Метод Challenge"
|
||||
|
||||
|
@ -244,11 +240,6 @@ msgstr "Очистить"
|
|||
msgid "Comments"
|
||||
msgstr "Комментарии"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
#, fuzzy
|
||||
msgid "Config Name"
|
||||
msgstr "Название конфигурации"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
#, fuzzy
|
||||
msgid "Config Templates"
|
||||
|
@ -304,7 +295,7 @@ msgstr "Создан в"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr "Учетные данные"
|
||||
|
||||
|
@ -389,11 +380,10 @@ msgstr "Деректива"
|
|||
msgid "Disable"
|
||||
msgstr "Отключить"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "Не удалось отключить автоматическое продление для %{name}"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -408,16 +398,16 @@ msgstr "Отключено успешно"
|
|||
msgid "Disk IO"
|
||||
msgstr "Нагрузка на Диск IO"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -428,7 +418,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
|
|||
msgstr[0] "Are you sure you want to remove this directive?"
|
||||
msgstr[1] "Are you sure you want to remove this directive?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr "Вы хотите отключить автоматическое обновление сертификата?"
|
||||
|
||||
|
@ -456,7 +446,7 @@ msgstr "Вы хотите удалить этот сервер?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "Конфигурация домена успешно создана"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
#, fuzzy
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr ""
|
||||
|
@ -528,7 +518,7 @@ msgstr "Включение %{conf_name} in %{node_name} нипалучилася
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "Включение %{conf_name} in %{node_name} успешно"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "Не удалось включить автоматическое продление для %{name}"
|
||||
|
||||
|
@ -545,7 +535,6 @@ msgstr "Активировано успешно"
|
|||
msgid "Enable TLS"
|
||||
msgstr "Включить TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -563,7 +552,7 @@ msgstr "Активировано успешно"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "Использовать для сайта Let's Encrypt"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr "Окружение"
|
||||
|
||||
|
@ -576,7 +565,7 @@ msgstr "Комментарии"
|
|||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr "Ошибка логирования"
|
||||
|
||||
|
@ -584,6 +573,10 @@ msgstr "Ошибка логирования"
|
|||
msgid "Executable Path"
|
||||
msgstr "Исполняемый путь"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
#, fuzzy
|
||||
msgid "Expired At: %{date}"
|
||||
|
@ -659,7 +652,7 @@ msgstr "Генерация приватного ключа для регистр
|
|||
msgid "Get release information error"
|
||||
msgstr "Ошибка получения информации о релизе"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "Получение сертификата, пожалуйста, подождите..."
|
||||
|
||||
|
@ -699,7 +692,7 @@ msgstr "Хостинг HTTP"
|
|||
msgid "HTTP Port"
|
||||
msgstr "Порт HTTP"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr ""
|
||||
|
||||
|
@ -711,7 +704,7 @@ msgstr "Ошибка первоначального обновления ядр
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "Инициализация программы обновления ядра"
|
||||
|
||||
#: src/routes/index.ts:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "Установить"
|
||||
|
||||
|
@ -773,7 +766,12 @@ msgstr "Location"
|
|||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
#, fuzzy
|
||||
msgid "Log"
|
||||
msgstr "Логин"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "Логин"
|
||||
|
||||
|
@ -785,7 +783,7 @@ msgstr "Авторизация успешна"
|
|||
msgid "Logout successful"
|
||||
msgstr "Выход выполнен успешно"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
|
@ -802,7 +800,7 @@ msgstr "Конфигурации"
|
|||
msgid "Manage Sites"
|
||||
msgstr "Сайты"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "Пользователи"
|
||||
|
||||
|
@ -817,11 +815,15 @@ msgstr "Память и хранилище"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
#, fuzzy
|
||||
msgid "Modify"
|
||||
msgstr "Изменить"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Статус сертификата"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "Изменить конфигурацию"
|
||||
|
@ -831,7 +833,7 @@ msgstr "Изменить конфигурацию"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "Одиночная директива"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -860,7 +862,7 @@ msgstr "Всего отправлено"
|
|||
msgid "New version released"
|
||||
msgstr "Вышла новая версия"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "Дальше"
|
||||
|
@ -887,7 +889,7 @@ msgstr "Управление Nginx"
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr "Путь для Nginx Error Log"
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr "Журнал"
|
||||
|
||||
|
@ -913,7 +915,11 @@ msgstr "Нет"
|
|||
msgid "Node Secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "Не найден"
|
||||
|
||||
|
@ -922,11 +928,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "Недействительно до: %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr "Заметка"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
#, fuzzy
|
||||
msgid "Obtain certificate"
|
||||
msgstr "Получить сертификат"
|
||||
|
@ -946,7 +952,7 @@ msgstr ""
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -1019,7 +1025,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
"select one of the credentialsbelow to request the API of the DNS provider."
|
||||
|
@ -1058,7 +1064,7 @@ msgstr ""
|
|||
msgid "Pre-release"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr "Настройки"
|
||||
|
||||
|
@ -1123,6 +1129,17 @@ msgstr "Перезагружается"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "Перезагружается nginx"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
#, fuzzy
|
||||
msgid "Renew Certificate"
|
||||
msgstr "Сертификат действителен"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
#, fuzzy
|
||||
msgid "Renew successfully"
|
||||
msgstr "Активировано успешно"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr "Запрос с неправильными параметрами"
|
||||
|
@ -1148,8 +1165,9 @@ msgstr "Расширенный режим"
|
|||
msgid "Running"
|
||||
msgstr "Выполняется"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1165,6 +1183,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "Ошибка сохранения %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
#, fuzzy
|
||||
msgid "Save successfully"
|
||||
|
@ -1206,24 +1225,32 @@ msgstr "Ошибка сервера"
|
|||
msgid "Server Info"
|
||||
msgstr "Информация о сервере"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "server_name не нашел в директивах"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "server_name параметр обязателен"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr "Настройка переменных сред"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "Одиночная Директива"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
#, fuzzy
|
||||
msgid "Site Logs"
|
||||
msgstr "Логи сайтов"
|
||||
|
@ -1232,22 +1259,22 @@ msgstr "Логи сайтов"
|
|||
msgid "Sites List"
|
||||
msgstr "Список сайтов"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "Содержание сертификата SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "Содержание ключа сертификата SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "Путь к ключу сертификата SSL"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "Путь к сертификату SSL"
|
||||
|
@ -1262,7 +1289,8 @@ msgstr "Логин"
|
|||
msgid "Stable"
|
||||
msgstr "Таблица"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
|
@ -1291,7 +1319,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr "Система"
|
||||
|
||||
|
@ -1304,7 +1332,7 @@ msgstr "Таблица"
|
|||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "Терминал"
|
||||
|
||||
|
@ -1312,7 +1340,7 @@ msgstr "Терминал"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr "Терминальная команда запуска"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
|
@ -1325,7 +1353,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr "The filename cannot contain the following characters: %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
|
@ -1338,11 +1366,15 @@ msgstr ""
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr "Имя пользователя или пароль неверны"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
#, fuzzy
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr "Этот элемент автосертификата недействителен, удалите его.."
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr ""
|
||||
|
@ -1355,11 +1387,10 @@ msgid ""
|
|||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr "Тип"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1373,7 +1404,7 @@ msgstr "Обновлено в"
|
|||
msgid "Updated successfully"
|
||||
msgstr "Обновлено успешно"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr "Обновление"
|
||||
|
@ -1408,12 +1439,8 @@ msgstr "Имя пользователя"
|
|||
msgid "Username (*)"
|
||||
msgstr "Имя пользователя (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
|
@ -1421,7 +1448,7 @@ msgid "View"
|
|||
msgstr "Просмотр"
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "Внимание"
|
||||
|
@ -1432,7 +1459,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1464,6 +1491,22 @@ msgstr "Вы используете последнюю версию"
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr "Вы можете проверить обновление Nginx UI на этой странице."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "Получить сертификат"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert is enabled"
|
||||
#~ msgstr "Авто Сертификат"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert Log"
|
||||
#~ msgstr "Логирование авто-сертификата"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "Название конфигурации"
|
||||
|
||||
#~ msgid "Auto cert is enabled, please do not modify this certification."
|
||||
#~ msgstr "Включено автомотическое получения сертификата. Не правте руками."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -13,15 +13,15 @@ msgstr ""
|
|||
"Generated-By: easygettext\n"
|
||||
"X-Generator: Poedit 3.4.1\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "关于"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr "访问日志"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -35,6 +35,11 @@ msgstr "操作"
|
|||
msgid "Add"
|
||||
msgstr "添加"
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
msgid "Add Certificate"
|
||||
msgstr "添加证书"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "在下面添加指令"
|
||||
|
@ -102,31 +107,23 @@ msgstr "助手"
|
|||
msgid "Author"
|
||||
msgstr "作者"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr "自动更新"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr "自动更新已启用"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
msgid "Auto Cert Log"
|
||||
msgstr "证书自动续期日志"
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr "自动刷新"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "成功关闭 %{name} 自动续签"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "成功启用 %{name} 自动续签"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -167,7 +164,7 @@ msgstr "CADir"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -183,20 +180,20 @@ msgstr "此证书已过期"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "此证书有效"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "证书状态"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
msgid "Certificates"
|
||||
msgstr "证书"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
msgid "Certificates List"
|
||||
msgstr "证书列表"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr "挑战方法"
|
||||
|
||||
|
@ -236,10 +233,6 @@ msgstr "清空"
|
|||
msgid "Comments"
|
||||
msgstr "注释"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
msgid "Config Name"
|
||||
msgstr "配置文件名称"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
msgid "Config Templates"
|
||||
msgstr "配置"
|
||||
|
@ -294,7 +287,7 @@ msgstr "创建时间"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "正在创建客户端用于与 CA 服务器通信"
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr "DNS 凭证"
|
||||
|
||||
|
@ -375,11 +368,10 @@ msgstr "目录"
|
|||
msgid "Disable"
|
||||
msgstr "禁用"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "关闭 %{name} 自动续签失败"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -394,16 +386,16 @@ msgstr "禁用成功"
|
|||
msgid "Disk IO"
|
||||
msgstr "磁盘 IO"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 凭证"
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS供应商"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr "DNS01"
|
||||
|
||||
|
@ -412,7 +404,7 @@ msgid "Do you want to deploy this file to remote server?"
|
|||
msgid_plural "Do you want to deploy this file to remote servers?"
|
||||
msgstr[0] "你想把这个文件部署到远程服务器上吗?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr "你想禁用自动更新证书吗?"
|
||||
|
||||
|
@ -436,7 +428,7 @@ msgstr "你想删除这个服务器吗?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "域名配置文件创建成功"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr "域名列表为空,请尝试为 %{config} 重新打开证书自动续期。"
|
||||
|
||||
|
@ -501,7 +493,7 @@ msgstr "在%{node_name}中启用%{conf_name}失败"
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "成功启用%{node_name}中的%{conf_name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "启用 %{name} 自动续签失败"
|
||||
|
||||
|
@ -517,7 +509,6 @@ msgstr "启用成功"
|
|||
msgid "Enable TLS"
|
||||
msgstr "启用 TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -535,7 +526,7 @@ msgstr "启用成功"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "用 Let's Encrypt 对网站进行加密"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr "环境"
|
||||
|
||||
|
@ -547,7 +538,7 @@ msgstr "环境"
|
|||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr "错误日志"
|
||||
|
||||
|
@ -555,6 +546,10 @@ msgstr "错误日志"
|
|||
msgid "Executable Path"
|
||||
msgstr "可执行文件路径"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr "已过期"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
msgid "Expired At: %{date}"
|
||||
msgstr "过期时间: %{date}"
|
||||
|
@ -626,7 +621,7 @@ msgstr "正在生成私钥用于注册账户"
|
|||
msgid "Get release information error"
|
||||
msgstr "获取发布信息错误"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "正在获取证书,请稍等..."
|
||||
|
||||
|
@ -666,7 +661,7 @@ msgstr "HTTP 监听主机"
|
|||
msgid "HTTP Port"
|
||||
msgstr "HTTP 监听端口"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr "HTTP01"
|
||||
|
||||
|
@ -678,7 +673,7 @@ msgstr "初始化核心升级程序错误"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "初始化核心升级器"
|
||||
|
||||
#: src/routes/index.ts:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "安装"
|
||||
|
||||
|
@ -735,7 +730,11 @@ msgstr "Location"
|
|||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
|
@ -747,7 +746,7 @@ msgstr "登录成功"
|
|||
msgid "Logout successful"
|
||||
msgstr "登出成功"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
"HTTPChallengePort before obtaining the certificate."
|
||||
|
@ -763,7 +762,7 @@ msgstr "配置管理"
|
|||
msgid "Manage Sites"
|
||||
msgstr "网站管理"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "用户管理"
|
||||
|
||||
|
@ -778,10 +777,13 @@ msgstr "内存与存储"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
msgid "Modify"
|
||||
msgstr "修改"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
msgid "Modify Certificate"
|
||||
msgstr "修改证书"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "修改配置文件"
|
||||
|
@ -790,7 +792,7 @@ msgstr "修改配置文件"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "多行指令"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -819,7 +821,7 @@ msgstr "上传流量"
|
|||
msgid "New version released"
|
||||
msgstr "新版本发布"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "下一步"
|
||||
|
@ -844,7 +846,7 @@ msgstr "控制 Nginx"
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr "Nginx 错误日志路径"
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr "Nginx 日志"
|
||||
|
||||
|
@ -868,7 +870,11 @@ msgstr "取消"
|
|||
msgid "Node Secret"
|
||||
msgstr "节点密钥"
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr "有效期"
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "找不到页面"
|
||||
|
||||
|
@ -877,11 +883,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "此前无效: %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr "注意"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
msgid "Obtain certificate"
|
||||
msgstr "获取证书"
|
||||
|
||||
|
@ -900,7 +906,7 @@ msgstr "离线"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -972,7 +978,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr "请填写 DNS 提供商提供的 API 验证凭据。"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
"select one of the credentialsbelow to request the API of the DNS provider."
|
||||
|
@ -1011,7 +1017,7 @@ msgstr "请至少选择一个节点!"
|
|||
msgid "Pre-release"
|
||||
msgstr "预发布"
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr "偏好设置"
|
||||
|
||||
|
@ -1074,6 +1080,15 @@ msgstr "重载中"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "正在重载 Nginx"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
msgid "Renew Certificate"
|
||||
msgstr "更新证书"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
msgid "Renew successfully"
|
||||
msgstr "更新成功"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr "请求参数错误"
|
||||
|
@ -1098,8 +1113,9 @@ msgstr "运行模式"
|
|||
msgid "Running"
|
||||
msgstr "运行中"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1115,6 +1131,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "保存错误 %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
msgid "Save successfully"
|
||||
msgstr "保存成功"
|
||||
|
@ -1154,24 +1171,32 @@ msgstr "服务器错误"
|
|||
msgid "Server Info"
|
||||
msgstr "服务器信息"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "未在指令集合中找到 server_name"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "必须为 server_name 指令指明参数"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr "使用 DNS01 Challenge 提供商"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr "正在设置环境变量"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr "使用 HTTP01 challenge provider"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "单行指令"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
msgid "Site Logs"
|
||||
msgstr "站点列表"
|
||||
|
||||
|
@ -1179,19 +1204,19 @@ msgstr "站点列表"
|
|||
msgid "Sites List"
|
||||
msgstr "站点列表"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "SSL 证书内容"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "SSL 证书密钥内容"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "SSL证书密钥路径"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "SSL证书路径"
|
||||
|
||||
|
@ -1203,7 +1228,8 @@ msgstr "SSO 登录"
|
|||
msgid "Stable"
|
||||
msgstr "稳定"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
|
@ -1231,7 +1257,7 @@ msgstr "切换到深色主题"
|
|||
msgid "Switch to light theme"
|
||||
msgstr "切换到浅色"
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
|
@ -1243,7 +1269,7 @@ msgstr "列表"
|
|||
msgid "Target"
|
||||
msgstr "目标"
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "终端"
|
||||
|
||||
|
@ -1251,7 +1277,7 @@ msgstr "终端"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr "终端启动命令"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
"renewed if it has been more than 1 week since it was last issued."
|
||||
|
@ -1263,7 +1289,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr "文件名不能包含以下字符: %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
"need to get the certificate, supportmultiple domains."
|
||||
|
@ -1273,10 +1299,14 @@ msgstr "当前配置中的 server_name 必须是获取证书所需的域名,
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr "用户名或密码错误"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr "这个证书自动续期项目是无效的,请删除。"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr "该证书由 Nginx UI 托管"
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr "该字段不能为空"
|
||||
|
@ -1291,11 +1321,10 @@ msgstr ""
|
|||
"为了确保认证自动更新能够正常工作,我们需要添加一个能够代理从权威机构到后端的"
|
||||
"请求的 Location,并且我们需要保存这个文件并重新加载Nginx。你确定要继续吗?"
|
||||
|
||||
#: src/views/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr "类型"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1308,7 +1337,7 @@ msgstr "修改时间"
|
|||
msgid "Updated successfully"
|
||||
msgstr "更新成功"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr "升级"
|
||||
|
@ -1341,20 +1370,16 @@ msgstr "用户名"
|
|||
msgid "Username (*)"
|
||||
msgstr "用户名 (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr "使用 DNS01 Challenge 提供商"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr "使用 HTTP01 challenge provider"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr "有效的"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
msgid "View"
|
||||
msgstr "查看"
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
@ -1365,7 +1390,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr "我们将在您域名的 DNS 记录中添加一个或多个 TXT 记录,以核实域名所有权。"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1398,6 +1423,18 @@ msgstr "您使用的是最新版本"
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr "你可以在这个页面检查Nginx UI的升级。"
|
||||
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "更新证书"
|
||||
|
||||
#~ msgid "Auto Cert is enabled"
|
||||
#~ msgstr "自动更新已启用"
|
||||
|
||||
#~ msgid "Auto Cert Log"
|
||||
#~ msgstr "证书自动续期日志"
|
||||
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "配置文件名称"
|
||||
|
||||
#~ msgid "Auto cert is enabled, please do not modify this certification."
|
||||
#~ msgstr "自动更新已启用,请勿修改此证书配置。"
|
||||
|
||||
|
|
|
@ -14,15 +14,15 @@ msgstr ""
|
|||
"Generated-By: easygettext\n"
|
||||
"X-Generator: Poedit 3.4.1\n"
|
||||
|
||||
#: src/routes/index.ts:182
|
||||
#: src/routes/index.ts:199
|
||||
msgid "About"
|
||||
msgstr "關於"
|
||||
|
||||
#: src/routes/index.ts:134 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
#: src/routes/index.ts:151 src/views/domain/ngx_conf/LogEntry.vue:78
|
||||
msgid "Access Logs"
|
||||
msgstr "存取日誌"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:87
|
||||
#: src/views/certificate/Certificate.vue:96
|
||||
#: src/views/certificate/DNSCredential.vue:32 src/views/config/config.ts:36
|
||||
#: src/views/domain/DomainList.vue:50 src/views/environment/Environment.vue:105
|
||||
#: src/views/user/User.vue:46
|
||||
|
@ -36,6 +36,12 @@ msgstr "操作"
|
|||
msgid "Add"
|
||||
msgstr "新增"
|
||||
|
||||
#: src/routes/index.ts:122 src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Add Certificate"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
|
||||
msgid "Add Directive Below"
|
||||
msgstr "在下方新增指令"
|
||||
|
@ -103,33 +109,23 @@ msgstr "助理"
|
|||
msgid "Author"
|
||||
msgstr "作者"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:46
|
||||
#: src/views/domain/cert/ChangeCert.vue:37
|
||||
msgid "Auto Cert"
|
||||
msgstr "自動憑證"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:105
|
||||
#, fuzzy
|
||||
msgid "Auto Cert is enabled"
|
||||
msgstr "自動憑證"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:135
|
||||
#, fuzzy
|
||||
msgid "Auto Cert Log"
|
||||
msgstr "自動憑證日誌"
|
||||
|
||||
#: src/views/nginx_log/NginxLog.vue:149
|
||||
msgid "Auto Refresh"
|
||||
msgstr "自動重新整理"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:126
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:76
|
||||
msgid "Auto-renewal disabled for %{name}"
|
||||
msgstr "已關閉 %{name} 的自動續簽"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:119
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:69
|
||||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "已啟用 %{name} 的自動續簽"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:168
|
||||
#: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
|
||||
#: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
|
||||
msgid "Back"
|
||||
|
@ -170,7 +166,7 @@ msgstr "CADir"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:139
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:211
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:150
|
||||
#: src/views/domain/components/Deploy.vue:24
|
||||
#: src/views/domain/components/RightSettings.vue:52
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
|
||||
|
@ -186,22 +182,22 @@ msgstr "此憑證已過期"
|
|||
msgid "Certificate is valid"
|
||||
msgstr "此憑證有效"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:145 src/views/domain/cert/Cert.vue:35
|
||||
#: src/views/certificate/CertificateEditor.vue:119
|
||||
#: src/views/domain/cert/Cert.vue:35
|
||||
msgid "Certificate Status"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:96
|
||||
#: src/routes/index.ts:100 src/views/certificate/Certificate.vue:109
|
||||
#, fuzzy
|
||||
msgid "Certificates"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/routes/index.ts:108
|
||||
#: src/routes/index.ts:109
|
||||
#, fuzzy
|
||||
msgid "Certificates List"
|
||||
msgstr "憑證清單"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:150
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:63
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:65
|
||||
msgid "Challenge Method"
|
||||
msgstr "驗證方式"
|
||||
|
||||
|
@ -241,10 +237,6 @@ msgstr "清除"
|
|||
msgid "Comments"
|
||||
msgstr "備註"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:41
|
||||
msgid "Config Name"
|
||||
msgstr "設定名稱"
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
|
||||
msgid "Config Templates"
|
||||
msgstr "設定模板"
|
||||
|
@ -299,7 +291,7 @@ msgstr "建立時間"
|
|||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "建立客戶端方便與CA伺服器通訊"
|
||||
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:89
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:105
|
||||
msgid "Credential"
|
||||
msgstr "認證"
|
||||
|
||||
|
@ -382,11 +374,10 @@ msgstr "指令"
|
|||
msgid "Disable"
|
||||
msgstr "停用"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:128
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:78
|
||||
msgid "Disable auto-renewal failed for %{name}"
|
||||
msgstr "關閉 %{name} 自動續簽失敗"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:57
|
||||
#: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
|
||||
#: src/views/domain/DomainList.vue:123
|
||||
msgid "Disabled"
|
||||
|
@ -401,16 +392,16 @@ msgstr "成功停用"
|
|||
msgid "Disk IO"
|
||||
msgstr "磁碟 IO"
|
||||
|
||||
#: src/routes/index.ts:113 src/views/certificate/DNSCredential.vue:39
|
||||
#: src/routes/index.ts:130 src/views/certificate/DNSCredential.vue:39
|
||||
msgid "DNS Credentials"
|
||||
msgstr "DNS 認證"
|
||||
|
||||
#: src/views/certificate/DNSChallenge.vue:74
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:79
|
||||
#: src/views/domain/cert/components/DNSChallenge.vue:95
|
||||
msgid "DNS Provider"
|
||||
msgstr "DNS 供應商"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:69
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:71
|
||||
msgid "DNS01"
|
||||
msgstr "DNS01"
|
||||
|
||||
|
@ -419,7 +410,7 @@ msgid "Do you want to deploy this file to remote server?"
|
|||
msgid_plural "Do you want to deploy this file to remote servers?"
|
||||
msgstr[0] "您要將此檔案部署至遠端伺服器嗎?"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:207
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:146
|
||||
msgid "Do you want to disable auto-cert renewal?"
|
||||
msgstr "您要停用自動憑證續訂嗎?"
|
||||
|
||||
|
@ -443,7 +434,7 @@ msgstr "您要移除此伺服器嗎?"
|
|||
msgid "Domain Config Created Successfully"
|
||||
msgstr "網域設定檔成功建立"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:125
|
||||
#: src/views/certificate/CertificateEditor.vue:103
|
||||
#, fuzzy
|
||||
msgid "Domains list is empty, try to reopen Auto Cert for %{config}"
|
||||
msgstr "網域列表為空,請嘗試重新開啟 %{config} 的自動憑證"
|
||||
|
@ -509,7 +500,7 @@ msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
|
|||
msgid "Enable %{conf_name} in %{node_name} successfully"
|
||||
msgstr "成功在 %{node_name} 啟用 %{conf_name}"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:121
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:71
|
||||
msgid "Enable auto-renewal failed for %{name}"
|
||||
msgstr "啟用 %{name} 自動續簽失敗"
|
||||
|
||||
|
@ -525,7 +516,6 @@ msgstr "啟用成功"
|
|||
msgid "Enable TLS"
|
||||
msgstr "啟用 TLS"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:53
|
||||
#: src/views/domain/cert/ChangeCert.vue:44
|
||||
#: src/views/domain/components/Deploy.vue:89
|
||||
#: src/views/domain/components/RightSettings.vue:75
|
||||
|
@ -543,7 +533,7 @@ msgstr "成功啟用"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "用 Let's Encrypt 對網站進行加密"
|
||||
|
||||
#: src/routes/index.ts:151 src/views/environment/Environment.vue:113
|
||||
#: src/routes/index.ts:168 src/views/environment/Environment.vue:113
|
||||
msgid "Environment"
|
||||
msgstr "環境"
|
||||
|
||||
|
@ -555,7 +545,7 @@ msgstr "環境"
|
|||
msgid "Error"
|
||||
msgstr "錯誤"
|
||||
|
||||
#: src/routes/index.ts:138 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
#: src/routes/index.ts:155 src/views/domain/ngx_conf/LogEntry.vue:86
|
||||
msgid "Error Logs"
|
||||
msgstr "錯誤日誌"
|
||||
|
||||
|
@ -563,6 +553,10 @@ msgstr "錯誤日誌"
|
|||
msgid "Executable Path"
|
||||
msgstr "可執行檔路徑"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:84
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:27
|
||||
#, fuzzy
|
||||
msgid "Expired At: %{date}"
|
||||
|
@ -635,7 +629,7 @@ msgstr "產生註冊帳號的私鑰"
|
|||
msgid "Get release information error"
|
||||
msgstr "取得發布資訊錯誤"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:64
|
||||
#: src/views/domain/cert/components/ObtainCertLive.vue:68
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "正在取得憑證,請稍候..."
|
||||
|
||||
|
@ -675,7 +669,7 @@ msgstr "HTTP 監聽主機"
|
|||
msgid "HTTP Port"
|
||||
msgstr "HTTP 監聽埠"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:66
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:68
|
||||
msgid "HTTP01"
|
||||
msgstr "HTTP01"
|
||||
|
||||
|
@ -687,7 +681,7 @@ msgstr "初始化核心升級程式錯誤"
|
|||
msgid "Initialing core upgrader"
|
||||
msgstr "正在初始化核心升級程式"
|
||||
|
||||
#: src/routes/index.ts:194 src/views/other/Install.vue:139
|
||||
#: src/routes/index.ts:211 src/views/other/Install.vue:139
|
||||
msgid "Install"
|
||||
msgstr "安裝"
|
||||
|
||||
|
@ -746,7 +740,12 @@ msgstr "Location"
|
|||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
#: src/routes/index.ts:200 src/views/other/Login.vue:147
|
||||
#: src/views/certificate/CertificateEditor.vue:156
|
||||
#, fuzzy
|
||||
msgid "Log"
|
||||
msgstr "登入"
|
||||
|
||||
#: src/routes/index.ts:217 src/views/other/Login.vue:147
|
||||
msgid "Login"
|
||||
msgstr "登入"
|
||||
|
||||
|
@ -758,7 +757,7 @@ msgstr "登入成功"
|
|||
msgid "Logout successful"
|
||||
msgstr "登出成功"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:51
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:54
|
||||
msgid ""
|
||||
"Make sure you have configured a reverse proxy for .well-known directory to "
|
||||
"HTTPChallengePort before obtaining the certificate."
|
||||
|
@ -773,7 +772,7 @@ msgstr "管理設定"
|
|||
msgid "Manage Sites"
|
||||
msgstr "管理網站"
|
||||
|
||||
#: src/routes/index.ts:159 src/views/user/User.vue:53
|
||||
#: src/routes/index.ts:176 src/views/user/User.vue:53
|
||||
msgid "Manage Users"
|
||||
msgstr "管理使用者"
|
||||
|
||||
|
@ -788,10 +787,14 @@ msgstr "記憶體與儲存"
|
|||
#: src/components/ChatGPT/ChatGPT.vue:256
|
||||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:137
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
|
||||
#: src/views/certificate/Certificate.vue:156
|
||||
msgid "Modify"
|
||||
msgstr "修改"
|
||||
|
||||
#: src/routes/index.ts:114 src/views/certificate/CertificateEditor.vue:76
|
||||
#, fuzzy
|
||||
msgid "Modify Certificate"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:153
|
||||
msgid "Modify Config"
|
||||
msgstr "修改設定"
|
||||
|
@ -800,7 +803,7 @@ msgstr "修改設定"
|
|||
msgid "Multi-line Directive"
|
||||
msgstr "多行指令"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:24
|
||||
#: src/views/certificate/Certificate.vue:22
|
||||
#: src/views/certificate/DNSCredential.vue:13 src/views/config/config.ts:9
|
||||
#: src/views/domain/cert/ChangeCert.vue:21
|
||||
#: src/views/domain/components/RightSettings.vue:81
|
||||
|
@ -829,7 +832,7 @@ msgstr "上傳流量"
|
|||
msgid "New version released"
|
||||
msgstr "新版本發布"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:281
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:216
|
||||
#: src/views/domain/DomainAdd.vue:140
|
||||
msgid "Next"
|
||||
msgstr "下一步"
|
||||
|
@ -854,7 +857,7 @@ msgstr "Nginx 控制元件"
|
|||
msgid "Nginx Error Log Path"
|
||||
msgstr "Nginx 錯誤日誌路徑"
|
||||
|
||||
#: src/routes/index.ts:128 src/views/nginx_log/NginxLog.vue:145
|
||||
#: src/routes/index.ts:145 src/views/nginx_log/NginxLog.vue:145
|
||||
msgid "Nginx Log"
|
||||
msgstr "Nginx 日誌"
|
||||
|
||||
|
@ -878,7 +881,11 @@ msgstr "取消"
|
|||
msgid "Node Secret"
|
||||
msgstr "Node Secret"
|
||||
|
||||
#: src/routes/index.ts:206 src/routes/index.ts:208
|
||||
#: src/views/certificate/Certificate.vue:90
|
||||
msgid "Not After"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:223 src/routes/index.ts:225
|
||||
msgid "Not Found"
|
||||
msgstr "找不到頁面"
|
||||
|
||||
|
@ -887,11 +894,11 @@ msgid "Not Valid Before: %{date}"
|
|||
msgstr "此前無效: %{date}"
|
||||
|
||||
#: src/views/certificate/DNSCredential.vue:48
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:38
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:40
|
||||
msgid "Note"
|
||||
msgstr "備註"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:252
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:191
|
||||
msgid "Obtain certificate"
|
||||
msgstr "取得憑證"
|
||||
|
||||
|
@ -910,7 +917,7 @@ msgstr "離線"
|
|||
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:140
|
||||
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:346
|
||||
#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:210
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:149
|
||||
#: src/views/domain/components/Deploy.vue:23
|
||||
#: src/views/domain/components/RightSettings.vue:51
|
||||
#: src/views/domain/DomainList.vue:144
|
||||
|
@ -982,7 +989,7 @@ msgid ""
|
|||
"provider."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:55
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:58
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Please first add credentials in Certification > DNS Credentials, and then "
|
||||
|
@ -1022,7 +1029,7 @@ msgstr "請至少選擇一個節點!"
|
|||
msgid "Pre-release"
|
||||
msgstr "預先發布"
|
||||
|
||||
#: src/routes/index.ts:167 src/views/preference/Preference.vue:85
|
||||
#: src/routes/index.ts:184 src/views/preference/Preference.vue:85
|
||||
msgid "Preference"
|
||||
msgstr "偏好設定"
|
||||
|
||||
|
@ -1085,6 +1092,17 @@ msgstr "重新載入中"
|
|||
msgid "Reloading nginx"
|
||||
msgstr "正在重新載入 Nginx"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:43
|
||||
#: src/views/certificate/RenewCert.vue:47
|
||||
#, fuzzy
|
||||
msgid "Renew Certificate"
|
||||
msgstr "更換憑證"
|
||||
|
||||
#: src/views/certificate/RenewCert.vue:25
|
||||
#, fuzzy
|
||||
msgid "Renew successfully"
|
||||
msgstr "啟用成功"
|
||||
|
||||
#: src/language/constants.ts:35
|
||||
msgid "Requested with wrong parameters"
|
||||
msgstr "請求參數錯誤"
|
||||
|
@ -1109,8 +1127,9 @@ msgstr "執行模式"
|
|||
msgid "Running"
|
||||
msgstr "執行中"
|
||||
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259 src/views/config/ConfigEdit.vue:98
|
||||
#: src/views/domain/DomainEdit.vue:268
|
||||
#: src/components/ChatGPT/ChatGPT.vue:259
|
||||
#: src/views/certificate/CertificateEditor.vue:175
|
||||
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
|
||||
#: src/views/preference/Preference.vue:113
|
||||
msgid "Save"
|
||||
|
@ -1126,6 +1145,7 @@ msgid "Save error %{msg}"
|
|||
msgstr "儲存錯誤 %{msg}"
|
||||
|
||||
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
|
||||
#: src/views/certificate/CertificateEditor.vue:46
|
||||
#: src/views/preference/Preference.vue:58
|
||||
msgid "Save successfully"
|
||||
msgstr "儲存成功"
|
||||
|
@ -1165,24 +1185,34 @@ msgstr "伺服器錯誤"
|
|||
msgid "Server Info"
|
||||
msgstr "伺服器資訊"
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:165
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:115
|
||||
msgid "server_name not found in directives"
|
||||
msgstr "在指令中未找到 server_name"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:27
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:29
|
||||
#: src/views/domain/DomainAdd.vue:119
|
||||
msgid "server_name parameter is required"
|
||||
msgstr "必須提供 server_name 參數"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
#, fuzzy
|
||||
msgid "Setting DNS01 challenge provider"
|
||||
msgstr "使用 DNS01 挑戰提供者"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Setting environment variables"
|
||||
msgstr "設定環境變數中"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
#, fuzzy
|
||||
msgid "Setting HTTP01 challenge provider"
|
||||
msgstr "使用 HTTP01 挑戰提供者"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:54
|
||||
msgid "Single Directive"
|
||||
msgstr "單一指令"
|
||||
|
||||
#: src/routes/index.ts:142
|
||||
#: src/routes/index.ts:159
|
||||
msgid "Site Logs"
|
||||
msgstr "網站日誌"
|
||||
|
||||
|
@ -1190,21 +1220,21 @@ msgstr "網站日誌"
|
|||
msgid "Sites List"
|
||||
msgstr "網站列表"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:164
|
||||
#: src/views/certificate/CertificateEditor.vue:135
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Content"
|
||||
msgstr "SSL 認證內容"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:171
|
||||
#: src/views/certificate/CertificateEditor.vue:142
|
||||
#, fuzzy
|
||||
msgid "SSL Certificate Key Content"
|
||||
msgstr "SSL 憑證金鑰內容"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:73
|
||||
#: src/views/certificate/Certificate.vue:63
|
||||
msgid "SSL Certificate Key Path"
|
||||
msgstr "SSL 憑證金鑰路徑"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:65
|
||||
#: src/views/certificate/Certificate.vue:55
|
||||
msgid "SSL Certificate Path"
|
||||
msgstr "SSL 憑證路徑"
|
||||
|
||||
|
@ -1217,7 +1247,8 @@ msgstr "登入"
|
|||
msgid "Stable"
|
||||
msgstr "穩定"
|
||||
|
||||
#: src/views/domain/DomainList.vue:25 src/views/environment/Environment.vue:78
|
||||
#: src/views/certificate/Certificate.vue:71 src/views/domain/DomainList.vue:25
|
||||
#: src/views/environment/Environment.vue:78
|
||||
msgid "Status"
|
||||
msgstr "狀態"
|
||||
|
||||
|
@ -1246,7 +1277,7 @@ msgstr ""
|
|||
msgid "Switch to light theme"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:175
|
||||
#: src/routes/index.ts:192
|
||||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
|
@ -1258,7 +1289,7 @@ msgstr "表格"
|
|||
msgid "Target"
|
||||
msgstr "目標"
|
||||
|
||||
#: src/routes/index.ts:120 src/views/pty/Terminal.vue:95
|
||||
#: src/routes/index.ts:137 src/views/pty/Terminal.vue:95
|
||||
msgid "Terminal"
|
||||
msgstr "終端機"
|
||||
|
||||
|
@ -1266,7 +1297,7 @@ msgstr "終端機"
|
|||
msgid "Terminal Start Command"
|
||||
msgstr "終端機啟動指令"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:47
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:50
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The certificate for the domain will be checked 5 minutes, and will be "
|
||||
|
@ -1279,7 +1310,7 @@ msgstr ""
|
|||
msgid "The filename cannot contain the following characters: %{c}"
|
||||
msgstr "檔名不能包含以下字元: %{c}"
|
||||
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:42
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:45
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The server_name in the current configuration must be the domain name you "
|
||||
|
@ -1290,11 +1321,15 @@ msgstr "注意:目前設定中的 server_name 必須為需要申請憑證的
|
|||
msgid "The username or password is incorrect"
|
||||
msgstr "使用者名稱或密碼不正確"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:115
|
||||
#: src/views/certificate/CertificateEditor.vue:93
|
||||
#, fuzzy
|
||||
msgid "This Auto Cert item is invalid, please remove it."
|
||||
msgstr "此自動憑證項目無效,請將其移除。"
|
||||
|
||||
#: src/views/certificate/CertificateEditor.vue:83
|
||||
msgid "This certificate is managed by Nginx UI"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDesign/StdDataEntry/StdFormItem.vue:31
|
||||
msgid "This field should not be empty"
|
||||
msgstr "此欄位不應為空"
|
||||
|
@ -1309,11 +1344,10 @@ msgstr ""
|
|||
"為了確保憑證自動續期能夠正常運作,我們需要新增一個 Location 來代理從授權後端"
|
||||
"的請求,我們需要儲存這個檔案並重新載入 Nginx。你確定你要繼續嗎?"
|
||||
|
||||
#: src/views/config/config.ts:14
|
||||
#: src/views/certificate/Certificate.vue:39 src/views/config/config.ts:14
|
||||
msgid "Type"
|
||||
msgstr "類型"
|
||||
|
||||
#: src/views/certificate/Certificate.vue:81
|
||||
#: src/views/certificate/DNSCredential.vue:26 src/views/config/config.ts:29
|
||||
#: src/views/config/ConfigEdit.vue:123
|
||||
#: src/views/domain/components/RightSettings.vue:84
|
||||
|
@ -1326,7 +1360,7 @@ msgstr "更新時間"
|
|||
msgid "Updated successfully"
|
||||
msgstr "更新成功"
|
||||
|
||||
#: src/routes/index.ts:186 src/views/system/Upgrade.vue:143
|
||||
#: src/routes/index.ts:203 src/views/system/Upgrade.vue:143
|
||||
#: src/views/system/Upgrade.vue:235
|
||||
msgid "Upgrade"
|
||||
msgstr "升級"
|
||||
|
@ -1359,20 +1393,16 @@ msgstr "使用者名稱"
|
|||
msgid "Username (*)"
|
||||
msgstr "使用者名稱 (*)"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Using DNS01 challenge provider"
|
||||
msgstr "使用 DNS01 挑戰提供者"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr "使用 HTTP01 挑戰提供者"
|
||||
#: src/views/certificate/Certificate.vue:80
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
|
||||
msgid "View"
|
||||
msgstr "檢視"
|
||||
|
||||
#: src/views/config/InspectConfig.vue:36
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:21
|
||||
#: src/views/domain/cert/components/AutoCertStepOne.vue:23
|
||||
#: src/views/domain/DomainAdd.vue:114
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
@ -1383,7 +1413,7 @@ msgid ""
|
|||
"ownership verification."
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:208
|
||||
#: src/views/domain/cert/components/ObtainCert.vue:147
|
||||
msgid ""
|
||||
"We will remove the HTTPChallenge configuration from this file and reload the "
|
||||
"Nginx. Are you sure you want to continue?"
|
||||
|
@ -1417,6 +1447,21 @@ msgstr "您正在使用最新版本"
|
|||
msgid "You can check Nginx UI upgrade at this page."
|
||||
msgstr "您可以在此頁面檢查 Nginx UI 的升級。"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Renew certificate"
|
||||
#~ msgstr "取得憑證"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert is enabled"
|
||||
#~ msgstr "自動憑證"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Auto Cert Log"
|
||||
#~ msgstr "自動憑證日誌"
|
||||
|
||||
#~ msgid "Config Name"
|
||||
#~ msgstr "設定名稱"
|
||||
|
||||
#~ msgid "Auto cert is enabled, please do not modify this certification."
|
||||
#~ msgstr "自動憑證已啟用,請勿修改此憑證。"
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@ export const routes: Route[] = [
|
|||
path: 'certificates',
|
||||
name: () => $gettext('Certificates'),
|
||||
component: () => import('@/layouts/BaseRouterView.vue'),
|
||||
redirect: '/certificates/list',
|
||||
meta: {
|
||||
icon: SafetyCertificateOutlined,
|
||||
},
|
||||
|
@ -108,6 +109,22 @@ export const routes: Route[] = [
|
|||
name: () => $gettext('Certificates List'),
|
||||
component: () => import('@/views/certificate/Certificate.vue'),
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
name: () => $gettext('Modify Certificate'),
|
||||
component: () => import('@/views/certificate/CertificateEditor.vue'),
|
||||
meta: {
|
||||
hiddenInSidebar: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'add',
|
||||
name: () => $gettext('Add Certificate'),
|
||||
component: () => import('@/views/certificate/CertificateEditor.vue'),
|
||||
meta: {
|
||||
hiddenInSidebar: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dns_credential',
|
||||
name: () => $gettext('DNS Credentials'),
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":"2.0.0-beta.4","build_id":72,"total_build":276}
|
||||
{"version":"2.0.0-beta.4","build_id":73,"total_build":277}
|
|
@ -1,18 +1,16 @@
|
|||
<script setup lang="tsx">
|
||||
import { useGettext } from 'vue3-gettext'
|
||||
import { Badge } from 'ant-design-vue'
|
||||
import { Badge, Tag } from 'ant-design-vue'
|
||||
import { h, provide } from 'vue'
|
||||
import dayjs from 'dayjs'
|
||||
import { input } from '@/components/StdDesign/StdDataEntry'
|
||||
import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
|
||||
import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
|
||||
import cert from '@/api/cert'
|
||||
import StdCurd from '@/components/StdDesign/StdDataDisplay/StdCurd.vue'
|
||||
import CodeEditor from '@/components/CodeEditor/CodeEditor.vue'
|
||||
import CertInfo from '@/views/domain/cert/CertInfo.vue'
|
||||
import type { Column } from '@/components/StdDesign/types'
|
||||
import type { Cert } from '@/api/cert'
|
||||
import { AutoCertState } from '@/constants'
|
||||
import AutoCertStepOne from '@/views/domain/cert/components/AutoCertStepOne.vue'
|
||||
import StdTable from '@/components/StdDesign/StdDataDisplay/StdTable.vue'
|
||||
|
||||
const { $gettext } = useGettext()
|
||||
|
||||
|
@ -38,24 +36,16 @@ const columns: Column[] = [{
|
|||
},
|
||||
search: true,
|
||||
}, {
|
||||
title: () => $gettext('Config Name'),
|
||||
dataIndex: 'filename',
|
||||
sortable: true,
|
||||
pithy: true,
|
||||
}, {
|
||||
title: () => $gettext('Auto Cert'),
|
||||
title: () => $gettext('Type'),
|
||||
dataIndex: 'auto_cert',
|
||||
customRender: (args: customRender) => {
|
||||
const template = []
|
||||
const { text } = args
|
||||
if (text === true || text > 0) {
|
||||
template.push(<Badge status="success"/>)
|
||||
template.push($gettext('Enabled'))
|
||||
}
|
||||
else {
|
||||
template.push(<Badge status="warning"/>)
|
||||
template.push($gettext('Disabled'))
|
||||
}
|
||||
if (text === true || text > 0)
|
||||
template.push(<Tag bordered={false} color="processing">{$gettext('Managed Certificate')}</Tag>)
|
||||
|
||||
else
|
||||
template.push(<Tag bordered={false} color="purple">{$gettext('General Certificate')}</Tag>)
|
||||
|
||||
return h('div', template)
|
||||
},
|
||||
|
@ -78,8 +68,27 @@ const columns: Column[] = [{
|
|||
},
|
||||
hidden: true,
|
||||
}, {
|
||||
title: () => $gettext('Updated at'),
|
||||
dataIndex: 'updated_at',
|
||||
title: () => $gettext('Status'),
|
||||
dataIndex: 'certificate_info',
|
||||
customRender: (args: customRender) => {
|
||||
const template = []
|
||||
|
||||
const text = args.text?.not_before && args.text?.not_after && !dayjs().isBefore(args.text?.not_before) && !dayjs().isAfter(args.text?.not_after)
|
||||
|
||||
if (text) {
|
||||
template.push(<Badge status="success"/>)
|
||||
template.push($gettext('Valid'))
|
||||
}
|
||||
else {
|
||||
template.push(<Badge status="error"/>)
|
||||
template.push($gettext('Expired'))
|
||||
}
|
||||
|
||||
return h('div', template)
|
||||
},
|
||||
}, {
|
||||
title: () => $gettext('Not After'),
|
||||
dataIndex: ['certificate_info', 'not_after'],
|
||||
customRender: datetime,
|
||||
sortable: true,
|
||||
pithy: true,
|
||||
|
@ -88,6 +97,7 @@ const columns: Column[] = [{
|
|||
dataIndex: 'action',
|
||||
}]
|
||||
|
||||
// DO NOT REMOVE THESE LINES
|
||||
const no_server_name = computed(() => {
|
||||
return false
|
||||
})
|
||||
|
@ -96,82 +106,21 @@ provide('no_server_name', no_server_name)
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<StdCurd
|
||||
:title="$gettext('Certificates')"
|
||||
<ACard :title="$gettext('Certificates')">
|
||||
<template #extra>
|
||||
<AButton
|
||||
type="link"
|
||||
@click="$router.push('/certificates/add')"
|
||||
>
|
||||
{{ $gettext('Add Certificate') }}
|
||||
</AButton>
|
||||
</template>
|
||||
<StdTable
|
||||
:api="cert"
|
||||
:columns="columns"
|
||||
:modal-max-width="600"
|
||||
>
|
||||
<template #beforeEdit="{ data }: {data: Cert}">
|
||||
<template v-if="data.auto_cert === AutoCertState.Enable">
|
||||
<div class="mt-4 mb-4">
|
||||
<AAlert
|
||||
:message="$gettext('Auto Cert is enabled')"
|
||||
type="success"
|
||||
show-icon
|
||||
@click-edit="id => $router.push(`/certificates/${id}`)"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="!data.filename"
|
||||
class="mt-4 mb-4"
|
||||
>
|
||||
<AAlert
|
||||
:message="$gettext('This Auto Cert item is invalid, please remove it.')"
|
||||
type="error"
|
||||
show-icon
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="!data.domains"
|
||||
class="mt-4 mb-4"
|
||||
>
|
||||
<AAlert
|
||||
:message="$gettext('Domains list is empty, try to reopen Auto Cert for %{config}', { config: data.filename })"
|
||||
type="error"
|
||||
show-icon
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="data.log"
|
||||
class="mt-4 mb-4"
|
||||
>
|
||||
<AForm layout="vertical">
|
||||
<AFormItem :label="$gettext('Auto Cert Log')">
|
||||
<p>{{ data.log }}</p>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
</div>
|
||||
</template>
|
||||
<AForm
|
||||
v-if="data.certificate_info"
|
||||
layout="vertical"
|
||||
>
|
||||
<AFormItem :label="$gettext('Certificate Status')">
|
||||
<CertInfo :cert="data.certificate_info" />
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
|
||||
<AutoCertStepOne hide-note />
|
||||
</template>
|
||||
<template #edit="{ data }: {data: Cert}">
|
||||
<AForm layout="vertical">
|
||||
<AFormItem :label="$gettext('SSL Certificate Content')">
|
||||
<CodeEditor
|
||||
v-model:content="data.ssl_certificate"
|
||||
default-height="200px"
|
||||
:readonly="!notShowInAutoCert(data)"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('SSL Certificate Key Content')">
|
||||
<CodeEditor
|
||||
v-model:content="data.ssl_certificate_key"
|
||||
default-height="200px"
|
||||
:readonly="!notShowInAutoCert(data)"
|
||||
/>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
</template>
|
||||
</StdCurd>
|
||||
</ACard>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
|
200
app/src/views/certificate/CertificateEditor.vue
Normal file
200
app/src/views/certificate/CertificateEditor.vue
Normal file
|
@ -0,0 +1,200 @@
|
|||
<script setup lang="ts">
|
||||
import { useGettext } from 'vue3-gettext'
|
||||
import type { Ref } from 'vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { AutoCertState } from '@/constants'
|
||||
import CertInfo from '@/views/domain/cert/CertInfo.vue'
|
||||
import AutoCertStepOne from '@/views/domain/cert/components/AutoCertStepOne.vue'
|
||||
import CodeEditor from '@/components/CodeEditor/CodeEditor.vue'
|
||||
import type { Cert } from '@/api/cert'
|
||||
import cert from '@/api/cert'
|
||||
import FooterToolBar from '@/components/FooterToolbar/FooterToolBar.vue'
|
||||
import RenewCert from '@/views/certificate/RenewCert.vue'
|
||||
|
||||
const { $gettext } = useGettext()
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
const id = computed(() => {
|
||||
return Number.parseInt(route.params.id as string)
|
||||
})
|
||||
|
||||
const data = ref({}) as Ref<Cert>
|
||||
|
||||
const notShowInAutoCert = computed(() => {
|
||||
return data.value.auto_cert !== AutoCertState.Enable
|
||||
})
|
||||
|
||||
function init() {
|
||||
if (id.value > 0) {
|
||||
cert.get(id.value).then(r => {
|
||||
data.value = r
|
||||
})
|
||||
}
|
||||
else {
|
||||
data.value = {} as Cert
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
|
||||
function save() {
|
||||
cert.save(data.value.id, data.value).then(r => {
|
||||
data.value = r
|
||||
message.success($gettext('Save successfully'))
|
||||
})
|
||||
}
|
||||
|
||||
provide('data', data)
|
||||
|
||||
provide('no_server_name', computed(() => {
|
||||
return false
|
||||
}))
|
||||
|
||||
const log = computed(() => {
|
||||
const logs = data.value.log?.split('\n')
|
||||
|
||||
logs.forEach((line, idx, lines) => {
|
||||
const regex = /\[Nginx UI\] (.*)/
|
||||
|
||||
const matches = line.match(regex)
|
||||
|
||||
if (matches && matches.length > 1) {
|
||||
const extractedText = matches[1]
|
||||
|
||||
lines[idx] = line.replaceAll(extractedText, $gettext(extractedText))
|
||||
}
|
||||
})
|
||||
|
||||
return logs.join('\n')
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ACard :title="id > 0 ? $gettext('Modify Certificate') : $gettext('Add Certificate')">
|
||||
<div
|
||||
v-if="data.auto_cert === AutoCertState.Enable"
|
||||
class="mb-4"
|
||||
>
|
||||
<div class="mb-2">
|
||||
<AAlert
|
||||
:message="$gettext('This certificate is managed by Nginx UI')"
|
||||
type="success"
|
||||
show-icon
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="!data.filename"
|
||||
class="mt-4 mb-4"
|
||||
>
|
||||
<AAlert
|
||||
:message="$gettext('This Auto Cert item is invalid, please remove it.')"
|
||||
type="error"
|
||||
show-icon
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="!data.domains"
|
||||
class="mt-4 mb-4"
|
||||
>
|
||||
<AAlert
|
||||
:message="$gettext('Domains list is empty, try to reopen Auto Cert for %{config}', { config: data.filename })"
|
||||
type="error"
|
||||
show-icon
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ARow>
|
||||
<ACol
|
||||
:sm="24"
|
||||
:md="12"
|
||||
>
|
||||
<AForm
|
||||
v-if="data.certificate_info"
|
||||
layout="vertical"
|
||||
>
|
||||
<AFormItem :label="$gettext('Certificate Status')">
|
||||
<CertInfo :cert="data.certificate_info" />
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
|
||||
<RenewCert
|
||||
v-if="data.auto_cert === AutoCertState.Enable"
|
||||
@renewed="init"
|
||||
/>
|
||||
|
||||
<AutoCertStepOne
|
||||
v-if="data.auto_cert === AutoCertState.Enable"
|
||||
style="max-width: 600px"
|
||||
hide-note
|
||||
/>
|
||||
<AForm
|
||||
layout="vertical"
|
||||
style="max-width: 600px"
|
||||
>
|
||||
<AFormItem :label="$gettext('SSL Certificate Path')">
|
||||
<AInput v-model:value="data.ssl_certificate_path" />
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('SSL Certificate Key Path')">
|
||||
<AInput v-model:value="data.ssl_certificate_key_path" />
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('SSL Certificate Content')">
|
||||
<CodeEditor
|
||||
v-model:content="data.ssl_certificate"
|
||||
default-height="300px"
|
||||
:readonly="!notShowInAutoCert"
|
||||
/>
|
||||
</AFormItem>
|
||||
<AFormItem :label="$gettext('SSL Certificate Key Content')">
|
||||
<CodeEditor
|
||||
v-model:content="data.ssl_certificate_key"
|
||||
default-height="300px"
|
||||
:readonly="!notShowInAutoCert"
|
||||
/>
|
||||
</AFormItem>
|
||||
</AForm>
|
||||
</ACol>
|
||||
<ACol
|
||||
v-if="data.auto_cert === AutoCertState.Enable"
|
||||
:sm="24"
|
||||
:md="12"
|
||||
>
|
||||
<ACard :title="$gettext('Log')">
|
||||
<pre
|
||||
class="log-container"
|
||||
v-html="log"
|
||||
/>
|
||||
</ACard>
|
||||
</ACol>
|
||||
</ARow>
|
||||
|
||||
<FooterToolBar>
|
||||
<ASpace>
|
||||
<AButton @click="$router.push('/certificates/list')">
|
||||
{{ $gettext('Back') }}
|
||||
</AButton>
|
||||
|
||||
<AButton
|
||||
type="primary"
|
||||
@click="save"
|
||||
>
|
||||
{{ $gettext('Save') }}
|
||||
</AButton>
|
||||
</ASpace>
|
||||
</FooterToolBar>
|
||||
</ACard>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.log-container {
|
||||
overflow: scroll;
|
||||
padding: 5px;
|
||||
margin-bottom: 0;
|
||||
|
||||
font-size: 12px;
|
||||
line-height: 2;
|
||||
}
|
||||
</style>
|
68
app/src/views/certificate/RenewCert.vue
Normal file
68
app/src/views/certificate/RenewCert.vue
Normal file
|
@ -0,0 +1,68 @@
|
|||
<script setup lang="ts">
|
||||
import { useGettext } from 'vue3-gettext'
|
||||
import type { Ref } from 'vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import ObtainCertLive from '@/views/domain/cert/components/ObtainCertLive.vue'
|
||||
import type { Cert } from '@/api/cert'
|
||||
|
||||
const emit = defineEmits<{
|
||||
renewed: [void]
|
||||
}>()
|
||||
|
||||
const { $gettext } = useGettext()
|
||||
|
||||
const modalVisible = ref(false)
|
||||
const modalClosable = ref(true)
|
||||
|
||||
const refObtainCertLive = ref()
|
||||
|
||||
const data = inject('data') as Ref<Cert>
|
||||
|
||||
const issue_cert = () => {
|
||||
modalVisible.value = true
|
||||
|
||||
refObtainCertLive.value.issue_cert(data.value.name, data.value.domains, () => {
|
||||
message.success($gettext('Renew successfully'))
|
||||
emit('renewed')
|
||||
})
|
||||
}
|
||||
|
||||
const issuing_cert = ref(false)
|
||||
|
||||
provide('issuing_cert', issuing_cert)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<AButton
|
||||
type="primary"
|
||||
ghost
|
||||
class="mb-6"
|
||||
@click="issue_cert"
|
||||
>
|
||||
{{ $gettext('Renew Certificate') }}
|
||||
</AButton>
|
||||
<AModal
|
||||
v-model:open="modalVisible"
|
||||
:title="$gettext('Renew Certificate')"
|
||||
:mask-closable="modalClosable"
|
||||
:footer="null"
|
||||
:closable="modalClosable"
|
||||
:width="600"
|
||||
force-render
|
||||
>
|
||||
<ObtainCertLive
|
||||
ref="refObtainCertLive"
|
||||
v-model:modal-closable="modalClosable"
|
||||
v-model:modal-visible="modalVisible"
|
||||
/>
|
||||
</AModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.control-btn {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
|
@ -34,7 +34,10 @@ const enabled = computed({
|
|||
<h2>
|
||||
{{ $gettext('Certificate Status') }}
|
||||
</h2>
|
||||
<CertInfo :cert="certInfo" />
|
||||
<CertInfo
|
||||
:cert="certInfo"
|
||||
class="mb-4"
|
||||
/>
|
||||
|
||||
<ChangeCert />
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ const { $gettext } = useGettext()
|
|||
<template>
|
||||
<div
|
||||
v-if="cert"
|
||||
class="cert-info pb-4"
|
||||
class="cert-info"
|
||||
>
|
||||
<p>
|
||||
{{ $gettext('Intermediate Certification Authorities: %{issuer}', { issuer: cert.issuer_name }) }}
|
||||
|
|
|
@ -67,27 +67,6 @@ async function onchange() {
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less">
|
||||
.dark {
|
||||
.issue-cert-log-container {
|
||||
background-color: rgba(0, 0, 0, 0.84);
|
||||
}
|
||||
}
|
||||
.issue-cert-log-container {
|
||||
height: 320px;
|
||||
overflow: scroll;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
margin-top: 15px;
|
||||
padding: 10px;
|
||||
|
||||
p {
|
||||
font-size: 12px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.ant-tag {
|
||||
margin: 0;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<script setup lang="ts">
|
||||
import { useGettext } from 'vue3-gettext'
|
||||
import type { Ref } from 'vue'
|
||||
import type { DnsChallenge } from '@/api/auto_cert'
|
||||
import DNSChallenge from '@/views/domain/cert/components/DNSChallenge.vue'
|
||||
|
||||
|
@ -12,10 +13,11 @@ const { $gettext } = useGettext()
|
|||
const no_server_name = inject('no_server_name')
|
||||
|
||||
// Provide by ObtainCert.vue
|
||||
const data = inject('data') as DnsChallenge
|
||||
const data = inject('data') as Ref<DnsChallenge>
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<template v-if="no_server_name">
|
||||
<AAlert
|
||||
:message="$gettext('Warning')"
|
||||
|
@ -72,6 +74,7 @@ const data = inject('data') as DnsChallenge
|
|||
</AFormItem>
|
||||
</AForm>
|
||||
<DNSChallenge v-if="data.challenge_method === 'dns01'" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
|
|
@ -14,10 +14,10 @@ const credentials = ref<SelectProps['options']>([])
|
|||
// is the object that you are trying to modify it
|
||||
// we externalize the dns_credential_id to the parent component,
|
||||
// this is used to tell the backend which dns_credential to use
|
||||
const data = inject('data') as DNSProvider & { dns_credential_id: number | null }
|
||||
const data = inject('data') as Ref<DNSProvider & { dns_credential_id: number | null }>
|
||||
|
||||
const code = computed(() => {
|
||||
return data.code
|
||||
return data.value.code
|
||||
})
|
||||
|
||||
const provider_idx = ref()
|
||||
|
@ -38,12 +38,12 @@ watch(code, init)
|
|||
|
||||
watch(current, () => {
|
||||
credentials.value = []
|
||||
data.code = current.value.code
|
||||
data.provider = current.value.name
|
||||
data.value.code = current.value.code
|
||||
data.value.provider = current.value.name
|
||||
if (mounted.value)
|
||||
data.dns_credential_id = null
|
||||
data.value.dns_credential_id = null
|
||||
|
||||
dns_credential.get_list({ provider: data.provider }).then(r => {
|
||||
dns_credential.get_list({ provider: data.value.provider }).then(r => {
|
||||
r.data.forEach(v => {
|
||||
credentials.value?.push({
|
||||
value: v.id,
|
||||
|
@ -60,10 +60,10 @@ onMounted(async () => {
|
|||
init()
|
||||
})
|
||||
|
||||
if (data.dns_credential_id) {
|
||||
await dns_credential.get(data.dns_credential_id).then(r => {
|
||||
data.code = r.code
|
||||
data.provider = r.provider
|
||||
if (data.value.dns_credential_id) {
|
||||
await dns_credential.get(data.value.dns_credential_id).then(r => {
|
||||
data.value.code = r.code
|
||||
data.value.provider = r.provider
|
||||
provider_idx.value = providers.value.findIndex(v => v.code === r.code)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
import { useGettext } from 'vue3-gettext'
|
||||
import { Modal, message } from 'ant-design-vue'
|
||||
import type { Ref } from 'vue'
|
||||
import websocket from '@/lib/websocket'
|
||||
import template from '@/api/template'
|
||||
import domain from '@/api/domain'
|
||||
import AutoCertStepOne from '@/views/domain/cert/components/AutoCertStepOne.vue'
|
||||
import type { NgxConfig, NgxDirective } from '@/api/ngx'
|
||||
import type { Props } from '@/views/domain/cert/IssueCert.vue'
|
||||
import type { DnsChallenge } from '@/api/auto_cert'
|
||||
import ObtainCertLive from '@/views/domain/cert/components/ObtainCertLive.vue'
|
||||
|
||||
const emit = defineEmits(['update:auto_cert'])
|
||||
|
||||
|
@ -20,29 +20,20 @@ const directivesMap = inject('directivesMap') as Ref<Record<string, NgxDirective
|
|||
|
||||
const [modal, ContextHolder] = Modal.useModal()
|
||||
|
||||
const progressStrokeColor = {
|
||||
from: '#108ee9',
|
||||
to: '#87d068',
|
||||
}
|
||||
|
||||
const data: DnsChallenge = reactive({
|
||||
dns_credential_id: 0,
|
||||
const data = ref({
|
||||
dns_credential_id: null,
|
||||
challenge_method: 'http01',
|
||||
code: '',
|
||||
configuration: {
|
||||
credentials: {},
|
||||
additional: {},
|
||||
},
|
||||
})
|
||||
}) as Ref<DnsChallenge>
|
||||
|
||||
const progressPercent = ref(0)
|
||||
const progressStatus = ref('active')
|
||||
const modalClosable = ref(true)
|
||||
|
||||
provide('data', data)
|
||||
|
||||
const logContainer = ref()
|
||||
|
||||
const save_site_config = inject('save_site_config') as () => Promise<void>
|
||||
const no_server_name = inject('no_server_name') as Ref<boolean>
|
||||
const props = inject('props') as Props
|
||||
|
@ -54,67 +45,26 @@ const name = computed(() => {
|
|||
return directivesMap.value.server_name[0].params.trim()
|
||||
})
|
||||
|
||||
const issue_cert = async (config_name: string, server_name: string) => {
|
||||
progressStatus.value = 'active'
|
||||
modalClosable.value = false
|
||||
modalVisible.value = true
|
||||
progressPercent.value = 0
|
||||
logContainer.value.innerHTML = ''
|
||||
const refObtainCertLive = ref()
|
||||
|
||||
log($gettext('Getting the certificate, please wait...'))
|
||||
|
||||
const ws = websocket(`/api/domain/${config_name}/cert`, false)
|
||||
|
||||
ws.onopen = () => {
|
||||
ws.send(JSON.stringify({
|
||||
server_name: server_name.trim().split(' '),
|
||||
...data,
|
||||
}))
|
||||
}
|
||||
|
||||
ws.onmessage = m => {
|
||||
const r = JSON.parse(m.data)
|
||||
|
||||
log(r.message)
|
||||
|
||||
// eslint-disable-next-line sonarjs/no-small-switch
|
||||
switch (r.status) {
|
||||
case 'info':
|
||||
// If it's a lego log, do not increase the percent.
|
||||
if (!r.message.includes('[INFO]'))
|
||||
progressPercent.value += 5
|
||||
|
||||
break
|
||||
default:
|
||||
modalClosable.value = true
|
||||
issuing_cert.value = false
|
||||
|
||||
if (r.status === 'success' && r.ssl_certificate !== undefined && r.ssl_certificate_key !== undefined) {
|
||||
progressStatus.value = 'success'
|
||||
progressPercent.value = 100
|
||||
callback(r.ssl_certificate, r.ssl_certificate_key)
|
||||
change_auto_cert(true)
|
||||
}
|
||||
else {
|
||||
progressStatus.value = 'exception'
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
const issue_cert = (config_name: string, server_name: string) => {
|
||||
refObtainCertLive.value.issue_cert(config_name, server_name.trim().split(' '), callback)
|
||||
}
|
||||
|
||||
async function callback(ssl_certificate: string, ssl_certificate_key: string) {
|
||||
directivesMap.value.ssl_certificate[0].params = ssl_certificate
|
||||
directivesMap.value.ssl_certificate_key[0].params = ssl_certificate_key
|
||||
await save_site_config()
|
||||
change_auto_cert(true)
|
||||
emit('update:auto_cert', true)
|
||||
}
|
||||
|
||||
function change_auto_cert(status: boolean) {
|
||||
if (status) {
|
||||
domain.add_auto_cert(props.configName, {
|
||||
domains: name.value.trim().split(' '),
|
||||
challenge_method: data.challenge_method,
|
||||
dns_credential_id: data.dns_credential_id,
|
||||
challenge_method: data.value.challenge_method,
|
||||
dns_credential_id: data.value.dns_credential_id,
|
||||
}).then(() => {
|
||||
message.success(interpolate($gettext('Auto-renewal enabled for %{name}'), { name: name.value }))
|
||||
}).catch(e => {
|
||||
|
@ -190,17 +140,6 @@ function job() {
|
|||
issue_cert(props.configName, name.value)
|
||||
})
|
||||
}
|
||||
|
||||
function log(msg: string) {
|
||||
const para = document.createElement('p')
|
||||
|
||||
para.appendChild(document.createTextNode($gettext(msg)))
|
||||
|
||||
logContainer.value.appendChild(para)
|
||||
|
||||
logContainer.value?.scroll({ top: 100000, left: 0, behavior: 'smooth' })
|
||||
}
|
||||
|
||||
function toggle(status: boolean) {
|
||||
if (status) {
|
||||
modal.confirm({
|
||||
|
@ -231,10 +170,10 @@ const can_next = computed(() => {
|
|||
return false
|
||||
}
|
||||
else {
|
||||
if (data.challenge_method === 'http01')
|
||||
if (data.value.challenge_method === 'http01')
|
||||
return true
|
||||
else if (data.challenge_method === 'dns01')
|
||||
return data?.code ?? false
|
||||
else if (data.value.challenge_method === 'dns01')
|
||||
return data.value?.code ?? false
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -253,21 +192,17 @@ function next() {
|
|||
:mask-closable="modalClosable"
|
||||
:footer="null"
|
||||
:closable="modalClosable"
|
||||
:width="600"
|
||||
force-render
|
||||
>
|
||||
<template v-if="step === 1">
|
||||
<AutoCertStepOne />
|
||||
</template>
|
||||
<template v-else-if="step === 2">
|
||||
<AProgress
|
||||
:stroke-color="progressStrokeColor"
|
||||
:percent="progressPercent"
|
||||
:status="progressStatus"
|
||||
/>
|
||||
|
||||
<div
|
||||
ref="logContainer"
|
||||
class="issue-cert-log-container"
|
||||
<ObtainCertLive
|
||||
ref="refObtainCertLive"
|
||||
v-model:modal-closable="modalClosable"
|
||||
v-model:modal-visible="modalVisible"
|
||||
/>
|
||||
</template>
|
||||
<div
|
||||
|
|
163
app/src/views/domain/cert/components/ObtainCertLive.vue
Normal file
163
app/src/views/domain/cert/components/ObtainCertLive.vue
Normal file
|
@ -0,0 +1,163 @@
|
|||
<script setup lang="ts">
|
||||
import type { Ref } from 'vue'
|
||||
import { useGettext } from 'vue3-gettext'
|
||||
import websocket from '@/lib/websocket'
|
||||
import type { DnsChallenge } from '@/api/auto_cert'
|
||||
|
||||
const props = defineProps<{
|
||||
modalClosable: boolean
|
||||
modalVisible: boolean
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
'update:modalClosable': [value: boolean]
|
||||
'update:modalVisible': [value: boolean]
|
||||
}>()
|
||||
|
||||
const modalClosable = computed({
|
||||
get() {
|
||||
return props.modalClosable
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modalClosable', value)
|
||||
},
|
||||
})
|
||||
|
||||
const modalVisible = computed({
|
||||
get() {
|
||||
return props.modalVisible
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modalVisible', value)
|
||||
},
|
||||
})
|
||||
|
||||
const { $gettext } = useGettext()
|
||||
|
||||
const issuing_cert = inject('issuing_cert') as Ref<boolean>
|
||||
const data = inject('data') as Ref<DnsChallenge>
|
||||
|
||||
const progressStrokeColor = {
|
||||
from: '#108ee9',
|
||||
to: '#87d068',
|
||||
}
|
||||
|
||||
const progressPercent = ref(0)
|
||||
const progressStatus = ref('active')
|
||||
|
||||
const logContainer = ref()
|
||||
|
||||
function log(msg: string) {
|
||||
const para = document.createElement('p')
|
||||
|
||||
para.appendChild(document.createTextNode($gettext(msg)))
|
||||
|
||||
logContainer.value.appendChild(para)
|
||||
|
||||
logContainer.value?.scroll({ top: 100000, left: 0, behavior: 'smooth' })
|
||||
}
|
||||
|
||||
const issue_cert = async (config_name: string, server_name: string[],
|
||||
callback?: (ssl_certificate: string, ssl_certificate_key: string) => void) => {
|
||||
progressStatus.value = 'active'
|
||||
modalClosable.value = false
|
||||
modalVisible.value = true
|
||||
progressPercent.value = 0
|
||||
logContainer.value.innerHTML = ''
|
||||
|
||||
log($gettext('Getting the certificate, please wait...'))
|
||||
|
||||
const ws = websocket(`/api/domain/${config_name}/cert`, false)
|
||||
|
||||
ws.onopen = () => {
|
||||
ws.send(JSON.stringify({
|
||||
server_name,
|
||||
...data.value,
|
||||
}))
|
||||
}
|
||||
|
||||
ws.onmessage = async m => {
|
||||
const r = JSON.parse(m.data)
|
||||
|
||||
const regex = /\[Nginx UI\] (.*)/
|
||||
|
||||
const matches = r.message.match(regex)
|
||||
|
||||
if (matches && matches.length > 1) {
|
||||
const extractedText = matches[1]
|
||||
|
||||
r.message = r.message.replaceAll(extractedText, $gettext(extractedText))
|
||||
}
|
||||
|
||||
log(r.message)
|
||||
|
||||
// eslint-disable-next-line sonarjs/no-small-switch
|
||||
switch (r.status) {
|
||||
case 'info':
|
||||
// If it is a nginx ui log, increase the percent.
|
||||
if (r.message.includes('[Nginx UI]'))
|
||||
progressPercent.value += 5
|
||||
|
||||
break
|
||||
default:
|
||||
modalClosable.value = true
|
||||
issuing_cert.value = false
|
||||
|
||||
if (r.status === 'success' && r.ssl_certificate !== undefined && r.ssl_certificate_key !== undefined) {
|
||||
progressStatus.value = 'success'
|
||||
progressPercent.value = 100
|
||||
if (callback)
|
||||
callback(r.ssl_certificate, r.ssl_certificate_key)
|
||||
}
|
||||
else {
|
||||
progressStatus.value = 'exception'
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
issue_cert,
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<AProgress
|
||||
:stroke-color="progressStrokeColor"
|
||||
:percent="progressPercent"
|
||||
:status="progressStatus"
|
||||
/>
|
||||
|
||||
<div
|
||||
ref="logContainer"
|
||||
class="issue-cert-log-container"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less">
|
||||
.dark {
|
||||
.issue-cert-log-container {
|
||||
background-color: rgba(0, 0, 0, 0.84);
|
||||
}
|
||||
}
|
||||
.issue-cert-log-container {
|
||||
height: 320px;
|
||||
overflow: scroll;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
margin-top: 15px;
|
||||
padding: 10px;
|
||||
|
||||
p {
|
||||
font-size: 12px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
|
@ -1 +1 @@
|
|||
{"version":"2.0.0-beta.4","build_id":72,"total_build":276}
|
||||
{"version":"2.0.0-beta.4","build_id":73,"total_build":277}
|
|
@ -1,61 +1,13 @@
|
|||
package cert
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/pkg/errors"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func handleIssueCertLogChan(logChan chan string) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logger.Error(err)
|
||||
}
|
||||
}()
|
||||
|
||||
for logString := range logChan {
|
||||
logger.Info("Auto Cert", logString)
|
||||
}
|
||||
}
|
||||
|
||||
type AutoCertErrorLog struct {
|
||||
buffer []string
|
||||
cert *model.Cert
|
||||
}
|
||||
|
||||
func (t *AutoCertErrorLog) SetCertModel(cert *model.Cert) {
|
||||
t.cert = cert
|
||||
}
|
||||
|
||||
func (t *AutoCertErrorLog) Push(text string, err error) {
|
||||
t.buffer = append(t.buffer, text+" "+err.Error())
|
||||
logger.Error("AutoCert", text, err)
|
||||
}
|
||||
|
||||
func (t *AutoCertErrorLog) Exit(text string, err error) {
|
||||
t.buffer = append(t.buffer, text+" "+err.Error())
|
||||
logger.Error("AutoCert", text, err)
|
||||
|
||||
if t.cert == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_ = t.cert.Updates(&model.Cert{
|
||||
Log: t.ToString(),
|
||||
})
|
||||
}
|
||||
|
||||
func (t *AutoCertErrorLog) ToString() (content string) {
|
||||
|
||||
for _, v := range t.buffer {
|
||||
content += fmt.Sprintf("[Error] %s\n", v)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func AutoObtain() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
|
@ -65,32 +17,40 @@ func AutoObtain() {
|
|||
logger.Info("AutoCert Worker Started")
|
||||
autoCertList := model.GetAutoCertList()
|
||||
for _, certModel := range autoCertList {
|
||||
certModel := certModel
|
||||
renew(certModel)
|
||||
}
|
||||
logger.Info("AutoCert Worker End")
|
||||
}
|
||||
|
||||
func renew(certModel *model.Cert) {
|
||||
confName := certModel.Filename
|
||||
|
||||
errLog := &AutoCertErrorLog{}
|
||||
errLog.SetCertModel(certModel)
|
||||
log := &Logger{}
|
||||
log.SetCertModel(certModel)
|
||||
defer log.Exit()
|
||||
|
||||
if len(certModel.Filename) == 0 {
|
||||
errLog.Exit("", errors.New("filename is empty"))
|
||||
continue
|
||||
log.Error(errors.New("filename is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
if len(certModel.Domains) == 0 {
|
||||
errLog.Exit(confName, errors.New("domains list is empty, "+
|
||||
"try to reopen auto-cert for this config:"+confName))
|
||||
continue
|
||||
log.Error(errors.New("domains list is empty, " +
|
||||
"try to reopen auto-cert for this config:" + confName))
|
||||
return
|
||||
}
|
||||
|
||||
if certModel.SSLCertificatePath != "" {
|
||||
cert, err := GetCertInfo(certModel.SSLCertificatePath)
|
||||
if err != nil {
|
||||
errLog.Push("get cert info", err)
|
||||
// Get certificate info error, ignore this domain
|
||||
continue
|
||||
// Get certificate info error, ignore this certificate
|
||||
log.Error(errors.Wrap(err, "get certificate info error"))
|
||||
return
|
||||
}
|
||||
// every week
|
||||
if time.Now().Sub(cert.NotBefore).Hours()/24 < 7 {
|
||||
continue
|
||||
// not between 1 week, ignore this certificate
|
||||
return
|
||||
}
|
||||
}
|
||||
// after 1 mo, reissue certificate
|
||||
|
@ -104,25 +64,17 @@ func AutoObtain() {
|
|||
DNSCredentialID: certModel.DnsCredentialID,
|
||||
}
|
||||
|
||||
// logChan and errChan should be closed inside IssueCert
|
||||
// errChan will be closed inside IssueCert
|
||||
go IssueCert(payload, logChan, errChan)
|
||||
|
||||
go handleIssueCertLogChan(logChan)
|
||||
go func() {
|
||||
for logString := range logChan {
|
||||
log.Info(strings.TrimSpace(logString))
|
||||
}
|
||||
}()
|
||||
|
||||
// block, unless errChan closed
|
||||
for err := range errChan {
|
||||
errLog.Push("issue cert", err)
|
||||
log.Error(err)
|
||||
}
|
||||
|
||||
logStr := errLog.ToString()
|
||||
if logStr != "" {
|
||||
// store error log to db
|
||||
_ = certModel.Updates(&model.Cert{
|
||||
Log: errLog.ToString(),
|
||||
})
|
||||
} else {
|
||||
certModel.ClearLog()
|
||||
}
|
||||
}
|
||||
logger.Info("AutoCert Worker End")
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package cert
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"crypto/ecdsa"
|
||||
"crypto/elliptic"
|
||||
"crypto/rand"
|
||||
|
@ -15,16 +14,16 @@ import (
|
|||
"github.com/go-acme/lego/v4/certificate"
|
||||
"github.com/go-acme/lego/v4/challenge/http01"
|
||||
"github.com/go-acme/lego/v4/lego"
|
||||
lego_log "github.com/go-acme/lego/v4/log"
|
||||
dns_providers "github.com/go-acme/lego/v4/providers/dns"
|
||||
legolog "github.com/go-acme/lego/v4/log"
|
||||
dnsproviders "github.com/go-acme/lego/v4/providers/dns"
|
||||
"github.com/go-acme/lego/v4/registration"
|
||||
"github.com/pkg/errors"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -32,43 +31,12 @@ const (
|
|||
DNS01 = "dns01"
|
||||
)
|
||||
|
||||
// MyUser You'll need a user or account type that implements acme.User
|
||||
type MyUser struct {
|
||||
Email string
|
||||
Registration *registration.Resource
|
||||
Key crypto.PrivateKey
|
||||
}
|
||||
|
||||
func (u *MyUser) GetEmail() string {
|
||||
return u.Email
|
||||
}
|
||||
|
||||
func (u *MyUser) GetRegistration() *registration.Resource {
|
||||
return u.Registration
|
||||
}
|
||||
|
||||
func (u *MyUser) GetPrivateKey() crypto.PrivateKey {
|
||||
return u.Key
|
||||
}
|
||||
|
||||
type ConfigPayload struct {
|
||||
ServerName []string `json:"server_name"`
|
||||
ChallengeMethod string `json:"challenge_method"`
|
||||
DNSCredentialID int `json:"dns_credential_id"`
|
||||
}
|
||||
|
||||
type channelWriter struct {
|
||||
ch chan []byte
|
||||
}
|
||||
|
||||
func (cw *channelWriter) Write(p []byte) (n int, err error) {
|
||||
n = len(p)
|
||||
temp := make([]byte, n)
|
||||
copy(temp, p)
|
||||
cw.ch <- temp
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
|
@ -76,44 +44,41 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
}
|
||||
}()
|
||||
|
||||
defer close(logChan)
|
||||
// initial a channelWriter to receive logs
|
||||
cw := NewChannelWriter()
|
||||
defer close(errChan)
|
||||
|
||||
// Use a channel to receive lego log
|
||||
logChannel := make(chan []byte, 1024)
|
||||
defer close(logChannel)
|
||||
// initial a logger
|
||||
l := log.New(os.Stderr, "", log.LstdFlags)
|
||||
l.SetOutput(cw)
|
||||
|
||||
// Hijack the (logger) of lego
|
||||
legolog.Logger = l
|
||||
|
||||
domain := payload.ServerName
|
||||
|
||||
// Create a user. New accounts need an email and private key to start.
|
||||
logChan <- "Generating private key for registering account"
|
||||
l.Println("[INFO] [Nginx UI] Generating private key for registering account")
|
||||
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "issue cert generate key error")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Preparing lego configurations"
|
||||
myUser := MyUser{
|
||||
l.Println("[INFO] [Nginx UI] Preparing lego configurations")
|
||||
user := User{
|
||||
Email: settings.ServerSettings.Email,
|
||||
Key: privateKey,
|
||||
}
|
||||
|
||||
// Hijack the (logger) of lego
|
||||
cw := &channelWriter{ch: logChannel}
|
||||
multiWriter := io.MultiWriter(os.Stderr, cw)
|
||||
l := log.New(os.Stderr, "", log.LstdFlags)
|
||||
l.SetOutput(multiWriter)
|
||||
lego_log.Logger = l
|
||||
|
||||
// Start a goroutine to fetch and process logs from channel
|
||||
go func() {
|
||||
for msg := range logChannel {
|
||||
for msg := range cw.Ch {
|
||||
logChan <- string(msg)
|
||||
}
|
||||
}()
|
||||
|
||||
config := lego.NewConfig(&myUser)
|
||||
config := lego.NewConfig(&user)
|
||||
|
||||
if settings.ServerSettings.Demo {
|
||||
config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
|
@ -130,7 +95,7 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
|
||||
config.Certificate.KeyType = certcrypto.RSA2048
|
||||
|
||||
logChan <- "Creating client facilitates communication with the CA server"
|
||||
l.Println("[INFO] [Nginx UI] Creating client facilitates communication with the CA server")
|
||||
// A client facilitates communication with the CA server.
|
||||
client, err := lego.NewClient(config)
|
||||
if err != nil {
|
||||
|
@ -142,7 +107,7 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
default:
|
||||
fallthrough
|
||||
case HTTP01:
|
||||
logChan <- "Using HTTP01 challenge provider"
|
||||
l.Println("[INFO] [Nginx UI] Setting HTTP01 challenge provider")
|
||||
err = client.Challenge.SetHTTP01Provider(
|
||||
http01.NewProviderServer("",
|
||||
settings.ServerSettings.HTTPChallengePort,
|
||||
|
@ -156,24 +121,24 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
return
|
||||
}
|
||||
|
||||
logChan <- "Using DNS01 challenge provider"
|
||||
l.Println("[INFO] [Nginx UI] Setting DNS01 challenge provider")
|
||||
code := dnsCredential.Config.Code
|
||||
pConfig, ok := dns.GetProvider(code)
|
||||
|
||||
if !ok {
|
||||
errChan <- errors.Wrap(err, "provider not found")
|
||||
}
|
||||
logChan <- "Setting environment variables"
|
||||
l.Println("[INFO] [Nginx UI] Setting environment variables")
|
||||
if dnsCredential.Config.Configuration != nil {
|
||||
err = pConfig.SetEnv(*dnsCredential.Config.Configuration)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
defer func() {
|
||||
logChan <- "Cleaning environment variables"
|
||||
pConfig.CleanEnv()
|
||||
l.Println("[INFO] [Nginx UI] Cleaned environment variables")
|
||||
}()
|
||||
provider, err := dns_providers.NewDNSChallengeProviderByName(code)
|
||||
provider, err := dnsproviders.NewDNSChallengeProviderByName(code)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
|
@ -186,28 +151,28 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
}
|
||||
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "fail to challenge")
|
||||
errChan <- errors.Wrap(err, "challenge error")
|
||||
return
|
||||
}
|
||||
|
||||
// New users will need to register
|
||||
logChan <- "Registering user"
|
||||
l.Println("[INFO] [Nginx UI] Registering user")
|
||||
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "fail to register")
|
||||
errChan <- errors.Wrap(err, "register error")
|
||||
return
|
||||
}
|
||||
myUser.Registration = reg
|
||||
user.Registration = reg
|
||||
|
||||
request := certificate.ObtainRequest{
|
||||
Domains: domain,
|
||||
Bundle: true,
|
||||
}
|
||||
|
||||
logChan <- "Obtaining certificate"
|
||||
l.Println("[INFO] [Nginx UI] Obtaining certificate")
|
||||
certificates, err := client.Certificate.Obtain(request)
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "fail to obtain")
|
||||
errChan <- errors.Wrap(err, "obtain certificate error")
|
||||
return
|
||||
}
|
||||
name := strings.Join(domain, "_")
|
||||
|
@ -215,34 +180,37 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
|
|||
if _, err = os.Stat(saveDir); os.IsNotExist(err) {
|
||||
err = os.MkdirAll(saveDir, 0755)
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "fail to mkdir")
|
||||
errChan <- errors.Wrap(err, "mkdir error")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Each certificate comes back with the cert bytes, the bytes of the client's
|
||||
// private key, and a certificate URL. SAVE THESE TO DISK.
|
||||
logChan <- "Writing certificate to disk"
|
||||
l.Println("[INFO] [Nginx UI] Writing certificate to disk")
|
||||
err = os.WriteFile(filepath.Join(saveDir, "fullchain.cer"),
|
||||
certificates.Certificate, 0644)
|
||||
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
|
||||
errChan <- errors.Wrap(err, "write fullchain.cer error")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Writing certificate private key to disk"
|
||||
l.Println("[INFO] [Nginx UI] Writing certificate private key to disk")
|
||||
err = os.WriteFile(filepath.Join(saveDir, "private.key"),
|
||||
certificates.PrivateKey, 0644)
|
||||
|
||||
if err != nil {
|
||||
errChan <- errors.Wrap(err, "fail to write key")
|
||||
errChan <- errors.Wrap(err, "write private.key error")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Reloading nginx"
|
||||
l.Println("[INFO] [Nginx UI] Reloading nginx")
|
||||
|
||||
nginx.Reload()
|
||||
|
||||
logChan <- "Finished"
|
||||
l.Println("[INFO] [Nginx UI] Finished")
|
||||
|
||||
// Wait log to be written
|
||||
time.Sleep(5 * time.Second)
|
||||
}
|
||||
|
|
|
@ -5,9 +5,17 @@ import (
|
|||
"encoding/pem"
|
||||
"github.com/pkg/errors"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
func GetCertInfo(sslCertificatePath string) (cert *x509.Certificate, err error) {
|
||||
type Info struct {
|
||||
SubjectName string `json:"subject_name"`
|
||||
IssuerName string `json:"issuer_name"`
|
||||
NotAfter time.Time `json:"not_after"`
|
||||
NotBefore time.Time `json:"not_before"`
|
||||
}
|
||||
|
||||
func GetCertInfo(sslCertificatePath string) (info *Info, err error) {
|
||||
certData, err := os.ReadFile(sslCertificatePath)
|
||||
|
||||
if err != nil {
|
||||
|
@ -22,12 +30,19 @@ func GetCertInfo(sslCertificatePath string) (cert *x509.Certificate, err error)
|
|||
return
|
||||
}
|
||||
|
||||
cert, err = x509.ParseCertificate(block.Bytes)
|
||||
cert, err := x509.ParseCertificate(block.Bytes)
|
||||
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, "certificate parsing error")
|
||||
return
|
||||
}
|
||||
|
||||
info = &Info{
|
||||
SubjectName: cert.Subject.CommonName,
|
||||
IssuerName: cert.Issuer.CommonName,
|
||||
NotAfter: cert.NotAfter,
|
||||
NotBefore: cert.NotBefore,
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
43
internal/cert/issue.go
Normal file
43
internal/cert/issue.go
Normal file
|
@ -0,0 +1,43 @@
|
|||
package cert
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"github.com/go-acme/lego/v4/registration"
|
||||
)
|
||||
|
||||
type ChannelWriter struct {
|
||||
Ch chan []byte
|
||||
}
|
||||
|
||||
func NewChannelWriter() *ChannelWriter {
|
||||
return &ChannelWriter{
|
||||
Ch: make(chan []byte, 1024),
|
||||
}
|
||||
}
|
||||
|
||||
func (cw *ChannelWriter) Write(p []byte) (n int, err error) {
|
||||
n = len(p)
|
||||
temp := make([]byte, n)
|
||||
copy(temp, p)
|
||||
cw.Ch <- temp
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// User You'll need a user or account type that implements acme.User
|
||||
type User struct {
|
||||
Email string
|
||||
Registration *registration.Resource
|
||||
Key crypto.PrivateKey
|
||||
}
|
||||
|
||||
func (u *User) GetEmail() string {
|
||||
return u.Email
|
||||
}
|
||||
|
||||
func (u *User) GetRegistration() *registration.Resource {
|
||||
return u.Registration
|
||||
}
|
||||
|
||||
func (u *User) GetPrivateKey() crypto.PrivateKey {
|
||||
return u.Key
|
||||
}
|
46
internal/cert/logger.go
Normal file
46
internal/cert/logger.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package cert
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Logger struct {
|
||||
buffer []string
|
||||
cert *model.Cert
|
||||
}
|
||||
|
||||
func (t *Logger) SetCertModel(cert *model.Cert) {
|
||||
t.cert = cert
|
||||
}
|
||||
|
||||
func (t *Logger) Info(text string) {
|
||||
t.buffer = append(t.buffer, strings.TrimSpace(text))
|
||||
logger.Info("AutoCert", strings.TrimSpace(text))
|
||||
}
|
||||
|
||||
func (t *Logger) Error(err error) {
|
||||
t.buffer = append(t.buffer, fmt.Sprintf("%s [Error] %s",
|
||||
time.Now().Format("2006/01/02 15:04:05"),
|
||||
strings.TrimSpace(err.Error()),
|
||||
))
|
||||
logger.Error("AutoCert", err)
|
||||
}
|
||||
|
||||
func (t *Logger) Exit() {
|
||||
if t.cert == nil {
|
||||
return
|
||||
}
|
||||
|
||||
_ = t.cert.Updates(&model.Cert{
|
||||
Log: t.ToString(),
|
||||
})
|
||||
}
|
||||
|
||||
func (t *Logger) ToString() (content string) {
|
||||
content = strings.Join(t.buffer, "\n")
|
||||
return
|
||||
}
|
46
internal/cert/write_file.go
Normal file
46
internal/cert/write_file.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package cert
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type Content struct {
|
||||
SSLCertificatePath string `json:"ssl_certificate_path" binding:"required"`
|
||||
SSLCertificateKeyPath string `json:"ssl_certificate_key_path" binding:"required"`
|
||||
SSLCertificate string `json:"ssl_certificate"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key"`
|
||||
}
|
||||
|
||||
func (c *Content) WriteFile() (err error) {
|
||||
// MkdirAll creates a directory named path, along with any necessary parents,
|
||||
// and returns nil, or else returns an error.
|
||||
// The permission bits perm (before umask) are used for all directories that MkdirAll creates.
|
||||
// If path is already a directory, MkdirAll does nothing and returns nil.
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(c.SSLCertificatePath), 0644)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Dir(c.SSLCertificateKeyPath), 0644)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if c.SSLCertificate != "" {
|
||||
err = os.WriteFile(c.SSLCertificatePath, []byte(c.SSLCertificate), 0644)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if c.SSLCertificateKey != "" {
|
||||
err = os.WriteFile(c.SSLCertificateKeyPath, []byte(c.SSLCertificateKey), 0644)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
|
@ -72,24 +72,6 @@ func GetAutoCertList() (c []*Cert) {
|
|||
return
|
||||
}
|
||||
|
||||
func GetCertList(name, domain string) (c []Cert) {
|
||||
tx := db
|
||||
if name != "" {
|
||||
tx = tx.Where("name LIKE ? or domain LIKE ?", "%"+name+"%", "%"+name+"%")
|
||||
}
|
||||
if domain != "" {
|
||||
tx = tx.Where("domain LIKE ?", "%"+domain+"%")
|
||||
}
|
||||
tx.Find(&c)
|
||||
return
|
||||
}
|
||||
|
||||
func FirstCertByID(id int) (c Cert, err error) {
|
||||
err = db.First(&c, id).Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Cert) Updates(n *Cert) error {
|
||||
return db.Model(&Cert{}).Where("id", c.ID).Updates(n).Error
|
||||
}
|
||||
|
|
|
@ -63,7 +63,6 @@ func mapTo(section string, v interface{}) {
|
|||
}
|
||||
|
||||
func reflectFrom(section string, v interface{}) {
|
||||
log.Print(section, v)
|
||||
err := Conf.Section(section).ReflectFrom(v)
|
||||
if err != nil {
|
||||
log.Fatalf("Cfg.ReflectFrom %s err: %v", section, err)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue