Browse Source

feat: add proxy option for acme user

Jacky 6 months ago
parent
commit
46a9ccbdf1

+ 10 - 6
api/certificate/acme_user.go

@@ -24,9 +24,11 @@ func GetAcmeUser(c *gin.Context) {
 
 
 func CreateAcmeUser(c *gin.Context) {
 func CreateAcmeUser(c *gin.Context) {
 	cosy.Core[model.AcmeUser](c).SetValidRules(gin.H{
 	cosy.Core[model.AcmeUser](c).SetValidRules(gin.H{
-		"name":   "required",
-		"email":  "required,email",
-		"ca_dir": "omitempty",
+		"name":                "required",
+		"email":               "required,email",
+		"ca_dir":              "omitempty",
+		"proxy":               "omitempty",
+		"register_on_startup": "omitempty",
 	}).BeforeExecuteHook(func(ctx *cosy.Ctx[model.AcmeUser]) {
 	}).BeforeExecuteHook(func(ctx *cosy.Ctx[model.AcmeUser]) {
 		if ctx.Model.CADir == "" {
 		if ctx.Model.CADir == "" {
 			ctx.Model.CADir = settings.ServerSettings.GetCADir()
 			ctx.Model.CADir = settings.ServerSettings.GetCADir()
@@ -41,9 +43,11 @@ func CreateAcmeUser(c *gin.Context) {
 
 
 func ModifyAcmeUser(c *gin.Context) {
 func ModifyAcmeUser(c *gin.Context) {
 	cosy.Core[model.AcmeUser](c).SetValidRules(gin.H{
 	cosy.Core[model.AcmeUser](c).SetValidRules(gin.H{
-		"name":   "omitempty",
-		"email":  "omitempty,email",
-		"ca_dir": "omitempty",
+		"name":                "omitempty",
+		"email":               "omitempty,email",
+		"ca_dir":              "omitempty",
+		"proxy":               "omitempty",
+		"register_on_startup": "omitempty",
 	}).BeforeExecuteHook(func(ctx *cosy.Ctx[model.AcmeUser]) {
 	}).BeforeExecuteHook(func(ctx *cosy.Ctx[model.AcmeUser]) {
 		if ctx.Model.CADir == "" {
 		if ctx.Model.CADir == "" {
 			ctx.Model.CADir = settings.ServerSettings.GetCADir()
 			ctx.Model.CADir = settings.ServerSettings.GetCADir()

+ 95 - 69
app/src/language/en/app.po

@@ -25,13 +25,13 @@ msgstr "About"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Username"
 msgstr "Username"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -42,8 +42,8 @@ msgstr "Username"
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -67,8 +67,8 @@ msgstr "Edit Configuration"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Add Directive Below"
 msgstr "Add Directive Below"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Add Location"
 msgstr "Add Location"
 
 
@@ -169,7 +169,7 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
@@ -190,7 +190,7 @@ msgstr ""
 msgid "Auth"
 msgid "Auth"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -215,7 +215,7 @@ msgstr "Auto-renewal disabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -227,7 +227,7 @@ msgstr "Back"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "Back"
 msgstr "Back"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr ""
 msgstr ""
 
 
@@ -273,7 +273,7 @@ msgstr ""
 msgid "Build with"
 msgid "Build with"
 msgstr "Build with"
 msgstr "Build with"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
@@ -287,7 +287,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -377,8 +377,8 @@ msgid "Command"
 msgstr "Comments"
 msgstr "Comments"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "Comments"
 msgstr "Comments"
@@ -413,8 +413,8 @@ msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "Content"
 msgstr "Content"
 
 
@@ -760,7 +760,7 @@ msgstr "Edit Site"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "Edit Site"
 msgstr "Edit Site"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 #, fuzzy
 #, fuzzy
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
@@ -1006,7 +1006,7 @@ msgstr ""
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
@@ -1061,7 +1061,7 @@ msgstr ""
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
@@ -1079,7 +1079,7 @@ msgstr "Enabled successfully"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
@@ -1098,7 +1098,7 @@ msgstr "Invalid E-mail!"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -1151,8 +1151,13 @@ msgstr "Leave blank for no change"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Leave blank for no change"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 #, fuzzy
 #, fuzzy
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "Leave blank for no change"
 msgstr "Leave blank for no change"
@@ -1171,7 +1176,7 @@ msgstr "License"
 msgid "Link Start"
 msgid "Link Start"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr ""
 msgstr ""
 
 
@@ -1195,15 +1200,15 @@ msgstr "Saved successfully"
 msgid "Local"
 msgid "Local"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 #, fuzzy
 #, fuzzy
 msgid "Log"
 msgid "Log"
 msgstr "Login"
 msgstr "Login"
@@ -1289,7 +1294,7 @@ msgid "Model"
 msgstr "Advance Mode"
 msgstr "Advance Mode"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
@@ -1305,7 +1310,7 @@ msgstr "Certificate Status"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Modify Config"
 msgstr "Modify Config"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "Modify Config"
 msgstr "Modify Config"
@@ -1316,7 +1321,7 @@ msgid "Multi-line Directive"
 msgstr "Single Directive"
 msgstr "Single Directive"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1411,7 +1416,7 @@ msgstr "Saved successfully"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1475,7 +1480,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
@@ -1515,7 +1520,7 @@ msgstr ""
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1568,8 +1573,8 @@ msgid "Password (*)"
 msgstr "Password (*)"
 msgstr "Password (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "Path"
 msgstr "Path"
 
 
@@ -1591,7 +1596,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr ""
 msgstr ""
 
 
@@ -1646,6 +1651,10 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
+#: src/views/environment/Environment.vue:47
+msgid "Please select at least one node to upgrade"
+msgstr ""
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1682,6 +1691,10 @@ msgstr "Project Team"
 msgid "Provider"
 msgid "Provider"
 msgstr ""
 msgstr ""
 
 
+#: src/views/certificate/ACMEUser.vue:48
+msgid "Proxy"
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1701,7 +1714,7 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr ""
 msgstr ""
@@ -1722,21 +1735,31 @@ msgstr ""
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Enable failed"
 msgstr "Enable failed"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+msgid "Register On Startup"
+msgstr ""
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
@@ -1745,7 +1768,7 @@ msgstr "Enabled successfully"
 msgid "Registering user"
 msgid "Registering user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr ""
 msgstr ""
 
 
@@ -1878,7 +1901,7 @@ msgid "Running"
 msgstr ""
 msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -2010,22 +2033,22 @@ msgstr "Sites List"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Sites List"
 msgstr "Sites List"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
@@ -2042,7 +2065,7 @@ msgstr "Login"
 msgid "Stable"
 msgid "Stable"
 msgstr "Enabled"
 msgstr "Enabled"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2138,7 +2161,7 @@ msgstr "Certificate is valid"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr ""
 msgstr ""
 
 
@@ -2177,11 +2200,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 #, fuzzy
 #, fuzzy
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
@@ -2192,12 +2215,12 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 #, fuzzy
 #, fuzzy
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr ""
 msgstr ""
 
 
@@ -2250,9 +2273,9 @@ msgstr ""
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr ""
 msgstr ""
 
 
@@ -2314,11 +2337,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
@@ -2333,7 +2356,7 @@ msgstr ""
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2348,7 +2371,7 @@ msgstr "Updated at"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr ""
 msgstr ""
@@ -2379,11 +2402,11 @@ msgstr "Uptime:"
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -2404,7 +2427,7 @@ msgstr "Username"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2424,11 +2447,11 @@ msgstr ""
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "View Mode"
 msgid "View Mode"
 msgstr "Basic Mode"
 msgstr "Basic Mode"
@@ -2452,6 +2475,13 @@ msgid ""
 "Nginx. Are you sure you want to continue?"
 "Nginx. Are you sure you want to continue?"
 msgstr ""
 msgstr ""
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2466,7 +2496,7 @@ msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2519,10 +2549,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "Enabled"
 #~ msgstr "Enabled"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Leave blank for no change"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Config Name"
 #~ msgid "Config Name"
 #~ msgstr "Configuration Name"
 #~ msgstr "Configuration Name"

+ 98 - 69
app/src/language/es/app.po

@@ -32,12 +32,12 @@ msgstr "Acerca de"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Logs de acceso"
 msgstr "Logs de acceso"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Usuario ACME"
 msgstr "Usuario ACME"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -48,8 +48,8 @@ msgstr "Usuario ACME"
 msgid "Action"
 msgid "Action"
 msgstr "Acción"
 msgstr "Acción"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -72,8 +72,8 @@ msgstr "Agregar configuración"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Añadir directiva a continuación"
 msgstr "Añadir directiva a continuación"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Agregar Ubicación"
 msgstr "Agregar Ubicación"
 
 
@@ -163,7 +163,7 @@ msgstr "¿Está seguro de que quiere borrar esta directiva?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "¿Está seguro de que desea eliminar este elemento?"
 msgstr "¿Está seguro de que desea eliminar este elemento?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 
 
@@ -183,7 +183,7 @@ msgstr "Intentos"
 msgid "Auth"
 msgid "Auth"
 msgstr "Autenticación"
 msgstr "Autenticación"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -208,7 +208,7 @@ msgstr "Renovación automática deshabilitada por %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Renovación automática habilitada por %{name}"
 msgstr "Renovación automática habilitada por %{name}"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -219,7 +219,7 @@ msgstr "Volver"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "Volver al Inicio"
 msgstr "Volver al Inicio"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr "Volver a la lista"
 msgstr "Volver a la lista"
 
 
@@ -263,7 +263,7 @@ msgstr "Actualización por lotes"
 msgid "Build with"
 msgid "Build with"
 msgstr "Desarrollado con"
 msgstr "Desarrollado con"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "Dir CA"
 msgstr "Dir CA"
 
 
@@ -277,7 +277,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -358,8 +358,8 @@ msgid "Command"
 msgstr "Comando"
 msgstr "Comando"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "Comentarios"
 msgstr "Comentarios"
@@ -393,8 +393,8 @@ msgid "Connection lost, please refresh the page."
 msgstr "Conexión perdida, por favor actualice la página."
 msgstr "Conexión perdida, por favor actualice la página."
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "Contenido"
 msgstr "Contenido"
 
 
@@ -727,7 +727,7 @@ msgstr "Editar Sitio"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "Editar Transmisión"
 msgstr "Editar Transmisión"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 msgid "Email"
 msgid "Email"
 msgstr "Correo"
 msgstr "Correo"
 
 
@@ -962,7 +962,7 @@ msgstr "Puerto HTTP"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
 msgstr "Si se deja en blanco, se utilizará el directorio CA predeterminado."
 
 
@@ -1023,7 +1023,7 @@ msgstr "Inicializando la actualización del kernel"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr "Ingrese el código de la aplicación:"
 msgstr "Ingrese el código de la aplicación:"
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Ingrese el código de recuperación:"
 msgstr "Ingrese el código de recuperación:"
@@ -1040,7 +1040,7 @@ msgstr "Instalación exitosa"
 msgid "Interval"
 msgid "Interval"
 msgstr "Intervalo"
 msgstr "Intervalo"
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Inválido"
 msgstr "Inválido"
 
 
@@ -1057,7 +1057,7 @@ msgstr "Nombre de archivo inválido"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr "Nombre de carpeta inválido"
 msgstr "Nombre de carpeta inválido"
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr "Código de acceso o código de recuperación inválido"
 msgstr "Código de acceso o código de recuperación inválido"
 
 
@@ -1107,8 +1107,13 @@ msgstr "Para no modificar dejar en blanco"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/"
 msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Para no modificar dejar en blanco"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "Dejarlo en blanco no cambiará nada"
 msgstr "Dejarlo en blanco no cambiará nada"
 
 
@@ -1125,7 +1130,7 @@ msgstr "Licencia"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "Iniciar conexión"
 msgstr "Iniciar conexión"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr "Lista"
 msgstr "Lista"
 
 
@@ -1146,15 +1151,15 @@ msgstr "Cargado con éxito"
 msgid "Local"
 msgid "Local"
 msgstr "Local"
 msgstr "Local"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Ubicación"
 msgstr "Ubicación"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Ubicaciones"
 msgstr "Ubicaciones"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 msgid "Log"
 msgid "Log"
 msgstr "Registro"
 msgstr "Registro"
 
 
@@ -1242,7 +1247,7 @@ msgid "Model"
 msgstr "Modelo"
 msgstr "Modelo"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1256,7 +1261,7 @@ msgstr "Modificar Certificado"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Modificar configuración"
 msgstr "Modificar configuración"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "Modo Modificar"
 msgstr "Modo Modificar"
 
 
@@ -1265,7 +1270,7 @@ msgid "Multi-line Directive"
 msgstr "Directiva multilínea"
 msgstr "Directiva multilínea"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1355,7 +1360,7 @@ msgstr "Nginx reiniciado con éxito"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1418,7 +1423,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr "Desconectado"
 msgstr "Desconectado"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr "Ok"
 msgstr "Ok"
@@ -1458,7 +1463,7 @@ msgstr "En línea"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1510,8 +1515,8 @@ msgid "Password (*)"
 msgstr "Contraseña (*)"
 msgstr "Contraseña (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "Ruta"
 msgstr "Ruta"
 
 
@@ -1533,7 +1538,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 #, fuzzy
 #, fuzzy
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr "Por favor, ingrese el código 2FA:"
 msgstr "Por favor, ingrese el código 2FA:"
@@ -1596,6 +1601,11 @@ msgstr ""
 "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
 "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
 "están todas en segundos."
 "están todas en segundos."
 
 
+#: src/views/environment/Environment.vue:47
+#, fuzzy
+msgid "Please select at least one node to upgrade"
+msgstr "¡Seleccione al menos un nodo!"
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1631,6 +1641,11 @@ msgstr "Grupo del proyecto"
 msgid "Provider"
 msgid "Provider"
 msgstr "Proveedor"
 msgstr "Proveedor"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+#, fuzzy
+msgid "Proxy"
+msgstr "Proxy de la API"
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1649,7 +1664,7 @@ msgstr "Recuperar"
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Recuperado con éxito"
 msgstr "Recuperado con éxito"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr "Recuperación"
 msgstr "Recuperación"
@@ -1670,20 +1685,31 @@ msgstr "Servidores de nombres recursivos"
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Regenerar respuesta"
 msgstr "Regenerar respuesta"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr "Registrar"
 msgstr "Registrar"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Fallo en el registro"
 msgstr "Fallo en el registro"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "Esto de registración"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Registrado con éxito"
 msgstr "Registrado con éxito"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Registrado con éxito"
 msgstr "Registrado con éxito"
 
 
@@ -1691,7 +1717,7 @@ msgstr "Registrado con éxito"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Registrando Usuario"
 msgstr "Registrando Usuario"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Esto de registración"
 msgstr "Esto de registración"
 
 
@@ -1812,7 +1838,7 @@ msgid "Running"
 msgstr "Corriendo"
 msgstr "Corriendo"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -1945,19 +1971,19 @@ msgstr "Registros del sitio"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Lista de sitios"
 msgstr "Lista de sitios"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Contenido de certificado SSL"
 msgstr "Contenido de certificado SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "Contenido de la llave del certificado SSL"
 msgstr "Contenido de la llave del certificado SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "Ruta de la llave del certificado SSL"
 msgstr "Ruta de la llave del certificado SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "Ruta del certificado SSL"
 msgstr "Ruta del certificado SSL"
 
 
@@ -1971,7 +1997,7 @@ msgstr "Acceso SSO"
 msgid "Stable"
 msgid "Stable"
 msgstr "Estable"
 msgstr "Estable"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2066,7 +2092,7 @@ msgstr "Error de Configuración de Sincronización"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Configuración de sincronización exitosa"
 msgstr "Configuración de sincronización exitosa"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr "Sincronizar con"
 msgstr "Sincronizar con"
 
 
@@ -2106,11 +2132,11 @@ msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 msgstr ""
 "El nombre del archivo no puede contener los siguientes caracteres: %{c}"
 "El nombre del archivo no puede contener los siguientes caracteres: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr "La entrada no es un Certificado SSL"
 msgstr "La entrada no es un Certificado SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "La entrada no es una clave de certificado SSL"
 msgstr "La entrada no es una clave de certificado SSL"
 
 
@@ -2122,11 +2148,11 @@ msgstr ""
 "El nombre del modelo solo debe contener letras, unicode, números, guiones, "
 "El nombre del modelo solo debe contener letras, unicode, números, guiones, "
 "rayas y puntos."
 "rayas y puntos."
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "La ruta existe, pero el archivo no es un certificado"
 msgstr "La ruta existe, pero el archivo no es un certificado"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr "La ruta existe, pero el archivo no es una clave privada"
 msgstr "La ruta existe, pero el archivo no es una clave privada"
 
 
@@ -2185,9 +2211,9 @@ msgstr "Este elemento de Auto Cert es inválido, elimínelo por favor."
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "Este certificado es administrado por Nginx UI"
 msgstr "Este certificado es administrado por Nginx UI"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr "Este campo es obligatorio"
 msgstr "Este campo es obligatorio"
 
 
@@ -2261,11 +2287,11 @@ msgstr ""
 "TOTP es un método de autenticación de dos factores que utiliza un algoritmo "
 "TOTP es un método de autenticación de dos factores que utiliza un algoritmo "
 "de contraseña de un solo uso basado en el tiempo."
 "de contraseña de un solo uso basado en el tiempo."
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr "Basura"
 msgstr "Basura"
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr "Se requiere autenticación de dos factores"
 msgstr "Se requiere autenticación de dos factores"
 
 
@@ -2280,7 +2306,7 @@ msgstr "Tipo"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Actualización exitosa"
 msgstr "Actualización exitosa"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2294,7 +2320,7 @@ msgstr "Actualizado a"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Actualización exitosa"
 msgstr "Actualización exitosa"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Actualizar"
 msgstr "Actualizar"
@@ -2323,11 +2349,11 @@ msgstr "Tiempo encendido:"
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr "Usar OTP"
 msgstr "Usar OTP"
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "Usar código de recuperación"
 msgstr "Usar código de recuperación"
 
 
@@ -2347,7 +2373,7 @@ msgstr "Nombre de usuario"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nombre de usuario (*)"
 msgstr "Nombre de usuario (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2366,11 +2392,11 @@ msgstr "Ver"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Ver todas las notificaciones"
 msgstr "Ver todas las notificaciones"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr "Ver detalles"
 msgstr "Ver detalles"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "View Mode"
 msgid "View Mode"
 msgstr "Modo de vista"
 msgstr "Modo de vista"
 
 
@@ -2397,6 +2423,13 @@ msgstr ""
 "Eliminaremos la configuración de HTTPChallenge de este archivo y "
 "Eliminaremos la configuración de HTTPChallenge de este archivo y "
 "recargaremos Nginx. ¿Estás seguro de que quieres continuar?"
 "recargaremos Nginx. ¿Estás seguro de que quieres continuar?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2411,7 +2444,7 @@ msgid "Writing certificate to disk"
 msgstr "Escribir certificado a disco"
 msgstr "Escribir certificado a disco"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2484,10 +2517,6 @@ msgstr ""
 #~ msgid "The path exists, but the file is not a public key"
 #~ msgid "The path exists, but the file is not a public key"
 #~ msgstr "La ruta existe, pero el archivo no es una clave pública"
 #~ msgstr "La ruta existe, pero el archivo no es una clave pública"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Para no modificar dejar en blanco"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Auto Cert is enabled"
 #~ msgid "Auto Cert is enabled"
 #~ msgstr "Certificado automático"
 #~ msgstr "Certificado automático"

+ 97 - 69
app/src/language/fr_FR/app.po

@@ -27,13 +27,13 @@ msgstr "À propos"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Journaux d'accès"
 msgstr "Journaux d'accès"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -44,8 +44,8 @@ msgstr "Nom d'utilisateur"
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -69,8 +69,8 @@ msgstr "Modifier la configuration"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Ajouter une directive"
 msgstr "Ajouter une directive"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Ajouter une localisation"
 msgstr "Ajouter une localisation"
 
 
@@ -171,7 +171,7 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgstr "Voulez-vous vraiment supprimer cette directive ?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 
 
@@ -193,7 +193,7 @@ msgstr ""
 msgid "Auth"
 msgid "Auth"
 msgstr "Autheur"
 msgstr "Autheur"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -218,7 +218,7 @@ msgstr "Renouvellement automatique désactivé pour %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Renouvellement automatique activé pour %{name}"
 msgstr "Renouvellement automatique activé pour %{name}"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -229,7 +229,7 @@ msgstr "Retour"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "Retour au menu principal"
 msgstr "Retour au menu principal"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr ""
 msgstr ""
 
 
@@ -275,7 +275,7 @@ msgstr "Mettre à niveau"
 msgid "Build with"
 msgid "Build with"
 msgstr "Build avec"
 msgstr "Build avec"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
@@ -289,7 +289,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -378,8 +378,8 @@ msgid "Command"
 msgstr "Commentaires"
 msgstr "Commentaires"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "Commentaires"
 msgstr "Commentaires"
@@ -413,8 +413,8 @@ msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "Contenu"
 msgstr "Contenu"
 
 
@@ -760,7 +760,7 @@ msgstr "Modifier le site"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "Modifier le site"
 msgstr "Modifier le site"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 #, fuzzy
 #, fuzzy
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
@@ -1007,7 +1007,7 @@ msgstr "Port HTTP"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
@@ -1064,7 +1064,7 @@ msgstr "Initialisation du programme de mise à niveau du core"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
@@ -1081,7 +1081,7 @@ msgstr "Installé avec succès"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr ""
 msgstr ""
 
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -1151,8 +1151,13 @@ msgstr "Laisser vide pour aucun changement"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/"
 msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Laisser vide pour aucun changement"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 #, fuzzy
 #, fuzzy
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "Laisser vide pour aucun changement"
 msgstr "Laisser vide pour aucun changement"
@@ -1171,7 +1176,7 @@ msgstr "Licence"
 msgid "Link Start"
 msgid "Link Start"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr ""
 msgstr ""
 
 
@@ -1195,17 +1200,17 @@ msgstr "Enregistré avec succès"
 msgid "Local"
 msgid "Local"
 msgstr "Localisation"
 msgstr "Localisation"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 #, fuzzy
 #, fuzzy
 msgid "Location"
 msgid "Location"
 msgstr "Localisation"
 msgstr "Localisation"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 #, fuzzy
 #, fuzzy
 msgid "Locations"
 msgid "Locations"
 msgstr "Localisations"
 msgstr "Localisations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 #, fuzzy
 #, fuzzy
 msgid "Log"
 msgid "Log"
 msgstr "Connexion"
 msgstr "Connexion"
@@ -1291,7 +1296,7 @@ msgid "Model"
 msgstr "Mode d'exécution"
 msgstr "Mode d'exécution"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1306,7 +1311,7 @@ msgstr "État du certificat"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Modifier la configuration"
 msgstr "Modifier la configuration"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "Modifier"
 msgstr "Modifier"
@@ -1316,7 +1321,7 @@ msgid "Multi-line Directive"
 msgstr "Directive multiligne"
 msgstr "Directive multiligne"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1409,7 +1414,7 @@ msgstr "Nginx a redémarré avec succès"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1473,7 +1478,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
@@ -1513,7 +1518,7 @@ msgstr ""
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1565,8 +1570,8 @@ msgid "Password (*)"
 msgstr "Mot de passe (*)"
 msgstr "Mot de passe (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "Chemin"
 msgstr "Chemin"
 
 
@@ -1588,7 +1593,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr ""
 msgstr ""
 
 
@@ -1650,6 +1655,10 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
+#: src/views/environment/Environment.vue:47
+msgid "Please select at least one node to upgrade"
+msgstr ""
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1686,6 +1695,11 @@ msgstr "Groupe de projet"
 msgid "Provider"
 msgid "Provider"
 msgstr "Fournisseur"
 msgstr "Fournisseur"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+#, fuzzy
+msgid "Proxy"
+msgstr "Proxy d'API"
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 #, fuzzy
 #, fuzzy
@@ -1707,7 +1721,7 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Enregistré avec succès"
 msgstr "Enregistré avec succès"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr ""
 msgstr ""
@@ -1728,22 +1742,33 @@ msgstr ""
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Régénérer la réponse"
 msgstr "Régénérer la réponse"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "Enregistrement de l'utilisateur"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Activé avec succès"
 msgstr "Activé avec succès"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Activé avec succès"
 msgstr "Activé avec succès"
@@ -1752,7 +1777,7 @@ msgstr "Activé avec succès"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
@@ -1885,7 +1910,7 @@ msgid "Running"
 msgstr "En cours d'éxécution"
 msgstr "En cours d'éxécution"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -2017,21 +2042,21 @@ msgstr "Journaux du site"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Liste des sites"
 msgstr "Liste des sites"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Contenu de la certification SSL"
 msgstr "Contenu de la certification SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "Contenu de la clé de certification SSL"
 msgstr "Contenu de la clé de certification SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "Chemin de la clé du certificat SSL"
 msgstr "Chemin de la clé du certificat SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "Chemin du certificat SSL"
 msgstr "Chemin du certificat SSL"
 
 
@@ -2047,7 +2072,7 @@ msgstr "Connexion"
 msgid "Stable"
 msgid "Stable"
 msgstr "Tableau"
 msgstr "Tableau"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2144,7 +2169,7 @@ msgstr "Changer de certificat"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr ""
 msgstr ""
 
 
@@ -2183,11 +2208,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
 msgstr "Le nom de fichier ne peut pas contenir les caractères suivants : %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 #, fuzzy
 #, fuzzy
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "Chemin de la clé du certificat SSL"
 msgstr "Chemin de la clé du certificat SSL"
@@ -2198,12 +2223,12 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 #, fuzzy
 #, fuzzy
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "Chemin de la clé du certificat SSL"
 msgstr "Chemin de la clé du certificat SSL"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr ""
 msgstr ""
 
 
@@ -2260,9 +2285,9 @@ msgstr ""
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr ""
 msgstr ""
 
 
@@ -2328,11 +2353,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
@@ -2347,7 +2372,7 @@ msgstr "Type"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Mis à jour avec succés"
 msgstr "Mis à jour avec succés"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2361,7 +2386,7 @@ msgstr "Mis à jour le"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Mis à jour avec succés"
 msgstr "Mis à jour avec succés"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Mettre à niveau"
 msgstr "Mettre à niveau"
@@ -2391,11 +2416,11 @@ msgstr "Disponibilité :"
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -2416,7 +2441,7 @@ msgstr "Nom d'utilisateur"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nom d'utilisateur (*)"
 msgstr "Nom d'utilisateur (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2437,11 +2462,11 @@ msgstr "Voir"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Certification"
 msgstr "Certification"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "View Mode"
 msgid "View Mode"
 msgstr "Mode simple"
 msgstr "Mode simple"
@@ -2467,6 +2492,13 @@ msgstr ""
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2481,7 +2513,7 @@ msgid "Writing certificate to disk"
 msgstr "Écriture du certificat sur le disque"
 msgstr "Écriture du certificat sur le disque"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2551,10 +2583,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "Tableau"
 #~ msgstr "Tableau"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Laisser vide pour aucun changement"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Auto Cert is enabled"
 #~ msgid "Auto Cert is enabled"
 #~ msgstr "Auto Cert"
 #~ msgstr "Auto Cert"

+ 98 - 69
app/src/language/ko_KR/app.po

@@ -30,12 +30,12 @@ msgstr "대하여"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "접근 로그"
 msgstr "접근 로그"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 사용자"
 msgstr "ACME 사용자"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -46,8 +46,8 @@ msgstr "ACME 사용자"
 msgid "Action"
 msgid "Action"
 msgstr "작업"
 msgstr "작업"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -70,8 +70,8 @@ msgstr "구성 추가"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "아래에 지시문 추가"
 msgstr "아래에 지시문 추가"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "위치 추가"
 msgstr "위치 추가"
 
 
@@ -161,7 +161,7 @@ msgstr "이 지시문을 정말로 제거하시겠습니까?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "이 항목을 제거하시겠습니까?"
 msgstr "이 항목을 제거하시겠습니까?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "이 위치를 제거하시겠습니까?"
 msgstr "이 위치를 제거하시겠습니까?"
 
 
@@ -181,7 +181,7 @@ msgstr "시도 횟수"
 msgid "Auth"
 msgid "Auth"
 msgstr "인증"
 msgstr "인증"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -206,7 +206,7 @@ msgstr "%{name}에 대한 자동 갱신 비활성화됨"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "%{name}에 대한 자동 갱신 활성화됨"
 msgstr "%{name}에 대한 자동 갱신 활성화됨"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -217,7 +217,7 @@ msgstr "뒤로"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "홈으로"
 msgstr "홈으로"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr "목록으로 돌아가기"
 msgstr "목록으로 돌아가기"
 
 
@@ -261,7 +261,7 @@ msgstr "배치 업그레이드"
 msgid "Build with"
 msgid "Build with"
 msgstr "빌드 환경"
 msgstr "빌드 환경"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "CA 디렉토리"
 msgstr "CA 디렉토리"
 
 
@@ -275,7 +275,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -358,8 +358,8 @@ msgid "Command"
 msgstr "명령어"
 msgstr "명령어"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "댓글"
 msgstr "댓글"
@@ -393,8 +393,8 @@ msgid "Connection lost, please refresh the page."
 msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요."
 msgstr "연결이 끊어졌습니다. 페이지를 새로 고침하세요."
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "내용"
 msgstr "내용"
 
 
@@ -724,7 +724,7 @@ msgstr "사이트 편집"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "스트림 편집"
 msgstr "스트림 편집"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 #, fuzzy
 #, fuzzy
 msgid "Email"
 msgid "Email"
 msgstr "이메일 (*)"
 msgstr "이메일 (*)"
@@ -968,7 +968,7 @@ msgstr "HTTP 포트"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
@@ -1024,7 +1024,7 @@ msgstr "코어 업그레이더 초기화"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
@@ -1042,7 +1042,7 @@ msgstr "성공적으로 활성화됨"
 msgid "Interval"
 msgid "Interval"
 msgstr "간격"
 msgstr "간격"
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "유효함"
 msgstr "유효함"
@@ -1061,7 +1061,7 @@ msgstr "Invalid E-mail!"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -1114,8 +1114,13 @@ msgstr "변경사항이 없으면 비워두세요"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "기본값을 사용하려면 비워 두세요: https://api.openai.com/"
 msgstr "기본값을 사용하려면 비워 두세요: https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Leave blank for no change"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 #, fuzzy
 #, fuzzy
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "변경사항이 없으면 비워두세요"
 msgstr "변경사항이 없으면 비워두세요"
@@ -1134,7 +1139,7 @@ msgstr "라이센스"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "링크 시작"
 msgstr "링크 시작"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr ""
 msgstr ""
 
 
@@ -1158,15 +1163,15 @@ msgstr "성공적으로 저장됨"
 msgid "Local"
 msgid "Local"
 msgstr "지역"
 msgstr "지역"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "위치"
 msgstr "위치"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "위치들"
 msgstr "위치들"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 #, fuzzy
 #, fuzzy
 msgid "Log"
 msgid "Log"
 msgstr "로그인"
 msgstr "로그인"
@@ -1257,7 +1262,7 @@ msgid "Model"
 msgstr "실행 모드"
 msgstr "실행 모드"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
@@ -1273,7 +1278,7 @@ msgstr "인증서 상태"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "설정 수정"
 msgstr "설정 수정"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "설정 수정"
 msgstr "설정 수정"
@@ -1284,7 +1289,7 @@ msgid "Multi-line Directive"
 msgstr "단일 지시문"
 msgstr "단일 지시문"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1379,7 +1384,7 @@ msgstr "Nginx가 성공적으로 재시작됨"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1443,7 +1448,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr "오프라인"
 msgstr "오프라인"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
@@ -1483,7 +1488,7 @@ msgstr "온라인"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "오픈AI"
 msgstr "오픈AI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1536,8 +1541,8 @@ msgid "Password (*)"
 msgstr "비밀번호 (*)"
 msgstr "비밀번호 (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "경로"
 msgstr "경로"
 
 
@@ -1559,7 +1564,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr ""
 msgstr ""
 
 
@@ -1616,6 +1621,11 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 
 
+#: src/views/environment/Environment.vue:47
+#, fuzzy
+msgid "Please select at least one node to upgrade"
+msgstr "적어도 하나의 노드를 선택해주세요!"
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1652,6 +1662,11 @@ msgstr "프로젝트 팀"
 msgid "Provider"
 msgid "Provider"
 msgstr "제공자"
 msgstr "제공자"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+#, fuzzy
+msgid "Proxy"
+msgstr "API 프록시"
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1671,7 +1686,7 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "성공적으로 제거됨"
 msgstr "성공적으로 제거됨"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr ""
 msgstr ""
@@ -1692,22 +1707,33 @@ msgstr ""
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "응답 재생성"
 msgstr "응답 재생성"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "사용자 등록 중"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "성공적으로 갱신됨"
 msgstr "성공적으로 갱신됨"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "성공적으로 갱신됨"
 msgstr "성공적으로 갱신됨"
@@ -1716,7 +1742,7 @@ msgstr "성공적으로 갱신됨"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
@@ -1851,7 +1877,7 @@ msgid "Running"
 msgstr "실행 중"
 msgstr "실행 중"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -1983,21 +2009,21 @@ msgstr "사이트 로그"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "사이트 목록"
 msgstr "사이트 목록"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "인증서 상태"
 msgstr "인증서 상태"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "SSL 인증서키 콘텐츠"
 msgstr "SSL 인증서키 콘텐츠"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "SSL 인증서 키 경로"
 msgstr "SSL 인증서 키 경로"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 #, fuzzy
 #, fuzzy
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "SSL 인증서 경로"
 msgstr "SSL 인증서 경로"
@@ -2014,7 +2040,7 @@ msgstr "SSO 로그인"
 msgid "Stable"
 msgid "Stable"
 msgstr "활성화됨"
 msgstr "활성화됨"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2110,7 +2136,7 @@ msgstr "인증서 갱신 오류"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr ""
 msgstr ""
 
 
@@ -2149,11 +2175,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "파일 이름은 다음 문자를 포함할 수 없습니다: %{c}"
 msgstr "파일 이름은 다음 문자를 포함할 수 없습니다: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr "입력이 SSL 인증서가 아닙니다"
 msgstr "입력이 SSL 인증서가 아닙니다"
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 #, fuzzy
 #, fuzzy
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
@@ -2164,12 +2190,12 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 #, fuzzy
 #, fuzzy
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr "경로는 존재하지만 파일은 개인 키가 아닙니다"
 msgstr "경로는 존재하지만 파일은 개인 키가 아닙니다"
 
 
@@ -2224,9 +2250,9 @@ msgstr "이 자동 인증 항목이 유효하지 않습니다. 제거해주세
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "이 인증서는 Nginx UI에서 관리됩니다"
 msgstr "이 인증서는 Nginx UI에서 관리됩니다"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr "이 필드는 필수입니다"
 msgstr "이 필드는 필수입니다"
 
 
@@ -2291,11 +2317,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
@@ -2310,7 +2336,7 @@ msgstr "유형"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "성공적으로 저장되었습니다"
 msgstr "성공적으로 저장되었습니다"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2325,7 +2351,7 @@ msgstr "업데이트됨"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "성공적으로 저장되었습니다"
 msgstr "성공적으로 저장되었습니다"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "업그레이드"
 msgstr "업그레이드"
@@ -2356,11 +2382,11 @@ msgstr "가동 시간:"
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -2381,7 +2407,7 @@ msgstr "사용자 이름"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "사용자 이름 (*)"
 msgstr "사용자 이름 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2402,12 +2428,12 @@ msgstr "보기"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #, fuzzy
 #, fuzzy
 msgid "View Details"
 msgid "View Details"
 msgstr "세부 사항"
 msgstr "세부 사항"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "View Mode"
 msgid "View Mode"
 msgstr "기본 모드"
 msgstr "기본 모드"
@@ -2435,6 +2461,13 @@ msgstr ""
 "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계"
 "이 파일에서 HTTPChallenge 구성을 제거하고 Nginx를 다시 로드할 예정입니다. 계"
 "속하시겠습니까?"
 "속하시겠습니까?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2449,7 +2482,7 @@ msgid "Writing certificate to disk"
 msgstr "인증서를 디스크에 쓰기"
 msgstr "인증서를 디스크에 쓰기"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2527,10 +2560,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "활성화됨"
 #~ msgstr "활성화됨"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Leave blank for no change"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Config Name"
 #~ msgid "Config Name"
 #~ msgstr "Configuration Name"
 #~ msgstr "Configuration Name"

+ 89 - 65
app/src/language/messages.pot

@@ -20,12 +20,12 @@ msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:142
 #: src/routes/index.ts:142
-#: src/views/certificate/ACMEUser.vue:76
+#: src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38
 #: src/views/config/configColumns.ts:38
@@ -38,8 +38,8 @@ msgstr ""
 msgid "Action"
 msgid "Action"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -63,8 +63,8 @@ msgstr ""
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr ""
 msgstr ""
 
 
@@ -156,7 +156,7 @@ msgstr ""
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
 
 
@@ -176,7 +176,7 @@ msgstr ""
 msgid "Auth"
 msgid "Auth"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -201,7 +201,7 @@ msgstr ""
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213
 #: src/views/config/ConfigEditor.vue:213
 #: src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181
 #: src/views/config/ConfigList.vue:181
@@ -215,7 +215,7 @@ msgstr ""
 msgid "Back Home"
 msgid "Back Home"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr ""
 msgstr ""
 
 
@@ -260,7 +260,7 @@ msgstr ""
 msgid "Build with"
 msgid "Build with"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
@@ -274,7 +274,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -356,8 +356,8 @@ msgid "Command"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr ""
 msgstr ""
@@ -391,8 +391,8 @@ msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr ""
 msgstr ""
 
 
@@ -724,7 +724,7 @@ msgstr ""
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 msgid "Email"
 msgid "Email"
 msgstr ""
 msgstr ""
 
 
@@ -964,7 +964,7 @@ msgstr ""
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
@@ -1014,7 +1014,7 @@ msgstr ""
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
@@ -1032,7 +1032,7 @@ msgstr ""
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr ""
 msgstr ""
 
 
@@ -1049,7 +1049,7 @@ msgstr ""
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -1098,8 +1098,12 @@ msgstr ""
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+msgid "Leave blank if you don't need this."
+msgstr ""
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr ""
 msgstr ""
 
 
@@ -1116,7 +1120,7 @@ msgstr ""
 msgid "Link Start"
 msgid "Link Start"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr ""
 msgstr ""
 
 
@@ -1137,15 +1141,15 @@ msgstr ""
 msgid "Local"
 msgid "Local"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 msgid "Log"
 msgid "Log"
 msgstr ""
 msgstr ""
 
 
@@ -1223,7 +1227,7 @@ msgid "Model"
 msgstr ""
 msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1238,7 +1242,7 @@ msgstr ""
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr ""
 msgstr ""
 
 
@@ -1247,7 +1251,7 @@ msgid "Multi-line Directive"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65
 #: src/views/config/components/Mkdir.vue:65
@@ -1341,7 +1345,7 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1401,7 +1405,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
@@ -1441,7 +1445,7 @@ msgstr ""
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:117
+#: src/components/TwoFA/Authorization.vue:117
 #: src/views/other/Login.vue:256
 #: src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
@@ -1492,8 +1496,8 @@ msgid "Password (*)"
 msgstr ""
 msgstr ""
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr ""
 msgstr ""
 
 
@@ -1513,7 +1517,7 @@ msgstr ""
 msgid "Please enter a name for the passkey you wish to create and click the OK button below."
 msgid "Please enter a name for the passkey you wish to create and click the OK button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr ""
 msgstr ""
 
 
@@ -1561,6 +1565,10 @@ msgstr ""
 msgid "Please note that the unit of time configurations below are all in seconds."
 msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
+#: src/views/environment/Environment.vue:47
+msgid "Please select at least one node to upgrade"
+msgstr ""
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1598,6 +1606,10 @@ msgstr ""
 msgid "Provider"
 msgid "Provider"
 msgstr ""
 msgstr ""
 
 
+#: src/views/certificate/ACMEUser.vue:48
+msgid "Proxy"
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1616,7 +1628,7 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr ""
 msgstr ""
@@ -1637,19 +1649,27 @@ msgstr ""
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid "Register a user or use this account to issue a certificate through an HTTP proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 msgid "Register failed"
 msgid "Register failed"
 msgstr ""
 msgstr ""
 
 
+#: src/views/certificate/ACMEUser.vue:72
+msgid "Register On Startup"
+msgstr ""
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr ""
 msgstr ""
 
 
@@ -1657,7 +1677,7 @@ msgstr ""
 msgid "Registering user"
 msgid "Registering user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr ""
 msgstr ""
 
 
@@ -1772,7 +1792,7 @@ msgid "Running"
 msgstr ""
 msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222
 #: src/views/config/ConfigEditor.vue:222
 #: src/views/domain/DomainEdit.vue:260
 #: src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
@@ -1907,19 +1927,19 @@ msgstr ""
 msgid "Sites List"
 msgid "Sites List"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr ""
 msgstr ""
 
 
@@ -1934,7 +1954,7 @@ msgstr ""
 msgid "Stable"
 msgid "Stable"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22
 #: src/views/domain/DomainList.vue:22
 #: src/views/environment/envColumns.tsx:78
 #: src/views/environment/envColumns.tsx:78
@@ -2017,7 +2037,7 @@ msgstr ""
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr ""
 msgstr ""
 
 
@@ -2051,11 +2071,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr ""
 msgstr ""
 
 
@@ -2063,11 +2083,11 @@ msgstr ""
 msgid "The model name should only contain letters, unicode, numbers, hyphens, dashes, and dots."
 msgid "The model name should only contain letters, unicode, numbers, hyphens, dashes, and dots."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr ""
 msgstr ""
 
 
@@ -2109,9 +2129,9 @@ msgstr ""
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr ""
 msgstr ""
 
 
@@ -2161,11 +2181,11 @@ msgstr ""
 msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm."
 msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm."
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
@@ -2179,7 +2199,7 @@ msgstr ""
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31
 #: src/views/config/configColumns.ts:31
 #: src/views/config/ConfigEditor.vue:275
 #: src/views/config/ConfigEditor.vue:275
@@ -2197,7 +2217,7 @@ msgid "Updated successfully"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:284
 #: src/routes/index.ts:284
-#: src/views/environment/Environment.vue:50
+#: src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145
 #: src/views/system/Upgrade.vue:145
 #: src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
@@ -2228,11 +2248,11 @@ msgstr ""
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -2253,7 +2273,7 @@ msgstr ""
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2272,11 +2292,11 @@ msgstr ""
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "View Mode"
 msgid "View Mode"
 msgstr ""
 msgstr ""
 
 
@@ -2296,6 +2316,10 @@ msgstr ""
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgstr ""
 msgstr ""
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid "When Enabled, Nginx UI will automatically re-register users upon startup. Generally, do not enable this unless you are in a dev environment and using Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2310,7 +2334,7 @@ msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"

+ 97 - 69
app/src/language/ru_RU/app.po

@@ -30,12 +30,12 @@ msgstr "О проекте"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Журнал доступа"
 msgstr "Журнал доступа"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Пользователь ACME"
 msgstr "Пользователь ACME"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -46,8 +46,8 @@ msgstr "Пользователь ACME"
 msgid "Action"
 msgid "Action"
 msgstr "Действие"
 msgstr "Действие"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -70,8 +70,8 @@ msgstr "Добавить конфигурацию"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Добавить директиву ниже"
 msgstr "Добавить директиву ниже"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Добавить Location"
 msgstr "Добавить Location"
 
 
@@ -162,7 +162,7 @@ msgstr "Вы уверены, что хотите удалить эту дире
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "Вы уверены, что хотите удалить этот элемент?"
 msgstr "Вы уверены, что хотите удалить этот элемент?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
@@ -183,7 +183,7 @@ msgstr "Попытки"
 msgid "Auth"
 msgid "Auth"
 msgstr "Авторизация"
 msgstr "Авторизация"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -208,7 +208,7 @@ msgstr "Автообновление отключено для %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Автообновление включено для %{name}"
 msgstr "Автообновление включено для %{name}"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -219,7 +219,7 @@ msgstr "Назад"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "Вернуться на главную"
 msgstr "Вернуться на главную"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr "Возврат к списку"
 msgstr "Возврат к списку"
 
 
@@ -264,7 +264,7 @@ msgstr "Пакетное обновление"
 msgid "Build with"
 msgid "Build with"
 msgstr "Собрать с"
 msgstr "Собрать с"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "Директория корневого сертификата"
 msgstr "Директория корневого сертификата"
 
 
@@ -278,7 +278,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -359,8 +359,8 @@ msgid "Command"
 msgstr "Команда"
 msgstr "Команда"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "Комментарии"
 msgstr "Комментарии"
@@ -394,8 +394,8 @@ msgid "Connection lost, please refresh the page."
 msgstr "Соединение потеряно, пожалуйста, обновите страницу."
 msgstr "Соединение потеряно, пожалуйста, обновите страницу."
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "Содержание"
 msgstr "Содержание"
 
 
@@ -727,7 +727,7 @@ msgstr "Редактировать Сайт"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "Редактировать поток"
 msgstr "Редактировать поток"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 msgid "Email"
 msgid "Email"
 msgstr "Электронная почта"
 msgstr "Электронная почта"
 
 
@@ -961,7 +961,7 @@ msgstr "Порт HTTP"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию."
 msgstr "Если оставить пустым, будет использоваться каталог CA по умолчанию."
 
 
@@ -1022,7 +1022,7 @@ msgstr "Инициализация программы обновления яд
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr "Введите код из приложения:"
 msgstr "Введите код из приложения:"
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "Введите код восстановления:"
 msgstr "Введите код восстановления:"
@@ -1039,7 +1039,7 @@ msgstr "Установка прошла успешно"
 msgid "Interval"
 msgid "Interval"
 msgstr "Интервал"
 msgstr "Интервал"
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Недействительно"
 msgstr "Недействительно"
 
 
@@ -1056,7 +1056,7 @@ msgstr "Неверное имя файла"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr "Недопустимое имя папки"
 msgstr "Недопустимое имя папки"
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr "Неверный пароль или код восстановления"
 msgstr "Неверный пароль или код восстановления"
 
 
@@ -1106,8 +1106,13 @@ msgstr "Оставьте пустым без изменений"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Оставьте пустым для значения по умолчанию: https://api.openai.com/"
 msgstr "Оставьте пустым для значения по умолчанию: https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Оставьте пустым без изменений"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "Если оставить пустым, ничего не изменится"
 msgstr "Если оставить пустым, ничего не изменится"
 
 
@@ -1124,7 +1129,7 @@ msgstr "Лицензия"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "Начало ссылки"
 msgstr "Начало ссылки"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr "Список"
 msgstr "Список"
 
 
@@ -1145,15 +1150,15 @@ msgstr "Загружено успешно"
 msgid "Local"
 msgid "Local"
 msgstr "Локальный"
 msgstr "Локальный"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 msgid "Log"
 msgid "Log"
 msgstr "Журнал"
 msgstr "Журнал"
 
 
@@ -1240,7 +1245,7 @@ msgid "Model"
 msgstr "Модель"
 msgstr "Модель"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1254,7 +1259,7 @@ msgstr "Изменить сертификат"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Изменить конфигурацию"
 msgstr "Изменить конфигурацию"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "Изменить режим"
 msgstr "Изменить режим"
 
 
@@ -1263,7 +1268,7 @@ msgid "Multi-line Directive"
 msgstr "Многострочная директива"
 msgstr "Многострочная директива"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1353,7 +1358,7 @@ msgstr "Nginx успешно перезапущен"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1416,7 +1421,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr "Оффлайн"
 msgstr "Оффлайн"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr "Ок"
 msgstr "Ок"
@@ -1456,7 +1461,7 @@ msgstr "Онлайн"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1508,8 +1513,8 @@ msgid "Password (*)"
 msgstr "Пароль (*)"
 msgstr "Пароль (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "Путь"
 msgstr "Путь"
 
 
@@ -1531,7 +1536,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 #, fuzzy
 #, fuzzy
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr "Пожалуйста, введите код 2FA:"
 msgstr "Пожалуйста, введите код 2FA:"
@@ -1594,6 +1599,11 @@ msgstr ""
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "указана в секундах."
 "указана в секундах."
 
 
+#: src/views/environment/Environment.vue:47
+#, fuzzy
+msgid "Please select at least one node to upgrade"
+msgstr "Пожалуйста, выберите хотя бы один узел!"
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1629,6 +1639,10 @@ msgstr "Команда проекта"
 msgid "Provider"
 msgid "Provider"
 msgstr "Провайдер"
 msgstr "Провайдер"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+msgid "Proxy"
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1647,7 +1661,7 @@ msgstr "Восстановить"
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Восстановлено успешно"
 msgstr "Восстановлено успешно"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr "Восстановление"
 msgstr "Восстановление"
@@ -1668,20 +1682,31 @@ msgstr "Рекурсивные DNS"
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Восстановить ответ"
 msgstr "Восстановить ответ"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr "Регистрация"
 msgstr "Регистрация"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Регистрация не удалась"
 msgstr "Регистрация не удалась"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "Статус регистрации"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Зарегистрировано успешно"
 msgstr "Зарегистрировано успешно"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Зарегистрировано успешно"
 msgstr "Зарегистрировано успешно"
 
 
@@ -1689,7 +1714,7 @@ msgstr "Зарегистрировано успешно"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Регистрация пользователя"
 msgstr "Регистрация пользователя"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Статус регистрации"
 msgstr "Статус регистрации"
 
 
@@ -1811,7 +1836,7 @@ msgid "Running"
 msgstr "Выполняется"
 msgstr "Выполняется"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -1944,19 +1969,19 @@ msgstr "Журналы сайта"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Список сайтов"
 msgstr "Список сайтов"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "Содержимое SSL-сертификата"
 msgstr "Содержимое SSL-сертификата"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "Содержимое ключа SSL-сертификата"
 msgstr "Содержимое ключа SSL-сертификата"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "Путь к ключу SSL-сертификата"
 msgstr "Путь к ключу SSL-сертификата"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "Путь к SSL сертификату"
 msgstr "Путь к SSL сертификату"
 
 
@@ -1970,7 +1995,7 @@ msgstr "SSO Вход"
 msgid "Stable"
 msgid "Stable"
 msgstr "Стабильный"
 msgstr "Стабильный"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2064,7 +2089,7 @@ msgstr "Ошибка синхронизации конфигурации"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Синхронизация конфигурации успешна"
 msgstr "Синхронизация конфигурации успешна"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr "Синхронизировать с"
 msgstr "Синхронизировать с"
 
 
@@ -2103,11 +2128,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 msgstr "The filename cannot contain the following characters: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr "Входные данные не являются SSL-сертификатом"
 msgstr "Входные данные не являются SSL-сертификатом"
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "Введенные данные не являются ключом SSL сертификата"
 msgstr "Введенные данные не являются ключом SSL сертификата"
 
 
@@ -2119,11 +2144,11 @@ msgstr ""
 "Имя модели должно содержать только буквы, юникод, цифры, дефисы, тире и "
 "Имя модели должно содержать только буквы, юникод, цифры, дефисы, тире и "
 "точки."
 "точки."
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "Путь существует, но файл не является сертификатом"
 msgstr "Путь существует, но файл не является сертификатом"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr "Путь существует, но файл не является приватным ключом"
 msgstr "Путь существует, но файл не является приватным ключом"
 
 
@@ -2182,9 +2207,9 @@ msgstr "Этот элемент автосертификата недейств
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "Этот сертификат находится под управлением  Nginx UI"
 msgstr "Этот сертификат находится под управлением  Nginx UI"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr "Это поле обязательно для заполнения"
 msgstr "Это поле обязательно для заполнения"
 
 
@@ -2256,11 +2281,11 @@ msgstr ""
 "TOTP — это метод двухфакторной аутентификации, который использует алгоритм "
 "TOTP — это метод двухфакторной аутентификации, который использует алгоритм "
 "одноразового пароля на основе времени."
 "одноразового пароля на основе времени."
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr "Корзина"
 msgstr "Корзина"
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr "Требуется двухфакторная аутентификация"
 msgstr "Требуется двухфакторная аутентификация"
 
 
@@ -2275,7 +2300,7 @@ msgstr "Тип"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Успешно обновлено"
 msgstr "Успешно обновлено"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2289,7 +2314,7 @@ msgstr "Обновлено в"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Успешно обновлено"
 msgstr "Успешно обновлено"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Обновление"
 msgstr "Обновление"
@@ -2318,11 +2343,11 @@ msgstr "Аптайм:"
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr "Использовать OTP"
 msgstr "Использовать OTP"
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "Использовать код восстановления"
 msgstr "Использовать код восстановления"
 
 
@@ -2342,7 +2367,7 @@ msgstr "Имя пользователя"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Имя пользователя (*)"
 msgstr "Имя пользователя (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2361,11 +2386,11 @@ msgstr "Просмотр"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Просмотреть все уведомления"
 msgstr "Просмотреть все уведомления"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr "Подробно"
 msgstr "Подробно"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "View Mode"
 msgid "View Mode"
 msgstr "Простой режим"
 msgstr "Простой режим"
@@ -2393,6 +2418,13 @@ msgstr ""
 "Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. Вы "
 "Мы удалим конфигурацию HTTPChallenge из этого файла и перезагрузим Nginx. Вы "
 "уверены, что хотите продолжить?"
 "уверены, что хотите продолжить?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2407,7 +2439,7 @@ msgid "Writing certificate to disk"
 msgstr "Запись сертификата на диск"
 msgstr "Запись сертификата на диск"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2465,10 +2497,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "Таблица"
 #~ msgstr "Таблица"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Оставьте пустым без изменений"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Auto Cert is enabled"
 #~ msgid "Auto Cert is enabled"
 #~ msgstr "Авто Сертификат"
 #~ msgstr "Авто Сертификат"

+ 96 - 69
app/src/language/vi_VN/app.po

@@ -25,13 +25,13 @@ msgstr "Tác giả"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Log truy cập"
 msgstr "Log truy cập"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Người dùng"
 msgstr "Người dùng"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -42,8 +42,8 @@ msgstr "Người dùng"
 msgid "Action"
 msgid "Action"
 msgstr "Hành động"
 msgstr "Hành động"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -67,8 +67,8 @@ msgstr "Sửa cấu hình"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Thêm Directive"
 msgstr "Thêm Directive"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Thêm Location"
 msgstr "Thêm Location"
 
 
@@ -169,7 +169,7 @@ msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgstr "Bạn chắc chắn muốn xoá directive này ?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bạn chắc chắn muốn xoá location này ?"
 msgstr "Bạn chắc chắn muốn xoá location này ?"
@@ -191,7 +191,7 @@ msgstr ""
 msgid "Auth"
 msgid "Auth"
 msgstr "Tác giả"
 msgstr "Tác giả"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -216,7 +216,7 @@ msgstr "Đã tắt tự động gia hạn SSL cho %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Đã bật tự động gia hạn SSL cho %{name}"
 msgstr "Đã bật tự động gia hạn SSL cho %{name}"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -228,7 +228,7 @@ msgstr "Quay lại"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "Quay lại"
 msgstr "Quay lại"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr ""
 msgstr ""
 
 
@@ -275,7 +275,7 @@ msgstr "Cập nhật"
 msgid "Build with"
 msgid "Build with"
 msgstr "Xây dựng với"
 msgstr "Xây dựng với"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
@@ -289,7 +289,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -379,8 +379,8 @@ msgid "Command"
 msgstr "Bình luận"
 msgstr "Bình luận"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "Bình luận"
 msgstr "Bình luận"
@@ -415,8 +415,8 @@ msgid "Connection lost, please refresh the page."
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "Nội dung"
 msgstr "Nội dung"
 
 
@@ -765,7 +765,7 @@ msgstr "Sửa trang web"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "Sửa trang web"
 msgstr "Sửa trang web"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 #, fuzzy
 #, fuzzy
 msgid "Email"
 msgid "Email"
 msgstr "Email (*)"
 msgstr "Email (*)"
@@ -1013,7 +1013,7 @@ msgstr ""
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr ""
 msgstr ""
 
 
@@ -1070,7 +1070,7 @@ msgstr "Đang khởi tạo trình nâng cấp"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr ""
 msgstr ""
@@ -1088,7 +1088,7 @@ msgstr "Cài đặt thành công"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Hợp lệ"
 msgstr "Hợp lệ"
@@ -1107,7 +1107,7 @@ msgstr "E-mail không chính xác!"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -1161,8 +1161,13 @@ msgstr "Bỏ trống nếu không thay đổi"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Bỏ trống để sử dụng địa chỉ mặc định: https://api.openai.com/"
 msgstr "Bỏ trống để sử dụng địa chỉ mặc định: https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "Bỏ trống nếu không thay đổi"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 #, fuzzy
 #, fuzzy
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "Bỏ trống nếu không thay đổi"
 msgstr "Bỏ trống nếu không thay đổi"
@@ -1181,7 +1186,7 @@ msgstr "Giấy phép"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "Liên kết bắt đầu"
 msgstr "Liên kết bắt đầu"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr ""
 msgstr ""
 
 
@@ -1205,15 +1210,15 @@ msgstr "Lưu thành công"
 msgid "Local"
 msgid "Local"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 #, fuzzy
 #, fuzzy
 msgid "Log"
 msgid "Log"
 msgstr "Log"
 msgstr "Log"
@@ -1298,7 +1303,7 @@ msgid "Model"
 msgstr "Run Mode"
 msgstr "Run Mode"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
@@ -1314,7 +1319,7 @@ msgstr "Sửa chứng chỉ"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Sửa cấu hình"
 msgstr "Sửa cấu hình"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "Sửa"
 msgstr "Sửa"
@@ -1325,7 +1330,7 @@ msgid "Multi-line Directive"
 msgstr "Single Directive"
 msgstr "Single Directive"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1420,7 +1425,7 @@ msgstr "Restart Nginx thành công"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1484,7 +1489,7 @@ msgstr ""
 msgid "Offline"
 msgid "Offline"
 msgstr "Ngoại tuyến"
 msgstr "Ngoại tuyến"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
@@ -1524,7 +1529,7 @@ msgstr "Trực tuyến"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1577,8 +1582,8 @@ msgid "Password (*)"
 msgstr "Mật khẩu (*)"
 msgstr "Mật khẩu (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "Đường dẫn"
 msgstr "Đường dẫn"
 
 
@@ -1600,7 +1605,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr ""
 msgstr ""
 
 
@@ -1659,6 +1664,10 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
 msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
 
 
+#: src/views/environment/Environment.vue:47
+msgid "Please select at least one node to upgrade"
+msgstr ""
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1695,6 +1704,10 @@ msgstr "Đội ngũ phát triển"
 msgid "Provider"
 msgid "Provider"
 msgstr "Nhà cung cấp"
 msgstr "Nhà cung cấp"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+msgid "Proxy"
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1714,7 +1727,7 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Xoá thành công"
 msgstr "Xoá thành công"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr ""
 msgstr ""
@@ -1735,22 +1748,33 @@ msgstr ""
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Tạo lại câu trả lời"
 msgstr "Tạo lại câu trả lời"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "Đăng ký người dùng"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Gia hạn chứng chỉ SSL"
 msgstr "Gia hạn chứng chỉ SSL"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Gia hạn chứng chỉ SSL"
 msgstr "Gia hạn chứng chỉ SSL"
@@ -1759,7 +1783,7 @@ msgstr "Gia hạn chứng chỉ SSL"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
@@ -1894,7 +1918,7 @@ msgid "Running"
 msgstr "Running"
 msgstr "Running"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -2027,19 +2051,19 @@ msgstr "Logs"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Danh sách Website"
 msgstr "Danh sách Website"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr ""
 msgstr ""
 
 
@@ -2054,7 +2078,7 @@ msgstr ""
 msgid "Stable"
 msgid "Stable"
 msgstr "Ổn định"
 msgstr "Ổn định"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2150,7 +2174,7 @@ msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr ""
 msgstr ""
 
 
@@ -2189,11 +2213,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "Tên tệp không thể chứa các ký tự sau: %{c}"
 msgstr "Tên tệp không thể chứa các ký tự sau: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr ""
 msgstr ""
 
 
@@ -2203,11 +2227,11 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr ""
 msgstr ""
 
 
@@ -2259,9 +2283,9 @@ msgstr "Mục Chứng chỉ tự động này không hợp lệ, vui lòng xóa
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "Chứng chỉ này được quản lý bởi Nginx UI"
 msgstr "Chứng chỉ này được quản lý bởi Nginx UI"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr ""
 msgstr ""
 
 
@@ -2327,11 +2351,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
@@ -2346,7 +2370,7 @@ msgstr "Loại"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2361,7 +2385,7 @@ msgstr "Ngày cập nhật"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Cập nhật"
 msgstr "Cập nhật"
@@ -2392,11 +2416,11 @@ msgstr "Thời gian hoạt động:"
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
@@ -2417,7 +2441,7 @@ msgstr "Username"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2438,12 +2462,12 @@ msgstr "Xem"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "Xem tất cả thông báo"
 msgstr "Xem tất cả thông báo"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #, fuzzy
 #, fuzzy
 msgid "View Details"
 msgid "View Details"
 msgstr "Chi tiết"
 msgstr "Chi tiết"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 #, fuzzy
 #, fuzzy
 msgid "View Mode"
 msgid "View Mode"
 msgstr "Cơ bản"
 msgstr "Cơ bản"
@@ -2471,6 +2495,13 @@ msgstr ""
 "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn "
 "Chúng tôi sẽ xóa cấu hình HTTPChallenge khỏi tệp này và tải lại Nginx. Bạn "
 "có muốn tiếp tục không?"
 "có muốn tiếp tục không?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2485,7 +2516,7 @@ msgid "Writing certificate to disk"
 msgstr "Ghi chứng chỉ vào disk"
 msgstr "Ghi chứng chỉ vào disk"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2541,10 +2572,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "Mục lục"
 #~ msgstr "Mục lục"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "Bỏ trống nếu không thay đổi"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Config Name"
 #~ msgid "Config Name"
 #~ msgstr "Tên cấu hình"
 #~ msgstr "Tên cấu hình"

BIN
app/src/language/zh_CN/app.mo


+ 96 - 68
app/src/language/zh_CN/app.po

@@ -29,12 +29,12 @@ msgstr "关于"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "访问日志"
 msgstr "访问日志"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用户"
 msgstr "ACME 用户"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -45,8 +45,8 @@ msgstr "ACME 用户"
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -69,8 +69,8 @@ msgstr "添加配置"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "在下面添加指令"
 msgstr "在下面添加指令"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "添加 Location"
 msgstr "添加 Location"
 
 
@@ -159,7 +159,7 @@ msgstr "您确定要删除这条指令?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "您确定要删除这个项目吗?"
 msgstr "您确定要删除这个项目吗?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 msgstr "您确定要删除这个 Location?"
 
 
@@ -179,7 +179,7 @@ msgstr "尝试次数"
 msgid "Auth"
 msgid "Auth"
 msgstr "认证"
 msgstr "认证"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr "通过 Passkey 认证"
 msgstr "通过 Passkey 认证"
 
 
@@ -204,7 +204,7 @@ msgstr "成功关闭 %{name} 自动续签"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "成功启用 %{name} 自动续签"
 msgstr "成功启用 %{name} 自动续签"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -215,7 +215,7 @@ msgstr "返回"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "返回首页"
 msgstr "返回首页"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr "返回列表"
 msgstr "返回列表"
 
 
@@ -259,7 +259,7 @@ msgstr "批量升级"
 msgid "Build with"
 msgid "Build with"
 msgstr "构建基于"
 msgstr "构建基于"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "CA Dir"
 msgstr "CA Dir"
 
 
@@ -273,7 +273,7 @@ msgstr "无法扫描?使用文本密钥绑定"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -352,8 +352,8 @@ msgid "Command"
 msgstr "命令"
 msgstr "命令"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "注释"
 msgstr "注释"
@@ -387,8 +387,8 @@ msgid "Connection lost, please refresh the page."
 msgstr "连接中断,请刷新页面。"
 msgstr "连接中断,请刷新页面。"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "内容"
 msgstr "内容"
 
 
@@ -714,7 +714,7 @@ msgstr "编辑站点"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "编辑 Stream"
 msgstr "编辑 Stream"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 msgid "Email"
 msgid "Email"
 msgstr "邮箱"
 msgstr "邮箱"
 
 
@@ -947,7 +947,7 @@ msgstr "HTTP 监听端口"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "如果留空,则使用默认 CA Dir。"
 msgstr "如果留空,则使用默认 CA Dir。"
 
 
@@ -1003,7 +1003,7 @@ msgstr "初始化核心升级器"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr "输入应用程序中的代码:"
 msgstr "输入应用程序中的代码:"
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "输入恢复代码:"
 msgstr "输入恢复代码:"
@@ -1020,7 +1020,7 @@ msgstr "安装成功"
 msgid "Interval"
 msgid "Interval"
 msgstr "间隔"
 msgstr "间隔"
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr "无效的"
 msgstr "无效的"
 
 
@@ -1037,7 +1037,7 @@ msgstr "文件名无效"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr "无效文件夹名"
 msgstr "无效文件夹名"
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr "二次验证码或恢复代码无效"
 msgstr "二次验证码或恢复代码无效"
 
 
@@ -1086,8 +1086,12 @@ msgstr "留空表示不修改"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "留空为默认:https://api.openai.com/"
 msgstr "留空为默认:https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+msgid "Leave blank if you don't need this."
+msgstr "如果不需要,请留空。"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "留空不做任何更改"
 msgstr "留空不做任何更改"
 
 
@@ -1104,7 +1108,7 @@ msgstr "开源许可"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "链接"
 msgstr "链接"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr "列表"
 msgstr "列表"
 
 
@@ -1125,15 +1129,15 @@ msgstr "加载成功"
 msgid "Local"
 msgid "Local"
 msgstr "本地"
 msgstr "本地"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 msgid "Log"
 msgid "Log"
 msgstr "日志"
 msgstr "日志"
 
 
@@ -1218,7 +1222,7 @@ msgid "Model"
 msgstr "模型"
 msgstr "模型"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1232,7 +1236,7 @@ msgstr "修改证书"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "修改配置文件"
 msgstr "修改配置文件"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "修改模式"
 msgstr "修改模式"
 
 
@@ -1241,7 +1245,7 @@ msgid "Multi-line Directive"
 msgstr "多行指令"
 msgstr "多行指令"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1331,7 +1335,7 @@ msgstr "Nginx 重启成功"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1392,7 +1396,7 @@ msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能
 msgid "Offline"
 msgid "Offline"
 msgstr "离线"
 msgstr "离线"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr "确定"
 msgstr "确定"
@@ -1432,7 +1436,7 @@ msgstr "在线"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr "或"
 msgstr "或"
 
 
@@ -1486,8 +1490,8 @@ msgid "Password (*)"
 msgstr "密码 (*)"
 msgstr "密码 (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "路径"
 msgstr "路径"
 
 
@@ -1509,7 +1513,7 @@ msgid ""
 "button below."
 "button below."
 msgstr "请为您要创建的 Passkey 输入一个名称,然后单击下面的 \"确定 \"按钮。"
 msgstr "请为您要创建的 Passkey 输入一个名称,然后单击下面的 \"确定 \"按钮。"
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr "请输入 OTP:"
 msgstr "请输入 OTP:"
 
 
@@ -1564,6 +1568,10 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "请注意,下面的时间单位配置均以秒为单位。"
 msgstr "请注意,下面的时间单位配置均以秒为单位。"
 
 
+#: src/views/environment/Environment.vue:47
+msgid "Please select at least one node to upgrade"
+msgstr "请至少选择一个节点进行升级"
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1599,6 +1607,10 @@ msgstr "项目团队"
 msgid "Provider"
 msgid "Provider"
 msgstr "提供商"
 msgstr "提供商"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+msgid "Proxy"
+msgstr "代理"
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1617,7 +1629,7 @@ msgstr "恢复"
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "恢复成功"
 msgstr "恢复成功"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr "恢复"
 msgstr "恢复"
@@ -1638,19 +1650,29 @@ msgstr "递归域名服务器"
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新生成响应"
 msgstr "重新生成响应"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr "注册"
 msgstr "注册"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr "注册用户或使用此账户申请证书时通过 HTTP 代理。"
+
+#: src/views/certificate/ACMEUser.vue:98
 msgid "Register failed"
 msgid "Register failed"
 msgstr "注册失败"
 msgstr "注册失败"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+msgid "Register On Startup"
+msgstr "启动时注册"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Passkey 注册成功"
 msgstr "Passkey 注册成功"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "注册成功"
 msgstr "注册成功"
 
 
@@ -1658,7 +1680,7 @@ msgstr "注册成功"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "正在注册用户"
 msgstr "正在注册用户"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "注册状态"
 msgstr "注册状态"
 
 
@@ -1779,7 +1801,7 @@ msgid "Running"
 msgstr "运行中"
 msgstr "运行中"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -1908,19 +1930,19 @@ msgstr "站点列表"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "站点列表"
 msgstr "站点列表"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL 证书内容"
 msgstr "SSL 证书内容"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "SSL 证书密钥内容"
 msgstr "SSL 证书密钥内容"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "SSL证书密钥路径"
 msgstr "SSL证书密钥路径"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "SSL证书路径"
 msgstr "SSL证书路径"
 
 
@@ -1934,7 +1956,7 @@ msgstr "SSO 登录"
 msgid "Stable"
 msgid "Stable"
 msgstr "稳定"
 msgstr "稳定"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2022,7 +2044,7 @@ msgstr "同步配置错误"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr "同步到"
 msgstr "同步到"
 
 
@@ -2060,11 +2082,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "文件名不能包含以下字符: %{c}"
 msgstr "文件名不能包含以下字符: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr "输入的内容不是 SSL 证书"
 msgstr "输入的内容不是 SSL 证书"
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "输入的内容不是 SSL 证书密钥"
 msgstr "输入的内容不是 SSL 证书密钥"
 
 
@@ -2074,11 +2096,11 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr "模型只能包含字母、Unicode、数字、连词符、破折号和点。"
 msgstr "模型只能包含字母、Unicode、数字、连词符、破折号和点。"
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "路径存在,但文件不是证书"
 msgstr "路径存在,但文件不是证书"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr "路径存在,但文件不是私钥"
 msgstr "路径存在,但文件不是私钥"
 
 
@@ -2130,9 +2152,9 @@ msgstr "这个证书自动续期项目是无效的,请删除。"
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "该证书由 Nginx UI 托管"
 msgstr "该证书由 Nginx UI 托管"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr "此字段必填"
 msgstr "此字段必填"
 
 
@@ -2199,11 +2221,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr "TOTP 是一种使用基于时间的一次性密码算法的双因素身份验证方法。"
 msgstr "TOTP 是一种使用基于时间的一次性密码算法的双因素身份验证方法。"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr "回收站"
 msgstr "回收站"
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr "需要两步验证"
 msgstr "需要两步验证"
 
 
@@ -2217,7 +2239,7 @@ msgstr "类型"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2231,7 +2253,7 @@ msgstr "修改时间"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升级"
 msgstr "升级"
@@ -2260,11 +2282,11 @@ msgstr "运行时间:"
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr "使用二步验证码"
 msgstr "使用二步验证码"
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "使用恢复代码"
 msgstr "使用恢复代码"
 
 
@@ -2284,7 +2306,7 @@ msgstr "用户名"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "用户名 (*)"
 msgstr "用户名 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2303,11 +2325,11 @@ msgstr "查看"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "查看全部通知"
 msgstr "查看全部通知"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr "查看详情"
 msgstr "查看详情"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "View Mode"
 msgid "View Mode"
 msgstr "预览模式"
 msgstr "预览模式"
 
 
@@ -2331,6 +2353,15 @@ msgid ""
 msgstr ""
 msgstr ""
 "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?"
 "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+"启用后,Nginx UI 将在启动时自动重新注册用户。一般情况下,除非在开发环境中使"
+"用 Pebble 作为 CA,否则不要启用此功能。"
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2345,7 +2376,7 @@ msgid "Writing certificate to disk"
 msgstr "正在将证书写入磁盘"
 msgstr "正在将证书写入磁盘"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2430,9 +2461,6 @@ msgstr "你的 Passkeys"
 #~ msgid "Rename Upstream"
 #~ msgid "Rename Upstream"
 #~ msgstr "重新命名 Upstream"
 #~ msgstr "重新命名 Upstream"
 
 
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "留空不会有任何变化。"
-
 #~ msgid "Auto Cert is enabled"
 #~ msgid "Auto Cert is enabled"
 #~ msgstr "自动更新已启用"
 #~ msgstr "自动更新已启用"
 
 

+ 98 - 69
app/src/language/zh_TW/app.po

@@ -33,12 +33,12 @@ msgstr "關於"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "存取日誌"
 msgstr "存取日誌"
 
 
-#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:76
+#: src/routes/index.ts:142 src/views/certificate/ACMEUser.vue:105
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用戶"
 msgstr "ACME 用戶"
 
 
-#: src/views/certificate/ACMEUser.vue:59
+#: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/CertificateList/certColumns.tsx:89
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
 #: src/views/config/configColumns.ts:38 src/views/domain/DomainList.vue:47
@@ -49,8 +49,8 @@ msgstr "ACME 用戶"
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:204
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -73,8 +73,8 @@ msgstr "添加配置"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "在下方新增指令"
 msgstr "在下方新增指令"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:138
+#: src/views/domain/ngx_conf/LocationEditor.vue:132
+#: src/views/domain/ngx_conf/LocationEditor.vue:159
 msgid "Add Location"
 msgid "Add Location"
 msgstr "新增 Location"
 msgstr "新增 Location"
 
 
@@ -164,7 +164,7 @@ msgstr "您確定要刪除這條指令嗎?"
 msgid "Are you sure you want to remove this item?"
 msgid "Are you sure you want to remove this item?"
 msgstr "您確定要刪除此項目嗎?"
 msgstr "您確定要刪除此項目嗎?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:68
+#: src/views/domain/ngx_conf/LocationEditor.vue:88
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 msgstr "您確定要刪除此 Location 嗎?"
 
 
@@ -184,7 +184,7 @@ msgstr "嘗試次數"
 msgid "Auth"
 msgid "Auth"
 msgstr "身份驗證"
 msgstr "身份驗證"
 
 
-#: src/components/2FA/Authorization.vue:126
+#: src/components/TwoFA/Authorization.vue:126
 msgid "Authenticate with a passkey"
 msgid "Authenticate with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -209,7 +209,7 @@ msgstr "已關閉 %{name} 的自動續簽"
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "已啟用 %{name} 的自動續簽"
 msgstr "已啟用 %{name} 的自動續簽"
 
 
-#: src/views/certificate/CertificateEditor.vue:247
+#: src/views/certificate/CertificateEditor.vue:249
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
@@ -220,7 +220,7 @@ msgstr "返回"
 msgid "Back Home"
 msgid "Back Home"
 msgstr "返回首頁"
 msgstr "返回首頁"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:217
 msgid "Back to list"
 msgid "Back to list"
 msgstr "返回列表"
 msgstr "返回列表"
 
 
@@ -264,7 +264,7 @@ msgstr "批次升級"
 msgid "Build with"
 msgid "Build with"
 msgstr "構建基於"
 msgstr "構建基於"
 
 
-#: src/views/certificate/ACMEUser.vue:29
+#: src/views/certificate/ACMEUser.vue:35
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "CA Dir"
 msgstr "CA Dir"
 
 
@@ -278,7 +278,7 @@ msgstr ""
 
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
 #: src/views/domain/components/Deploy.vue:21
@@ -357,8 +357,8 @@ msgid "Command"
 msgstr "命令"
 msgstr "命令"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:106
-#: src/views/domain/ngx_conf/LocationEditor.vue:115
-#: src/views/domain/ngx_conf/LocationEditor.vue:84
+#: src/views/domain/ngx_conf/LocationEditor.vue:105
+#: src/views/domain/ngx_conf/LocationEditor.vue:136
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 #: src/views/domain/ngx_conf/NgxServer.vue:134
 msgid "Comments"
 msgid "Comments"
 msgstr "備註"
 msgstr "備註"
@@ -392,8 +392,8 @@ msgid "Connection lost, please refresh the page."
 msgstr "連接丟失,請重新整理。"
 msgstr "連接丟失,請重新整理。"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
-#: src/views/domain/ngx_conf/LocationEditor.vue:124
-#: src/views/domain/ngx_conf/LocationEditor.vue:96
+#: src/views/domain/ngx_conf/LocationEditor.vue:117
+#: src/views/domain/ngx_conf/LocationEditor.vue:145
 msgid "Content"
 msgid "Content"
 msgstr "內容"
 msgstr "內容"
 
 
@@ -719,7 +719,7 @@ msgstr "編輯網站"
 msgid "Edit Stream"
 msgid "Edit Stream"
 msgstr "編輯 Stream"
 msgstr "編輯 Stream"
 
 
-#: src/views/certificate/ACMEUser.vue:21
+#: src/views/certificate/ACMEUser.vue:24
 msgid "Email"
 msgid "Email"
 msgstr "電子郵件"
 msgstr "電子郵件"
 
 
@@ -953,7 +953,7 @@ msgstr "HTTP 監聽埠"
 msgid "HTTP01"
 msgid "HTTP01"
 msgstr "HTTP01"
 msgstr "HTTP01"
 
 
-#: src/views/certificate/ACMEUser.vue:37
+#: src/views/certificate/ACMEUser.vue:43
 msgid "If left blank, the default CA Dir will be used."
 msgid "If left blank, the default CA Dir will be used."
 msgstr "如果留空,將使用默認的 CA Dir。"
 msgstr "如果留空,將使用默認的 CA Dir。"
 
 
@@ -1009,7 +1009,7 @@ msgstr "正在初始化核心升級程式"
 msgid "Input the code from the app:"
 msgid "Input the code from the app:"
 msgstr "請輸入應用程式中的代碼:"
 msgstr "請輸入應用程式中的代碼:"
 
 
-#: src/components/2FA/Authorization.vue:87
+#: src/components/TwoFA/Authorization.vue:87
 #: src/views/preference/components/TOTP.vue:171
 #: src/views/preference/components/TOTP.vue:171
 msgid "Input the recovery code:"
 msgid "Input the recovery code:"
 msgstr "輸入恢復碼:"
 msgstr "輸入恢復碼:"
@@ -1026,7 +1026,7 @@ msgstr "安裝成功"
 msgid "Interval"
 msgid "Interval"
 msgstr "間隔"
 msgstr "間隔"
 
 
-#: src/views/certificate/ACMEUser.vue:92
+#: src/views/certificate/ACMEUser.vue:121
 msgid "Invalid"
 msgid "Invalid"
 msgstr "無效"
 msgstr "無效"
 
 
@@ -1043,7 +1043,7 @@ msgstr "無效的檔案名"
 msgid "Invalid folder name"
 msgid "Invalid folder name"
 msgstr "無效的資料夾名稱"
 msgstr "無效的資料夾名稱"
 
 
-#: src/components/2FA/use2FAModal.ts:65
+#: src/components/TwoFA/use2FAModal.ts:65
 msgid "Invalid passcode or recovery code"
 msgid "Invalid passcode or recovery code"
 msgstr "無效的密碼或恢復碼"
 msgstr "無效的密碼或恢復碼"
 
 
@@ -1093,8 +1093,13 @@ msgstr "留空表示不修改"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "預設留空:https://api.openai.com/"
 msgstr "預設留空:https://api.openai.com/"
 
 
-#: src/views/certificate/CertificateEditor.vue:212
-#: src/views/certificate/CertificateEditor.vue:225
+#: src/views/certificate/ACMEUser.vue:56
+#, fuzzy
+msgid "Leave blank if you don't need this."
+msgstr "留空表示不修改"
+
+#: src/views/certificate/CertificateEditor.vue:214
+#: src/views/certificate/CertificateEditor.vue:227
 msgid "Leave blank will not change anything"
 msgid "Leave blank will not change anything"
 msgstr "留空將不會改變任何內容"
 msgstr "留空將不會改變任何內容"
 
 
@@ -1111,7 +1116,7 @@ msgstr "開源授權"
 msgid "Link Start"
 msgid "Link Start"
 msgstr "連結開始"
 msgstr "連結開始"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:194
 msgid "List"
 msgid "List"
 msgstr "列表"
 msgstr "列表"
 
 
@@ -1132,15 +1137,15 @@ msgstr "加載成功"
 msgid "Local"
 msgid "Local"
 msgstr "本機"
 msgstr "本機"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:59
+#: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:43
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/views/certificate/CertificateEditor.vue:235
+#: src/views/certificate/CertificateEditor.vue:237
 msgid "Log"
 msgid "Log"
 msgstr "日誌"
 msgstr "日誌"
 
 
@@ -1224,7 +1229,7 @@ msgid "Model"
 msgstr "模型"
 msgstr "模型"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:248
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
 #: src/views/config/ConfigList.vue:159
 #: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
@@ -1238,7 +1243,7 @@ msgstr "修改憑證"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "修改設定"
 msgstr "修改設定"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "Modify Mode"
 msgid "Modify Mode"
 msgstr "修改模式"
 msgstr "修改模式"
 
 
@@ -1247,7 +1252,7 @@ msgid "Multi-line Directive"
 msgstr "多行指令"
 msgstr "多行指令"
 
 
 #: src/views/certificate/ACMEUser.vue:13
 #: src/views/certificate/ACMEUser.vue:13
-#: src/views/certificate/CertificateEditor.vue:152
+#: src/views/certificate/CertificateEditor.vue:154
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
@@ -1337,7 +1342,7 @@ msgstr "Nginx 重啟成功"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:575
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/DomainList.vue:144
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
-#: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/domain/ngx_conf/LocationEditor.vue:90
 #: src/views/notification/Notification.vue:38
 #: src/views/notification/Notification.vue:38
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/AuthSettings.vue:104
 #: src/views/preference/BasicSettings.vue:101
 #: src/views/preference/BasicSettings.vue:101
@@ -1398,7 +1403,7 @@ msgstr "OCSP 必須裝訂可能會導致某些用戶在首次使用 Firefox 訪
 msgid "Offline"
 msgid "Offline"
 msgstr "離線"
 msgstr "離線"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:255
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgid "Ok"
 msgstr "確定"
 msgstr "確定"
@@ -1438,7 +1443,7 @@ msgstr "線上"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/2FA/Authorization.vue:117 src/views/other/Login.vue:256
+#: src/components/TwoFA/Authorization.vue:117 src/views/other/Login.vue:256
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -1490,8 +1495,8 @@ msgid "Password (*)"
 msgstr "密碼 (*)"
 msgstr "密碼 (*)"
 
 
 #: src/views/config/ConfigEditor.vue:262
 #: src/views/config/ConfigEditor.vue:262
-#: src/views/domain/ngx_conf/LocationEditor.vue:118
-#: src/views/domain/ngx_conf/LocationEditor.vue:90
+#: src/views/domain/ngx_conf/LocationEditor.vue:111
+#: src/views/domain/ngx_conf/LocationEditor.vue:139
 msgid "Path"
 msgid "Path"
 msgstr "路徑"
 msgstr "路徑"
 
 
@@ -1513,7 +1518,7 @@ msgid ""
 "button below."
 "button below."
 msgstr ""
 msgstr ""
 
 
-#: src/components/2FA/Authorization.vue:75
+#: src/components/TwoFA/Authorization.vue:75
 #, fuzzy
 #, fuzzy
 msgid "Please enter the OTP code:"
 msgid "Please enter the OTP code:"
 msgstr "請輸入多重因素驗證碼:"
 msgstr "請輸入多重因素驗證碼:"
@@ -1569,6 +1574,11 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "請注意,以下時間配置單位均為秒。"
 msgstr "請注意,以下時間配置單位均為秒。"
 
 
+#: src/views/environment/Environment.vue:47
+#, fuzzy
+msgid "Please select at least one node to upgrade"
+msgstr "請至少選擇一個節點!"
+
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/domain/components/SiteDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 #: src/views/stream/components/StreamDuplicate.vue:45
 msgid "Please select at least one node!"
 msgid "Please select at least one node!"
@@ -1604,6 +1614,11 @@ msgstr "專案團隊"
 msgid "Provider"
 msgid "Provider"
 msgstr "供應商"
 msgstr "供應商"
 
 
+#: src/views/certificate/ACMEUser.vue:48
+#, fuzzy
+msgid "Proxy"
+msgstr "API 代理"
+
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:28
 #: src/views/dashboard/ServerAnalytic.vue:378
 #: src/views/dashboard/ServerAnalytic.vue:378
 msgid "Reads"
 msgid "Reads"
@@ -1622,7 +1637,7 @@ msgstr "恢復"
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "恢復成功"
 msgstr "恢復成功"
 
 
-#: src/components/2FA/Authorization.vue:94
+#: src/components/TwoFA/Authorization.vue:94
 #: src/views/preference/components/TOTP.vue:178
 #: src/views/preference/components/TOTP.vue:178
 msgid "Recovery"
 msgid "Recovery"
 msgstr "恢復"
 msgstr "恢復"
@@ -1643,20 +1658,31 @@ msgstr "遞迴名稱伺服器"
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新產生回應"
 msgstr "重新產生回應"
 
 
-#: src/views/certificate/ACMEUser.vue:100
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Register"
 msgid "Register"
 msgstr "註冊"
 msgstr "註冊"
 
 
-#: src/views/certificate/ACMEUser.vue:69
+#: src/views/certificate/ACMEUser.vue:53
+msgid ""
+"Register a user or use this account to issue a certificate through an HTTP "
+"proxy."
+msgstr ""
+
+#: src/views/certificate/ACMEUser.vue:98
 msgid "Register failed"
 msgid "Register failed"
 msgstr "註冊失敗"
 msgstr "註冊失敗"
 
 
+#: src/views/certificate/ACMEUser.vue:72
+#, fuzzy
+msgid "Register On Startup"
+msgstr "註冊狀態"
+
 #: src/views/preference/components/AddPasskey.vue:26
 #: src/views/preference/components/AddPasskey.vue:26
 #, fuzzy
 #, fuzzy
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "註冊成功"
 msgstr "註冊成功"
 
 
-#: src/views/certificate/ACMEUser.vue:67
+#: src/views/certificate/ACMEUser.vue:96
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "註冊成功"
 msgstr "註冊成功"
 
 
@@ -1664,7 +1690,7 @@ msgstr "註冊成功"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "註冊使用者中"
 msgstr "註冊使用者中"
 
 
-#: src/views/certificate/ACMEUser.vue:83
+#: src/views/certificate/ACMEUser.vue:112
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "註冊狀態"
 msgstr "註冊狀態"
 
 
@@ -1785,7 +1811,7 @@ msgid "Running"
 msgstr "執行中"
 msgstr "執行中"
 
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/components/ChatGPT/ChatGPT.vue:251
-#: src/views/certificate/CertificateEditor.vue:254
+#: src/views/certificate/CertificateEditor.vue:256
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/preference/components/Passkey.vue:136
 #: src/views/preference/components/Passkey.vue:136
@@ -1914,19 +1940,19 @@ msgstr "網站日誌"
 msgid "Sites List"
 msgid "Sites List"
 msgstr "網站列表"
 msgstr "網站列表"
 
 
-#: src/views/certificate/CertificateEditor.vue:203
+#: src/views/certificate/CertificateEditor.vue:205
 msgid "SSL Certificate Content"
 msgid "SSL Certificate Content"
 msgstr "SSL 憑證內容"
 msgstr "SSL 憑證內容"
 
 
-#: src/views/certificate/CertificateEditor.vue:216
+#: src/views/certificate/CertificateEditor.vue:218
 msgid "SSL Certificate Key Content"
 msgid "SSL Certificate Key Content"
 msgstr "SSL 憑證金鑰內容"
 msgstr "SSL 憑證金鑰內容"
 
 
-#: src/views/certificate/CertificateEditor.vue:182
+#: src/views/certificate/CertificateEditor.vue:184
 msgid "SSL Certificate Key Path"
 msgid "SSL Certificate Key Path"
 msgstr "SSL 憑證金鑰路徑"
 msgstr "SSL 憑證金鑰路徑"
 
 
-#: src/views/certificate/CertificateEditor.vue:167
+#: src/views/certificate/CertificateEditor.vue:169
 msgid "SSL Certificate Path"
 msgid "SSL Certificate Path"
 msgstr "SSL 憑證路徑"
 msgstr "SSL 憑證路徑"
 
 
@@ -1940,7 +1966,7 @@ msgstr "SSO 登錄"
 msgid "Stable"
 msgid "Stable"
 msgstr "穩定"
 msgstr "穩定"
 
 
-#: src/views/certificate/ACMEUser.vue:42
+#: src/views/certificate/ACMEUser.vue:61
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/certificate/CertificateList/certColumns.tsx:60
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/domain/DomainList.vue:22 src/views/environment/envColumns.tsx:78
 #: src/views/stream/StreamList.vue:22
 #: src/views/stream/StreamList.vue:22
@@ -2028,7 +2054,7 @@ msgstr "同步配置錯誤"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
-#: src/views/certificate/CertificateEditor.vue:196
+#: src/views/certificate/CertificateEditor.vue:198
 msgid "Sync to"
 msgid "Sync to"
 msgstr "同步到"
 msgstr "同步到"
 
 
@@ -2066,11 +2092,11 @@ msgstr ""
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
 msgstr "檔名不能包含以下字元: %{c}"
 msgstr "檔名不能包含以下字元: %{c}"
 
 
-#: src/views/certificate/CertificateEditor.vue:206
+#: src/views/certificate/CertificateEditor.vue:208
 msgid "The input is not a SSL Certificate"
 msgid "The input is not a SSL Certificate"
 msgstr "輸入的不是 SSL 憑證"
 msgstr "輸入的不是 SSL 憑證"
 
 
-#: src/views/certificate/CertificateEditor.vue:219
+#: src/views/certificate/CertificateEditor.vue:221
 msgid "The input is not a SSL Certificate Key"
 msgid "The input is not a SSL Certificate Key"
 msgstr "輸入的不是 SSL 憑證金鑰"
 msgstr "輸入的不是 SSL 憑證金鑰"
 
 
@@ -2080,11 +2106,11 @@ msgid ""
 "dashes, and dots."
 "dashes, and dots."
 msgstr "模型名稱應僅包含字母、Unicode、數字、連字號、破折號和點。"
 msgstr "模型名稱應僅包含字母、Unicode、數字、連字號、破折號和點。"
 
 
-#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:173
 msgid "The path exists, but the file is not a certificate"
 msgid "The path exists, but the file is not a certificate"
 msgstr "路徑存在,但檔案不是憑證"
 msgstr "路徑存在,但檔案不是憑證"
 
 
-#: src/views/certificate/CertificateEditor.vue:186
+#: src/views/certificate/CertificateEditor.vue:188
 msgid "The path exists, but the file is not a private key"
 msgid "The path exists, but the file is not a private key"
 msgstr "路徑存在,但檔案不是金鑰"
 msgstr "路徑存在,但檔案不是金鑰"
 
 
@@ -2136,9 +2162,9 @@ msgstr "此自動憑證項目無效,請將其移除。"
 msgid "This certificate is managed by Nginx UI"
 msgid "This certificate is managed by Nginx UI"
 msgstr "此憑證由 Nginx UI 管理"
 msgstr "此憑證由 Nginx UI 管理"
 
 
-#: src/views/certificate/CertificateEditor.vue:155
-#: src/views/certificate/CertificateEditor.vue:169
-#: src/views/certificate/CertificateEditor.vue:184
+#: src/views/certificate/CertificateEditor.vue:157
+#: src/views/certificate/CertificateEditor.vue:171
+#: src/views/certificate/CertificateEditor.vue:186
 msgid "This field is required"
 msgid "This field is required"
 msgstr "此字段為必填項"
 msgstr "此字段為必填項"
 
 
@@ -2203,11 +2229,11 @@ msgid ""
 "password algorithm."
 "password algorithm."
 msgstr "TOTP 是一種使用基於時間的一次性密碼算法的多重因素驗證方法。"
 msgstr "TOTP 是一種使用基於時間的一次性密碼算法的多重因素驗證方法。"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:211
 msgid "Trash"
 msgid "Trash"
 msgstr "垃圾桶"
 msgstr "垃圾桶"
 
 
-#: src/components/2FA/use2FAModal.ts:71
+#: src/components/TwoFA/use2FAModal.ts:71
 msgid "Two-factor authentication required"
 msgid "Two-factor authentication required"
 msgstr "需要多重因素驗證"
 msgstr "需要多重因素驗證"
 
 
@@ -2222,7 +2248,7 @@ msgstr "類型"
 msgid "Update successfully"
 msgid "Update successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/views/certificate/ACMEUser.vue:53
+#: src/views/certificate/ACMEUser.vue:82
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/components/RightSettings.vue:86
@@ -2236,7 +2262,7 @@ msgstr "更新時間"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/routes/index.ts:284 src/views/environment/Environment.vue:50
+#: src/routes/index.ts:284 src/views/environment/Environment.vue:55
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 #: src/views/system/Upgrade.vue:145 src/views/system/Upgrade.vue:228
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升級"
 msgstr "升級"
@@ -2265,11 +2291,11 @@ msgstr "運作時間:"
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
-#: src/components/2FA/Authorization.vue:107
+#: src/components/TwoFA/Authorization.vue:107
 msgid "Use OTP"
 msgid "Use OTP"
 msgstr "使用一次性密碼"
 msgstr "使用一次性密碼"
 
 
-#: src/components/2FA/Authorization.vue:103
+#: src/components/TwoFA/Authorization.vue:103
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "使用恢復碼"
 msgstr "使用恢復碼"
 
 
@@ -2289,7 +2315,7 @@ msgstr "使用者名稱"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "使用者名稱 (*)"
 msgstr "使用者名稱 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:87
+#: src/views/certificate/ACMEUser.vue:116
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/certificate/CertificateList/certColumns.tsx:73
 #: src/views/domain/cert/CertInfo.vue:24
 #: src/views/domain/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
@@ -2308,11 +2334,11 @@ msgstr "檢視"
 msgid "View all notifications"
 msgid "View all notifications"
 msgstr "查看所有通知"
 msgstr "查看所有通知"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:183
 msgid "View Details"
 msgid "View Details"
 msgstr "查看詳情"
 msgstr "查看詳情"
 
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:270
 msgid "View Mode"
 msgid "View Mode"
 msgstr "查看模式"
 msgstr "查看模式"
 
 
@@ -2337,6 +2363,13 @@ msgstr ""
 "我們將從該檔案中刪除 HTTPChallenge 設定並重新載入 Nginx 設定檔案。你確定你要"
 "我們將從該檔案中刪除 HTTPChallenge 設定並重新載入 Nginx 設定檔案。你確定你要"
 "繼續嗎?"
 "繼續嗎?"
 
 
+#: src/views/certificate/ACMEUser.vue:78
+msgid ""
+"When Enabled, Nginx UI will automatically re-register users upon startup. "
+"Generally, do not enable this unless you are in a dev environment and using "
+"Pebble as CA."
+msgstr ""
+
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:27
 #: src/views/dashboard/ServerAnalytic.vue:368
 #: src/views/dashboard/ServerAnalytic.vue:368
 msgid "Writes"
 msgid "Writes"
@@ -2351,7 +2384,7 @@ msgid "Writing certificate to disk"
 msgstr "將憑證寫入磁碟"
 msgstr "將憑證寫入磁碟"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
-#: src/views/domain/ngx_conf/LocationEditor.vue:69
+#: src/views/domain/ngx_conf/LocationEditor.vue:89
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/AuthSettings.vue:103
 #: src/views/preference/BasicSettings.vue:100
 #: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
@@ -2423,10 +2456,6 @@ msgstr ""
 #~ msgid "Table"
 #~ msgid "Table"
 #~ msgstr "表格"
 #~ msgstr "表格"
 
 
-#, fuzzy
-#~ msgid "Leave blank will not change anything."
-#~ msgstr "留空表示不修改"
-
 #, fuzzy
 #, fuzzy
 #~ msgid "Auto Cert is enabled"
 #~ msgid "Auto Cert is enabled"
 #~ msgstr "自動憑證"
 #~ msgstr "自動憑證"

+ 30 - 1
app/src/views/certificate/ACMEUser.vue

@@ -4,7 +4,7 @@ import type { Column } from '@/components/StdDesign/types'
 import { StdCurd } from '@/components/StdDesign/StdDataDisplay'
 import { StdCurd } from '@/components/StdDesign/StdDataDisplay'
 import type { AcmeUser } from '@/api/acme_user'
 import type { AcmeUser } from '@/api/acme_user'
 import acme_user from '@/api/acme_user'
 import acme_user from '@/api/acme_user'
-import { input } from '@/components/StdDesign/StdDataEntry'
+import { input, switcher } from '@/components/StdDesign/StdDataEntry'
 import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
 import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
 import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
 import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
 
 
@@ -16,6 +16,9 @@ const columns: Column[] = [
     pithy: true,
     pithy: true,
     edit: {
     edit: {
       type: input,
       type: input,
+      config: {
+        required: true,
+      },
     },
     },
   }, {
   }, {
     title: () => $gettext('Email'),
     title: () => $gettext('Email'),
@@ -24,6 +27,9 @@ const columns: Column[] = [
     pithy: true,
     pithy: true,
     edit: {
     edit: {
       type: input,
       type: input,
+      config: {
+        required: true,
+      },
     },
     },
   }, {
   }, {
     title: () => $gettext('CA Dir'),
     title: () => $gettext('CA Dir'),
@@ -38,6 +44,19 @@ const columns: Column[] = [
         },
         },
       },
       },
     },
     },
+  }, {
+    title: () => $gettext('Proxy'),
+    dataIndex: 'proxy',
+    hiddenInTable: true,
+    edit: {
+      type: input,
+      hint: $gettext('Register a user or use this account to issue a certificate through an HTTP proxy.'),
+      config: {
+        placeholder() {
+          return $gettext('Leave blank if you don\'t need this.')
+        },
+      },
+    },
   }, {
   }, {
     title: () => $gettext('Status'),
     title: () => $gettext('Status'),
     dataIndex: ['registration', 'body', 'status'],
     dataIndex: ['registration', 'body', 'status'],
@@ -49,6 +68,16 @@ const columns: Column[] = [
     },
     },
     sortable: true,
     sortable: true,
     pithy: true,
     pithy: true,
+  }, {
+    title: () => $gettext('Register On Startup'),
+    dataIndex: 'register_on_startup',
+    hiddenInTable: true,
+    hiddenInDetail: true,
+    edit: {
+      type: switcher,
+      hint: $gettext('When Enabled, Nginx UI will automatically re-register users upon startup. '
+          + 'Generally, do not enable this unless you are in a dev environment and using Pebble as CA.'),
+    },
   }, {
   }, {
     title: () => $gettext('Updated at'),
     title: () => $gettext('Updated at'),
     dataIndex: 'updated_at',
     dataIndex: 'updated_at',

+ 2 - 1
internal/cert/cert.go

@@ -62,7 +62,8 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
 
 
 	// Skip TLS check
 	// Skip TLS check
 	if config.HTTPClient != nil {
 	if config.HTTPClient != nil {
-		t, err := transport.NewTransport()
+		t, err := transport.NewTransport(
+			transport.WithProxy(user.Proxy))
 		if err != nil {
 		if err != nil {
 			return
 			return
 		}
 		}

+ 1 - 0
internal/kernal/boot.go

@@ -29,6 +29,7 @@ func Boot() {
 		InitCryptoSecret,
 		InitCryptoSecret,
 		validation.Init,
 		validation.Init,
 		cache.Init,
 		cache.Init,
+		RegisterAcmeUser,
 	}
 	}
 
 
 	syncs := []func(){
 	syncs := []func(){

+ 21 - 0
internal/kernal/register_acme_user.go

@@ -0,0 +1,21 @@
+package kernal
+
+import (
+	"github.com/0xJacky/Nginx-UI/internal/logger"
+	"github.com/0xJacky/Nginx-UI/query"
+)
+
+func RegisterAcmeUser() {
+	a := query.AcmeUser
+	users, _ := a.Where(a.RegisterOnStartup.Is(true)).Find()
+	for _, user := range users {
+		err := user.Register()
+		if err != nil {
+			logger.Error(err)
+		}
+		_, err = a.Where(a.ID.Eq(user.ID)).Updates(user)
+		if err != nil {
+			logger.Error(err)
+		}
+	}
+}

+ 9 - 6
model/acme_user.go

@@ -18,11 +18,13 @@ type PrivateKey struct {
 
 
 type AcmeUser struct {
 type AcmeUser struct {
 	Model
 	Model
-	Name         string                `json:"name"`
-	Email        string                `json:"email"`
-	CADir        string                `json:"ca_dir"`
-	Registration registration.Resource `json:"registration" gorm:"serializer:json"`
-	Key          PrivateKey            `json:"-" gorm:"serializer:json"`
+	Name              string                `json:"name"`
+	Email             string                `json:"email"`
+	CADir             string                `json:"ca_dir"`
+	Registration      registration.Resource `json:"registration" gorm:"serializer:json"`
+	Key               PrivateKey            `json:"-" gorm:"serializer:json"`
+	Proxy             string                `json:"proxy"`
+	RegisterOnStartup bool                  `json:"register_on_startup"`
 }
 }
 
 
 func (u *AcmeUser) GetEmail() string {
 func (u *AcmeUser) GetEmail() string {
@@ -61,7 +63,8 @@ func (u *AcmeUser) Register() error {
 
 
 	// Skip TLS check
 	// Skip TLS check
 	if config.HTTPClient != nil {
 	if config.HTTPClient != nil {
-		t, err := transport.NewTransport()
+		t, err := transport.NewTransport(
+			transport.WithProxy(u.Proxy))
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}

+ 19 - 11
query/acme_users.gen.go

@@ -37,6 +37,8 @@ func newAcmeUser(db *gorm.DB, opts ...gen.DOOption) acmeUser {
 	_acmeUser.CADir = field.NewString(tableName, "ca_dir")
 	_acmeUser.CADir = field.NewString(tableName, "ca_dir")
 	_acmeUser.Registration = field.NewField(tableName, "registration")
 	_acmeUser.Registration = field.NewField(tableName, "registration")
 	_acmeUser.Key = field.NewField(tableName, "key")
 	_acmeUser.Key = field.NewField(tableName, "key")
+	_acmeUser.Proxy = field.NewString(tableName, "proxy")
+	_acmeUser.RegisterOnStartup = field.NewBool(tableName, "register_on_startup")
 
 
 	_acmeUser.fillFieldMap()
 	_acmeUser.fillFieldMap()
 
 
@@ -46,16 +48,18 @@ func newAcmeUser(db *gorm.DB, opts ...gen.DOOption) acmeUser {
 type acmeUser struct {
 type acmeUser struct {
 	acmeUserDo
 	acmeUserDo
 
 
-	ALL          field.Asterisk
-	ID           field.Int
-	CreatedAt    field.Time
-	UpdatedAt    field.Time
-	DeletedAt    field.Field
-	Name         field.String
-	Email        field.String
-	CADir        field.String
-	Registration field.Field
-	Key          field.Field
+	ALL               field.Asterisk
+	ID                field.Int
+	CreatedAt         field.Time
+	UpdatedAt         field.Time
+	DeletedAt         field.Field
+	Name              field.String
+	Email             field.String
+	CADir             field.String
+	Registration      field.Field
+	Key               field.Field
+	Proxy             field.String
+	RegisterOnStartup field.Bool
 
 
 	fieldMap map[string]field.Expr
 	fieldMap map[string]field.Expr
 }
 }
@@ -81,6 +85,8 @@ func (a *acmeUser) updateTableName(table string) *acmeUser {
 	a.CADir = field.NewString(table, "ca_dir")
 	a.CADir = field.NewString(table, "ca_dir")
 	a.Registration = field.NewField(table, "registration")
 	a.Registration = field.NewField(table, "registration")
 	a.Key = field.NewField(table, "key")
 	a.Key = field.NewField(table, "key")
+	a.Proxy = field.NewString(table, "proxy")
+	a.RegisterOnStartup = field.NewBool(table, "register_on_startup")
 
 
 	a.fillFieldMap()
 	a.fillFieldMap()
 
 
@@ -97,7 +103,7 @@ func (a *acmeUser) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
 }
 }
 
 
 func (a *acmeUser) fillFieldMap() {
 func (a *acmeUser) fillFieldMap() {
-	a.fieldMap = make(map[string]field.Expr, 9)
+	a.fieldMap = make(map[string]field.Expr, 11)
 	a.fieldMap["id"] = a.ID
 	a.fieldMap["id"] = a.ID
 	a.fieldMap["created_at"] = a.CreatedAt
 	a.fieldMap["created_at"] = a.CreatedAt
 	a.fieldMap["updated_at"] = a.UpdatedAt
 	a.fieldMap["updated_at"] = a.UpdatedAt
@@ -107,6 +113,8 @@ func (a *acmeUser) fillFieldMap() {
 	a.fieldMap["ca_dir"] = a.CADir
 	a.fieldMap["ca_dir"] = a.CADir
 	a.fieldMap["registration"] = a.Registration
 	a.fieldMap["registration"] = a.Registration
 	a.fieldMap["key"] = a.Key
 	a.fieldMap["key"] = a.Key
+	a.fieldMap["proxy"] = a.Proxy
+	a.fieldMap["register_on_startup"] = a.RegisterOnStartup
 }
 }
 
 
 func (a acmeUser) clone(db *gorm.DB) acmeUser {
 func (a acmeUser) clone(db *gorm.DB) acmeUser {